diff --git a/DEPS b/DEPS
index 5000e0e..72e89b9c 100644
--- a/DEPS
+++ b/DEPS
@@ -105,7 +105,7 @@
   # 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': 'df795638b9bd23d03bea7aafb4ecae221172631a',
+  'skia_revision': 'b8eeb808d84f7892fad9ce8ff6ce62c7fcacb217',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
@@ -113,11 +113,11 @@
   # 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.
-  'swarming_revision': '9a518d097dca20b7b00ce3bdfc5d418ccc79893a',
+  'swarming_revision': '486c9b53c4d54dd4b95bb6ce0e31160e600dfc11',
   # 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': 'ba365939b90c76e5692aa97d2825dea6fe8bb200',
+  'angle_revision': '522095f7d7fe04bf1479a20a9707372d988a9da2',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling build tools
   # and whatever else without interference from each other.
@@ -129,7 +129,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
-  'pdfium_revision': 'b907757c0db1d5e4ede21709c9e97cbeefc1e03a',
+  'pdfium_revision': '2bfa78540c375916ec9973f0ae11271b098180bd',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling openmax_dl
   # and whatever else without interference from each other.
@@ -165,7 +165,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling catapult
   # and whatever else without interference from each other.
-  'catapult_revision': '9e8a0b2b37d966544401445b117d192e1ec7f114',
+  'catapult_revision': '6a1002b4d937c97a958e28b63a34ac6fd591757a',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -539,7 +539,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '2c7a5d6a83b6dc798b44fa6b7eae99e75939fb61',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5bc35fd6c6315985505c2ab7157aae91e1b95a9e',
       'condition': 'checkout_linux',
   },
 
@@ -564,7 +564,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '7e3c67f2c3322f146e8e81fabb8d85dde1d04a3c',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '5ba1e9caeecb40a6ec7cc045e6850dbe65f79446',
 
   'src/third_party/devtools-node-modules':
     Var('chromium_git') + '/external/github.com/ChromeDevTools/devtools-node-modules' + '@' + Var('devtools_node_modules_revision'),
@@ -705,7 +705,7 @@
     Var('chromium_git') + '/chromium/deps/hunspell_dictionaries.git' + '@' + 'a9bac57ce6c9d390a52ebaad3259f5fdb871210e',
 
   'src/third_party/icu':
-    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + 'a9a2bd3ee4f1d313651c5272252aaf2a3e7ed529',
+    Var('chromium_git') + '/chromium/deps/icu.git' + '@' + '297a4dd02b9d36c92ab9b4f121e433c9c3bc14f8',
 
   'src/third_party/icu4j': {
       'packages': [
@@ -912,7 +912,7 @@
   },
 
   'src/third_party/perfetto':
-    Var('android_git') + '/platform/external/perfetto.git' + '@' +  '89f205cedfcf2cb37f72162cbee5d18c201b4f33',
+    Var('android_git') + '/platform/external/perfetto.git' + '@' +  'ee5a26d974beef5a5bdab7d6cf0e97785a7e1c48',
 
   'src/third_party/perl': {
       'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + 'ac0d98b5cee6c024b0cffeb4f8f45b6fc5ccdb78',
@@ -1034,7 +1034,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + '21dbf06b5aa6c7dc8cf56314d4a3f96f57956c53',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '94ef424b3160262f0f8298b8abd47c29bb9ee3da',
+    Var('webrtc_git') + '/src.git' + '@' + 'a76af0ca2e8c67db2d9d1423c2ca46dadc0aa5dd',
 
   'src/third_party/xdg-utils': {
       'url': Var('chromium_git') + '/chromium/deps/xdg-utils.git' + '@' + 'd80274d5869b17b8c9067a1022e4416ee7ed5e0d',
@@ -1078,7 +1078,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/android_arch_core_common',
-              'version': 'version:1.0.0-cr0',
+              'version': 'version:1.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1089,7 +1089,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/android_arch_lifecycle_common',
-              'version': 'version:1.0.0-cr0',
+              'version': 'version:1.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1100,7 +1100,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/android_arch_lifecycle_runtime',
-              'version': 'version:1.0.0-cr0',
+              'version': 'version:1.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1111,7 +1111,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_animated_vector_drawable',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1122,7 +1122,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_appcompat_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1133,7 +1133,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_cardview_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1144,7 +1144,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_design',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1155,7 +1155,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_gridlayout_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1166,7 +1166,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_leanback_v17',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1177,7 +1177,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_mediarouter_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1188,7 +1188,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_multidex',
-              'version': 'version:1.0.0-cr0',
+              'version': 'version:1.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1199,7 +1199,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_palette_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1210,7 +1210,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_preference_leanback_v17',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1221,7 +1221,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_preference_v14',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1232,7 +1232,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_preference_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1243,7 +1243,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_recyclerview_v7',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1254,7 +1254,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_annotations',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1265,7 +1265,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_compat',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1276,7 +1276,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_core_ui',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1287,7 +1287,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_core_utils',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1298,7 +1298,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_fragment',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1309,7 +1309,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_media_compat',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1320,7 +1320,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_v13',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1331,7 +1331,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_v4',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1342,7 +1342,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_support_vector_drawable',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
@@ -1353,7 +1353,7 @@
       'packages': [
           {
               'package': 'chromium/third_party/android_deps/repository/com_android_support_transition',
-              'version': 'version:27.0.0-cr0',
+              'version': 'version:27.0.0-cr1',
           },
       ],
       'condition': 'checkout_android',
diff --git a/WATCHLISTS b/WATCHLISTS
index 6ee0dd3..ca04813 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -87,6 +87,9 @@
     'android_webview': {
       'filepath': 'android_webview/',
     },
+    'animation_worklet': {
+      'filepath': 'third_party/blink/renderer/modules/animationworklet/',
+    },
     'app_list': {
       'filepath': 'ash/app_list'\
                   '|chrome/browser/ui/app_list'\
@@ -624,6 +627,9 @@
       'filepath': 'cc/'\
                   '|components/viz/'
     },
+    'cc-animation': {
+      'filepath': 'cc/animation/'
+    },
     'cc-contexts': {
       'filepath': 'components/viz/common/gpu'
     },
@@ -1708,6 +1714,8 @@
                              'gayane+watch@chromium.org'],
     'android_webapk': ['dominickn+watch-webapk@chromium.org'],
     'android_webview': ['android-webview-reviews@chromium.org'],
+    'animation_worklet': ['yigu@chromium.org',
+                          'majidvp@chromium.org'],
     'app_list': ['tfarina@chromium.org'],
     'app_shortcuts': ['loyso+watch@chromium.org',
                       'mgiuca+watch@chromium.org',
@@ -1960,6 +1968,8 @@
                      'mfoltz+watch@chromium.org',
                      'ryanchung+watch@chromium.org'],
     'cc': ['cc-bugs@chromium.org'],
+    'cc-animation': ['yigu@chromium.org',
+                     'majidvp@chromium.org'],
     'cc-contexts': ['danakj+watch@chromium.org'],
     'cc-display': ['danakj+watch@chromium.org'],
     'cc-paint': ['danakj+watch@chromium.org'],
diff --git a/android_webview/renderer/aw_url_loader_throttle_provider.cc b/android_webview/renderer/aw_url_loader_throttle_provider.cc
index 4d577bb..061bb1a4 100644
--- a/android_webview/renderer/aw_url_loader_throttle_provider.cc
+++ b/android_webview/renderer/aw_url_loader_throttle_provider.cc
@@ -82,4 +82,6 @@
   return throttles;
 }
 
+void AwURLLoaderThrottleProvider::SetOnline(bool is_online) {}
+
 }  // namespace android_webview
diff --git a/android_webview/renderer/aw_url_loader_throttle_provider.h b/android_webview/renderer/aw_url_loader_throttle_provider.h
index f0cbe60c..aed73c8 100644
--- a/android_webview/renderer/aw_url_loader_throttle_provider.h
+++ b/android_webview/renderer/aw_url_loader_throttle_provider.h
@@ -26,6 +26,7 @@
       int render_frame_id,
       const blink::WebURLRequest& request,
       content::ResourceType resource_type) override;
+  void SetOnline(bool is_online) override;
 
  private:
   // This copy constructor works in conjunction with Clone(), not intended for
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 8a3ee955..c72fb04 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -32,7 +32,6 @@
     "accelerators/accelerator_controller.h",
     "accelerators/accelerator_delegate.cc",
     "accelerators/accelerator_delegate.h",
-    "accelerators/accelerator_handler.h",
     "accelerators/accelerator_ids.h",
     "accelerators/accelerator_router.cc",
     "accelerators/accelerator_router.h",
@@ -249,8 +248,6 @@
     "drag_drop/drag_drop_tracker.h",
     "drag_drop/drag_image_view.cc",
     "drag_drop/drag_image_view.h",
-    "event_matcher_util.cc",
-    "event_matcher_util.h",
     "events/event_rewriter_controller.cc",
     "events/event_rewriter_controller.h",
     "events/keyboard_driven_event_rewriter.cc",
@@ -309,8 +306,6 @@
     "host/ash_window_tree_host_mirroring_delegate.h",
     "host/ash_window_tree_host_mirroring_unified.cc",
     "host/ash_window_tree_host_mirroring_unified.h",
-    "host/ash_window_tree_host_mus.cc",
-    "host/ash_window_tree_host_mus.h",
     "host/ash_window_tree_host_platform.cc",
     "host/ash_window_tree_host_platform.h",
     "host/ash_window_tree_host_unified.cc",
diff --git a/ash/accelerators/accelerator_handler.h b/ash/accelerators/accelerator_handler.h
deleted file mode 100644
index 661c725..0000000
--- a/ash/accelerators/accelerator_handler.h
+++ /dev/null
@@ -1,34 +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.
-
-#ifndef ASH_ACCELERATORS_ACCELERATOR_HANDLER_H_
-#define ASH_ACCELERATORS_ACCELERATOR_HANDLER_H_
-
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "base/containers/flat_map.h"
-#include "services/ui/public/interfaces/window_manager.mojom.h"
-
-namespace ash {
-
-// Used by WindowManager for handling accelerators. This is only used in mash.
-// TODO: this should no longer be necessary, remove. https://crbug.com/842365
-class AcceleratorHandler {
- public:
-  // See WindowManagerDelegate for details on |properties|.
-  virtual ui::mojom::EventResult OnAccelerator(
-      uint32_t id,
-      const ui::Event& event,
-      base::flat_map<std::string, std::vector<uint8_t>>* properties) = 0;
-
- protected:
-  virtual ~AcceleratorHandler() {}
-};
-
-}  // namespace ash
-
-#endif  // ASH_ACCELERATORS_ACCELERATOR_HANDLER_H_
diff --git a/ash/app_list/app_list_controller_impl.cc b/ash/app_list/app_list_controller_impl.cc
index 2cf87f90..f2ead80 100644
--- a/ash/app_list/app_list_controller_impl.cc
+++ b/ash/app_list/app_list_controller_impl.cc
@@ -93,20 +93,19 @@
 
 void AppListControllerImpl::AddItem(AppListItemMetadataPtr item_data) {
   const std::string folder_id = item_data->folder_id;
-  if (folder_id.empty()) {
+  if (folder_id.empty())
     model_.AddItem(CreateAppListItem(std::move(item_data)));
-  } else {
-    // When we're setting a whole model of a profile, each item may have its
-    // folder id set properly. However, |AppListModel::AddItemToFolder| requires
-    // the item to add is not in the target folder yet, and sets its folder id
-    // later. So we should clear the folder id here to avoid breaking checks.
-    item_data->folder_id.clear();
+  else
     AddItemToFolder(std::move(item_data), folder_id);
-  }
 }
 
 void AppListControllerImpl::AddItemToFolder(AppListItemMetadataPtr item_data,
                                             const std::string& folder_id) {
+  // When we're setting a whole model of a profile, each item may have its
+  // folder id set properly. However, |AppListModel::AddItemToFolder| requires
+  // the item to add is not in the target folder yet, and sets its folder id
+  // later. So we should clear the folder id here to avoid breaking checks.
+  item_data->folder_id.clear();
   model_.AddItemToFolder(CreateAppListItem(std::move(item_data)), folder_id);
 }
 
diff --git a/ash/app_list/views/app_list_main_view.cc b/ash/app_list/views/app_list_main_view.cc
index 7fc429c..2c979af 100644
--- a/ash/app_list/views/app_list_main_view.cc
+++ b/ash/app_list/views/app_list_main_view.cc
@@ -168,12 +168,30 @@
   base::string16 raw_query = search_model_->search_box()->text();
   base::string16 query;
   base::TrimWhitespace(raw_query, base::TRIM_ALL, &query);
-  bool should_show_search = !query.empty();
+  bool should_show_search =
+      features::IsZeroStateSuggestionsEnabled()
+          ? search_box_view_->is_search_box_active() || !query.empty()
+          : !query.empty();
   contents_view_->ShowSearchResults(should_show_search);
 
   delegate_->StartSearch(raw_query);
 }
 
+void AppListMainView::ActiveChanged(search_box::SearchBoxViewBase* sender) {
+  if (!features::IsZeroStateSuggestionsEnabled())
+    return;
+
+  // Show zero state suggestions when search box is activated with an empty
+  // query.
+  if (search_box_view_->is_search_box_active()) {
+    base::string16 raw_query = search_model_->search_box()->text();
+    base::string16 query;
+    base::TrimWhitespace(raw_query, base::TRIM_ALL, &query);
+    if (query.empty())
+      search_box_view_->ShowZeroStateSuggestions();
+  }
+}
+
 void AppListMainView::BackButtonPressed() {
   if (!contents_view_->Back())
     app_list_view_->Dismiss();
diff --git a/ash/app_list/views/app_list_main_view.h b/ash/app_list/views/app_list_main_view.h
index 625b8bd..cabc99b8b 100644
--- a/ash/app_list/views/app_list_main_view.h
+++ b/ash/app_list/views/app_list_main_view.h
@@ -91,7 +91,7 @@
   // Overridden from SearchBoxViewDelegate:
   void QueryChanged(search_box::SearchBoxViewBase* sender) override;
   void BackButtonPressed() override;
-  void ActiveChanged(search_box::SearchBoxViewBase* sender) override {}
+  void ActiveChanged(search_box::SearchBoxViewBase* sender) override;
 
   AppListViewDelegate* delegate_;  // Owned by parent view (AppListView).
   AppListModel* model_;        // Unowned; ownership is handled by |delegate_|.
diff --git a/ash/app_list/views/app_list_view.cc b/ash/app_list/views/app_list_view.cc
index 875874b6..840c1904 100644
--- a/ash/app_list/views/app_list_view.cc
+++ b/ash/app_list/views/app_list_view.cc
@@ -1277,26 +1277,51 @@
   app_list_main_view_->contents_view()->FadeOutOnClose(animation_duration);
 }
 
-void AppListView::SetStateFromSearchBoxView(bool search_box_is_empty) {
+void AppListView::SetStateFromSearchBoxView(bool search_box_is_empty,
+                                            bool triggered_by_contents_change) {
   switch (app_list_state_) {
     case AppListViewState::PEEKING:
-      if (!search_box_is_empty)
-        SetState(AppListViewState::HALF);
+      if (features::IsZeroStateSuggestionsEnabled()) {
+        if (!search_box_is_empty || search_box_view()->is_search_box_active())
+          SetState(AppListViewState::HALF);
+      } else {
+        if (!search_box_is_empty)
+          SetState(AppListViewState::HALF);
+      }
       break;
     case AppListViewState::HALF:
-      if (search_box_is_empty)
-        SetState(AppListViewState::PEEKING);
+      if (features::IsZeroStateSuggestionsEnabled()) {
+        if (search_box_is_empty && !triggered_by_contents_change)
+          SetState(AppListViewState::PEEKING);
+      } else {
+        if (search_box_is_empty)
+          SetState(AppListViewState::PEEKING);
+      }
       break;
     case AppListViewState::FULLSCREEN_SEARCH:
-      if (search_box_is_empty) {
-        SetState(AppListViewState::FULLSCREEN_ALL_APPS);
-        app_list_main_view()->contents_view()->SetActiveState(
-            ash::AppListState::kStateApps);
+      if (features::IsZeroStateSuggestionsEnabled()) {
+        if (search_box_is_empty && !triggered_by_contents_change) {
+          SetState(AppListViewState::FULLSCREEN_ALL_APPS);
+          app_list_main_view()->contents_view()->SetActiveState(
+              ash::AppListState::kStateApps);
+        }
+      } else {
+        if (search_box_is_empty) {
+          SetState(AppListViewState::FULLSCREEN_ALL_APPS);
+          app_list_main_view()->contents_view()->SetActiveState(
+              ash::AppListState::kStateApps);
+        }
       }
       break;
     case AppListViewState::FULLSCREEN_ALL_APPS:
-      if (!search_box_is_empty)
-        SetState(AppListViewState::FULLSCREEN_SEARCH);
+      if (features::IsZeroStateSuggestionsEnabled()) {
+        if (!search_box_is_empty ||
+            (search_box_is_empty && triggered_by_contents_change))
+          SetState(AppListViewState::FULLSCREEN_SEARCH);
+      } else {
+        if (!search_box_is_empty)
+          SetState(AppListViewState::FULLSCREEN_SEARCH);
+      }
       break;
     case AppListViewState::CLOSED:
       NOTREACHED();
diff --git a/ash/app_list/views/app_list_view.h b/ash/app_list/views/app_list_view.h
index 715889d..bb10702d 100644
--- a/ash/app_list/views/app_list_view.h
+++ b/ash/app_list/views/app_list_view.h
@@ -165,7 +165,8 @@
 
   // Changes the app list state depending on the current |app_list_state_| and
   // whether the search box is empty.
-  void SetStateFromSearchBoxView(bool search_box_is_empty);
+  void SetStateFromSearchBoxView(bool search_box_is_empty,
+                                 bool triggered_by_contents_change);
 
   // Updates y position and opacity of app list.
   void UpdateYPositionAndOpacity(int y_position_in_screen,
diff --git a/ash/app_list/views/apps_container_view.cc b/ash/app_list/views/apps_container_view.cc
index 6dfb87e..378ac931 100644
--- a/ash/app_list/views/apps_container_view.cc
+++ b/ash/app_list/views/apps_container_view.cc
@@ -441,6 +441,8 @@
     case SHOW_APPS:
       folder_background_view_->SetVisible(false);
       apps_grid_view_->ResetForShowApps();
+      if (is_new_style_launcher_enabled_)
+        UpdateSuggestionChips();
       if (show_apps_with_animation)
         app_list_folder_view_->ScheduleShowHideAnimation(false, false);
       else
diff --git a/ash/app_list/views/search_box_view.cc b/ash/app_list/views/search_box_view.cc
index 388994f..f687a06 100644
--- a/ash/app_list/views/search_box_view.cc
+++ b/ash/app_list/views/search_box_view.cc
@@ -20,6 +20,7 @@
 #include "ash/app_list/views/search_result_page_view.h"
 #include "ash/public/cpp/app_list/app_list_config.h"
 #include "ash/public/cpp/app_list/app_list_constants.h"
+#include "ash/public/cpp/app_list/app_list_features.h"
 #include "ash/public/cpp/app_list/vector_icons/vector_icons.h"
 #include "ash/public/cpp/wallpaper_types.h"
 #include "base/macros.h"
@@ -81,6 +82,8 @@
       app_list_view_(app_list_view),
       weak_ptr_factory_(this) {
   set_is_tablet_mode(app_list_view->is_tablet_mode());
+  if (features::IsZeroStateSuggestionsEnabled())
+    set_show_close_button_when_active(true);
 }
 
 SearchBoxView::~SearchBoxView() {
@@ -89,7 +92,8 @@
 
 void SearchBoxView::ClearSearch() {
   search_box::SearchBoxViewBase::ClearSearch();
-  app_list_view_->SetStateFromSearchBoxView(true);
+  app_list_view_->SetStateFromSearchBoxView(
+      true, false /*triggered_by_contents_change*/);
 }
 
 views::View* SearchBoxView::GetSelectedViewInContentsView() {
@@ -288,6 +292,11 @@
       should_restore_opacity ? 1.0f : opacity);
 }
 
+void SearchBoxView::ShowZeroStateSuggestions() {
+  base::string16 empty_query;
+  ContentsChanged(search_box(), empty_query);
+}
+
 void SearchBoxView::GetWallpaperProminentColors(
     AppListViewDelegate::GetWallpaperProminentColorsCallback callback) {
   view_delegate_->GetWallpaperProminentColors(std::move(callback));
@@ -315,7 +324,8 @@
 void SearchBoxView::ContentsChanged(views::Textfield* sender,
                                     const base::string16& new_contents) {
   search_box::SearchBoxViewBase::ContentsChanged(sender, new_contents);
-  app_list_view_->SetStateFromSearchBoxView(IsSearchBoxTrimmedQueryEmpty());
+  app_list_view_->SetStateFromSearchBoxView(
+      IsSearchBoxTrimmedQueryEmpty(), true /*triggered_by_contents_change*/);
 }
 
 bool SearchBoxView::HandleKeyEvent(views::Textfield* sender,
@@ -355,6 +365,18 @@
   return search_box::SearchBoxViewBase::HandleMouseEvent(sender, mouse_event);
 }
 
+void SearchBoxView::ButtonPressed(views::Button* sender,
+                                  const ui::Event& event) {
+  search_box::SearchBoxViewBase::ButtonPressed(sender, event);
+
+  if (!features::IsZeroStateSuggestionsEnabled())
+    return;
+
+  if (close_button() && sender == close_button()) {
+    SetSearchBoxActive(false);
+  }
+}
+
 void SearchBoxView::HintTextChanged() {
   const app_list::SearchBoxModel* search_box_model =
       search_model_->search_box();
diff --git a/ash/app_list/views/search_box_view.h b/ash/app_list/views/search_box_view.h
index 34fef39..a850f6c 100644
--- a/ash/app_list/views/search_box_view.h
+++ b/ash/app_list/views/search_box_view.h
@@ -49,7 +49,10 @@
   void SetupBackButton() override;
 
   // Overridden from views::View:
-  void OnKeyEvent(ui::KeyEvent* evetn) override;
+  void OnKeyEvent(ui::KeyEvent* event) override;
+
+  // Overridden from views::ButtonListener:
+  void ButtonPressed(views::Button* sender, const ui::Event& event) override;
 
   // Updates the search box's background corner radius and color based on the
   // state of AppListModel.
@@ -71,6 +74,9 @@
   // Updates the opacity of the searchbox.
   void UpdateOpacity();
 
+  // Shows Zero State suggestions.
+  void ShowZeroStateSuggestions();
+
   // Called when the wallpaper colors change.
   void OnWallpaperColorsChanged();
 
diff --git a/ash/app_list/views/search_result_suggestion_chip_view.cc b/ash/app_list/views/search_result_suggestion_chip_view.cc
index 9e5bced7..9d8d6c2 100644
--- a/ash/app_list/views/search_result_suggestion_chip_view.cc
+++ b/ash/app_list/views/search_result_suggestion_chip_view.cc
@@ -31,24 +31,25 @@
     : view_delegate_(view_delegate), weak_ptr_factory_(this) {}
 
 SearchResultSuggestionChipView::~SearchResultSuggestionChipView() {
-  DiscardItem();
+  SetSearchResult(nullptr);
 }
 
 void SearchResultSuggestionChipView::SetSearchResult(SearchResult* item) {
-  // Replace old item with new item.
-  DiscardItem();
-
-  if (!item)
+  if (item == item_)
     return;
+
+  // Replace old item with new item.
+  if (item_)
+    item_->RemoveObserver(this);
   item_ = item;
+  if (item_)
+    item_->AddObserver(this);
 
-  item_->AddObserver(this);
+  UpdateSuggestionChipView();
+}
 
-  app_list::SuggestionChipView::Params params;
-  params.text = item->title();
-  params.icon = item->icon();
-  suggestion_chip_view_ = new SuggestionChipView(params, /* listener */ this);
-  AddChildView(suggestion_chip_view_);
+void SearchResultSuggestionChipView::OnMetadataChanged() {
+  UpdateSuggestionChipView();
 }
 
 void SearchResultSuggestionChipView::OnResultDestroying() {
@@ -83,14 +84,21 @@
   return suggestion_chip_view_->GetPreferredSize();
 }
 
-void SearchResultSuggestionChipView::DiscardItem() {
-  delete suggestion_chip_view_;
-  suggestion_chip_view_ = nullptr;
+void SearchResultSuggestionChipView::UpdateSuggestionChipView() {
+  if (!item_)
+    return;
 
-  if (item_)
-    item_->RemoveObserver(this);
+  if (suggestion_chip_view_) {
+    suggestion_chip_view_->SetIcon(item_->icon());
+    suggestion_chip_view_->SetText(item_->title());
+    return;
+  }
 
-  item_ = nullptr;
+  app_list::SuggestionChipView::Params params;
+  params.text = item_->title();
+  params.icon = item_->icon();
+  suggestion_chip_view_ = new SuggestionChipView(params, /* listener */ this);
+  AddChildView(suggestion_chip_view_);
 }
 
 }  // namespace app_list
diff --git a/ash/app_list/views/search_result_suggestion_chip_view.h b/ash/app_list/views/search_result_suggestion_chip_view.h
index 3d33481d..97731a3 100644
--- a/ash/app_list/views/search_result_suggestion_chip_view.h
+++ b/ash/app_list/views/search_result_suggestion_chip_view.h
@@ -28,6 +28,7 @@
   void SetSearchResult(SearchResult* item);
 
   // SearchResultObserver:
+  void OnMetadataChanged() override;
   void OnResultDestroying() override;
 
   // views::ButtonListener:
@@ -39,8 +40,8 @@
   gfx::Size CalculatePreferredSize() const override;
 
  private:
-  // Remove the search result item.
-  void DiscardItem();
+  // Updates the suggestion chip view's title and icon.
+  void UpdateSuggestionChipView();
 
   AppListViewDelegate* const view_delegate_;  // Owned by AppListView.
 
diff --git a/ash/app_list/views/search_result_tile_item_list_view.cc b/ash/app_list/views/search_result_tile_item_list_view.cc
index 683de43e..7f76cb6 100644
--- a/ash/app_list/views/search_result_tile_item_list_view.cc
+++ b/ash/app_list/views/search_result_tile_item_list_view.cc
@@ -67,7 +67,8 @@
     }
 
     SearchResultTileItemView* tile_item = new SearchResultTileItemView(
-        view_delegate, nullptr /* pagination model */);
+        view_delegate, nullptr /* pagination model */,
+        false /* show_in_apps_page */);
     tile_item->SetParentBackgroundColor(kCardBackgroundColor);
     tile_views_.push_back(tile_item);
     AddChildView(tile_item);
@@ -91,10 +92,18 @@
 }
 
 int SearchResultTileItemListView::DoUpdate() {
+  base::string16 raw_query = search_box_->text();
+  base::string16 query;
+  base::TrimWhitespace(raw_query, base::TRIM_ALL, &query);
+
+  SearchResult::DisplayType display_type =
+      features::IsZeroStateSuggestionsEnabled()
+          ? (query.empty() ? ash::SearchResultDisplayType::kRecommendation
+                           : ash::SearchResultDisplayType::kTile)
+          : ash::SearchResultDisplayType::kTile;
   std::vector<SearchResult*> display_results =
-      SearchModel::FilterSearchResultsByDisplayType(
-          results(), ash::SearchResultDisplayType::kTile,
-          kMaxNumSearchResultTiles);
+      SearchModel::FilterSearchResultsByDisplayType(results(), display_type,
+                                                    kMaxNumSearchResultTiles);
 
   SearchResult::ResultType previous_type = ash::SearchResultType::kUnknown;
 
diff --git a/ash/app_list/views/search_result_tile_item_view.cc b/ash/app_list/views/search_result_tile_item_view.cc
index 60a1db6..aa981de4 100644
--- a/ash/app_list/views/search_result_tile_item_view.cc
+++ b/ash/app_list/views/search_result_tile_item_view.cc
@@ -88,11 +88,13 @@
 
 SearchResultTileItemView::SearchResultTileItemView(
     AppListViewDelegate* view_delegate,
-    PaginationModel* pagination_model)
+    PaginationModel* pagination_model,
+    bool show_in_apps_page)
     : view_delegate_(view_delegate),
       pagination_model_(pagination_model),
       is_play_store_app_search_enabled_(
           features::IsPlayStoreAppSearchEnabled()),
+      show_in_apps_page_(show_in_apps_page),
       weak_ptr_factory_(this) {
   SetFocusBehavior(FocusBehavior::ALWAYS);
 
@@ -181,12 +183,11 @@
   SetPrice(item_->formatted_price());
 
   const gfx::FontList& font = AppListConfig::instance().app_title_font();
-  if (IsSuggestedAppTile()) {
+  if (IsSuggestedAppTileShownInAppPage()) {
     title_->SetFontList(font);
     title_->SetLineHeight(font.GetHeight());
     title_->SetEnabledColor(AppListConfig::instance().grid_title_color());
   } else {
-    DCHECK_EQ(ash::SearchResultDisplayType::kTile, item_->display_type());
     // Set solid color background to avoid broken text. See crbug.com/746563.
     if (rating_) {
       rating_->SetBackground(
@@ -203,7 +204,8 @@
 
   title_->SetMaxLines(2);
   title_->SetMultiLine(
-      item_->display_type() == ash::SearchResultDisplayType::kTile &&
+      (item_->display_type() == ash::SearchResultDisplayType::kTile ||
+       (IsSuggestedAppTile() && !show_in_apps_page_)) &&
       item_->result_type() == ash::SearchResultType::kInstalledApp);
 
   // If the new icon is null, it's being decoded asynchronously. Not updating it
@@ -280,7 +282,7 @@
       view_delegate_->GetModel()->state() == ash::AppListState::kStateApps) {
     // Go back to first page when app in suggestions container is focused.
     pagination_model_->SelectPage(0, false);
-  } else if (!IsSuggestedAppTile()) {
+  } else {
     ScrollRectToVisible(GetLocalBounds());
   }
   SetBackgroundHighlighted(true);
@@ -305,14 +307,13 @@
   cc::PaintFlags flags;
   flags.setAntiAlias(true);
   flags.setStyle(cc::PaintFlags::kFill_Style);
-  if (IsSuggestedAppTile()) {
+  if (IsSuggestedAppTileShownInAppPage()) {
     rect.ClampToCenteredSize(AppListConfig::instance().grid_focus_size());
     flags.setColor(kGridSelectedColor);
     canvas->DrawRoundRect(gfx::RectF(rect),
                           AppListConfig::instance().grid_focus_corner_radius(),
                           flags);
   } else {
-    DCHECK(item_->display_type() == ash::SearchResultDisplayType::kTile);
     const int kLeftRightPadding = (rect.width() - kIconSelectedSize) / 2;
     rect.Inset(kLeftRightPadding, 0);
     rect.set_height(kIconSelectedSize);
@@ -492,6 +493,10 @@
          item_->display_type() == ash::SearchResultDisplayType::kRecommendation;
 }
 
+bool SearchResultTileItemView::IsSuggestedAppTileShownInAppPage() const {
+  return IsSuggestedAppTile() && show_in_apps_page_;
+}
+
 void SearchResultTileItemView::LogAppLaunch() const {
   // Only log the app launch if the class is being used as a suggested app.
   if (!IsSuggestedAppTile())
@@ -515,13 +520,12 @@
   if (rect.IsEmpty() || !item_)
     return;
 
-  if (IsSuggestedAppTile()) {
+  if (IsSuggestedAppTileShownInAppPage()) {
     icon_->SetBoundsRect(AppListItemView::GetIconBoundsForTargetViewBounds(
         rect, icon_->GetImage().size()));
     title_->SetBoundsRect(AppListItemView::GetTitleBoundsForTargetViewBounds(
         rect, title_->GetPreferredSize()));
   } else {
-    DCHECK(item_->display_type() == ash::SearchResultDisplayType::kTile);
     rect.Inset(0, kSearchTileTopPadding, 0, 0);
     icon_->SetBoundsRect(rect);
 
@@ -582,12 +586,11 @@
   if (!item_)
     return gfx::Size();
 
-  if (IsSuggestedAppTile()) {
+  if (IsSuggestedAppTileShownInAppPage()) {
     return gfx::Size(AppListConfig::instance().grid_tile_width(),
                      AppListConfig::instance().grid_tile_height());
   }
 
-  DCHECK(item_->display_type() == ash::SearchResultDisplayType::kTile);
   return gfx::Size(kSearchTileWidth, kSearchTileHeight);
 }
 
diff --git a/ash/app_list/views/search_result_tile_item_view.h b/ash/app_list/views/search_result_tile_item_view.h
index 655400f..e40b6c4 100644
--- a/ash/app_list/views/search_result_tile_item_view.h
+++ b/ash/app_list/views/search_result_tile_item_view.h
@@ -34,7 +34,8 @@
       public AppListMenuModelAdapter::Delegate {
  public:
   SearchResultTileItemView(AppListViewDelegate* view_delegate,
-                           PaginationModel* pagination_model);
+                           PaginationModel* pagination_model,
+                           bool show_in_apps_page);
   ~SearchResultTileItemView() override;
 
   SearchResult* result() { return item_; }
@@ -88,6 +89,8 @@
 
   // Whether the tile view is a suggested app.
   bool IsSuggestedAppTile() const;
+  // Whether the tile view is a suggested app and shown in apps page ui.
+  bool IsSuggestedAppTileShownInAppPage() const;
 
   // Records an app being launched.
   void LogAppLaunch() const;
@@ -117,6 +120,7 @@
   SkColor parent_background_color_ = SK_ColorTRANSPARENT;
 
   const bool is_play_store_app_search_enabled_;
+  const bool show_in_apps_page_;  // True if shown in app list's apps page.
 
   std::unique_ptr<AppListMenuModelAdapter> context_menu_;
 
diff --git a/ash/app_list/views/suggestion_chip_container_view.cc b/ash/app_list/views/suggestion_chip_container_view.cc
index fa2cb268..eeafb2b 100644
--- a/ash/app_list/views/suggestion_chip_container_view.cc
+++ b/ash/app_list/views/suggestion_chip_container_view.cc
@@ -65,6 +65,7 @@
     suggestion_chip_views.emplace_back(chip);
   }
 
+  Layout();
   return num_results();
 }
 
diff --git a/ash/app_list/views/suggestion_chip_view.cc b/ash/app_list/views/suggestion_chip_view.cc
index bb4f1e4..f25d913 100644
--- a/ash/app_list/views/suggestion_chip_view.cc
+++ b/ash/app_list/views/suggestion_chip_view.cc
@@ -195,6 +195,10 @@
   icon_view_->SetVisible(true);
 }
 
+void SuggestionChipView::SetText(const base::string16& text) {
+  text_view_->SetText(text);
+}
+
 const base::string16& SuggestionChipView::GetText() const {
   return text_view_->text();
 }
diff --git a/ash/app_list/views/suggestion_chip_view.h b/ash/app_list/views/suggestion_chip_view.h
index 59b1b8e..3699191 100644
--- a/ash/app_list/views/suggestion_chip_view.h
+++ b/ash/app_list/views/suggestion_chip_view.h
@@ -58,6 +58,7 @@
 
   void SetIcon(const gfx::ImageSkia& icon);
 
+  void SetText(const base::string16& text);
   const base::string16& GetText() const;
 
  private:
diff --git a/ash/app_list/views/suggestions_container_view.cc b/ash/app_list/views/suggestions_container_view.cc
index ae7d246..966aba32 100644
--- a/ash/app_list/views/suggestions_container_view.cc
+++ b/ash/app_list/views/suggestions_container_view.cc
@@ -110,8 +110,8 @@
   tiles_layout_manager->StartRow(0, 0);
   DCHECK_LE(apps_num, kNumStartPageTiles);
   for (; i < apps_num; ++i) {
-    SearchResultTileItemView* tile_item =
-        new SearchResultTileItemView(view_delegate_, pagination_model_);
+    SearchResultTileItemView* tile_item = new SearchResultTileItemView(
+        view_delegate_, pagination_model_, true /* show_in_apps_page */);
     tiles_layout_manager->AddView(tile_item);
     AddChildView(tile_item);
     tile_item->SetParentBackgroundColor(kLabelBackgroundColor);
diff --git a/ash/ash_service_unittest.cc b/ash/ash_service_unittest.cc
index 566b258e..66bf8bb3 100644
--- a/ash/ash_service_unittest.cc
+++ b/ash/ash_service_unittest.cc
@@ -14,6 +14,7 @@
 #include "base/run_loop.h"
 #include "services/service_manager/public/cpp/service_test.h"
 #include "services/ui/public/cpp/property_type_converters.h"
+#include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "services/ui/public/interfaces/window_tree.mojom.h"
 #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
 #include "ui/aura/env.h"
@@ -137,7 +138,7 @@
   std::unique_ptr<aura::WindowTreeClient> child_client =
       aura::WindowTreeClient::CreateForEmbedding(
           connector(), &window_tree_delegate, std::move(tree_client_request),
-          false, aura::WindowTreeClient::Config::kMus2);
+          false);
   window_tree_delegate.WaitForEmbed();
   ASSERT_TRUE(!child_client->GetRoots().empty());
   window_tree_delegate.DestroyWindowTreeHost();
diff --git a/ash/components/autoclick/autoclick_application.cc b/ash/components/autoclick/autoclick_application.cc
index 01e55fb2..1bd3e97 100644
--- a/ash/components/autoclick/autoclick_application.cc
+++ b/ash/components/autoclick/autoclick_application.cc
@@ -16,6 +16,7 @@
 #include "services/ui/public/cpp/property_type_converters.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
 #include "services/ui/public/interfaces/event_injector.mojom.h"
+#include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/base/ui_base_types.h"
diff --git a/ash/components/strings/ash_components_strings_hi.xtb b/ash/components/strings/ash_components_strings_hi.xtb
index ff3ce32f..ffc6a26 100644
--- a/ash/components/strings/ash_components_strings_hi.xtb
+++ b/ash/components/strings/ash_components_strings_hi.xtb
@@ -67,7 +67,7 @@
 <translation id="344577624355799426"><ph name="ALT" /> या <ph name="SEARCH" /><ph name="SEPARATOR" /><ph name="DOWN" /></translation>
 <translation id="353037708190149633">अपनी अभी वाली विंडो में खुले सभी पेज नए फ़ोल्डर में बुकमार्क के रूप में सेव करें</translation>
 <translation id="355103131818127604">लिंक को बैकग्राउंड में नए टैब में खोलें</translation>
-<translation id="3622741593887335780">'ज़ूम इन करें' (डॉक किए जाने या फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा चालू किए जाने पर)</translation>
+<translation id="3622741593887335780">ज़ूम इन करें (डॉक किए जाने या फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा चालू किए जाने पर)</translation>
 <translation id="3649256019230929621">विंडो को छोटा करें</translation>
 <translation id="3655154169297074232">टैब और विंडो</translation>
 <translation id="3668361878347172356">अपनी पिछली कार्रवाई फिर से करें</translation>
@@ -136,7 +136,7 @@
 <translation id="6425378783626925378">अपनी अलमारी पर 1-8 आइकॉन पर क्लिक करें</translation>
 <translation id="6435207348963613811">अपनी अलमारी पर पिछला आइटम हाइलाइट करें</translation>
 <translation id="6445033640292336367">टैब को उसकी मूल जगह पर वापस ले जाएं</translation>
-<translation id="6474744297082284761">'ज़ूम घटाएं' (डॉक किए जाने या फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा चालू किए जाने पर)</translation>
+<translation id="6474744297082284761">ज़ूम घटाएं (डॉक किए जाने या फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा चालू किए जाने पर)</translation>
 <translation id="649811797655257835">फ़ाइल चुनें, फिर <ph name="SPACE" /> दबाएं</translation>
 <translation id="6556040137485212400">उस विंडो को खोलें जिसका सबसे लंबे समय से इस्तेमाल नहीं किया गया है</translation>
 <translation id="666343722268997814">हाइलाइट किए गए आइटम के लिए राइट-क्लिक मेन्यू खोलें</translation>
diff --git a/ash/components/tap_visualizer/tap_visualizer_app.cc b/ash/components/tap_visualizer/tap_visualizer_app.cc
index d096081..d70edf5 100644
--- a/ash/components/tap_visualizer/tap_visualizer_app.cc
+++ b/ash/components/tap_visualizer/tap_visualizer_app.cc
@@ -12,6 +12,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "services/service_manager/public/cpp/service_context.h"
 #include "services/ui/public/cpp/property_type_converters.h"
+#include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "services/ui/public/interfaces/window_tree_constants.mojom.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/display/display.h"
diff --git a/ash/display/mirror_window_controller.cc b/ash/display/mirror_window_controller.cc
index 1b8a139e4..5522c46 100644
--- a/ash/display/mirror_window_controller.cc
+++ b/ash/display/mirror_window_controller.cc
@@ -219,22 +219,19 @@
       host_info->ash_host->SetRootWindowTransformer(std::move(transformer));
       mirror_window->SetBounds(host->window()->bounds());
       mirror_window->Show();
-      // The classic config creates the accelerated widget synchronously. Mus
-      // (without viz) creates the reflector in OnAcceleratedWidgetOverridden.
-      if (host->GetAcceleratedWidget() != gfx::kNullAcceleratedWidget) {
-        DCHECK_EQ(Shell::GetAshConfig(), Config::CLASSIC);
-        if (reflector_) {
-          reflector_->AddMirroringLayer(mirror_window->layer());
-        } else if (aura::Env::GetInstance()->context_factory_private()) {
-          reflector_ =
-              aura::Env::GetInstance()
-                  ->context_factory_private()
-                  ->CreateReflector(
-                      Shell::GetRootWindowForDisplayId(reflecting_source_id_)
-                          ->GetHost()
-                          ->compositor(),
-                      mirror_window->layer());
-        }
+      // The accelerated widget is created synchronously.
+      DCHECK_NE(gfx::kNullAcceleratedWidget, host->GetAcceleratedWidget());
+      if (reflector_) {
+        reflector_->AddMirroringLayer(mirror_window->layer());
+      } else if (aura::Env::GetInstance()->context_factory_private()) {
+        reflector_ =
+            aura::Env::GetInstance()
+                ->context_factory_private()
+                ->CreateReflector(
+                    Shell::GetRootWindowForDisplayId(reflecting_source_id_)
+                        ->GetHost()
+                        ->compositor(),
+                    mirror_window->layer());
       }
     } else {
       AshWindowTreeHost* ash_host =
@@ -334,22 +331,6 @@
   }
 }
 
-void MirrorWindowController::OnAcceleratedWidgetOverridden(
-    aura::WindowTreeHost* host) {
-  DCHECK_NE(host->GetAcceleratedWidget(), gfx::kNullAcceleratedWidget);
-  DCHECK_NE(Shell::GetAshConfig(), Config::CLASSIC);
-  DCHECK(!base::FeatureList::IsEnabled(features::kMashDeprecated));
-  MirroringHostInfo* info = mirroring_host_info_map_[host->GetDisplayId()];
-  if (reflector_) {
-    reflector_->AddMirroringLayer(info->mirror_window->layer());
-  } else if (aura::Env::GetInstance()->context_factory_private()) {
-    reflector_ =
-        aura::Env::GetInstance()->context_factory_private()->CreateReflector(
-            Shell::GetPrimaryRootWindow()->GetHost()->compositor(),
-            info->mirror_window->layer());
-  }
-}
-
 display::Display MirrorWindowController::GetDisplayForRootWindow(
     const aura::Window* root) const {
   for (const auto& pair : mirroring_host_info_map_) {
diff --git a/ash/display/mirror_window_controller.h b/ash/display/mirror_window_controller.h
index 5e07030..20f298e0 100644
--- a/ash/display/mirror_window_controller.h
+++ b/ash/display/mirror_window_controller.h
@@ -63,7 +63,6 @@
 
   // aura::WindowTreeHostObserver overrides:
   void OnHostResized(aura::WindowTreeHost* host) override;
-  void OnAcceleratedWidgetOverridden(aura::WindowTreeHost* host) override;
 
   // Returns the display::Display for the mirroring root window.
   display::Display GetDisplayForRootWindow(const aura::Window* root) const;
diff --git a/ash/event_matcher_util.cc b/ash/event_matcher_util.cc
deleted file mode 100644
index 13bd4a98..0000000
--- a/ash/event_matcher_util.cc
+++ /dev/null
@@ -1,60 +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 "ash/event_matcher_util.h"
-
-namespace ash {
-
-ui::mojom::EventMatcherPtr BuildKeyReleaseMatcher() {
-  ui::mojom::EventMatcherPtr matcher(ui::mojom::EventMatcher::New());
-  matcher->type_matcher = ui::mojom::EventTypeMatcher::New();
-  matcher->type_matcher->type = ui::mojom::EventType::KEY_RELEASED;
-  return matcher;
-}
-
-ui::mojom::EventMatcherPtr BuildAltMatcher() {
-  ui::mojom::EventMatcherPtr matcher(ui::mojom::EventMatcher::New());
-  matcher->flags_matcher = ui::mojom::EventFlagsMatcher::New();
-  matcher->flags_matcher->flags = ui::mojom::kEventFlagAltDown;
-  matcher->ignore_flags_matcher = ui::mojom::EventFlagsMatcher::New();
-  matcher->ignore_flags_matcher->flags =
-      ui::mojom::kEventFlagCapsLockOn | ui::mojom::kEventFlagScrollLockOn |
-      ui::mojom::kEventFlagNumLockOn | ui::mojom::kEventFlagControlDown;
-  return matcher;
-}
-
-ui::mojom::EventMatcherPtr BuildControlMatcher() {
-  ui::mojom::EventMatcherPtr matcher(ui::mojom::EventMatcher::New());
-  matcher->flags_matcher = ui::mojom::EventFlagsMatcher::New();
-  matcher->flags_matcher->flags = ui::mojom::kEventFlagControlDown;
-  matcher->ignore_flags_matcher = ui::mojom::EventFlagsMatcher::New();
-  matcher->ignore_flags_matcher->flags =
-      ui::mojom::kEventFlagCapsLockOn | ui::mojom::kEventFlagScrollLockOn |
-      ui::mojom::kEventFlagNumLockOn | ui::mojom::kEventFlagAltDown;
-  return matcher;
-}
-
-ui::mojom::EventMatcherPtr BuildKeyMatcher(ui::mojom::KeyboardCode code) {
-  ui::mojom::EventMatcherPtr matcher(ui::mojom::EventMatcher::New());
-  matcher->key_matcher = ui::mojom::KeyEventMatcher::New();
-  matcher->key_matcher->keyboard_code = code;
-  return matcher;
-}
-
-void BuildKeyMatcherRange(ui::mojom::KeyboardCode start,
-                          ui::mojom::KeyboardCode end,
-                          std::vector<::ui::mojom::EventMatcherPtr>* matchers) {
-  for (int i = static_cast<int>(start); i <= static_cast<int>(end); ++i) {
-    matchers->push_back(
-        BuildKeyMatcher(static_cast<ui::mojom::KeyboardCode>(i)));
-  }
-}
-
-void BuildKeyMatcherList(std::vector<ui::mojom::KeyboardCode> codes,
-                         std::vector<::ui::mojom::EventMatcherPtr>* matchers) {
-  for (auto& code : codes)
-    matchers->push_back(BuildKeyMatcher(code));
-}
-
-}  // namespace ash
diff --git a/ash/event_matcher_util.h b/ash/event_matcher_util.h
deleted file mode 100644
index 1bfb7bb..0000000
--- a/ash/event_matcher_util.h
+++ /dev/null
@@ -1,33 +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.
-
-#ifndef ASH_EVENT_MATCHER_UTIL_H_
-#define ASH_EVENT_MATCHER_UTIL_H_
-
-#include "services/ui/public/interfaces/event_matcher.mojom.h"
-
-namespace ash {
-
-// Builds a matcher which matches all key releases.
-ui::mojom::EventMatcherPtr BuildKeyReleaseMatcher();
-
-// Builds a matcher which matches any use of these modifier keys.
-ui::mojom::EventMatcherPtr BuildAltMatcher();
-ui::mojom::EventMatcherPtr BuildControlMatcher();
-
-// Builds a matcher which matches a specific keycode.
-ui::mojom::EventMatcherPtr BuildKeyMatcher(ui::mojom::KeyboardCode code);
-
-// Adds key matchers for the range |start| to |end| inclusive.
-void BuildKeyMatcherRange(ui::mojom::KeyboardCode start,
-                          ui::mojom::KeyboardCode end,
-                          std::vector<::ui::mojom::EventMatcherPtr>* matchers);
-
-// Adds matchers for |codes| to |matchers|.
-void BuildKeyMatcherList(std::vector<ui::mojom::KeyboardCode> codes,
-                         std::vector<::ui::mojom::EventMatcherPtr>* matchers);
-
-}  // namespace ash
-
-#endif  // ASH_EVENT_MATCHER_UTIL_H_
diff --git a/ash/frame/detached_title_area_renderer.cc b/ash/frame/detached_title_area_renderer.cc
index c333a4f5..cc6f1dc 100644
--- a/ash/frame/detached_title_area_renderer.cc
+++ b/ash/frame/detached_title_area_renderer.cc
@@ -101,8 +101,6 @@
       CreateInitParams("DetachedTitleAreaRendererForClient");
   views::NativeWidgetAura* native_widget =
       new views::NativeWidgetAura(widget_, true);
-  native_widget->GetNativeView()->SetProperty(
-      aura::client::kEmbedType, aura::client::WindowEmbedType::TOP_LEVEL_IN_WM);
   aura::SetWindowType(native_widget->GetNativeWindow(),
                       ui::mojom::WindowType::POPUP);
   ApplyProperties(native_widget->GetNativeWindow(), property_converter,
diff --git a/ash/host/ash_window_tree_host_mus.cc b/ash/host/ash_window_tree_host_mus.cc
deleted file mode 100644
index 2ac0508..0000000
--- a/ash/host/ash_window_tree_host_mus.cc
+++ /dev/null
@@ -1,130 +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 "ash/host/ash_window_tree_host_mus.h"
-
-#include <memory>
-
-#include "ash/host/root_window_transformer.h"
-#include "ash/host/transformer_helper.h"
-#include "ash/shell.h"
-#include "ash/shell_delegate.h"
-#include "services/ui/public/cpp/input_devices/input_device_controller_client.h"
-#include "ui/aura/mus/window_tree_host_mus_init_params.h"
-#include "ui/aura/window.h"
-#include "ui/events/event_sink.h"
-#include "ui/events/null_event_targeter.h"
-#include "ui/gfx/geometry/rect_conversions.h"
-#include "ui/gfx/geometry/rect_f.h"
-
-namespace ash {
-
-AshWindowTreeHostMus::AshWindowTreeHostMus(
-    aura::WindowTreeHostMusInitParams init_params)
-    : aura::WindowTreeHostMus(std::move(init_params)),
-      transformer_helper_(std::make_unique<TransformerHelper>(this)) {
-  transformer_helper_->Init();
-}
-
-AshWindowTreeHostMus::~AshWindowTreeHostMus() = default;
-
-void AshWindowTreeHostMus::ConfineCursorToRootWindow() {
-  if (!allow_confine_cursor())
-    return;
-
-  gfx::Rect confined_bounds(GetBoundsInPixels().size());
-  confined_bounds.Inset(transformer_helper_->GetHostInsets());
-  last_cursor_confine_bounds_in_pixels_ = confined_bounds;
-  ConfineCursorToBounds(confined_bounds);
-}
-
-void AshWindowTreeHostMus::ConfineCursorToBoundsInRoot(
-    const gfx::Rect& bounds_in_root) {
-  if (!allow_confine_cursor())
-    return;
-
-  gfx::RectF bounds_f(bounds_in_root);
-  GetRootTransform().TransformRect(&bounds_f);
-  last_cursor_confine_bounds_in_pixels_ = gfx::ToEnclosingRect(bounds_f);
-  ConfineCursorToBounds(last_cursor_confine_bounds_in_pixels_);
-}
-
-gfx::Rect AshWindowTreeHostMus::GetLastCursorConfineBoundsInPixels() const {
-  return last_cursor_confine_bounds_in_pixels_;
-}
-
-void AshWindowTreeHostMus::SetRootWindowTransformer(
-    std::unique_ptr<RootWindowTransformer> transformer) {
-  transformer_helper_->SetRootWindowTransformer(std::move(transformer));
-  ConfineCursorToRootWindow();
-}
-
-gfx::Insets AshWindowTreeHostMus::GetHostInsets() const {
-  return transformer_helper_->GetHostInsets();
-}
-
-aura::WindowTreeHost* AshWindowTreeHostMus::AsWindowTreeHost() {
-  return this;
-}
-
-void AshWindowTreeHostMus::PrepareForShutdown() {
-  // WindowEventDispatcher may have pending events that need to be processed.
-  // At the time this function is called the WindowTreeHost and Window are in
-  // a semi-shutdown state. Reset the targeter so that the current targeter
-  // doesn't attempt to process events while in this state, which would likely
-  // crash.
-  std::unique_ptr<ui::NullEventTargeter> null_event_targeter =
-      std::make_unique<ui::NullEventTargeter>();
-  window()->SetEventTargeter(std::move(null_event_targeter));
-
-  // Mus will destroy the platform display/window and its accelerated widget;
-  // prevent the compositor from using the asynchronously destroyed surface.
-  DestroyCompositor();
-}
-
-void AshWindowTreeHostMus::RegisterMirroringHost(
-    AshWindowTreeHost* mirroring_ash_host) {
-  // This should not be called, but it is because mirroring isn't wired up for
-  // mus. Once that is done, this should be converted to a NOTREACHED.
-  NOTIMPLEMENTED_LOG_ONCE();
-}
-
-void AshWindowTreeHostMus::SetCursorConfig(
-    const display::Display& display,
-    display::Display::Rotation rotation) {
-  // Nothing to do here, mus takes care of this.
-}
-
-void AshWindowTreeHostMus::ClearCursorConfig() {
-  // Nothing to do here, mus takes care of this.
-}
-
-void AshWindowTreeHostMus::SetRootTransform(const gfx::Transform& transform) {
-  transformer_helper_->SetTransform(transform);
-}
-
-gfx::Transform AshWindowTreeHostMus::GetRootTransform() const {
-  return transformer_helper_->GetTransform();
-}
-
-gfx::Transform AshWindowTreeHostMus::GetInverseRootTransform() const {
-  return transformer_helper_->GetInverseTransform();
-}
-
-gfx::Rect AshWindowTreeHostMus::GetTransformedRootWindowBoundsInPixels(
-    const gfx::Size& host_size_in_pixels) const {
-  return transformer_helper_->GetTransformedWindowBounds(host_size_in_pixels);
-}
-
-void AshWindowTreeHostMus::OnCursorVisibilityChangedNative(bool show) {
-  ui::InputDeviceControllerClient* input_device_controller_client =
-      Shell::Get()->shell_delegate()->GetInputDeviceControllerClient();
-  if (!input_device_controller_client)
-    return;  // Happens in tests.
-
-  // Temporarily pause tap-to-click when the cursor is hidden.
-  input_device_controller_client->SetTapToClickPaused(!show);
-}
-
-}  // namespace ash
diff --git a/ash/host/ash_window_tree_host_mus.h b/ash/host/ash_window_tree_host_mus.h
deleted file mode 100644
index 85be7a7..0000000
--- a/ash/host/ash_window_tree_host_mus.h
+++ /dev/null
@@ -1,54 +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.
-
-#ifndef ASH_HOST_ASH_WINDOW_TREE_HOST_MUS_H_
-#define ASH_HOST_ASH_WINDOW_TREE_HOST_MUS_H_
-
-#include "ash/host/ash_window_tree_host.h"
-#include "ui/aura/mus/window_tree_host_mus.h"
-
-namespace ash {
-
-class TransformerHelper;
-
-// Implementation of AshWindowTreeHost for mus/mash.
-class AshWindowTreeHostMus : public AshWindowTreeHost,
-                             public aura::WindowTreeHostMus {
- public:
-  explicit AshWindowTreeHostMus(aura::WindowTreeHostMusInitParams init_params);
-  ~AshWindowTreeHostMus() override;
-
-  // AshWindowTreeHost:
-  void ConfineCursorToRootWindow() override;
-  void ConfineCursorToBoundsInRoot(const gfx::Rect& bounds_in_root) override;
-  gfx::Rect GetLastCursorConfineBoundsInPixels() const override;
-  void SetRootWindowTransformer(
-      std::unique_ptr<RootWindowTransformer> transformer) override;
-  gfx::Insets GetHostInsets() const override;
-  aura::WindowTreeHost* AsWindowTreeHost() override;
-  void PrepareForShutdown() override;
-  void RegisterMirroringHost(AshWindowTreeHost* mirroring_ash_host) override;
-  void SetCursorConfig(const display::Display& display,
-                       display::Display::Rotation rotation) override;
-  void ClearCursorConfig() override;
-
-  // aura::WindowTreeHostMus:
-  void SetRootTransform(const gfx::Transform& transform) override;
-  gfx::Transform GetRootTransform() const override;
-  gfx::Transform GetInverseRootTransform() const override;
-  gfx::Rect GetTransformedRootWindowBoundsInPixels(
-      const gfx::Size& host_size_in_pixels) const override;
-  void OnCursorVisibilityChangedNative(bool show) override;
-
- private:
-  std::unique_ptr<TransformerHelper> transformer_helper_;
-
-  gfx::Rect last_cursor_confine_bounds_in_pixels_;
-
-  DISALLOW_COPY_AND_ASSIGN(AshWindowTreeHostMus);
-};
-
-}  // namespace ash
-
-#endif  // ASH_HOST_ASH_WINDOW_TREE_HOST_MUS_H_
diff --git a/ash/host/ash_window_tree_host_platform.cc b/ash/host/ash_window_tree_host_platform.cc
index 4124a35f..5122f9dd 100644
--- a/ash/host/ash_window_tree_host_platform.cc
+++ b/ash/host/ash_window_tree_host_platform.cc
@@ -87,7 +87,7 @@
   float scale = display.device_scale_factor();
 
   if (!display.IsInternal())
-    scale *= ui::mojom::kCursorMultiplierForExternalDisplays;
+    scale *= 1.2;
 
   ui::CursorController::GetInstance()->SetCursorConfigForWindow(
       GetAcceleratedWidget(), rotation, scale);
diff --git a/ash/public/cpp/app_list/app_list_config.cc b/ash/public/cpp/app_list/app_list_config.cc
index bc4cfc3..c7ffb598 100644
--- a/ash/public/cpp/app_list/app_list_config.cc
+++ b/ash/public/cpp/app_list/app_list_config.cc
@@ -34,7 +34,8 @@
       preferred_rows_(5),
       page_spacing_(40),
       expand_arrow_tile_height_(60),
-      folder_bubble_radius_(23) {
+      folder_bubble_radius_(23),
+      arc_icon_dimension_(48) {
   if (features::IsNewStyleLauncherEnabled()) {
     grid_tile_width_ = 120;
     grid_tile_height_ = 112;
diff --git a/ash/public/cpp/app_list/app_list_config.h b/ash/public/cpp/app_list/app_list_config.h
index e3f9ef43..fe4791ad 100644
--- a/ash/public/cpp/app_list/app_list_config.h
+++ b/ash/public/cpp/app_list/app_list_config.h
@@ -63,6 +63,7 @@
   int page_spacing() const { return page_spacing_; }
   int expand_arrow_tile_height() const { return expand_arrow_tile_height_; }
   int folder_bubble_radius() const { return folder_bubble_radius_; }
+  int arc_icon_dimension() const { return arc_icon_dimension_; }
 
   gfx::Size grid_icon_size() const {
     return gfx::Size(grid_icon_dimension_, grid_icon_dimension_);
@@ -90,6 +91,10 @@
                      search_list_badge_icon_dimension_);
   }
 
+  gfx::Size arc_icon_size() const {
+    return gfx::Size(arc_icon_dimension_, arc_icon_dimension_);
+  }
+
   // Returns the dimension at which a result's icon should be displayed.
   int GetPreferredIconDimension(
       ash::SearchResultDisplayType display_type) const;
@@ -166,6 +171,11 @@
 
   // The folder image bubble radius.
   int folder_bubble_radius_;
+
+  // Original icon dimension of arc app, this will be resized to
+  // |grid_icon_dimension_| when being shown in the apps grid. (Original arc
+  // icon support 48px instead of 64px.)
+  int arc_icon_dimension_;
 };
 
 }  // namespace app_list
diff --git a/ash/public/cpp/app_list/app_list_features.cc b/ash/public/cpp/app_list/app_list_features.cc
index 09d5766..71651fe1 100644
--- a/ash/public/cpp/app_list/app_list_features.cc
+++ b/ash/public/cpp/app_list/app_list_features.cc
@@ -29,6 +29,8 @@
                                             base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kEnableContinueReading{"EnableContinueReading",
                                            base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kEnableZeroStateSuggestions{
+    "EnableZeroStateSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
 
 bool IsAnswerCardEnabled() {
   // Not using local static variable to allow tests to change this value.
@@ -68,6 +70,10 @@
   return base::FeatureList::IsEnabled(kEnableContinueReading);
 }
 
+bool IsZeroStateSuggestionsEnabled() {
+  return base::FeatureList::IsEnabled(kEnableZeroStateSuggestions);
+}
+
 std::string AnswerServerUrl() {
   const std::string experiment_url =
       base::GetFieldTrialParamValueByFeature(kEnableAnswerCard, "ServerUrl");
diff --git a/ash/public/cpp/app_list/app_list_features.h b/ash/public/cpp/app_list/app_list_features.h
index 4f1861a..7510838 100644
--- a/ash/public/cpp/app_list/app_list_features.h
+++ b/ash/public/cpp/app_list/app_list_features.h
@@ -50,6 +50,9 @@
 // when they switch from phones or tablets to Chromebook.
 ASH_PUBLIC_EXPORT extern const base::Feature kEnableContinueReading;
 
+// Enables the feature to display zero state suggestions.
+ASH_PUBLIC_EXPORT extern const base::Feature kEnableZeroStateSuggestions;
+
 bool ASH_PUBLIC_EXPORT IsAnswerCardEnabled();
 bool ASH_PUBLIC_EXPORT IsAppShortcutSearchEnabled();
 bool ASH_PUBLIC_EXPORT IsBackgroundBlurEnabled();
@@ -59,6 +62,7 @@
 bool ASH_PUBLIC_EXPORT IsAppsGridGapFeatureEnabled();
 bool ASH_PUBLIC_EXPORT IsNewStyleLauncherEnabled();
 bool ASH_PUBLIC_EXPORT IsContinueReadingEnabled();
+bool ASH_PUBLIC_EXPORT IsZeroStateSuggestionsEnabled();
 std::string ASH_PUBLIC_EXPORT AnswerServerUrl();
 std::string ASH_PUBLIC_EXPORT AnswerServerQuerySuffix();
 
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index 0042697..9e6b1f6 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -37,7 +37,7 @@
                                            base::FEATURE_DISABLED_BY_DEFAULT};
 
 const base::Feature kOverviewSwipeToClose{"OverviewSwipeToClose",
-                                          base::FEATURE_DISABLED_BY_DEFAULT};
+                                          base::FEATURE_ENABLED_BY_DEFAULT};
 
 const base::Feature kSystemTrayUnified{"SystemTrayUnified",
                                        base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/ash/public/cpp/immersive/immersive_gesture_handler.h b/ash/public/cpp/immersive/immersive_gesture_handler.h
index 392fa43..dc89054 100644
--- a/ash/public/cpp/immersive/immersive_gesture_handler.h
+++ b/ash/public/cpp/immersive/immersive_gesture_handler.h
@@ -11,8 +11,8 @@
 
 // ImmersiveGestureHandler is responsible for calling
 // ImmersiveFullscreenController::OnGestureEvent() to show/hide the title bar or
-// TabletModeWindowDragController::DragWindowFromTop() to drag the window from
-// the top if CanDragWindow is true when a gesture is received.
+// TabletAppModeWindowDragController::DragWindowFromTop() to drag the window
+// from the top if CanDragWindow is true when a gesture is received.
 class ASH_PUBLIC_EXPORT ImmersiveGestureHandler {
  public:
   virtual ~ImmersiveGestureHandler() {}
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index d526a43..fe61c8c 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -32,9 +32,11 @@
 #include "ash/wm/screen_pinning_controller.h"
 #include "ash/wm/tablet_mode/tablet_mode_controller.h"
 #include "ash/wm/window_state.h"
+#include "ash/wm/window_util.h"
 #include "base/auto_reset.h"
 #include "base/command_line.h"
 #include "base/i18n/rtl.h"
+#include "ui/base/hit_test.h"
 #include "ui/base/ui_base_switches.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_observer.h"
@@ -260,6 +262,8 @@
     SetState(SHELF_VISIBLE);
   } else if (Shell::Get()->screen_pinning_controller()->IsPinned()) {
     SetState(SHELF_HIDDEN);
+  } else if (IsDraggingWindowFromTopOfDisplay()) {
+    SetState(SHELF_VISIBLE);
   } else {
     // TODO(zelidrag): Verify shelf drag animation still shows on the device
     // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN.
@@ -410,6 +414,20 @@
   return false;
 }
 
+bool ShelfLayoutManager::IsDraggingWindowFromTopOfDisplay() const {
+  // TODO(minch): Check active window directly if removed search field
+  // in overview mode. http://crbug.com/866679
+  auto windows = Shell::Get()->mru_window_tracker()->BuildMruWindowList();
+  for (auto* window : windows) {
+    wm::WindowState* window_state = wm::GetWindowState(window);
+    if (window_state && window_state->is_dragged() &&
+        window_state->drag_details()->window_component == HTCLIENT) {
+      return true;
+    }
+  }
+  return false;
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // ShelfLayoutManager, wm::WmSnapToPixelLayoutManager implementation:
 
diff --git a/ash/shelf/shelf_layout_manager.h b/ash/shelf/shelf_layout_manager.h
index 72fce84..efe62a1 100644
--- a/ash/shelf/shelf_layout_manager.h
+++ b/ash/shelf/shelf_layout_manager.h
@@ -138,6 +138,9 @@
   // be processed any further, false otherwise.
   bool ProcessGestureEvent(const ui::GestureEvent& event_in_screen);
 
+  // Returns true if a window is being dragged from the top of the display.
+  bool IsDraggingWindowFromTopOfDisplay() const;
+
   // Overridden from wm::WmSnapToPixelLayoutManager:
   void OnWindowResized() override;
   void SetChildBounds(aura::Window* child,
diff --git a/ash/shelf/shelf_view.cc b/ash/shelf/shelf_view.cc
index 13e9c45..c5273f1 100644
--- a/ash/shelf/shelf_view.cc
+++ b/ash/shelf/shelf_view.cc
@@ -67,6 +67,11 @@
 
 namespace ash {
 
+// Indices of the start-aligned system buttons (the "back" button in tablet
+// mode, and the "app list" button).
+constexpr int kBackButtonIndex = 0;
+constexpr int kAppListButtonIndex = 1;
+
 // The proportion of the shelf space reserved for non-panel icons. Panels
 // may flow into this space but will be put into the overflow bubble if there
 // is contention for the space.
@@ -914,6 +919,7 @@
   const int available_size = shelf_->PrimaryAxisValue(width(), height());
   const int first_panel_index = model_->FirstPanelIndex();
   const int last_button_index = first_panel_index - 1;
+  int app_list_button_position;
 
   int x = 0;
   int y = 0;
@@ -926,8 +932,9 @@
       view_model_->set_ideal_bounds(i, gfx::Rect(x, y, 0, 0));
       continue;
     }
-    if (i == 2 && chromeos::switches::ShouldUseShelfNewUi()) {
-      // Start centering after we've laid out the launcher button.
+    if (i == kAppListButtonIndex + 1 &&
+        chromeos::switches::ShouldUseShelfNewUi()) {
+      // Start centering after we've laid out the app list button.
       // Center the shelf items on the whole shelf, including the status
       // area widget.
       int centered_shelf_items_size = GetDimensionOfCenteredShelfItemsInNewUi();
@@ -937,16 +944,22 @@
           status_widget->GetWindowBoundsInScreen().height());
       int padding_for_centering =
           (available_size + status_widget_size - centered_shelf_items_size) / 2;
-      x = shelf_->PrimaryAxisValue(padding_for_centering, 0);
-      y = shelf_->PrimaryAxisValue(0, padding_for_centering);
+      if (padding_for_centering > app_list_button_position + button_spacing) {
+        // Only shift buttons to the right, never let them interfere with the
+        // left-aligned system buttons.
+        x = shelf_->PrimaryAxisValue(padding_for_centering, 0);
+        y = shelf_->PrimaryAxisValue(0, padding_for_centering);
+      }
     }
 
     view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h));
     // If not in tablet mode do not increase |x| or |y|. Instead just let the
     // next item (app list button) cover the back button, which will have
     // opacity 0 anyways.
-    if (i == 0 && !IsTabletModeEnabled())
+    if (i == kBackButtonIndex && !IsTabletModeEnabled())
       continue;
+    if (i == kAppListButtonIndex)
+      app_list_button_position = shelf_->PrimaryAxisValue(x, y);
 
     // There is no spacing between the first two elements. Do not worry about y
     // since the back button only appears in tablet mode, which forces the shelf
diff --git a/ash/strings/ash_strings_am.xtb b/ash/strings/ash_strings_am.xtb
index 789be5a..a9f027d0 100644
--- a/ash/strings/ash_strings_am.xtb
+++ b/ash/strings/ash_strings_am.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">ይቅርታ፣ የይለፍ ቃልዎ አሁንም ሊረጋገጥ አልቻለም። ማሳሰቢያ፦ የይለፍ ቃልዎን በቅርብ ጊዜ ቀይረው ከሆነ አዲስ የይለፍ ቃልዎ የሚተገበረው ሲወጡ ነው፣ እባክዎ የድሮውን ይለፍ ቃል እዚህ ይጠቀሙ።</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ቀርቷል</translation>
 <translation id="1698760176351776263">የIPv6 አድራሻ፦ <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">የመሣሪያው አስተዳዳሪ የእርስዎን እንቅስቃሴ ሊከታተል ይችላል።</translation>
 <translation id="1734367976349034509">ይህ መሣሪያ በድርጅት የሚቀናበር ነው</translation>
 <translation id="1746730358044914197">የግቤት ስልቶች በእርስዎ አስተዳዳሪ ይዋቀራሉ።</translation>
 <translation id="1747827819627189109">በማያ ገጽ ላይ የቁልፍ ሰሌዳ ነቅቷል</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">የመስኮት አጠቃላይ እይታን ቀያይር</translation>
 <translation id="2338501278241028356">በአቅራቢያ ያሉ መሣሪያዎችን ለማግኘት ብሉቱዝን ያብሩ</translation>
 <translation id="2339073806695260576">ማስታወሻ ለመያዝ፣ ቅጽበታዊ ገጽ እይታን ለማንሳት፣ ሌዘር ጠቋሚውን ወይም ማጉያ መነጽሩን ለመጠቀም በመደርደሪያው ላይ ያለውን የስታይለስ አዝራሩን መታ ያድርጉ።</translation>
-<translation id="2351266942280602854">ቋንቋ እና ግቤት</translation>
 <translation id="2352467521400612932">የስቲለስ ቅንብሮች</translation>
 <translation id="2354174487190027830"><ph name="NAME" />ን በማግበር ላይ</translation>
 <translation id="2359808026110333948">ቀጥል</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">የሌሊት ብርሃን፦ <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">ሲም ካርድ ተዘግቷል</translation>
 <translation id="2653659639078652383">አስገባ</translation>
-<translation id="2696763960464195425">ዘግተው ሲወጡ የእርስዎ መረጃ ይወገዳል። <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">የእርስዎን ቁልፍ ሰሌዳ ያቀናብሩ</translation>
 <translation id="2718395828230677721">የምሽት ብርሃን</translation>
 <translation id="2727977024730340865">አነስተኛ ኃይል ወዳለው ባትሪ መሙያ ተሰክቷል። የባትሪ መሙላት አስተማማኝ ላይሆን ይችላል።</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">የመቆለፊያ ገጹ የሚቆለፍበት አቋራጭ ተቀይሯል። እባክዎ ከ<ph name="OLD_SHORTCUT" /> ይልቅ <ph name="NEW_SHORTCUT" />ን ይጠቀሙ።</translation>
 <translation id="4564869809620998694">የቅርጸ-ቁምፊ አገልግሎት</translation>
 <translation id="4570957409596482333">ለመናገር-ይምረጡ አዝራር</translation>
+<translation id="4585337515783392668">ወደ ያልታወቀ ተቀባይ cast ማድረግን አስቁም</translation>
 <translation id="4628757576491864469">መሣሪያዎች</translation>
 <translation id="4659419629803378708">ChromeVox ነቅቷል</translation>
 <translation id="4734965478015604180">አግድማዊ</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">የWindow አስተዳዳሪ</translation>
 <translation id="5820394555380036790">Chromium ስርዓተ ክወና</translation>
 <translation id="5832805196449965646">ሰው አክል</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> ላይ <ph name="ROUTE_TITLE" />ን አስቁም</translation>
 <translation id="5860033963881614850">አጥፋ</translation>
 <translation id="5895138241574237353">እንደገና ጀምር</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK ጠፍቷል</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">ሁሉም ተከናውኗል</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> በ<ph name="RECEIVER_NAME" /> ላይ</translation>
 <translation id="6452181791372256707">አይቀበሉ</translation>
 <translation id="6453179446719226835">ቋንቋ ተለውጧል</translation>
 <translation id="6459472438155181876">ማያ ገጽ ወደ <ph name="DISPLAY_NAME" /> በመቀጠል ላይ</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">ማስታወሻን ይፍጠሩ</translation>
 <translation id="8392451568018454956">የ<ph name="USER_EMAIL_ADDRESS" /> አማራጮች ምናሌ</translation>
 <translation id="8406981827175133772">የሙሉ ማያ ገጽ ማጉያ</translation>
+<translation id="8427213022735114808">በቃል ማስጻፍ በማንኛውም የጽሑፍ መስክ ውስጥ የድምጽ ትየባን ለመፍቀድ ድምጽዎን ወደ Google ይልካል።</translation>
 <translation id="8428213095426709021">ቅንብሮች</translation>
 <translation id="8431190899827883166">መታ ማድረጎችን አሳይ</translation>
 <translation id="8433186206711564395">የአውታረ መረብ ቅንብሮች</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">ክፈት</translation>
 <translation id="9151726767154816831">እንደገና ያስጀምሩ እና ለማዘመን powerwash ያድርጉ</translation>
 <translation id="9179259655489829027">ይህ ባህሪ የይለፍ ቃል ሳያስፈልገዎት ማንኛውም ወደ መለያ የገባ ተጠቃሚን በፍጥነት እንዲደርሱ ያስችልዎታል። ይህን ባህሪ በሚያምኗቸው መለያዎች ላይ ብቻ ይጠቀሙበት።</translation>
+<translation id="9193626018745640770">በማይታወቅ ተቀባይ ላይ Cast በማድረግ ላይ</translation>
 <translation id="9194617393863864469">ሌላ ተጠቃሚ በመለያ አስገባ...</translation>
 <translation id="9201131092683066720">ባትሪው <ph name="PERCENTAGE" />% ሙሉ ነው።</translation>
 <translation id="9210037371811586452">ከተዋሃደ የዴስክቶፕ ሁነታ በመውጣት ላይ</translation>
diff --git a/ash/strings/ash_strings_ar.xtb b/ash/strings/ash_strings_ar.xtb
index 420aaf9..1b9a11c 100644
--- a/ash/strings/ash_strings_ar.xtb
+++ b/ash/strings/ash_strings_ar.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">عذرًا، لا يمكن التحقق من كلمة المرور حتى الآن. ملاحظة: في حال تغيير كلمة المرور مؤخرًا، سيتم تطبيق كلمة المرور الجديدة بعد تسجيل الخروج، يُرجى استخدام كلمة المرور القديمة هنا.</translation>
 <translation id="1677472565718498478">الوقت المتبقي <ph name="TIME" /></translation>
 <translation id="1698760176351776263">‏عنوان IPv6:‏ <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">قد يتمكن مشرف الجهاز من مراقبة نشاطك.</translation>
 <translation id="1734367976349034509">يخضع هذا الجهاز لإدارة المؤسسة</translation>
 <translation id="1746730358044914197">تتم تهيئة طرق الإدخال بواسطة المشرف.</translation>
 <translation id="1747827819627189109">تم تفعيل لوحة المفاتيح على الشاشة</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">نظرة عامة لنافذة التبديل</translation>
 <translation id="2338501278241028356">تشغيل البلوتوث لاكتشاف الأجهزة القريبة</translation>
 <translation id="2339073806695260576">انقر على زر قلم الشاشة على الرف لتدوين ملاحظة أو للحصول على لقطة شاشة أو لاستخدام مؤشر الليزر أو العدسة المكبرة.</translation>
-<translation id="2351266942280602854">اللغة والإدخال</translation>
 <translation id="2352467521400612932">إعدادات قلم الشاشة</translation>
 <translation id="2354174487190027830">تفعيل <ph name="NAME" /></translation>
 <translation id="2359808026110333948">المتابعة</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">إضاءة ليلية: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">‏تم قفل شريحة SIM</translation>
 <translation id="2653659639078652383">إرسال</translation>
-<translation id="2696763960464195425">ستتم إزالة معلوماتك عند تسجيل الخروج. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">تعيين لوحة المفاتيح</translation>
 <translation id="2718395828230677721">الإضاءة الليلية</translation>
 <translation id="2727977024730340865">تمّ توصيل شاحن منخفض الطاقة. لذا قد لا تكون عملية شحن البطارية جديرة بالثقة.</translation>
diff --git a/ash/strings/ash_strings_bg.xtb b/ash/strings/ash_strings_bg.xtb
index 1a57631..74fa700 100644
--- a/ash/strings/ash_strings_bg.xtb
+++ b/ash/strings/ash_strings_bg.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">За съжаление, паролата ви пак не можа да бъде потвърдена. Забележка: Ако наскоро сте я променили, новата ще влезе в сила, след като излезете от профила си. Моля, използвайте старата парола тук.</translation>
 <translation id="1677472565718498478">Оставащо време: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 адрес: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Администраторът на устройството може да е в състояние да наблюдава активността ви.</translation>
 <translation id="1734367976349034509">Това устройство се управлява корпоративно</translation>
 <translation id="1746730358044914197">Методите на въвеждане са конфигурирани от администратора ви.</translation>
 <translation id="1747827819627189109">Екранната клавиатура е активирана</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Превключване на общия преглед на прозорците</translation>
 <translation id="2338501278241028356">Включете Bluetooth, за да бъдат открити устройствата в близост</translation>
 <translation id="2339073806695260576">Докоснете бутона с икона на писалка в лавицата, за да създадете бележка, да направите екранна снимка или да използвате лазерната показалка или лупата.</translation>
-<translation id="2351266942280602854">Език и въвеждане</translation>
 <translation id="2352467521400612932">Настройки за писалката</translation>
 <translation id="2354174487190027830">„<ph name="NAME" />“ се активира</translation>
 <translation id="2359808026110333948">Напред</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Нощно осветление: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM картата е заключена</translation>
 <translation id="2653659639078652383">Изпращане</translation>
-<translation id="2696763960464195425">Информацията ви ще бъде премахната, когато излезете от профила си. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Задайте клавиатура</translation>
 <translation id="2718395828230677721">Нощно осветление</translation>
 <translation id="2727977024730340865">Използва се зарядно устройство с малка мощност. Зареждането на батерията може да не е надеждно.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Комбинацията за заключване на екрана е променена. Моля, използвайте „<ph name="NEW_SHORTCUT" />“ вместо „<ph name="OLD_SHORTCUT" />“.</translation>
 <translation id="4564869809620998694">Услуга за шрифтове</translation>
 <translation id="4570957409596482333">Бутон за функцията Прочитане на глас</translation>
+<translation id="4585337515783392668">Спиране на предаването към неизвестен приемник</translation>
 <translation id="4628757576491864469">Устройства</translation>
 <translation id="4659419629803378708">Активирахте ChromeVox</translation>
 <translation id="4734965478015604180">Хоризонтална ориентация</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Мениджър на прозорците</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Добавяне на човек</translation>
+<translation id="5837036133683224804">Спиране на предаването на <ph name="ROUTE_TITLE" /> към „<ph name="RECEIVER_NAME" />“</translation>
 <translation id="5860033963881614850">Изключено</translation>
 <translation id="5895138241574237353">Рестартиране</translation>
 <translation id="5901316534475909376">Shift + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">„CAPS LOCK“ е изключен</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Всичко е готово</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> се предава към „<ph name="RECEIVER_NAME" />“</translation>
 <translation id="6452181791372256707">Отхвърляне</translation>
 <translation id="6453179446719226835">Езикът е променен</translation>
 <translation id="6459472438155181876">Екранът се разширява на „<ph name="DISPLAY_NAME" />“</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Създаване на бележка</translation>
 <translation id="8392451568018454956">Меню с опции за <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Лупа за увеличаване на целия екран</translation>
+<translation id="8427213022735114808">Функцията за диктуване изпраща гласа ви до Google, за да даде възможност за гласово въвеждане във всяко текстово поле.</translation>
 <translation id="8428213095426709021">Настройки</translation>
 <translation id="8431190899827883166">Показване на докосванията</translation>
 <translation id="8433186206711564395">Настройки на мрежата</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Отключване</translation>
 <translation id="9151726767154816831">Рестартирайте и извършете Powerwash, за да актуализирате</translation>
 <translation id="9179259655489829027">С тази функция получавате бърз достъп без парола до всеки влязъл потребител. Използвайте я само с надеждни профили.</translation>
+<translation id="9193626018745640770">Предава се към неизвестен приемник</translation>
 <translation id="9194617393863864469">Влизане в профила на друг потребител...</translation>
 <translation id="9201131092683066720">Батерията е <ph name="PERCENTAGE" />% пълна.</translation>
 <translation id="9210037371811586452">Излиза се от режима на обединен работен плот</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb
index 51a98a0..e64f26b 100644
--- a/ash/strings/ash_strings_bn.xtb
+++ b/ash/strings/ash_strings_bn.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">দুঃখিত, আপনার পাসওয়ার্ড এখনও পর্যন্ত যাচাই করা যায়নি। দ্রষ্টব্য: আপনি যদি সম্প্রতি আপনার পাসওয়ার্ড পরিবর্তন করে থাকেন, তাহলে আপনি সাইন-আউট করার পর আপনার নতুন পাসওয়ার্ড প্রয়োগ করা হবে, অনুগ্রহ করে এখানে পুরানো পাসওয়ার্ড ব্যবহার করুন।</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> বাকি আছে</translation>
 <translation id="1698760176351776263">IPv6 ঠিকানা: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">ডিভাইসের অ্যাডমিন আপনার অ্যাক্টিভিটি নিরীক্ষণ করতে পারেন।</translation>
 <translation id="1734367976349034509">এই ডিভাইসটি এন্টারপ্রাইজ পরিচালিত</translation>
 <translation id="1746730358044914197">আপনার প্রশাসক ইনপুটের পদ্ধতিগুলি কনফিগার করে।</translation>
 <translation id="1747827819627189109">অন-স্ক্রিন কীবোর্ড সক্ষম করা রয়েছে</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">উইন্ডোর ওভারভিউ টগল করুন</translation>
 <translation id="2338501278241028356">আশেপাশের ডিভাইস খুঁজে পেতে ব্লুটুথ চালু করুন</translation>
 <translation id="2339073806695260576">একটি নোট, স্ক্রিনশট নিতে, লেজার পয়েন্টার বা ম্যাগনিফিকেশনের কাচ ব্যবহার করার জন্য শেল্ফের স্টাইলাস বোতামটি ট্যাপ করুন।</translation>
-<translation id="2351266942280602854">ভাষা ও কিবোর্ড</translation>
 <translation id="2352467521400612932">স্টাইলাস সেটিংস</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> সক্রিয় করা হচ্ছে</translation>
 <translation id="2359808026110333948">অবিরত</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">নাইট লাইট: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">সিম কার্ড লক করা আছে</translation>
 <translation id="2653659639078652383">জমা দিন</translation>
-<translation id="2696763960464195425">আপনি সাইন-আউট করলে আপনার তথ্য সরিয়ে দেওয়া হবে। <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">আপনার কীবোর্ড সেট করুন</translation>
 <translation id="2718395828230677721">নাইট লাইট</translation>
 <translation id="2727977024730340865">একটি নিম্ন শক্তির চার্জার প্লাগইন করা হয়েছে৷ বিশ্বস্ত ব্যাটারি চার্জ নাও হতে পারে৷</translation>
@@ -218,7 +215,7 @@
 <translation id="5331975486040154427">USB-C ডিভাইস (বাঁ দিকের পিছনের পোর্ট)</translation>
 <translation id="5397578532367286026">chrome.com এ পরিচালক (<ph name="MANAGER_EMAIL" />) এই ব্যবহারকারীর ব্যবহার এবং ইতিহাস পর্যালোচনা করতে পারেন৷</translation>
 <translation id="5430931332414098647">ঝটপট টিথারিং</translation>
-<translation id="5431825016875453137">VPN / L2TP খুলুন</translation>
+<translation id="5431825016875453137">OpenVPN / L2TP</translation>
 <translation id="544691375626129091">সমস্ত উপলব্ধ ব্যবহারকারীকে ইতিমধ্যেই এই সেশনে যোগ করা হয়েছে৷</translation>
 <translation id="5457599981699367932">অতিথি হিসাবে ব্রাউজ করুন</translation>
 <translation id="54609108002486618">পরিচালিত</translation>
@@ -323,7 +320,7 @@
 <translation id="7256634071279256947">পেছনের মাইক্রোফোন</translation>
 <translation id="726276584504105859">বিভক্ত স্ক্রিন ব্যবহার করতে এখানে টেনে আনুন</translation>
 <translation id="7348093485538360975">অন-স্ক্রীণ কীবোর্ড</translation>
-<translation id="735745346212279324">VPN সংযোগ বিচ্ছিন্ন করা হয়েছে</translation>
+<translation id="735745346212279324">VPN ডিসকানেক্ট করা হয়েছে</translation>
 <translation id="7377169924702866686">Caps Lock চালু আছে৷</translation>
 <translation id="7398254312354928459">নেটওয়ার্ক সংযোগ পরিবর্তন করা হয়েছে</translation>
 <translation id="742594950370306541">ক্যামেরা ব্যবহার করা হচ্ছে।</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb
index 1046b65a..c38a48c 100644
--- a/ash/strings/ash_strings_ca.xtb
+++ b/ash/strings/ash_strings_ca.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Encara no s'ha pogut verificar la contrasenya. Nota: si fa poc que has canviat la contrasenya, la nova s'aplicarà un cop hagis tancat la sessió. Fes servir la contrasenya anterior aquí.</translation>
 <translation id="1677472565718498478">Temps restant: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adreça IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Pot ser que l'administrador del dispositiu pugui supervisar la teva activitat.</translation>
 <translation id="1734367976349034509">Aquest dispositiu està gestionat per una empresa</translation>
 <translation id="1746730358044914197">Els mètodes d'introducció estan configurats per l'administrador.</translation>
 <translation id="1747827819627189109">Teclat en pantalla activat</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Commuta la visió general de la finestra</translation>
 <translation id="2338501278241028356">Activa el Bluetooth per detectar dispositius propers</translation>
 <translation id="2339073806695260576">Toca el botó del llapis òptic al prestatge per escriure una nota, fer una captura de pantalla o bé utilitzar-lo com a punter làser o lupa.</translation>
-<translation id="2351266942280602854">Idioma i introducció de text</translation>
 <translation id="2352467521400612932">Configuració del llapis òptic</translation>
 <translation id="2354174487190027830">S'està activant <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continua</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Llum nocturna: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">La targeta SIM està bloquejada</translation>
 <translation id="2653659639078652383">Envia</translation>
-<translation id="2696763960464195425">La teva informació se suprimirà quan tanquis la sessió. <ph name="LEARN_MORE" />.</translation>
 <translation id="2700493154570097719">Defineix el teu teclat</translation>
 <translation id="2718395828230677721">Llum nocturna</translation>
 <translation id="2727977024730340865">S'ha connectat a un carregador de baix consum. És possible que la càrrega de la bateria no sigui fiable.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">La drecera per bloquejar la pantalla ha canviat. Utilitzeu <ph name="NEW_SHORTCUT" /> en lloc de la drecera <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Servei de tipus de lletra</translation>
 <translation id="4570957409596482333">Botó Escolta la selecció</translation>
+<translation id="4585337515783392668">Deixa d'emetre en un receptor desconegut</translation>
 <translation id="4628757576491864469">Dispositius</translation>
 <translation id="4659419629803378708">S'ha activat ChromeVox</translation>
 <translation id="4734965478015604180">Horitzontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Gestor de finestres</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Afegeix una persona</translation>
+<translation id="5837036133683224804">Atura <ph name="ROUTE_TITLE" /> a <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desactivat</translation>
 <translation id="5895138241574237353">Reinicia</translation>
 <translation id="5901316534475909376">Maj + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Bloq Maj està desactivat</translation>
 <translation id="6406704438230478924">AltGr</translation>
 <translation id="643147933154517414">Fet</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> a <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Rebutja</translation>
 <translation id="6453179446719226835">S'ha canviat l'idioma</translation>
 <translation id="6459472438155181876">S'està ampliant la pantalla a <ph name="DISPLAY_NAME" /></translation>
@@ -304,7 +304,7 @@
 <translation id="6820676911989879663">Fes una pausa</translation>
 <translation id="683971173229319003">Cerca + L</translation>
 <translation id="6857811139397017780">Activa <ph name="NETWORKSERVICE" /></translation>
-<translation id="6910714959251846841">Aquesta actualització requereix executar la funció Powerwash al dispositiu. Obtén més informació sobre l'última actualització de: <ph name="SYSTEM_APP_NAME" />.</translation>
+<translation id="6910714959251846841">Aquesta actualització requereix executar la funció Powerwash al dispositiu. Obtén més informació sobre l'última actualització de <ph name="SYSTEM_APP_NAME" />.</translation>
 <translation id="6911468394164995108">Connecta't a una altra xarxa...</translation>
 <translation id="6981982820502123353">Accessibilitat</translation>
 <translation id="698231206551913481">Tots els fitxers i les dades locals associats amb aquest usuari se suprimiran definitivament quan aquest usuari se suprimeixi.</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Crea una nota</translation>
 <translation id="8392451568018454956">Menú d'opcions per a <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa de pantalla completa</translation>
+<translation id="8427213022735114808">El dictat envia la teva veu a Google per permetre l'escriptura per veu en qualsevol camp de text.</translation>
 <translation id="8428213095426709021">Configuració</translation>
 <translation id="8431190899827883166">Mostra els tocs</translation>
 <translation id="8433186206711564395">Configuració de la xarxa</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Desbloqueja</translation>
 <translation id="9151726767154816831">Reinicieu i feu un Powerwash per actualitzar.</translation>
 <translation id="9179259655489829027">Aquesta funció et permet accedir ràpidament als usuaris que han iniciat la sessió sense haver d'introduir la contrasenya. Utilitza aquesta funció només amb comptes de confiança.</translation>
+<translation id="9193626018745640770">S'està emetent contingut en un receptor desconegut</translation>
 <translation id="9194617393863864469">Inicia la sessió amb un altre usuari...</translation>
 <translation id="9201131092683066720">La bateria està carregada fins al <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">S'està sortint del mode d'escriptori unificat</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb
index 5f2d5f26..37de566 100644
--- a/ash/strings/ash_strings_cs.xtb
+++ b/ash/strings/ash_strings_cs.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Je nám líto, vaše heslo se stále nedaří ověřit. Poznámka: Pokud jste heslo nedávno změnili, bude nové heslo možné použít až po odhlášení. Zde použijte staré heslo.</translation>
 <translation id="1677472565718498478">Zbývající čas: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adresa IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Správce zařízení může mít možnost sledovat vaši aktivitu.</translation>
 <translation id="1734367976349034509">Toto zařízení je spravováno organizací</translation>
 <translation id="1746730358044914197">Metody zadávání nastavuje váš administrátor.</translation>
 <translation id="1747827819627189109">Softwarová klávesnice je aktivována</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Přepnutí přehledu okna</translation>
 <translation id="2338501278241028356">Chcete-li objevit okolní zařízení, zapněte Bluetooth</translation>
 <translation id="2339073806695260576">Klepnutím na tlačítko dotykového pera na poličce můžete pořídit poznámku nebo snímek obrazovky, případně použít laserové ukazovátko nebo lupu.</translation>
-<translation id="2351266942280602854">Jazyk a vstup</translation>
 <translation id="2352467521400612932">Nastavení dotykového pera</translation>
 <translation id="2354174487190027830">Aktivace sítě <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Pokračovat</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Noční režim: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM karta je uzamčena</translation>
 <translation id="2653659639078652383">Odeslat</translation>
-<translation id="2696763960464195425">Informace budou po odhlášení odstraněny. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Nastavit klávesnici</translation>
 <translation id="2718395828230677721">Noční režim</translation>
 <translation id="2727977024730340865">Byla připojena nabíječka s nízkým výkonem. Nabíjení baterie nemusí probíhat spolehlivě.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Zkratka k odemknutí obrazovky se změnila. Namísto zkratky <ph name="OLD_SHORTCUT" /> používejte zkratku <ph name="NEW_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Služba písem</translation>
 <translation id="4570957409596482333">Tlačítko pro poslech vybraného textu</translation>
+<translation id="4585337515783392668">Ukončit odesílání do neznámého přijímače</translation>
 <translation id="4628757576491864469">Zařízení</translation>
 <translation id="4659419629803378708">Funkce ChromeVox je zapnutá</translation>
 <translation id="4734965478015604180">Na šířku</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Správce oken</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Přidat uživatele</translation>
+<translation id="5837036133683224804">Zastavit <ph name="ROUTE_TITLE" /> na přijímači <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Vypnuto</translation>
 <translation id="5895138241574237353">Restartovat</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK je vypnutý</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Vše je hotovo</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> na přijímači <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Odmítnout</translation>
 <translation id="6453179446719226835">Jazyk se změnil</translation>
 <translation id="6459472438155181876">Rozšíření obrazovky na displej <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Vytvořit poznámku</translation>
 <translation id="8392451568018454956">Nabídka možností pro uživatele <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa celé obrazovky</translation>
+<translation id="8427213022735114808">Diktování odesílá váš hlas do Googlu, aby bylo možné hlasově zadávat do libovolného textového pole.</translation>
 <translation id="8428213095426709021">Nastavení</translation>
 <translation id="8431190899827883166">Zobrazovat klepnutí</translation>
 <translation id="8433186206711564395">Nastavení sítě</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Odemknout</translation>
 <translation id="9151726767154816831">Chcete-li zařízení aktualizovat, restartujte je a resetujte pomocí funkce Powerwash</translation>
 <translation id="9179259655489829027">Tato funkce umožňuje rychle získat přístup ke kterémukoliv přihlášenému uživateli, aniž by bylo potřeba zadávat heslo. Tuto funkci používejte pouze s účty, kterým důvěřujete.</translation>
+<translation id="9193626018745640770">Odesílání do neznámého přijímače</translation>
 <translation id="9194617393863864469">Přihlásit dalšího uživatele...</translation>
 <translation id="9201131092683066720">Baterie je nabita na <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Ukončování režimu jednotné plochy</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb
index 9afff82..d82608b 100644
--- a/ash/strings/ash_strings_da.xtb
+++ b/ash/strings/ash_strings_da.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Din adgangskode kunne stadig ikke bekræftes. Bemærk! Hvis du har ændret din adgangskode for nylig, anvendes din nye adgangskode først, når du har logget ud. Du skal bruge den gamle adgangskode her.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> tilbage</translation>
 <translation id="1698760176351776263">IPv6-adresse: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Enhedsadministratoren kan muligvis overvåge din aktivitet.</translation>
 <translation id="1734367976349034509">Denne enhed er virksomhedsadministreret</translation>
 <translation id="1746730358044914197">Indtastningsmetoder konfigureres af din administrator.</translation>
 <translation id="1747827819627189109">Skærmtastaturet er aktiveret</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Skift vinduesoversigt</translation>
 <translation id="2338501278241028356">Slå Bluetooth til for at opdage enheder i nærheden</translation>
 <translation id="2339073806695260576">Tryk på knappen for styluspen på hylden for at skrive en note, tage et screenshot eller bruge lasermarkøren og luppen.</translation>
-<translation id="2351266942280602854">Sprog og indtastning</translation>
 <translation id="2352467521400612932">Penneindstillinger</translation>
 <translation id="2354174487190027830">Aktiverer <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Fortsæt</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nattelys: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-kortet er låst</translation>
 <translation id="2653659639078652383">Indsend</translation>
-<translation id="2696763960464195425">Dine oplysninger fjernes, når du logger ud. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Angiv dit tastatur</translation>
 <translation id="2718395828230677721">Nattelys</translation>
 <translation id="2727977024730340865">Tilsluttet en oplader med lav kraft. Batteriopladningen er muligvis ikke pålidelig.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Genvejen til at låse skærmen er ændret. Brug <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Skrifttypetjeneste</translation>
 <translation id="4570957409596482333">Knap for Tekstoplæsning</translation>
+<translation id="4585337515783392668">Stop med at caste på en ukendt modtager</translation>
 <translation id="4628757576491864469">Enheder</translation>
 <translation id="4659419629803378708">ChromeVox er aktiveret</translation>
 <translation id="4734965478015604180">Vandret</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Vinduesadministrator</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Tilføj person</translation>
+<translation id="5837036133683224804">Stop <ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Fra</translation>
 <translation id="5895138241574237353">Genstart</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK er deaktiveret</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Færdig</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Afvis</translation>
 <translation id="6453179446719226835">Sproget er blevet ændret</translation>
 <translation id="6459472438155181876">Udvider skærmen til <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Opret note</translation>
 <translation id="8392451568018454956">Menuen Indstillinger for <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Forstørrelse af fuld skærm</translation>
+<translation id="8427213022735114808">Diktering sender din stemme til Google, så du kan indtale tekst i alle tekstfelter.</translation>
 <translation id="8428213095426709021">Indstillinger</translation>
 <translation id="8431190899827883166">Vis tryk</translation>
 <translation id="8433186206711564395">Netværksindstillinger</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Lås op</translation>
 <translation id="9151726767154816831">Genstart, og udfør en powerwash for at opdatere</translation>
 <translation id="9179259655489829027">Denne funktion giver dig hurtig adgang til alle brugere, der er logget ind, uden at du behøver at angive en adgangskode. Brug kun denne funktion til konti, du har tillid til.</translation>
+<translation id="9193626018745640770">Caster på en ukendt modtager</translation>
 <translation id="9194617393863864469">Log ind med en anden bruger...</translation>
 <translation id="9201131092683066720">Batteriet er <ph name="PERCENTAGE" /> % opladet.</translation>
 <translation id="9210037371811586452">Lukker tilstanden Kombineret skrivebord</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb
index 6ceff6f..0405a86 100644
--- a/ash/strings/ash_strings_de.xtb
+++ b/ash/strings/ash_strings_de.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Ihr Passwort konnte immer noch nicht bestätigt werden. Hinweis: Falls Sie Ihr Passwort kürzlich geändert haben, wird Ihr neues Passwort übernommen, sobald Sie sich abmelden. Bitte verwenden Sie hier das alte Passwort.</translation>
 <translation id="1677472565718498478">Verbleibende Zeit: <ph name="TIME" /> h</translation>
 <translation id="1698760176351776263">IPv6-Adresse: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Der Geräteadministrator kann Ihre Aktivitäten möglicherweise überwachen.</translation>
 <translation id="1734367976349034509">Dieses Gerät wird vom Unternehmen verwaltet</translation>
 <translation id="1746730358044914197">Die Eingabemethoden werden von Ihrem Administrator konfiguriert.</translation>
 <translation id="1747827819627189109">Bildschirmtastatur aktiviert</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Fensterübersicht umschalten</translation>
 <translation id="2338501278241028356">Aktivieren Sie Bluetooth, damit Geräte in der Nähe gefunden werden</translation>
 <translation id="2339073806695260576">Tippen Sie auf die Eingabestift-Schaltfläche in der Ablage, um Notizen oder Screenshots zu erstellen, den Laserpointer oder die Vergrößerungsfunktion zu verwenden.</translation>
-<translation id="2351266942280602854">Sprache und Eingabe</translation>
 <translation id="2352467521400612932">Eingabestift-Einstellungen</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> wird aktiviert</translation>
 <translation id="2359808026110333948">Weiter</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nachtlicht: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-Karte ist gesperrt</translation>
 <translation id="2653659639078652383">Senden</translation>
-<translation id="2696763960464195425">Ihre Informationen werden bei der Abmeldung entfernt. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Tastatur einrichten</translation>
 <translation id="2718395828230677721">Nachtlicht</translation>
 <translation id="2727977024730340865">Das Gerät ist an ein Schwachstrom-Ladegerät angeschlossen. Möglicherweise kann der Akku nicht zuverlässig aufgeladen werden.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Die Tastenkombination zum Sperren des Bildschirms hat sich geändert. Bitte drücken Sie <ph name="NEW_SHORTCUT" /> statt <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Schriftartendienst</translation>
 <translation id="4570957409596482333">Vorlese-Schaltfläche</translation>
+<translation id="4585337515783392668">Streaming an unbekannten Empfänger beenden</translation>
 <translation id="4628757576491864469">Geräte</translation>
 <translation id="4659419629803378708">ChromeVox aktiviert</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Fenstermanager</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Person hinzufügen</translation>
+<translation id="5837036133683224804"><ph name="ROUTE_TITLE" /> auf <ph name="RECEIVER_NAME" /> beenden</translation>
 <translation id="5860033963881614850">Aus</translation>
 <translation id="5895138241574237353">Neu starten</translation>
 <translation id="5901316534475909376">Umschalttaste + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Feststelltaste Aus</translation>
 <translation id="6406704438230478924">AltGr</translation>
 <translation id="643147933154517414">Fertig</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> auf <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Ablehnen</translation>
 <translation id="6453179446719226835">Die Sprache wurde geändert</translation>
 <translation id="6459472438155181876">Bildschirm wird auf <ph name="DISPLAY_NAME" /> erweitert...</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Notiz erstellen</translation>
 <translation id="8392451568018454956">Optionsmenü für <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Vollbildlupe</translation>
+<translation id="8427213022735114808">Die Diktierfunktion sendet Ihre Spracheingaben an Google, damit sie in das entsprechende Textfeld eingetragen werden können.</translation>
 <translation id="8428213095426709021">Einstellungen</translation>
 <translation id="8431190899827883166">Fingertipps anzeigen</translation>
 <translation id="8433186206711564395">Netzwerkeinstellungen</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Entsperren</translation>
 <translation id="9151726767154816831">Zum Aktualisieren Neustart und Powerwash durchführen</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="9193626018745640770">Streaming an unbekannten Empfänger</translation>
 <translation id="9194617393863864469">Anderen Nutzer anmelden...</translation>
 <translation id="9201131092683066720">Akku ist zu <ph name="PERCENTAGE" /> % geladen.</translation>
 <translation id="9210037371811586452">Unified Desktop-Modus wird beendet</translation>
diff --git a/ash/strings/ash_strings_el.xtb b/ash/strings/ash_strings_el.xtb
index a3b0361..95b548c 100644
--- a/ash/strings/ash_strings_el.xtb
+++ b/ash/strings/ash_strings_el.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Λυπούμαστε, η επαλήθευση του κωδικού πρόσβασης εξακολουθεί να μην είναι δυνατή. Σημείωση: Εάν έχετε αλλάξει πρόσφατα τον κωδικό πρόσβασης, ο νέος κωδικός πρόσβασης θα τεθεί σε ισχύ αφού αποσυνδεθείτε. Χρησιμοποιήστε εδώ τον παλιό κωδικό πρόσβασης.</translation>
 <translation id="1677472565718498478">Απομένουν <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Διεύθυνση IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Ο διαχειριστής της συσκευής ίσως έχει τη δυνατότητα να παρακολουθεί τη δραστηριότητά σας.</translation>
 <translation id="1734367976349034509">Αυτή η συσκευή βρίσκεται υπό τη διαχείριση επιχείρησης</translation>
 <translation id="1746730358044914197">Οι μέθοδοι εισαγωγής έχουν διαμορφωθεί από τον διαχειριστή σας.</translation>
 <translation id="1747827819627189109">Το πληκτρολόγιο οθόνης είναι ενεργοποιημένο</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Επισκόπηση εναλλαγής παραθύρων</translation>
 <translation id="2338501278241028356">Ενεργοποιήστε το Bluetooth, για να εντοπίσετε κοντινές συσκευές</translation>
 <translation id="2339073806695260576">Πατήστε το κουμπί με τη γραφίδα στο ράφι, για να δημιουργήσετε μια σημείωση, ένα στιγμιότυπο οθόνης και να χρησιμοποιήσετε τον δείκτη λέιζερ ή τον μεγεθυντικό φακό.</translation>
-<translation id="2351266942280602854">Γλώσσα και εισαγωγή</translation>
 <translation id="2352467521400612932">Ρυθμίσεις γραφίδας</translation>
 <translation id="2354174487190027830">Ενεργοποίηση <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Συνέχεια</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Νυχτερινός φωτισμός: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Η κάρτα SIM είναι κλειδωμένη</translation>
 <translation id="2653659639078652383">Υποβολή</translation>
-<translation id="2696763960464195425">Οι πληροφορίες σας θα διαγραφούν κατά την αποσύνδεση. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Ρύθμιση του πληκτρολογίου σας</translation>
 <translation id="2718395828230677721">Νυχτερινός φωτισμός</translation>
 <translation id="2727977024730340865">Σύνδεση με φορτιστή χαμηλής ισχύος. Η φόρτιση της μπαταρίας ενδέχεται να μη γίνεται με αξιόπιστο τρόπο.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Η συντόμευση για το κλείδωμα της οθόνης άλλαξε. Χρησιμοποιήστε το <ph name="NEW_SHORTCUT" /> αντί για το <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Υπηρεσία γραμματοσειρών</translation>
 <translation id="4570957409596482333">Κουμπί "Επιλέξτε για αυτόματη ανάγνωση"</translation>
+<translation id="4585337515783392668">Διακοπή μετάδοσης σε άγνωστο δέκτη</translation>
 <translation id="4628757576491864469">Συσκευές</translation>
 <translation id="4659419629803378708">Το ChromeVox ενεργοποιήθηκε</translation>
 <translation id="4734965478015604180">Οριζόντια περιστροφή</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Διαχείριση παραθύρου</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Προσθήκη ατόμου</translation>
+<translation id="5837036133683224804">Διακοπή <ph name="ROUTE_TITLE" /> σε <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Απενεργοποιημένη</translation>
 <translation id="5895138241574237353">Επανεκκίνηση</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Το CAPS LOCK είναι απενεργοποιημένο</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Όλα έτοιμα</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> σε <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Απόρριψη</translation>
 <translation id="6453179446719226835">Η γλώσσα άλλαξε</translation>
 <translation id="6459472438155181876">Επέκταση οθόνης σε <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Δημιουργία σημείωσης</translation>
 <translation id="8392451568018454956">Μενού επιλογών για τη διεύθυνση <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Μεγεθυντικός φακός πλήρους οθόνης</translation>
+<translation id="8427213022735114808">Η υπαγόρευση αποστέλλει τη φωνή σας στην Google, ώστε να επιτρέπεται η φωνητική πληκτρολόγηση σε οποιοδήποτε πεδίο κειμένου.</translation>
 <translation id="8428213095426709021">Ρυθμίσεις</translation>
 <translation id="8431190899827883166">Εμφάνιση πατημάτων</translation>
 <translation id="8433186206711564395">Ρυθμίσεις δικτύου</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Ξεκλείδωμα</translation>
 <translation id="9151726767154816831">Για να ολοκληρωθεί η ενημέρωση, πρέπει να γίνει επανεκκίνηση και powerwash</translation>
 <translation id="9179259655489829027">Αυτή η λειτουργία σάς επιτρέπει να έχετε γρήγορη πρόσβαση σε οποιονδήποτε συνδεδεμένο χρήστη, χωρίς να απαιτείται κωδικός πρόσβασης. Χρησιμοποιήστε αυτήν τη λειτουργία μόνο με λογαριασμούς που εμπιστεύεστε.</translation>
+<translation id="9193626018745640770">Μετάδοση σε άγνωστο δέκτη</translation>
 <translation id="9194617393863864469">Σύνδεση με άλλον χρήστη...</translation>
 <translation id="9201131092683066720">Η μπαταρία είναι πλήρης <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Έξοδος από λειτουργία ενοποιημένης επιφάνειας εργασίας</translation>
diff --git a/ash/strings/ash_strings_en-GB.xtb b/ash/strings/ash_strings_en-GB.xtb
index 1759917..fc6c7b4 100644
--- a/ash/strings/ash_strings_en-GB.xtb
+++ b/ash/strings/ash_strings_en-GB.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Sorry, your password still couldn't be verified. Note: If you changed your password recently, your new password will be applied once you sign out. Please use the old password here.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> left</translation>
 <translation id="1698760176351776263">IPv6 address: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">The device admin may be able to monitor your activity.</translation>
 <translation id="1734367976349034509">This device is enterprise managed</translation>
 <translation id="1746730358044914197">Input methods are configured by your administrator.</translation>
 <translation id="1747827819627189109">On-screen keyboard enabled</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Toggle window overview</translation>
 <translation id="2338501278241028356">Turn on Bluetooth to discover nearby devices</translation>
 <translation id="2339073806695260576">Tap the stylus button on the shelf to take a note, screenshot, use the laser pointer or magnifying glass.</translation>
-<translation id="2351266942280602854">Language and input</translation>
 <translation id="2352467521400612932">Stylus settings</translation>
 <translation id="2354174487190027830">Activating <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continue</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Night Light: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM card is locked</translation>
 <translation id="2653659639078652383">Submit</translation>
-<translation id="2696763960464195425">Your information will be removed when you sign out. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Set your keyboard</translation>
 <translation id="2718395828230677721">Night Light</translation>
 <translation id="2727977024730340865">Plugged in to a low-power charger. Battery charging may not be reliable.</translation>
diff --git a/ash/strings/ash_strings_es-419.xtb b/ash/strings/ash_strings_es-419.xtb
index 800076c..8cd309a4d 100644
--- a/ash/strings/ash_strings_es-419.xtb
+++ b/ash/strings/ash_strings_es-419.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Todavía no se pudo verificar tu contraseña. Ten en cuenta que, si cambiaste tu contraseña recientemente, podrás usar la nueva cuando salgas. Aquí deberás usar la contraseña anterior.</translation>
 <translation id="1677472565718498478">Tiempo restante <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Dirección IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Es posible que el administrador del dispositivo controle tu actividad.</translation>
 <translation id="1734367976349034509">Este dispositivo está administrado por una empresa</translation>
 <translation id="1746730358044914197">Tu administrador configura los métodos de entrada.</translation>
 <translation id="1747827819627189109">Teclado en pantalla habilitado</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Activar vista general de ventanas</translation>
 <translation id="2338501278241028356">Activar Bluetooth para buscar los dispositivos cercanos</translation>
 <translation id="2339073806695260576">Presiona el botón de la pluma stylus en la biblioteca para tomar notas y capturas de pantalla, y usar el puntero láser o la lupa.</translation>
-<translation id="2351266942280602854">Teclado e idioma</translation>
 <translation id="2352467521400612932">Configuración de la pluma stylus</translation>
 <translation id="2354174487190027830">Activación de <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Luz nocturna: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">La tarjeta SIM está bloqueada</translation>
 <translation id="2653659639078652383">Enviar</translation>
-<translation id="2696763960464195425">Se borrará tu información cuando salgas de la cuenta. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Establecer el teclado</translation>
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727977024730340865">Conexión a un cargador de baja potencia. Es posible que la carga de la batería no sea confiable.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb
index 2327a3ac..9a49f9a 100644
--- a/ash/strings/ash_strings_es.xtb
+++ b/ash/strings/ash_strings_es.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Aún no se ha podido verificar tu contraseña. Nota: Si has cambiado la contraseña recientemente, la nueva contraseña se aplicará una vez que hayas cerrado sesión. Utiliza la antigua contraseña aquí.</translation>
 <translation id="1677472565718498478">Queda: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Dirección IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Es posible que el administrador del dispositivo pueda supervisar tu actividad.</translation>
 <translation id="1734367976349034509">Este es un dispositivo administrado por la empresa</translation>
 <translation id="1746730358044914197">El administrador configura los métodos de introducción.</translation>
 <translation id="1747827819627189109">Teclado en pantalla habilitado</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Activar descripción general de ventanas</translation>
 <translation id="2338501278241028356">Activa el Bluetooth para encontrar dispositivos cercanos</translation>
 <translation id="2339073806695260576">Toca el botón del lápiz óptico situado en la estantería para tomar una nota, hacer una captura de pantalla o utilizar el puntero láser o la lupa.</translation>
-<translation id="2351266942280602854">Idioma y entrada</translation>
 <translation id="2352467521400612932">Configuración del lápiz óptico</translation>
 <translation id="2354174487190027830">Activación de <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Luz nocturna: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">La tarjeta SIM está bloqueada</translation>
 <translation id="2653659639078652383">Enviar</translation>
-<translation id="2696763960464195425">Tu información se eliminará cuando cierres la sesión. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Elegir el teclado</translation>
 <translation id="2718395828230677721">Luz nocturna</translation>
 <translation id="2727977024730340865">Conectado a un cargador de baja potencia. Es posible que la carga de la batería no sea fiable.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">La combinación de teclas para bloquear la pantalla ha cambiado. Utiliza <ph name="NEW_SHORTCUT" /> en lugar de <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Servicio de fuentes</translation>
 <translation id="4570957409596482333">Botón Enunciar Selección</translation>
+<translation id="4585337515783392668">Dejar de enviar contenido a un receptor desconocido</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
 <translation id="4659419629803378708">ChromeVox habilitado</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Administrador de ventanas</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Añadir perfil</translation>
+<translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">No</translation>
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5901316534475909376">Mayús+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">Bloqueo de mayúsculas desactivado</translation>
 <translation id="6406704438230478924">Alt Gr</translation>
 <translation id="643147933154517414">Listo</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> en <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Rechazar</translation>
 <translation id="6453179446719226835">Se ha cambiado el idioma</translation>
 <translation id="6459472438155181876">Ampliando pantalla para <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Crear nota</translation>
 <translation id="8392451568018454956">Menú de opciones de <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa de pantalla completa</translation>
+<translation id="8427213022735114808">Dictado envía tu voz a Google para que puedas usar el dictado por voz en cualquier campo de texto.</translation>
 <translation id="8428213095426709021">Configuración</translation>
 <translation id="8431190899827883166">Mostrar toques</translation>
 <translation id="8433186206711564395">Configuración de red</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Desbloquear</translation>
 <translation id="9151726767154816831">Reinicia y aplica la función Powerwash para actualizar el sistema</translation>
 <translation id="9179259655489829027">Esta función te permite acceder rápidamente a cualquier usuario que haya iniciado sesión sin tener que introducir una contraseña. Solo debes usar esta función con las cuentas de confianza.</translation>
+<translation id="9193626018745640770">Se está enviando contenido a un receptor desconocido</translation>
 <translation id="9194617393863864469">Iniciar sesión de otro usuario...</translation>
 <translation id="9201131092683066720">La batería está al <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Saliendo del modo de escritorio unificado</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb
index 2103d88f..edfed7a 100644
--- a/ash/strings/ash_strings_et.xtb
+++ b/ash/strings/ash_strings_et.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Kahjuks ei saanud teie parooli kinnitada. Märkus: kui muutsite parooli hiljuti, rakendub uus parool pärast väljalogimist. Kasutage siin vana parooli.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> tühjenemiseni</translation>
 <translation id="1698760176351776263">IPv6-aadress: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Seadme administraator saab võib-olla teie tegevust jälgida.</translation>
 <translation id="1734367976349034509">Seda seadet haldab ettevõte</translation>
 <translation id="1746730358044914197">Sisestusmeetodid seadistab teie administraator.</translation>
 <translation id="1747827819627189109">Ekraanil kuvatav klaviatuur on lubatud</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Akna ülevaate sisse- ja väljalülitamine</translation>
 <translation id="2338501278241028356">Lülitage Bluetooth sisse, et läheduses olevaid seadmeid avastada</translation>
 <translation id="2339073806695260576">Puudutage riiulil elektronpliiatsi nuppu, et teha märkmeid, jäädvustada ekraanipilt, kasutada laserkursorit või suurendusklaasi.</translation>
-<translation id="2351266942280602854">Keel ja sisend</translation>
 <translation id="2352467521400612932">Elektronpliiatsi seaded</translation>
 <translation id="2354174487190027830">Võrgu <ph name="NAME" /> aktiveerimine</translation>
 <translation id="2359808026110333948">Jätka</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Öövalgus: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-kaart on lukustatud</translation>
 <translation id="2653659639078652383">Esita</translation>
-<translation id="2696763960464195425">Teie teave eemaldatakse väljalogimisel. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Valige klaviatuur</translation>
 <translation id="2718395828230677721">Öövalgus</translation>
 <translation id="2727977024730340865">Ühendatud väikese energiakuluga laadijaga. Aku laadimine võib olla ebastabiilne.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Ekraani lukustamise otseteed on muudetud. Kasutage vana otsetee <ph name="OLD_SHORTCUT" /> asemel uut otseteed <ph name="NEW_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Fonditeenus</translation>
 <translation id="4570957409596482333">Nupp Vali ja kuula</translation>
+<translation id="4585337515783392668">Katkesta ülekandmine tundmatus vastuvõtjas</translation>
 <translation id="4628757576491864469">Seadmed</translation>
 <translation id="4659419629803378708">ChromeVox on lubatud</translation>
 <translation id="4734965478015604180">Horisontaalne</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Aknahaldur</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Lisa inimene</translation>
+<translation id="5837036133683224804">Katkesta <ph name="ROUTE_TITLE" /> asukohas <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Väljas</translation>
 <translation id="5895138241574237353">Taaskäivitamine</translation>
 <translation id="5901316534475909376">Tõstuklahv + ESC</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">SUURTÄHELUKK on välja lülitatud</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Kõik on valmis</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> asukohas <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Lükka tagasi</translation>
 <translation id="6453179446719226835">Keelt muudeti</translation>
 <translation id="6459472438155181876">Ekraani laiendamine seadmesse <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Märkme loomine</translation>
 <translation id="8392451568018454956">Konto <ph name="USER_EMAIL_ADDRESS" /> valikute menüü</translation>
 <translation id="8406981827175133772">Täisekraani luup</translation>
+<translation id="8427213022735114808">Dikteerimisel saadetakse teie hääl Google'ile, et lubada häälsisestus kõigil tekstiväljadel.</translation>
 <translation id="8428213095426709021">Seaded</translation>
 <translation id="8431190899827883166">Puudutuste kuvamine</translation>
 <translation id="8433186206711564395">Võrguseaded</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Ava lukk</translation>
 <translation id="9151726767154816831">Värskendamiseks tuleb arvuti taaskäivitada ja teha Powerwash</translation>
 <translation id="9179259655489829027">See funktsioon võimaldab teil parooli sisestamata pääseda kiirelt juurde kõigile sisselogitud kasutajatele. Kasutage seda funktsiooni vaid kontode puhul, mida usaldate.</translation>
+<translation id="9193626018745640770">Ülekandmine tundmatus vastuvõtjas</translation>
 <translation id="9194617393863864469">Logi sisse teine kasutaja ...</translation>
 <translation id="9201131092683066720">Aku on <ph name="PERCENTAGE" />% täis.</translation>
 <translation id="9210037371811586452">Ühendatud töölaua režiimist väljumine</translation>
diff --git a/ash/strings/ash_strings_fa.xtb b/ash/strings/ash_strings_fa.xtb
index fcf07256..26b01983 100644
--- a/ash/strings/ash_strings_fa.xtb
+++ b/ash/strings/ash_strings_fa.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">متأسفیم، گذرواژه‌تان هنوز تأیید نشده است. توجه: اگر به‌تازگی گذرواژه‌تان را تغییر داده‌اید، گذرواژه جدید شما هنگامی‌که از سیستم خارج شوید، اعمال می‌شود؛ لطفاً اینجا از گذرواژه قدیمی خود استفاده کنید.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> باقی‌مانده</translation>
 <translation id="1698760176351776263">‏نشانی IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">سرپرست دستگاه ممکن است بر فعالیتتان نظارت داشته باشد.</translation>
 <translation id="1734367976349034509">این دستگاه توسط سازمانی مدیریت می‌شود</translation>
 <translation id="1746730358044914197">روش‌های ورودی توسط سرپرستتان پیکربندی می‌شوند.</translation>
 <translation id="1747827819627189109">صفحه‌کلید روی صفحه فعال شد</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">مروری کلی بر پنجره تغییر حالت</translation>
 <translation id="2338501278241028356">برای کاوش دستگاه‌های همین اطراف، بلوتوث را روشن کنید</translation>
 <translation id="2339073806695260576">برای یادداشت‌برداری، گرفتن عکس صفحه‌نمایش، استفاده از اشاره‌گر لیزری یا ذره‌بین روی دکمه قلم در قفسه ضربه بزنید.</translation>
-<translation id="2351266942280602854">زبان و ورودی</translation>
 <translation id="2352467521400612932">تنظیمات قلم</translation>
 <translation id="2354174487190027830">فعال‌سازی <ph name="NAME" /></translation>
 <translation id="2359808026110333948">ادامه</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">«نور شب»: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">سیم‌کارت قفل است</translation>
 <translation id="2653659639078652383">ارائه</translation>
-<translation id="2696763960464195425">هنگامی‌که از سیستم خارج شوید، اطلاعاتتان حذف خواهد شد. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">تنظیم صفحه‌کلید</translation>
 <translation id="2718395828230677721">نور شب</translation>
 <translation id="2727977024730340865">باتری به شارژر برق ضعیف متصل است. شارژ باتری ممکن است قابل اطمینان نباشد.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">کلیدهای میان‌بر قفل کردن صفحه تغییر کرده است. لطفاً از <ph name="NEW_SHORTCUT" /> به جای <ph name="OLD_SHORTCUT" /> استفاده کنید.</translation>
 <translation id="4564869809620998694">سرویس قلم</translation>
 <translation id="4570957409596482333">دکمه «انتخاب کنید تا بتوانید صحبت کنید»</translation>
+<translation id="4585337515783392668">توقف ارسال محتوا به گیرنده ناشناس</translation>
 <translation id="4628757576491864469">دستگاه‌ها</translation>
 <translation id="4659419629803378708">‏ChromeVox فعال شد</translation>
 <translation id="4734965478015604180">افقی</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">مدیر پنجره</translation>
 <translation id="5820394555380036790">‏سیستم عامل Chromium </translation>
 <translation id="5832805196449965646">افزودن شخص</translation>
+<translation id="5837036133683224804">توقف <ph name="ROUTE_TITLE" /> به <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">خاموش</translation>
 <translation id="5895138241574237353">راه‌اندازی مجدد</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">‏CAPS LOCK خاموش است</translation>
 <translation id="6406704438230478924">دگرساز راست</translation>
 <translation id="643147933154517414">کاملاً انجام شد</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> به <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">عدم پذیرش</translation>
 <translation id="6453179446719226835">زبان تغییر کرد</translation>
 <translation id="6459472438155181876">گسترش صفحه به <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">یادداشت ایجاد کنید</translation>
 <translation id="8392451568018454956">منوی گزینه‌ها برای <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">ذره‌بین تمام‌صفحه</translation>
+<translation id="8427213022735114808">‏با دیکته کردن، صدایتان به Google ارسال می‌شود تا بتوانید در هر فیلد نوشتاری تایپ گفتاری انجام دهید.</translation>
 <translation id="8428213095426709021">تنظیمات</translation>
 <translation id="8431190899827883166">نمایش ضربه‌ها</translation>
 <translation id="8433186206711564395">تنظیمات شبکه</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">باز کردن قفل</translation>
 <translation id="9151726767154816831">‏راه‌اندازی مجدد و Powerwash برای به‌روزرسانی</translation>
 <translation id="9179259655489829027">این ویژگی امکان می‌دهد بدون نیاز به گذرواژه، به هر کاربری که به سیستم واردشده به‌سرعت دسترسی داشته باشید. تنها برای حساب‌های مورد اعتمادتان از این ویژگی استفاده کنید.</translation>
+<translation id="9193626018745640770">درحال ارسال محتوا به گیرنده ناشناس</translation>
 <translation id="9194617393863864469">ورود به سیستم حسابی دیگر...</translation>
 <translation id="9201131092683066720">باتری <ph name="PERCENTAGE" /> درصد پر است.</translation>
 <translation id="9210037371811586452">خروج از حالت میزکار یکپارچه</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb
index f7575e0..ae7f692 100644
--- a/ash/strings/ash_strings_fi.xtb
+++ b/ash/strings/ash_strings_fi.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Salasanan vahvistaminen ei onnistunut vieläkään. Huom. Jos vaihdoit salasanasi äskettäin, uusi salasana otetaan käyttöön kirjauduttuasi ulos. Käytä tässä vanhaa salasanaasi.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> jäljellä</translation>
 <translation id="1698760176351776263">IPv6-osoite: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Laitteen järjestelmänvalvoja voi ehkä seurata toimintaasi.</translation>
 <translation id="1734367976349034509">Tämä laite on yrityksen hallinnoima.</translation>
 <translation id="1746730358044914197">Järjestelmänvalvoja on määrittänyt syöttötavat.</translation>
 <translation id="1747827819627189109">Ruutunäppäimistö otettiin käyttöön</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Vaihda ikkunan yleiskatsausta</translation>
 <translation id="2338501278241028356">Löydä lähellä olevat laitteet ottamalla ensin Bluetooth käyttöön.</translation>
 <translation id="2339073806695260576">Napauttamalla hyllyn näyttökynäpainiketta voit tehdä muistiinpanoja, tallentaa kuvakaappauksen ja käyttää laserosoitinta tai suurennuslasia.</translation>
-<translation id="2351266942280602854">Kieli ja syöttötapa</translation>
 <translation id="2352467521400612932">Näyttökynäasetukset</translation>
 <translation id="2354174487190027830">Aktivoidaan <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Jatka</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Yövalo: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-kortti on lukittu.</translation>
 <translation id="2653659639078652383">Lähetä</translation>
-<translation id="2696763960464195425">Tietosi poistetaan, kun kirjaudut ulos. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Määritä näppäimistö</translation>
 <translation id="2718395828230677721">Yövalo</translation>
 <translation id="2727977024730340865">Pienitehoinen laturi kytketty. Akku ei ehkä lataudu luotettavasti.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Näytön lukituksen pikanäppäin on muuttunut. Käytä uutta pikanäppäintä <ph name="NEW_SHORTCUT" /> vanhan (<ph name="OLD_SHORTCUT" />) sijaan.</translation>
 <translation id="4564869809620998694">Kirjasinpalvelu</translation>
 <translation id="4570957409596482333">Teksti puhuttuna ‑painike</translation>
+<translation id="4585337515783392668">Lopeta suoratoisto tuntemattomaan kohteeseen</translation>
 <translation id="4628757576491864469">Laitteet</translation>
 <translation id="4659419629803378708">ChromeVox käytössä</translation>
 <translation id="4734965478015604180">Vaakasuora</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Ikkunat</translation>
 <translation id="5820394555380036790">Chromium-käyttöjärjestelmä</translation>
 <translation id="5832805196449965646">Lisää henkilö</translation>
+<translation id="5837036133683224804">Lopeta <ph name="ROUTE_TITLE" /> – <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Pois käytöstä</translation>
 <translation id="5895138241574237353">Käynnistä uudelleen</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -279,6 +278,7 @@
 <translation id="639644700271529076">CAPS LOCK on pois päältä</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Valmis</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> – <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Hylkää</translation>
 <translation id="6453179446719226835">Kieli muutettu</translation>
 <translation id="6459472438155181876">Ruutua laajennetaan: <ph name="DISPLAY_NAME" /></translation>
@@ -375,6 +375,7 @@
 <translation id="8351131234907093545">Luo muistiinpano</translation>
 <translation id="8392451568018454956">Tilin <ph name="USER_EMAIL_ADDRESS" /> vaihtoehtovalikko</translation>
 <translation id="8406981827175133772">Koko näytön suurennus</translation>
+<translation id="8427213022735114808">Sanelu lähettää äänesi Googlelle, jotta puhekirjoitus on mahdollista kaikissa tekstikentissä.</translation>
 <translation id="8428213095426709021">Asetukset</translation>
 <translation id="8431190899827883166">Näytä kosketus</translation>
 <translation id="8433186206711564395">Verkkoasetukset</translation>
@@ -416,6 +417,7 @@
 <translation id="9111102763498581341">Poista lukitus</translation>
 <translation id="9151726767154816831">Käynnistä laite uudelleen ja suorita powerwash asentaaksesi päivitykset</translation>
 <translation id="9179259655489829027">Tämän ominaisuuden avulla kaikkia kirjautuneita käyttäjätilejä voi käyttää ilman salasanaa. Käytä tätä ominaisuutta vain luotettavien tilien kanssa.</translation>
+<translation id="9193626018745640770">Suoratoistetaan tuntemattomaan vastaanottimeen</translation>
 <translation id="9194617393863864469">Kirjaa sisään toinen käyttäjä…</translation>
 <translation id="9201131092683066720">Akussa on virtaa <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Poistutaan yhtenäisen työpöydän tilasta</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb
index 0e5178b..9ec152b 100644
--- a/ash/strings/ash_strings_fil.xtb
+++ b/ash/strings/ash_strings_fil.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Paumanhin, hindi pa rin ma-verify ang iyong password. Tandaan: kung pinalitan mo kamakailan ang iyong password, malalapat ang bago mong password kapag nag-sign out ka, pakigamit ang lumang password dito.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> na lang ang natitira</translation>
 <translation id="1698760176351776263">IPv6 address: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Maaaring masubaybayan ng admin ng device ang iyong aktibidad.</translation>
 <translation id="1734367976349034509">Ang device na ito ay pinamamahalaan ng enterprise</translation>
 <translation id="1746730358044914197">Isinasaayos ng iyong administrator ang mga pamamaraan sa pag-input.</translation>
 <translation id="1747827819627189109">Naka-enable ang on-screen na keyboard</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">I-toggle ang window ng pangkalahatang-ideya</translation>
 <translation id="2338501278241028356">I-on ang Bluetooth upang tuklasin ang mga kalapit na device</translation>
 <translation id="2339073806695260576">I-tap ang button na stylus sa shelf para magsulat ng tala, mag-screenshot, gamitin ang laser pointer, o magnifying glass.</translation>
-<translation id="2351266942280602854">Wika at input</translation>
 <translation id="2352467521400612932">Mga setting ng stylus</translation>
 <translation id="2354174487190027830">Ina-activate ang <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Magpatuloy</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Night Light: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Naka-lock ang SIM card</translation>
 <translation id="2653659639078652383">Isumite</translation>
-<translation id="2696763960464195425">Aalisin ang iyong impormasyon kapag nag-sign out ka. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Itakda ang iyong keyboard</translation>
 <translation id="2718395828230677721">Night Light</translation>
 <translation id="2727977024730340865">Naka-saksak sa isang low-power charger. Maaaring hindi maging tiyak ang pag-charge ng baterya.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Napalitan na ang shortcut para sa pagla-lock sa screen. Mangyaring gamitin ang <ph name="NEW_SHORTCUT" /> sa halip na gamitin ang <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Serbisyo sa font</translation>
 <translation id="4570957409596482333">Button ng Select-to-Speak</translation>
+<translation id="4585337515783392668">Ihinto ang pag-cast sa isang hindi pa natutukoy na tagatanggap</translation>
 <translation id="4628757576491864469">Mga Device</translation>
 <translation id="4659419629803378708">Na-enable ang ChromeVox</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Window manager</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Magdagdag ng Tao</translation>
+<translation id="5837036133683224804">Ihinto ang <ph name="ROUTE_TITLE" /> sa <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Naka-off</translation>
 <translation id="5895138241574237353">I-restart</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Naka-off ang CAPS LOCK</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Tapos na ang lahat</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> sa <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Tanggihan</translation>
 <translation id="6453179446719226835">Napalitan na ang wika</translation>
 <translation id="6459472438155181876">Pinapalawak ang screen sa <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Gumawa ng tala</translation>
 <translation id="8392451568018454956">Menu ng mga pagpipilian para sa <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Fullscreen Magnifier</translation>
+<translation id="8427213022735114808">Ipinapadala ng Dictation ang iyong boses sa Google para mabigyang-daan ang voice-typing sa anumang field ng text.</translation>
 <translation id="8428213095426709021">Mga Setting</translation>
 <translation id="8431190899827883166">Ipakita ang mga pag-tap</translation>
 <translation id="8433186206711564395">Mga setting ng network</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">I-unlock</translation>
 <translation id="9151726767154816831">I-restart at i-powerwash upang i-update</translation>
 <translation id="9179259655489829027">Nagbibigay-daan sa iyo ang feature na ito para mabilis na ma-access ang anumang na-sign in na user nang hindi nangangailangan ng password. Gamitin lang ang feature na ito sa mga account na iyong pinagkakatiwalaan.</translation>
+<translation id="9193626018745640770">Nagka-cast sa isang hindi pa natutukoy na tagatanggap</translation>
 <translation id="9194617393863864469">Mag-sign in ng isa pang user...</translation>
 <translation id="9201131092683066720">Ang baterya ay <ph name="PERCENTAGE" />% na puno.</translation>
 <translation id="9210037371811586452">Lumalabas sa unified desktop mode</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb
index eb6c6d8..02e38473 100644
--- a/ash/strings/ash_strings_fr.xtb
+++ b/ash/strings/ash_strings_fr.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Impossible de valider le mot de passe. Remarque : si vous l'avez modifié dernièrement, votre nouveau mot de passe ne sera appliqué qu'une fois que vous vous serez déconnecté. Veuillez donc utiliser votre ancien mot de passe.</translation>
 <translation id="1677472565718498478">Temps restant : <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adresse IPv6 : <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Il est possible que l'administrateur de l'appareil puisse surveiller votre activité.</translation>
 <translation id="1734367976349034509">Cet appareil est géré par une entreprise</translation>
 <translation id="1746730358044914197">Les modes de saisie sont configurés par votre administrateur.</translation>
 <translation id="1747827819627189109">Clavier à l'écran activé</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Activer/Désactiver la vue d'ensemble des fenêtres</translation>
 <translation id="2338501278241028356">Activer le Bluetooth pour découvrir les appareils à proximité</translation>
 <translation id="2339073806695260576">Appuyez sur le bouton du stylet situé sur l'étagère pour prendre des notes, effectuer des captures d'écran, et utiliser le pointeur laser ou la loupe.</translation>
-<translation id="2351266942280602854">Langue et mode de saisie</translation>
 <translation id="2352467521400612932">Paramètres du stylet</translation>
 <translation id="2354174487190027830">Activation du réseau <ph name="NAME" /> en cours…</translation>
 <translation id="2359808026110333948">Continuer</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Éclairage nocturne : <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">La carte SIM est verrouillée</translation>
 <translation id="2653659639078652383">Valider</translation>
-<translation id="2696763960464195425">Les informations vous concernant sont supprimées lorsque vous vous déconnectez. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Définir votre clavier</translation>
 <translation id="2718395828230677721">Éclairage nocturne</translation>
 <translation id="2727977024730340865">L'appareil est branché à un chargeur de faible puissance. Il se peut que la charge ne soit pas fiable.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Le raccourci permettant de verrouiller l'écran a été modifié. Utilisez "<ph name="NEW_SHORTCUT" />" au lieu de "<ph name="OLD_SHORTCUT" />".</translation>
 <translation id="4564869809620998694">Service de gestion des polices</translation>
 <translation id="4570957409596482333">Bouton "Sélectionner pour prononcer"</translation>
+<translation id="4585337515783392668">Arrêter la diffusion vers un destinataire inconnu</translation>
 <translation id="4628757576491864469">Appareils</translation>
 <translation id="4659419629803378708">ChromeVox activé</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Gestionnaire de fenêtres</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Ajouter une personne</translation>
+<translation id="5837036133683224804">Arrêter <ph name="ROUTE_TITLE" /> vers <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Désactivé</translation>
 <translation id="5895138241574237353">Redémarrer</translation>
 <translation id="5901316534475909376">Maj+Échap</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">La touche de verrouillage des majuscules est désactivée.</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Terminé</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> vers <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Refuser</translation>
 <translation id="6453179446719226835">La langue a été modifiée</translation>
 <translation id="6459472438155181876">Extension de l'écran pour <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Créer une note</translation>
 <translation id="8392451568018454956">Menu "Options" de l'adresse e-mail <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Loupe plein écran</translation>
+<translation id="8427213022735114808">La fonctionnalité de dictée transmet votre voix à Google et permet d'utiliser ainsi la saisie vocale dans n'importe quelle zone de texte.</translation>
 <translation id="8428213095426709021">Paramètres</translation>
 <translation id="8431190899827883166">Afficher les éléments sélectionnés</translation>
 <translation id="8433186206711564395">Paramètres réseau</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Déverrouiller</translation>
 <translation id="9151726767154816831">Redémarrer, puis lancer la réinitialisation Powerwash pour mettre à jour le système</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="9193626018745640770">Destinataire de la diffusion inconnu</translation>
 <translation id="9194617393863864469">Se connecter avec un autre compte utilisateur…</translation>
 <translation id="9201131092683066720">La batterie est chargée à <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Sortie du mode Bureau unifié</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 1a5dc08a..efd3f483 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">માફ કરશો, તમારો પાસવર્ડ હજી ચકાસી શકાયો નથી. નોંધ: જો તમે તાજેતરમાં તમારો પાસવર્ડ બદલ્યો હોય, તો તમારો નવો પાસવર્ડ તમે એક વાર સાઇન આઉટ કરી લો તે પછી લાગુ થશે, કૃપા કરીને અહીં જૂના પાસવર્ડનો ઉપયોગ કરો.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> બાકી</translation>
 <translation id="1698760176351776263">IPv6 સરનામું: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">ઉપકરણ વ્યવસ્થાપક તમારી પ્રવૃત્તિનું નિયમન કરી શકે છે.</translation>
 <translation id="1734367976349034509">આ ઉપકરણ એન્ટરપ્રાઇઝ દ્વારા સંચાલિત થાય છે</translation>
 <translation id="1746730358044914197">ઇનપુટ પદ્ધતિઓને તમારા વ્યવસ્થાપક દ્વારા ગોઠવવામાં આવી છે.</translation>
 <translation id="1747827819627189109">ઓન-સ્ક્રીન કીબોર્ડ સક્ષમ કર્યું</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">ટોગલ વિન્ડો વિહંગાવલોકન</translation>
 <translation id="2338501278241028356">નજીકનાં ઉપકરણો શોધવા માટે Bluetooth ચાલુ કરો</translation>
 <translation id="2339073806695260576">એક નોંધ અથવા સ્ક્રીનશૉટ લેવા, લેઝર પૉઇન્ટર અથવા મૅગ્નિફાયિંગ ગ્લાસનો ઉપયોગ કરવા માટે શેલ્ફ પરના સ્ટાઇલસ બટન પર ટૅપ કરો.</translation>
-<translation id="2351266942280602854">ભાષા અને ઇનપુટ</translation>
 <translation id="2352467521400612932">કલમની સેટિંગ્સ</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> ને સક્રિય કરી રહ્યું છે</translation>
 <translation id="2359808026110333948">ચાલુ રાખો</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">રાત્રિ પ્રકાશ: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM કાર્ડ લૉક કરેલ છે</translation>
 <translation id="2653659639078652383">સબમિટ કરો</translation>
-<translation id="2696763960464195425">જ્યારે તમે સાઇન આઉટ કરશો, ત્યારે તમારી માહિતી કાઢી નાખવામાં આવશે. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">તમારું કીબોર્ડ સેટ કરો</translation>
 <translation id="2718395828230677721">રાત્રિ પ્રકાશ</translation>
 <translation id="2727977024730340865">નિમ્ન-પાવર ચાર્જરમાં પ્લગ કરેલું છે. બૅટરી ચાર્જિંગ વિશ્વસનીય હશે નહીં.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">સ્ક્રીનને લૉક કરવાનો શોર્ટકટ બદલાયો છે. કૃપા કરીને <ph name="OLD_SHORTCUT" /> ને બદલે <ph name="NEW_SHORTCUT" /> નો ઉપયોગ કરો.</translation>
 <translation id="4564869809620998694">ફૉન્ટ સેવા</translation>
 <translation id="4570957409596482333">સાંભળવા માટે પસંદ કરો બટન</translation>
+<translation id="4585337515783392668">અજાણ્યા પ્રાપ્તકર્તા પર કાસ્ટ કરવાનું રોકો</translation>
 <translation id="4628757576491864469">ઉપકરણો</translation>
 <translation id="4659419629803378708">ChromeVox સક્ષમ કર્યું</translation>
 <translation id="4734965478015604180">આડી</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">વિન્ડો મેનેજર</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">વ્યક્તિ ઉમેરો</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> પર <ph name="ROUTE_TITLE" />ને રોકો</translation>
 <translation id="5860033963881614850">બંધ</translation>
 <translation id="5895138241574237353">પુનઃપ્રારંભ કરો</translation>
 <translation id="5901316534475909376">Shift + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK બંધ છે</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">થઈ ગયું</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> પર <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">નકારો</translation>
 <translation id="6453179446719226835">ભાષા બદલવામાં આવી છે</translation>
 <translation id="6459472438155181876">સ્ક્રીનને <ph name="DISPLAY_NAME" /> પર વિસ્તૃત કરી રહ્યાં છે</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">નોંધ બનાવો</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> માટે વિકલ્પો મેનૂ</translation>
 <translation id="8406981827175133772">પૂર્ણસ્ક્રીન મૅગ્નિફાયર</translation>
+<translation id="8427213022735114808">કોઈપણ ટેક્સ્ટ ફીલ્ડમાં અવાજ ટાઇપ કરવાને મંજૂરી આપવા માટે, શ્રુતલેખન Googleને તમારો અવાજ મોકલે છે.</translation>
 <translation id="8428213095426709021">સેટિંગ્સ</translation>
 <translation id="8431190899827883166">ટૅપ બતાવો</translation>
 <translation id="8433186206711564395">નેટવર્ક સેટિંગ્સ</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">અનલોક કરો</translation>
 <translation id="9151726767154816831">અપડેટ કરવા માટે પુનઃપ્રારંભ કરો અને પાવરવૉશ કરો</translation>
 <translation id="9179259655489829027">આ સુવિધા તમને પાસવર્ડની જરૂર વગર ઝડપથી કોઈ સાઇન-ઇન થયેલ વપરાશકર્તાને ઍક્સેસ કરવાની પરવાનગી આપે છે. માત્ર તમે જેના પર વિશ્વાસ કરતા હો તે એકાઉન્ટ સાથે જ આ સુવિધાનો ઉપયોગ કરો.</translation>
+<translation id="9193626018745640770">અજાણ્યા પ્રાપ્તકર્તા પર કાસ્ટ કરી રહ્યાં છીએ</translation>
 <translation id="9194617393863864469">અન્ય વપરાશકર્તા સાઇન ઇન કરો...</translation>
 <translation id="9201131092683066720">બેટરી <ph name="PERCENTAGE" /> % પૂર્ણ છે.</translation>
 <translation id="9210037371811586452">એકીકૃત ડેસ્કટૉપ મોડથી બહાર નીકળે છે</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 757d7f3d..9577b9a 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">माफ़ करें, आपके पासवर्ड की अभी भी पुष्टि नहीं हो पाई है. नोट: अगर आपने हाल ही में अपना पासवर्ड बदला है, तो आपके साइन आउट होते ही आपका नया पासवर्ड लागू हो जाएगा, कृपया यहां पुराने पासवर्ड का इस्तेमाल करें.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> शेष</translation>
 <translation id="1698760176351776263">IPv6 पता: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">डिवाइस का एडमिन आपकी गतिविधि मॉनीटर कर सकता है.</translation>
 <translation id="1734367976349034509">यह डिवाइस एंटरप्राइज़ द्वारा प्रबंधित है</translation>
 <translation id="1746730358044914197">इनपुट विधियों को आपका व्यवस्थापक कॉन्फ़िगर करता है.</translation>
 <translation id="1747827819627189109">ऑन-स्‍क्रीन कीबोर्ड सक्षम है</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">टॉगल विंडो का संक्षिप्त विवरण</translation>
 <translation id="2338501278241028356">आस-पास के डिवाइस खोजने के लिए ब्लूटूथ चालू करें</translation>
 <translation id="2339073806695260576">नोट लेने, स्क्रीनशॉट लेने, लेज़र पॉइंटर या आवर्धक ग्लास का इस्तेमाल करने के लिए शेल्फ़ पर मौजूद स्टाइलस बटन पर टैप करें.</translation>
-<translation id="2351266942280602854">भाषा और इनपुट</translation>
 <translation id="2352467521400612932">स्टाइलस की सेटिंग</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय हो रहा है</translation>
 <translation id="2359808026110333948">जारी रखें</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">नाइट लाइट: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">सिम कार्ड लॉक है</translation>
 <translation id="2653659639078652383">सबमिट करें</translation>
-<translation id="2696763960464195425">जब आप साइन आउट करेंगे तो आपकी जानकारी हटा दी जाएगी. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">अपना कीबोर्ड सेट करें</translation>
 <translation id="2718395828230677721">नाइट लाइट</translation>
 <translation id="2727977024730340865">कम-शक्ति वाले चार्जर में प्लग इन करें. बैटरी चार्ज करना संभवत: विश्वसनीय नहीं होगा.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">स्‍क्रीन को लॉक करने का शॉर्टकट बदल गया है. कृपया <ph name="OLD_SHORTCUT" /> के बजाय <ph name="NEW_SHORTCUT" /> का उपयोग करें.</translation>
 <translation id="4564869809620998694">फ़ॉन्ट सेवा</translation>
 <translation id="4570957409596482333">चुनें और सुनें बटन</translation>
+<translation id="4585337515783392668">ऐसे रिसीवर पर कास्ट करना बंद करें जिसकी जानकारी नहीं है</translation>
 <translation id="4628757576491864469">डिवाइस</translation>
 <translation id="4659419629803378708">ChromeVox सक्षम है</translation>
 <translation id="4734965478015604180">क्षैतिज</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">विंडो मैनेजर</translation>
 <translation id="5820394555380036790">क्रोमियम OS</translation>
 <translation id="5832805196449965646">व्‍यक्ति जोड़ें</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> पर <ph name="ROUTE_TITLE" /> बंद करें</translation>
 <translation id="5860033963881614850">बंद</translation>
 <translation id="5895138241574237353">पुन: प्रारंभ करें</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK बंद है</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">सभी पूरे हो गए</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> पर <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">अस्‍वीकार करें</translation>
 <translation id="6453179446719226835">भाषा बदल दी गई है</translation>
 <translation id="6459472438155181876"><ph name="DISPLAY_NAME" /> पर स्क्रीन विस्तृत कर रहा है</translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">नोट बनाएं</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> के लिए विकल्प मेनू</translation>
 <translation id="8406981827175133772">फ़ुलस्क्रीन पर सामग्री को बड़ा दिखाने की सुविधा</translation>
+<translation id="8427213022735114808">'डिक्टेशन (आप जो बोलते हैं उसे लिखना)' सुविधा आपकी आवाज़ Google को भेजती है ताकि किसी भी लेख फ़ील्ड में बोलकर लिखा जा सके.</translation>
 <translation id="8428213095426709021">सेटिंग</translation>
 <translation id="8431190899827883166">टैप दिखाएं</translation>
 <translation id="8433186206711564395">नेटवर्क सेटिंग</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">अनलॉक करें</translation>
 <translation id="9151726767154816831">अपडेट करने के लिए पुनः प्रारंभ करें और पावरवॉश करें</translation>
 <translation id="9179259655489829027">यह फ़ीचर आपको पासवर्ड के बिना किसी भी साइन इन किए हुए उपयोगकर्ता को जल्दी से एक्सेस करने देता है. इस फ़ीचर का इस्तेमाल सिर्फ़ अपने भरोसेमंद खातों के साथ करें.</translation>
+<translation id="9193626018745640770">ऐसे रिसीवर पर कास्ट किया जा रहा है जिसकी जानकारी नहीं है</translation>
 <translation id="9194617393863864469">किसी अन्‍य उपयोगकर्ता में रूप में साइन इन करें...</translation>
 <translation id="9201131092683066720">बैटरी <ph name="PERCENTAGE" />% भरी हुई है.</translation>
 <translation id="9210037371811586452">संयुक्त डेस्कटॉप मोड से बाहर निकाला जा रहा है</translation>
diff --git a/ash/strings/ash_strings_hr.xtb b/ash/strings/ash_strings_hr.xtb
index 2bfb7d63..3b89b29 100644
--- a/ash/strings/ash_strings_hr.xtb
+++ b/ash/strings/ash_strings_hr.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Vaša zaporka i dalje nije mogla biti potvrđena. Napomena: ako ste nedavno promijenili zaporku, vaša nova zaporka primjenjivat će se nakon što se odjavite. Ovdje upotrijebite staru zaporku.</translation>
 <translation id="1677472565718498478">Još <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 adresa: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Administrator uređaja možda će moći nadzirati vašu aktivnost.</translation>
 <translation id="1734367976349034509">Ovim uređajem upravlja tvrtka</translation>
 <translation id="1746730358044914197">Načine unosa konfigurira administrator.</translation>
 <translation id="1747827819627189109">Tipkovnica na zaslonu omogućena je</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Prebaci na prozor pregleda</translation>
 <translation id="2338501278241028356">Uključite Bluetooth da biste otkrili uređaje u blizini</translation>
 <translation id="2339073806695260576">Dodirnite gumb pisaljke na polici da biste napisali bilješku, izradili snimku zaslona, upotrijebili laserski pokazivač ili povećalo.</translation>
-<translation id="2351266942280602854">Jezik i unos</translation>
 <translation id="2352467521400612932">Postavke pisaljke</translation>
 <translation id="2354174487190027830">Aktiviranje mreže <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Nastavi</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Noćno svjetlo: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM kartica je zaključana</translation>
 <translation id="2653659639078652383">Pošalji</translation>
-<translation id="2696763960464195425">Vaši će podaci biti uklonjeni kada se odjavite. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Postavite tipkovnicu</translation>
 <translation id="2718395828230677721">Noćno svjetlo</translation>
 <translation id="2727977024730340865">Uređaj je priključen na punjač male snage. Punjenje baterije možda nije pouzdano.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Promijenio se prečac za zaključavanje zaslona. Upotrijebite <ph name="NEW_SHORTCUT" /> umjesto <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Usluga fonta</translation>
 <translation id="4570957409596482333">Gumb Odabira za govor</translation>
+<translation id="4585337515783392668">Zaustavite emitiranje na nepoznatom prijamniku</translation>
 <translation id="4628757576491864469">Uređaji</translation>
 <translation id="4659419629803378708">ChromeVox omogućen</translation>
 <translation id="4734965478015604180">Vodoravno</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Upravitelj prozora</translation>
 <translation id="5820394555380036790">OS Chromium</translation>
 <translation id="5832805196449965646">Dodaj osobu</translation>
+<translation id="5837036133683224804">Zaustavite <ph name="ROUTE_TITLE" /> na uređaju <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Isključeno</translation>
 <translation id="5895138241574237353">Ponovno pokreni</translation>
 <translation id="5901316534475909376">Shift + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Tipka CAPS LOCK isključena</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Dovršeno</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> na uređaju <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Odbaci</translation>
 <translation id="6453179446719226835">Jezik je promijenjen</translation>
 <translation id="6459472438155181876">Proširivanje zaslona na zaslon <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Izrada bilješke</translation>
 <translation id="8392451568018454956">Izbornik opcija za korisnika <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Povećalo za cijeli zaslon</translation>
+<translation id="8427213022735114808">Diktat šalje Googleu audiopodatke o vašem glasu kako biste mogli unositi tekst govorom u bilo koje tekstno polje.</translation>
 <translation id="8428213095426709021">Postavke</translation>
 <translation id="8431190899827883166">Prikaži dodire</translation>
 <translation id="8433186206711564395">Postavke mreže</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Otključaj</translation>
 <translation id="9151726767154816831">Ponovo pokrenite sustav i Powerwash za ažuriranje</translation>
 <translation id="9179259655489829027">Ta vam značajka omogućuje brzi pristup bilo kojem prijavljenom korisniku bez zahtijevanja zaporke. Tu značajku upotrebljavajte samo s pouzdanim računima.</translation>
+<translation id="9193626018745640770">Emitiranje na nepoznatom prijamniku</translation>
 <translation id="9194617393863864469">Prijavljivanje drugog korisnika...</translation>
 <translation id="9201131092683066720">Baterija je <ph name="PERCENTAGE" />% puna.</translation>
 <translation id="9210037371811586452">Izlaz iz načina jedinstvene radne površine</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb
index 49460de..8b79115 100644
--- a/ash/strings/ash_strings_hu.xtb
+++ b/ash/strings/ash_strings_hu.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Sajnos a jelszó ellenőrzése még mindig nem sikerült. Megjegyzés: ha a közelmúltban módosította jelszavát, az új jelszó beállítása a kijelentkezés után megy végbe, ezért itt a régi jelszót használja.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> van hátra</translation>
 <translation id="1698760176351776263">IPv6-cím: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Az eszközadminisztrátor képes lehet az Ön tevékenységeinek megfigyelésére.</translation>
 <translation id="1734367976349034509">Az eszközt a vállalat felügyeli</translation>
 <translation id="1746730358044914197">A rendszergazda állította be a beviteli módszereket.</translation>
 <translation id="1747827819627189109">Képernyő-billentyűzet bekapcsolva</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Ablakáttekintési mód váltása</translation>
 <translation id="2338501278241028356">Kapcsolja be a Bluetooth-t a közeli eszközök felfedezéséhez</translation>
 <translation id="2339073806695260576">Koppintson a polcon az érintőceruza gombra, ha jegyzetet vagy képernyőképet szeretne készíteni, illetve ha a lézermutatót vagy a nagyítót kívánja használni.</translation>
-<translation id="2351266942280602854">Nyelv és bevitel</translation>
 <translation id="2352467521400612932">Az érintőceruza beállításai</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> aktiválása</translation>
 <translation id="2359808026110333948">Folytatás</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Éjszakai fény: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">A SIM-kártya zárolva van</translation>
 <translation id="2653659639078652383">Elküldés</translation>
-<translation id="2696763960464195425">Adatait kijelentkezéskor eltávolítjuk. <ph name="LEARN_MORE" />.</translation>
 <translation id="2700493154570097719">Billentyűzetet beállítása</translation>
 <translation id="2718395828230677721">Éjszakai fény</translation>
 <translation id="2727977024730340865">Kis teljesítményű töltőt csatlakoztatott. Az akkumulátor töltése nem megbízható.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Megváltozott a képernyőzárolás billentyűkódja. A <ph name="OLD_SHORTCUT" /> helyett használja a következőt: <ph name="NEW_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Betűtípus-szolgáltatás</translation>
 <translation id="4570957409596482333">Felolvasás gomb</translation>
+<translation id="4585337515783392668">Ismeretlen fogadó eszközre történő átküldés leállítása</translation>
 <translation id="4628757576491864469">Eszközök</translation>
 <translation id="4659419629803378708">ChromeVox bekapcsolva</translation>
 <translation id="4734965478015604180">Vízszintes</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Ablakkezelő</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Személy hozzáadása</translation>
+<translation id="5837036133683224804">A(z) <ph name="ROUTE_TITLE" /> leállítása itt: <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Kikapcsolva</translation>
 <translation id="5895138241574237353">Újraindítás</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">A CAPS LOCK ki van kapcsolva</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Elkészült</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> itt: <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Elutasítás</translation>
 <translation id="6453179446719226835">A nyelv módosult</translation>
 <translation id="6459472438155181876">Képernyő kiterjesztése erre: <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Jegyzet létrehozása</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> beállításainak menüje</translation>
 <translation id="8406981827175133772">Teljes képernyős nagyító</translation>
+<translation id="8427213022735114808">A diktálás elküldi a hangját a Google számára, hogy bármely szövegmezőbe írhasson hangvezérléssel.</translation>
 <translation id="8428213095426709021">Beállítások</translation>
 <translation id="8431190899827883166">Koppintások megjelenítése</translation>
 <translation id="8433186206711564395">Hálózati beállítások</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Feloldás</translation>
 <translation id="9151726767154816831">Indítsa újra, és végezze el a Powerwash folyamatot a frissítéshez</translation>
 <translation id="9179259655489829027">Ez a funkció lehetővé teszi a bejelentkezett felhasználók gyors, jelszó nélküli elérését. Kizárólag olyan fiókok esetében használja a funkciót, amelyekben megbízik.</translation>
+<translation id="9193626018745640770">Átküldés ismeretlen fogadó eszközre</translation>
 <translation id="9194617393863864469">Bejelentkezés másik felhasználóként…</translation>
 <translation id="9201131092683066720">Az akkumulátor töltöttsége: <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Kilépés az Egységes asztali módból</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb
index 6267dcbc..eab3372 100644
--- a/ash/strings/ash_strings_id.xtb
+++ b/ash/strings/ash_strings_id.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Maaf, sandi Anda masih belum dapat diverifikasi. Catatan: jika Anda baru saja mengubah sandi, sandi yang baru akan diterapkan saat Anda logout, gunakan sandi lama di sini.</translation>
 <translation id="1677472565718498478">Sisa waktu <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Alamat IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Admin perangkat mungkin dapat memantau aktivitas Anda.</translation>
 <translation id="1734367976349034509">Perangkat ini dikelola perusahaan</translation>
 <translation id="1746730358044914197">Metode masukan dikonfigurasi oleh administrator.</translation>
 <translation id="1747827819627189109">Keyboard di layar diaktifkan</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Beralih ikhtisar jendela</translation>
 <translation id="2338501278241028356">Aktifkan Bluetooth untuk menemukan perangkat di sekitar</translation>
 <translation id="2339073806695260576">Tap tombol stilus di rak untuk mencatat, mengambil screenshot, serta menggunakan penunjuk laser, atau kaca pembesar.</translation>
-<translation id="2351266942280602854">Bahasa dan masukan</translation>
 <translation id="2352467521400612932">Setelan stilus</translation>
 <translation id="2354174487190027830">Mengaktifkan <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Lanjut</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Cahaya Malam: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Kartu SIM terkunci</translation>
 <translation id="2653659639078652383">Kirim</translation>
-<translation id="2696763960464195425">Informasi akan dihapus saat Anda logout. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Setel keyboard Anda</translation>
 <translation id="2718395828230677721">Cahaya Malam</translation>
 <translation id="2727977024730340865">Dipasang ke pengisi daya rendah. Pengisian daya baterai mungkin tidak dapat diandalkan.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Pintasan untuk mengunci layar telah berubah. Gunakan <ph name="NEW_SHORTCUT" /> sebagai gantinya <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Font service</translation>
 <translation id="4570957409596482333">Tombol Klik untuk Diucapkan</translation>
+<translation id="4585337515783392668">Hentikan transmisi pada penerima yang tidak dikenal</translation>
 <translation id="4628757576491864469">Perangkat</translation>
 <translation id="4659419629803378708">ChromeVox diaktifkan</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Window manager</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Tambahkan Pengguna</translation>
+<translation id="5837036133683224804">Hentikan <ph name="ROUTE_TITLE" /> di <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Nonaktif</translation>
 <translation id="5895138241574237353">Mulai Ulang</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK tidak aktif</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Selesai</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> di <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Tolak</translation>
 <translation id="6453179446719226835">Bahasa telah diubah</translation>
 <translation id="6459472438155181876">Memperpanjang layar ke <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Buat catatan</translation>
 <translation id="8392451568018454956">Menu opsi untuk <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Kaca Pembesar Layar Penuh</translation>
+<translation id="8427213022735114808">Dikte mengirimkan suara Anda ke Google untuk memungkinkan pengetikan menggunakan suara ke kolom teks.</translation>
 <translation id="8428213095426709021">Setelan</translation>
 <translation id="8431190899827883166">Show taps</translation>
 <translation id="8433186206711564395">Setelan jaringan</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Buka kunci</translation>
 <translation id="9151726767154816831">Mulai ulang dan powerwash untuk memperbarui</translation>
 <translation id="9179259655489829027">Dengan fitur ini, Anda dapat dengan cepat mengakses setiap pengguna yang sudah login, tanpa perlu menggunakan sandi. Hanya gunakan fitur ini dengan akun yang Anda percayai.</translation>
+<translation id="9193626018745640770">Mentransmisi pada penerima yang tidak dikenal</translation>
 <translation id="9194617393863864469">Masukkan pengguna lain...</translation>
 <translation id="9201131092683066720">Baterai terisi <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Keluar dari mode desktop terpadu</translation>
diff --git a/ash/strings/ash_strings_it.xtb b/ash/strings/ash_strings_it.xtb
index b9bd880..88db59d 100644
--- a/ash/strings/ash_strings_it.xtb
+++ b/ash/strings/ash_strings_it.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Non è stato ancora possibile verificare la password. Nota: se l'hai modificata di recente, la nuova password verrà applicata quando esci dall'account. Utilizza qui la tua vecchia password.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> rimanenti</translation>
 <translation id="1698760176351776263">Indirizzo IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">L'amministratore del dispositivo potrebbe essere in grado di monitorare le tue attività.</translation>
 <translation id="1734367976349034509">Questo dispositivo è gestito dall'azienda</translation>
 <translation id="1746730358044914197">I metodi di immissione vengono configurati dall'amministratore.</translation>
 <translation id="1747827819627189109">Tastiera sullo schermo attiva</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Attiva/disattiva panoramica finestra</translation>
 <translation id="2338501278241028356">Attiva il Bluetooth per trovare dispositivi nelle vicinanze</translation>
 <translation id="2339073806695260576">Tocca il pulsante dello stilo nella shelf per creare note, acquisire screenshot, usare il puntatore laser o la lente d'ingrandimento.</translation>
-<translation id="2351266942280602854">Lingua e immissione</translation>
 <translation id="2352467521400612932">Impostazioni di stilo</translation>
 <translation id="2354174487190027830">Attivazione di <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continua</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Luminosità notturna: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">La scheda SIM è bloccata</translation>
 <translation id="2653659639078652383">Invia</translation>
-<translation id="2696763960464195425">Le tue informazioni verranno rimosse all'uscita dall'account. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Imposta la tastiera</translation>
 <translation id="2718395828230677721">Luminosità notturna</translation>
 <translation id="2727977024730340865">Collegato a un caricabatterie a basso consumo. La carica della batteria potrebbe non essere affidabile.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">La scorciatoia per bloccare lo schermo è cambiata. Utilizza <ph name="NEW_SHORTCUT" /> invece di <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Servizio di gestione caratteri</translation>
 <translation id="4570957409596482333">Pulsante Seleziona per ascoltare</translation>
+<translation id="4585337515783392668">Interrompi la trasmissione su ricevitore sconosciuto</translation>
 <translation id="4628757576491864469">Dispositivi</translation>
 <translation id="4659419629803378708">ChromeVox attivato</translation>
 <translation id="4734965478015604180">Orizzontale</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Gestione finestre</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Aggiungi persona</translation>
+<translation id="5837036133683224804">Interrompi <ph name="ROUTE_TITLE" /> su <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Off</translation>
 <translation id="5895138241574237353">Riavvia</translation>
 <translation id="5901316534475909376">MAIUSC+ESC</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">Funzione BLOC MAIUSC non attiva</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Operazioni completate</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> su <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Rifiuto</translation>
 <translation id="6453179446719226835">La lingua è stata modificata</translation>
 <translation id="6459472438155181876">Estensione dello schermo su <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Crea nota</translation>
 <translation id="8392451568018454956">Menu Opzioni per <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lente d'ingrandimento a schermo intero</translation>
+<translation id="8427213022735114808">La dettatura invia i tuoi dati audio a Google per consentire la digitazione vocale in tutti i campi di testo.</translation>
 <translation id="8428213095426709021">Impostazioni</translation>
 <translation id="8431190899827883166">Mostra tocchi</translation>
 <translation id="8433186206711564395">Impostazioni di rete</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Sblocca</translation>
 <translation id="9151726767154816831">Riavvia ed esegui Powerwash per aggiornare</translation>
 <translation id="9179259655489829027">Questa funzione consente di accedere rapidamente a qualsiasi utente che abbia effettuato l'accesso, senza bisogno di una password. Utilizza questa funzione solo con gli account che consideri attendibili.</translation>
+<translation id="9193626018745640770">Trasmissione a un ricevitore sconosciuto</translation>
 <translation id="9194617393863864469">Accedi con un altro account utente...</translation>
 <translation id="9201131092683066720">Percentuale di caricamento della batteria: <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Uscita dalla modalità Desktop unificato</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 0038a19..fe07df9c 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">מצטערים, עדיין אי אפשר לאמת את הסיסמה שלך. חשוב לדעת: אם שינית לאחרונה את הסיסמה, הסיסמה החדשה תיכנס לתוקף רק אחרי יציאה מהחשבון. צריך להשתמש כאן בסיסמה הישנה.</translation>
 <translation id="1677472565718498478">זמן נותר - <ph name="TIME" /></translation>
 <translation id="1698760176351776263">‏כתובת IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">מנהל המכשיר עשוי לנטר את הפעילות שלך.</translation>
 <translation id="1734367976349034509">המכשיר הזה מנוהל על ידי ארגון</translation>
 <translation id="1746730358044914197">מנהל המערכת שלך מגדיר את שיטות הקלט.</translation>
 <translation id="1747827819627189109">המקלדת שמופיעה במסך מופעלת</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">החלף סקירת חלון</translation>
 <translation id="2338501278241028356">‏יש להפעיל את Bluetooth כדי לאתר מכשירים קרובים</translation>
 <translation id="2339073806695260576">הקשה על לחצן הסטיילוס במדף מאפשרת לכתוב הערות, לצלם את המסך ולהשתמש בסמן הלייזר או בזכוכית המגדלת.</translation>
-<translation id="2351266942280602854">שפה וקלט</translation>
 <translation id="2352467521400612932">הגדרות סטיילוס</translation>
 <translation id="2354174487190027830">מפעיל את <ph name="NAME" /></translation>
 <translation id="2359808026110333948">המשך</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">תאורת לילה: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">‏כרטיס ה-SIM נעול</translation>
 <translation id="2653659639078652383">שלח</translation>
-<translation id="2696763960464195425">כשיוצאים מהחשבון הפרטים מוסרים. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">בחירת מקלדת</translation>
 <translation id="2718395828230677721">תאורת לילה</translation>
 <translation id="2727977024730340865">מחובר למטען בעל מתח נמוך. ייתכן שטעינת הסוללה לא תהיה אמינה.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">מקש הקיצור לנעילת המסך השתנה. השתמש ב-<ph name="NEW_SHORTCUT" /> במקום ב-<ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">שירות הגופנים</translation>
 <translation id="4570957409596482333">לחצן הקראה</translation>
+<translation id="4585337515783392668">הפסקת העברה במכשיר לא מוכר</translation>
 <translation id="4628757576491864469">מכשירים</translation>
 <translation id="4659419629803378708">‏ChromeVox הופעל</translation>
 <translation id="4734965478015604180">אופקי</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">מנהל החלונות</translation>
 <translation id="5820394555380036790">‏מערכת ההפעלה של Chromium</translation>
 <translation id="5832805196449965646">הוסף משתמש</translation>
+<translation id="5837036133683224804">הפסקת <ph name="ROUTE_TITLE" /> במכשיר <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">כבוי</translation>
 <translation id="5895138241574237353">הפעל מחדש</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">‏CAPS LOCK כבוי</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">הפעולה הושלמה</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> במכשיר <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">דחה</translation>
 <translation id="6453179446719226835">שינוי השפה הסתיים</translation>
 <translation id="6459472438155181876">מרחיב את המסך אל <ph name="DISPLAY_NAME" /></translation>
@@ -374,6 +374,7 @@
 <translation id="8351131234907093545">יצירת הערה</translation>
 <translation id="8392451568018454956">תפריט אפשרויות עבור <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">זכוכית מגדלת במסך מלא</translation>
+<translation id="8427213022735114808">‏הכתבה שולחת הקלטה של הקול שלך אל Google כדי לאפשר הקלדה קולית בכל תיבת טקסט.</translation>
 <translation id="8428213095426709021">הגדרות</translation>
 <translation id="8431190899827883166">הצגת הקשות</translation>
 <translation id="8433186206711564395">הגדרות רשת</translation>
@@ -417,6 +418,7 @@
 <translation id="9179259655489829027">תכונה זו מאפשרת לך לגשת במהירות לכל משתמש המחובר לחשבון, בלי להזין סיסמה.
 
 יש להשתמש בתכונה הזו רק עם חשבונות מהימנים.</translation>
+<translation id="9193626018745640770">מתבצעת העברה במכשיר לא ידוע</translation>
 <translation id="9194617393863864469">הוסף משתמש אחר...</translation>
 <translation id="9201131092683066720">‏הסוללה טעונה ברמה של ‎<ph name="PERCENTAGE" />%‎.</translation>
 <translation id="9210037371811586452">‏יציאה ממצב Unified Desktop</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb
index 02ab3a2..dd7123c 100644
--- a/ash/strings/ash_strings_ja.xtb
+++ b/ash/strings/ash_strings_ja.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">パスワードをまだ確認できません。注: パスワードを最近変更した場合、新しいパスワードはログアウトした後に適用されます。こちらでは古いパスワードを使用してください。</translation>
 <translation id="1677472565718498478">あと <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 アドレス: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">端末の管理者によりアクティビティが監視される可能性があります。</translation>
 <translation id="1734367976349034509">このデバイスは会社が管理しています</translation>
 <translation id="1746730358044914197">入力方法は管理者によって設定されています。</translation>
 <translation id="1747827819627189109">画面キーボードが有効です</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">ウィンドウ切り替えの概要</translation>
 <translation id="2338501278241028356">近くのデバイスを検出するには Bluetooth をオンにしてください</translation>
 <translation id="2339073806695260576">シェルフにあるタッチペン ボタンをタップして、メモやスクリーンショットをとったり、レーザー ポインタや虫メガネを使用したりすることができます。</translation>
-<translation id="2351266942280602854">言語と入力</translation>
 <translation id="2352467521400612932">タッチペンの設定</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> を有効にしています</translation>
 <translation id="2359808026110333948">続行</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">読書灯: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM カードはロックされています</translation>
 <translation id="2653659639078652383">送信</translation>
-<translation id="2696763960464195425">ログアウトすると利用時の情報は削除されます。<ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">キーボードを設定</translation>
 <translation id="2718395828230677721">読書灯</translation>
 <translation id="2727977024730340865">低電力の充電器に接続しています。バッテリーが充電されない可能性があります。</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">画面をロックするショートカットが変わりました。<ph name="OLD_SHORTCUT" /> ではなく <ph name="NEW_SHORTCUT" /> をご使用ください。</translation>
 <translation id="4564869809620998694">フォント サービス</translation>
 <translation id="4570957409596482333">[選択して読み上げ] ボタン</translation>
+<translation id="4585337515783392668">不明な受信デバイスへのキャストを停止します</translation>
 <translation id="4628757576491864469">デバイス</translation>
 <translation id="4659419629803378708">ChromeVox を有効にしました</translation>
 <translation id="4734965478015604180">横</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">ウィンドウ マネージャ</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">ユーザーを追加</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> の「<ph name="ROUTE_TITLE" />」を停止します</translation>
 <translation id="5860033963881614850">オフ</translation>
 <translation id="5895138241574237353">再起動</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CapsLock 機能はオフになっています</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">すべて確認済み</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> に「<ph name="ROUTE_TITLE" />」をキャスト中</translation>
 <translation id="6452181791372256707">拒否</translation>
 <translation id="6453179446719226835">言語が変更されました</translation>
 <translation id="6459472438155181876"><ph name="DISPLAY_NAME" /> へ画面を拡張しています</translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">メモを作成</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> のオプション メニュー</translation>
 <translation id="8406981827175133772">拡大鏡(全画面)</translation>
+<translation id="8427213022735114808">音声入力では、テキスト欄で音声入力できるように Google に音声を送信します。</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8431190899827883166">タップを表示</translation>
 <translation id="8433186206711564395">ネットワーク設定</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">ロック解除</translation>
 <translation id="9151726767154816831">更新するには、再起動して Powerwash を実行してください</translation>
 <translation id="9179259655489829027">この機能を使用すると、パスワードを入力せずにログイン ユーザーにすばやくアクセスできます。この機能は信頼できるアカウントにのみ使用してください。</translation>
+<translation id="9193626018745640770">不明な受信デバイスにキャストしています</translation>
 <translation id="9194617393863864469">別のユーザーとしてログイン...</translation>
 <translation id="9201131092683066720">バッテリー残量: <ph name="PERCENTAGE" />%。</translation>
 <translation id="9210037371811586452">デスクトップ統合モードの終了中</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb
index 1b94902f..de12f69 100644
--- a/ash/strings/ash_strings_kn.xtb
+++ b/ash/strings/ash_strings_kn.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">ಕ್ಷಮಿಸಿ, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಇನ್ನೂ ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಗಮನಿಸಿ: ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ನೀವು ಇತ್ತೀಚೆಗೆ ಬದಲಾಯಿಸಿದ್ದರೆ, ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡಿದ ನಂತರ ನಿಮ್ಮ ಹೊಸ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಜಾರಿಗೆ ತರಲಾಗುತ್ತದೆ, ಇಲ್ಲಿ ಹಳೆಯ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಬಳಸಿ.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ಬಾಕಿ ಉಳಿದಿದೆ</translation>
 <translation id="1698760176351776263">IPv6 ವಿಳಾಸ: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">ಸಾಧನ ನಿರ್ವಾಹಕರಿಗೆ ನಿಮ್ಮ ಚಟುವಟಿಕೆಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಸಾಧ್ಯವಾಗಬಹುದು.</translation>
 <translation id="1734367976349034509">ಈ ಸಾಧನವನ್ನು ಎಂಟರ್‌ಪ್ರೈಸ್ ನಿರ್ವಹಣೆ ಮಾಡುತ್ತಿದೆ</translation>
 <translation id="1746730358044914197">ನಿಮ್ಮ ಇನ್‌ಪುಟ್‌ ವಿಧಾನಗಳನ್ನು ನಿರ್ವಾಹಕರ ಸಹಾಯದಿಂದ ಕಾನ್ಫಿಗರ್‌ ಮಾಡಲಾಗಿದೆ.</translation>
 <translation id="1747827819627189109">ಆನ್ ಸ್ಕ್ರೀನ್ ಕೀಬೋರ್ಡ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">ಟಾಗಲ್ ವಿಂಡೋ ಅವಲೋಕನ</translation>
 <translation id="2338501278241028356">ಸಮೀಪದ ಸಾಧನಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಿ</translation>
 <translation id="2339073806695260576">ಟಿಪ್ಪಣಿ, ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ತೆಗೆದುಕೊಳ್ಳಲು, ಲೇಸರ್‌ ಪಾಯಿಂಟರ್ ಬಳಸಲು ಅಥವಾ ಭೂತಗನ್ನಡಿ ಬಳಸಲು ಶೆಲ್ಫ್‌ನಲ್ಲಿ ಸ್ಟೈಲಸ್ ಬಟನ್ ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ.</translation>
-<translation id="2351266942280602854">ಭಾಷೆ ಹಾಗೂ ಇನ್‌ಪುಟ್</translation>
 <translation id="2352467521400612932">ಸ್ಟೈಲಸ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="2359808026110333948">ಮುಂದುವರಿಸು</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">ನೈಟ್ ಲೈಟ್: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">ಸಿಮ್‌ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="2653659639078652383">ಸಲ್ಲಿಸು</translation>
-<translation id="2696763960464195425">ನೀವು ಸೈನ್ ಔಟ್ ಮಾಡಿದಾಗ ನಿಮ್ಮ ಮಾಹಿತಿಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="2718395828230677721">ನೈಟ್ ಲೈಟ್</translation>
 <translation id="2727977024730340865">ಕಡಿಮೆ ವಿದ್ಯುತ್ ಚಾರ್ಜರ್‌ಗೆ ಪ್ಲಗ್ ಮಾಡಲಾಗಿದೆ. ಬ್ಯಾಟರಿ ಚಾರ್ಜಿಂಗ್ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲದಿರಬಹುದು.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">ಸ್ಕ್ರೀನ್ ಅನ್ನು ಲಾಕ್ ಮಾಡುವ ಶಾರ್ಟ್‌ಕಟ್ ಬದಲಾಗಿದೆ. <ph name="OLD_SHORTCUT" /> ಬದಲಿಗೆ <ph name="NEW_SHORTCUT" /> ಬಳಸಿ.</translation>
 <translation id="4564869809620998694">ಫಾಂಟ್ ಸೇವೆ</translation>
 <translation id="4570957409596482333">ಧ್ವನಿ ಆಯ್ಕೆ ಮಾಡಿ ವೈಶಿಷ್ಟ್ಯದ ಬಟನ್‌</translation>
+<translation id="4585337515783392668">"ಅಪರಿಚಿತ ಸ್ವೀಕರಿಸುವವರು" ನಲ್ಲಿ ಬಿತ್ತರಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ</translation>
 <translation id="4628757576491864469">ಸಾಧನಗಳು</translation>
 <translation id="4659419629803378708">ChromeVox ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="4734965478015604180">ಅಡ್ಡ</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">ವಿಂಡೋ ಮ್ಯಾನೇಜರ್</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸು</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> ನಲ್ಲಿ <ph name="ROUTE_TITLE" /> ನಿಲ್ಲಿಸಿ</translation>
 <translation id="5860033963881614850">ಆಫ್</translation>
 <translation id="5895138241574237353">ಮರುಪ್ರಾರಂಭಿಸಿ</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK ಆಫ್ ಆಗಿದೆ</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">ಎಲ್ಲಾ ಮುಗಿದಿದೆ</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> ನಲ್ಲಿ <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">ತಿರಸ್ಕರಿಸಿ</translation>
 <translation id="6453179446719226835">ಭಾಷೆಯನ್ನು ಬದಲಿಸಲಾಗಿದೆ</translation>
 <translation id="6459472438155181876"><ph name="DISPLAY_NAME" /> ಗೆ ಪರದೆಯನ್ನು ವಿಸ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">ಟಿಪ್ಪಣಿ ರಚಿಸಿ</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> ಅವರಿಗಾಗಿ ಆಯ್ಕೆಗಳ ಮೆನು</translation>
 <translation id="8406981827175133772">ಫುಲ್‌ಸ್ಕ್ರೀನ್ ವರ್ಧಕ</translation>
+<translation id="8427213022735114808">ಯಾವುದೇ ಪಠ್ಯ ಕ್ಷೇತ್ರದಲ್ಲಿ ಧ್ವನಿ ಟೈಪಿಂಗ್ ಅನ್ನು ಅನುಮತಿಸಲು ಡಿಕ್ಟೇಷನ್ Google ಗೆ ನಿಮ್ಮ ಧ್ವನಿಯನ್ನು ಕಳುಹಿಸುತ್ತದೆ.</translation>
 <translation id="8428213095426709021">ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="8431190899827883166">ಟ್ಯಾಪ್‌ ಪಾಯಿಂಟ್‌‌ಗಳನ್ನು ತೋರಿಸಿ</translation>
 <translation id="8433186206711564395">ನೆಟ್‌ವರ್ಕ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">ಅನ್‌ಲಾಕ್</translation>
 <translation id="9151726767154816831">ನವೀಕರಿಸಲು ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಪವರ್‌ವಾಶ್ ಮಾಡಿ</translation>
 <translation id="9179259655489829027">ಸೈನ್-ಇನ್ ಮಾಡಿರುವ ಯಾವುದೇ ಬಳಕೆದಾರರನ್ನು, ಪಾಸ್‌ವರ್ಡ್ ಇಲ್ಲದೆಯೇ ಪ್ರವೇಶಿಸಲು ಈ ವೈಶಿಷ್ಟ್ಯವು ಅವಕಾಶ ನೀಡುತ್ತದೆ. ನಿಮಗೆ ವಿಶ್ವಾಸವಿರುವ ಖಾತೆಗಳೊಂದಿಗೆ ಮಾತ್ರ ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಿ.</translation>
+<translation id="9193626018745640770">"ಅಪರಿಚಿತ ಸ್ವೀಕರಿಸುವವರು" ನಲ್ಲಿ ಬಿತ್ತರಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="9194617393863864469">ಮತ್ತೊಂದು ಬಳಕೆದಾರರಾಗಿ ಸೈನ್‌ ಇನ್‌ ಮಾಡಿ...</translation>
 <translation id="9201131092683066720">ಬ್ಯಾಟರಿ <ph name="PERCENTAGE" />% ಪೂರ್ಣವಾಗಿದೆ.</translation>
 <translation id="9210037371811586452">ಏಕೀಕೃತ ಡೆಸ್ಕ್‌ಟಾಪ್ ಮೋಡ್‌ನಿಂದ ನಿರ್ಗಮಿಸಲಾಗುತ್ತಿದೆ</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb
index ddb16773..9d166b6 100644
--- a/ash/strings/ash_strings_ko.xtb
+++ b/ash/strings/ash_strings_ko.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">비밀번호를 여전히 확인할 수 없습니다. 참고: 최근에 비밀번호를 변경한 경우 로그아웃해야 새로운 비밀번호가 적용됩니다. 이전 비밀번호를 사용해 보세요.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> 남음</translation>
 <translation id="1698760176351776263">IPv6 주소: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">기기 관리자가 내 활동을 모니터링할 수도 있습니다.</translation>
 <translation id="1734367976349034509">기업에서 관리하는 기기입니다.</translation>
 <translation id="1746730358044914197">입력 방법은 관리자가 설정합니다.</translation>
 <translation id="1747827819627189109">터치 키보드 사용 설정됨</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">창 전환 개요</translation>
 <translation id="2338501278241028356">블루투스를 사용 설정하여 근처 기기 탐색</translation>
 <translation id="2339073806695260576">실행기에서 스타일러스 버튼을 탭하여 메모를 작성하거나, 스크린샷을 찍거나, 레이저 포인터 또는 돋보기를 활용할 수 있습니다.</translation>
-<translation id="2351266942280602854">언어 및 입력</translation>
 <translation id="2352467521400612932">스타일러스 설정</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> 활성화 중</translation>
 <translation id="2359808026110333948">계속</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">야간 조명: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM 카드가 잠겨 있습니다.</translation>
 <translation id="2653659639078652383">제출</translation>
-<translation id="2696763960464195425">로그아웃하면 사용자 정보가 삭제됩니다. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">키보드 설정</translation>
 <translation id="2718395828230677721">야간 조명</translation>
 <translation id="2727977024730340865">저출력 충전기에 연결되었습니다. 배터리 충전 상태가 불안정합니다.</translation>
diff --git a/ash/strings/ash_strings_lt.xtb b/ash/strings/ash_strings_lt.xtb
index e3c6732..3f3b0cb4 100644
--- a/ash/strings/ash_strings_lt.xtb
+++ b/ash/strings/ash_strings_lt.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Deja, jūsų slaptažodžio patvirtinti vis tiek nepavyko. Pastaba: jei neseniai pakeitėte slaptažodį, naujas slaptažodis bus taikomas, kai atsijungsite. Čia naudokite senąjį slaptažodį.</translation>
 <translation id="1677472565718498478">Liko <ph name="TIME" /></translation>
 <translation id="1698760176351776263">„IPv6“ adresas: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Gali būti, kad įrenginio administratorius stebi jūsų veiklą.</translation>
 <translation id="1734367976349034509">Šis įrenginys valdomas įmonės</translation>
 <translation id="1746730358044914197">Įvesties metodus konfigūruoja jūsų administratorius.</translation>
 <translation id="1747827819627189109">Ekrano klaviatūra įgalinta</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Perjungti lango apžvalgą</translation>
 <translation id="2338501278241028356">Įjunkite „Bluetooth“, kad aptiktumėte įrenginius netoliese</translation>
 <translation id="2339073806695260576">Palieskite rašiklio mygtuką lentynoje, kad galėtumėte sukurti užrašą, ekrano kopiją, naudoti lazerinį žymeklį arba didinamąjį stiklą.</translation>
-<translation id="2351266942280602854">Kalba ir įvestis</translation>
 <translation id="2352467521400612932">Rašiklio nustatymai</translation>
 <translation id="2354174487190027830">Aktyvinamas „<ph name="NAME" />“</translation>
 <translation id="2359808026110333948">Tęsti</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nakties šviesa: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM kortelė užrakinta</translation>
 <translation id="2653659639078652383">Pateikti</translation>
-<translation id="2696763960464195425">Jūsų informacija bus pašalinta, kai atsijungsite. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Klaviatūros nustatymas</translation>
 <translation id="2718395828230677721">Nakties šviesa</translation>
 <translation id="2727977024730340865">Prijungtas mažos galios įkroviklis. Akumuliatoriaus įkrovimas gali būti nepatikimas.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Pakeistas ekrano užrakinimo spartusis klavišas. Naudokite <ph name="NEW_SHORTCUT" /> vietoje <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Šriftų paslauga</translation>
 <translation id="4570957409596482333">Funkcijos „Teksto ištarimas“ mygtukas</translation>
+<translation id="4585337515783392668">Sustabdyti perdavimą į nežinomą imtuvą</translation>
 <translation id="4628757576491864469">Įrenginiai</translation>
 <translation id="4659419629803378708">„ChromeVox“ įgalinta</translation>
 <translation id="4734965478015604180">Horizontaliai</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Langų tvarkytuvė</translation>
 <translation id="5820394555380036790">„Chromium“ OS</translation>
 <translation id="5832805196449965646">Pridėti asmenį</translation>
+<translation id="5837036133683224804">Sustabdyti „<ph name="ROUTE_TITLE" />“ („<ph name="RECEIVER_NAME" />“)</translation>
 <translation id="5860033963881614850">Išjungta</translation>
 <translation id="5895138241574237353">Paleisti iš naujo</translation>
 <translation id="5901316534475909376">„Shift“ + „Esc“</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">DIDŽIŲJŲ RAIDŽIŲ RAŠYMAS išjungtas</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Viskas atlikta</translation>
+<translation id="6445835306623867477">„<ph name="ROUTE_TITLE" />“ („<ph name="RECEIVER_NAME" />“)</translation>
 <translation id="6452181791372256707">Atmesti</translation>
 <translation id="6453179446719226835">Kalba pakeista</translation>
 <translation id="6459472438155181876">Ekranas išplečiamas į <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Sukurti užrašą</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> skirtų parinkčių meniu</translation>
 <translation id="8406981827175133772">Viso ekrano didintuvas</translation>
+<translation id="8427213022735114808">Naudojant diktavimo funkciją balsas siunčiamas į sistemą „Google“, kad bet kuriame teksto lauke būtų galima rašyti balsu.</translation>
 <translation id="8428213095426709021">Nustatymai</translation>
 <translation id="8431190899827883166">Rodyti palietimus</translation>
 <translation id="8433186206711564395">Tinklo nustatymai</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Atrakinti</translation>
 <translation id="9151726767154816831">Kad atnaujintumėte, paleiskite iš naujo ir naudokite „Powerwash“</translation>
 <translation id="9179259655489829027">Naudodami šią funkciją galite greitai pasiekti bet kurį prisijungusį naudotoją be slaptažodžio. Šią funkciją naudokite tik su patikimomis paskyromis.</translation>
+<translation id="9193626018745640770">Perduodama į nežinomą imtuvą</translation>
 <translation id="9194617393863864469">Prisijungti kaip kitas naudotojas...</translation>
 <translation id="9201131092683066720">Likusi akumuliatoriaus įkrova: <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Išjungiamas sujungiamojo darbalaukio režimas</translation>
diff --git a/ash/strings/ash_strings_lv.xtb b/ash/strings/ash_strings_lv.xtb
index ef520dc..384f324 100644
--- a/ash/strings/ash_strings_lv.xtb
+++ b/ash/strings/ash_strings_lv.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Diemžēl jūsu paroli joprojām nevarēja verificēt. Ņemiet vērā: ja nesen mainījāt paroli, jaunā parole tiks lietota pēc izrakstīšanās. Lūdzu, šeit izmantojiet iepriekšējo paroli.</translation>
 <translation id="1677472565718498478">Atlikušais laiks: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 adrese: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Jūsu darbības var uzraudzīt ierīces administrators.</translation>
 <translation id="1734367976349034509">Šo ierīci pārvalda uzņēmums</translation>
 <translation id="1746730358044914197">Administrators konfigurē ievades metodes.</translation>
 <translation id="1747827819627189109">Ekrāna tastatūra iespējota</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Pārslēgt loga kopsavilkumu</translation>
 <translation id="2338501278241028356">Ieslēdziet Bluetooth, lai atklātu tuvumā esošas ierīces</translation>
 <translation id="2339073806695260576">Pieskarieties skārienekrāna pildspalvas pogai plauktā, lai veiktu piezīmes, uzņemtu ekrānuzņēmumus, izmantotu lāzera rādītāju vai lupu.</translation>
-<translation id="2351266942280602854">Valoda un ievade</translation>
 <translation id="2352467521400612932">Skārienekrāna pildspalvas iestatījumi</translation>
 <translation id="2354174487190027830">Notiek <ph name="NAME" /> aktivizēšana.</translation>
 <translation id="2359808026110333948">Turpināt</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nakts režīms: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM karte ir bloķēta.</translation>
 <translation id="2653659639078652383">Iesniegt</translation>
-<translation id="2696763960464195425">Kad izrakstīsieties, jūsu informācija tiks noņemta. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Iestatiet savu tastatūru</translation>
 <translation id="2718395828230677721">Nakts režīms</translation>
 <translation id="2727977024730340865">Pievienots lādētājs ar mazu strāvas padevi. Akumulatora uzlāde var nebūt uzticama.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Tika mainīti īsinājumtaustiņi, ar kuriem var bloķēt ekrānu. Lūdzu, turpmāk izmantojiet <ph name="NEW_SHORTCUT" />, nevis <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Fontu pakalpojums</translation>
 <translation id="4570957409596482333">Poga “Atlasīt, lai izrunātu”</translation>
+<translation id="4585337515783392668">Pārtraukt apraidi nezināmā uztvērējā</translation>
 <translation id="4628757576491864469">Ierīces</translation>
 <translation id="4659419629803378708">ChromeVox iespējots</translation>
 <translation id="4734965478015604180">Horizontāli</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Logu pārvaldnieks</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Pievienot personu</translation>
+<translation id="5837036133683224804">Pārtraukt “<ph name="ROUTE_TITLE" />” apraidi ierīcē “<ph name="RECEIVER_NAME" />”</translation>
 <translation id="5860033963881614850">Izsl.</translation>
 <translation id="5895138241574237353">Restartēt</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Funkcija CAPS LOCK ir izslēgta.</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Viss gatavs</translation>
+<translation id="6445835306623867477">“<ph name="ROUTE_TITLE" />” apraide ierīcē “<ph name="RECEIVER_NAME" />”</translation>
 <translation id="6452181791372256707">Noraidīt</translation>
 <translation id="6453179446719226835">Valodas maiņa</translation>
 <translation id="6459472438155181876">Paplašina ekrānu uz: <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Izveidot piezīmi</translation>
 <translation id="8392451568018454956">Opciju izvēlne kontam <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Pilnekrāna lupa</translation>
+<translation id="8427213022735114808">Diktēšanas funkcija nosūta jūsu balss datus Google serveriem, lai atļautu rakstīšanu ar balsi jebkurā teksta laukā.</translation>
 <translation id="8428213095426709021">Iestatījumi</translation>
 <translation id="8431190899827883166">Pieskārienu rādīšana</translation>
 <translation id="8433186206711564395">Tīkla iestatījumi</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Atbloķēt</translation>
 <translation id="9151726767154816831">Lai atjauninātu, restartējiet ierīci un izmantojiet funkciju Powerwash.</translation>
 <translation id="9179259655489829027">Šī funkcija ļauj ātri piekļūt jebkuram lietotājam, kurš ir pierakstījies, nepieprasot paroli. Izmantojiet šo funkciju tikai uzticamiem kontiem.</translation>
+<translation id="9193626018745640770">Apraide nezināmā uztvērējā</translation>
 <translation id="9194617393863864469">Pierakstīties kā citam lietotājam...</translation>
 <translation id="9201131092683066720">Akumulatora uzlādes līmenis: <ph name="PERCENTAGE" />%</translation>
 <translation id="9210037371811586452">Notiek iziešana no vienotās darbvirsmas režīma</translation>
diff --git a/ash/strings/ash_strings_ml.xtb b/ash/strings/ash_strings_ml.xtb
index ce1691ba..4552e4d3 100644
--- a/ash/strings/ash_strings_ml.xtb
+++ b/ash/strings/ash_strings_ml.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">ക്ഷമിക്കണം, ഇപ്പോഴും നിങ്ങളുടെ പാസ്‌വേഡ് പരിശോധിച്ചുറപ്പിക്കാൻ കഴിഞ്ഞില്ല. ശ്രദ്ധിക്കുക: സമീപകാലത്ത് നിങ്ങൾ പാസ്‌വേഡ് മാറ്റിയിട്ടുണ്ടെങ്കിൽ, സൈൻ ഔട്ട് ചെയ്‌തുകഴിഞ്ഞാൽ പുതിയ പാസ്‌വേഡ് ബാധകമാകും, ഇവിടെ പഴയ പാസ്‌വേഡ് ഉപയോഗിക്കുക.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> ശേഷിക്കുന്നു</translation>
 <translation id="1698760176351776263">IPv6 വിലാസം: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">ഉപകരണ അഡ്‌മിന് നിങ്ങളുടെ ആക്‌റ്റിവിറ്റി നിരീക്ഷിക്കാനായേക്കും</translation>
 <translation id="1734367976349034509">ഈ ഉപകരണം മാനേജുചെയ്യുന്നത് എന്റർപ്രൈസാണ്</translation>
 <translation id="1746730358044914197">ഇൻപുട്ട് രീതികൾ കോൺഫിഗർ ചെയ്യുന്നത് നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്ററാണ്.</translation>
 <translation id="1747827819627189109">ഓൺ‌ സ്‌ക്രീൻ കീ‌ബോർഡ് പ്രവർത്തനക്ഷമമാക്കി</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">വിൻഡോ ചുരുക്കവിവരണം ടോഗിൾ ചെയ്യുക</translation>
 <translation id="2338501278241028356">സമീപത്തുള്ള ഉപകരണങ്ങൾ കണ്ടെത്താൻ Bluetooth ഓണാക്കുക</translation>
 <translation id="2339073806695260576">കുറിപ്പ്, സ്‌ക്രീന്‍ഷോട്ട്, എന്നിവ എടുക്കാനും ലേസർ പോയിന്‍ററോ ഭൂതക്കണ്ണാടിയോ ഉപയോഗിക്കാനും ഷെൽഫിലെ സ്‌റ്റൈലസ് ബട്ടൺ ടാപ്പ് ചെയ്യുക.</translation>
-<translation id="2351266942280602854">ഭാഷയും ടൈപ്പുചെയ്യലും</translation>
 <translation id="2352467521400612932">സ്റ്റൈലസ് ക്രമീകരണം</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> സജീവമാക്കുന്നു</translation>
 <translation id="2359808026110333948">തുടരൂ</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">നൈറ്റ് ‌ലൈറ്റ്: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">സിം കാർഡ് ലോക്കുചെയ്‌തു</translation>
 <translation id="2653659639078652383">സമര്‍പ്പിക്കൂ</translation>
-<translation id="2696763960464195425">സൈൻ ഔട്ട് ചെയ്യുമ്പോൾ നിങ്ങളുടെ വിവരങ്ങൾ നീക്കം ചെയ്യപ്പെടും. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">നിങ്ങളുടെ കീബോഡ് സജ്ജീകരിക്കുക</translation>
 <translation id="2718395828230677721">നൈറ്റ് ലൈറ്റ്</translation>
 <translation id="2727977024730340865">കുറഞ്ഞ തോതിൽ വൈദ്യുതി പ്രവഹിക്കുന്ന ചാർജ്ജറിലേക്ക് പ്ലഗ് ചെയ്‌തിരിക്കുന്നു. ബാറ്ററി ചാർജുചെയ്യൽ വിശ്വസനീയമാകണമെന്നില്ല.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">സ്‌ക്രീൻ ലോക്കുചെയ്യുന്നതിനുള്ള കുറുക്കുവഴി മാറ്റി. <ph name="OLD_SHORTCUT" /> എന്നതിന് പകരം <ph name="NEW_SHORTCUT" /> ഉപയോഗിക്കുക.</translation>
 <translation id="4564869809620998694">ഫോണ്ട് സേവനം</translation>
 <translation id="4570957409596482333">വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക ബട്ടൺ</translation>
+<translation id="4585337515783392668">അജ്ഞാത റിസീവറിൽ കാസ്‌റ്റ് ചെയ്യുന്നത് നിർത്തുക</translation>
 <translation id="4628757576491864469">ഉപകരണങ്ങൾ</translation>
 <translation id="4659419629803378708">ChromeVox പ്രവർത്തനക്ഷമമാക്കി</translation>
 <translation id="4734965478015604180">സമാന്തരം</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">വിൻഡോ മാനേജർ</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">വ്യക്തിയെ ചേർക്കുക</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" />-ൽ <ph name="ROUTE_TITLE" /> നിർത്തുക</translation>
 <translation id="5860033963881614850">ഓഫാക്കുക</translation>
 <translation id="5895138241574237353">പുനരാരംഭിക്കുക</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK ഓഫാണ്</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">എല്ലാം ചെയ്‌തു</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" />-ൽ <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">നിരസിക്കുക</translation>
 <translation id="6453179446719226835">ഭാഷ മാറ്റിയിരിക്കുന്നു</translation>
 <translation id="6459472438155181876">സ്‌ക്രീൻ <ph name="DISPLAY_NAME" /> എന്നതിലേക്ക് വികസിപ്പിക്കുന്നു</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">കുറിപ്പ് സൃഷ്‌ടിക്കുക</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> എന്നതിനുള്ള ഓപ്‌ഷനുകൾ മെനു</translation>
 <translation id="8406981827175133772">പൂർണ്ണസ്‌ക്രീൻ മാഗ്‌നിഫയർ</translation>
+<translation id="8427213022735114808">ഏതെങ്കിലും ടെക്‌സ്‌റ്റ് ഫീൽഡിൽ വോയ്‌സ് ടൈപ്പിംഗ് അനുവദിക്കുന്നതിന്, 'കേട്ടെഴുതൽ' നിങ്ങളുടെ വോയ്‌സ് Google-ലേക്ക് അയയ്ക്കുന്നു.</translation>
 <translation id="8428213095426709021">ക്രമീകരണങ്ങള്‍</translation>
 <translation id="8431190899827883166">ഷോ ടാപ്‌സ്</translation>
 <translation id="8433186206711564395">നെറ്റ്‍വര്‍ക്ക് ക്രമീകരണങ്ങള്‍</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">അണ്‍ലോക്ക് ചെയ്യുക</translation>
 <translation id="9151726767154816831">അപ്‌ഡേറ്റുചെയ്യാൻ, പുനരാരംഭിച്ച് പവർവാഷുചെയ്യുക</translation>
 <translation id="9179259655489829027">സൈൻ ഇൻ ചെയ്‌ത ഏതൊരു ഉപയോക്താവിനെയും പാസ്‌വേഡ് ഇല്ലാതെ തന്നെ വേഗത്തിൽ ആക്‌സസ് ചെയ്യാൻ ഈ ഫീച്ചർ നിങ്ങളെ അനുവദിക്കുന്നു. നിങ്ങൾക്ക് വിശ്വാസമുള്ള അക്കൗണ്ടുകളിൽ മാത്രം ഈ ഫീച്ചർ ഉപയോഗിക്കുക.</translation>
+<translation id="9193626018745640770">ഒരു അജ്ഞാത റിസീവറിൽ കാസ്‌റ്റ് ചെയ്യുന്നു</translation>
 <translation id="9194617393863864469">മറ്റൊരു ഉപയോക്താവായി സൈൻ ഇൻ ചെയ്യുക...</translation>
 <translation id="9201131092683066720">ബാറ്ററി <ph name="PERCENTAGE" />% നിറഞ്ഞു.</translation>
 <translation id="9210037371811586452">ഏകീകൃത ഡെസ്‌ക്‌ടോപ്പ് മോഡിൽ നിന്ന് പുറത്തുകടക്കുന്നു</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index 8b0cd55c..54c94b62 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">सॉरी, तुमच्या पासवर्डची पडताळणी अजूनही झालेली नाही. टीप: तुम्ही तुमचा पासवर्ड अलीकडेच बदलला असल्यास, तुम्ही साइन आउट केल्यानंतर तुमचा नवीन पासवर्ड लागू केला जाईल, कृपया येथे जुना पासवर्ड वापरा.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> शिल्लक</translation>
 <translation id="1698760176351776263">IPv6 पत्ता: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">डिव्हाइस प्रशासक तुमची अ‍ॅक्टिव्हिटी नियंत्रित करू शकतो.</translation>
 <translation id="1734367976349034509">या डिव्हाइसला संस्थेेने व्यवस्थापित केेले आहे</translation>
 <translation id="1746730358044914197">तुमच्या प्रशासकाद्वारे कॉन्फिगर केलेल्या इनपुट पद्धती.</translation>
 <translation id="1747827819627189109">ऑन-स्क्रीन कीबोर्ड सक्षम</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">विंडो विहंगावलोकन टॉगल करा</translation>
 <translation id="2338501278241028356">जवळपासचे डिव्हाइस शोधण्यासाठी ब्लुटूथ चालू करा</translation>
 <translation id="2339073806695260576">नोट व स्क्रीनशॉट घेण्यासाठी, तसेच लेझर पॉइंटर किंवा भिंग वापरण्यासाठी शेल्फवरील स्टायलस बटणावर टॅप करा.</translation>
-<translation id="2351266942280602854">भाषा आणि इनपुट</translation>
 <translation id="2352467521400612932">लेखणी सेटिंग्ज</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> सक्रिय करत आहे</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">रात्रीचा प्रकाश: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">सिम कार्ड लॉक केले आहे</translation>
 <translation id="2653659639078652383">सबमिट करा</translation>
-<translation id="2696763960464195425">तुम्ही साइन आउट करता तेव्हा तुमची माहिती काढली जाईल. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">तुमचा कीबोर्ड सेट करा</translation>
 <translation id="2718395828230677721">रात्रीचा प्रकाश</translation>
 <translation id="2727977024730340865">एका निम्न-उर्जेच्या चार्जरवर प्लग इन केले. बॅटरी चार्जिंग विश्वसनीय असू शकत नाही.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">स्क्रीन लॉक करण्‍याचा शॉर्टकट बदलला आहे. कृपया <ph name="OLD_SHORTCUT" /> ऐवजी <ph name="NEW_SHORTCUT" /> वापरा.</translation>
 <translation id="4564869809620998694">फॉन्ट सेवा</translation>
 <translation id="4570957409596482333">बोलण्यासाठी निवडा बटण</translation>
+<translation id="4585337515783392668">एखाद्या अज्ञात मिळवणाऱ्यावर कास्ट करणे थांबवा</translation>
 <translation id="4628757576491864469">डिव्हाइसेस</translation>
 <translation id="4659419629803378708">ChromeVox चालू केले</translation>
 <translation id="4734965478015604180">आडवा</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">विंडो व्यवस्थापक</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">व्यक्ती जोडा</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> वर <ph name="ROUTE_TITLE" /> थांबवा</translation>
 <translation id="5860033963881614850">बंद</translation>
 <translation id="5895138241574237353">रीस्टार्ट करा</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK बंद आहे</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">सर्व पूर्ण झाले</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> वर <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">नाकारा</translation>
 <translation id="6453179446719226835">भाषा बदलण्यात आली आहे</translation>
 <translation id="6459472438155181876"><ph name="DISPLAY_NAME" /> मध्ये स्क्रीन विस्तृत करत आहे</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">टीप तयार करा</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> साठी पर्याय मेनू</translation>
 <translation id="8406981827175133772">फुलस्क्रीन मॅग्निफायर</translation>
+<translation id="8427213022735114808">कोणत्याही मजकूर फील्डमध्ये व्हॉइस टायपिंगची अनुमती देण्यासाठी डिक्टेशन तुमचा व्हॉइस Google ला पाठवेल.</translation>
 <translation id="8428213095426709021">सेटिंग्ज</translation>
 <translation id="8431190899827883166">टॅप दाखवा</translation>
 <translation id="8433186206711564395">नेटवर्क सेटिंग्ज</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">अनलॉक करा</translation>
 <translation id="9151726767154816831">अद्यतनासाठी रीस्टार्ट करा आणि powerwash करा</translation>
 <translation id="9179259655489829027">हे वैशिष्ट्य तुम्हाला पासवर्ड शिवाय कोणत्याही साइन-इन केलेल्या वापरकर्त्यास जलदपणे अॅक्सेस करण्याची अनुमती देते. तुमचा विश्वास असलेल्या खात्यांसाठीच फक्त या वैशिष्ट्याचा वापर करा.</translation>
+<translation id="9193626018745640770">एका अज्ञात मिळवणाऱ्यावर कास्ट करत आहे</translation>
 <translation id="9194617393863864469">दुसरा वापरकर्ता साइन इन करा...</translation>
 <translation id="9201131092683066720">बॅटरी <ph name="PERCENTAGE" />% भरली आहे.</translation>
 <translation id="9210037371811586452">एकीकृत डेस्कटॉप मोड मधून बाहेर पडत आहे</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb
index e066338..9962ed2 100644
--- a/ash/strings/ash_strings_ms.xtb
+++ b/ash/strings/ash_strings_ms.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Maaf, kata laluan anda masih tidak dapat disahkan. Perhatian: jika anda menukar kata laluan anda baru-baru ini, kata laluan baharu anda akan digunakan apabila anda log keluar, sila gunakan kata laluan yang lama di sini.</translation>
 <translation id="1677472565718498478">Berbaki <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Alamat IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Pentadbir peranti mungkin dapat memantau aktiviti anda.</translation>
 <translation id="1734367976349034509">Peranti ini diurus perusahaan</translation>
 <translation id="1746730358044914197">Kaedah masukan dikonfigurasi oleh pentadbir anda.</translation>
 <translation id="1747827819627189109">Papan kekunci pada skrin didayakan</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Togol gambaran keseluruhan tetingkap</translation>
 <translation id="2338501278241028356">Hidupkan Bluetooth untuk menemui peranti berdekatan</translation>
 <translation id="2339073806695260576">Ketik butang stilus pada rak untuk mencatat nota, mengambil tangkapan skrin, menggunakan penuding laser atau kanta pembesar.</translation>
-<translation id="2351266942280602854">Bahasa dan input</translation>
 <translation id="2352467521400612932">Tetapan stilus</translation>
 <translation id="2354174487190027830">Mengaktifkan <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Teruskan</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Lampu Malam: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Kad SIM dikunci</translation>
 <translation id="2653659639078652383">Serah</translation>
-<translation id="2696763960464195425">Maklumat anda akan dialih keluar apabila anda log keluar. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Tetapkan papan kekunci anda</translation>
 <translation id="2718395828230677721">Cahaya Malam</translation>
 <translation id="2727977024730340865">Dipalamkan pada pengecas berkuasa rendah. Pengecasan bateri mungkin tidak boleh diharapkan.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Pintasan untuk mengunci skrin telah berubah. Sila gunakan <ph name="NEW_SHORTCUT" /> dan bukannya <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Perkhidmatan fon</translation>
 <translation id="4570957409596482333">Butang Pilih untuk Bercakap</translation>
+<translation id="4585337515783392668">Berhenti menghantar pada penerima yang tidak diketahui</translation>
 <translation id="4628757576491864469">Peranti</translation>
 <translation id="4659419629803378708">ChromeVox didayakan</translation>
 <translation id="4734965478015604180">Mendatar</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Pengurus tetingkap</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Tambah Orang</translation>
+<translation id="5837036133683224804">Berhenti <ph name="ROUTE_TITLE" /> pada <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Dimatikan</translation>
 <translation id="5895138241574237353">Mulakan Semula</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">Kekunci CAPS LOCK dimatikan</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Selesai</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> pada <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Tolak</translation>
 <translation id="6453179446719226835">Bahasa telah ditukar</translation>
 <translation id="6459472438155181876">Melanjutkan skrin ke <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Buat nota</translation>
 <translation id="8392451568018454956">Menu pilihan untuk <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Penggadang Skrin Penuh</translation>
+<translation id="8427213022735114808">Pengimlakan menghantar suara anda kepada Google untuk membolehkan penaipan suara dalam mana-mana medan teks.</translation>
 <translation id="8428213095426709021">Tetapan</translation>
 <translation id="8431190899827883166">Tunjukkan ketikan</translation>
 <translation id="8433186206711564395">Tetapan rangkaian</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Buka kunci</translation>
 <translation id="9151726767154816831">Mulakan semula dan powerwash untuk mengemas kini</translation>
 <translation id="9179259655489829027">Ciri ini membolehkan anda mengakses dengan cepat mana-mana pengguna yang telah log masuk tanpa memerlukan kata laluan. Gunakan ciri ini dengan akaun yang dipercayai sahaja.</translation>
+<translation id="9193626018745640770">Menghantar pada penerima yang tidak diketahui</translation>
 <translation id="9194617393863864469">Log masuk pengguna lain...</translation>
 <translation id="9201131092683066720">Bateri <ph name="PERCENTAGE" />% penuh.</translation>
 <translation id="9210037371811586452">Keluar daripada mod desktop bersatu</translation>
diff --git a/ash/strings/ash_strings_nl.xtb b/ash/strings/ash_strings_nl.xtb
index e2b017c2..8fb7dec 100644
--- a/ash/strings/ash_strings_nl.xtb
+++ b/ash/strings/ash_strings_nl.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Je wachtwoord kan nog steeds niet worden geverifieerd. Opmerking: Als je je wachtwoord onlangs hebt gewijzigd, wordt je nieuwe wachtwoord doorgevoerd wanneer je uitlogt. Gebruik hier het oude wachtwoord.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> resterend</translation>
 <translation id="1698760176351776263">IPv6-adres: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">De beheerder van het apparaat kan je activiteit mogelijk bekijken.</translation>
 <translation id="1734367976349034509">Dit apparaat wordt beheerd door een onderneming</translation>
 <translation id="1746730358044914197">Invoermethoden worden ingesteld door je beheerder.</translation>
 <translation id="1747827819627189109">Schermtoetsenbord ingeschakeld</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Overzicht venster in-/uitschakelen</translation>
 <translation id="2338501278241028356">Schakel Bluetooth in om apparaten in de buurt te vinden</translation>
 <translation id="2339073806695260576">Tik op de stylusknop op de plank om een notitie of screenshot te maken, of om de Assistent, de laserpen of het vergrootglas te gebruiken.</translation>
-<translation id="2351266942280602854">Taal en invoer</translation>
 <translation id="2352467521400612932">Stylusinstellingen</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> activeren</translation>
 <translation id="2359808026110333948">Doorgaan</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nachtverlichting: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Simkaart is vergrendeld</translation>
 <translation id="2653659639078652383">Verzenden</translation>
-<translation id="2696763960464195425">Je informatie wordt verwijderd wanneer je uitlogt. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Je toetsenbord instellen</translation>
 <translation id="2718395828230677721">Nachtverlichting</translation>
 <translation id="2727977024730340865">Aangesloten op een laag-vermogen-lader. Opladen van de batterij mogelijk niet betrouwbaar.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">De sneltoets om het scherm te vergrendelen is gewijzigd. Gebruik <ph name="NEW_SHORTCUT" /> in plaats van <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Lettertypeservice</translation>
 <translation id="4570957409596482333">Knop 'Selecteer om uitgesproken te worden'</translation>
+<translation id="4585337515783392668">Casten naar een onbekende ontvanger stopzetten</translation>
 <translation id="4628757576491864469">Apparaten</translation>
 <translation id="4659419629803378708">ChromeVox ingeschakeld</translation>
 <translation id="4734965478015604180">Horizontaal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Vensterbeheer</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Persoon toevoegen</translation>
+<translation id="5837036133683224804"><ph name="ROUTE_TITLE" /> in <ph name="RECEIVER_NAME" /> stopzetten</translation>
 <translation id="5860033963881614850">Uit</translation>
 <translation id="5895138241574237353">Opnieuw starten</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK is uitgeschakeld</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Klaar</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> in <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Weigeren</translation>
 <translation id="6453179446719226835">Taal is gewijzigd</translation>
 <translation id="6459472438155181876">Scherm uitbreiden naar <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Notitie maken</translation>
 <translation id="8392451568018454956">Optiemenu voor <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Volledig scherm vergroten</translation>
+<translation id="8427213022735114808">Bij dicteren wordt je stem verzonden naar Google, waardoor spraakgestuurd typen in tekstvelden mogelijk wordt.</translation>
 <translation id="8428213095426709021">Instellingen</translation>
 <translation id="8431190899827883166">Tikken weergeven</translation>
 <translation id="8433186206711564395">Netwerkinstellingen</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Ontgrendelen</translation>
 <translation id="9151726767154816831">Opnieuw opstarten en de functie Powerwash gebruiken om bij te werken</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="9193626018745640770">Casten naar een onbekende ontvanger</translation>
 <translation id="9194617393863864469">Een andere gebruiker inloggen...</translation>
 <translation id="9201131092683066720">De batterij is <ph name="PERCENTAGE" />% vol.</translation>
 <translation id="9210037371811586452">Samengestelde desktopmodus wordt gesloten</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb
index a2591c4..5b6cbbc9 100644
--- a/ash/strings/ash_strings_no.xtb
+++ b/ash/strings/ash_strings_no.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Beklager, men passordet ditt kunne fremdeles ikke bekreftes. Merk: Hvis du endret passordet ditt nylig, trer det nye passordet ditt i kraft så snart du logger av. Bruk det gamle passordet ditt her.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> igjen</translation>
 <translation id="1698760176351776263">IPv6-adresse: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Enhetsadministratoren kan muligens overvåke aktiviteten din.</translation>
 <translation id="1734367976349034509">Denne enheten er administrert av en bedrift</translation>
 <translation id="1746730358044914197">Inndatametoder konfigureres av administratoren din.</translation>
 <translation id="1747827819627189109">Skjermtastaturet er aktivert</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Vis eller skjul vindusoversikten</translation>
 <translation id="2338501278241028356">Slå på Bluetooth for å finne enheter i nærheten</translation>
 <translation id="2339073806695260576">Trykk på pekepennknappen på hyllen for å ta et notat, ta en skjermdump, bruke laserpekeren eller bruke forstørrelsesglasset.</translation>
-<translation id="2351266942280602854">Språk og inndata</translation>
 <translation id="2352467521400612932">Innstillinger for pekepenn</translation>
 <translation id="2354174487190027830">Aktiverer <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Fortsett</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nattlys: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-kortet er låst</translation>
 <translation id="2653659639078652383">Send</translation>
-<translation id="2696763960464195425">Informasjonen din fjernes når du logger av. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Velg tastatur</translation>
 <translation id="2718395828230677721">Nattlys</translation>
 <translation id="2727977024730340865">Tilkoblet laveffektslader. Batteriladingen kan være upålitelig.</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb
index 49a3e28c..093c3a0 100644
--- a/ash/strings/ash_strings_pl.xtb
+++ b/ash/strings/ash_strings_pl.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Nadal nie można zweryfikować Twojego hasła. Uwaga: jeśli ostatnio hasło było zmieniane, nowe hasło zostanie zastosowane, gdy się wylogujesz. Tu podaj stare hasło.</translation>
 <translation id="1677472565718498478">Pozostało <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adres IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Administrator urządzenia może monitorować Twoją aktywność.</translation>
 <translation id="1734367976349034509">Tym urządzeniem zarządza firma</translation>
 <translation id="1746730358044914197">Metody wprowadzania zostały skonfigurowane przez administratora.</translation>
 <translation id="1747827819627189109">Klawiatura ekranowa włączona</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Przełącz widok ogólny okna</translation>
 <translation id="2338501278241028356">Włącz Bluetooth, by wykryć urządzenia w pobliżu</translation>
 <translation id="2339073806695260576">Kliknij przycisk rysika na półce, by zrobić notatkę lub zrzut ekranu albo użyć wskaźnika laserowego bądź lupy.</translation>
-<translation id="2351266942280602854">Język i wprowadzanie</translation>
 <translation id="2352467521400612932">Ustawienia rysika</translation>
 <translation id="2354174487190027830">Aktywuję <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Dalej</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Podświetlenie nocne: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Karta SIM jest zablokowana</translation>
 <translation id="2653659639078652383">Prześlij</translation>
-<translation id="2696763960464195425">Gdy się wylogujesz, Twoje dane zostaną usunięte. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Ustaw klawiaturę</translation>
 <translation id="2718395828230677721">Podświetlenie nocne</translation>
 <translation id="2727977024730340865">Podłączono ładowarkę o małej mocy. Ładowanie baterii może być nieprawidłowe.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">Zmieniliśmy skrót, który blokuje ekran. Zamiast <ph name="OLD_SHORTCUT" /> używaj teraz <ph name="NEW_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Usługa czcionek</translation>
 <translation id="4570957409596482333">Przycisk Przeczytaj na głos</translation>
+<translation id="4585337515783392668">Zakończ przesyłanie do nieznanego odbiornika</translation>
 <translation id="4628757576491864469">Urządzenia</translation>
 <translation id="4659419629803378708">Włączono ChromeVox</translation>
 <translation id="4734965478015604180">Orientacja pozioma</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Menedżer okien</translation>
 <translation id="5820394555380036790">System operacyjny Chromium</translation>
 <translation id="5832805196449965646">Dodaj osobę</translation>
+<translation id="5837036133683224804">Zatrzymaj <ph name="ROUTE_TITLE" /> na: <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Wyłączone</translation>
 <translation id="5895138241574237353">Uruchom ponownie</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK jest wyłączony</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Wszystko gotowe</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> na: <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Odrzuć</translation>
 <translation id="6453179446719226835">Język został zmieniony</translation>
 <translation id="6459472438155181876">Rozszerzanie ekranu na <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Utwórz notatkę</translation>
 <translation id="8392451568018454956">Menu opcji dla <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa pełnego ekranu</translation>
+<translation id="8427213022735114808">Dyktowanie wysyła Twój głos do Google, by umożliwić pisanie głosowe w dowolnym polu tekstowym.</translation>
 <translation id="8428213095426709021">Ustawienia</translation>
 <translation id="8431190899827883166">Pokaż kliknięcia</translation>
 <translation id="8433186206711564395">Ustawienia sieci</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Odblokuj</translation>
 <translation id="9151726767154816831">Uruchom ponownie i wykonaj Powerwash, by zaktualizować</translation>
 <translation id="9179259655489829027">Ta funkcja umożliwia szybki dostęp do każdego konta zalogowanego użytkownika bez konieczności podawania hasła. Używaj jej tylko w przypadku kont, którym ufasz.</translation>
+<translation id="9193626018745640770">Przesyłam do nieznanego odbiornika</translation>
 <translation id="9194617393863864469">Zaloguj innego użytkownika...</translation>
 <translation id="9201131092683066720">Naładowanie baterii: <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Wyłączam tryb ujednoliconego pulpitu</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb
index a6449ce..9d23e49 100644
--- a/ash/strings/ash_strings_pt-BR.xtb
+++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Ainda não foi possível confirmar sua senha. Observação: se você alterou sua senha recentemente, a nova senha será aplicada depois que você sair da conta. Use a senha antiga aqui.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
 <translation id="1698760176351776263">Endereço IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">O administrador do dispositivo pode conseguir monitorar sua atividade.</translation>
 <translation id="1734367976349034509">Este dispositivo é gerenciado por uma empresa</translation>
 <translation id="1746730358044914197">Os métodos de entrada são configurados pelo administrador.</translation>
 <translation id="1747827819627189109">Teclado na tela ativado</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Visão geral da janela de alternância</translation>
 <translation id="2338501278241028356">Ativar o Bluetooth para descobrir dispositivos nas proximidades</translation>
 <translation id="2339073806695260576">Toque no botão da stylus na estante para criar uma nota, fazer uma captura de tela e usar o apontador laser ou a lupa.</translation>
-<translation id="2351266942280602854">Idioma e entrada</translation>
 <translation id="2352467521400612932">Configurações da stylus</translation>
 <translation id="2354174487190027830">Ativando <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Modo noturno: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">O cartão SIM está bloqueado</translation>
 <translation id="2653659639078652383">Enviar</translation>
-<translation id="2696763960464195425">Suas informações serão removidas quando você sair. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Configurar teclado</translation>
 <translation id="2718395828230677721">Modo noturno</translation>
 <translation id="2727977024730340865">Conectado a um carregador de baixa potência. O carregamento da bateria pode não ser confiável.</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">O atalho para bloquear a tela foi alterado. Use <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Serviço de fontes</translation>
 <translation id="4570957409596482333">Botão Selecionar para ouvir</translation>
+<translation id="4585337515783392668">Parar de transmitir para um destinatário desconhecido</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
 <translation id="4659419629803378708">ChromeVox ativado</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">Gerenciador de janelas</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Adicionar pessoa</translation>
+<translation id="5837036133683224804">Parar <ph name="ROUTE_TITLE" /> para <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -278,6 +277,7 @@
 <translation id="639644700271529076">CAPS LOCK está desativado</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Pronto</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> para <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Rejeitar</translation>
 <translation id="6453179446719226835">O idioma foi alterado</translation>
 <translation id="6459472438155181876">Estendendo tela para <ph name="DISPLAY_NAME" /></translation>
@@ -374,6 +374,7 @@
 <translation id="8351131234907093545">Criar nota</translation>
 <translation id="8392451568018454956">Menu de opções para <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa de tela cheia</translation>
+<translation id="8427213022735114808">O ditado envia sua voz para o Google e permite digitação por voz em qualquer campo de texto.</translation>
 <translation id="8428213095426709021">Configurações</translation>
 <translation id="8431190899827883166">Mostrar toques</translation>
 <translation id="8433186206711564395">Configurações de rede</translation>
@@ -415,6 +416,7 @@
 <translation id="9111102763498581341">Desbloquear</translation>
 <translation id="9151726767154816831">Reinicie e execute um powerwash para atualizar</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="9193626018745640770">Transmitindo para um destinatário desconhecido</translation>
 <translation id="9194617393863864469">Fazer login com outro usuário...</translation>
 <translation id="9201131092683066720">A bateria está <ph name="PERCENTAGE" />% carregada.</translation>
 <translation id="9210037371811586452">Saindo do modo de área de trabalho unificada</translation>
diff --git a/ash/strings/ash_strings_pt-PT.xtb b/ash/strings/ash_strings_pt-PT.xtb
index ff5f77c..4187820 100644
--- a/ash/strings/ash_strings_pt-PT.xtb
+++ b/ash/strings/ash_strings_pt-PT.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Lamentamos, mas ainda não foi possível validar a sua palavra-passe. Nota: se alterou a palavra-passe recentemente, a nova palavra-passe será aplicada quando terminar sessão. Utilize a palavra-passe antiga aqui.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> restante(s)</translation>
 <translation id="1698760176351776263">Endereço IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">O administrador do dispositivo pode conseguir monitorizar a sua atividade.</translation>
 <translation id="1734367976349034509">Este dispositivo é gerido pela empresa</translation>
 <translation id="1746730358044914197">Os métodos de introdução são configurados pelo gestor.</translation>
 <translation id="1747827819627189109">Teclado no ecrã ativado</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Ativar/desativar vista geral das janelas</translation>
 <translation id="2338501278241028356">Ativar o Bluetooth para detetar dispositivos próximos</translation>
 <translation id="2339073806695260576">Toque no botão da caneta stylus na prateleira para tirar uma nota, criar uma captura de ecrã, utilizar o ponteiro de laser ou a lupa.</translation>
-<translation id="2351266942280602854">Idioma e introdução</translation>
 <translation id="2352467521400612932">Definições da caneta stylus</translation>
 <translation id="2354174487190027830">A ativar <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continuar</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Luz noturna: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">O cartão SIM está bloqueado</translation>
 <translation id="2653659639078652383">Submeter</translation>
-<translation id="2696763960464195425">As suas informações serão removidas quando terminar sessão. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Definir o teclado</translation>
 <translation id="2718395828230677721">Luz noturna</translation>
 <translation id="2727977024730340865">Ligado a um carregador de baixo consumo. O carregamento da bateria pode não ser fiável.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">O atalho para bloquear o ecrã foi alterado. Utilize <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Serviço de tipos de letra</translation>
 <translation id="4570957409596482333">Botão Selecionar para falar</translation>
+<translation id="4585337515783392668">Parar a transmissão para um recetor desconhecido</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
 <translation id="4659419629803378708">ChromeVox ativado</translation>
 <translation id="4734965478015604180">Horizontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Gestor de janelas</translation>
 <translation id="5820394555380036790">SO Chromium</translation>
 <translation id="5832805196449965646">Adicionar pessoa</translation>
+<translation id="5837036133683224804">Parar o <ph name="ROUTE_TITLE" /> no recetor <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Desativado</translation>
 <translation id="5895138241574237353">Reiniciar</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK está desativado</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Tudo concluído</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> no recetor <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Rejeitar</translation>
 <translation id="6453179446719226835">O idioma foi alterado</translation>
 <translation id="6459472438155181876">A prolongar ecrã para <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Criar nota</translation>
 <translation id="8392451568018454956">Menu de opções para <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa de ecrã inteiro</translation>
+<translation id="8427213022735114808">A introdução por voz envia a sua voz para o Google para permitir a Google Digitação por Voz em qualquer campo de texto.</translation>
 <translation id="8428213095426709021">Definições</translation>
 <translation id="8431190899827883166">Mostrar toques</translation>
 <translation id="8433186206711564395">Definições de rede</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Desbloquear</translation>
 <translation id="9151726767154816831">Reiniciar e efetuar um Powerwash para atualizar</translation>
 <translation id="9179259655489829027">Esta funcionalidade permite-lhe aceder rapidamente a qualquer utilizador com a sessão iniciada sem ser necessária uma palavra-passe. Utilize esta funcionalidade apenas com contas fidedignas.</translation>
+<translation id="9193626018745640770">A transmitir para um recetor desconhecido…</translation>
 <translation id="9194617393863864469">Iniciar sessão com outro utilizador...</translation>
 <translation id="9201131092683066720">A bateria está <ph name="PERCENTAGE" />% cheia.</translation>
 <translation id="9210037371811586452">A sair do Modo de ambiente de trabalho unificado</translation>
diff --git a/ash/strings/ash_strings_ro.xtb b/ash/strings/ash_strings_ro.xtb
index 1e748fd..a85d35f 100644
--- a/ash/strings/ash_strings_ro.xtb
+++ b/ash/strings/ash_strings_ro.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Ne pare rău, parola tot nu a putut fi confirmată. Notă: dacă ți-ai schimbat recent parola, aceasta se va aplica după ce te deconectezi. Te rugăm să folosești aici parola veche.</translation>
 <translation id="1677472565718498478">Timp rămas: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adresă IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Administratorul dispozitivului poate să îți monitorizeze activitatea.</translation>
 <translation id="1734367976349034509">Acest dispozitiv este gestionat de companie</translation>
 <translation id="1746730358044914197">Metodele de introducere a textului sunt configurate de administratorul tău.</translation>
 <translation id="1747827819627189109">Tastatură pe ecran activată</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Activați/Dezactivați prezentarea ferestrei</translation>
 <translation id="2338501278241028356">Pentru a descoperi dispozitivele din apropiere, activează Bluetooth</translation>
 <translation id="2339073806695260576">Atinge butonul creion de pe raft ca să creezi note și capturi de ecran, să folosești indicatorul laser sau lupa.</translation>
-<translation id="2351266942280602854">Limbă și metodă de introducere a textului</translation>
 <translation id="2352467521400612932">Setările creionului</translation>
 <translation id="2354174487190027830">Se activează <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Continuă</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Lumină de noapte: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Cardul SIM este blocat</translation>
 <translation id="2653659639078652383">Trimite</translation>
-<translation id="2696763960464195425">Informațiile tale vor fi eliminate după ce te deconectezi. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Setează tastatura</translation>
 <translation id="2718395828230677721">Lumină de noapte</translation>
 <translation id="2727977024730340865">V-ați conectat la un încărcător de putere joasă. Încărcarea bateriei poate fi nesigură.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Comanda rapidă pentru a bloca ecranul a fost modificată. Folosește <ph name="NEW_SHORTCUT" /> în loc de <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Serviciul de fonturi</translation>
 <translation id="4570957409596482333">Butonul Selectează și ascultă</translation>
+<translation id="4585337515783392668">Nu mai proiecta pe un receiver necunoscut</translation>
 <translation id="4628757576491864469">Dispozitive</translation>
 <translation id="4659419629803378708">ChromeVox este activat</translation>
 <translation id="4734965478015604180">Orizontal</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Managerul de ferestre</translation>
 <translation id="5820394555380036790">Sistemul de operare Chromium</translation>
 <translation id="5832805196449965646">Adăugați un utilizator</translation>
+<translation id="5837036133683224804">Întrerupe <ph name="ROUTE_TITLE" /> pe <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Dezactivat</translation>
 <translation id="5895138241574237353">Reîncepe</translation>
 <translation id="5901316534475909376">Shift + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Tasta CAPS LOCK este dezactivată</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Gata</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> pe <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Respingeți</translation>
 <translation id="6453179446719226835">Limba a fost schimbată</translation>
 <translation id="6459472438155181876">Se extinde ecranul pe <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Creează o notă</translation>
 <translation id="8392451568018454956">Meniu cu opțiuni pentru <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupă de ecran complet</translation>
+<translation id="8427213022735114808">Dictarea îți trimite vocea către Google pentru a permite tastarea vocală în orice câmp de text.</translation>
 <translation id="8428213095426709021">Setări</translation>
 <translation id="8431190899827883166">Afișează atingerile</translation>
 <translation id="8433186206711564395">Setări de rețea</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Deblochează</translation>
 <translation id="9151726767154816831">Pentru a actualiza, repornește și folosește Powerwash</translation>
 <translation id="9179259655489829027">Cu această funcție poți să accesezi rapid orice utilizator conectat fără solicitarea parolei. Folosește funcția numai pentru conturile în care ai încredere.</translation>
+<translation id="9193626018745640770">Se proiectează pe un receiver necunoscut</translation>
 <translation id="9194617393863864469">Conectează-te cu alt nume de utilizator...</translation>
 <translation id="9201131092683066720">Nivelul bateriei este de <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Se iese din modul desktop unificat</translation>
diff --git a/ash/strings/ash_strings_ru.xtb b/ash/strings/ash_strings_ru.xtb
index a602b379..932dfbf8c 100644
--- a/ash/strings/ash_strings_ru.xtb
+++ b/ash/strings/ash_strings_ru.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Неверный пароль. Обратите внимание! Если вы недавно изменили пароль, но не выходили из системы, значит, новый пароль ещё не вступил в силу и необходимо указать старый.</translation>
 <translation id="1677472565718498478">Ещё <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Адрес IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Администратор может отслеживать ваши действия на этом устройстве.</translation>
 <translation id="1734367976349034509">Это корпоративное устройство</translation>
 <translation id="1746730358044914197">Способы ввода настраиваются администратором</translation>
 <translation id="1747827819627189109">Экранная клавиатура включена</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Переключить режим обзора</translation>
 <translation id="2338501278241028356">Включите Bluetooth, чтобы найти устройства</translation>
 <translation id="2339073806695260576">Нажмите кнопку стилуса на панели запуска, чтобы создать заметку, сделать скриншот или использовать стилус в качестве лупы или лазерной указки.</translation>
-<translation id="2351266942280602854">Языки и раскладки клавиатуры</translation>
 <translation id="2352467521400612932">Настройки стилуса</translation>
 <translation id="2354174487190027830">Активация <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Далее</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Ночной режим: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-карта заблокирована</translation>
 <translation id="2653659639078652383">Отправить</translation>
-<translation id="2696763960464195425">После выхода из аккаунта ваши данные будут удалены. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Выберите раскладку</translation>
 <translation id="2718395828230677721">Ночной режим</translation>
 <translation id="2727977024730340865">Подключено маломощное зарядное устройство. Возможны проблемы при зарядке.</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb
index 17a1adf..2effca7 100644
--- a/ash/strings/ash_strings_sk.xtb
+++ b/ash/strings/ash_strings_sk.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Je nám to ľúto, ale vaše heslo sa stále nedarí overiť. Poznámka: Ak ste ho nedávno zmenili, nové heslo sa použije až po odhlásení. Tu použite staré heslo.</translation>
 <translation id="1677472565718498478">Zostávajúci čas: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Adresa IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Správca zariadenia môže sledovať vašu aktivitu.</translation>
 <translation id="1734367976349034509">Toto zariadenie je spravované organizáciou</translation>
 <translation id="1746730358044914197">Metódy vstupu sú nakonfigurované vaším správcom.</translation>
 <translation id="1747827819627189109">Klávesnica na obrazovke je povolená</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Prepnúť prehľad okien</translation>
 <translation id="2338501278241028356">Ak chcete nájsť zariadenia v okolí, zapnite Bluetooth</translation>
 <translation id="2339073806695260576">Klepnite na tlačidlo dotykového pera na poličke a vytvorte poznámku, snímku obrazovky alebo použite laserový ukazovateľ či lupu.</translation>
-<translation id="2351266942280602854">Jazyk a vstup</translation>
 <translation id="2352467521400612932">Nastavenia dotykového pera</translation>
 <translation id="2354174487190027830">Aktivujte sa sieť <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Pokračovať</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nočný režim: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM karta je uzamknutá</translation>
 <translation id="2653659639078652383">Odoslať</translation>
-<translation id="2696763960464195425">Vaše informácie sa po odhlásení odstránia. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Nastavenie klávesnice</translation>
 <translation id="2718395828230677721">Nočný režim</translation>
 <translation id="2727977024730340865">Batéria je zapojená do nabíjačky s nízkym výkonom. Nabíjanie batérie nemusí byť spoľahlivé.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Skratka uzamknutia obrazovky bola zmenená. Namiesto skratky <ph name="OLD_SHORTCUT" /> používajte kombináciu klávesov <ph name="NEW_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Služba písiem</translation>
 <translation id="4570957409596482333">Tlačidlo počúvania vybraného textu</translation>
+<translation id="4585337515783392668">Zastaviť prenos do neznámeho zariadenia</translation>
 <translation id="4628757576491864469">Zariadenia</translation>
 <translation id="4659419629803378708">Funkcia ChromeVox je povolená</translation>
 <translation id="4734965478015604180">Na šírku</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Správca okien</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Pridať osobu</translation>
+<translation id="5837036133683224804">Zastaviť prenos obsahu <ph name="ROUTE_TITLE" /> do zariadenia <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Vypnuté</translation>
 <translation id="5895138241574237353">Reštartovať</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK je vypnutý</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Všetko je hotové</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> do zariadenia <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Odmietnuť</translation>
 <translation id="6453179446719226835">Bol zmenený jazyk.</translation>
 <translation id="6459472438155181876">Rozšírenie obrazovky na displej <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Vytvoriť poznámku</translation>
 <translation id="8392451568018454956">Ponuka možností pre používateľa <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Lupa na celú obrazovku</translation>
+<translation id="8427213022735114808">Diktovanie odosiela váš hlas do Googlu a umožňuje tak hlasové zadávanie do všetkých textových polí.</translation>
 <translation id="8428213095426709021">Nastavenia</translation>
 <translation id="8431190899827883166">Zobrazovanie klepnutí</translation>
 <translation id="8433186206711564395">Nastavenia siete</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Odomknúť</translation>
 <translation id="9151726767154816831">Aktualizáciu uskutočníte reštartovaním a použitím funkcie Powerwash</translation>
 <translation id="9179259655489829027">Táto funkcia vám umožní rýchly prístup k ľubovoľnému prihlásenému používateľovi bez hesla. Používajte ju iba s dôveryhodnými účtami.</translation>
+<translation id="9193626018745640770">Prebieha prenášanie do neznámeho prijímača</translation>
 <translation id="9194617393863864469">Prihlásiť ďalšieho používateľa...</translation>
 <translation id="9201131092683066720">Batéria je nabitá na <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Ukončuje sa režim jednotnej pracovnej plochy</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb
index fd1247311..7f64123 100644
--- a/ash/strings/ash_strings_sl.xtb
+++ b/ash/strings/ash_strings_sl.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Vašega gesla še ni bilo mogoče preveriti. Opomba: če ste nedavno spremenili geslo, bo novo geslo začelo veljati, ko se odjavite. Tu uporabite starega.</translation>
 <translation id="1677472565718498478">Še <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Naslov IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Skrbnik naprave lahko morda nadzira vašo dejavnost.</translation>
 <translation id="1734367976349034509">To napravo upravlja podjetje</translation>
 <translation id="1746730358044914197">Načine vnosa konfigurira skrbnik.</translation>
 <translation id="1747827819627189109">Zaslonska tipkovnica omogočena</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Preklop pregleda okna</translation>
 <translation id="2338501278241028356">Vklopite Bluetooth, če želite odkriti naprave v bližini</translation>
 <translation id="2339073806695260576">Dotaknite se gumba pisala na polici, če želite ustvariti zapisek, posneti posnetek zaslona ali uporabiti laserski kazalnik oziroma povečevalno steklo.</translation>
-<translation id="2351266942280602854">Jezik in vnos</translation>
 <translation id="2352467521400612932">Nastavitve pisala</translation>
 <translation id="2354174487190027830">Aktiviranje omrežja <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Nadaljuj</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nočna svetloba: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Kartica SIM je zaklenjena</translation>
 <translation id="2653659639078652383">Pošlji</translation>
-<translation id="2696763960464195425">Vaši podatki bodo odstranjeni, ko se odjavite. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Nastavitev tipkovnice</translation>
 <translation id="2718395828230677721">Nočna svetloba</translation>
 <translation id="2727977024730340865">Priključen je nizkoenergijski polnilnik. Polnjenje akumulatorja morda ne bo zanesljivo.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Bližnjica za zaklepanje zaslona je spremenjena. Uporabite <ph name="NEW_SHORTCUT" /> namesto <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Storitev za pisave</translation>
 <translation id="4570957409596482333">Gumb za »Izberite in poslušajte«</translation>
+<translation id="4585337515783392668">Ustvari predvajanje v neznanem sprejemniku</translation>
 <translation id="4628757576491864469">Naprave</translation>
 <translation id="4659419629803378708">Omogočen je ChromeVox</translation>
 <translation id="4734965478015604180">Vodoravno</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Upravitelj oken</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Dodaj osebo</translation>
+<translation id="5837036133683224804">Ustavi zavihek <ph name="ROUTE_TITLE" /> v sprejemniku <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Izklopljeno</translation>
 <translation id="5895138241574237353">Znova zaženi</translation>
 <translation id="5901316534475909376">Shift + Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Tipka CAPS LOCK je izklopljena</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Končano</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> na <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Zavrni</translation>
 <translation id="6453179446719226835">Jezik je spremenjen</translation>
 <translation id="6459472438155181876">Razširitev zaslon na <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Ustvarjanje zapiska</translation>
 <translation id="8392451568018454956">Meni z možnostmi za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Celozaslonska lupa</translation>
+<translation id="8427213022735114808">Narekovanje pošlje vaš glas v Google zaradi omogočanja glasovnega vnašanja v poljubnem besedilnem polju.</translation>
 <translation id="8428213095426709021">Nastavitve</translation>
 <translation id="8431190899827883166">Prikaz dotikov</translation>
 <translation id="8433186206711564395">Omrežne nastavitve</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Odkleni</translation>
 <translation id="9151726767154816831">Če želite posodobiti, znova zaženite in uporabite funkcijo Powerwash</translation>
 <translation id="9179259655489829027">S to funkcijo lahko hitro dostopate do poljubnega prijavljenega uporabnika, ne da bi vam bilo treba vnesti geslo. Uporabljajte to funkcijo samo z računi, ki jim zaupate.</translation>
+<translation id="9193626018745640770">Predvajanje v neznanem sprejemniku</translation>
 <translation id="9194617393863864469">Prijava drugega uporabnika ...</translation>
 <translation id="9201131092683066720">Napolnjenost akumulatorja: <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Izhod iz načina enotnega namizja</translation>
diff --git a/ash/strings/ash_strings_sr.xtb b/ash/strings/ash_strings_sr.xtb
index 4bd3d48..3f4f0cf8 100644
--- a/ash/strings/ash_strings_sr.xtb
+++ b/ash/strings/ash_strings_sr.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Жао нам је, верификација лозинке још увек није успела. Напомена: ако сте недавно променили лозинку, нова лозинка ће се применити када се одјавите. Овде користите стару лозинку.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> је преостало</translation>
 <translation id="1698760176351776263">IPv6 адреса: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Администратор уређаја може да надгледа ваше активности.</translation>
 <translation id="1734367976349034509">Овим уређајем управља предузеће</translation>
 <translation id="1746730358044914197">Методе уноса конфигурише администратор.</translation>
 <translation id="1747827819627189109">Тастатура на екрану је омогућена</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Укључи/искључи преглед прозора</translation>
 <translation id="2338501278241028356">Укључите Bluetooth да бисте открили уређаје у близини</translation>
 <translation id="2339073806695260576">Додирните дугме писаљке на полици да бисте направили белешку и снимак екрана и да бисте користили ласерски показивач или лупу.</translation>
-<translation id="2351266942280602854">Језик и унос</translation>
 <translation id="2352467521400612932">Подешавања писаљке</translation>
 <translation id="2354174487190027830">Активирање мреже <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Настави</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Ноћно светло: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM картица је закључана</translation>
 <translation id="2653659639078652383">Пошаљи</translation>
-<translation id="2696763960464195425">Информације ће бити уклоњене када се одјавите. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Подесите тастатуру</translation>
 <translation id="2718395828230677721">Ноћно светло</translation>
 <translation id="2727977024730340865">Уређај је укључен у пуњач мале снаге. Пуњење батерије можда неће бити поуздано.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Пречица за закључавање екрана је промењена. Користите <ph name="NEW_SHORTCUT" /> уместо <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Услуга за фонтове</translation>
 <translation id="4570957409596482333">Дугме Изаберите за говор</translation>
+<translation id="4585337515783392668">Заустави пребацивање на непознати пријемник</translation>
 <translation id="4628757576491864469">Уређаји</translation>
 <translation id="4659419629803378708">ChromeVox је омогућен</translation>
 <translation id="4734965478015604180">Хоризонтално</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Менаџер прозора</translation>
 <translation id="5820394555380036790">Chromium ОС</translation>
 <translation id="5832805196449965646">Додај особу</translation>
+<translation id="5837036133683224804">Заустави <ph name="ROUTE_TITLE" /> на уређају <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Искључено</translation>
 <translation id="5895138241574237353">Покрени поново</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK је искључен</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Готово</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> на уређају <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Одбиј</translation>
 <translation id="6453179446719226835">Језик је промењен</translation>
 <translation id="6459472438155181876">Проширивање екрана у <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Направите белешку</translation>
 <translation id="8392451568018454956">Мени са опцијама за <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Лупа за цео екран</translation>
+<translation id="8427213022735114808">Диктирање шаље податке о гласу Google-у да би се омогућило диктирање у свим пољима за текст.</translation>
 <translation id="8428213095426709021">Подешавања</translation>
 <translation id="8431190899827883166">Приказ додира</translation>
 <translation id="8433186206711564395">Мрежна подешавања</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Откључај</translation>
 <translation id="9151726767154816831">Поново покрените и обавите Powerwash да бисте ажурирали</translation>
 <translation id="9179259655489829027">Ова функција вам омогућава да брзо приступите било ком пријављеном кориснику без лозинке. Користите ову функцију само са налозима у које имате поверења.</translation>
+<translation id="9193626018745640770">Пребацује се на непознати пријемник</translation>
 <translation id="9194617393863864469">Пријавите још једног корисника...</translation>
 <translation id="9201131092683066720">Батерија је <ph name="PERCENTAGE" />% пуна.</translation>
 <translation id="9210037371811586452">Излазак из режима спојених радних површина</translation>
diff --git a/ash/strings/ash_strings_sv.xtb b/ash/strings/ash_strings_sv.xtb
index 86e02e3c..1d9283c0 100644
--- a/ash/strings/ash_strings_sv.xtb
+++ b/ash/strings/ash_strings_sv.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Det gick inte att verifiera lösenordet. Obs! Om du nyligen har bytt lösenord börjar det nya lösenordet att gälla först när du loggar ut. Använd det gamla lösenordet här.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> kvar</translation>
 <translation id="1698760176351776263">IPv6-adress: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Enhetsadministratören kan ha möjlighet att övervaka det du gör.</translation>
 <translation id="1734367976349034509">Enheten är företagshanterad</translation>
 <translation id="1746730358044914197">Inmatningsmetoderna konfigureras av administratören.</translation>
 <translation id="1747827819627189109">Skärmen på tangentbordet har aktiverats</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Växla fönsteröversikt</translation>
 <translation id="2338501278241028356">Aktivera Bluetooth så att det går att upptäcka enheter i närheten</translation>
 <translation id="2339073806695260576">När du har tryckt på e-pennan på hyllan kan du anteckna, ta en skärmdump eller använda laserpekaren eller förstoringsglaset.</translation>
-<translation id="2351266942280602854">Språk och inmatning</translation>
 <translation id="2352467521400612932">Inställningar för e-penna</translation>
 <translation id="2354174487190027830">Aktiverar <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Fortsätt</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Nattljus: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-kortet är låst</translation>
 <translation id="2653659639078652383">Skicka</translation>
-<translation id="2696763960464195425">Dina uppgifter tas bort när du loggar ut. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Ställ in tangentbord</translation>
 <translation id="2718395828230677721">Nattljus</translation>
 <translation id="2727977024730340865">Ansluten till en laddare med låg effekt. Batteriet kanske inte laddas ordentligt.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Kortkommandot för att låsa skärmen har ändrats. Använd <ph name="NEW_SHORTCUT" /> i stället för <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Teckensnittstjänst</translation>
 <translation id="4570957409596482333">Knappen Textuppläsning</translation>
+<translation id="4585337515783392668">Sluta casta till en okänd mottagare</translation>
 <translation id="4628757576491864469">Enheter</translation>
 <translation id="4659419629803378708">ChromeVox har aktiverats</translation>
 <translation id="4734965478015604180">Horisontell</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Fönsterhanterare</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Lägg till person</translation>
+<translation id="5837036133683224804">Sluta casta <ph name="ROUTE_TITLE" /> till <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Av</translation>
 <translation id="5895138241574237353">Starta om</translation>
 <translation id="5901316534475909376">Skift+Escape</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK är av</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Klart</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> på <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Avvisa</translation>
 <translation id="6453179446719226835">Språket har ändrats</translation>
 <translation id="6459472438155181876">Utökar skärmen till <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Skapa anteckning</translation>
 <translation id="8392451568018454956">Alternativmenyn för <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Helskärmsförstoring</translation>
+<translation id="8427213022735114808">Med diktering skickas det du säger till Google så att du kan tala in text i vilket textfält som helst.</translation>
 <translation id="8428213095426709021">Inställningar</translation>
 <translation id="8431190899827883166">Visa tryck</translation>
 <translation id="8433186206711564395">Nätverksinställningar</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Lås upp</translation>
 <translation id="9151726767154816831">Starta om och utför en Powerwash-återställning för att uppdatera</translation>
 <translation id="9179259655489829027">Med den här funktionen kan du snabbt öppna en inloggad användare utan att behöva ange lösenordet. Använd bara den här funktionen med konton som du litar på.</translation>
+<translation id="9193626018745640770">Castar till en okänd mottagare</translation>
 <translation id="9194617393863864469">Logga in med en annan användare ...</translation>
 <translation id="9201131092683066720">Batteriet är fullt till <ph name="PERCENTAGE" /> %.</translation>
 <translation id="9210037371811586452">Enhetligt skrivbordsläge avslutas</translation>
diff --git a/ash/strings/ash_strings_sw.xtb b/ash/strings/ash_strings_sw.xtb
index fad7fde..7a1e1d59 100644
--- a/ash/strings/ash_strings_sw.xtb
+++ b/ash/strings/ash_strings_sw.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Samahani, tumeshindwa kuthibitisha nenosiri lako. Kumbuka: ikiwa ulibadilisha nenosiri lako hivi karibuni, nenosiri lako jipya litaanza kutumika pindi utakapoondoka kwenye akaunti, tafadhali tumia nenosiri la awali hapa.</translation>
 <translation id="1677472565718498478">Zimesalia <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Anwani ya IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Msimamizi wa kifaa hiki anaweza kufuatilia shughuli zako.</translation>
 <translation id="1734367976349034509">Kifaa hiki kinadhibitiwa kibiashara</translation>
 <translation id="1746730358044914197">Mbinu za kuingiza data zimewekwa na msimamizi wako.</translation>
 <translation id="1747827819627189109">Kibodi ya skrini imewashwa</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Geuza muhtasari wa dirisha</translation>
 <translation id="2338501278241028356">Washa Bluetooth ili ugundue vifaa vilivyo karibu</translation>
 <translation id="2339073806695260576">Gusa kitufe cha stylus kwenye rafu ili uandike kidokezo, upige picha ya skrini, utumie kielekezi cha leza au lenzi.</translation>
-<translation id="2351266942280602854">Lugha na uingizaji</translation>
 <translation id="2352467521400612932">Mipangilio ya stylus</translation>
 <translation id="2354174487190027830">Inaanza kutumia <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Endelea</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Mwanga wa Usiku: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM kadi imefungwa</translation>
 <translation id="2653659639078652383">Wasilisha</translation>
-<translation id="2696763960464195425">Maelezo yako yataondolewa wakati unaondoka kwenye akaunti. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Weka kibodi yako</translation>
 <translation id="2718395828230677721">Mwanga wa Usiku</translation>
 <translation id="2727977024730340865">Imechomekwa katika chaja ya kawi ya chini. Huenda kuchaji kwa betri hakutakuwa kuzuri.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Njia ya mkato ya kufunga skrini imebadilika. Tafadhali tumia <ph name="NEW_SHORTCUT" /> badala ya <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Huduma ya fonti</translation>
 <translation id="4570957409596482333">Kitufe cha Chagua ili Izungumze</translation>
+<translation id="4585337515783392668">Acha kutuma kwenye kifaa au kwa mpokeaji usiyemjua</translation>
 <translation id="4628757576491864469">Vifaa</translation>
 <translation id="4659419629803378708">ChromeVox imewashwa</translation>
 <translation id="4734965478015604180">Kimlalo</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Kidhibiti cha dirisha</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Ongeza Mtumiaji Mwingine</translation>
+<translation id="5837036133683224804">Komesha <ph name="ROUTE_TITLE" /> kwenye <ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">Kimezimwa</translation>
 <translation id="5895138241574237353">Zzima na uwashe</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">CAPS LOCK imezimwa</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Hakuna arifa</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> kwenye <ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">Kataa</translation>
 <translation id="6453179446719226835">Lugha imebadilishwa</translation>
 <translation id="6459472438155181876">Inapanua skrini kwenye <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Unda kidokezo</translation>
 <translation id="8392451568018454956">Menyu ya chaguo za <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Kikuzaji cha Skrini Nzima</translation>
+<translation id="8427213022735114808">Utamkaji hutuma sauti yako kwa Google ili kuruhusu huduma ya kuandika kwa kutamka katika sehemu yoyote ya maandishi.</translation>
 <translation id="8428213095426709021">Mipangilio</translation>
 <translation id="8431190899827883166">Onyesha unapogusa</translation>
 <translation id="8433186206711564395">Mipangilio ya mtandao</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Fungua</translation>
 <translation id="9151726767154816831">Zima na uwashe na utumie powerwash ili kusasisha</translation>
 <translation id="9179259655489829027">Kipengele hiki kinakuruhusu ufikie kwa haraka mtumiaji yeyote aliyeingia katika akaunti bila ya kuweka nenosiri. Tumia kipengele hiki katika akaunti unazoamini pekee.</translation>
+<translation id="9193626018745640770">Inatuma kwenye kifaa au kwa mpokeaji usiyemjua</translation>
 <translation id="9194617393863864469">Ongeza akaunti nyingine...</translation>
 <translation id="9201131092683066720">Betri imejaa <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Mfumo unaondoka kwenye hali ya eneo-kazi lililounganishwa</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb
index 50d20b5..4bf3032 100644
--- a/ash/strings/ash_strings_ta.xtb
+++ b/ash/strings/ash_strings_ta.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">மன்னிக்கவும், உங்கள் கடவுச்சொல் இன்னும் சரிபார்க்கப்படவில்லை. குறிப்பு: உங்கள் கடவுச்சொல்லைச் சமீபத்தில் மாற்றியிருந்தால், நீங்கள் வெளியேறியவுடன் புதிய கடவுச்சொல் பயன்படுத்தப்படும், இங்கு பழைய கடவுச்சொல்லைப் பயன்படுத்தவும்.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> மணி நேரம்</translation>
 <translation id="1698760176351776263">IPv6 முகவரி: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">நீங்கள் மேற்கொள்ளும் செயல்பாட்டை, சாதன நிர்வாகி கண்காணிக்கலாம்.</translation>
 <translation id="1734367976349034509">இந்தச் சாதனத்தை நிர்வகிப்பது: நிறுவனம்</translation>
 <translation id="1746730358044914197">உள்ளீட்டு முறைகளை உங்கள் நிர்வாகி உள்ளமைத்துள்ளார்.</translation>
 <translation id="1747827819627189109">ஆன்ஸ்க்ரீன் விசைப்பலகை இயக்கப்பட்டது</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">சாளர மேலோட்டத்தை நிலைமாற்று</translation>
 <translation id="2338501278241028356">அருகிலுள்ள சாதனங்களைக் கண்டறிய, புளூடூத்தை இயக்கவும்</translation>
 <translation id="2339073806695260576">குறிப்பெடுக்க, ஸ்கிரீன் ஷாட்டை எடுக்க, லேசர் பாயிண்டர் அல்லது உருப்பெருக்கி ஆகியவற்றைப் பயன்படுத்த, ஷெல்ஃபில் உள்ள ஸ்டைலஸ் பட்டனைத் தட்டவும்.</translation>
-<translation id="2351266942280602854">மொழியும் உள்ளீடும்</translation>
 <translation id="2352467521400612932">ஸ்டைலஸ் அமைப்புகள்</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> ஐச் செயல்படுத்துகிறது</translation>
 <translation id="2359808026110333948">தொடர்க</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">இரவு ஒளி: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">சிம் கார்டு பூட்டப்பட்டுள்ளது</translation>
 <translation id="2653659639078652383">சமர்ப்பி</translation>
-<translation id="2696763960464195425">நீங்கள் வெளியேறியதும், உங்கள் தகவல் அகற்றப்படும். <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">எனது விசைப்பலகையை அமை</translation>
 <translation id="2718395828230677721">இரவு ஒளி</translation>
 <translation id="2727977024730340865">குறைந்த சக்தியிலான சார்ஜர் செருகப்பட்டுள்ளது. பேட்டரி சார்ஜிங் நம்பகமானதாக இல்லாமல் இருக்கலாம்.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb
index 2ee9ed45..13018ea 100644
--- a/ash/strings/ash_strings_te.xtb
+++ b/ash/strings/ash_strings_te.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">క్షమించండి, మీ పాస్‌వర్డ్ ఇప్పటికీ ధృవీకరించబడలేదు. గమనిక: మీరు మీ పాస్‌వర్డ్‌ను ఇటీవల మార్చి ఉంటే, మీరు సైన్ అవుట్ చేసిన తర్వాత మీ కొత్త పాస్‌వర్డ్ వర్తించబడుతుంది, దయచేసి పాత పాస్‌వర్డ్‌ను ఇక్కడ ఉపయోగించండి.</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> మిగిలి ఉంది</translation>
 <translation id="1698760176351776263">IPv6 చిరునామా: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">మీ కార్యకలాపాన్ని పరికర నిర్వాహకుడు పర్యవేక్షించవచ్చు.</translation>
 <translation id="1734367976349034509">ఈ పరికరం సంస్థ ద్వారా నిర్వహించబడుతోంది</translation>
 <translation id="1746730358044914197">ఇన్‌పుట్ పద్ధతులు మీ నిర్వాహకుల ద్వారా కాన్ఫిగర్ చేయబడ్డాయి.</translation>
 <translation id="1747827819627189109">స్క్రీన్‌పై కనిపించే కీబోర్డ్ ప్రారంభించబడింది</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">విండో స్థూలదృష్టిని టోగుల్ చేయి</translation>
 <translation id="2338501278241028356">సమీప పరికరాలను కనుగొనడానికి బ్లూటూత్‌ను ఆన్ చేయండి</translation>
 <translation id="2339073806695260576">గమనికను వ్రాయడానికి, స్క్రీన్‌షాట్‌ను తీయడానికి, లేజర్ పాయింటర్ లేదా భూతద్దాన్ని ఉపయోగించడానికి అరలో స్టైలస్ బటన్‌ను నొక్కండి.</translation>
-<translation id="2351266942280602854">భాష మరియు ఇన్‌పుట్</translation>
 <translation id="2352467521400612932">స్టైలస్ సెట్టింగ్‌లు</translation>
 <translation id="2354174487190027830"><ph name="NAME" />ని సక్రియం చేస్తోంది</translation>
 <translation id="2359808026110333948">కొనసాగు</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">రాత్రి కాంతి: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM కార్డ్ లాక్ అయింది</translation>
 <translation id="2653659639078652383">సమర్పించు</translation>
-<translation id="2696763960464195425">మీరు సైన్ అవుట్ చేసినప్పుడు మీ సమాచారం తీసివేయబడుతుంది. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">మీ కీబోర్డ్‌ని సెట్ చేయండి</translation>
 <translation id="2718395828230677721">రాత్రి కాంతి</translation>
 <translation id="2727977024730340865">తక్కువ-పవర్ గల ఛార్జర్‌కు ప్లగిన్ చేయబడింది. బ్యాటరీ ఛార్జింగ్ విశ్వసనీయంగా ఉండకపోవచ్చు.</translation>
diff --git a/ash/strings/ash_strings_th.xtb b/ash/strings/ash_strings_th.xtb
index 7e8dba3..81fc0942 100644
--- a/ash/strings/ash_strings_th.xtb
+++ b/ash/strings/ash_strings_th.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">ขออภัย ยังคงยืนยันรหัสผ่านไม่ได้ หมายเหตุ: หากคุณเปลี่ยนแปลงรหัสผ่านไปเมื่อเร็วๆ นี้ รหัสผ่านใหม่จะมีผลเมื่อคุณออกจากระบบ โปรดใช้รหัสผ่านเดิมที่นี่</translation>
 <translation id="1677472565718498478">ใช้ได้อีก <ph name="TIME" /></translation>
 <translation id="1698760176351776263">ที่อยู่ IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">ผู้ดูแลระบบของอุปกรณ์อาจมีสิทธิ์ตรวจสอบกิจกรรมของคุณได้</translation>
 <translation id="1734367976349034509">อุปกรณ์นี้ได้รับการจัดการโดยองค์กร</translation>
 <translation id="1746730358044914197">ผู้ดูแลระบบเป็นคนกำหนดค่าวิธีการป้อนข้อมูล</translation>
 <translation id="1747827819627189109">เปิดใช้แป้นพิมพ์บนหน้าจออยู่</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">ภาพรวมการสลับหน้าต่าง</translation>
 <translation id="2338501278241028356">เปิดบลูทูธเพื่อค้นหาอุปกรณ์ใกล้เคียง</translation>
 <translation id="2339073806695260576">แตะปุ่มสไตลัสในชั้นวางเพื่อจดโน้ต บันทึกภาพหน้าจอ ใช้ตัวชี้เลเซอร์ หรือแว่นขยาย</translation>
-<translation id="2351266942280602854">ภาษาและการป้อนข้อมูล</translation>
 <translation id="2352467521400612932">การตั้งค่าสไตลัส</translation>
 <translation id="2354174487190027830">กำลังเปิดใช้งาน <ph name="NAME" /></translation>
 <translation id="2359808026110333948">ดำเนินการต่อ</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">แสงตอนกลางคืน: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">ซิมการ์ดถูกล็อก</translation>
 <translation id="2653659639078652383">ส่ง</translation>
-<translation id="2696763960464195425">ระบบจะนำข้อมูลของคุณออกเมื่อออกจากระบบ <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">ตั้งค่าแป้นพิมพ์</translation>
 <translation id="2718395828230677721">แสงตอนกลางคืน</translation>
 <translation id="2727977024730340865">เสียบอยู่กับที่ชาร์จพลังงานต่ำ การชาร์จแบตเตอรี่อาจไม่น่าเชื่อถือ</translation>
@@ -195,6 +192,7 @@
 <translation id="4544944664594876241">มีการเปลี่ยนแปลงทางลัดที่ใช้ล็อกหน้าจอ โปรดใช้ <ph name="NEW_SHORTCUT" /> แทน <ph name="OLD_SHORTCUT" /></translation>
 <translation id="4564869809620998694">บริการแบบอักษร</translation>
 <translation id="4570957409596482333">ปุ่มเลือกเพื่อให้อ่าน</translation>
+<translation id="4585337515783392668">หยุดแคสต์ไปยังเครื่องรับที่ไม่รู้จัก</translation>
 <translation id="4628757576491864469">อุปกรณ์</translation>
 <translation id="4659419629803378708">เปิดใช้ ChromeVox แล้ว</translation>
 <translation id="4734965478015604180">แนวนอน</translation>
@@ -241,6 +239,7 @@
 <translation id="5805697420284793859">ตัวจัดการหน้าต่าง</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">เพิ่มบุคคล</translation>
+<translation id="5837036133683224804">หยุด <ph name="ROUTE_TITLE" /> ใน<ph name="RECEIVER_NAME" /></translation>
 <translation id="5860033963881614850">ปิด</translation>
 <translation id="5895138241574237353">ปิดแล้วเปิดอีกครั้ง</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK ปิดอยู่</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">เสร็จเรียบร้อย</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> ใน<ph name="RECEIVER_NAME" /></translation>
 <translation id="6452181791372256707">ปฏิเสธ</translation>
 <translation id="6453179446719226835">เปลี่ยนภาษาแล้ว</translation>
 <translation id="6459472438155181876">ขยายหน้าจอไปยัง <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">สร้างโน้ต</translation>
 <translation id="8392451568018454956">เมนูตัวเลือกสำหรับ <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">แว่นขยายทั้งหน้าจอ</translation>
+<translation id="8427213022735114808">การพิมพ์ตามคำบอกจะส่งเสียงของคุณไปยัง Google เพื่อให้พิมพ์ด้วยเสียงได้ในช่องข้อความทั้งหมด</translation>
 <translation id="8428213095426709021">การตั้งค่า</translation>
 <translation id="8431190899827883166">แสดงการแตะ</translation>
 <translation id="8433186206711564395">การตั้งค่าเครือข่าย</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">ปลดล็อก</translation>
 <translation id="9151726767154816831">รีสตาร์ทและ Powerwash เพื่ออัปเดต</translation>
 <translation id="9179259655489829027">ฟีเจอร์นี้ช่วยให้เข้าถึงผู้ใช้ที่ลงชื่อเข้าใช้แล้วได้อย่างรวดเร็วโดยไม่ต้องใช้รหัสผ่าน ใช้ฟีเจอร์นี้กับบัญชีที่คุณเชื่อถือเท่านั้น</translation>
+<translation id="9193626018745640770">กำลังแคสต์ไปยังเครื่องรับที่ไม่รู้จัก</translation>
 <translation id="9194617393863864469">ลงชื่อเข้าใช้ด้วยชื่อผู้ใช้อื่น...</translation>
 <translation id="9201131092683066720">มีแบตเตอรี่ <ph name="PERCENTAGE" />%</translation>
 <translation id="9210037371811586452">กำลังออกจากโหมดเดสก์ท็อปแบบรวมหลายหน้าจอ</translation>
diff --git a/ash/strings/ash_strings_tr.xtb b/ash/strings/ash_strings_tr.xtb
index 8601f04..d54eaf6 100644
--- a/ash/strings/ash_strings_tr.xtb
+++ b/ash/strings/ash_strings_tr.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Maalesef şifreniz hâlâ doğrulanamadı. Not: Şifrenizi yakın zamanda değiştirdiyseniz, yeni şifreniz oturumu kapatmanızdan sonra geçerli olacaktır. Lütfen burada eski şifrenizi kullanın.</translation>
 <translation id="1677472565718498478">Kalan süre: <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 adresi: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Cihaz yöneticisi, etkinliğinizi izleyebilir.</translation>
 <translation id="1734367976349034509">Bu cihaz kuruluş tarafından yönetiliyor</translation>
 <translation id="1746730358044914197">Giriş yöntemleri, yöneticiniz tarafından yapılandırılır.</translation>
 <translation id="1747827819627189109">Dokunmatik klavye etkin</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Pencere genel bakışını değiştir</translation>
 <translation id="2338501278241028356">Yakındaki cihazları keşfetmek için Bluetooth'u aç</translation>
 <translation id="2339073806695260576">Not veya ekran görüntüsü almak, lazer işaretçi veya büyüteç işlevlerini kullanmak için raftaki ekran kalemi düğmesine dokunun.</translation>
-<translation id="2351266942280602854">Dil ve giriş</translation>
 <translation id="2352467521400612932">Ekran kalemi ayarları</translation>
 <translation id="2354174487190027830"><ph name="NAME" /> etkinleştiriliyor</translation>
 <translation id="2359808026110333948">Devam Et</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Gece Işığı: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM kart kilitli</translation>
 <translation id="2653659639078652383">Gönder</translation>
-<translation id="2696763960464195425">Oturumunuzu kapattığınızda bilgileriniz kaldırılır. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Klavyenizi ayarlayın</translation>
 <translation id="2718395828230677721">Gece Işığı</translation>
 <translation id="2727977024730340865">Düşük güçlü bir şarj cihazına takıldı. Şarj durumu güvenilir olmayabilir.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Ekranı kilitleme kısayolu değişti. Lütfen <ph name="OLD_SHORTCUT" /> yerine <ph name="NEW_SHORTCUT" /> kısayolunu kullanın.</translation>
 <translation id="4564869809620998694">Yazı tipi hizmeti</translation>
 <translation id="4570957409596482333">Seç ve Dinle düğmesi</translation>
+<translation id="4585337515783392668">Bilinmeyen bir alıcıda yayını durdur</translation>
 <translation id="4628757576491864469">Cihazlar</translation>
 <translation id="4659419629803378708">ChromeVox etkinleştirildi</translation>
 <translation id="4734965478015604180">Yatay</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Pencere yöneticisi</translation>
 <translation id="5820394555380036790">Chromium OS</translation>
 <translation id="5832805196449965646">Kişi Ekle</translation>
+<translation id="5837036133683224804"><ph name="RECEIVER_NAME" /> adlı alıcıda <ph name="ROUTE_TITLE" /> yayınını durdur</translation>
 <translation id="5860033963881614850">Kapalı</translation>
 <translation id="5895138241574237353">Yeniden başlat</translation>
 <translation id="5901316534475909376">Üst Karakter+Esc</translation>
@@ -277,6 +276,7 @@
 <translation id="639644700271529076">CAPS LOCK kapalı</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Tümü bitti</translation>
+<translation id="6445835306623867477"><ph name="RECEIVER_NAME" /> adlı alıcıda <ph name="ROUTE_TITLE" /></translation>
 <translation id="6452181791372256707">Reddet</translation>
 <translation id="6453179446719226835">Dil değiştirildi</translation>
 <translation id="6459472438155181876">Ekran şuraya genişletiliyor: <ph name="DISPLAY_NAME" /></translation>
@@ -373,6 +373,7 @@
 <translation id="8351131234907093545">Not oluştur</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> seçenekler menüsü</translation>
 <translation id="8406981827175133772">Tam Ekran Büyüteci</translation>
+<translation id="8427213022735114808">Dikte özelliği, konuşarak herhangi bir metin alanına yazı yazabilmenizi sağlamak için sesinizi Google'a gönderir.</translation>
 <translation id="8428213095426709021">Ayarlar</translation>
 <translation id="8431190899827883166">Dokunmaları göster</translation>
 <translation id="8433186206711564395">Ağ ayarları</translation>
@@ -414,6 +415,7 @@
 <translation id="9111102763498581341">Kilidi Aç</translation>
 <translation id="9151726767154816831">Güncellemek için yeniden başlatın ve Powerwash uygulayın</translation>
 <translation id="9179259655489829027">Bu özellik oturum açmış tüm kullanıcılara şifre gerektirmeden hızlı bir şekilde erişmenize olanak verir. Bu özelliği sadece güvendiğiniz hesaplarda kullanın.</translation>
+<translation id="9193626018745640770">Bilinmeyen bir alıcıda yayınlanıyor</translation>
 <translation id="9194617393863864469">Başka bir kullanıcı olarak oturum aç...</translation>
 <translation id="9201131092683066720">Pil %<ph name="PERCENTAGE" /> dolu.</translation>
 <translation id="9210037371811586452">Birleşik masaüstü modundan çıkılıyor</translation>
diff --git a/ash/strings/ash_strings_uk.xtb b/ash/strings/ash_strings_uk.xtb
index 8d01280..f5c4187 100644
--- a/ash/strings/ash_strings_uk.xtb
+++ b/ash/strings/ash_strings_uk.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">На жаль, поки не вдалося підтвердити ваш пароль. Зверніть увагу: якщо ви нещодавно змінили пароль, новий пароль буде застосовано, щойно ви вийдете з облікового запису. Скористайтеся старим паролем тут.</translation>
 <translation id="1677472565718498478">Залишилося <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Адреса IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Адміністратор пристрою може відстежувати вашу активність.</translation>
 <translation id="1734367976349034509">Цим пристроєм керує адміністратор підприємства</translation>
 <translation id="1746730358044914197">Адміністратор налаштував методи введення.</translation>
 <translation id="1747827819627189109">Екранну клавіатуру ввімкнено</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Увімкнення чи вимкнення вікна перегляду</translation>
 <translation id="2338501278241028356">Щоб знайти пристрої поблизу, увімкніть Bluetooth</translation>
 <translation id="2339073806695260576">Щоб робити нотатки та знімки екрана, використовувати лазерний вказівник чи лупу, торкніться кнопки стилуса на полиці.</translation>
-<translation id="2351266942280602854">Мова та способи введення</translation>
 <translation id="2352467521400612932">Налаштування стилуса</translation>
 <translation id="2354174487190027830">Активація <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Продовжити</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Нічний режим: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM-карту заблоковано</translation>
 <translation id="2653659639078652383">Надіслати</translation>
-<translation id="2696763960464195425">Коли ви вийдете з облікового запису, вашу інформацію буде вилучено. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Вибрати клавіатуру</translation>
 <translation id="2718395828230677721">Нічний режим</translation>
 <translation id="2727977024730340865">Підключено до зарядного пристрою низької потужності. Акумулятор може заряджатися неналежним чином.</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">Комбінація клавіш для блокування екрана змінилася. Тепер це <ph name="NEW_SHORTCUT" />, а не <ph name="OLD_SHORTCUT" />.</translation>
 <translation id="4564869809620998694">Сервіс шрифту</translation>
 <translation id="4570957409596482333">Кнопка "Читання з екрана"</translation>
+<translation id="4585337515783392668">Зупинити трансляцію на невідомий пристрій</translation>
 <translation id="4628757576491864469">Пристрої</translation>
 <translation id="4659419629803378708">ChromeVox увімкнено</translation>
 <translation id="4734965478015604180">Горизонтально</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">Диспетчер вікон</translation>
 <translation id="5820394555380036790">ОС Chromium</translation>
 <translation id="5832805196449965646">Додати користувача</translation>
+<translation id="5837036133683224804">Зупинити трансляцію <ph name="ROUTE_TITLE" /> на пристрій "<ph name="RECEIVER_NAME" />"</translation>
 <translation id="5860033963881614850">Вимк.</translation>
 <translation id="5895138241574237353">Перезапустити</translation>
 <translation id="5901316534475909376">Shift+Esc</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">Режим CAPS LOCK вимкнено</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">Готово</translation>
+<translation id="6445835306623867477"><ph name="ROUTE_TITLE" /> транслюється на пристрій "<ph name="RECEIVER_NAME" />"</translation>
 <translation id="6452181791372256707">Відхилити</translation>
 <translation id="6453179446719226835">Мову змінено</translation>
 <translation id="6459472438155181876">Розширення екрана на <ph name="DISPLAY_NAME" /></translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">Створити нотатку</translation>
 <translation id="8392451568018454956">Меню параметрів для <ph name="USER_EMAIL_ADDRESS" /></translation>
 <translation id="8406981827175133772">Лупа для всього екрана</translation>
+<translation id="8427213022735114808">Диктування надсилає зразок вашого голосу в Google, щоб дозволити голосовий ввід у будь-якому текстовому полі.</translation>
 <translation id="8428213095426709021">Налаштування</translation>
 <translation id="8431190899827883166">Показувати дотики</translation>
 <translation id="8433186206711564395">Налаштування мережі</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">Розблокувати</translation>
 <translation id="9151726767154816831">Для оновлення перезапустіть пристрій і виконайте Powerwash</translation>
 <translation id="9179259655489829027">Ця функція дає змогу швидко й без пароля змінити авторизованого користувача. Використовуйте її лише з обліковими записами, яким довіряєте.</translation>
+<translation id="9193626018745640770">Трансляція на невідомий пристрій</translation>
 <translation id="9194617393863864469">Увійти як інший користувач…</translation>
 <translation id="9201131092683066720">Акумулятор заряджений на <ph name="PERCENTAGE" />%.</translation>
 <translation id="9210037371811586452">Вихід з уніфікованого режиму робочого стола</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb
index 5da3b23..895efde 100644
--- a/ash/strings/ash_strings_vi.xtb
+++ b/ash/strings/ash_strings_vi.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">Rất tiếc, chúng tôi vẫn không thể xác minh được mật khẩu của bạn. Lưu ý: nếu gần đây bạn đã đổi mật khẩu thì mật khẩu mới của bạn sẽ được áp dụng sau khi bạn đăng xuất. Vui lòng sử dụng mật khẩu cũ của bạn tại đây.</translation>
 <translation id="1677472565718498478">Còn <ph name="TIME" /></translation>
 <translation id="1698760176351776263">Địa chỉ IPv6: <ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">Quản trị viên thiết bị có thể theo dõi hoạt động của bạn.</translation>
 <translation id="1734367976349034509">Thiết bị này do doanh nghiệp quản lý</translation>
 <translation id="1746730358044914197">Các phương thức nhập do quản trị viên của bạn định cấu hình.</translation>
 <translation id="1747827819627189109">Đã bật bàn phím ảo</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">Tổng quan về chuyển đổi cửa sổ</translation>
 <translation id="2338501278241028356">Bật Bluetooth để khám phá các thiết bị lân cận</translation>
 <translation id="2339073806695260576">Hãy nhấn vào nút bút cảm ứng trên giá để ghi chú, chụp ảnh màn hình, sử dụng con trỏ laser hoặc kính lúp.</translation>
-<translation id="2351266942280602854">Ngôn ngữ và phương thức nhập</translation>
 <translation id="2352467521400612932">Cài đặt bút cảm ứng</translation>
 <translation id="2354174487190027830">Kích hoạt <ph name="NAME" /></translation>
 <translation id="2359808026110333948">Tiếp tục</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">Chế độ ánh sáng ban đêm: <ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">Thẻ SIM bị khóa</translation>
 <translation id="2653659639078652383">Gửi</translation>
-<translation id="2696763960464195425">Thông tin sẽ bị xóa khi bạn đăng xuất. <ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">Đặt bàn phím</translation>
 <translation id="2718395828230677721">Chế độ ánh sáng ban đêm</translation>
 <translation id="2727977024730340865">Được cắm vào bộ sạc công suất thấp. Việc sạc pin có thể không được đảm bảo.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb
index e8c6da8..2969d95 100644
--- a/ash/strings/ash_strings_zh-CN.xtb
+++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">抱歉,系统仍然无法验证您的密码。注意:如果您最近更改了密码,新密码将在您退出后生效。目前请在此处输入旧密码。</translation>
 <translation id="1677472565718498478">电量尚余 <ph name="TIME" /></translation>
 <translation id="1698760176351776263">IPv6 地址:<ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">设备管理员或许能监控您的活动。</translation>
 <translation id="1734367976349034509">此设备是受企业管理的设备</translation>
 <translation id="1746730358044914197">输入法是由您的管理员配置的。</translation>
 <translation id="1747827819627189109">屏幕键盘已启用</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">“切换窗口”概述</translation>
 <translation id="2338501278241028356">开启蓝牙以发现附近的设备</translation>
 <translation id="2339073806695260576">点按任务栏中的触控笔按钮即可开始记事、截取屏幕截图以及使用激光笔/放大镜。</translation>
-<translation id="2351266942280602854">语言和输入法</translation>
 <translation id="2352467521400612932">触控笔设置</translation>
 <translation id="2354174487190027830">正在激活“<ph name="NAME" />”</translation>
 <translation id="2359808026110333948">继续</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">夜间模式:<ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM 卡已被锁定</translation>
 <translation id="2653659639078652383">提交</translation>
-<translation id="2696763960464195425">当您退出后,系统即会移除您的信息。<ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">设置键盘</translation>
 <translation id="2718395828230677721">夜间模式</translation>
 <translation id="2727977024730340865">已插入低功率充电器;可能无法保证充电成功。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb
index 8191473..d196023b 100644
--- a/ash/strings/ash_strings_zh-TW.xtb
+++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -36,7 +36,6 @@
 <translation id="1658406695958299976">很抱歉,系統仍然無法驗證你的密碼。注意:如果你的密碼最近有所異動,新密碼會在你登出後立即生效,目前請在這裡使用舊密碼。</translation>
 <translation id="1677472565718498478"><ph name="TIME" /> 後用盡</translation>
 <translation id="1698760176351776263">IPv6 位址:<ph name="ADDRESS" /></translation>
-<translation id="170389796989115980">裝置管理員或許可監控你的活動。</translation>
 <translation id="1734367976349034509">這個裝置受到企業管理</translation>
 <translation id="1746730358044914197">輸入法是由你的管理員所設定。</translation>
 <translation id="1747827819627189109">螢幕小鍵盤已啟用</translation>
@@ -74,7 +73,6 @@
 <translation id="2303600792989757991">切換視窗總覽</translation>
 <translation id="2338501278241028356">開啟藍牙即可偵測附近的裝置</translation>
 <translation id="2339073806695260576">輕觸檔案櫃的觸控筆圖示即可做筆記、擷取螢幕畫面,以及使用雷射筆或放大鏡。</translation>
-<translation id="2351266942280602854">語言和輸入</translation>
 <translation id="2352467521400612932">觸控筆設定</translation>
 <translation id="2354174487190027830">正在啟用 <ph name="NAME" /></translation>
 <translation id="2359808026110333948">繼續</translation>
@@ -92,7 +90,6 @@
 <translation id="2597972630681408282">夜燈功能:<ph name="NIGHT_LIGHT_STATUS" /></translation>
 <translation id="2617342710774726426">SIM 卡已鎖定</translation>
 <translation id="2653659639078652383">提交</translation>
-<translation id="2696763960464195425">登出帳戶後,系統將移除你的資訊。<ph name="LEARN_MORE" /></translation>
 <translation id="2700493154570097719">設定鍵盤</translation>
 <translation id="2718395828230677721">夜燈</translation>
 <translation id="2727977024730340865">使用低功率充電器,可能導致充電狀態不穩定。</translation>
@@ -194,6 +191,7 @@
 <translation id="4544944664594876241">螢幕鎖定快速鍵已變更,請改用 <ph name="NEW_SHORTCUT" /> (停用 <ph name="OLD_SHORTCUT" />)。</translation>
 <translation id="4564869809620998694">字型服務</translation>
 <translation id="4570957409596482333">隨選朗讀按鈕</translation>
+<translation id="4585337515783392668">停止透過不明接收器投放</translation>
 <translation id="4628757576491864469">裝置</translation>
 <translation id="4659419629803378708">ChromeVox 已啟用</translation>
 <translation id="4734965478015604180">橫向</translation>
@@ -240,6 +238,7 @@
 <translation id="5805697420284793859">視窗管理員</translation>
 <translation id="5820394555380036790">Chromium 作業系統</translation>
 <translation id="5832805196449965646">新增使用者</translation>
+<translation id="5837036133683224804">停止透過<ph name="RECEIVER_NAME" />投放「<ph name="ROUTE_TITLE" />」</translation>
 <translation id="5860033963881614850">關閉</translation>
 <translation id="5895138241574237353">重新啟動</translation>
 <translation id="5901316534475909376">Shift + Esc 鍵</translation>
@@ -276,6 +275,7 @@
 <translation id="639644700271529076">大寫鍵已關閉</translation>
 <translation id="6406704438230478924">altgr</translation>
 <translation id="643147933154517414">沒有通知</translation>
+<translation id="6445835306623867477">正在透過<ph name="RECEIVER_NAME" />投放「<ph name="ROUTE_TITLE" />」</translation>
 <translation id="6452181791372256707">拒絕</translation>
 <translation id="6453179446719226835">語言已變更</translation>
 <translation id="6459472438155181876">正在擴充 <ph name="DISPLAY_NAME" /> 畫面</translation>
@@ -372,6 +372,7 @@
 <translation id="8351131234907093545">寫筆記</translation>
 <translation id="8392451568018454956"><ph name="USER_EMAIL_ADDRESS" /> 的選項選單</translation>
 <translation id="8406981827175133772">全螢幕放大鏡</translation>
+<translation id="8427213022735114808">語音輸入功能會將你的語音資料傳送給 Google,讓你使用自己的語音在任何文字欄位中輸入內容。</translation>
 <translation id="8428213095426709021">設定</translation>
 <translation id="8431190899827883166">顯示觸控回應</translation>
 <translation id="8433186206711564395">網路設定</translation>
@@ -413,6 +414,7 @@
 <translation id="9111102763498581341">解除鎖定</translation>
 <translation id="9151726767154816831">重新啟動並執行 Powerwash 即可更新</translation>
 <translation id="9179259655489829027">這項功能可讓你快速存取任何已登入的使用者帳戶,不需提供密碼。使用這項功能時,請務必只存取你信任的帳戶。</translation>
+<translation id="9193626018745640770">正在透過不明接收器投放</translation>
 <translation id="9194617393863864469">登入其他使用者帳戶...</translation>
 <translation id="9201131092683066720">電池電量為 <ph name="PERCENTAGE" />%。</translation>
 <translation id="9210037371811586452">退出整合桌面模式</translation>
diff --git a/ash/system/audio/unified_volume_view.cc b/ash/system/audio/unified_volume_view.cc
index e9f5c09f..f6fdce76 100644
--- a/ash/system/audio/unified_volume_view.cc
+++ b/ash/system/audio/unified_volume_view.cc
@@ -7,7 +7,19 @@
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/system/audio/unified_volume_slider_controller.h"
-#include "ash/system/unified/top_shortcut_button.h"
+#include "ash/system/tray/tray_constants.h"
+#include "ash/system/tray/tray_popup_utils.h"
+#include "components/vector_icons/vector_icons.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/canvas.h"
+#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/paint_vector_icon.h"
+#include "ui/views/animation/flood_fill_ink_drop_ripple.h"
+#include "ui/views/animation/ink_drop_highlight.h"
+#include "ui/views/animation/ink_drop_impl.h"
+#include "ui/views/animation/ink_drop_mask.h"
+#include "ui/views/controls/image_view.h"
+#include "ui/views/layout/box_layout.h"
 
 using chromeos::CrasAudioHandler;
 
@@ -41,6 +53,71 @@
   return *kVolumeLevelIcons[index];
 }
 
+class MoreButton : public views::Button {
+ public:
+  explicit MoreButton(views::ButtonListener* listener)
+      : views::Button(listener) {
+    SetLayoutManager(std::make_unique<views::BoxLayout>(
+        views::BoxLayout::kHorizontal,
+        gfx::Insets((kTrayItemSize -
+                     GetDefaultSizeOfVectorIcon(vector_icons::kHeadsetIcon)) /
+                    2),
+        2));
+
+    auto* headset = new views::ImageView();
+    headset->set_can_process_events_within_subtree(false);
+    headset->SetImage(
+        CreateVectorIcon(vector_icons::kHeadsetIcon, kUnifiedMenuIconColor));
+    AddChildView(headset);
+
+    auto* more = new views::ImageView();
+    more->set_can_process_events_within_subtree(false);
+    more->SetImage(gfx::ImageSkiaOperations::CreateRotatedImage(
+        CreateVectorIcon(kUnifiedMenuExpandIcon, kUnifiedMenuIconColor),
+        SkBitmapOperations::ROTATION_90_CW));
+    AddChildView(more);
+
+    SetTooltipText(l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO));
+    TrayPopupUtils::ConfigureTrayPopupButton(this);
+  }
+
+  ~MoreButton() override = default;
+
+  // views::Button:
+  void PaintButtonContents(gfx::Canvas* canvas) override {
+    gfx::Rect rect(GetContentsBounds());
+    cc::PaintFlags flags;
+    flags.setAntiAlias(true);
+    flags.setColor(kUnifiedMenuButtonColor);
+    flags.setStyle(cc::PaintFlags::kFill_Style);
+    canvas->DrawRoundRect(rect, kTrayItemSize / 2, flags);
+  }
+
+  std::unique_ptr<views::InkDrop> CreateInkDrop() override {
+    return TrayPopupUtils::CreateInkDrop(this);
+  }
+
+  std::unique_ptr<views::InkDropRipple> CreateInkDropRipple() const override {
+    return TrayPopupUtils::CreateInkDropRipple(
+        TrayPopupInkDropStyle::FILL_BOUNDS, this,
+        GetInkDropCenterBasedOnLastEvent(), kUnifiedMenuIconColor);
+  }
+
+  std::unique_ptr<views::InkDropHighlight> CreateInkDropHighlight()
+      const override {
+    return TrayPopupUtils::CreateInkDropHighlight(
+        TrayPopupInkDropStyle::FILL_BOUNDS, this, kUnifiedMenuIconColor);
+  }
+
+  std::unique_ptr<views::InkDropMask> CreateInkDropMask() const override {
+    return std::make_unique<views::RoundRectInkDropMask>(size(), gfx::Insets(),
+                                                         kTrayItemSize / 2);
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MoreButton);
+};
+
 }  // namespace
 
 UnifiedVolumeView::UnifiedVolumeView(UnifiedVolumeSliderController* controller,
@@ -48,9 +125,7 @@
     : UnifiedSliderView(controller,
                         kSystemMenuVolumeHighIcon,
                         IDS_ASH_STATUS_TRAY_VOLUME),
-      more_button_(new TopShortcutButton(controller,
-                                         kSystemMenuArrowRightIcon,
-                                         IDS_ASH_STATUS_TRAY_AUDIO)),
+      more_button_(new MoreButton(controller)),
       is_main_view_(is_main_view) {
   DCHECK(CrasAudioHandler::IsInitialized());
   CrasAudioHandler::Get()->AddAudioObserver(this);
diff --git a/ash/system/audio/unified_volume_view.h b/ash/system/audio/unified_volume_view.h
index 3e8f399..61fa13fc 100644
--- a/ash/system/audio/unified_volume_view.h
+++ b/ash/system/audio/unified_volume_view.h
@@ -35,7 +35,7 @@
   // UnifiedSliderView:
   void ChildVisibilityChanged(views::View* child) override;
 
-  TopShortcutButton* const more_button_;
+  views::Button* const more_button_;
   const bool is_main_view_;
 
   DISALLOW_COPY_AND_ASSIGN(UnifiedVolumeView);
diff --git a/ash/system/unified/unified_slider_view.cc b/ash/system/unified/unified_slider_view.cc
index 7af5d75..a8b242e 100644
--- a/ash/system/unified/unified_slider_view.cc
+++ b/ash/system/unified/unified_slider_view.cc
@@ -106,6 +106,8 @@
       l10n_util::GetStringUTF16(accessible_name_id));
   slider_->SetBorder(views::CreateEmptyBorder(kUnifiedSliderPadding));
   layout->SetFlexForView(slider_, 1);
+  layout->set_cross_axis_alignment(
+      views::BoxLayout::CROSS_AXIS_ALIGNMENT_CENTER);
 }
 
 void UnifiedSliderView::SetSliderValue(float value, bool by_user) {
diff --git a/ash/wm/immersive_fullscreen_controller_unittest.cc b/ash/wm/immersive_fullscreen_controller_unittest.cc
index e3f2edc5..e2e30f0 100644
--- a/ash/wm/immersive_fullscreen_controller_unittest.cc
+++ b/ash/wm/immersive_fullscreen_controller_unittest.cc
@@ -671,8 +671,10 @@
   EXPECT_FALSE(controller()->IsRevealed());
 }
 
-// Tests the top-of-window views for maximized window in tablet mode.
-TEST_F(ImmersiveFullscreenControllerTest, MaximizedWindowInTabletMode) {
+// Tests the top-of-window views for maximized/full-screened window in tablet
+// mode.
+TEST_F(ImmersiveFullscreenControllerTest,
+       MaximizedOrFullscreenedWindowInTabletMode) {
   SetWindowShowState(ui::SHOW_STATE_MAXIMIZED);
   EnableTabletMode(true);
   SetEnabled(true);
@@ -692,11 +694,12 @@
   AttemptUnreveal(MODALITY_GESTURE_SCROLL);
   EXPECT_FALSE(controller()->IsRevealed());
 
-  // Top-of-window views will be revealed for fullscreen window in tablet mode.
+  // Top-of-window views will not be revealed for full-screened window in tablet
+  // mode either.
   EnableTabletMode(true);
   SetWindowShowState(ui::SHOW_STATE_FULLSCREEN);
   AttemptReveal(MODALITY_GESTURE_SCROLL);
-  EXPECT_TRUE(controller()->IsRevealed());
+  EXPECT_FALSE(controller()->IsRevealed());
 }
 
 // Test when the SWIPE_CLOSE edge gesture closes the top-of-window views.
diff --git a/ash/wm/immersive_gesture_handler_classic.cc b/ash/wm/immersive_gesture_handler_classic.cc
index 2713bdd..6409751 100644
--- a/ash/wm/immersive_gesture_handler_classic.cc
+++ b/ash/wm/immersive_gesture_handler_classic.cc
@@ -71,10 +71,10 @@
   if (window != immersive_fullscreen_controller_->widget()->GetNativeWindow())
     return false;
 
-  // TODO(minch): Also allow windows in fullscreen mode can be dragged.
-  // Only maximized none browser window in tablet mode allowed to be dragged.
+  // Only maximized or fullscreened none browser window in tablet mode allowed
+  // to be dragged.
   const views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window);
-  if (!widget || !widget->IsMaximized() ||
+  if (!widget || (!widget->IsMaximized() && !widget->IsFullscreen()) ||
       !Shell::Get()
            ->tablet_mode_controller()
            ->IsTabletModeWindowManagerEnabled() ||
@@ -113,6 +113,8 @@
 }
 
 void ImmersiveGestureHandlerClassic::OnGestureEvent(ui::GestureEvent* event) {
+  // TODO(minch): Make window can be dragged from top if docked magnifier is
+  // enabled. http://crbug.com/866680.
   if (CanDrag(event)) {
     DCHECK(tablet_mode_app_window_drag_controller_);
     if (tablet_mode_app_window_drag_controller_->DragWindowFromTop(event))
diff --git a/ash/wm/immersive_gesture_handler_classic.h b/ash/wm/immersive_gesture_handler_classic.h
index e6418301..1abd180 100644
--- a/ash/wm/immersive_gesture_handler_classic.h
+++ b/ash/wm/immersive_gesture_handler_classic.h
@@ -18,8 +18,8 @@
 
 // ImmersiveGestureHandler is responsible for calling
 // ImmersiveFullscreenController::OnGestureEvent() to show/hide the title bar or
-// TabletModeWindowDragController::DragWindowFromTop() to drag the window from
-// the top if CanDrag is true when a gesture is received.
+// TabletAppModeWindowDragController::DragWindowFromTop() to drag the window
+// from the top if CanDrag is true when a gesture is received.
 class ASH_EXPORT ImmersiveGestureHandlerClassic
     : public ImmersiveGestureHandler,
       public ui::EventHandler {
diff --git a/ash/wm/non_client_frame_controller.cc b/ash/wm/non_client_frame_controller.cc
index 1f22b10..dda3f50 100644
--- a/ash/wm/non_client_frame_controller.cc
+++ b/ash/wm/non_client_frame_controller.cc
@@ -328,8 +328,6 @@
       widget_, ShouldRemoveStandardFrame(*properties),
       ShouldEnableImmersive(*properties), GetWindowStyle(*properties));
   window_ = native_widget->GetNativeView();
-  window_->SetProperty(aura::client::kEmbedType,
-                       aura::client::WindowEmbedType::TOP_LEVEL_IN_WM);
   window_->SetProperty(kNonClientFrameControllerKey, this);
   window_->SetProperty(kWidgetCreationTypeKey, WidgetCreationType::FOR_CLIENT);
   window_->AddObserver(this);
diff --git a/ash/wm/overview/window_grid.cc b/ash/wm/overview/window_grid.cc
index 716f089..583e2d8 100644
--- a/ash/wm/overview/window_grid.cc
+++ b/ash/wm/overview/window_grid.cc
@@ -462,7 +462,7 @@
   return nullptr;
 }
 
-void WindowGrid::AddItem(aura::Window* window) {
+void WindowGrid::AddItem(aura::Window* window, bool reposition) {
   DCHECK(!GetWindowSelectorItemContaining(window));
 
   window_observer_.Add(window);
@@ -478,10 +478,12 @@
     window_list_.back()->set_should_animate_when_exiting(false);
   }
 
-  PositionWindows(/*animate=*/true);
+  if (reposition)
+    PositionWindows(/*animate=*/true);
 }
 
-void WindowGrid::RemoveItem(WindowSelectorItem* selector_item) {
+void WindowGrid::RemoveItem(WindowSelectorItem* selector_item,
+                            bool reposition) {
   auto iter =
       GetWindowSelectorItemIterContainingWindow(selector_item->GetWindow());
   if (iter != window_list_.end()) {
@@ -491,7 +493,8 @@
     window_list_.erase(iter);
   }
 
-  PositionWindows(/*animate=*/true);
+  if (reposition)
+    PositionWindows(/*animate=*/true);
 }
 
 void WindowGrid::FilterItems(const base::string16& pattern) {
@@ -571,7 +574,8 @@
   DCHECK_EQ(dragged_window->GetRootWindow(), root_window_);
   DCHECK(!new_selector_item_widget_);
   new_selector_item_widget_ = CreateNewSelectorItemWidget(dragged_window);
-  window_selector_->AddItem(new_selector_item_widget_->GetNativeWindow());
+  window_selector_->AddItem(new_selector_item_widget_->GetNativeWindow(),
+                            /*reposition=*/true);
 
   // Stack the newly added window item below |dragged_window|.
   DCHECK_EQ(dragged_window->parent(),
@@ -649,20 +653,28 @@
   DCHECK_EQ(dragged_window->GetRootWindow(), root_window_);
   DCHECK(new_selector_item_widget_.get());
 
-  // Check to see if the dragged window needs to be added to overview.
+  // Check to see if the dragged window needs to be added to overview. If so,
+  // add it to overview without repositioning the grid. It will be done at the
+  // end of this function.
   if (SelectedWindow()) {
     if (IsNewSelectorItemWindow(SelectedWindow()->GetWindow()))
-      window_selector_->AddItem(dragged_window);
+      window_selector_->AddItem(dragged_window, /*reposition=*/false);
     SelectedWindow()->set_selected(false);
     selection_widget_.reset();
   }
 
-  window_selector_->RemoveWindowSelectorItem(GetWindowSelectorItemContaining(
-      new_selector_item_widget_->GetNativeWindow()));
+  window_selector_->RemoveWindowSelectorItem(
+      GetWindowSelectorItemContaining(
+          new_selector_item_widget_->GetNativeWindow()),
+      /*reposition=*/false);
   new_selector_item_widget_.reset();
 
   // Called to reset caption and title visibility after dragging.
   OnSelectorItemDragEnded();
+
+  // Need to call PositionWindows() here as the above two functions AddItem()
+  // and RemoveWindowSelectorItem() are called without repositioning windows.
+  PositionWindows(/*animate=*/true);
 }
 
 bool WindowGrid::IsNewSelectorItemWindow(aura::Window* window) const {
diff --git a/ash/wm/overview/window_grid.h b/ash/wm/overview/window_grid.h
index 178f77d1..3e543ae3 100644
--- a/ash/wm/overview/window_grid.h
+++ b/ash/wm/overview/window_grid.h
@@ -88,11 +88,13 @@
       const aura::Window* window) const;
 
   // Adds |window| to the grid. Intended to be used by split view. |window|
-  // cannot already be on the grid.
-  void AddItem(aura::Window* window);
+  // cannot already be on the grid. If |reposition| is true, reposition all
+  // window items in the grid after adding the item.
+  void AddItem(aura::Window* window, bool reposition);
 
-  // Removes |selector_item| from the grid.
-  void RemoveItem(WindowSelectorItem* selector_item);
+  // Removes |selector_item| from the grid. If |reprosition| is ture, reposition
+  // all window items in the grid after removing the item.
+  void RemoveItem(WindowSelectorItem* selector_item, bool reposition);
 
   // Dims the items whose titles do not contain |pattern| and prevents their
   // selection. The pattern has its accents removed and is converted to
diff --git a/ash/wm/overview/window_selector.cc b/ash/wm/overview/window_selector.cc
index 30782acb..dc10f08 100644
--- a/ash/wm/overview/window_selector.cc
+++ b/ash/wm/overview/window_selector.cc
@@ -296,7 +296,7 @@
       window_grid->PositionWindows(/*animate=*/true);
       // Reset |should_animate_when_entering_| in order to animate during
       // overview mode, such as dragging animations.
-        window_grid->ResetWindowListAnimationStates();
+      window_grid->ResetWindowListAnimationStates();
     }
 
     // Image used for text filter textfield.
@@ -340,25 +340,25 @@
 
   size_t remaining_items = 0;
   for (std::unique_ptr<WindowGrid>& window_grid : grid_list_) {
-      // During shutdown, do not animate all windows in overview if we need to
-      // animate the snapped window.
-      if (split_view_controller->IsSplitViewModeActive() &&
-          split_view_controller->GetDefaultSnappedWindow()->GetRootWindow() ==
-              window_grid->root_window() &&
-          split_view_controller->snapped_window_animation_observer()) {
-        // OverviewWindowAnimationObserver is used to obseve the snapped window
-        // animation. And the windows in |window_grid| will restore their
-        // transform when the snapped window completes its animation.
-        window_grid->set_window_animation_observer(
-            split_view_controller->snapped_window_animation_observer());
-        window_grid->SetWindowListNotAnimatedWhenExiting();
-      } else {
-        window_grid->SetWindowListAnimationStates(
-            selected_item_ && selected_item_->window_grid() == window_grid.get()
-                ? selected_item_
-                : nullptr,
-            OverviewTransition::kExit);
-      }
+    // During shutdown, do not animate all windows in overview if we need to
+    // animate the snapped window.
+    if (split_view_controller->IsSplitViewModeActive() &&
+        split_view_controller->GetDefaultSnappedWindow()->GetRootWindow() ==
+            window_grid->root_window() &&
+        split_view_controller->snapped_window_animation_observer()) {
+      // OverviewWindowAnimationObserver is used to obseve the snapped window
+      // animation. And the windows in |window_grid| will restore their
+      // transform when the snapped window completes its animation.
+      window_grid->set_window_animation_observer(
+          split_view_controller->snapped_window_animation_observer());
+      window_grid->SetWindowListNotAnimatedWhenExiting();
+    } else {
+      window_grid->SetWindowListAnimationStates(
+          selected_item_ && selected_item_->window_grid() == window_grid.get()
+              ? selected_item_
+              : nullptr,
+          OverviewTransition::kExit);
+    }
     for (const auto& window_selector_item : window_grid->window_list())
       window_selector_item->RestoreWindow(/*reset_transform=*/true);
     remaining_items += window_grid->size();
@@ -521,13 +521,13 @@
   return nullptr;
 }
 
-void WindowSelector::AddItem(aura::Window* window) {
+void WindowSelector::AddItem(aura::Window* window, bool reposition) {
   // Early exit if a grid already contains |window|.
   WindowGrid* grid = GetGridWithRootWindow(window->GetRootWindow());
   if (!grid || grid->GetWindowSelectorItemContaining(window))
     return;
 
-  grid->AddItem(window);
+  grid->AddItem(window, reposition);
   ++num_items_;
 
   // Transfer focus from |window| to the text widget, to match the behavior of
@@ -535,7 +535,8 @@
   wm::ActivateWindow(GetTextFilterWidgetWindow());
 }
 
-void WindowSelector::RemoveWindowSelectorItem(WindowSelectorItem* item) {
+void WindowSelector::RemoveWindowSelectorItem(WindowSelectorItem* item,
+                                              bool reposition) {
   if (item->GetWindow()->HasObserver(this)) {
     item->GetWindow()->RemoveObserver(this);
     observed_windows_.erase(item->GetWindow());
@@ -546,7 +547,7 @@
   // Remove |item| from the corresponding grid.
   for (std::unique_ptr<WindowGrid>& grid : grid_list_) {
     if (grid->GetWindowSelectorItemContaining(item->GetWindow())) {
-      grid->RemoveItem(item);
+      grid->RemoveItem(item, reposition);
       --num_items_;
       break;
     }
diff --git a/ash/wm/overview/window_selector.h b/ash/wm/overview/window_selector.h
index 8b995f21..15a676c8 100644
--- a/ash/wm/overview/window_selector.h
+++ b/ash/wm/overview/window_selector.h
@@ -108,17 +108,24 @@
   WindowGrid* GetGridWithRootWindow(aura::Window* root_window);
 
   // Add |window| to the grid in |grid_list_| with the same root window. Does
-  // nothing if the grid already contains |window|. This may be called in two
-  // scenarioes: 1) when a item in split view mode was previously snapped but
-  // should now be returned to the window grid (e.g. split view divider dragged
-  // to either edge, or a window is snapped to a postion that already has a
-  // snapped window); 2) when a window (not from overview) is dragged while
-  // overview is open and the window is dropped on the new selector item, the
-  // dragged window is then added to the overview.
-  void AddItem(aura::Window* window);
+  // nothing if the grid already contains |window|. And if |reposition| is true,
+  // re-position all windows in the target window grid. This may be called in
+  // two scenarioes: 1) when a item in split view mode was previously snapped
+  // but should now be returned to the window grid (e.g. split view divider
+  // dragged to either edge, or a window is snapped to a postion that already
+  // has a snapped window); 2) when a window (not from overview) is dragged
+  // while overview is open and the window is dropped on the new selector item,
+  // the dragged window is then added to the overview.
+  void AddItem(aura::Window* window, bool reposition);
 
-  // Removes the window selector item from the overview window grid.
-  void RemoveWindowSelectorItem(WindowSelectorItem* item);
+  // Removes the window selector item from the overview window grid. And if
+  // |reposition| is true, re-position all windows in the target window grid.
+  // This may be called in two scenarioes: 1) when a user drags an overview item
+  // to snap to one side of the screen, the item should be removed from the
+  // overview grid; 2) when a window (not from overview) ends its dragging while
+  // overview is open, the new selector item should be removed. Note in both
+  // cases, the windows in the window grid do not need to be repositioned.
+  void RemoveWindowSelectorItem(WindowSelectorItem* item, bool reposition);
 
   void InitiateDrag(WindowSelectorItem* item,
                     const gfx::Point& location_in_screen);
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index 0495e22..cd6b025 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -2837,11 +2837,11 @@
   wm::ActivateWindow(window1.get());
 
   // Dragging is only allowed in tablet mode.
-  RunAllPendingInMessageLoop();
+  base::RunLoop().RunUntilIdle();
   Shell::Get()->tablet_mode_controller()->EnableTabletModeWindowManager(true);
 
   ToggleOverview();
-  RunAllPendingInMessageLoop();
+  base::RunLoop().RunUntilIdle();
   WindowSelectorItem* item1 = GetWindowItemForWindow(0, window1.get());
   WindowSelectorItem* item2 = GetWindowItemForWindow(0, window2.get());
   EXPECT_TRUE(HasMaskForItem(item1));
@@ -2858,14 +2858,14 @@
   generator->PressLeftButton();
   EXPECT_FALSE(window1->layer()->GetAnimator()->is_animating());
   EXPECT_FALSE(window2->layer()->GetAnimator()->is_animating());
-  RunAllPendingInMessageLoop();
+  base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(HasMaskForItem(item1));
   EXPECT_TRUE(HasMaskForItem(item2));
 
-  // Drag to origin and then back to the start to avoid activating the window or
-  // entering splitview. Verify that the mask is invisible on both items during
-  // animation.
-  generator->MoveMouseTo(gfx::Point());
+  // Drag to horizontally and then back to the start to avoid activating the
+  // window, drag to close or entering splitview. Verify that the mask is
+  // invisible on both items during animation.
+  generator->MoveMouseTo(gfx::Point(0, start_drag.y()));
   generator->MoveMouseTo(start_drag);
   generator->ReleaseLeftButton();
   EXPECT_TRUE(window1->layer()->GetAnimator()->is_animating());
@@ -2876,7 +2876,7 @@
   // Verify that the mask is visble again after animation is finished.
   window1->layer()->GetAnimator()->StopAnimating();
   window2->layer()->GetAnimator()->StopAnimating();
-  RunAllPendingInMessageLoop();
+  base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(HasMaskForItem(item1));
   EXPECT_TRUE(HasMaskForItem(item2));
 
@@ -3182,10 +3182,14 @@
   // to |end_location|. This should be used over
   // DragWindowTo(WindowSelectorItem*, gfx::Point) when testing snapping a
   // window, but the windows centerpoint may be inside a snap region, thus the
-  // window will not snapped.
+  // window will not snapped. This function is mostly used to test splitview so
+  // |long_press| is default to true. Set |long_press| to false if we do not
+  // want to long press after every press, which enables dragging vertically to
+  // close an item.
   void DragWindowTo(WindowSelectorItem* item,
                     const gfx::Point& end_location,
-                    SelectorItemLocation location) {
+                    SelectorItemLocation location,
+                    bool long_press = true) {
     // Start drag in the middle of the seletor item.
     gfx::Point start_location;
     switch (location) {
@@ -3209,6 +3213,8 @@
         break;
     }
     window_selector()->InitiateDrag(item, start_location);
+    if (long_press)
+      window_selector()->StartSplitViewDragMode(start_location);
     window_selector()->Drag(item, end_location);
     window_selector()->CompleteDrag(item, end_location);
   }
@@ -3216,7 +3222,7 @@
   // Drags a window selector item |item| from its center point to
   // |end_location|.
   void DragWindowTo(WindowSelectorItem* item, const gfx::Point& end_location) {
-    DragWindowTo(item, end_location, SelectorItemLocation::CENTER);
+    DragWindowTo(item, end_location, SelectorItemLocation::CENTER, true);
   }
 
   // Creates a window which cannot be snapped by splitview.
@@ -3859,18 +3865,20 @@
   WindowSelectorItem* selector_item =
       GetWindowItemForWindow(grid_index, window.get());
   const gfx::Point start_location(selector_item->target_bounds().CenterPoint());
+  // Drag horizontally to avoid activating drag to close.
+  const int y = start_location.y();
   window_selector()->InitiateDrag(selector_item, start_location);
   EXPECT_FALSE(IsPreviewAreaShowing());
-  window_selector()->Drag(selector_item, gfx::Point(edge_inset + 1, 1));
+  window_selector()->Drag(selector_item, gfx::Point(edge_inset + 1, y));
   EXPECT_FALSE(IsPreviewAreaShowing());
-  window_selector()->Drag(selector_item, gfx::Point(edge_inset, 1));
+  window_selector()->Drag(selector_item, gfx::Point(edge_inset, y));
   EXPECT_TRUE(IsPreviewAreaShowing());
 
   window_selector()->Drag(selector_item,
-                          gfx::Point(screen_width - edge_inset - 2, 1));
+                          gfx::Point(screen_width - edge_inset - 2, y));
   EXPECT_FALSE(IsPreviewAreaShowing());
   window_selector()->Drag(selector_item,
-                          gfx::Point(screen_width - edge_inset - 1, 1));
+                          gfx::Point(screen_width - edge_inset - 1, y));
   EXPECT_TRUE(IsPreviewAreaShowing());
 
   // Drag back to |start_location| before compeleting the drag, otherwise
@@ -3935,16 +3943,20 @@
   window_selector()->ResetDraggedWindowGesture();
 
   // Verify the indicator is visible once the item starts moving, and becomes a
-  // preview area once we reach the left edge of the screen.
+  // preview area once we reach the left edge of the screen. Drag horizontal to
+  // avoid activating drag to close.
+  const int y_position = start_location.y();
   window_selector()->InitiateDrag(selector_item, start_location);
   EXPECT_EQ(IndicatorState::kNone, indicator_state());
-  window_selector()->Drag(selector_item, gfx::Point(edge_inset + 1, 0));
+  window_selector()->Drag(selector_item,
+                          gfx::Point(edge_inset + 1, y_position));
   EXPECT_EQ(IndicatorState::kDragArea, indicator_state());
-  window_selector()->Drag(selector_item, gfx::Point(edge_inset, 0));
+  window_selector()->Drag(selector_item, gfx::Point(edge_inset, y_position));
   EXPECT_EQ(IndicatorState::kPreviewAreaLeft, indicator_state());
 
   // Snap window to the left.
-  window_selector()->CompleteDrag(selector_item, gfx::Point(edge_inset, 0));
+  window_selector()->CompleteDrag(selector_item,
+                                  gfx::Point(edge_inset, y_position));
   ASSERT_TRUE(split_view_controller()->IsSplitViewModeActive());
   ASSERT_EQ(SplitViewController::LEFT_SNAPPED,
             split_view_controller()->state());
@@ -3955,7 +3967,8 @@
   start_location = selector_item->target_bounds().CenterPoint();
   window_selector()->InitiateDrag(selector_item, start_location);
   EXPECT_EQ(IndicatorState::kNone, indicator_state());
-  window_selector()->Drag(selector_item, gfx::Point(screen_width - 1, 0));
+  window_selector()->Drag(selector_item,
+                          gfx::Point(screen_width - 1, y_position));
   EXPECT_EQ(IndicatorState::kPreviewAreaRight, indicator_state());
   window_selector()->CompleteDrag(selector_item, start_location);
 }
@@ -4056,7 +4069,7 @@
       GetWindowItemForWindow(0, primary_screen_window.get());
   gfx::Point start_location(selector_item->target_bounds().CenterPoint());
   window_selector()->InitiateDrag(selector_item, start_location);
-  window_selector()->Drag(selector_item, gfx::Point(100, 100));
+  window_selector()->Drag(selector_item, gfx::Point(100, start_location.y()));
   EXPECT_EQ(IndicatorState::kDragArea, indicator_state());
   EXPECT_EQ(root_windows[0], window_selector()
                                  ->split_view_drag_indicators()
@@ -4075,7 +4088,7 @@
   selector_item = GetWindowItemForWindow(1, secondary_screen_window.get());
   start_location = gfx::Point(selector_item->target_bounds().CenterPoint());
   window_selector()->InitiateDrag(selector_item, start_location);
-  window_selector()->Drag(selector_item, gfx::Point(800, 200));
+  window_selector()->Drag(selector_item, gfx::Point(800, start_location.y()));
   EXPECT_EQ(IndicatorState::kDragArea, indicator_state());
   EXPECT_EQ(root_windows[1], window_selector()
                                  ->split_view_drag_indicators()
diff --git a/ash/wm/splitview/split_view_controller.cc b/ash/wm/splitview/split_view_controller.cc
index d2b7bc6..72f35a7 100644
--- a/ash/wm/splitview/split_view_controller.cc
+++ b/ash/wm/splitview/split_view_controller.cc
@@ -1391,9 +1391,11 @@
   overview_window_item_bounds_map_[window] = item->target_bounds();
 
   // Remove it from the grid. The transform will be reset later after the
-  // window is snapped.
+  // window is snapped. Note the remaining windows in overview don't need to be
+  // repositioned in this case as they have been positioned to the right place
+  // during dragging.
   item->RestoreWindow(/*reset_transform=*/false);
-  window_selector->RemoveWindowSelectorItem(item);
+  window_selector->RemoveWindowSelectorItem(item, /*reposition=*/false);
 }
 
 aura::Window* SplitViewController::GetSnappedWindowAt(
@@ -1412,7 +1414,7 @@
   if (!window || !Shell::Get()->window_selector_controller()->IsSelecting())
     return;
   Shell::Get()->window_selector_controller()->window_selector()->AddItem(
-      window);
+      window, /*reposition=*/true);
 }
 
 void SplitViewController::StartOverview() {
diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
index d1540234..0e6885c4 100644
--- a/ash/wm/splitview/split_view_controller_unittest.cc
+++ b/ash/wm/splitview/split_view_controller_unittest.cc
@@ -12,6 +12,7 @@
 #include "ash/screen_util.h"
 #include "ash/session/session_controller.h"
 #include "ash/session/test_session_controller_client.h"
+#include "ash/shelf/shelf_layout_manager.h"
 #include "ash/shell.h"
 #include "ash/system/overview/overview_button_tray.h"
 #include "ash/system/status_area_widget.h"
@@ -2040,7 +2041,8 @@
       window_selector->GetGridWithRootWindow(window2->GetRootWindow());
   ASSERT_TRUE(current_grid);
   window_selector->RemoveWindowSelectorItem(
-      current_grid->GetWindowSelectorItemContaining(window2.get()));
+      current_grid->GetWindowSelectorItemContaining(window2.get()),
+      /*reposition=*/false);
   resizer = StartDrag(window2.get(), window1.get());
   ASSERT_TRUE(resizer.get());
   EXPECT_EQ(GetIndicatorState(resizer.get()), IndicatorState::kNone);
@@ -2076,7 +2078,8 @@
   // causing overview mode to end.
   // Remove |window1| from overview first before tab dragging.
   window_selector->RemoveWindowSelectorItem(
-      current_grid->GetWindowSelectorItemContaining(window1.get()));
+      current_grid->GetWindowSelectorItemContaining(window1.get()),
+      /*reposition=*/false);
   resizer = StartDrag(window1.get(), window2.get());
   ASSERT_TRUE(resizer.get());
   DragWindowTo(resizer.get(), gfx::Point(600, 500));
@@ -2196,11 +2199,16 @@
   void EndScrollSequence(const gfx::Point& start,
                          float scroll_delta,
                          base::TimeTicks& timestamp,
-                         aura::Window* window) {
+                         aura::Window* window,
+                         bool is_fling = false,
+                         float velocity_y = 0.f) {
     timestamp += base::TimeDelta::FromMilliseconds(100);
-    SendGestureEventToController(
-        start.x(), start.y() + scroll_delta, timestamp,
-        ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END), window);
+    ui::GestureEventDetails details =
+        is_fling
+            ? ui::GestureEventDetails(ui::ET_SCROLL_FLING_START, 0, velocity_y)
+            : ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END);
+    SendGestureEventToController(start.x(), start.y() + scroll_delta, timestamp,
+                                 details, window);
   }
 
  private:
@@ -2233,14 +2241,14 @@
 
   // Move the window by a small amount of distance will maximize the window
   // again.
-  SendGestureEvents(gfx::Point(0, 0), 10, window.get());
+  gfx::Point start = gfx::Point(0, 0);
+  SendGestureEvents(start, 10, window.get());
   EXPECT_TRUE(wm::GetWindowState(window.get())->IsMaximized());
 
   // Drag the window long enough (pass one fourth of the screen vertical
   // height) to snap the window to splitscreen.
   const float long_scroll_delta = display_bounds.height() / 4 + 5;
   base::TimeTicks timestamp = base::TimeTicks::Now();
-  gfx::Point start = gfx::Point(0, 0);
   SendScrollStartAndUpdate(start, long_scroll_delta, timestamp, window.get());
   WindowSelectorController* window_selector_controller =
       Shell::Get()->window_selector_controller();
@@ -2273,6 +2281,68 @@
   EXPECT_FALSE(window_selector_controller->IsSelecting());
   EXPECT_FALSE(split_view_controller()->IsSplitViewModeActive());
   EXPECT_TRUE(wm::GetWindowState(window.get())->IsMaximized());
+
+  // FLING the window with small velocity (smaller than
+  // kFlingToOverviewThreshold) will not able to drop the window into overview.
+  timestamp = base::TimeTicks::Now();
+  SendScrollStartAndUpdate(start, 10, timestamp, window.get());
+  window_selector_controller = Shell::Get()->window_selector_controller();
+  EXPECT_TRUE(window_selector_controller->IsSelecting());
+  EndScrollSequence(
+      start, 10, timestamp, window.get(), /*is_fling=*/true,
+      /*velocity_y=*/
+      TabletModeAppWindowDragController::kFlingToOverviewThreshold - 10.f);
+  EXPECT_FALSE(window_selector_controller->IsSelecting());
+
+  // FLING the window with large veloicty (larger than
+  // kFlingToOverviewThreshold) will drop the window into overview.
+  timestamp = base::TimeTicks::Now();
+  SendScrollStartAndUpdate(start, 10, timestamp, window.get());
+  window_selector_controller = Shell::Get()->window_selector_controller();
+  EXPECT_TRUE(window_selector_controller->IsSelecting());
+  EndScrollSequence(
+      start, 10, timestamp, window.get(), /*is_fling=*/true,
+      /*velocity_y=*/
+      TabletModeAppWindowDragController::kFlingToOverviewThreshold + 10.f);
+  EXPECT_TRUE(window_selector_controller->IsSelecting());
+}
+
+// Tests the shelf visibility when a fullscreened window is being dragged.
+TEST_F(SplitViewAppDraggingTest, ShelfVisibilityIfDraggingFullscreenedWindow) {
+  UpdateDisplay("800x600");
+  std::unique_ptr<aura::Window> window(
+      CreateAppWindow(gfx::Rect(0, 0, 500, 500)));
+  ShelfLayoutManager* shelf_layout_manager =
+      AshTestBase::GetPrimaryShelf()->shelf_layout_manager();
+  gfx::Rect display_bounds =
+      split_view_controller()->GetDisplayWorkAreaBoundsInScreen(window.get());
+
+  // Shelf will be auto-hidden if the winodw requests to be fullscreened.
+  wm::WindowState* window_state = wm::GetWindowState(window.get());
+  const wm::WMEvent fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
+  window_state->OnWMEvent(&fullscreen_event);
+  window_state->SetHideShelfWhenFullscreen(false);
+  window_state->SetInImmersiveFullscreen(true);
+  shelf_layout_manager->UpdateVisibilityState();
+  EXPECT_TRUE(window_state->IsFullscreen());
+  EXPECT_FALSE(shelf_layout_manager->IsVisible());
+
+  // Drag the window by a small amount of distance, the window will back to
+  // fullscreened, and shelf will be hidden again.
+  gfx::Point start = gfx::Point(0, 0);
+  SendGestureEvents(start, 10, window.get());
+  EXPECT_TRUE(wm::GetWindowState(window.get())->IsFullscreen());
+  EXPECT_FALSE(shelf_layout_manager->IsVisible());
+
+  // Shelf is visible during dragging.
+  base::TimeTicks timestamp = base::TimeTicks::Now();
+  const float long_scroll_delta = display_bounds.height() / 4 + 5;
+  SendScrollStartAndUpdate(start, long_scroll_delta, timestamp, window.get());
+  EXPECT_TRUE(shelf_layout_manager->IsVisible());
+  EndScrollSequence(start, long_scroll_delta, timestamp, window.get());
+  EXPECT_TRUE(split_view_controller()->IsSplitViewModeActive());
+  EXPECT_TRUE(wm::GetWindowState(window.get())->IsSnapped());
+  EXPECT_TRUE(shelf_layout_manager->IsVisible());
 }
 
 }  // namespace ash
diff --git a/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.cc b/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.cc
index 680e67d61..e9375ac 100644
--- a/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.cc
+++ b/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.cc
@@ -4,6 +4,12 @@
 
 #include "ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.h"
 
+#include "ash/root_window_controller.h"
+#include "ash/shelf/shelf_layout_manager.h"
+#include "ash/shell.h"
+#include "ash/wm/overview/window_grid.h"
+#include "ash/wm/overview/window_selector_controller.h"
+#include "ash/wm/overview/window_selector_item.h"
 #include "ash/wm/splitview/split_view_drag_indicators.h"
 #include "ash/wm/tablet_mode/tablet_mode_window_drag_delegate.h"
 #include "ash/wm/window_state.h"
@@ -84,6 +90,16 @@
   initial_location_in_screen_ = GetEventLocationInScreen(event);
   drag_delegate_->StartWindowDrag(static_cast<aura::Window*>(event->target()),
                                   initial_location_in_screen_);
+
+  WindowSelectorController* window_selector_controller =
+      Shell::Get()->window_selector_controller();
+  DCHECK(window_selector_controller->IsSelecting());
+  WindowGrid* window_grid =
+      window_selector_controller->window_selector()->GetGridWithRootWindow(
+          drag_delegate_->dragged_window()->GetRootWindow());
+  const std::vector<std::unique_ptr<WindowSelectorItem>>& selector_items =
+      window_grid->window_list();
+  new_selector_item_bounds_ = selector_items.back().get()->target_bounds();
 }
 
 void TabletModeAppWindowDragController::UpdateWindowDrag(
@@ -98,21 +114,22 @@
     wm::WmToplevelWindowEventHandler::DragResult result) {
   const gfx::Point location_in_screen(GetEventLocationInScreen(event));
   drag_delegate_->dragged_window()->SetTransform(gfx::Transform());
+  if (event->type() == ui::ET_SCROLL_FLING_START &&
+      event->details().velocity_y() > kFlingToOverviewThreshold) {
+    Shell::Get()->window_selector_controller()->window_selector()->AddItem(
+        drag_delegate_->dragged_window(), /*reposition=*/true);
+  }
   drag_delegate_->EndWindowDrag(result, location_in_screen);
 }
 
 void TabletModeAppWindowDragController::UpdateDraggedWindow(
     const gfx::Point& location_in_screen) {
-  gfx::PointF gesture_drag_amount =
-      gfx::PointF(location_in_screen.x() - initial_location_in_screen_.x(),
-                  location_in_screen.y() - initial_location_in_screen_.y());
-  const gfx::Size display_size =
-      drag_delegate_->dragged_window()->GetRootWindow()->bounds().size();
-  const float x_scale =
-      1.0f - fabsf(gesture_drag_amount.x()) / display_size.width();
-  const float y_scale =
-      1.0f - fabsf(gesture_drag_amount.y()) / display_size.height();
-  const float scale = std::min(x_scale, y_scale);
+  DCHECK(drag_delegate_->dragged_window());
+  RootWindowController::ForWindow(drag_delegate_->dragged_window())
+      ->GetShelfLayoutManager()
+      ->UpdateVisibilityState();
+
+  float scale = CalculateWindowScale(location_in_screen.y());
   gfx::Transform transform;
   transform.Translate(
       location_in_screen.x() - initial_location_in_screen_.x() * scale,
@@ -121,4 +138,17 @@
   drag_delegate_->dragged_window()->SetTransform(transform);
 }
 
+float TabletModeAppWindowDragController::CalculateWindowScale(
+    int y_location_in_screen) const {
+  float minimum_scale =
+      static_cast<float>(new_selector_item_bounds_.height()) /
+      static_cast<float>(drag_delegate_->dragged_window()->bounds().height());
+  int y_full = new_selector_item_bounds_.y();
+  int y_diff = y_full - y_location_in_screen;
+  if (y_diff < 0)
+    return minimum_scale;
+
+  return (1.0f - minimum_scale) * y_diff / y_full + minimum_scale;
+}
+
 }  // namespace ash
diff --git a/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.h b/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.h
index e0d0e070..5ba72b5 100644
--- a/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.h
+++ b/ash/wm/tablet_mode/tablet_mode_app_window_drag_controller.h
@@ -19,6 +19,9 @@
 // splitscreen through swiping from the top of the screen in tablet mode.
 class ASH_EXPORT TabletModeAppWindowDragController {
  public:
+  // Threshold of the fling velocity to drop the window into overview.
+  static constexpr float kFlingToOverviewThreshold = 100.0f;
+
   TabletModeAppWindowDragController();
   ~TabletModeAppWindowDragController();
 
@@ -38,10 +41,22 @@
   // Apply transform to the dragged window during dragging.
   void UpdateDraggedWindow(const gfx::Point& location_in_screen);
 
+  // The scale of the window during drag is based on the distance from
+  // |y_location_in_screen| to the y position of |new_selector_item_bounds_|.
+  // The dragged window will become smaller when it becomes nearer to the new
+  // selector item. And then keep the minimum scale if it has been dragged
+  // further than the new selector item.
+  float CalculateWindowScale(int y_location_in_screen) const;
+
   std::unique_ptr<TabletModeWindowDragDelegate> drag_delegate_;
 
   gfx::Point initial_location_in_screen_;
 
+  // Overview mode will be triggered if a window is being dragged from the top
+  // of the display, and a new selector item will be created in the overview
+  // grid. See |new_selector_item_widget_| in WindowGrid for more info.
+  gfx::Rect new_selector_item_bounds_;
+
   DISALLOW_COPY_AND_ASSIGN(TabletModeAppWindowDragController);
 };
 
diff --git a/ash/wm/top_level_window_factory.cc b/ash/wm/top_level_window_factory.cc
index ed3fa4f..d5ef8f3 100644
--- a/ash/wm/top_level_window_factory.cc
+++ b/ash/wm/top_level_window_factory.cc
@@ -176,8 +176,6 @@
   aura::Window* window = new aura::Window(window_delegate);
   window_delegate->set_window(window);
   aura::SetWindowType(window, window_type);
-  window->SetProperty(aura::client::kEmbedType,
-                      aura::client::WindowEmbedType::TOP_LEVEL_IN_WM);
   ApplyProperties(window, property_converter, *properties);
   window->Init(ui::LAYER_TEXTURED);
 
diff --git a/ash/wm/top_level_window_factory_unittest.cc b/ash/wm/top_level_window_factory_unittest.cc
index 775b151..cc02abb 100644
--- a/ash/wm/top_level_window_factory_unittest.cc
+++ b/ash/wm/top_level_window_factory_unittest.cc
@@ -16,6 +16,7 @@
 #include "ash/wm/window_properties.h"
 #include "mojo/public/cpp/bindings/map.h"
 #include "services/ui/public/cpp/property_type_converters.h"
+#include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "services/ui/ws2/window_tree_test_helper.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/aura/window.h"
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 7fb93868..0a76cb4 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -162,7 +162,6 @@
     "allocator/allocator_shim.h",
     "allocator/malloc_zone_functions_mac.cc",
     "allocator/malloc_zone_functions_mac.h",
-    "android/android_hardware_buffer_abi.h",
     "android/android_hardware_buffer_compat.cc",
     "android/android_hardware_buffer_compat.h",
     "android/android_image_reader_abi.h",
@@ -722,6 +721,8 @@
     "run_loop.h",
     "sampling_heap_profiler/lock_free_address_hash_set.cc",
     "sampling_heap_profiler/lock_free_address_hash_set.h",
+    "sampling_heap_profiler/module_cache.cc",
+    "sampling_heap_profiler/module_cache.h",
     "sampling_heap_profiler/sampling_heap_profiler.cc",
     "sampling_heap_profiler/sampling_heap_profiler.h",
     "scoped_clear_errno.h",
@@ -2346,6 +2347,7 @@
     "run_loop_unittest.cc",
     "safe_numerics_unittest.cc",
     "sampling_heap_profiler/lock_free_address_hash_set_unittest.cc",
+    "sampling_heap_profiler/module_cache_unittest.cc",
     "scoped_clear_errno_unittest.cc",
     "scoped_generic_unittest.cc",
     "scoped_native_library_unittest.cc",
diff --git a/base/allocator/BUILD.gn b/base/allocator/BUILD.gn
index c931d0fb..5f1f7a1f 100644
--- a/base/allocator/BUILD.gn
+++ b/base/allocator/BUILD.gn
@@ -74,7 +74,11 @@
 if (use_allocator == "tcmalloc") {
   # tcmalloc currently won't compile on Android.
   source_set("tcmalloc") {
-    tcmalloc_dir = "//third_party/tcmalloc/gperftools-2.0/chromium"
+    if (use_new_tcmalloc) {
+      tcmalloc_dir = "//third_party/tcmalloc/chromium"
+    } else {
+      tcmalloc_dir = "//third_party/tcmalloc/gperftools-2.0/chromium"
+    }
 
     # Don't check tcmalloc's includes. These files include various files like
     # base/foo.h and they actually refer to tcmalloc's forked copy of base
@@ -214,7 +218,9 @@
       configs -= [ "//build/config/compiler:afdo" ]
     }
 
-    deps = []
+    deps = [
+      ":buildflags",
+    ]
 
     if (enable_profiling) {
       sources += [
@@ -272,7 +278,10 @@
 
 buildflag_header("buildflags") {
   header = "buildflags.h"
-  flags = [ "USE_ALLOCATOR_SHIM=$use_allocator_shim" ]
+  flags = [
+    "USE_ALLOCATOR_SHIM=$use_allocator_shim",
+    "USE_NEW_TCMALLOC=$use_new_tcmalloc",
+  ]
 }
 
 # Used to shim malloc symbols on Android. see //base/allocator/README.md.
diff --git a/base/allocator/allocator_extension.cc b/base/allocator/allocator_extension.cc
index b6ddbaa..e10a92c 100644
--- a/base/allocator/allocator_extension.cc
+++ b/base/allocator/allocator_extension.cc
@@ -3,14 +3,20 @@
 // found in the LICENSE file.
 
 #include "base/allocator/allocator_extension.h"
-
+#include "base/allocator/buildflags.h"
 #include "base/logging.h"
 
 #if defined(USE_TCMALLOC)
+#if BUILDFLAG(USE_NEW_TCMALLOC)
+#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
+#include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h"
+#include "third_party/tcmalloc/chromium/src/gperftools/malloc_hook.h"
+#else
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/heap-profiler.h"
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/malloc_extension.h"
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/malloc_hook.h"
 #endif
+#endif
 
 namespace base {
 namespace allocator {
diff --git a/base/allocator/allocator_shim_default_dispatch_to_tcmalloc.cc b/base/allocator/allocator_shim_default_dispatch_to_tcmalloc.cc
index 71e4979..1601429 100644
--- a/base/allocator/allocator_shim_default_dispatch_to_tcmalloc.cc
+++ b/base/allocator/allocator_shim_default_dispatch_to_tcmalloc.cc
@@ -4,8 +4,15 @@
 
 #include "base/allocator/allocator_shim.h"
 #include "base/allocator/allocator_shim_internals.h"
+#include "base/allocator/buildflags.h"
+
+#if BUILDFLAG(USE_NEW_TCMALLOC)
+#include "third_party/tcmalloc/chromium/src/config.h"
+#include "third_party/tcmalloc/chromium/src/gperftools/tcmalloc.h"
+#else
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/config.h"
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/tcmalloc.h"
+#endif
 
 namespace {
 
diff --git a/base/allocator/debugallocation_shim.cc b/base/allocator/debugallocation_shim.cc
index 7eb4504..b8bf50f 100644
--- a/base/allocator/debugallocation_shim.cc
+++ b/base/allocator/debugallocation_shim.cc
@@ -13,8 +13,22 @@
 #pragma GCC optimize ("no-auto-profile")
 #endif
 
+#include "base/allocator/buildflags.h"
+
+#if BUILDFLAG(USE_NEW_TCMALLOC)
+
+#if defined(TCMALLOC_FOR_DEBUGALLOCATION)
+#include "third_party/tcmalloc/chromium/src/debugallocation.cc"
+#else
+#include "third_party/tcmalloc/chromium/src/tcmalloc.cc"
+#endif
+
+#else
+
 #if defined(TCMALLOC_FOR_DEBUGALLOCATION)
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/debugallocation.cc"
 #else
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/tcmalloc.cc"
 #endif
+
+#endif
diff --git a/base/android/android_hardware_buffer_abi.h b/base/android/android_hardware_buffer_abi.h
deleted file mode 100644
index 7012532..0000000
--- a/base/android/android_hardware_buffer_abi.h
+++ /dev/null
@@ -1,90 +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.
-
-#ifndef BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_
-#define BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_
-
-// Minimal binary interface definitions for AHardwareBuffer based on
-// include/android/hardware_buffer.h from the Android NDK for platform level
-// 26+. This is only intended for use from the AndroidHardwareBufferCompat
-// wrapper for building without NDK platform level support, it is not a
-// general-use header and is not complete.
-//
-// TODO(crbug.com/771171): Delete this file when third_party/android_ndk/
-// is updated to a version that contains the android/hardware_buffer.h file.
-//
-// Please refer to the API documentation for details:
-// https://developer.android.com/ndk/reference/hardware__buffer_8h.html
-
-#include <stdint.h>
-
-// Use "C" linkage to match the original header file. This isn't strictly
-// required since the file is not declaring global functions, but the types
-// should remain in the global namespace for compatibility, and it's a reminder
-// that forward declarations elsewhere should use "extern "C" to avoid
-// namespace issues.
-extern "C" {
-
-typedef struct AHardwareBuffer AHardwareBuffer;
-typedef struct ARect ARect;
-
-enum {
-  AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM = 1,
-  AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM = 2,
-  AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM = 3,
-  AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM = 4,
-  AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT = 0x16,
-  AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM = 0x2b,
-  AHARDWAREBUFFER_FORMAT_BLOB = 0x21,
-};
-
-enum {
-  AHARDWAREBUFFER_USAGE_CPU_READ_NEVER = 0UL,
-  AHARDWAREBUFFER_USAGE_CPU_READ_RARELY = 2UL,
-  AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN = 3UL,
-  AHARDWAREBUFFER_USAGE_CPU_READ_MASK = 0xFUL,
-  AHARDWAREBUFFER_USAGE_CPU_WRITE_NEVER = 0UL << 4,
-  AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY = 2UL << 4,
-  AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN = 3UL << 4,
-  AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK = 0xFUL << 4,
-  AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE = 1UL << 8,
-  AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT = 1UL << 9,
-  AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT = 1UL << 14,
-  AHARDWAREBUFFER_USAGE_VIDEO_ENCODE = 1UL << 16,
-  AHARDWAREBUFFER_USAGE_SENSOR_DIRECT_DATA = 1UL << 23,
-  AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER = 1UL << 24,
-};
-
-typedef struct AHardwareBuffer_Desc {
-  uint32_t width;
-  uint32_t height;
-  uint32_t layers;
-  uint32_t format;
-  uint64_t usage;
-  uint32_t stride;
-  uint32_t rfu0;
-  uint64_t rfu1;
-} AHardwareBuffer_Desc;
-
-using PFAHardwareBuffer_allocate = void (*)(const AHardwareBuffer_Desc* desc,
-                                            AHardwareBuffer** outBuffer);
-using PFAHardwareBuffer_acquire = void (*)(AHardwareBuffer* buffer);
-using PFAHardwareBuffer_describe = void (*)(const AHardwareBuffer* buffer,
-                                            AHardwareBuffer_Desc* outDesc);
-using PFAHardwareBuffer_lock = int (*)(AHardwareBuffer* buffer,
-                                       uint64_t usage,
-                                       int32_t fence,
-                                       const ARect* rect,
-                                       void** outVirtualAddress);
-using PFAHardwareBuffer_recvHandleFromUnixSocket =
-    int (*)(int socketFd, AHardwareBuffer** outBuffer);
-using PFAHardwareBuffer_release = void (*)(AHardwareBuffer* buffer);
-using PFAHardwareBuffer_sendHandleToUnixSocket =
-    int (*)(const AHardwareBuffer* buffer, int socketFd);
-using PFAHardwareBuffer_unlock = int (*)(AHardwareBuffer* buffer,
-                                         int32_t* fence);
-
-}  // extern "C"
-
-#endif  // BASE_ANDROID_ANDROID_HARDWARE_BUFFER_ABI_H_
diff --git a/base/android/android_hardware_buffer_compat.h b/base/android/android_hardware_buffer_compat.h
index 14be3d5..dcd200f5 100644
--- a/base/android/android_hardware_buffer_compat.h
+++ b/base/android/android_hardware_buffer_compat.h
@@ -5,10 +5,32 @@
 #ifndef BASE_ANDROID_ANDROID_HARDWARE_BUFFER_COMPAT_H_
 #define BASE_ANDROID_ANDROID_HARDWARE_BUFFER_COMPAT_H_
 
-#include "base/android/android_hardware_buffer_abi.h"
+#include <android/hardware_buffer.h>
+#include <android/sensor.h>
+
 #include "base/base_export.h"
 #include "base/lazy_instance.h"
 
+extern "C" {
+using PFAHardwareBuffer_allocate = void (*)(const AHardwareBuffer_Desc* desc,
+                                            AHardwareBuffer** outBuffer);
+using PFAHardwareBuffer_acquire = void (*)(AHardwareBuffer* buffer);
+using PFAHardwareBuffer_describe = void (*)(const AHardwareBuffer* buffer,
+                                            AHardwareBuffer_Desc* outDesc);
+using PFAHardwareBuffer_lock = int (*)(AHardwareBuffer* buffer,
+                                       uint64_t usage,
+                                       int32_t fence,
+                                       const ARect* rect,
+                                       void** outVirtualAddress);
+using PFAHardwareBuffer_recvHandleFromUnixSocket =
+    int (*)(int socketFd, AHardwareBuffer** outBuffer);
+using PFAHardwareBuffer_release = void (*)(AHardwareBuffer* buffer);
+using PFAHardwareBuffer_sendHandleToUnixSocket =
+    int (*)(const AHardwareBuffer* buffer, int socketFd);
+using PFAHardwareBuffer_unlock = int (*)(AHardwareBuffer* buffer,
+                                         int32_t* fence);
+}
+
 namespace base {
 
 // This class provides runtime support for working with AHardwareBuffer objects
diff --git a/base/debug/profiler.cc b/base/debug/profiler.cc
index ef9afb6..e2b8ae06 100644
--- a/base/debug/profiler.cc
+++ b/base/debug/profiler.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 
+#include "base/allocator/buildflags.h"
 #include "base/debug/debugging_buildflags.h"
 #include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
@@ -19,9 +20,15 @@
 
 // TODO(peria): Enable profiling on Windows.
 #if BUILDFLAG(ENABLE_PROFILING) && !defined(NO_TCMALLOC) && !defined(OS_WIN)
+
+#if BUILDFLAG(USE_NEW_TCMALLOC)
+#include "third_party/tcmalloc/chromium/src/gperftools/profiler.h"
+#else
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/profiler.h"
 #endif
 
+#endif
+
 namespace base {
 namespace debug {
 
diff --git a/base/mac/sdk_forward_declarations.h b/base/mac/sdk_forward_declarations.h
index 7993870..d5913abe 100644
--- a/base/mac/sdk_forward_declarations.h
+++ b/base/mac/sdk_forward_declarations.h
@@ -322,6 +322,21 @@
 @property(readonly, nonatomic, strong) VNFaceLandmarks2D* landmarks;
 @end
 
+// VNDetectBarcodesRequest forward declarations.
+typedef NSString* VNBarcodeSymbology NS_STRING_ENUM;
+
+@interface VNDetectBarcodesRequest : VNImageBasedRequest
+@property(readwrite, nonatomic, copy) NSArray<VNBarcodeSymbology>* symbologies;
+@end
+
+// VNBarcodeObservation forward declarations.
+@interface VNRectangleObservation : VNDetectedObjectObservation
+@end
+
+@interface VNBarcodeObservation : VNRectangleObservation
+@property(readonly, nonatomic, copy) NSString* payloadStringValue;
+@end
+
 #endif  // MAC_OS_X_VERSION_10_13
 // ----------------------------------------------------------------------------
 // The symbol for kCWSSIDDidChangeNotification is available in the
diff --git a/base/process/memory_linux.cc b/base/process/memory_linux.cc
index 171753c7..2e505f7c 100644
--- a/base/process/memory_linux.cc
+++ b/base/process/memory_linux.cc
@@ -18,9 +18,14 @@
 #include "build/build_config.h"
 
 #if defined(USE_TCMALLOC)
+#if BUILDFLAG(USE_NEW_TCMALLOC)
+#include "third_party/tcmalloc/chromium/src/config.h"
+#include "third_party/tcmalloc/chromium/src/gperftools/tcmalloc.h"
+#else
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/config.h"
 #include "third_party/tcmalloc/gperftools-2.0/chromium/src/gperftools/tcmalloc.h"
 #endif
+#endif
 
 namespace base {
 
diff --git a/base/process/process_unittest.cc b/base/process/process_unittest.cc
index 219944d..82af410 100644
--- a/base/process/process_unittest.cc
+++ b/base/process/process_unittest.cc
@@ -231,12 +231,7 @@
     return;
   Process process(SpawnChild("SimpleChildProcess"));
   int old_priority = process.GetPriority();
-#if defined(OS_WIN)
-  EXPECT_TRUE(process.SetProcessBackgrounded(true));
-  EXPECT_TRUE(process.IsProcessBackgrounded());
-  EXPECT_TRUE(process.SetProcessBackgrounded(false));
-  EXPECT_FALSE(process.IsProcessBackgrounded());
-#elif defined(OS_MACOSX)
+#if defined(OS_MACOSX)
   // On the Mac, backgrounding a process requires a port to that process.
   // In the browser it's available through the MachBroker class, which is not
   // part of base. Additionally, there is an indefinite amount of time between
@@ -250,8 +245,10 @@
   EXPECT_FALSE(process.IsProcessBackgrounded(&provider));
 
 #else
-  process.SetProcessBackgrounded(true);
-  process.SetProcessBackgrounded(false);
+  EXPECT_TRUE(process.SetProcessBackgrounded(true));
+  EXPECT_TRUE(process.IsProcessBackgrounded());
+  EXPECT_TRUE(process.SetProcessBackgrounded(false));
+  EXPECT_FALSE(process.IsProcessBackgrounded());
 #endif
   int new_priority = process.GetPriority();
   EXPECT_EQ(old_priority, new_priority);
diff --git a/base/profiler/native_stack_sampler.h b/base/profiler/native_stack_sampler.h
index 5d7e9b0..f5b2eb6 100644
--- a/base/profiler/native_stack_sampler.h
+++ b/base/profiler/native_stack_sampler.h
@@ -56,6 +56,13 @@
   // any NativeStackSampler object.
   static std::unique_ptr<StackBuffer> CreateStackBuffer();
 
+  // Creates a Module object for the specified memory address. If the address
+  // does not belong to a module returns an invalid module.
+  // TODO(alph): Move platform-specific module lookup code into
+  // base::ModuleCache and remove this function.
+  static StackSamplingProfiler::InternalModule GetModuleForAddress(
+      uintptr_t address);
+
   // The following functions are all called on the SamplingThread (not the
   // thread being sampled).
 
diff --git a/base/profiler/native_stack_sampler_mac.cc b/base/profiler/native_stack_sampler_mac.cc
index d45c7a8c..116d1b7 100644
--- a/base/profiler/native_stack_sampler_mac.cc
+++ b/base/profiler/native_stack_sampler_mac.cc
@@ -511,20 +511,10 @@
   if (loc != module_cache_entry_.end())
     return loc->internal_module;
 
-  Dl_info inf;
-  if (!dladdr(reinterpret_cast<const void*>(instruction_pointer), &inf))
-    return InternalModule();
-
-  auto base_module_address = reinterpret_cast<uintptr_t>(inf.dli_fbase);
-
-  InternalModule internal_module(
-      base_module_address, GetUniqueId(inf.dli_fbase), FilePath(inf.dli_fname));
-
-  module_cache_entry_.emplace_back(
-      base_module_address,
-      base_module_address + GetModuleTextSize(inf.dli_fbase), internal_module);
-
-  return internal_module;
+  InternalModule module = GetModuleForAddress(instruction_pointer);
+  module_cache_entry_.emplace_back(module.base_address,
+                                   module.base_address + module.size, module);
+  return module;
 }
 
 template <typename StackFrameCallback, typename ContinueUnwindPredicate>
@@ -620,12 +610,28 @@
 
 }  // namespace
 
+// NativeStackSampler ---------------------------------------------------------
+
+// static
 std::unique_ptr<NativeStackSampler> NativeStackSampler::Create(
     PlatformThreadId thread_id,
     NativeStackSamplerTestDelegate* test_delegate) {
   return std::make_unique<NativeStackSamplerMac>(thread_id, test_delegate);
 }
 
+// static
+StackSamplingProfiler::InternalModule NativeStackSampler::GetModuleForAddress(
+    uintptr_t address) {
+  Dl_info inf;
+  if (!dladdr(reinterpret_cast<const void*>(address), &inf))
+    return StackSamplingProfiler::InternalModule();
+  auto base_module_address = reinterpret_cast<uintptr_t>(inf.dli_fbase);
+  return StackSamplingProfiler::InternalModule(
+      base_module_address, GetUniqueId(inf.dli_fbase), FilePath(inf.dli_fname),
+      GetModuleTextSize(inf.dli_fbase));
+}
+
+// static
 size_t NativeStackSampler::GetStackBufferSize() {
   // In platform_thread_mac's GetDefaultThreadStackSize(), RLIMIT_STACK is used
   // for all stacks, not just the main thread's, so it is good for use here.
diff --git a/base/profiler/native_stack_sampler_posix.cc b/base/profiler/native_stack_sampler_posix.cc
index fdc18e0..982003d4 100644
--- a/base/profiler/native_stack_sampler_posix.cc
+++ b/base/profiler/native_stack_sampler_posix.cc
@@ -12,6 +12,13 @@
   return std::unique_ptr<NativeStackSampler>();
 }
 
+// static
+StackSamplingProfiler::InternalModule NativeStackSampler::GetModuleForAddress(
+    uintptr_t address) {
+  // TODO(alph): Implement it.
+  return StackSamplingProfiler::InternalModule();
+}
+
 size_t NativeStackSampler::GetStackBufferSize() {
   return 0;
 }
diff --git a/base/profiler/native_stack_sampler_win.cc b/base/profiler/native_stack_sampler_win.cc
index b9b1773..56ee166 100644
--- a/base/profiler/native_stack_sampler_win.cc
+++ b/base/profiler/native_stack_sampler_win.cc
@@ -495,6 +495,9 @@
 
 }  // namespace
 
+// NativeStackSampler ---------------------------------------------------------
+
+// static
 std::unique_ptr<NativeStackSampler> NativeStackSampler::Create(
     PlatformThreadId thread_id,
     NativeStackSamplerTestDelegate* test_delegate) {
@@ -512,6 +515,14 @@
   return std::unique_ptr<NativeStackSampler>();
 }
 
+// static
+StackSamplingProfiler::InternalModule NativeStackSampler::GetModuleForAddress(
+    uintptr_t address) {
+  // TODO(alph): Implement it.
+  return StackSamplingProfiler::InternalModule();
+}
+
+// static
 size_t NativeStackSampler::GetStackBufferSize() {
   // The default Win32 reserved stack size is 1 MB and Chrome Windows threads
   // currently always use the default, but this allows for expansion if it
diff --git a/base/profiler/stack_sampling_profiler.cc b/base/profiler/stack_sampling_profiler.cc
index 02df814f..81f3c5d7 100644
--- a/base/profiler/stack_sampling_profiler.cc
+++ b/base/profiler/stack_sampling_profiler.cc
@@ -59,7 +59,17 @@
 StackSamplingProfiler::InternalModule::InternalModule(uintptr_t base_address,
                                                       const std::string& id,
                                                       const FilePath& filename)
-    : base_address(base_address), id(id), filename(filename), is_valid(true) {}
+    : InternalModule(base_address, id, filename, 0) {}
+
+StackSamplingProfiler::InternalModule::InternalModule(uintptr_t base_address,
+                                                      const std::string& id,
+                                                      const FilePath& filename,
+                                                      size_t size)
+    : base_address(base_address),
+      id(id),
+      filename(filename),
+      is_valid(true),
+      size(size) {}
 
 StackSamplingProfiler::InternalModule::~InternalModule() = default;
 
diff --git a/base/profiler/stack_sampling_profiler.h b/base/profiler/stack_sampling_profiler.h
index e43349a8..90579e7 100644
--- a/base/profiler/stack_sampling_profiler.h
+++ b/base/profiler/stack_sampling_profiler.h
@@ -90,6 +90,10 @@
     InternalModule(uintptr_t base_address,
                    const std::string& id,
                    const FilePath& filename);
+    InternalModule(uintptr_t base_address,
+                   const std::string& id,
+                   const FilePath& filename,
+                   size_t size);
     ~InternalModule();
 
     // Points to the base address of the module.
@@ -109,6 +113,9 @@
 
     // The validness of the module.
     bool is_valid;
+
+    // Size of the module.
+    size_t size;
   };
 
   // Frame represents an individual sampled stack frame with module information.
diff --git a/base/sampling_heap_profiler/module_cache.cc b/base/sampling_heap_profiler/module_cache.cc
new file mode 100644
index 0000000..2b5efc9
--- /dev/null
+++ b/base/sampling_heap_profiler/module_cache.cc
@@ -0,0 +1,33 @@
+// 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.
+
+#include "base/sampling_heap_profiler/module_cache.h"
+
+#include "base/no_destructor.h"
+#include "base/profiler/native_stack_sampler.h"
+
+namespace base {
+
+ModuleCache::ModuleCache() = default;
+ModuleCache::~ModuleCache() = default;
+
+const ModuleCache::Module& ModuleCache::GetModuleForAddress(uintptr_t address) {
+  static NoDestructor<Module> invalid_module;
+  auto it = modules_cache_map_.upper_bound(address);
+  if (it != modules_cache_map_.begin()) {
+    DCHECK(!modules_cache_map_.empty());
+    --it;
+    Module& module = it->second;
+    if (address < module.base_address + module.size)
+      return module;
+  }
+
+  auto module = NativeStackSampler::GetModuleForAddress(address);
+  if (!module.is_valid)
+    return *invalid_module;
+  return modules_cache_map_.emplace(module.base_address, std::move(module))
+      .first->second;
+}
+
+}  // namespace base
diff --git a/base/sampling_heap_profiler/module_cache.h b/base/sampling_heap_profiler/module_cache.h
new file mode 100644
index 0000000..2fccb78a
--- /dev/null
+++ b/base/sampling_heap_profiler/module_cache.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef BASE_SAMPLING_HEAP_PROFILER_MODULE_CACHE_H_
+#define BASE_SAMPLING_HEAP_PROFILER_MODULE_CACHE_H_
+
+#include <map>
+
+#include "base/profiler/stack_sampling_profiler.h"
+
+namespace base {
+
+class BASE_EXPORT ModuleCache {
+ public:
+  using Module = StackSamplingProfiler::InternalModule;
+
+  ModuleCache();
+  ~ModuleCache();
+
+  const Module& GetModuleForAddress(uintptr_t address);
+
+ private:
+  std::map<uintptr_t, Module> modules_cache_map_;
+};
+
+}  // namespace base
+
+#endif  // BASE_SAMPLING_HEAP_PROFILER_MODULE_CACHE_H_
diff --git a/base/sampling_heap_profiler/module_cache_unittest.cc b/base/sampling_heap_profiler/module_cache_unittest.cc
new file mode 100644
index 0000000..a353f0a
--- /dev/null
+++ b/base/sampling_heap_profiler/module_cache_unittest.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "base/sampling_heap_profiler/module_cache.h"
+#include "build/build_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+namespace {
+
+class ModuleCacheTest : public ::testing::Test {};
+
+int AFunctionForTest() {
+  return 42;
+}
+
+// Checks that ModuleCache returns the same module instance for
+// addresses within the module.
+#if defined(OS_MACOSX) && !defined(OS_IOS)
+#define MAYBE_ModuleCache ModuleCache
+#else
+#define MAYBE_ModuleCache DISABLED_ModuleCache
+#endif
+TEST_F(ModuleCacheTest, MAYBE_ModuleCache) {
+  uintptr_t ptr1 = reinterpret_cast<uintptr_t>(&AFunctionForTest);
+  uintptr_t ptr2 = ptr1 + 1;
+  ModuleCache cache;
+  const ModuleCache::Module& module1 = cache.GetModuleForAddress(ptr1);
+  const ModuleCache::Module& module2 = cache.GetModuleForAddress(ptr2);
+  EXPECT_EQ(&module1, &module2);
+  EXPECT_TRUE(module1.is_valid);
+  EXPECT_LT(module1.base_address, ptr1);
+  EXPECT_GT(module1.base_address + module1.size, ptr2);
+}
+
+TEST_F(ModuleCacheTest, InvalidModule) {
+  ModuleCache cache;
+  const ModuleCache::Module& invalid_module = cache.GetModuleForAddress(1);
+  EXPECT_FALSE(invalid_module.is_valid);
+}
+
+}  // namespace
+}  // namespace base
diff --git a/base/task/sequence_manager/sequence_manager_impl.cc b/base/task/sequence_manager/sequence_manager_impl.cc
index 7afea9c3f..a19a26d5 100644
--- a/base/task/sequence_manager/sequence_manager_impl.cc
+++ b/base/task/sequence_manager/sequence_manager_impl.cc
@@ -293,6 +293,24 @@
 }
 
 Optional<PendingTask> SequenceManagerImpl::TakeTask() {
+  Optional<PendingTask> task = TakeTaskImpl();
+  if (!task)
+    return base::nullopt;
+
+  ExecutingTask& executing_task =
+      *main_thread_only().task_execution_stack.rbegin();
+
+  // It's important that there are no active trace events here which will
+  // terminate before we finish executing the task.
+  TRACE_EVENT_BEGIN2(TRACE_DISABLED_BY_DEFAULT("sequence_manager"),
+                     "SequenceManager::RunTask", "queue_type",
+                     executing_task.task_queue->GetName(), "task_type",
+                     executing_task.task_type);
+
+  return task;
+}
+
+Optional<PendingTask> SequenceManagerImpl::TakeTaskImpl() {
   CHECK(Validate());
 
   DCHECK_CALLED_ON_VALID_THREAD(main_thread_checker_);
@@ -357,6 +375,7 @@
     ExecutingTask& executing_task =
         *main_thread_only().task_execution_stack.rbegin();
     NotifyWillProcessTask(&executing_task, &lazy_now);
+
     return std::move(executing_task.pending_task);
   }
 }
@@ -365,6 +384,10 @@
   LazyNow lazy_now(controller_->GetClock());
   ExecutingTask& executing_task =
       *main_thread_only().task_execution_stack.rbegin();
+
+  TRACE_EVENT_END0(TRACE_DISABLED_BY_DEFAULT("sequence_manager"),
+                   "SequenceManagerImpl::RunTask");
+
   NotifyDidProcessTask(&executing_task, &lazy_now);
   main_thread_only().task_execution_stack.pop_back();
 
diff --git a/base/task/sequence_manager/sequence_manager_impl.h b/base/task/sequence_manager/sequence_manager_impl.h
index b42dc727..f641d13a 100644
--- a/base/task/sequence_manager/sequence_manager_impl.h
+++ b/base/task/sequence_manager/sequence_manager_impl.h
@@ -171,16 +171,20 @@
   // selector interface is unaware of those.  This struct keeps track off all
   // task related state needed to make pairs of TakeTask() / DidRunTask() work.
   struct ExecutingTask {
-    ExecutingTask(internal::TaskQueueImpl::Task&& pending_task,
+    ExecutingTask(internal::TaskQueueImpl::Task&& task,
                   internal::TaskQueueImpl* task_queue,
                   TaskQueue::TaskTiming task_timing)
-        : pending_task(std::move(pending_task)),
+        : pending_task(std::move(task)),
           task_queue(task_queue),
-          task_timing(task_timing) {}
+          task_timing(task_timing),
+          task_type(pending_task.task_type()) {}
 
     internal::TaskQueueImpl::Task pending_task;
     internal::TaskQueueImpl* task_queue = nullptr;
     TaskQueue::TaskTiming task_timing;
+    // Save task metadata to use in after running a task as |pending_task|
+    // won't be available then.
+    int task_type;
   };
 
   struct MainThreadOnly {
@@ -286,6 +290,10 @@
 
   bool ShouldRecordCPUTimeForTask();
 
+  // Helper to terminate all scoped trace events to allow starting new ones
+  // in TakeTask().
+  Optional<PendingTask> TakeTaskImpl();
+
   // Determines if wall time or thread time should be recorded for the next
   // task.
   TaskQueue::TaskTiming InitializeTaskTiming(
diff --git a/build/android/gyp/copy_ex.py b/build/android/gyp/copy_ex.py
index a9f6a9f4..48d1b26 100755
--- a/build/android/gyp/copy_ex.py
+++ b/build/android/gyp/copy_ex.py
@@ -35,8 +35,14 @@
       dest = os.path.join(dest, os.path.basename(f))
 
     deps.append(f)
-    if os.path.isfile(dest) and filecmp.cmp(dest, f, shallow=False):
-      return
+
+    if os.path.isfile(dest):
+      if filecmp.cmp(dest, f, shallow=False):
+        return
+      # The shutil.copy() below would fail if the file does not have write
+      # permissions. Deleting the file has similar costs to modifying the
+      # permissions.
+      os.unlink(dest)
 
     shutil.copy(f, dest)
 
diff --git a/build/android/gyp/javac.py b/build/android/gyp/javac.py
index b5ae57a6..53d3f99 100755
--- a/build/android/gyp/javac.py
+++ b/build/android/gyp/javac.py
@@ -96,6 +96,7 @@
   'MissingFail',
   'MissingOverride',
   'NarrowingCompoundAssignment',
+  'OrphanedFormatString',
   'ParameterName',
   'ParcelableCreator',
   'ReferenceEquality',
diff --git a/build/android/gyp/write_build_config.py b/build/android/gyp/write_build_config.py
index 734921c3..57edacc 100755
--- a/build/android/gyp/write_build_config.py
+++ b/build/android/gyp/write_build_config.py
@@ -419,15 +419,15 @@
 dependencies for this APK. Note: this is a list of files, where each file
 contains a list of Java source files. This is used for JNI registration.
 
-* `deps_info['proguard_all_configs"]`:
+* `deps_info['proguard_all_configs']`:
 The collection of all 'deps_info['proguard_configs']` values from this target
 and all its dependencies.
 
-* `deps_info['proguard_all_extra_jars"]`:
+* `deps_info['proguard_classpath_jars']`:
 The collection of all 'deps_info['extra_classpath_jars']` values from all
 dependencies.
 
-* `deps_info['proguard_under_test_mapping"]`:
+* `deps_info['proguard_under_test_mapping']`:
 Applicable to apks with proguard enabled that have an apk_under_test. This is
 the path to the apk_under_test's output proguard .mapping file.
 
@@ -508,8 +508,8 @@
 from util import build_utils
 
 # Types that should never be used as a dependency of another build config.
-_ROOT_TYPES = ('android_apk', 'java_binary',
-               'java_annotation_processor', 'junit_binary', 'resource_rewriter')
+_ROOT_TYPES = ('android_apk', 'java_binary', 'java_annotation_processor',
+               'junit_binary', 'resource_rewriter', 'android_app_bundle')
 # Types that should not allow code deps to pass through.
 _RESOURCE_TYPES = ('android_assets', 'android_resources', 'system_java_library')
 
@@ -828,6 +828,11 @@
   parser.add_option('--secondary-abi-shared-libraries-runtime-deps',
                     help='Path to file containing runtime deps for secondary '
                          'abi shared libraries.')
+  parser.add_option('--secondary-native-libs',
+                    action='append',
+                    help='GYP-list of native libraries for secondary '
+                         'android-abi. Can be specified multiple times.',
+                    default=[])
   parser.add_option('--uncompress-shared-libraries', default=False,
                     action='store_true',
                     help='Whether to store native libraries uncompressed')
@@ -883,6 +888,8 @@
   required_options_map = {
       'android_apk': ['build_config', 'dex_path', 'final_dex_path'] + \
           jar_path_options,
+      'android_app_bundle_module': ['build_config', 'dex_path',
+          'final_dex_path'] + jar_path_options,
       'android_assets': ['build_config'],
       'android_resources': ['build_config', 'resources_zip'],
       'dist_aar': ['build_config'],
@@ -894,6 +901,7 @@
       'junit_binary': ['build_config'],
       'resource_rewriter': ['build_config'],
       'system_java_library': ['build_config'],
+      'android_app_bundle': ['build_config'],
   }
   required_options = required_options_map.get(options.type)
   if not required_options:
@@ -902,14 +910,18 @@
   build_utils.CheckOptions(options, parser, required_options)
 
   if options.apk_proto_resources:
-    if options.type != 'android_apk':
+    if options.type != 'android_app_bundle_module':
       raise Exception('--apk-proto-resources can only be used with '
-                      '--type=android_apk')
+                      '--type=android_app_bundle_module')
+
+  is_apk_or_module_target = options.type in ('android_apk',
+      'android_app_bundle_module')
 
   if options.uncompress_shared_libraries:
-    if options.type != 'android_apk':
+    if not is_apk_or_module_target:
       raise Exception('--uncompressed-shared-libraries can only be used '
-                      'with --type=android_apk')
+                      'with --type=android_apk or '
+                      '--type=android_app_bundle_module')
 
   if options.jar_path and options.supports_android and not options.dex_path:
     raise Exception('java_library that supports Android requires a dex path.')
@@ -925,7 +937,7 @@
   is_java_target = options.type in (
       'java_binary', 'junit_binary', 'java_annotation_processor',
       'java_library', 'android_apk', 'dist_aar', 'dist_jar',
-      'system_java_library')
+      'system_java_library', 'android_app_bundle_module')
 
   deps = _DepsFromPaths(
       build_utils.ParseGnList(options.deps_configs), options.type)
@@ -996,7 +1008,7 @@
       else:
         gradle['dependent_java_projects'].append(c['path'])
 
-  if options.type == 'android_apk':
+  if is_apk_or_module_target:
     config['jni'] = {}
     all_java_sources = [c['java_sources_file'] for c in all_library_deps
                         if 'java_sources_file' in c]
@@ -1115,7 +1127,7 @@
 
   if options.type in (
       'android_resources', 'android_apk', 'junit_binary', 'resource_rewriter',
-      'dist_aar'):
+      'dist_aar', 'android_app_bundle_module'):
     config['resources'] = {}
     config['resources']['dependency_zips'] = [
         c['resources_zip'] for c in all_resources_deps]
@@ -1130,7 +1142,7 @@
     config['resources']['extra_package_names'] = extra_package_names
     config['resources']['extra_r_text_files'] = extra_r_text_files
 
-  if options.type == 'android_apk':
+  if is_apk_or_module_target:
     deps_dex_files = [c['dex_path'] for c in all_library_deps]
 
   if is_java_target:
@@ -1149,11 +1161,6 @@
     # The classpath used for bytecode-rewritting.
     javac_full_classpath = [
         c['unprocessed_jar_path'] for c in all_library_deps]
-    # The classpath to use to run this target (or as an input to ProGuard).
-    java_full_classpath = []
-    if options.jar_path:
-      java_full_classpath.append(options.jar_path)
-    java_full_classpath.extend(c['jar_path'] for c in all_library_deps)
 
     # Deps to add to the compile-time classpath (but not the runtime classpath).
     # TODO(agrieve): Might be less confusing to fold these into bootclasspath.
@@ -1174,23 +1181,57 @@
     if extra_jars:
       deps_info['extra_classpath_jars'] = extra_jars
 
+  if is_java_target or options.type == 'android_app_bundle':
+    # The classpath to use to run this target (or as an input to ProGuard).
+    java_full_classpath = []
+    if is_java_target and options.jar_path:
+      java_full_classpath.append(options.jar_path)
+    java_full_classpath.extend(c['jar_path'] for c in all_library_deps)
+
+  system_jars = [c['jar_path'] for c in system_library_deps]
+  system_interface_jars = [c['interface_jar_path'] for c in system_library_deps]
+  if system_library_deps:
+    config['android'] = {}
+    config['android']['sdk_interface_jars'] = system_interface_jars
+    config['android']['sdk_jars'] = system_jars
+    gradle['bootclasspath'] = system_jars
+
   if options.proguard_configs:
     deps_info['proguard_configs'] = (
         build_utils.ParseGnList(options.proguard_configs))
 
-  if options.type in ('android_apk', 'dist_aar', 'dist_jar'):
+  if options.type in ('android_apk', 'dist_aar',
+      'dist_jar', 'android_app_bundle_module', 'android_app_bundle'):
     all_configs = deps_info.get('proguard_configs', [])
-    extra_jars = []
+    extra_jars = list(system_jars)
     for c in all_library_deps:
       all_configs.extend(
           p for p in c.get('proguard_configs', []) if p not in all_configs)
       extra_jars.extend(
           p for p in c.get('extra_classpath_jars', []) if p not in extra_jars)
     deps_info['proguard_all_configs'] = all_configs
-    deps_info['proguard_all_extra_jars'] = extra_jars
-    deps_info['proguard_enabled'] = options.proguard_enabled
-    if options.proguard_output_jar_path:
-      deps_info['proguard_output_jar_path'] = options.proguard_output_jar_path
+    deps_info['proguard_classpath_jars'] = extra_jars
+
+    if options.type == 'android_app_bundle':
+      deps_proguard_enabled = []
+      deps_proguard_disabled = []
+      for d in deps.Direct('android_app_bundle_module'):
+        if not d['java_runtime_classpath']:
+          # We don't care about modules that have no Java code for proguarding.
+          continue
+        if d['proguard_enabled']:
+          deps_proguard_enabled.append(d['name'])
+        else:
+          deps_proguard_disabled.append(d['name'])
+      if deps_proguard_enabled and deps_proguard_disabled:
+        raise Exception('Deps %s have proguard enabled while deps %s have '
+                        'proguard disabled' % (deps_proguard_enabled,
+                                               deps_proguard_disabled))
+      deps_info['sync_proguard_enabled'] = bool(deps_proguard_enabled)
+    else:
+      deps_info['proguard_enabled'] = bool(options.proguard_enabled)
+      if options.proguard_output_jar_path:
+        deps_info['proguard_output_jar_path'] = options.proguard_output_jar_path
 
   # The java code for an instrumentation test apk is assembled differently for
   # ProGuard vs. non-ProGuard.
@@ -1215,7 +1256,7 @@
       # Mutating lists, so no need to explicitly re-assign to dict.
       all_configs.extend(p for p in tested_apk_config['proguard_all_configs']
                          if p not in all_configs)
-      extra_jars.extend(p for p in tested_apk_config['proguard_all_extra_jars']
+      extra_jars.extend(p for p in tested_apk_config['proguard_classpath_jars']
                         if p not in extra_jars)
       tested_apk_config = GetDepConfig(options.tested_apk_config)
       deps_info['proguard_under_test_mapping'] = (
@@ -1258,20 +1299,12 @@
         p for p in deps_dex_files if not p in tested_apk_deps_dex_files]
 
   # Dependencies for the final dex file of an apk.
-  if options.type == 'android_apk':
+  if is_apk_or_module_target:
     config['final_dex'] = {}
     dex_config = config['final_dex']
     dex_config['dependency_dex_files'] = deps_dex_files
     dex_config['path'] = options.final_dex_path
 
-  system_jars = [c['jar_path'] for c in system_library_deps]
-  system_interface_jars = [c['interface_jar_path'] for c in system_library_deps]
-  if system_library_deps:
-    config['android'] = {}
-    config['android']['sdk_interface_jars'] = system_interface_jars
-    config['android']['sdk_jars'] = system_jars
-    gradle['bootclasspath'] = system_jars
-
   if is_java_target:
     config['javac']['bootclasspath'] = system_jars
     config['javac']['classpath'] = javac_classpath
@@ -1285,9 +1318,9 @@
     deps_info['javac_full_classpath'] = javac_full_classpath
     deps_info['javac_full_interface_classpath'] = javac_full_interface_classpath
 
-    if options.type in (
-        'android_apk', 'dist_jar', 'java_binary', 'junit_binary'):
-      deps_info['java_runtime_classpath'] = java_full_classpath
+  if options.type in ('android_apk', 'dist_jar', 'java_binary', 'junit_binary',
+      'android_app_bundle_module', 'android_app_bundle'):
+    deps_info['java_runtime_classpath'] = java_full_classpath
 
   if options.type in ('android_apk', 'dist_jar'):
     all_interface_jars = []
@@ -1299,7 +1332,7 @@
       'all_interface_jars': all_interface_jars,
     }
 
-  if options.type == 'android_apk':
+  if is_apk_or_module_target:
     manifest = AndroidManifest(options.android_manifest)
     deps_info['package_name'] = manifest.GetPackageName()
     if not options.tested_apk_config and manifest.GetInstrumentationElements():
@@ -1324,6 +1357,9 @@
       secondary_abi_java_libraries_list = _CreateJavaLibrariesList(
           secondary_abi_library_paths)
 
+    for gyp_list in options.secondary_native_libs:
+      secondary_abi_library_paths.extend(build_utils.ParseGnList(gyp_list))
+
     extra_shared_libraries = build_utils.ParseGnList(
         options.extra_shared_libraries)
 
diff --git a/build/config/allocator.gni b/build/config/allocator.gni
index 709f80f3..6a144e1b 100644
--- a/build/config/allocator.gni
+++ b/build/config/allocator.gni
@@ -32,6 +32,9 @@
 
   # Partition alloc is included by default except iOS.
   use_partition_alloc = !is_ios
+
+  # Use the new tcmalloc. It's relevant only when use_allocator == "tcmalloc".
+  use_new_tcmalloc = false
 }
 
 if (is_nacl) {
diff --git a/build/config/android/BUILD.gn b/build/config/android/BUILD.gn
index dbf6e4a..5f77c4a 100644
--- a/build/config/android/BUILD.gn
+++ b/build/config/android/BUILD.gn
@@ -81,12 +81,6 @@
         rebase_path("$android_ndk_root/sysroot/usr/include/$abi_target",
                     root_build_dir),
     "-D__ANDROID_API__=$compile_api_level",
-
-    # Temporary workaround for third party dependencies requiring this to be
-    # defined.
-    # TODO(crbug.com/771171): Remove this once the third party deps have been
-    # fixed to be compatible with newer NDK versions
-    "-D__NDK_FPABI__=",
   ]
   ldflags += [ "--target=$abi_target" ]
 
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index bdba74d..345b77c9 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -13,7 +13,8 @@
 assert(is_android)
 
 # These identify targets that have .build_config files (except for android_apk,
-# java_binary, resource_rewriter, since we never need to depend on these).
+# java_binary, resource_rewriter, android_app_bundle since we never need to
+# depend on these).
 _java_target_whitelist = [
   "*:*_java",
   "*:*_javalib",
@@ -30,6 +31,7 @@
   "*:*_resources",
   "*:*_grd",
   "*:*locale_paks",
+  "*_module",
 
   # TODO(agrieve): Rename targets below to match above patterns.
   "*android_webview/glue:glue",
@@ -67,7 +69,8 @@
   # consider them in dependency chains.
   if (_type != "android_apk" && _type != "java_binary" &&
       _type != "resource_rewriter" && _type != "dist_jar" &&
-      _type != "java_annotation_processor" && _type != "dist_aar") {
+      _type != "java_annotation_processor" && _type != "dist_aar" &&
+      _type != "android_app_bundle") {
     set_sources_assignment_filter(_java_target_whitelist)
     _parent_invoker = invoker.invoker
     _target_label =
@@ -306,6 +309,13 @@
       ]
     }
 
+    if (defined(invoker.secondary_abi_loadable_modules) &&
+        invoker.secondary_abi_loadable_modules != []) {
+      _rebased_modules =
+          rebase_path(invoker.secondary_abi_loadable_modules, root_build_dir)
+      args += [ "--secondary-native-libs=$_rebased_modules" ]
+    }
+
     if (defined(invoker.uncompress_shared_libraries) &&
         invoker.uncompress_shared_libraries) {
       args += [ "--uncompress-shared-libraries" ]
@@ -927,7 +937,7 @@
         "--output-path",
         rebase_path(_output_jar_path, root_build_dir),
         "--classpath",
-        "@FileArg($_rebased_build_config:android:sdk_jars)",
+        "@FileArg($_rebased_build_config:deps_info:proguard_classpath_jars)",
       ]
       if (proguard_verbose) {
         args += [ "--verbose" ]
@@ -2084,7 +2094,7 @@
   #   native_libs_filearg: @FileArg() of additionally native libraries.
   #   secondary_abi_native_libs: (optional) List of native libraries for
   #     secondary ABI.
-  #   secondary_abi_native_libs_filearg: (optiona). @FileArg() of additional
+  #   secondary_abi_native_libs_filearg: (optional). @FileArg() of additional
   #     secondary ABI native libs.
   #   write_asset_list: Adds an extra file to the assets, which contains a list of
   #     all other asset files.
@@ -2198,8 +2208,8 @@
         args += [ "--android-abi=$android_app_abi" ]
       }
       if (defined(invoker.secondary_abi_native_libs_filearg) ||
-          (defined(invoker.secondary_native_libs) &&
-           invoker.secondary_native_libs != []) ||
+          (defined(invoker.secondary_abi_loadable_modules) &&
+           invoker.secondary_abi_loadable_modules != []) ||
           _secondary_native_lib_placeholders != []) {
         assert(defined(android_app_secondary_abi))
         args += [ "--secondary-android-abi=$android_app_secondary_abi" ]
@@ -2218,14 +2228,8 @@
         args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ]
       }
 
-      # TODO (michaelbai): Remove the secondary_native_libs variable.
       if (defined(invoker.secondary_abi_native_libs_filearg)) {
         args += [ "--secondary-native-libs=${invoker.secondary_abi_native_libs_filearg}" ]
-      } else if (defined(invoker.secondary_native_libs) &&
-                 invoker.secondary_native_libs != []) {
-        inputs += invoker.secondary_native_libs
-        _secondary_native_libs = rebase_path(invoker.secondary_native_libs)
-        args += [ "--secondary-native-libs=$_secondary_native_libs" ]
       }
 
       if (defined(invoker.uncompress_shared_libraries) &&
@@ -2262,7 +2266,8 @@
       _native_libs = invoker.native_libs
     }
     _native_libs_even_when_incremental = []
-    if (defined(invoker.native_libs_even_when_incremental)) {
+    if (defined(invoker.native_libs_even_when_incremental) &&
+        invoker.native_libs_even_when_incremental != []) {
       _native_libs_even_when_incremental =
           invoker.native_libs_even_when_incremental
     }
@@ -2285,7 +2290,7 @@
                                "packaged_resources_path",
                                "secondary_native_lib_placeholders",
                                "secondary_abi_native_libs_filearg",
-                               "secondary_native_libs",
+                               "secondary_abi_loadable_modules",
                                "uncompress_shared_libraries",
                                "write_asset_list",
                              ])
@@ -2366,7 +2371,7 @@
         forward_variables_from(invoker,
                                [
                                  "assets_build_config",
-                                 "secondary_native_libs",
+                                 "secondary_abi_loadable_modules",
                                  "uncompress_shared_libraries",
                                ])
         if (!defined(uncompress_shared_libraries)) {
@@ -2947,27 +2952,35 @@
                                "proguard_configs",
                                "proguard_enabled",
                                "proguard_output_jar_path",
+                               "secondary_abi_loadable_modules",
                                "type",
                              ])
-      if (type == "android_apk") {
+      if (type == "android_apk" || type == "android_app_bundle_module") {
         forward_variables_from(
             invoker,
             [
               "android_manifest",
               "android_manifest_dep",
-              "apk_path",
-              "apk_under_test",
               "extra_shared_libraries",
               "final_dex_path",
-              "incremental_allowed",
-              "incremental_apk_path",
-              "incremental_install_json_path",
-              "proto_resources_path",
               "secondary_abi_shared_libraries_runtime_deps_file",
               "shared_libraries_runtime_deps_file",
               "uncompress_shared_libraries",
             ])
       }
+      if (type == "android_apk") {
+        forward_variables_from(invoker,
+                               [
+                                 "apk_path",
+                                 "apk_under_test",
+                                 "incremental_allowed",
+                                 "incremental_apk_path",
+                                 "incremental_install_json_path",
+                               ])
+      }
+      if (type == "android_app_bundle_module") {
+        forward_variables_from(invoker, [ "proto_resources_path" ])
+      }
       build_config = _build_config
       is_prebuilt = _is_prebuilt
       possible_config_deps = _accumulated_deps
@@ -3065,7 +3078,8 @@
       }
       if (_lint_enabled) {
         android_lint("${_main_target_name}__lint") {
-          if (invoker.type == "android_apk") {
+          if (invoker.type == "android_apk" ||
+              invoker.type == "android_app_bundle_module") {
             forward_variables_from(invoker, [ "android_manifest" ])
           } else if (defined(_android_manifest_for_lint)) {
             android_manifest = _android_manifest_for_lint
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 6dc0b802..b8b3286 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -1527,7 +1527,6 @@
         args = [
           "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
           "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)",
-          "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)",
         ]
         if (defined(invoker.proguard_config_exclusions)) {
           _rebased_proguard_config_exclusions =
@@ -1868,6 +1867,8 @@
   #         and enable_relocation_packing do not apply
   #     Use this instead of shared_libraries when you are going to load the library
   #     conditionally, and only when shared_libraries doesn't work for you.
+  #   secondary_abi_loadable_modules: This is the loadable_modules analog to
+  #     secondary_abi_shared_libraries.
   #   shared_libraries: List shared_library targets to bundle. If these
   #     libraries depend on other shared_library targets, those dependencies will
   #     also be included in the apk (e.g. for is_component_build).
@@ -1888,8 +1889,6 @@
   #   requires_sdk_api_level_23: If defined and true, the apk is intended for
   #     installation only on Android M or later. In these releases the system
   #     linker does relocation unpacking, so we can enable it unconditionally.
-  #   secondary_native_libs (deprecated): The path of native libraries for secondary
-  #     app abi.
   #   aapt_locale_whitelist: If set, all locales not in this list will be
   #     stripped from resources.arsc.
   #   exclude_xxxhdpi: Causes all drawable-xxxhdpi images to be excluded
@@ -2088,7 +2087,7 @@
       }
     } else {
       # Must exist for instrumentation_test_apk() to depend on.
-      group("${_template_name}__secondary_abi_runtime_deps") {
+      group("${_template_name}__secondary_abi__runtime_deps") {
       }
     }
 
@@ -2312,11 +2311,16 @@
                                "classpath_deps",
                                "emma_never_instrument",
                                "java_files",
-                               "no_build_hooks",
                                "javac_args",
+                               "no_build_hooks",
+                               "secondary_abi_loadable_modules",
                                "uncompress_shared_libraries",
                              ])
-      type = "android_apk"
+      if (_is_bundle_module) {
+        type = "android_app_bundle_module"
+      } else {
+        type = "android_apk"
+      }
       main_target_name = _template_name
       supports_android = true
       requires_android = true
@@ -2326,15 +2330,17 @@
       final_jar_path = _jar_path
       dex_path = _lib_dex_path
       final_dex_path = _final_dex_path
-      apk_path = _final_apk_path
 
       if (_is_bundle_module) {
         proto_resources_path = _packaged_resources_path
       }
 
-      incremental_allowed = _incremental_allowed
-      incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk"
-      incremental_install_json_path = _incremental_install_json_path
+      if (!_is_bundle_module) {
+        apk_path = _final_apk_path
+        incremental_allowed = _incremental_allowed
+        incremental_apk_path = "${_final_apk_path_no_ext}_incremental.apk"
+        incremental_install_json_path = _incremental_install_json_path
+      }
 
       proguard_enabled = _proguard_enabled
       if (_proguard_enabled) {
@@ -2400,7 +2406,6 @@
         args = [
           "--proguard-configs=@FileArg($_rebased_build_config:deps_info:proguard_all_configs)",
           "--input-paths=@FileArg($_rebased_build_config:deps_info:java_runtime_classpath)",
-          "--classpath=@FileArg($_rebased_build_config:deps_info:proguard_all_extra_jars)",
         ]
         if (defined(invoker.proguard_config_exclusions)) {
           _rebased_proguard_config_exclusions =
@@ -2521,7 +2526,6 @@
         forward_variables_from(invoker,
                                [
                                  "public_deps",
-                                 "secondary_native_libs",
                                  "shared_resources",
                                  "uncompress_shared_libraries",
                                  "write_asset_list",
@@ -2797,6 +2801,9 @@
                                "input_jars_paths",
                                "java_files",
                                "javac_args",
+                               "keystore_name",
+                               "keystore_password",
+                               "keystore_path",
                                "load_library_from_apk",
                                "loadable_modules",
                                "native_lib_placeholders",
@@ -2813,9 +2820,9 @@
                                "proguard_enabled",
                                "proguard_jar_path",
                                "requires_sdk_api_level_23",
+                               "secondary_abi_loadable_modules",
                                "secondary_abi_shared_libraries",
                                "secondary_native_lib_placeholders",
-                               "secondary_native_libs",
                                "shared_libraries",
                                "shared_resources",
                                "shared_resources_whitelist_target",
@@ -2891,9 +2898,9 @@
                                "proguard_configs",
                                "proguard_enabled",
                                "requires_sdk_api_level_23",
+                               "secondary_abi_loadable_modules",
                                "secondary_abi_shared_libraries",
                                "secondary_native_lib_placeholders",
-                               "secondary_native_libs",
                                "shared_libraries",
                                "shared_resources",
                                "shared_resources_whitelist_target",
@@ -3083,14 +3090,14 @@
       # symbolization can be done.
       deps = [
         ":${_apk_target_name}__runtime_deps",
-        ":${_apk_target_name}__secondary_abi_runtime_deps",
+        ":${_apk_target_name}__secondary_abi__runtime_deps",
       ]
       if (defined(invoker.apk_under_test)) {
         _under_test_label =
             get_label_info(invoker.apk_under_test, "label_no_toolchain")
         deps += [
           "${_under_test_label}__runtime_deps",
-          "${_under_test_label}__secondary_abi_runtime_deps",
+          "${_under_test_label}__secondary_abi__runtime_deps",
         ]
       }
     }
@@ -3178,7 +3185,7 @@
       shared_libraries = [ invoker.shared_library ]
       deps += [
         ":${target_name}__runtime_deps",
-        ":${target_name}__secondary_abi_runtime_deps",
+        ":${target_name}__secondary_abi__runtime_deps",
         "//base:base_java",
         "//testing/android/reporter:reporter_java",
       ]
@@ -3659,6 +3666,19 @@
       _all_modules += invoker.extra_modules
     }
 
+    # Make build config, which is required for synchronized proguarding.
+    _module_targets = []
+    foreach(_module, _all_modules) {
+      _module_targets += [ _module.module_target ]
+    }
+    _build_config = "$target_gen_dir/${target_name}.build_config"
+    _build_config_target = "${target_name}__build_config"
+    write_build_config(_build_config_target) {
+      type = "android_app_bundle"
+      possible_config_deps = _module_targets
+      build_config = _build_config
+    }
+
     # Generate one module .zip file per APK.
     _all_create_module_targets = []
     _all_module_zip_paths = []
@@ -3757,7 +3777,7 @@
       outputs = [
         _bundle_path,
       ]
-      deps = _all_create_module_targets
+      deps = _all_create_module_targets + [ ":$_build_config_target" ]
       args = [
         "--out-bundle=$_rebased_bundle_path",
         "--module-zips=$_all_rebased_module_zip_paths",
diff --git a/build/fuchsia/boot_data.py b/build/fuchsia/boot_data.py
index e70128c..086b82c 100644
--- a/build/fuchsia/boot_data.py
+++ b/build/fuchsia/boot_data.py
@@ -114,6 +114,9 @@
                sparse/compressed FVM file."""
 
   logging.debug('Building /data partition FVM file.')
+  # minfs expects absolute paths(bug:
+  #   https://fuchsia.atlassian.net/browse/ZX-2397)
+  output_dir = os.path.abspath(output_dir)
   with tempfile.NamedTemporaryFile() as data_file:
     # Build up the minfs partition data and install keys into it.
     ssh_config, ssh_data = _ProvisionSSH(output_dir)
diff --git a/build/fuchsia/sdk.sha1 b/build/fuchsia/sdk.sha1
index 3ab722c2..0a4ff5a 100644
--- a/build/fuchsia/sdk.sha1
+++ b/build/fuchsia/sdk.sha1
@@ -1 +1 @@
-6c386aff8be4b0fd98e393b7778a78fd016eb219
\ No newline at end of file
+3eeb7436852779037db94d7c808a86a96882d7c7
\ No newline at end of file
diff --git a/cc/paint/paint_op_buffer_serializer.cc b/cc/paint/paint_op_buffer_serializer.cc
index cf4c77a92..62b6c1d42 100644
--- a/cc/paint/paint_op_buffer_serializer.cc
+++ b/cc/paint/paint_op_buffer_serializer.cc
@@ -89,8 +89,16 @@
                                            max_texture_size,
                                            max_texture_bytes)) {
   DCHECK(serialize_cb_);
-  canvas_ = SkCreateColorSpaceXformCanvas(&text_blob_canvas_,
-                                          sk_ref_sp<SkColorSpace>(color_space));
+  if (color_space->isSRGB()) {
+    // Colorspace converting every paint is not free.  Only images have a
+    // non-srgb colorspace and this serializer does not handle images.
+    // Therefore, it's correct to just ignore the conversion for srgb.
+    canvas_ = &text_blob_canvas_;
+  } else {
+    color_canvas_ = SkCreateColorSpaceXformCanvas(
+        &text_blob_canvas_, sk_ref_sp<SkColorSpace>(color_space));
+    canvas_ = color_canvas_.get();
+  }
 }
 
 PaintOpBufferSerializer::~PaintOpBufferSerializer() = default;
@@ -107,7 +115,7 @@
   // save / final restore. SerializeBuffer will create its own SerializeOptions
   // and PlaybackParams based on the post-preamble canvas.
   PaintOp::SerializeOptions options = MakeSerializeOptions();
-  PlaybackParams params = MakeParams(canvas_.get());
+  PlaybackParams params = MakeParams(canvas_);
 
   Save(options, params);
   SerializePreamble(preamble, options, params);
@@ -129,7 +137,7 @@
   DCHECK(canvas_->getTotalMatrix().isIdentity());
 
   PaintOp::SerializeOptions options = MakeSerializeOptions();
-  PlaybackParams params = MakeParams(canvas_.get());
+  PlaybackParams params = MakeParams(canvas_);
 
   // TODO(khushalsagar): remove this clip rect if it's not needed.
   if (!playback_rect.IsEmpty()) {
@@ -272,7 +280,7 @@
     const std::vector<size_t>* offsets) {
   DCHECK(buffer);
   PaintOp::SerializeOptions options = MakeSerializeOptions();
-  PlaybackParams params = MakeParams(canvas_.get());
+  PlaybackParams params = MakeParams(canvas_);
 
   for (PaintOpBuffer::PlaybackFoldingIterator iter(buffer, offsets); iter;
        ++iter) {
@@ -281,7 +289,7 @@
     // Skip ops outside the current clip if they have images. This saves
     // performing an unnecessary expensive decode.
     const bool skip_op = PaintOp::OpHasDiscardableImages(op) &&
-                         PaintOp::QuickRejectDraw(op, canvas_.get());
+                         PaintOp::QuickRejectDraw(op, canvas_);
     if (skip_op)
       continue;
 
@@ -352,9 +360,9 @@
 
   if (op->IsPaintOpWithFlags() && options.flags_to_serialize) {
     static_cast<const PaintOpWithFlags*>(op)->RasterWithFlags(
-        canvas_.get(), options.flags_to_serialize, params);
+        canvas_, options.flags_to_serialize, params);
   } else {
-    op->Raster(canvas_.get(), params);
+    op->Raster(canvas_, params);
   }
   return true;
 }
@@ -378,8 +386,8 @@
 
 PaintOp::SerializeOptions PaintOpBufferSerializer::MakeSerializeOptions() {
   return PaintOp::SerializeOptions(
-      image_provider_, transfer_cache_, canvas_.get(), strike_server_,
-      color_space_, can_use_lcd_text_, context_supports_distance_field_text_,
+      image_provider_, transfer_cache_, canvas_, strike_server_, color_space_,
+      can_use_lcd_text_, context_supports_distance_field_text_,
       max_texture_size_, max_texture_bytes_, canvas_->getTotalMatrix());
 }
 
diff --git a/cc/paint/paint_op_buffer_serializer.h b/cc/paint/paint_op_buffer_serializer.h
index 1858e60..b12ba63 100644
--- a/cc/paint/paint_op_buffer_serializer.h
+++ b/cc/paint/paint_op_buffer_serializer.h
@@ -110,7 +110,8 @@
   size_t max_texture_bytes_;
 
   SkTextBlobCacheDiffCanvas text_blob_canvas_;
-  std::unique_ptr<SkCanvas> canvas_;
+  std::unique_ptr<SkCanvas> color_canvas_;
+  SkCanvas* canvas_ = nullptr;
   bool valid_ = true;
 };
 
diff --git a/cc/paint/transfer_cache_unittest.cc b/cc/paint/transfer_cache_unittest.cc
index 9deaf3d0..84f72f3 100644
--- a/cc/paint/transfer_cache_unittest.cc
+++ b/cc/paint/transfer_cache_unittest.cc
@@ -122,7 +122,7 @@
                 decoder_id(), entry.Type(), entry.Id())));
 }
 
-TEST_F(TransferCacheTest, Eviction) {
+TEST_F(TransferCacheTest, MemoryEviction) {
   auto* service_cache = ServiceTransferCache();
   auto* context_support = ContextSupport();
 
@@ -152,6 +152,31 @@
       entry.UnsafeType(), entry.Id()));
 }
 
+TEST_F(TransferCacheTest, CountEviction) {
+  auto* service_cache = ServiceTransferCache();
+  auto* context_support = ContextSupport();
+
+  // Create 10 entries and leave them all unlocked.
+  std::vector<std::unique_ptr<ClientRawMemoryTransferCacheEntry>> entries;
+  for (int i = 0; i < 10; ++i) {
+    entries.emplace_back(std::make_unique<ClientRawMemoryTransferCacheEntry>(
+        std::vector<uint8_t>(4)));
+    CreateEntry(*entries[i]);
+    context_support->UnlockTransferCacheEntries(
+        {{entries[i]->UnsafeType(), entries[i]->Id()}});
+    ri()->Finish();
+  }
+
+  // These entries should be using up space.
+  EXPECT_EQ(service_cache->cache_size_for_testing(), 40u);
+
+  // Evict on the service side.
+  service_cache->SetMaxCacheEntriesForTesting(5);
+
+  // Half the entries should be evicted.
+  EXPECT_EQ(service_cache->cache_size_for_testing(), 20u);
+}
+
 TEST_F(TransferCacheTest, RawMemoryTransfer) {
   auto* service_cache = ServiceTransferCache();
 
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 184fae21..f2be14be 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -36,15 +36,11 @@
       task_runner_(task_runner),
       compositor_timing_history_(std::move(compositor_timing_history)),
       begin_impl_frame_tracker_(BEGINFRAMETRACKER_FROM_HERE),
-      state_machine_(settings),
-      weak_factory_(this) {
+      state_machine_(settings) {
   TRACE_EVENT1("cc", "Scheduler::Scheduler", "settings", settings_.AsValue());
   DCHECK(client_);
   DCHECK(!state_machine_.BeginFrameNeeded());
 
-  begin_impl_frame_deadline_closure_ = base::Bind(
-      &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr());
-
   // We want to handle animate_only BeginFrames.
   wants_animate_only_begin_frames_ = true;
 
@@ -238,30 +234,62 @@
   }
 }
 
-void Scheduler::SetupNextBeginFrameIfNeeded() {
+void Scheduler::StartOrStopBeginFrames() {
   if (state_machine_.begin_impl_frame_state() !=
       SchedulerStateMachine::BeginImplFrameState::IDLE) {
     return;
   }
 
   bool needs_begin_frames = state_machine_.BeginFrameNeeded();
+  if (needs_begin_frames == observing_begin_frame_source_)
+    return;
 
-  if (needs_begin_frames && !observing_begin_frame_source_) {
+  if (needs_begin_frames) {
     observing_begin_frame_source_ = true;
     if (begin_frame_source_)
       begin_frame_source_->AddObserver(this);
     devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_, true);
-  } else if (!needs_begin_frames && observing_begin_frame_source_) {
+  } else {
     observing_begin_frame_source_ = false;
     if (begin_frame_source_)
       begin_frame_source_->RemoveObserver(this);
-    missed_begin_frame_task_.Cancel();
+    // We're going idle so drop pending begin frame.
+    CancelPendingBeginFrameTask();
     BeginImplFrameNotExpectedSoon();
     devtools_instrumentation::NeedsBeginFrameChanged(layer_tree_host_id_,
                                                      false);
   }
 }
 
+void Scheduler::CancelPendingBeginFrameTask() {
+  if (pending_begin_frame_args_.IsValid()) {
+    TRACE_EVENT_INSTANT0("cc", "Scheduler::BeginFrameDropped",
+                         TRACE_EVENT_SCOPE_THREAD);
+    SendBeginFrameAck(pending_begin_frame_args_, kBeginFrameSkipped);
+    // Make pending begin frame invalid so that we don't accidentally use it.
+    pending_begin_frame_args_ = viz::BeginFrameArgs();
+  }
+  pending_begin_frame_task_.Cancel();
+}
+
+void Scheduler::PostPendingBeginFrameTask() {
+  bool is_idle = state_machine_.begin_impl_frame_state() ==
+                 SchedulerStateMachine::BeginImplFrameState::IDLE;
+  bool needs_begin_frames = state_machine_.BeginFrameNeeded();
+  // We only post one pending begin frame task at a time, but we update the args
+  // whenever we get a new begin frame.
+  bool has_pending_begin_frame_args = pending_begin_frame_args_.IsValid();
+  bool has_no_pending_begin_frame_task =
+      pending_begin_frame_task_.IsCancelled();
+
+  if (is_idle && needs_begin_frames && has_pending_begin_frame_args &&
+      has_no_pending_begin_frame_task) {
+    pending_begin_frame_task_.Reset(base::BindOnce(
+        &Scheduler::HandlePendingBeginFrame, base::Unretained(this)));
+    task_runner_->PostTask(FROM_HERE, pending_begin_frame_task_.callback());
+  }
+}
+
 void Scheduler::OnBeginFrameSourcePausedChanged(bool paused) {
   if (state_machine_.begin_frame_source_paused() == paused)
     return;
@@ -298,18 +326,36 @@
     return true;
   }
 
-  if (inside_process_scheduled_actions_) {
-    // The BFS can send a missed begin frame inside AddObserver. We can't handle
-    // a begin frame inside ProcessScheduledActions so post a task.
-    DCHECK_EQ(args.type, viz::BeginFrameArgs::MISSED);
-    DCHECK(missed_begin_frame_task_.IsCancelled());
-    missed_begin_frame_task_.Reset(base::Bind(
-        &Scheduler::BeginImplFrameWithDeadline, base::Unretained(this), args));
-    task_runner_->PostTask(FROM_HERE, missed_begin_frame_task_.callback());
-    return true;
-  }
+  bool inside_previous_begin_frame =
+      state_machine_.begin_impl_frame_state() ==
+      SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME;
 
-  BeginImplFrameWithDeadline(args);
+  if (inside_process_scheduled_actions_ || inside_previous_begin_frame ||
+      pending_begin_frame_args_.IsValid()) {
+    // The BFS can send a begin frame while scheduler is processing previous
+    // frame, or a MISSED begin frame inside the ProcessScheduledActions loop
+    // when AddObserver is called. The BFS (e.g. mojo) may queue up many begin
+    // frame calls, but we only want to process the last one. Saving the args,
+    // and posting a task achieves that.
+    if (pending_begin_frame_args_.IsValid()) {
+      TRACE_EVENT_INSTANT0("cc", "Scheduler::BeginFrameDropped",
+                           TRACE_EVENT_SCOPE_THREAD);
+      SendBeginFrameAck(pending_begin_frame_args_, kBeginFrameSkipped);
+    }
+    pending_begin_frame_args_ = args;
+    // ProcessScheduledActions() will post the previous frame's deadline if it
+    // hasn't run yet, or post the begin frame task if the previous frame's
+    // deadline has already run. If we're already inside
+    // ProcessScheduledActions() this call will be a nop and the above will
+    // happen at end of the top most call to ProcessScheduledActions().
+    ProcessScheduledActions();
+  } else {
+    // This starts the begin frame immediately, and puts us in the
+    // INSIDE_BEGIN_FRAME state, so if the message loop calls a bunch of
+    // BeginFrames immediately after this call, they will be posted as a single
+    // task, and all but the last BeginFrame will be dropped.
+    BeginImplFrameWithDeadline(args);
+  }
   return true;
 }
 
@@ -335,53 +381,46 @@
   state_machine_.SetResourcelessSoftwareDraw(false);
 }
 
+// This is separate from BeginImplFrameWithDeadline() because we only want at
+// most one outstanding task even if |pending_begin_frame_args_| changes.
+void Scheduler::HandlePendingBeginFrame() {
+  DCHECK(pending_begin_frame_args_.IsValid());
+  viz::BeginFrameArgs args = pending_begin_frame_args_;
+  pending_begin_frame_args_ = viz::BeginFrameArgs();
+  pending_begin_frame_task_.Cancel();
+
+  BeginImplFrameWithDeadline(args);
+}
+
 void Scheduler::BeginImplFrameWithDeadline(const viz::BeginFrameArgs& args) {
-  // The storage for |args| is owned by the missed begin frame task. Therefore
-  // save |args| before cancelling the task either here or in the deadline.
-  viz::BeginFrameArgs adjusted_args = args;
-  // Cancel the missed begin frame task in case the BFS sends a begin frame
-  // before the missed frame task runs.
-  missed_begin_frame_task_.Cancel();
+  DCHECK(pending_begin_frame_task_.IsCancelled());
+  DCHECK(!pending_begin_frame_args_.IsValid());
 
-  base::TimeTicks now = Now();
-
-  // Discard missed begin frames if they are too late. In full-pipe mode, we
-  // ignore BeginFrame deadlines.
-  if (adjusted_args.type == viz::BeginFrameArgs::MISSED &&
-      now > adjusted_args.deadline &&
-      !settings_.wait_for_all_pipeline_stages_before_draw) {
-    skipped_last_frame_missed_exceeded_deadline_ = true;
-    SendBeginFrameAck(adjusted_args, kBeginFrameSkipped);
-    return;
-  }
-
-  skipped_last_frame_missed_exceeded_deadline_ = false;
-
-  // Run the previous deadline if any.
-  if (state_machine_.begin_impl_frame_state() ==
-      SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME) {
-    OnBeginImplFrameDeadline();
-    // We may not need begin frames any longer.
-    if (!observing_begin_frame_source_) {
-      // We need to confirm the ignored BeginFrame, since we don't have updates.
-      SendBeginFrameAck(adjusted_args, kBeginFrameSkipped);
-      return;
-    }
-  }
   DCHECK_EQ(state_machine_.begin_impl_frame_state(),
             SchedulerStateMachine::BeginImplFrameState::IDLE);
 
   bool main_thread_is_in_high_latency_mode =
       state_machine_.main_thread_missed_last_deadline();
   TRACE_EVENT2("cc,benchmark", "Scheduler::BeginImplFrame", "args",
-               adjusted_args.AsValue(), "main_thread_missed_last_deadline",
+               args.AsValue(), "main_thread_missed_last_deadline",
                main_thread_is_in_high_latency_mode);
   TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
                  "MainThreadLatency", main_thread_is_in_high_latency_mode);
 
-  DCHECK_EQ(state_machine_.begin_impl_frame_state(),
-            SchedulerStateMachine::BeginImplFrameState::IDLE);
+  base::TimeTicks now = Now();
+  // Discard missed begin frames if they are too late. In full-pipe mode, we
+  // ignore BeginFrame deadlines.
+  if (!settings_.wait_for_all_pipeline_stages_before_draw &&
+      args.type == viz::BeginFrameArgs::MISSED && args.deadline < now) {
+    TRACE_EVENT_INSTANT0("cc", "Scheduler::MissedBeginFrameDropped",
+                         TRACE_EVENT_SCOPE_THREAD);
+    skipped_last_frame_missed_exceeded_deadline_ = true;
+    SendBeginFrameAck(args, kBeginFrameSkipped);
+    return;
+  }
+  skipped_last_frame_missed_exceeded_deadline_ = false;
 
+  viz::BeginFrameArgs adjusted_args = args;
   adjusted_args.deadline -= compositor_timing_history_->DrawDurationEstimate();
   adjusted_args.deadline -= kDeadlineFudgeFactor;
 
@@ -502,15 +541,19 @@
 
 void Scheduler::FinishImplFrame() {
   state_machine_.OnBeginImplFrameIdle();
-  ProcessScheduledActions();
 
+  // Send ack before calling ProcessScheduledActions() because it might send an
+  // ack for any pending begin frame if we are going idle after this. This
+  // ensures that the acks are sent in order.
+  SendBeginFrameAck(begin_main_frame_args_, kBeginFrameFinished);
+  begin_impl_frame_tracker_.Finish();
+
+  ProcessScheduledActions();
   DCHECK(!inside_scheduled_action_);
   {
     base::AutoReset<bool> mark_inside(&inside_scheduled_action_, true);
     client_->DidFinishImplFrame();
   }
-  SendBeginFrameAck(begin_main_frame_args_, kBeginFrameFinished);
-  begin_impl_frame_tracker_.Finish();
 }
 
 void Scheduler::SendBeginFrameAck(const viz::BeginFrameArgs& args,
@@ -562,69 +605,74 @@
 }
 
 void Scheduler::ScheduleBeginImplFrameDeadline() {
-  // The synchronous compositor does not post a deadline task.
-  DCHECK(!settings_.using_synchronous_renderer_compositor);
-
-  begin_impl_frame_deadline_task_.Cancel();
-  begin_impl_frame_deadline_task_.Reset(begin_impl_frame_deadline_closure_);
+  base::TimeTicks new_deadline;
 
   begin_impl_frame_deadline_mode_ =
       state_machine_.CurrentBeginImplFrameDeadlineMode();
+  // Avoid using Now() for immediate deadlines because it's expensive, and this
+  // method is called in every ProcessScheduledActions() call. Using
+  // base::TimeTicks() achieves the same result.
   switch (begin_impl_frame_deadline_mode_) {
     case SchedulerStateMachine::BeginImplFrameDeadlineMode::NONE:
-      // No deadline.
+      // NONE is returned when deadlines aren't used (synchronous compositor),
+      // or when outside a begin frame. In either case deadline task shouldn't
+      // be posted or should be cancelled already.
+      DCHECK(begin_impl_frame_deadline_task_.IsCancelled());
       return;
-    case SchedulerStateMachine::BeginImplFrameDeadlineMode::IMMEDIATE:
-      // We are ready to draw a new active tree immediately.
-      // We don't use Now() here because it's somewhat expensive to call.
-      deadline_ = base::TimeTicks();
+    case SchedulerStateMachine::BeginImplFrameDeadlineMode::BLOCKED: {
+      // TODO(sunnyps): Posting the deadline for pending begin frame is required
+      // for browser compositor (commit_to_active_tree) to make progress in some
+      // cases. Change browser compositor deadline to LATE in state machine to
+      // fix this.
+      //
+      // TODO(sunnyps): Full pipeline mode should always go from blocking
+      // deadline to triggering deadline immediately, but DCHECKing for this
+      // causes layout test failures.
+      bool has_pending_begin_frame = pending_begin_frame_args_.IsValid();
+      if (has_pending_begin_frame) {
+        new_deadline = base::TimeTicks();
+      } else {
+        begin_impl_frame_deadline_task_.Cancel();
+        return;
+      }
+      break;
+    }
+    case SchedulerStateMachine::BeginImplFrameDeadlineMode::LATE:
+      // We are waiting for a commit without needing active tree draw or we have
+      // nothing to do.
+      new_deadline = begin_impl_frame_tracker_.Current().frame_time +
+                     begin_impl_frame_tracker_.Current().interval;
       break;
     case SchedulerStateMachine::BeginImplFrameDeadlineMode::REGULAR:
-      // We are animating on the impl thread but we can wait for some time.
-      deadline_ = begin_impl_frame_tracker_.Current().deadline;
+      // We are animating the active tree but we're also waiting for commit.
+      new_deadline = begin_impl_frame_tracker_.Current().deadline;
       break;
-    case SchedulerStateMachine::BeginImplFrameDeadlineMode::LATE:
-      // We are blocked for one reason or another and we should wait.
-      // TODO(brianderson): Handle long deadlines (that are past the next
-      // frame's frame time) properly instead of using this hack.
-      deadline_ = begin_impl_frame_tracker_.Current().frame_time +
-                  begin_impl_frame_tracker_.Current().interval;
+    case SchedulerStateMachine::BeginImplFrameDeadlineMode::IMMEDIATE:
+      new_deadline = base::TimeTicks();
       break;
-    case SchedulerStateMachine::BeginImplFrameDeadlineMode::BLOCKED:
-      // We are blocked because we are waiting for ReadyToDraw signal. We would
-      // post deadline after we received ReadyToDraw singal.
-      TRACE_EVENT1("cc", "Scheduler::ScheduleBeginImplFrameDeadline",
-                   "deadline_mode", "blocked");
-      return;
   }
 
-  TRACE_EVENT2("cc", "Scheduler::ScheduleBeginImplFrameDeadline", "mode",
-               SchedulerStateMachine::BeginImplFrameDeadlineModeToString(
-                   begin_impl_frame_deadline_mode_),
-               "deadline", deadline_);
+  bool has_no_deadline_task = begin_impl_frame_deadline_task_.IsCancelled();
+  // Post deadline task only if we didn't have one already or something caused
+  // us to change the deadline. Comparing deadline mode is not sufficient
+  // because the calculated deadline also depends on whether we have a pending
+  // begin frame which the state machine doesn't know about.
+  if (has_no_deadline_task || new_deadline != deadline_) {
+    TRACE_EVENT2("cc", "Scheduler::ScheduleBeginImplFrameDeadline",
+                 "new deadline", new_deadline, "deadline mode",
+                 SchedulerStateMachine::BeginImplFrameDeadlineModeToString(
+                     begin_impl_frame_deadline_mode_));
+    deadline_ = new_deadline;
+    deadline_scheduled_at_ = Now();
 
-  deadline_scheduled_at_ = Now();
-  base::TimeDelta delta =
-      std::max(deadline_ - deadline_scheduled_at_, base::TimeDelta());
-  task_runner_->PostDelayedTask(
-      FROM_HERE, begin_impl_frame_deadline_task_.callback(), delta);
-}
+    begin_impl_frame_deadline_task_.Reset(base::BindOnce(
+        &Scheduler::OnBeginImplFrameDeadline, base::Unretained(this)));
 
-void Scheduler::ScheduleBeginImplFrameDeadlineIfNeeded() {
-  if (settings_.using_synchronous_renderer_compositor)
-    return;
-
-  if (state_machine_.begin_impl_frame_state() !=
-      SchedulerStateMachine::BeginImplFrameState::INSIDE_BEGIN_FRAME)
-    return;
-
-  if (begin_impl_frame_deadline_mode_ ==
-          state_machine_.CurrentBeginImplFrameDeadlineMode() &&
-      !begin_impl_frame_deadline_task_.IsCancelled()) {
-    return;
+    base::TimeDelta delay =
+        std::max(deadline_ - deadline_scheduled_at_, base::TimeDelta());
+    task_runner_->PostDelayedTask(
+        FROM_HERE, begin_impl_frame_deadline_task_.callback(), delay);
   }
-
-  ScheduleBeginImplFrameDeadline();
 }
 
 void Scheduler::OnBeginImplFrameDeadline() {
@@ -782,8 +830,10 @@
     }
   } while (action != SchedulerStateMachine::Action::NONE);
 
-  ScheduleBeginImplFrameDeadlineIfNeeded();
-  SetupNextBeginFrameIfNeeded();
+  ScheduleBeginImplFrameDeadline();
+
+  PostPendingBeginFrameTask();
+  StartOrStopBeginFrames();
 }
 
 std::unique_ptr<base::trace_event::ConvertableToTraceFormat>
@@ -804,8 +854,8 @@
                     observing_begin_frame_source_);
   state->SetBoolean("begin_impl_frame_deadline_task",
                     !begin_impl_frame_deadline_task_.IsCancelled());
-  state->SetBoolean("missed_begin_frame_task",
-                    !missed_begin_frame_task_.IsCancelled());
+  state->SetBoolean("pending_begin_frame_task",
+                    !pending_begin_frame_task_.IsCancelled());
   state->SetBoolean("skipped_last_frame_missed_exceeded_deadline",
                     skipped_last_frame_missed_exceeded_deadline_);
   state->SetBoolean("skipped_last_frame_to_reduce_latency",
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index a9926c8..4368060c 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -193,6 +193,7 @@
 
   std::unique_ptr<CompositorTimingHistory> compositor_timing_history_;
 
+  // What the latest deadline was, and when it was scheduled.
   SchedulerStateMachine::BeginImplFrameDeadlineMode
       begin_impl_frame_deadline_mode_ =
           SchedulerStateMachine::BeginImplFrameDeadlineMode::NONE;
@@ -202,9 +203,18 @@
   BeginFrameTracker begin_impl_frame_tracker_;
   viz::BeginFrameArgs begin_main_frame_args_;
 
-  base::Closure begin_impl_frame_deadline_closure_;
-  base::CancelableClosure begin_impl_frame_deadline_task_;
-  base::CancelableClosure missed_begin_frame_task_;
+  // Task posted for the deadline or drawing phase of the scheduler. This task
+  // can be rescheduled e.g. when the condition for the deadline is met, it is
+  // scheduled to run immediately.
+  // NOTE: Scheduler weak ptrs are not necessary if CancelableCallback is used.
+  base::CancelableOnceClosure begin_impl_frame_deadline_task_;
+
+  // This is used for queueing begin frames while scheduler is waiting for
+  // previous frame's deadline, or if it's inside ProcessScheduledActions().
+  // Only one such task is posted at any time, but the args are updated as we
+  // get new begin frames.
+  viz::BeginFrameArgs pending_begin_frame_args_;
+  base::CancelableOnceClosure pending_begin_frame_task_;
 
   SchedulerStateMachine state_machine_;
   bool inside_process_scheduled_actions_ = false;
@@ -215,11 +225,32 @@
   bool stopped_ = false;
 
  private:
+  // Posts the deadline task if needed by checking
+  // SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode(). This only
+  // happens when the scheduler is processing a begin frame
+  // (BeginImplFrameState::INSIDE_BEGIN_FRAME).
   void ScheduleBeginImplFrameDeadline();
-  void ScheduleBeginImplFrameDeadlineIfNeeded();
+
+  // Starts or stops begin frames as needed by checking
+  // SchedulerStateMachine::BeginFrameNeeded(). This only happens when the
+  // scheduler is not processing a begin frame (BeginImplFrameState::IDLE).
+  void StartOrStopBeginFrames();
+
+  // This will only post a task if the args are valid and there's no existing
+  // task. That implies that we're still expecting begin frames. If begin frames
+  // aren't needed this will be a nop. This only happens when the scheduler is
+  // not processing a begin frame (BeginImplFrameState::IDLE).
+  void PostPendingBeginFrameTask();
+
+  // Use |pending_begin_frame_args_| to begin a new frame like it was received
+  // in OnBeginFrameDerivedImpl().
+  void HandlePendingBeginFrame();
+
+  // Used to drop the pending begin frame before we go idle.
+  void CancelPendingBeginFrameTask();
+
   void BeginImplFrameNotExpectedSoon();
   void BeginMainFrameNotExpectedUntil(base::TimeTicks time);
-  void SetupNextBeginFrameIfNeeded();
   void DrawIfPossible();
   void DrawForced();
   void ProcessScheduledActions();
@@ -235,6 +266,7 @@
       base::TimeTicks now) const;
   void AdvanceCommitStateIfPossible();
   bool IsBeginMainFrameSentOrStarted() const;
+
   void BeginImplFrameWithDeadline(const viz::BeginFrameArgs& args);
   void BeginImplFrameSynchronous(const viz::BeginFrameArgs& args);
   void BeginImplFrame(const viz::BeginFrameArgs& args, base::TimeTicks now);
@@ -250,8 +282,6 @@
     return inside_action_ == action;
   }
 
-  base::WeakPtrFactory<Scheduler> weak_factory_;
-
   DISALLOW_COPY_AND_ASSIGN(Scheduler);
 };
 
diff --git a/cc/scheduler/scheduler_state_machine.cc b/cc/scheduler/scheduler_state_machine.cc
index a81baa25..4318206 100644
--- a/cc/scheduler/scheduler_state_machine.cc
+++ b/cc/scheduler/scheduler_state_machine.cc
@@ -1076,12 +1076,18 @@
 
 SchedulerStateMachine::BeginImplFrameDeadlineMode
 SchedulerStateMachine::CurrentBeginImplFrameDeadlineMode() const {
-  if (settings_.using_synchronous_renderer_compositor) {
-    // No deadline for synchronous compositor.
+  const bool outside_begin_frame =
+      begin_impl_frame_state_ != BeginImplFrameState::INSIDE_BEGIN_FRAME;
+  if (settings_.using_synchronous_renderer_compositor || outside_begin_frame) {
+    // No deadline for synchronous compositor, or when outside the begin frame.
     return BeginImplFrameDeadlineMode::NONE;
   } else if (ShouldBlockDeadlineIndefinitely()) {
+    // We do not want to wait for a deadline because we're waiting for full
+    // pipeline to be flushed for headless.
     return BeginImplFrameDeadlineMode::BLOCKED;
   } else if (ShouldTriggerBeginImplFrameDeadlineImmediately()) {
+    // We are ready to draw a new active tree immediately because there's no
+    // commit expected or we're prioritizing active tree latency.
     return BeginImplFrameDeadlineMode::IMMEDIATE;
   } else if (needs_redraw_) {
     // We have an animation or fast input path on the impl thread that wants
@@ -1089,7 +1095,7 @@
     return BeginImplFrameDeadlineMode::REGULAR;
   } else {
     // The impl thread doesn't have anything it wants to draw and we are just
-    // waiting for a new active tree. In short we are blocked.
+    // waiting for a new active tree.
     return BeginImplFrameDeadlineMode::LATE;
   }
 }
diff --git a/cc/scheduler/scheduler_state_machine.h b/cc/scheduler/scheduler_state_machine.h
index cd99614..bc1e83d 100644
--- a/cc/scheduler/scheduler_state_machine.h
+++ b/cc/scheduler/scheduler_state_machine.h
@@ -69,12 +69,18 @@
   };
   static const char* BeginImplFrameStateToString(BeginImplFrameState state);
 
+  // The scheduler uses a deadline to wait for main thread updates before
+  // submitting a compositor frame. BeginImplFrameDeadlineMode specifies when
+  // the deadline should run.
   enum class BeginImplFrameDeadlineMode {
-    NONE,
-    IMMEDIATE,
-    REGULAR,
-    LATE,
-    BLOCKED,
+    NONE,  // No deadline should be scheduled e.g. for synchronous compositor.
+    IMMEDIATE,  // Deadline should be scheduled to run immediately.
+    REGULAR,  // Deadline should be scheduled to run at the deadline provided by
+              // in the BeginFrameArgs.
+    LATE,  // Deadline should be scheduled run when the next frame is expected
+           // to arrive.
+    BLOCKED,  // Deadline should be blocked indefinitely until the next frame
+              // arrives.
   };
   static const char* BeginImplFrameDeadlineModeToString(
       BeginImplFrameDeadlineMode mode);
@@ -168,6 +174,8 @@
   BeginImplFrameState begin_impl_frame_state() const {
     return begin_impl_frame_state_;
   }
+
+  // Returns BeginImplFrameDeadlineMode computed based on current state.
   BeginImplFrameDeadlineMode CurrentBeginImplFrameDeadlineMode() const;
 
   // If the main thread didn't manage to produce a new frame in time for the
@@ -320,13 +328,20 @@
   bool BeginFrameNeededForVideo() const;
   bool ProactiveBeginFrameWanted() const;
 
+  // Indicates if we should post the deadline to draw immediately. This is true
+  // when we aren't expecting a commit or activation, or we're prioritizing
+  // active tree draw (see ImplLatencyTakesPriority()).
+  bool ShouldTriggerBeginImplFrameDeadlineImmediately() const;
+
+  // Indicates if we shouldn't schedule a deadline. Used to defer drawing until
+  // the entire pipeline is flushed and active tree is ready to draw for
+  // headless.
+  bool ShouldBlockDeadlineIndefinitely() const;
+
   bool ShouldPerformImplSideInvalidation() const;
   bool CouldCreatePendingTree() const;
   bool ShouldDeferInvalidatingForMainFrame() const;
 
-  bool ShouldTriggerBeginImplFrameDeadlineImmediately() const;
-  bool ShouldBlockDeadlineIndefinitely() const;
-
   bool ShouldAbortCurrentFrame() const;
 
   bool ShouldBeginLayerTreeFrameSinkCreation() const;
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 4d9c77ad..53dccc0 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -511,6 +511,9 @@
     if (scheduler_->begin_frame_source() ==
         fake_external_begin_frame_source_.get()) {
       EXPECT_TRUE(scheduler_->begin_frames_expected());
+      // Run the deadline first if we're inside the previous frame.
+      if (client_->IsInsideBeginImplFrame())
+        task_runner_->RunPendingTasks();
       SendNextBeginFrame(animate_only);
     } else {
       task_runner_->RunTasksWhile(client_->FrameHasNotAdvancedCallback());
@@ -3678,10 +3681,11 @@
   client_->Reset();
 
   // Send the next BeginFrame before the previous one's deadline was executed.
-  // This should trigger the previous BeginFrame's deadline synchronously,
-  // during which tiles will be prepared. As a result of that, no further
-  // BeginFrames will be needed, and the new BeginFrame should be dropped.
+  // This should post the previous BeginFrame's deadline, during which tiles
+  // will be prepared. As a result of that, no further BeginFrames will be
+  // needed, and the new BeginFrame should be dropped.
   viz::BeginFrameArgs args = SendNextBeginFrame();
+  task_runner_->RunPendingTasks();  // Run posted deadline.
   EXPECT_ACTIONS("ScheduledActionPrepareTiles", "RemoveObserver(this)");
   EXPECT_FALSE(client_->IsInsideBeginImplFrame());
   EXPECT_FALSE(scheduler_->begin_frames_expected());
@@ -3748,6 +3752,7 @@
   task_runner_->AdvanceMockTickClock(viz::BeginFrameArgs::DefaultInterval());
   EXPECT_GT(task_runner_->NowTicks(), args.deadline);
   fake_external_begin_frame_source_->TestOnBeginFrame(args);
+  task_runner_->RunPendingTasks();
 
   EXPECT_NO_ACTION();
   EXPECT_FALSE(client_->IsInsideBeginImplFrame());
diff --git a/cc/tiles/gpu_image_decode_cache.cc b/cc/tiles/gpu_image_decode_cache.cc
index 3ad02f7f..1e6b9de 100644
--- a/cc/tiles/gpu_image_decode_cache.cc
+++ b/cc/tiles/gpu_image_decode_cache.cc
@@ -1526,14 +1526,20 @@
                                               image_data->needs_mips);
     size_t size = image_entry.SerializedSize();
     void* data = context_->ContextSupport()->MapTransferCacheEntry(size);
-    // TODO(piman): handle error (failed to allocate/map shm)
-    DCHECK(data);
-    bool succeeded = image_entry.Serialize(
-        base::make_span(reinterpret_cast<uint8_t*>(data), size));
-    DCHECK(succeeded);
-    context_->ContextSupport()->UnmapAndCreateTransferCacheEntry(
-        image_entry.UnsafeType(), image_entry.Id());
-    image_data->upload.SetTransferCacheId(image_entry.Id());
+    if (data) {
+      bool succeeded = image_entry.Serialize(
+          base::make_span(reinterpret_cast<uint8_t*>(data), size));
+      DCHECK(succeeded);
+      context_->ContextSupport()->UnmapAndCreateTransferCacheEntry(
+          image_entry.UnsafeType(), image_entry.Id());
+      image_data->upload.SetTransferCacheId(image_entry.Id());
+    } else {
+      // Transfer cache entry can fail due to a lost gpu context or failure
+      // to allocate shared memory.  Handle this gracefully.  Mark this
+      // image as "decode failed" so that we do not try to handle it again.
+      // If this was a lost context, we'll recreate this image decode cache.
+      image_data->decode.decode_failure = true;
+    }
 
     return;
   }
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 9722a751..20a662a4 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -4583,10 +4583,10 @@
   scroll_info->page_scale_delta =
       active_tree_->page_scale_factor()->PullDeltaForMainThread();
   // We should never process non-unit page_scale_delta for an OOPIF subframe.
-  // TODO(wjmaclean): Remove this check as a pre-condition to closing the bug.
+  // TODO(wjmaclean): Remove this DCHECK as a pre-condition to closing the bug.
   // https://crbug.com/845097
-  CHECK(!settings().is_layer_tree_for_subframe ||
-        scroll_info->page_scale_delta == 1.f);
+  DCHECK(!settings().is_layer_tree_for_subframe ||
+         scroll_info->page_scale_delta == 1.f);
   scroll_info->top_controls_delta =
       active_tree()->top_controls_shown_ratio()->PullDeltaForMainThread();
   scroll_info->elastic_overscroll_delta =
diff --git a/chrome/android/chrome_public_apk_tmpl.gni b/chrome/android/chrome_public_apk_tmpl.gni
index dbd56473f..6aea38e 100644
--- a/chrome/android/chrome_public_apk_tmpl.gni
+++ b/chrome/android/chrome_public_apk_tmpl.gni
@@ -210,10 +210,20 @@
       deps += [ "//third_party/arcore-android-sdk:libdynamite_client_java" ]
     }
     if (package_arcore) {
-      deps += [ "//third_party/arcore-android-sdk:libarcore_library" ]
-
       # We store this as a separate .so in the APK and only load as needed.
-      loadable_modules = [ "${root_out_dir}/libarcore_sdk_c_minimal.so" ]
+      if (android_64bit_target_cpu && build_apk_secondary_abi) {
+        deps += [
+          "//third_party/arcore-android-sdk:libarcore_library_secondary_abi",
+        ]
+        toolchain_out_dir = get_label_info(
+                "//third_party/arcore-android-sdk:libarcore_library($android_secondary_abi_toolchain)",
+                "root_out_dir")
+        secondary_abi_loadable_modules =
+            [ "${toolchain_out_dir}/libarcore_sdk_c_minimal.so" ]
+      } else {
+        deps += [ "//third_party/arcore-android-sdk:libarcore_library" ]
+        loadable_modules = [ "${root_out_dir}/libarcore_sdk_c_minimal.so" ]
+      }
     }
   }
 }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
index 956af52..cd74a3b 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPage.java
@@ -15,7 +15,6 @@
 
 import com.google.android.libraries.feed.api.scope.FeedProcessScope;
 import com.google.android.libraries.feed.api.scope.FeedStreamScope;
-import com.google.android.libraries.feed.api.stream.ScrollListener;
 import com.google.android.libraries.feed.api.stream.Stream;
 import com.google.android.libraries.feed.host.stream.CardConfiguration;
 import com.google.android.libraries.feed.host.stream.SnackbarApi;
@@ -34,6 +33,8 @@
 import org.chromium.chrome.browser.ntp.snippets.SectionHeaderView;
 import org.chromium.chrome.browser.profiles.Profile;
 import org.chromium.chrome.browser.search_engines.TemplateUrlService;
+import org.chromium.chrome.browser.snackbar.Snackbar;
+import org.chromium.chrome.browser.snackbar.SnackbarManager;
 import org.chromium.chrome.browser.suggestions.SuggestionsNavigationDelegateImpl;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
@@ -45,22 +46,22 @@
 /**
  * Provides a new tab page that displays an interest feed rendered list of content suggestions.
  */
-public class FeedNewTabPage
-        extends NewTabPage implements TouchEnabledDelegate, NewTabPageLayout.ScrollDelegate {
+public class FeedNewTabPage extends NewTabPage implements TouchEnabledDelegate {
     private final FeedNewTabPageMediator mMediator;
     private final StreamLifecycleManager mStreamLifecycleManager;
     private final Stream mStream;
-    private final ScrollListener mStreamScrollListener;
-    private final SnapScrollHelper mSnapScrollHelper;
 
     private FrameLayout mRootView;
     private SectionHeaderView mSectionHeaderView;
     private FeedImageLoader mImageLoader;
 
-    private static class DummySnackbarApi implements SnackbarApi {
-        // TODO: implement snackbar functionality.
+    private class BasicSnackbarApi implements SnackbarApi {
         @Override
-        public void show(String message) {}
+        public void show(String message) {
+            mNewTabPageManager.getSnackbarManager().showSnackbar(
+                    Snackbar.make(message, new SnackbarManager.SnackbarController() {},
+                            Snackbar.TYPE_ACTION, Snackbar.UMA_FEED_NTP_STREAM));
+        }
     }
 
     private static class BasicStreamConfiguration implements StreamConfiguration {
@@ -147,49 +148,19 @@
                                 new FeedActionHandler(navigationDelegate),
                                 new BasicStreamConfiguration(activity.getResources()),
                                 new BasicCardConfiguration(activity.getResources()),
-                                new DummySnackbarApi())
+                                new BasicSnackbarApi())
                         .build();
 
         mStream = streamScope.getStream();
         mStreamLifecycleManager = new StreamLifecycleManager(mStream, activity, tab);
-        mSnapScrollHelper =
-                new SnapScrollHelper(mNewTabPageManager, mNewTabPageLayout, mStream.getView());
-        mSectionHeaderView = (SectionHeaderView) LayoutInflater.from(activity).inflate(
+
+        LayoutInflater inflater = LayoutInflater.from(activity);
+        mNewTabPageLayout = (NewTabPageLayout) inflater.inflate(R.layout.new_tab_page_layout, null);
+        mSectionHeaderView = (SectionHeaderView) inflater.inflate(
                 R.layout.new_tab_page_snippets_expandable_header, null);
-        mMediator = new FeedNewTabPageMediator(this);
 
-        mStream.getView().setBackgroundColor(Color.WHITE);
-        mRootView.addView(mStream.getView());
-
-        mStream.setHeaderViews(Arrays.asList(mNewTabPageLayout, mSectionHeaderView));
-
-        // Listen for layout changes on the NewTabPageView itself to catch changes in scroll
-        // position that are due to layout changes after e.g. device rotation. This contrasts with
-        // regular scrolling, which is observed through an OnScrollListener.
-        mRootView.addOnLayoutChangeListener(
-                (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
-                    mSnapScrollHelper.handleScroll();
-                });
-
-        mStreamScrollListener = new ScrollListener() {
-            @Override
-            public void onScrollStateChanged(int state) {}
-
-            @Override
-            public void onScrolled(int dx, int dy) {
-                mSnapScrollHelper.handleScroll();
-            }
-        };
-        mStream.addScrollListener(mStreamScrollListener);
-    }
-
-    @Override
-    protected void initializeMainView(Context context) {
-        int topPadding = context.getResources().getDimensionPixelOffset(R.dimen.tab_strip_height);
-        mRootView = new FrameLayout(context);
-        mRootView.setLayoutParams(new FrameLayout.LayoutParams(
-                FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
-        mRootView.setPadding(0, topPadding, 0, 0);
+        mMediator = new FeedNewTabPageMediator(this,
+                new SnapScrollHelper(mNewTabPageManager, mNewTabPageLayout, mStream.getView()));
 
         // Don't store a direct reference to the activity, because it might change later if the tab
         // is reparented.
@@ -200,19 +171,30 @@
                         this::setTouchEnabled, closeContextMenuCallback);
         mTab.getWindowAndroid().addContextMenuCloseListener(contextMenuManager);
 
-        LayoutInflater inflater = LayoutInflater.from(context);
-        mNewTabPageLayout = (NewTabPageLayout) inflater.inflate(R.layout.new_tab_page_layout, null);
         mNewTabPageLayout.initialize(mNewTabPageManager, mTab, mTileGroupDelegate,
                 mSearchProviderHasLogo,
-                TemplateUrlService.getInstance().isDefaultSearchEngineGoogle(), this,
+                TemplateUrlService.getInstance().isDefaultSearchEngineGoogle(), mMediator,
                 contextMenuManager, new UiConfig(mRootView));
+
+        mStream.getView().setBackgroundColor(Color.WHITE);
+        mRootView.addView(mStream.getView());
+
+        mStream.setHeaderViews(Arrays.asList(mNewTabPageLayout, mSectionHeaderView));
+    }
+
+    @Override
+    protected void initializeMainView(Context context) {
+        int topPadding = context.getResources().getDimensionPixelOffset(R.dimen.tab_strip_height);
+        mRootView = new FrameLayout(context);
+        mRootView.setLayoutParams(new FrameLayout.LayoutParams(
+                FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
+        mRootView.setPadding(0, topPadding, 0, 0);
     }
 
     @Override
     public void destroy() {
         super.destroy();
         mMediator.destroy();
-        mStream.removeScrollListener(mStreamScrollListener);
         mImageLoader.destroy();
         mStreamLifecycleManager.destroy();
     }
@@ -261,40 +243,4 @@
     public void setTouchEnabled(boolean enabled) {
         // TODO(twellington): implement this method.
     }
-
-    // ScrollDelegate interface.
-
-    @Override
-    public boolean isScrollViewInitialized() {
-        // During startup the view may not be fully initialized, so we check to see if some basic
-        // view properties (height of the RecyclerView) are sane.
-        return mStream != null && mStream.getView().getHeight() > 0;
-    }
-
-    @Override
-    public int getVerticalScrollOffset() {
-        // This method returns a valid vertical scroll offset only when the first header view in the
-        // Stream is visible. In all other cases, this returns 0.
-        if (!isScrollViewInitialized()) return 0;
-
-        int firstChildTop = mStream.getChildTopAt(0);
-        return firstChildTop != Stream.POSITION_NOT_KNOWN ? -firstChildTop : 0;
-    }
-
-    @Override
-    public boolean isChildVisibleAtPosition(int position) {
-        return isScrollViewInitialized() && mStream.isChildAtPositionVisible(position);
-    }
-
-    @Override
-    public void snapScroll() {
-        if (!isScrollViewInitialized()) return;
-
-        int initialScroll = getVerticalScrollOffset();
-        int scrollTo = mSnapScrollHelper.calculateSnapPosition(initialScroll);
-
-        // Calculating the snap position should be idempotent.
-        assert scrollTo == mSnapScrollHelper.calculateSnapPosition(scrollTo);
-        mStream.smoothScrollBy(0, scrollTo - initialScroll);
-    }
 }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
index 41887ab..07bd352f 100644
--- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
+++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedNewTabPageMediator.java
@@ -6,7 +6,12 @@
 
 import android.content.res.Resources;
 
+import com.google.android.libraries.feed.api.stream.ScrollListener;
+import com.google.android.libraries.feed.api.stream.Stream;
+
 import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ntp.NewTabPageLayout;
+import org.chromium.chrome.browser.ntp.SnapScrollHelper;
 import org.chromium.chrome.browser.ntp.snippets.SectionHeader;
 import org.chromium.chrome.browser.preferences.Pref;
 import org.chromium.chrome.browser.preferences.PrefChangeRegistrar;
@@ -16,17 +21,20 @@
  * A mediator for the {@link FeedNewTabPage} responsible for interacting with the
  * native library and handling business logic.
  */
-class FeedNewTabPageMediator {
+class FeedNewTabPageMediator implements NewTabPageLayout.ScrollDelegate {
     private final FeedNewTabPage mCoordinator;
+    private final SnapScrollHelper mSnapScrollHelper;
     private final PrefChangeRegistrar mPrefChangeRegistrar;
 
+    private ScrollListener mStreamScrollListener;
     private SectionHeader mSectionHeader;
 
     /**
      * @param feedNewTabPage The {@link FeedNewTabPage} that interacts with this class.
      */
-    FeedNewTabPageMediator(FeedNewTabPage feedNewTabPage) {
+    FeedNewTabPageMediator(FeedNewTabPage feedNewTabPage, SnapScrollHelper snapScrollHelper) {
         mCoordinator = feedNewTabPage;
+        mSnapScrollHelper = snapScrollHelper;
         initializeProperties();
 
         mPrefChangeRegistrar = new PrefChangeRegistrar();
@@ -36,6 +44,7 @@
 
     /** Clears any dependencies. */
     void destroy() {
+        mCoordinator.getStream().removeScrollListener(mStreamScrollListener);
         mPrefChangeRegistrar.destroy();
     }
 
@@ -44,6 +53,25 @@
      * TODO(huayinz): Introduce a Model for these properties.
      */
     private void initializeProperties() {
+        // Listen for layout changes on the NewTabPageView itself to catch changes in scroll
+        // position that are due to layout changes after e.g. device rotation. This contrasts with
+        // regular scrolling, which is observed through an OnScrollListener.
+        mCoordinator.getView().addOnLayoutChangeListener(
+                (v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
+                    mSnapScrollHelper.handleScroll();
+                });
+
+        mStreamScrollListener = new ScrollListener() {
+            @Override
+            public void onScrollStateChanged(int state) {}
+
+            @Override
+            public void onScrolled(int dx, int dy) {
+                mSnapScrollHelper.handleScroll();
+            }
+        };
+        mCoordinator.getStream().addScrollListener(mStreamScrollListener);
+
         Resources res = mCoordinator.getSectionHeaderView().getResources();
         mSectionHeader =
                 new SectionHeader(res.getString(R.string.ntp_article_suggestions_section_header),
@@ -72,4 +100,42 @@
         // TODO(huayinz): Update the section header view through a ModelChangeProcessor.
         mCoordinator.getSectionHeaderView().updateIconDrawable();
     }
+
+    // ScrollDelegate interface.
+
+    @Override
+    public boolean isScrollViewInitialized() {
+        Stream stream = mCoordinator.getStream();
+        // During startup the view may not be fully initialized, so we check to see if some basic
+        // view properties (height of the RecyclerView) are sane.
+        return stream != null && stream.getView().getHeight() > 0;
+    }
+
+    @Override
+    public int getVerticalScrollOffset() {
+        // This method returns a valid vertical scroll offset only when the first header view in the
+        // Stream is visible. In all other cases, this returns 0.
+        if (!isScrollViewInitialized()) return 0;
+
+        int firstChildTop = mCoordinator.getStream().getChildTopAt(0);
+        return firstChildTop != Stream.POSITION_NOT_KNOWN ? -firstChildTop : 0;
+    }
+
+    @Override
+    public boolean isChildVisibleAtPosition(int position) {
+        return isScrollViewInitialized()
+                && mCoordinator.getStream().isChildAtPositionVisible(position);
+    }
+
+    @Override
+    public void snapScroll() {
+        if (!isScrollViewInitialized()) return;
+
+        int initialScroll = getVerticalScrollOffset();
+        int scrollTo = mSnapScrollHelper.calculateSnapPosition(initialScroll);
+
+        // Calculating the snap position should be idempotent.
+        assert scrollTo == mSnapScrollHelper.calculateSnapPosition(scrollTo);
+        mCoordinator.getStream().smoothScrollBy(0, scrollTo - initialScroll);
+    }
 }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
index f522883..1256ecc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeFeatureList.java
@@ -217,6 +217,7 @@
     public static final String HOME_PAGE_BUTTON_FORCE_ENABLED = "HomePageButtonForceEnabled";
     public static final String HOMEPAGE_TILE = "HomepageTile";
     public static final String HORIZONTAL_TAB_SWITCHER_ANDROID = "HorizontalTabSwitcherAndroid";
+    public static final String INCOGNITO_STRINGS = "IncognitoStrings";
     public static final String INTEREST_FEED_CONTENT_SUGGESTIONS = "InterestFeedContentSuggestions";
     public static final String LANGUAGES_PREFERENCE = "LanguagesPreference";
     public static final String SEARCH_ENGINE_PROMO_EXISTING_DEVICE =
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
index 06b0fb8..389ef57 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchManager.java
@@ -237,7 +237,7 @@
         mSelectionController = new ContextualSearchSelectionController(activity, this);
         mNetworkCommunicator = this;
         mPolicy = new ContextualSearchPolicy(mSelectionController, mNetworkCommunicator);
-        mTranslateController = new ContextualSearchTranslateController(activity, mPolicy, this);
+        mTranslateController = new ContextualSearchTranslateController(mPolicy, this);
         mInternalStateController = new ContextualSearchInternalStateController(
                 mPolicy, getContextualSearchInternalStateHandler());
         mTapSuppressionRankerLogger = new ContextualSearchRankerLoggerImpl();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTranslateController.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTranslateController.java
index 18a6a973b..faba8f4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTranslateController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTranslateController.java
@@ -8,7 +8,7 @@
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
-import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.base.ContextUtils;
 import org.chromium.ui.UiUtils;
 
 import java.util.ArrayList;
@@ -23,7 +23,6 @@
 public class ContextualSearchTranslateController  {
     private static final int LOCALE_MIN_LENGTH = 2;
 
-    private final ChromeActivity mActivity;
     private final ContextualSearchPolicy mPolicy;
     private final ContextualSearchTranslateInterface mHost;
 
@@ -31,9 +30,8 @@
     private String mTranslateServiceTargetLanguage;
     private String mAcceptLanguages;
 
-    ContextualSearchTranslateController(ChromeActivity activity, ContextualSearchPolicy policy,
-            ContextualSearchTranslateInterface hostInterface) {
-        mActivity = activity;
+    ContextualSearchTranslateController(
+            ContextualSearchPolicy policy, ContextualSearchTranslateInterface hostInterface) {
         mPolicy = policy;
         mHost = hostInterface;
     }
@@ -140,7 +138,7 @@
             uniqueLanguages.add(trimLocaleToLanguage(primaryLanguage));
         }
         // Merge in the IME locales, if possible.
-        Context context = mActivity.getApplicationContext();
+        Context context = ContextUtils.getApplicationContext();
         if (context != null) {
             for (String locale : UiUtils.getIMELocales(context)) {
                 if (isValidLocale(locale)) uniqueLanguages.add(trimLocaleToLanguage(locale));
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaLauncherActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaLauncherActivity.java
index 4aa82382..90061a4 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaLauncherActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaLauncherActivity.java
@@ -8,14 +8,35 @@
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.annotation.IntDef;
 
+import org.chromium.base.metrics.CachedMetrics;
 import org.chromium.chrome.browser.util.IntentUtils;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * The MediaLauncherActivity handles media-viewing Intents from other apps. It takes the given
  * content:// URI from the Intent and properly routes it to a media-viewing CustomTabActivity.
  */
 public class MediaLauncherActivity extends Activity {
+    // UMA histogram values for media types the user can open.
+    // Keep in sync with MediaLauncherActivityMediaType enum in enums.xml.
+    @IntDef({MediaType.AUDIO, MediaType.IMAGE, MediaType.VIDEO})
+    @Retention(RetentionPolicy.SOURCE)
+    @interface MediaType {
+        int AUDIO = 0;
+        int IMAGE = 1;
+        int VIDEO = 2;
+        int UNKNOWN = 3;
+        int NUM_ENTRIES = 4;
+    }
+
+    private static CachedMetrics.EnumeratedHistogramSample sMediaTypeHistogram =
+            new CachedMetrics.EnumeratedHistogramSample(
+                    "MediaLauncherActivity.MediaType", MediaType.NUM_ENTRIES);
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -23,8 +44,11 @@
         Intent input = IntentUtils.sanitizeIntent(getIntent());
         Uri contentUri = input.getData();
         String mimeType = getContentResolver().getType(contentUri);
+        int mediaType = MediaViewerUtils.getMediaTypeFromMIMEType(mimeType);
 
-        if (!MediaViewerUtils.isMediaMIMEType(mimeType)) {
+        sMediaTypeHistogram.record(mediaType);
+
+        if (mediaType == MediaType.UNKNOWN) {
             // With our intent-filter, we should only receive implicit intents with media MIME
             // types. If we receive a non-media MIME type, it is likely a malicious explicit intent,
             // so we should not proceed.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java
index 1d68236..fabbc97 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/media/MediaViewerUtils.java
@@ -148,18 +148,26 @@
     }
 
     /**
-     * Checks whether a given MIME type is a valid media MIME type.
+     * Determines the media type from the given MIME type.
      * @param mimeType The MIME type to check.
-     * @return Whether the MIME type is a valid media MIME type.
+     * @return MediaLauncherActivity.MediaType enum value for determined media type.
      */
-    public static boolean isMediaMIMEType(String mimeType) {
-        if (TextUtils.isEmpty(mimeType)) return false;
+    static int getMediaTypeFromMIMEType(String mimeType) {
+        if (TextUtils.isEmpty(mimeType)) return MediaLauncherActivity.MediaType.UNKNOWN;
 
         String[] pieces = mimeType.toLowerCase(Locale.getDefault()).split("/");
-        if (pieces.length != 2) return false;
+        if (pieces.length != 2) return MediaLauncherActivity.MediaType.UNKNOWN;
 
-        return (MIMETYPE_AUDIO.equals(pieces[0]) || MIMETYPE_IMAGE.equals(pieces[0])
-                || MIMETYPE_VIDEO.equals(pieces[0]));
+        switch (pieces[0]) {
+            case MIMETYPE_AUDIO:
+                return MediaLauncherActivity.MediaType.AUDIO;
+            case MIMETYPE_IMAGE:
+                return MediaLauncherActivity.MediaType.IMAGE;
+            case MIMETYPE_VIDEO:
+                return MediaLauncherActivity.MediaType.VIDEO;
+            default:
+                return MediaLauncherActivity.MediaType.UNKNOWN;
+        }
     }
 
     /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
index 2c067997..06382b1 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/LocationBarLayout.java
@@ -20,6 +20,7 @@
 import android.provider.Settings;
 import android.support.annotation.DrawableRes;
 import android.support.annotation.IntDef;
+import android.support.annotation.Nullable;
 import android.support.v4.view.MarginLayoutParamsCompat;
 import android.support.v7.content.res.AppCompatResources;
 import android.text.Editable;
@@ -1935,13 +1936,21 @@
         updateSecurityIcon();
     }
 
-    @Override
-    public Tab getCurrentTab() {
+    /** @return The current active {@link Tab}. */
+    @Nullable
+    private Tab getCurrentTab() {
         if (mToolbarDataProvider == null) return null;
         return mToolbarDataProvider.getTab();
     }
 
     @Override
+    public View getViewForUrlBackFocus() {
+        Tab tab = getCurrentTab();
+        if (tab == null) return null;
+        return tab.getView();
+    }
+
+    @Override
     public boolean allowKeyboardLearning() {
         if (mToolbarDataProvider == null) return false;
         return !mToolbarDataProvider.isIncognito();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
index 3c2fb308..dd988aa 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/UrlBar.java
@@ -40,7 +40,6 @@
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.WindowDelegate;
 import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer.UrlEmphasisSpan;
-import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.toolbar.ToolbarManager;
 import org.chromium.ui.UiUtils;
 
@@ -164,10 +163,10 @@
      */
     public interface UrlBarDelegate {
         /**
-         * @return The current active {@link Tab}. May be null.
+         * @return The view to be focused on a backward focus traversal.
          */
         @Nullable
-        Tab getCurrentTab();
+        View getViewForUrlBackFocus();
 
         /**
          * @return Whether the keyboard should be allowed to learn from the user input.
@@ -396,9 +395,8 @@
 
     @Override
     public View focusSearch(int direction) {
-        if (direction == View.FOCUS_BACKWARD && mUrlBarDelegate.getCurrentTab() != null
-                && mUrlBarDelegate.getCurrentTab().getView() != null) {
-            return mUrlBarDelegate.getCurrentTab().getView();
+        if (direction == View.FOCUS_BACKWARD && mUrlBarDelegate.getViewForUrlBackFocus() != null) {
+            return mUrlBarDelegate.getViewForUrlBackFocus();
         } else {
             return super.focusSearch(direction);
         }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java
index 39bd7b9..707dd20d 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/snackbar/Snackbar.java
@@ -63,6 +63,7 @@
     public static final int UMA_SNIPPET_FETCH_NO_NEW_SUGGESTIONS = 23;
     public static final int UMA_MISSING_FILES_NO_SD_CARD = 24;
     public static final int UMA_OFFLINE_INDICATOR = 25;
+    public static final int UMA_FEED_NTP_STREAM = 26;
 
     private SnackbarController mController;
     private CharSequence mText;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
index 82bca637..ce4e642 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java
@@ -19,6 +19,7 @@
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
+import android.support.annotation.Nullable;
 import android.support.v4.text.BidiFormatter;
 import android.support.v4.view.MarginLayoutParamsCompat;
 import android.text.SpannableString;
@@ -265,12 +266,20 @@
         return 0;
     }
 
-    @Override
-    public Tab getCurrentTab() {
+    /** @return The current active {@link Tab}. */
+    @Nullable
+    private Tab getCurrentTab() {
         return getToolbarDataProvider().getTab();
     }
 
     @Override
+    public View getViewForUrlBackFocus() {
+        Tab tab = getCurrentTab();
+        if (tab == null) return null;
+        return tab.getView();
+    }
+
+    @Override
     public boolean allowKeyboardLearning() {
         return !super.isIncognito();
     }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
index 8eb6aa9..ca4bf862 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
@@ -39,6 +39,7 @@
     private static final String TAG = "WebApkInfo";
 
     private Icon mBadgeIcon;
+    private Icon mSplashIcon;
     private String mApkPackageName;
     private int mShellApkVersion;
     private String mManifestUrl;
@@ -145,9 +146,12 @@
         int badgeIconId = IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.BADGE_ICON_ID, 0);
         Bitmap badgeIcon = decodeBitmapFromDrawable(res, badgeIconId);
 
+        int splashIconId = IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.SPLASH_ID, 0);
+        Bitmap splashIcon = decodeBitmapFromDrawable(res, splashIconId);
+
         return create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope,
-                new Icon(primaryIcon), new Icon(badgeIcon), name, shortName, displayMode,
-                orientation, source, themeColor, backgroundColor, webApkPackageName,
+                new Icon(primaryIcon), new Icon(badgeIcon), new Icon(splashIcon), name, shortName,
+                displayMode, orientation, source, themeColor, backgroundColor, webApkPackageName,
                 shellApkVersion, manifestUrl, manifestStartUrl, iconUrlToMurmur2HashMap,
                 forceNavigation);
     }
@@ -160,6 +164,7 @@
      * @param scope                   Scope for the WebAPK.
      * @param primaryIcon             Primary icon to show for the WebAPK.
      * @param badgeIcon               Badge icon to use for notifications.
+     * @param splashIcon              Splash icon to use for the splash screen.
      * @param name                    Name of the WebAPK.
      * @param shortName               The short name of the WebAPK.
      * @param displayMode             Display mode of the WebAPK.
@@ -179,9 +184,9 @@
      *                                WebAPK is already open.
      */
     public static WebApkInfo create(String id, String url, String scope, Icon primaryIcon,
-            Icon badgeIcon, String name, String shortName, @WebDisplayMode int displayMode,
-            int orientation, int source, long themeColor, long backgroundColor,
-            String webApkPackageName, int shellApkVersion, String manifestUrl,
+            Icon badgeIcon, Icon splashIcon, String name, String shortName,
+            @WebDisplayMode int displayMode, int orientation, int source, long themeColor,
+            long backgroundColor, String webApkPackageName, int shellApkVersion, String manifestUrl,
             String manifestStartUrl, Map<String, String> iconUrlToMurmur2HashMap,
             boolean forceNavigation) {
         if (id == null || url == null || manifestStartUrl == null || webApkPackageName == null) {
@@ -198,21 +203,23 @@
             scope = ShortcutHelper.getScopeFromUrl(manifestStartUrl);
         }
 
-        return new WebApkInfo(id, url, scope, primaryIcon, badgeIcon, name, shortName, displayMode,
-                orientation, source, themeColor, backgroundColor, webApkPackageName,
+        return new WebApkInfo(id, url, scope, primaryIcon, badgeIcon, splashIcon, name, shortName,
+                displayMode, orientation, source, themeColor, backgroundColor, webApkPackageName,
                 shellApkVersion, manifestUrl, manifestStartUrl, iconUrlToMurmur2HashMap,
                 forceNavigation);
     }
 
     protected WebApkInfo(String id, String url, String scope, Icon primaryIcon, Icon badgeIcon,
-            String name, String shortName, @WebDisplayMode int displayMode, int orientation,
-            int source, long themeColor, long backgroundColor, String webApkPackageName,
-            int shellApkVersion, String manifestUrl, String manifestStartUrl,
-            Map<String, String> iconUrlToMurmur2HashMap, boolean forceNavigation) {
+            Icon splashIcon, String name, String shortName, @WebDisplayMode int displayMode,
+            int orientation, int source, long themeColor, long backgroundColor,
+            String webApkPackageName, int shellApkVersion, String manifestUrl,
+            String manifestStartUrl, Map<String, String> iconUrlToMurmur2HashMap,
+            boolean forceNavigation) {
         super(id, url, scope, primaryIcon, name, shortName, displayMode, orientation, source,
                 themeColor, backgroundColor, null /* splash_screen_url */,
                 false /* isIconGenerated */, forceNavigation);
         mBadgeIcon = badgeIcon;
+        mSplashIcon = splashIcon;
         mApkPackageName = webApkPackageName;
         mShellApkVersion = shellApkVersion;
         mManifestUrl = manifestUrl;
@@ -229,6 +236,13 @@
         return (mBadgeIcon == null) ? null : mBadgeIcon.decoded();
     }
 
+    /**
+     * Returns the splash icon in Bitmap form.
+     */
+    public Bitmap splashIcon() {
+        return (mSplashIcon == null) ? null : mSplashIcon.decoded();
+    }
+
     @Override
     public String apkPackageName() {
         return mApkPackageName;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcher.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcher.java
index 886cf30..1dfa492 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcher.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcher.java
@@ -112,10 +112,11 @@
         }
 
         WebApkInfo info = WebApkInfo.create(mOldInfo.id(), mOldInfo.uri().toString(), scopeUrl,
-                new WebApkInfo.Icon(primaryIconBitmap), new WebApkInfo.Icon(badgeIconBitmap), name,
-                shortName, displayMode, orientation, mOldInfo.source(), themeColor, backgroundColor,
-                mOldInfo.apkPackageName(), mOldInfo.shellApkVersion(), mOldInfo.manifestUrl(),
-                manifestStartUrl, iconUrlToMurmur2HashMap, mOldInfo.shouldForceNavigation());
+                new WebApkInfo.Icon(primaryIconBitmap), new WebApkInfo.Icon(badgeIconBitmap), null,
+                name, shortName, displayMode, orientation, mOldInfo.source(), themeColor,
+                backgroundColor, mOldInfo.apkPackageName(), mOldInfo.shellApkVersion(),
+                mOldInfo.manifestUrl(), manifestStartUrl, iconUrlToMurmur2HashMap,
+                mOldInfo.shouldForceNavigation());
         mObserver.onGotManifestData(info, primaryIconUrl, badgeIconUrl);
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappSplashScreenController.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappSplashScreenController.java
index 7e1f1349..dcc1504 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappSplashScreenController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappSplashScreenController.java
@@ -96,6 +96,11 @@
                         ? WebappUma.SplashScreenColorStatus.CUSTOM
                         : WebappUma.SplashScreenColorStatus.DEFAULT);
 
+        if (activityType == WebappActivity.ActivityType.WEBAPK) {
+            initializeLayout(webappInfo, backgroundColor, ((WebApkInfo) webappInfo).splashIcon());
+            return;
+        }
+
         WebappDataStorage storage =
                 WebappRegistry.getInstance().getWebappDataStorage(webappInfo.id());
         if (storage == null) {
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
index 424e54766..2a2352fa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">ቀጣይ</translation>
 <translation id="1204037785786432551">የማውረጃ አገናኝ</translation>
 <translation id="1206892813135768548">የአገናኝ ጽሑፍ ቅዳ</translation>
+<translation id="1208340532756947324">በመላ መሣሪያዎች ላይ ለማሳመር እና ግላዊነትን ለማላበስ ስምረትን ያብሩ</translation>
 <translation id="1209206284964581585">ለአሁን ደብቅ</translation>
 <translation id="123724288017357924">የተሸጎጠ ይዘትን ችላ በማለት የአሁኑን ገጽ ዳግም ጫን</translation>
 <translation id="124116460088058876">ተጨማሪ ቋንቋዎች</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">አስስ</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> መጣመር ይፈልጋል</translation>
 <translation id="1994173015038366702">የጣቢያ ዩአርኤል</translation>
+<translation id="2002537628803770967">Google Payን የሚጠቀሙ ክሬዲት ካርዶች እና አድራሻዎች</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> ኪባ ሌሎች መተግበሪያዎች</translation>
 <translation id="2017836877785168846">በአድራሻ አሞሌው ውስጥ ታሪክን እና ራስ-ሰር ማጠናቀቆችን ያጸዳል።</translation>
 <translation id="2021896219286479412">የሙሉ ማያ ገጽ ጣቢያ መቆጣጠሪያዎች</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> ሰከንዶች ይቀራሉ</translation>
 <translation id="2781151931089541271">1 ሰከንድ ይቀራል</translation>
 <translation id="2810645512293415242">ውሂብን ለመቆጠብ እና በበለጠ ፍጥነት ለመጫን የተቃለለ ገጽ።</translation>
+<translation id="2818669890320396765">የእርስዎን ዕልባቶች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት በመለያ ይግቡና ስምረትን ያብሩ</translation>
 <translation id="2836148919159985482">ከሙሉ ማያ ገጽ ለመውጣት የተመለስ አዝራሩን ይንኩ።</translation>
 <translation id="2842985007712546952">ወላጅ አቃፊ</translation>
 <translation id="2870560284913253234">ጣቢያ</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">የራስዎን ታሪክ ይፈልጉ</translation>
 <translation id="3552151358455404883">Chrome ስምረትን እና ግላዊነት ማለበስን በ<ph name="BEGIN_LINK1" />ቅንብሮች<ph name="END_LINK1" /> ውስጥ ያቀናብሩ</translation>
 <translation id="3557336313807607643">ወደ እውቂያዎች አክል</translation>
+<translation id="3568688522516854065">ትሮችዎን ከሌሎች መሣሪያዎችዎ ለማግኘት በመለያ ይግቡ እና ስምረትን ያብሩ</translation>
 <translation id="3587482841069643663">ሁሉም</translation>
 <translation id="3590487821116122040">Chrome አላስፈላጊ ነው የሚያስበው የጣቢያ ማከማቻ (ለምሳሌ፦ ምንም የተቀመጡ ቅንብሮች የሌላቸው ጣቢያዎች ወይም እርስዎ ብዙ ጊዜ የማይጎበኟቸው)</translation>
 <translation id="3599863153486145794">ታሪክን በመለያ ከገቡ ሁሉም መሣሪያዎች ላይ ያጸዳል። የእርስዎ Google መለያ <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> ላይ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖረው ይችላል</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">ቅንብሮችዎን በቀጣዩ ማያ ገጽ ላይ ይገምግሙ</translation>
 <translation id="4195643157523330669">በአዲስ ትር ክፈት</translation>
 <translation id="4198423547019359126">ምንም የማውረጃ አካባቢዎች የሉም</translation>
+<translation id="4209895695669353772">በGoogle የተጠቆመ ግላዊነት የተላበሰ ይዘትን ለማግኘት ስምረትን ያብሩ</translation>
 <translation id="4226663524361240545">ማሳወቂያዎች መሣሪያውን እንዲነዝር ሊያደርጉት ይችላሉ</translation>
 <translation id="4242533952199664413">ቅንብሮችን ክፈት</translation>
 <translation id="424864128008805179">ከChrome ተዘግቶ ይወጣ?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> ላይ ዕልባት ተደርጓል</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> በ<ph name="PRODUCT_NAME" /> ውስጥ ወርዷል</translation>
 <translation id="4468959413250150279">በአንድ የተወሰነ ጣቢያ ላይ ድምጸ-ከል አድርግ።</translation>
+<translation id="4472118726404937099">በመላ መሣሪያዎች ላይ ለማሳመር እና ግላዊነትን ለማላበስ በመለያ ይግቡ እና ስምረትን ያብሩ</translation>
 <translation id="4479647676395637221">ጣቢያዎች ካሜራዎን እንዲጠቀሙ ከመፍቀድዎ በፊት ይጠይቅ (የሚመከር)</translation>
 <translation id="4487967297491345095">ሁሉንም የChrome መተግበሪያ ውሂብ እስከመጨረሻው ይሰረዛል። ይሄ ሁሉንም ፋይሎች፣ ቅንብሮች፣ መለያዎች፣ የውሂብ ጎታዎች፣ ወዘተ. ያካትታል።</translation>
 <translation id="4508440807153586353">የእርስዎን የይለፍ ሐረግ ያለው ሰው ብቻ ነው የተመሰጠረ ውሂብዎን ማየት የሚችለው። የይለፍ ሐረጉ ለGoogle አይላክም ወይም አይከማችም። የይለፍ ሐረግዎን ከረሱት ስምረትን ዳግም ማስጀመር ይኖርብዎታል። <ph name="BEGIN_LINK" />የበለጠ ለመረዳት<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">የተመረጠው ውሂብ ከChrome እና የሰመሩ መሣሪያዎችዎ ተወግዷል።
 
 የእርስዎ Google መለያ በ<ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ላይ እንደ ፍለጋዎች እና የሌሎች Google አገልግሎቶች እንቅስቃሴ ያሉ ሌሎች የአሰሳ ታሪክ ዓይነቶች ሊኖሩት ይችላል።</translation>
-<translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> ላይ የተቀመጡ የይለፍ ቃሎችን ይመልከቱ እና ያስተዳድሩ</translation>
 <translation id="4532845899244822526">አቃፊ ይምረጡ</translation>
 <translation id="4550003330909367850">የይለፍ ቃልዎን ቅጂ እዚህ ለመመልከት በዚህ መሣሪያ ላይ የማያ ገጽ ቁልፍን ያቀናብሩ።</translation>
 <translation id="4558311620361989323">የድረ-ገጽ አቋራጮች</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">ከ30 ቀናት በላይ የቆየ</translation>
 <translation id="5858741533101922242">Chrome የብሉቱዝ አስማሚውን ማብራት አልቻለም</translation>
 <translation id="5860033963881614850">አጥፋ</translation>
+<translation id="5862731021271217234">ትሮችዎን ከሌሎች መሣሪያዎችዎ ለማግኘት ስምረትን ያብሩ</translation>
 <translation id="5864174910718532887">ዝርዝሮች፦ በጣቢያ ስም የተለየ</translation>
 <translation id="5864419784173784555">ሌላ ውርድን በመጠበቅ ላይ…</translation>
 <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">የአሰሳ ፓነሉ ተዘግቷል</translation>
 <translation id="8103578431304235997">ማንነት የማያሳውቅ ትር</translation>
 <translation id="8105951947646329362">ተዛማጅ ገጾችን ይጠቁሙ</translation>
+<translation id="8109613176066109935">የእርስዎን ዕልባቶች በሁሉም መሣሪያዎችዎ ላይ ለማግኘት ስምረትን ያብሩ</translation>
 <translation id="8116925261070264013">ድምፀ ከል ተደርጓል</translation>
 <translation id="813082847718468539">የጣቢያ መረጃን ይመልከቱ</translation>
 <translation id="8168435359814927499">ይዘት</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">አርትዕ</translation>
 <translation id="9070377983101773829">የድምጽ ፍለጋን ጀምር</translation>
 <translation id="9071742570345586758">የምናባዊ እውነታ ይዘትን ለመመልከት የGoogle ቪአር አገልግሎቶችን ይጫኑ</translation>
+<translation id="9074336505530349563">በGoogle የተጠቆመ ግላዊነት የተላበሰ ይዘትን ለማግኘት በመለያ ይግቡ እና ስምረትን ያብሩ</translation>
 <translation id="9086455579313502267">አውታረ መረቡን መድረስ አልተቻለም።</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> ኪባ ወርዷል</translation>
 <translation id="9100505651305367705">የሚደገፍ ሲሆን ጽሑፎችን በተቃለለ እይታ ለማሳየት ጠይቅ</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
index 8711ab8..40b00af1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -409,7 +409,6 @@
 <translation id="4521489764227272523">‏تمت إزالة البيانات المُحددة من متصفح Chrome والأجهزة التي تمت مزامنتها.
 
 قد يحتوي حسابك على Google على نماذج أخرى لسجل التصفح، مثل عمليات البحث والأنشطة من خدمات Google الأخرى في <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">‏عرض كلمات المرور المحفوظة وإدارتها في <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">اختيار مجلد</translation>
 <translation id="4550003330909367850">عيّن قفل الشاشة على هذا الجهاز لعرض كلمة المرور أو نسخها هنا.</translation>
 <translation id="4558311620361989323">اختصارات صفحة الويب</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
index 39fb6ea..6bfe9787 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Напред</translation>
 <translation id="1204037785786432551">Изтегляне на връзката</translation>
 <translation id="1206892813135768548">Копиране на текста на връзката</translation>
+<translation id="1208340532756947324">Включете синхронизирането, за да се възползвате от синхронизиране и персонализиране на всички устройства</translation>
 <translation id="1209206284964581585">Скриване засега</translation>
 <translation id="123724288017357924">Презареждане на страницата (кешът се пренебрегва)</translation>
 <translation id="124116460088058876">Още езици</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Сърфиране</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> иска да се сдвои</translation>
 <translation id="1994173015038366702">URL адрес на сайт</translation>
+<translation id="2002537628803770967">Кредитни карти и адреси посредством Google Pay</translation>
 <translation id="200815880754187296">Други приложения: <ph name="KILOBYTES" /> КБ</translation>
 <translation id="2017836877785168846">Изчиства историята и автоматичните довършвания в адресната лента.</translation>
 <translation id="2021896219286479412">Контроли за сайтове на цял екран</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Остават <ph name="SECONDS" /> сек</translation>
 <translation id="2781151931089541271">Остава 1 сек</translation>
 <translation id="2810645512293415242">Страницата е опростена с цел пестене на данни и по-бързо зареждане.</translation>
+<translation id="2818669890320396765">Влезте в профила си и включете синхронизирането, за да получите отметките си на всичките си устройства</translation>
 <translation id="2836148919159985482">Докоснете бутона за връщане назад, за да излезете от режима на цял екран.</translation>
 <translation id="2842985007712546952">Основна папка</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Търсене в историята ви</translation>
 <translation id="3552151358455404883">Управлявайте синхронизирането в Chrome и персонализирането от <ph name="BEGIN_LINK1" />настройките<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Добавяне към контактите</translation>
+<translation id="3568688522516854065">Влезте в профила си и включете синхронизирането, за да получите разделите си от другите си устройства</translation>
 <translation id="3587482841069643663">Всички</translation>
 <translation id="3590487821116122040">Съхранявани данни от сайтове, които Chrome не счита за важни (напр. рядко посещавани или сайтове без запазени настройки)</translation>
 <translation id="3599863153486145794">Изчиства историята от всички устройства, на които сте влезли в профила си в Google. В него може да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Прегледайте настройките си на следващия екран</translation>
 <translation id="4195643157523330669">Отваряне в нов раздел</translation>
 <translation id="4198423547019359126">Няма местоположения за изтегляне</translation>
+<translation id="4209895695669353772">Включете синхронизирането, за да получавате персонализирано съдържание, предлагано от Google</translation>
 <translation id="4226663524361240545">Възможно е устройството да вибрира при известия</translation>
 <translation id="4242533952199664413">Отваряне на настройките</translation>
 <translation id="424864128008805179">Искате ли да излезете от Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Отметката бе запазена в/ъв „<ph name="FOLDER_NAME" />“</translation>
 <translation id="4453340223357552416">Файлът „<ph name="FILE_NAME" />“ бе изтеглен в/ъв <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Спиране на звука за конкретен сайт.</translation>
+<translation id="4472118726404937099">Влезте в профила си и включете синхронизирането, за да се възползвате от синхронизиране и персонализиране на всички устройства</translation>
 <translation id="4479647676395637221">Извеждане на запитване, преди да се разреши на сайтовете да използват камерата (препоръчително)</translation>
 <translation id="4487967297491345095">Всички данни на приложението Chrome ще се изтрият за постоянно. Това включва всички файлове, настройки, профили, бази от данни и др.</translation>
 <translation id="4508440807153586353">Само някой с пропуска ви може да прочете шифрованите ви данни – той не се изпраща до Google, нито се съхранява от нас. Ако го забравите или искате да промените тази настройка, ще се наложи да нулирате синхронизирането. <ph name="BEGIN_LINK" />Научете повече<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Избраните данни са премахнати от Chrome и синхронизираните ви устройства.
 
 Възможно е в профила ви в Google да има други видове история на сърфиране, съхранявани на адрес <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> – например търсения и активност от други наши услуги.</translation>
-<translation id="4526249700380860531">Преглед и управление на запазените пароли на адрес <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Избиране на папка</translation>
 <translation id="4550003330909367850">За да видите или копирате паролата си тук, задайте опция за заключване на екрана на това устройство.</translation>
 <translation id="4558311620361989323">Комбинации за уеб страници</translation>
@@ -586,6 +591,7 @@
 <translation id="5854790677617711513">По-стари от 30 дни</translation>
 <translation id="5858741533101922242">Chrome не може да включи адаптера за Bluetooth</translation>
 <translation id="5860033963881614850">Изключено</translation>
+<translation id="5862731021271217234">Включете синхронизирането, за да получите разделите си от другите си устройства</translation>
 <translation id="5864174910718532887">Подробности: сортирани по име на сайта</translation>
 <translation id="5864419784173784555">Изчаква се друго изтегляне…</translation>
 <translation id="5869522115854928033">Запазени пароли</translation>
@@ -864,6 +870,7 @@
 <translation id="8100932616285851614">Затворихте панела за навигация</translation>
 <translation id="8103578431304235997">Раздел в режим „инкогнито“</translation>
 <translation id="8105951947646329362">Предложения за сродни страници</translation>
+<translation id="8109613176066109935">Включете синхронизирането, за да получите отметките си на всичките си устройства</translation>
 <translation id="8116925261070264013">Заглушени</translation>
 <translation id="813082847718468539">Преглед на информацията за сайта</translation>
 <translation id="8168435359814927499">Съдържание</translation>
@@ -968,6 +975,7 @@
 <translation id="9065203028668620118">Редактиране</translation>
 <translation id="9070377983101773829">Стартиране на гласово търсене</translation>
 <translation id="9071742570345586758">За да гледате съдържанието за виртуална реалност, инсталирайте съответните услуги на Google</translation>
+<translation id="9074336505530349563">Влезте в профила си и включете синхронизирането, за да получавате персонализирано съдържание, предлагано от Google</translation>
 <translation id="9086455579313502267">Няма достъп до мрежата</translation>
 <translation id="9099018167121903954">Изтеглени файлове: <ph name="KILOBYTES" /> КБ</translation>
 <translation id="9100505651305367705">Извеждане на предложение статиите да се показват в опростен изглед, когато се поддържа</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
index ff9c61c..82b5b94 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Següent</translation>
 <translation id="1204037785786432551">Baixa l'enllaç</translation>
 <translation id="1206892813135768548">Copia el text de l'enllaç</translation>
+<translation id="1208340532756947324">Per sincronitzar i personalitzar el contingut en tots els dispositius, activa la sincronització</translation>
 <translation id="1209206284964581585">Amaga per ara</translation>
 <translation id="123724288017357924">Carrega pàgina actual; ignora contingut en memòria</translation>
 <translation id="124116460088058876">Més idiomes</translation>
@@ -68,7 +69,7 @@
 <translation id="1506061864768559482">Motor de cerca</translation>
 <translation id="1513352483775369820">Adreces interès i historial web</translation>
 <translation id="1513858653616922153">Suprimeix la contrasenya</translation>
-<translation id="1516229014686355813">La funció Tocar per cercar envia la paraula seleccionada i la pàgina actual com a context a la Cerca de Google. La pots desactivar a <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation>
+<translation id="1516229014686355813">La funció Toca per cercar envia la paraula seleccionada i la pàgina actual com a context a la Cerca de Google. La pots desactivar a <ph name="BEGIN_LINK" />Configuració<ph name="END_LINK" />.</translation>
 <translation id="1539064842193522527">Enllaç obert a Chrome</translation>
 <translation id="1549000191223877751">Mou a l'altra finestra</translation>
 <translation id="1553358976309200471">Actualitza Chrome</translation>
@@ -129,12 +130,13 @@
 <translation id="1989112275319619282">Examina</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> es vol vincular</translation>
 <translation id="1994173015038366702">URL del lloc</translation>
+<translation id="2002537628803770967">Targetes de crèdit i adreces amb Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kB en altres aplicacions</translation>
 <translation id="2017836877785168846">Esborra l'historial i les complecions automàtiques a la barra d'adreces.</translation>
 <translation id="2021896219286479412">Controls de pantalla completa</translation>
 <translation id="2038563949887743358">Activa Mostra com a ordinador</translation>
 <translation id="2045104531052923016"><ph name="GIGABYTES" /> GB en altres aplicacions</translation>
-<translation id="2063713494490388661">Tocar per cercar</translation>
+<translation id="2063713494490388661">Toca per cercar</translation>
 <translation id="2079545284768500474">Desfés</translation>
 <translation id="2082238445998314030">Resultat <ph name="RESULT_NUMBER" /> de <ph name="TOTAL_RESULTS" /></translation>
 <translation id="2086652334978798447">Inicia la sessió a Chrome perquè Google et suggereixi contingut personalitzat</translation>
@@ -158,7 +160,7 @@
 <translation id="2206488550163399966"><ph name="APP_NAME" />, aplicació web. <ph name="APP_URL" /></translation>
 <translation id="2227444325776770048">Continua com a <ph name="USER_FULL_NAME" /></translation>
 <translation id="2232379019872353004">Envia a Google algunes dades del sistema i contingut de les pàgines</translation>
-<translation id="2234876718134438132">Sincronitz. i serveis de Google</translation>
+<translation id="2234876718134438132">Sincronització i serveis de Google</translation>
 <translation id="2259659629660284697">Exporta les contrasenyes…</translation>
 <translation id="2268044343513325586">Restringeix</translation>
 <translation id="2286841657746966508">Adreça de facturació</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Queden <ph name="SECONDS" /> segons</translation>
 <translation id="2781151931089541271">Queda 1 segon</translation>
 <translation id="2810645512293415242">La pàgina s'ha simplificat per estalviar dades i carregar-se més ràpidament.</translation>
+<translation id="2818669890320396765">Per accedir a les adreces d'interès des de tots els dispositius, inicia la sessió i activa la sincronització</translation>
 <translation id="2836148919159985482">Toqueu el botó Enrere per sortir de la pantalla completa.</translation>
 <translation id="2842985007712546952">Carpeta principal</translation>
 <translation id="2870560284913253234">Lloc</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Cerca el teu historial.</translation>
 <translation id="3552151358455404883">Gestiona Sincronització de Chrome i la personalització a <ph name="BEGIN_LINK1" />Configuració<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Afegeix als contactes</translation>
+<translation id="3568688522516854065">Per accedir a les teves pestanyes des dels altres dispositius que tinguis, inicia la sessió i activa la sincronització</translation>
 <translation id="3587482841069643663">Tots</translation>
 <translation id="3590487821116122040">Emmagatzematge del lloc web que Chrome no considera important (com ara els llocs web sense configuració desada o aquells que no visiteu sovint)</translation>
 <translation id="3599863153486145794">Esborra l'historial de tots els dispositius en què tinguis iniciada la sessió. A <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />, trobaràs altres maneres d'explorar l'historial del teu compte de Google.</translation>
@@ -351,7 +355,7 @@
 <translation id="4034817413553209278">{HOURS,plural, =1{# h}other{# h}}</translation>
 <translation id="4042870126885713738">Mostra suggeriments quan no es resol una adreça web o quan no es pot establir una connexió</translation>
 <translation id="4046123991198612571">Pista següent</translation>
-<translation id="4048707525896921369">Obtén informació sobre temes dels llocs web sense sortir de la pàgina. La funció Tocar per cercar envia una paraula i el context que l'envolta a la Cerca de Google i torna definicions, imatges, resultats de la cerca i altres detalls.
+<translation id="4048707525896921369">Obtén informació sobre temes dels llocs web sense sortir de la pàgina. La funció Toca per cercar envia una paraula i el context que l'envolta a la Cerca de Google i torna definicions, imatges, resultats de la cerca i altres detalls.
 
 Per ajustar el terme de cerca, mantén-lo premut per seleccionar-lo. Per definir millor la cerca, fes lliscar el tauler cap amunt tot el que puguis i toca el quadre de cerca.</translation>
 <translation id="4056223980640387499">Sèpia</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Revisa la configuració a la pantalla següent</translation>
 <translation id="4195643157523330669">Obre en una pestanya nova</translation>
 <translation id="4198423547019359126">No hi ha cap ubicació de baixada disponible</translation>
+<translation id="4209895695669353772">Perquè Google et suggereixi contingut personalitzat, activa la sincronització</translation>
 <translation id="4226663524361240545">És possible que les notificacions facin vibrar el dispositiu</translation>
 <translation id="4242533952199664413">Obre la configuració</translation>
 <translation id="424864128008805179">Voleu tancar la sessió de Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Adreça d'interès afegida a <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> s'ha baixat a <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Silencia el so d'un lloc web concret.</translation>
+<translation id="4472118726404937099">Per sincronitzar i personalitzar el contingut en tots els dispositius, inicia la sessió i activa la sincronització</translation>
 <translation id="4479647676395637221">Pregunta abans de permetre que els llocs utilitzin la meva càmera (opció recomanada)</translation>
 <translation id="4487967297491345095">Totes les dades de les aplicacions de Chrome, com ara els fitxers, la configuració, els comptes o les bases de dades, entre d'altres, se suprimiran permanentment.</translation>
 <translation id="4508440807153586353">Només els usuaris que sàpiguen la vostra frase de contrasenya poden llegir les dades que encripteu. La frase de contrasenya no s'envia a Google, i Google tampoc no l'emmagatzema. Si l'oblideu o voleu canviar aquesta configuració, heu de restablir la sincronització. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Les dades seleccionades s'han suprimit de Chrome i dels dispositius sincronitzats.
 
 És possible que el teu compte de Google tingui altres formes de l'historial de navegació, com ara les cerques i l'activitat d'altres serveis de Google a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Consulta i gestiona les contrasenyes desades a <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Trieu la carpeta</translation>
 <translation id="4550003330909367850">Per veure o copiar la contrasenya aquí, configura el bloqueig de pantalla en aquest dispositiu.</translation>
 <translation id="4558311620361989323">Dreceres per a pàgines web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Anterior a 30 dies</translation>
 <translation id="5858741533101922242">Chrome no pot activar l'adaptador Bluetooth</translation>
 <translation id="5860033963881614850">Desactivat</translation>
+<translation id="5862731021271217234">Per accedir a les teves pestanyes des dels altres dispositius que tinguis, activa la sincronització</translation>
 <translation id="5864174910718532887">Detalls: files ordenades per nom del lloc web</translation>
 <translation id="5864419784173784555">S'està esperant que finalitzi una altra baixada…</translation>
 <translation id="5869522115854928033">Contrasenyes desades</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">S'ha tancat el tauler de navegació</translation>
 <translation id="8103578431304235997">Pestanya d'incògnit</translation>
 <translation id="8105951947646329362">Suggereix pàgines relacionades</translation>
+<translation id="8109613176066109935">Per accedir a les adreces d'interès des de tots els dispositius, activa la sincronització</translation>
 <translation id="8116925261070264013">Silenciats</translation>
 <translation id="813082847718468539">Mostra la informació del lloc</translation>
 <translation id="8168435359814927499">Contingut</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Edita</translation>
 <translation id="9070377983101773829">Inicia la cerca per veu</translation>
 <translation id="9071742570345586758">Per veure contingut en realitat virtual, instal·la els Serveis RV de Google</translation>
+<translation id="9074336505530349563">Perquè Google et suggereixi contingut personalitzat, inicia la sessió i activa la sincronització</translation>
 <translation id="9086455579313502267">No es pot accedir a la xarxa</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> kB en baixades</translation>
 <translation id="9100505651305367705">Proposa mostrar articles en visualització simplificada, quan s'admeti</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
index 116b1843..6dd9c059 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Další</translation>
 <translation id="1204037785786432551">Stáhnout odkaz</translation>
 <translation id="1206892813135768548">Zkopírovat text odkazu</translation>
+<translation id="1208340532756947324">Chcete-li synchronizovat a přizpůsobit různá zařízení, zapněte synchronizaci</translation>
 <translation id="1209206284964581585">Prozatím skrýt</translation>
 <translation id="123724288017357924">Obnovit stránku a ignorovat obsah v mezipaměti</translation>
 <translation id="124116460088058876">Další jazyky</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Procházet</translation>
 <translation id="1993768208584545658">Web <ph name="SITE" /> žádá o spárování</translation>
 <translation id="1994173015038366702">Adresa URL webu</translation>
+<translation id="2002537628803770967">Platební karty a adresy pomocí služby Google Pay</translation>
 <translation id="200815880754187296">Ostatní aplikace: <ph name="KILOBYTES" /> kB</translation>
 <translation id="2017836877785168846">Vymaže historii a automatická dokončení v adresním řádku.</translation>
 <translation id="2021896219286479412">Ovládání webu na celé obrazovce</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Zbývá: <ph name="SECONDS" /> s</translation>
 <translation id="2781151931089541271">Zbývá: 1 s</translation>
 <translation id="2810645512293415242">Stránka byla zjednodušena s cílem ušetřit data a zrychlit načtení.</translation>
+<translation id="2818669890320396765">Chcete-li mít záložky ve všech zařízeních, přihlaste se a zapněte synchronizaci</translation>
 <translation id="2836148919159985482">Režim celé obrazovky ukončíte klepnutím na tlačítko Zpět.</translation>
 <translation id="2842985007712546952">Nadřazená složka</translation>
 <translation id="2870560284913253234">Stránky</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Prohledávat historii</translation>
 <translation id="3552151358455404883">Synchronizaci a přizpůsobení Chromu můžete spravovat v <ph name="BEGIN_LINK1" />Nastavení<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Přidat do kontaktů</translation>
+<translation id="3568688522516854065">Chcete-li získat přístup ke kartám ze svých ostatních zařízení, zapněte synchronizaci</translation>
 <translation id="3587482841069643663">Vše</translation>
 <translation id="3590487821116122040">Úložiště webů, které Chrome považuje za nedůležité (např. weby bez uložených nastavení nebo weby, které nenavštěvujete často)</translation>
 <translation id="3599863153486145794">Vymaže historii ze všech zařízení, na kterých jste přihlášeni. Na stránce <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Na další obrazovce zkontrolujte svá nastavení</translation>
 <translation id="4195643157523330669">Otevřít na nové kartě</translation>
 <translation id="4198423547019359126">Nejsou k dispozici žádná umístění stažených souborů</translation>
+<translation id="4209895695669353772">Chcete-li od Googlu získat personalizované návrhy obsahu, zapněte synchronizaci</translation>
 <translation id="4226663524361240545">Oznámení mohou aktivovat vibraci</translation>
 <translation id="4242533952199664413">Otevřít Nastavení</translation>
 <translation id="424864128008805179">Odhlásit se z Chromu?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Záložka přidána do složky <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Soubor <ph name="FILE_NAME" /> byl stažen v prohlížeči <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Vypne zvuk na konkrétním webu.</translation>
+<translation id="4472118726404937099">Chcete-li synchronizovat a přizpůsobit různá zařízení, přihlaste se a zapněte synchronizaci</translation>
 <translation id="4479647676395637221">Pokud web bude chtít použít vaši kameru, zobrazit dotaz (doporučeno)</translation>
 <translation id="4487967297491345095">Všechna data aplikace Chrome budou trvale smazána. Zahrnuje to soubory, nastavení, účty, databáze apod.</translation>
 <translation id="4508440807153586353">Vaše šifrovaná data mohou číst pouze uživatelé, kteří mají vaši heslovou frázi. Heslová fráze se neodesílá do Googlu a není na Googlu uložena. Pokud heslovou frázi zapomenete nebo toto nastavení budete chtít změnit, bude synchronizaci potřeba resetovat. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Vybraná data byla z Chromu a synchronizovaných zařízení odstraněna.
 
 Na stránce <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> mohou být k dispozici další druhy historie prohlížení zaznamenané ve vašem účtu Google, například vyhledávací dotazy a aktivita z ostatních služeb Google.</translation>
-<translation id="4526249700380860531">Uložená hesla můžete zobrazit a upravit na adrese <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Výběr složky</translation>
 <translation id="4550003330909367850">Chcete-li zde zobrazovat či kopírovat hesla, nastavte v tomto zařízení zámek obrazovky.</translation>
 <translation id="4558311620361989323">Zkratky webových stránek</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Starší než 30 dnů</translation>
 <translation id="5858741533101922242">Chrome nemůže zapnout adaptér Bluetooth</translation>
 <translation id="5860033963881614850">Vypnuto</translation>
+<translation id="5862731021271217234">Chcete-li získat přístup ke kartám ze svých ostatních zařízení, zapněte synchronizaci</translation>
 <translation id="5864174910718532887">Podrobnosti: Seřazeno podle názvu webu</translation>
 <translation id="5864419784173784555">Čekání na další stahování…</translation>
 <translation id="5869522115854928033">Uložená hesla</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigační panel je zavřen</translation>
 <translation id="8103578431304235997">Anonymní karta</translation>
 <translation id="8105951947646329362">Navrhovat související stránky</translation>
+<translation id="8109613176066109935">Chcete-li mít záložky ve všech zařízeních, zapněte synchronizaci</translation>
 <translation id="8116925261070264013">Ztlumeno</translation>
 <translation id="813082847718468539">Zobrazit informace o stránkách</translation>
 <translation id="8168435359814927499">Obsah</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Upravit</translation>
 <translation id="9070377983101773829">Spustit hlasové vyhledávání</translation>
 <translation id="9071742570345586758">Chcete-li zobrazit obsah pro virtuální realitu, nainstalujte si Služby VR Google</translation>
+<translation id="9074336505530349563">Chcete-li od Googlu získat personalizované návrhy obsahu, zapněte synchronizaci</translation>
 <translation id="9086455579313502267">Nelze získat přístup k síti.</translation>
 <translation id="9099018167121903954">Staženo: <ph name="KILOBYTES" /> kB</translation>
 <translation id="9100505651305367705">Nabízet zjednodušené zobrazení článků (pokud je podporováno)</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
index cecbd21..9c5d116 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Næste</translation>
 <translation id="1204037785786432551">Download link</translation>
 <translation id="1206892813135768548">Kopiér linktekst</translation>
+<translation id="1208340532756947324">Aktivér synkronisering for at synkronisere og tilpasse på alle dine enheder</translation>
 <translation id="1209206284964581585">Skjul indtil videre</translation>
 <translation id="123724288017357924">Genindlæs aktuel side, og ignorer indhold gemt i cache</translation>
 <translation id="124116460088058876">Flere sprog</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Gennemse</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> vil gerne parre</translation>
 <translation id="1994173015038366702">Webadresse</translation>
+<translation id="2002537628803770967">Kreditkort og adresser fra Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB af andre apps</translation>
 <translation id="2017836877785168846">Nulstiller historikken og autofuldførelser i adresselinjen.</translation>
 <translation id="2021896219286479412">Kontrolelementer på website i fuld skærm</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder tilbage</translation>
 <translation id="2781151931089541271">1 sekund tilbage</translation>
 <translation id="2810645512293415242">Forenklet side, der sparer data og indlæses hurtigere.</translation>
+<translation id="2818669890320396765">Log ind, og aktivér synkronisering for at få vist dine bogmærker på alle dine enheder</translation>
 <translation id="2836148919159985482">Tryk på tilbageknappen for at afslutte fuld skærm.</translation>
 <translation id="2842985007712546952">Overordnet mappe</translation>
 <translation id="2870560284913253234">Website</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Søg i din historik</translation>
 <translation id="3552151358455404883">Administrer Chrome-synkronisering og -tilpasning i <ph name="BEGIN_LINK1" />Indstillinger<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Føj til kontaktpersoner</translation>
+<translation id="3568688522516854065">Log ind, og aktivér synkronisering for at få adgang til dine faner på dine andre enheder</translation>
 <translation id="3587482841069643663">Alle</translation>
 <translation id="3590487821116122040">Websitelagerplads, som ikke er vigtig ifølge Chrome (f.eks. websites uden gemte indstillinger eller websites, du ikke besøger så ofte)</translation>
 <translation id="3599863153486145794">Rydder historikken på alle enheder, hvor du er logget ind. Din Google-konto kan have andre former for browserhistorik på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Gennemgå dine indstillinger på næste skærm</translation>
 <translation id="4195643157523330669">Åbn på ny fane</translation>
 <translation id="4198423547019359126">Der er ingen tilgængelige downloadplaceringer</translation>
+<translation id="4209895695669353772">Aktivér synkronisering for at hente brugertilpasset indhold, som er foreslået af Google</translation>
 <translation id="4226663524361240545">Underretninger kan få enheden til at vibrere</translation>
 <translation id="4242533952199664413">Åbn Indstillinger</translation>
 <translation id="424864128008805179">Vil du logge ud af Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Bogmærket er gemt i <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> downloadet i <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Slå lyden fra for et bestemt website.</translation>
+<translation id="4472118726404937099">Log ind, og aktivér synkronisering for at synkronisere og tilpasse på alle dine enheder</translation>
 <translation id="4479647676395637221">Spørg om tilladelse, inden websites bruger dit kamera (anbefales)</translation>
 <translation id="4487967297491345095">Alle Chromes appdata slettes permanent. Dette omfatter alle filer, indstillinger, konti, databaser osv.</translation>
 <translation id="4508440807153586353">Det er kun personer med din adgangssætning, der kan læse dine krypterede data. Adgangssætningen sendes ikke til eller gemmes af Google. Hvis du glemmer din adgangssætning eller vil ændre denne indstilling, skal du nulstille synkroniseringen. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">De valgte data er fjernet fra Chrome og synkroniserede enheder.
 
 Din Google-konto kan have andre former for browserhistorik, f.eks. søgninger og aktivitet fra andre Google-tjenester, på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Se og administrer gemte adgangskoder på <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Vælg mappe</translation>
 <translation id="4550003330909367850">Indstil en skærmlås på denne enhed for at se eller kopiere din adgangkode her.</translation>
 <translation id="4558311620361989323">Genveje på websider</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Ældre end 30 dage</translation>
 <translation id="5858741533101922242">Chrome kan ikke slå Bluetooth-adapteren til</translation>
 <translation id="5860033963881614850">Fra</translation>
+<translation id="5862731021271217234">Aktivér synkronisering for at få adgang til dine faner på dine andre enheder</translation>
 <translation id="5864174910718532887">Oplysninger: Sorteret efter navn på website</translation>
 <translation id="5864419784173784555">Venter på en anden download…</translation>
 <translation id="5869522115854928033">Gemte adgangskoder</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigationspanelet er lukket</translation>
 <translation id="8103578431304235997">Inkognitofane</translation>
 <translation id="8105951947646329362">Foreslå relaterede sider</translation>
+<translation id="8109613176066109935">Aktivér synkronisering for at få vist dine bogmærker på alle dine enheder</translation>
 <translation id="8116925261070264013">Websites, hvor lyden er slået fra</translation>
 <translation id="813082847718468539">Se websiteoplysninger</translation>
 <translation id="8168435359814927499">Indhold</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Rediger</translation>
 <translation id="9070377983101773829">Start talesøgning</translation>
 <translation id="9071742570345586758">Installer Google VR-tjenester for at se virtual reality-indhold</translation>
+<translation id="9074336505530349563">Log ind, og aktivér synkronisering for at hente brugertilpasset indhold, som er foreslået af Google</translation>
 <translation id="9086455579313502267">Der kunne ikke opnås adgang til netværket</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB er downloadet</translation>
 <translation id="9100505651305367705">Tilbyd enkel visning af artikler, når det understøttes</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
index 79c9073..0ba4b715 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Weiter</translation>
 <translation id="1204037785786432551">Link herunterladen</translation>
 <translation id="1206892813135768548">Linktext kopieren</translation>
+<translation id="1208340532756947324">Aktivieren Sie die Synchronisierung, um geräteübergreifend zu synchronisieren und zu personalisieren</translation>
 <translation id="1209206284964581585">Vorerst ausblenden</translation>
 <translation id="123724288017357924">Aktuelle Seite neu laden, Cache-Inhalte ignorieren</translation>
 <translation id="124116460088058876">Weitere Sprachen</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Durchsuchen</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> möchte eine Kopplung durchführen</translation>
 <translation id="1994173015038366702">Website-URL</translation>
+<translation id="2002537628803770967">Kreditkarten und Adressen aus Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB sonstiger Apps</translation>
 <translation id="2017836877785168846">Löscht den Verlauf sowie Autovervollständigungen in der Adressleiste.</translation>
 <translation id="2021896219286479412">Vollbild-Steuerelemente</translation>
@@ -190,7 +192,7 @@
 <translation id="2476578072172137802">Website-Einstellungen</translation>
 <translation id="2482878487686419369">Benachrichtigungen</translation>
 <translation id="2496180316473517155">Browserverlauf</translation>
-<translation id="2498359688066513246">Hilfe und Feedback</translation>
+<translation id="2498359688066513246">Hilfe &amp; Feedback</translation>
 <translation id="2501278716633472235">Zurück</translation>
 <translation id="2512222046227390255">Formulare automatisch ausfüllen</translation>
 <translation id="2513403576141822879">Weitere Einstellungen in Verbindung mit Datenschutz, Sicherheit und der Erhebung von Daten finden Sie unter <ph name="BEGIN_LINK" />Synchronisierung und Google-Dienste<ph name="END_LINK" /></translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> Sekunden übrig</translation>
 <translation id="2781151931089541271">1 Sekunde übrig</translation>
 <translation id="2810645512293415242">Vereinfachte Seite für einen geringeren Datenverbrauch und schnelleres Laden.</translation>
+<translation id="2818669890320396765">Melden Sie sich an und aktivieren Sie die Synchronisierung, um Ihre Lesezeichen auf allen Ihren Geräten zu haben</translation>
 <translation id="2836148919159985482">Tippen Sie zum Beenden des Vollbildmodus auf die Zurück-Taste.</translation>
 <translation id="2842985007712546952">Übergeordneter Ordner</translation>
 <translation id="2870560284913253234">Website</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Im Verlauf suchen</translation>
 <translation id="3552151358455404883">Chrome-Synchronisierung und -Personalisierung in den <ph name="BEGIN_LINK1" />Einstellungen<ph name="END_LINK1" /> verwalten</translation>
 <translation id="3557336313807607643">Zu Kontakten hinzufügen</translation>
+<translation id="3568688522516854065">Melden Sie sich an und aktivieren Sie die Synchronisierung, um Ihre Tabs von Ihren anderen Geräten abzurufen</translation>
 <translation id="3587482841069643663">Alle</translation>
 <translation id="3590487821116122040">Websitespeicher, den Chrome nicht für wichtig hält, wie etwa Websites ohne gespeicherte Einstellungen oder solche, die nicht oft besucht werden</translation>
 <translation id="3599863153486145794">Löscht den Verlauf bei allen angemeldeten Geräten. Möglicherweise verfügt Ihr Google-Konto unter <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> über andere Browserverläufe.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Einstellungen auf dem nächsten Bildschirm überprüfen</translation>
 <translation id="4195643157523330669">In neuem Tab öffnen</translation>
 <translation id="4198423547019359126">Keine verfügbaren Speicherorte für Downloads</translation>
+<translation id="4209895695669353772">Aktivieren Sie die Synchronisierung, um personalisierte, von Google vorgeschlagene Inhalte zu erhalten</translation>
 <translation id="4226663524361240545">Bei Benachrichtigungen kann das Gerät vibrieren</translation>
 <translation id="4242533952199664413">Einstellungen öffnen</translation>
 <translation id="424864128008805179">Von Chrome abmelden?</translation>
@@ -401,6 +406,7 @@
 <translation id="4452548195519783679">Als Lesezeichen in "<ph name="FOLDER_NAME" />" gespeichert</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> in <ph name="PRODUCT_NAME" /> heruntergeladen</translation>
 <translation id="4468959413250150279">Eine bestimmte Website stummschalten.</translation>
+<translation id="4472118726404937099">Melden Sie sich an und aktivieren Sie die Synchronisierung, um geräteübergreifend zu synchronisieren und zu personalisieren</translation>
 <translation id="4479647676395637221">Nachfragen, bevor Websites Zugriff auf Ihre Kamera erhalten (empfohlen)</translation>
 <translation id="4487967297491345095">Alle App-Daten in Chrome werden dauerhaft gelöscht. Hierzu gehören alle Dateien, Einstellungen, Konten, Datenbanken.</translation>
 <translation id="4508440807153586353">Nur Personen mit Ihrer Passphrase können Ihre verschlüsselten Daten lesen. Die Passphrase wird nicht an Google gesendet oder von Google gespeichert. Falls Sie sie vergessen oder diese Einstellung ändern möchten, müssen Sie die Synchronisierung zurücksetzen. <ph name="BEGIN_LINK" />Weitere Informationen<ph name="END_LINK" /></translation>
@@ -409,7 +415,6 @@
 <translation id="4521489764227272523">Die ausgewählten Daten wurden aus Chrome und von allen Ihren synchronisierten Geräten entfernt.
 
 Eventuell finden Sie unter <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" /> weitere Formen des Browserverlaufs wie Suchanfragen oder Aktivitäten anderer Google-Dienste für Ihr Google-Konto.</translation>
-<translation id="4526249700380860531">Unter <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> gespeicherte Passwörter aufrufen und verwalten</translation>
 <translation id="4532845899244822526">Ordner auswählen</translation>
 <translation id="4550003330909367850">Um Ihr Passwort hier anzeigen zu lassen oder zu kopieren, legen Sie eine Displaysperre für dieses Gerät fest.</translation>
 <translation id="4558311620361989323">Tastenkombinationen für Webseiten</translation>
@@ -586,6 +591,7 @@
 <translation id="5854790677617711513">Älter als 30 Tage</translation>
 <translation id="5858741533101922242">Chrome kann den Bluetooth-Adapter nicht aktivieren</translation>
 <translation id="5860033963881614850">Aus</translation>
+<translation id="5862731021271217234">Aktivieren Sie die Synchronisierung, um Ihre Tabs von Ihren anderen Geräten abzurufen</translation>
 <translation id="5864174910718532887">Details: Nach Websitename sortiert</translation>
 <translation id="5864419784173784555">Warten auf weiteren Download…</translation>
 <translation id="5869522115854928033">Gespeicherte Passwörter</translation>
@@ -864,6 +870,7 @@
 <translation id="8100932616285851614">Navigationsbereich geschlossen</translation>
 <translation id="8103578431304235997">Inkognito-Tab</translation>
 <translation id="8105951947646329362">Ähnliche Seiten vorschlagen</translation>
+<translation id="8109613176066109935">Aktivieren Sie die Synchronisierung, um Ihre Lesezeichen auf allen Ihren Geräten zu sehen</translation>
 <translation id="8116925261070264013">Stummgeschaltet</translation>
 <translation id="813082847718468539">Website-Informationen anzeigen</translation>
 <translation id="8168435359814927499">Inhalte</translation>
@@ -968,6 +975,7 @@
 <translation id="9065203028668620118">Bearbeiten</translation>
 <translation id="9070377983101773829">Sprachsuche starten</translation>
 <translation id="9071742570345586758">Google VR Services installieren, um Virtual-Reality-Inhalte zu sehen</translation>
+<translation id="9074336505530349563">Melden Sie sich und aktivieren Sie die Synchronisierung, um personalisierte, von Google vorgeschlagene Inhalte zu erhalten</translation>
 <translation id="9086455579313502267">Kein Zugriff auf das Netzwerk</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB heruntergeladen</translation>
 <translation id="9100505651305367705">Anbieten, Artikel in vereinfachter Ansicht anzuzeigen, falls unterstützt</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
index 16f2a62..4f48e62 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Επόμενο</translation>
 <translation id="1204037785786432551">Λήψη συνδέσμου</translation>
 <translation id="1206892813135768548">Αντιγραφή κειμένου συνδέσμου</translation>
+<translation id="1208340532756947324">Για συγχρονισμό και εξατομίκευση σε διάφορες συσκευές, ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="1209206284964581585">Προσωρινή απόκρυψη</translation>
 <translation id="123724288017357924">Επαναφ. τρέχ.σελ. αγνοώντας το περιεχ. κρυφ.μνήμης</translation>
 <translation id="124116460088058876">Περισσότερες γλώσσες</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Περιήγηση</translation>
 <translation id="1993768208584545658">Ο ιστότοπος <ph name="SITE" /> επιθυμεί σύζευξη</translation>
 <translation id="1994173015038366702">URL ιστότοπου</translation>
+<translation id="2002537628803770967">Πιστωτικές κάρτες και διευθύνσεις που χρησιμοποιούν το Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB από άλλες εφαρμογές</translation>
 <translation id="2017836877785168846">Διαγράφει το ιστορικό και τις αυτόματες συμπληρώσεις στη γραμμή διευθύνσεων.</translation>
 <translation id="2021896219286479412">Στοιχ. ελέγ. σε πλήρη οθόνη</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Απομένουν <ph name="SECONDS" /> δευτερόλεπτα</translation>
 <translation id="2781151931089541271">Απομένει 1 δευτερόλεπτο</translation>
 <translation id="2810645512293415242">Απλοποιημένη σελίδα για την αποθήκευση δεδομένων και για πιο γρήγορη φόρτωση.</translation>
+<translation id="2818669890320396765">Για να εμφανίζονται οι σελιδοδείκτες σας σε όλες τις συσκευές σας, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="2836148919159985482">Πατήστε το κουμπί επιστροφής για έξοδο από την πλήρη οθόνη.</translation>
 <translation id="2842985007712546952">Γονικός φάκελος</translation>
 <translation id="2870560284913253234">Ιστότοπος</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Αναζήτηση στο ιστορικό σας</translation>
 <translation id="3552151358455404883">Διαχειριστείτε το Chrome Sync και την εξατομίκευση στις <ph name="BEGIN_LINK1" />Ρυθμίσεις<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Προσθήκη στις επαφές</translation>
+<translation id="3568688522516854065">Για να εμφανίζονται οι καρτέλες σας από τις άλλες συσκευές σας, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="3587482841069643663">Όλες</translation>
 <translation id="3590487821116122040">Αποθηκευτικός χώρος ιστοτόπων που το Chrome θεωρεί ότι δεν είναι σημαντικός (π.χ. ιστότοποι χωρίς αποθηκευμένες ρυθμίσεις ή που δεν επισκέπτεστε συχνά)</translation>
 <translation id="3599863153486145794">Διαγράφει το ιστορικό από όλες τις συνδεδεμένες συσκευές. Ο Λογαριασμός σας Google ενδέχεται να διαθέτει άλλες μορφές ιστορικού περιήγησης στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Ελέγξτε τις ρυθμίσεις σας στην επόμενη οθόνη</translation>
 <translation id="4195643157523330669">Άνοιγμα σε νέα καρτέλα</translation>
 <translation id="4198423547019359126">Δεν υπάρχουν διαθέσιμες τοποθεσίες λήψης</translation>
+<translation id="4209895695669353772">Για λήψη εξατομικευμένου περιεχομένου που προτείνεται από την Google, ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="4226663524361240545">Κατά τη λήψη ειδοποιήσεων ενδέχεται να δονείται η συσκευή</translation>
 <translation id="4242533952199664413">Ανοίξτε τις ρυθμίσεις</translation>
 <translation id="424864128008805179">Αποσύνδεση από το Chrome;</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Ο σελιδοδείκτης είναι στο "<ph name="FOLDER_NAME" />"</translation>
 <translation id="4453340223357552416">Η λήψη του <ph name="FILE_NAME" /> πραγματοποιήθηκε στο <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Σίγαση ήχου για συγκεκριμένο ιστότοπο.</translation>
+<translation id="4472118726404937099">Για συγχρονισμό και εξατομίκευση σε διάφορες συσκευές, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="4479647676395637221">Να γίνεται ερώτηση προτού επιτραπεί στους ιστότοπους να χρησιμοποιούν την κάμερά σας (συνιστάται)</translation>
 <translation id="4487967297491345095">Όλα τα δεδομένα εφαρμογών του Chrome θα διαγραφούν οριστικά. Σε αυτά περιλαμβάνονται όλα τα αρχεία, οι ρυθμίσεις, οι λογαριασμοί, οι βάσεις δεδομένων, κ.λπ.</translation>
 <translation id="4508440807153586353">Μόνο κάποιος που γνωρίζει τη φράση πρόσβασής σας μπορεί να διαβάσει τα κρυπτογραφημένα δεδομένα σας. Η φράση πρόσβασης δεν αποστέλλεται ούτε αποθηκεύεται στην Google. Εάν ξεχάσετε τη φράση πρόσβασής σας ή θέλετε να αλλάξετε αυτήν τη ρύθμιση, θα χρειαστεί να επαναφέρετε το συγχρονισμό. <ph name="BEGIN_LINK" />Μάθετε περισσότερα<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Τα επιλεγμένα δεδομένα καταργήθηκαν από το Chrome και τις συγχρονισμένες συσκευές σας.
 
 Ο Λογαριασμός σας Google μπορεί να έχει άλλες μορφές ιστορικού περιήγησης, όπως αναζητήσεις και δραστηριότητα από άλλες υπηρεσίες της Google στη διεύθυνση <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Προβολή και διαχείριση των αποθηκευμένων κωδικών πρόσβασης στη διεύθυνση <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Επιλογή φακέλου</translation>
 <translation id="4550003330909367850">Για να δείτε ή να αντιγράψετε τον κωδικό πρόσβασης εδώ, ρυθμίστε το κλείδωμα οθόνης σε αυτήν τη συσκευή.</translation>
 <translation id="4558311620361989323">Συντομεύσεις ιστοσελίδας</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Παλαιότερο από 30 ημέρες</translation>
 <translation id="5858741533101922242">Το Chrome δεν είναι δυνατό να ενεργοποιήσει τον προσαρμογέα Bluetooth</translation>
 <translation id="5860033963881614850">Απενεργοποιημένη</translation>
+<translation id="5862731021271217234">Για να εμφανίζονται οι καρτέλες σας από τις άλλες συσκευές σας, ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="5864174910718532887">Λεπτομέρειες: Ταξινομήθηκαν κατά όνομα ιστοτόπου</translation>
 <translation id="5864419784173784555">Αναμονή για άλλη λήψη…</translation>
 <translation id="5869522115854928033">Αποθηκευμένοι κωδικοί πρόσβασης</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Ο πίνακας πλοήγησης έκλεισε</translation>
 <translation id="8103578431304235997">Καρτέλα ανώνυμης περιήγησης</translation>
 <translation id="8105951947646329362">Προτάσεις για σχετικές σελίδες</translation>
+<translation id="8109613176066109935">Για να εμφανίζονται οι σελιδοδείκτες σας σε όλες τις συσκευές σας, ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="8116925261070264013">Σε σίγαση</translation>
 <translation id="813082847718468539">Προβολή πληροφοριών τοποθεσίας</translation>
 <translation id="8168435359814927499">Περιεχόμενο</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Επεξεργασία</translation>
 <translation id="9070377983101773829">Έναρξη φωνητικής αναζήτησης</translation>
 <translation id="9071742570345586758">Για να προβάλλετε περιεχόμενο εικονικής πραγματικότητας, εγκαταστήστε την εφαρμογή Google VR Services</translation>
+<translation id="9074336505530349563">Για λήψη εξατομικευμένου περιεχομένου που προτείνεται από την Google, συνδεθείτε και ενεργοποιήστε τον συγχρονισμό</translation>
 <translation id="9086455579313502267">Δεν είναι δυνατή η πρόσβαση στο δίκτυο</translation>
 <translation id="9099018167121903954">Έγινε λήψη <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">Προσφορά για προβολή άρθρων σε απλοποιημένη προβολή, όταν υποστηρίζεται</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
index 9ba6bad..4e7aebb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_en-GB.xtb
@@ -414,7 +414,6 @@
 <translation id="4521489764227272523">The selected data has been removed from Chrome and your synced devices.
 
 Your Google Account may have other forms of browsing history such as searches and activity from other Google services at <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">View and manage saved passwords at <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Choose folder</translation>
 <translation id="4550003330909367850">To view or copy your password here, set screen lock on this device.</translation>
 <translation id="4558311620361989323">Web page shortcuts</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
index d7f40a15..d695f82 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es-419.xtb
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">Los datos seleccionados se quitaron de Chrome y tus dispositivos sincronizados.
 
 Es posible que tu cuenta de Google tenga otros formularios de historial de navegación, como búsquedas y actividad de otros servicios de Google en <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Consulta y administra las contraseñas que guardaste en <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" />.</translation>
 <translation id="4532845899244822526">Seleccionar carpeta</translation>
 <translation id="4550003330909367850">Para ver o copiar tu contraseña aquí, establece un bloqueo de pantalla en este dispositivo.</translation>
 <translation id="4558311620361989323">Accesos directos a páginas web</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
index e98f9c7..6634186 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Siguiente</translation>
 <translation id="1204037785786432551">Descargar enlace</translation>
 <translation id="1206892813135768548">Copiar texto de enlace</translation>
+<translation id="1208340532756947324">Activa la sincronización para sincronizar y personalizar todos tus dispositivos</translation>
 <translation id="1209206284964581585">Ocultar por ahora</translation>
 <translation id="123724288017357924">Vuelve a cargar esta página sin contenido en caché</translation>
 <translation id="124116460088058876">Más idiomas</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Examinar</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> quiere vincularse</translation>
 <translation id="1994173015038366702">URL del sitio</translation>
+<translation id="2002537628803770967">Tarjetas de crédito y direcciones con Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kB de otras aplicaciones</translation>
 <translation id="2017836877785168846">Borra el historial y los autocompletados de la barra de direcciones.</translation>
 <translation id="2021896219286479412">Controles de pantalla completa</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Quedan <ph name="SECONDS" /> segundos</translation>
 <translation id="2781151931089541271">Queda 1 segundo</translation>
 <translation id="2810645512293415242">Esta página se ha simplificado para ahorrar datos y poder cargarla más rápido.</translation>
+<translation id="2818669890320396765">Inicia sesión y activa la sincronización para ver tus marcadores en todos tus dispositivos</translation>
 <translation id="2836148919159985482">Toca el botón de retroceso para salir de la pantalla completa.</translation>
 <translation id="2842985007712546952">Carpeta principal</translation>
 <translation id="2870560284913253234">Sitio</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Buscar en el historial</translation>
 <translation id="3552151358455404883">Administrar la personalización y la sincronización de Chrome en <ph name="BEGIN_LINK1" />Configuración<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Añadir a contactos</translation>
+<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="3590487821116122040">Almacenamiento del sitio web que Chrome no considera importante (p. ej., los sitios web sin configuración guardada o aquellos que no visitas a menudo)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Revisa tu configuración en la siguiente pantalla</translation>
 <translation id="4195643157523330669">Abrir en una pestaña nueva</translation>
 <translation id="4198423547019359126">No hay ubicaciones de descarga disponibles</translation>
+<translation id="4209895695669353772">Activa la sincronización para obtener contenido personalizado sugerido por Google</translation>
 <translation id="4226663524361240545">Es posible que las notificaciones hagan que el dispositivo vibre</translation>
 <translation id="4242533952199664413">Abrir Configuración</translation>
 <translation id="424864128008805179">¿Cerrar sesión en Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Marcador añadido a <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> se ha descargado en <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Silencia el sonido de un sitio web específico.</translation>
+<translation id="4472118726404937099">Inicia sesión y activa la sincronización para sincronizar y personalizar todos tus dispositivos</translation>
 <translation id="4479647676395637221">Preguntar antes de permitir que los sitios web utilicen la cámara (recomendado)</translation>
 <translation id="4487967297491345095">Todos los datos de la aplicación Chrome se eliminarán de forma permanente. Esto incluye todos los archivos, ajustes, cuentas, bases de datos, etc.</translation>
 <translation id="4508440807153586353">Solo alguien que tenga tu frase de contraseña puede leer tus datos cifrados. Google no envía ni almacena la frase de contraseña. 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>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Los datos seleccionados se han quitado de Chrome y de los dispositivos sincronizados.
 
 Es posible que tu cuenta de Google tenga otros tipos de historial de navegación, como búsquedas o actividad de otros servicios de Google, en la página <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Consulta y administra contraseñas guardadas en la página <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Seleccionar carpeta</translation>
 <translation id="4550003330909367850">Para ver o copiar tu contraseña aquí, configura el bloqueo de pantalla en este dispositivo.</translation>
 <translation id="4558311620361989323">Combinaciones de teclas en páginas web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Más de 30 días</translation>
 <translation id="5858741533101922242">Chrome no ha podido activar el adaptador Bluetooth</translation>
 <translation id="5860033963881614850">No</translation>
+<translation id="5862731021271217234">Activa la sincronización para ver las pestañas de tus otros dispositivos</translation>
 <translation id="5864174910718532887">Detalles: ordenados por nombre del sitio web</translation>
 <translation id="5864419784173784555">Esperando otra descarga…</translation>
 <translation id="5869522115854928033">Contraseñas guardadas</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Panel de navegación cerrado</translation>
 <translation id="8103578431304235997">Pestaña de incógnito</translation>
 <translation id="8105951947646329362">Sugerir páginas relacionadas</translation>
+<translation id="8109613176066109935">Activa la sincronización para ver tus marcadores en todos tus dispositivos</translation>
 <translation id="8116925261070264013">Silenciados</translation>
 <translation id="813082847718468539">Ver información del sitio</translation>
 <translation id="8168435359814927499">Contenido</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9070377983101773829">Iniciar búsqueda por voz</translation>
 <translation id="9071742570345586758">Para ver contenido de realidad virtual, instala Servicios RV de Google</translation>
+<translation id="9074336505530349563">Inicia sesión y activa la sincronización para obtener contenido personalizado sugerido por Google</translation>
 <translation id="9086455579313502267">No ha sido posible acceder a la red</translation>
 <translation id="9099018167121903954">kB descargados: <ph name="KILOBYTES" /></translation>
 <translation id="9100505651305367705">Pregunta si quieres que los artículos se muestren en vista simplificada, si está disponible</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
index 4a571e8..27070f9e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">بعدی</translation>
 <translation id="1204037785786432551">بارگیری پیوند</translation>
 <translation id="1206892813135768548">کپی نوشتار پیوند</translation>
+<translation id="1208340532756947324">برای همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها، همگام‌سازی را روشن کنید</translation>
 <translation id="1209206284964581585">فعلاً پنهان شود</translation>
 <translation id="123724288017357924">تازه‌سازی صفحه اصلی با نادیده گرفتن محتوای حافظه پنهان</translation>
 <translation id="124116460088058876">زبان‌های بیشتر</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">مشاهده محتوای موجود در فروشگاه ما</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> می‌خواهد مرتبط شود</translation>
 <translation id="1994173015038366702">نشانی وب سایت</translation>
+<translation id="2002537628803770967">‏کارت‌های اعتباری و نشانی‌های مورداستفاده در Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> کیلوبایت توسط سایر برنامه‌ها</translation>
 <translation id="2017836877785168846">سابقه و تکمیل خودکار را در نوار نشانی پاک می‌کند.</translation>
 <translation id="2021896219286479412">کنترل‌های سایت تمام‌صفحه</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> ثانیه باقی‌مانده است</translation>
 <translation id="2781151931089541271">۱ ثانیه باقی‌مانده است</translation>
 <translation id="2810645512293415242">صفحه ساده‌شده برای ذخیره داده‌ها و بارگیری با سرعت بیشتر.</translation>
+<translation id="2818669890320396765">برای اینکه نشانک‌هایتان را در همه دستگاه‌ها داشته باشید، به سیستم وارد شوید و همگام‌سازی را روشن کنید</translation>
 <translation id="2836148919159985482">برای خروج از حالت تمام صفحه، دکمه برگشت را لمس کنید.</translation>
 <translation id="2842985007712546952">پوشه اصلی</translation>
 <translation id="2870560284913253234">سایت</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">جستجو در سابقه</translation>
 <translation id="3552151358455404883">‏«همگام‌سازی Chrome» و شخصی‌سازی را در <ph name="BEGIN_LINK1" />تنظیمات<ph name="END_LINK1" /> مدیریت کنید</translation>
 <translation id="3557336313807607643">افزودن به مخاطبین</translation>
+<translation id="3568688522516854065">برای اینکه به برگه‌های بازشده در سایر دستگاه‌ها دسترسی داشته باشید، به سیستم وارد شوید و همگام‌سازی را روشن کنید</translation>
 <translation id="3587482841069643663">همه</translation>
 <translation id="3590487821116122040">‏فضای ذخیره‌سازی سایت که از نظر Chrome مهم نیست (مثلاً سایت‌هایی که تنظیمات ذخیره‌شده ندارند یا شما مرتب بازدید نمی‌کنید)</translation>
 <translation id="3599863153486145794">‏سابقه را از همه دستگاه‌های به سیستم واردشده پاک می‌کند. ممکن است حساب Google شما اشکال دیگری از سابقه مرور در <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> داشته باشد.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">تنظیماتتان را در صفحه بعد مرور کنید</translation>
 <translation id="4195643157523330669">باز کردن در برگهٔ جدید</translation>
 <translation id="4198423547019359126">مکانی برای بارگیری دردسترس نیست</translation>
+<translation id="4209895695669353772">‏برای اینکه Google محتوای شخصی‌شده به شما پیشنهاد دهد، همگام‌سازی را روشن کنید</translation>
 <translation id="4226663524361240545">اعلان‌ها ممکن است دستگاه را بلرزانند</translation>
 <translation id="4242533952199664413">باز کردن تنظیمات</translation>
 <translation id="424864128008805179">‏از سیستم Chrome خارج می شوید؟</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">در <ph name="FOLDER_NAME" /> نشانک گذاشته شد</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> در <ph name="PRODUCT_NAME" /> بارگیری شد</translation>
 <translation id="4468959413250150279">سایتی خاص بی‌صدا شود.</translation>
+<translation id="4472118726404937099">برای همگام‌سازی و شخصی‌سازی در همه دستگاه‌ها، به سیستم وارد شوید و همگام‌سازی را روشن کنید</translation>
 <translation id="4479647676395637221">قبل از اجازه به سایت‌ها برای استفاده از دوربین، ابتدا سؤال شود (توصیه می‌شود)</translation>
 <translation id="4487967297491345095">‏همه داده‌های برنامه Chrome به‌طور دائم حذف خواهند شد. این داده‌ها شامل همه فایل‌ها، تنظیمات، حساب‌ها، پایگاه‌های داده و غیره می‌شود.</translation>
 <translation id="4508440807153586353">‏فقط فردی که عبارت عبور شما را دارد می‌تواند اطلاعات رمزگذاری‌شده شما را بخواند. این عبارت عبور به Google ارسال یا در سرورهای آن ذخیره نمی‌شود. اگر عبارت عبورتان را فراموش کنید، باید همگام‌سازی را بازنشانی کنید. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">‏داده‌های انتخاب‌‌شده از Chrome و دستگاه‌های همگام‌سازی‌شده شما حذف شدند.
 
 ممکن است اشکال دیگری از سابقه مرورتان در حساب Google شما وجود داشته باشد، مانند جستجو‌ها و فعالیت دیگر سرویس‌های Google در <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">‏مشاهده و مدیریت گذرواژه‌های ذخیره شده در <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">انتخاب پوشه</translation>
 <translation id="4550003330909367850">برای مشاهده یا کپی کردن گذرواژه‌تان در اینجا، قفل صفحه را در این دستگاه تنظیم کنید.</translation>
 <translation id="4558311620361989323">میان‌برهای صفحه وب</translation>
@@ -554,7 +559,7 @@
 <translation id="5639724618331995626">همه سایت‌ها مجاز هستند</translation>
 <translation id="5648166631817621825">۷ روز گذشته</translation>
 <translation id="5655963694829536461">بارگیری‌هایتان را جستجو کنید</translation>
-<translation id="5659593005791499971">رایانامه</translation>
+<translation id="5659593005791499971">ایمیل</translation>
 <translation id="5665379678064389456">ایجاد رویداد در <ph name="APP_NAME" /></translation>
 <translation id="5668404140385795438">لغو درخواست وب‌سایت برای جلوگیری از بزرگ‌نمایی</translation>
 <translation id="5676636989614905379">ویدئو در <ph name="SCREEN_NAME" /> پخش نمی‌شود.</translation>
@@ -584,6 +589,7 @@
 <translation id="5854790677617711513">قدیمی‌تر از ۳۰ روز</translation>
 <translation id="5858741533101922242">‏Chrome قادر به روشن کردن آداپتور بلوتوث نیست</translation>
 <translation id="5860033963881614850">خاموش</translation>
+<translation id="5862731021271217234">برای اینکه به برگه‌های بازشده در سایر دستگاه‌ها دسترسی داشته باشید، همگام‌سازی را روشن کنید</translation>
 <translation id="5864174910718532887">جزئیات: مرتب‌شده براساس نام سایت</translation>
 <translation id="5864419784173784555">در انتظار بارگیری موردی دیگر…</translation>
 <translation id="5869522115854928033">گذرواژه‌های ذخیره‌شده</translation>
@@ -624,7 +630,7 @@
 <translation id="618555311922999635">پانل پیمایش کاملاً باز شد</translation>
 <translation id="6192333916571137726">فایل بارگیری</translation>
 <translation id="6192792657125177640">موارد استثنا</translation>
-<translation id="6210748933810148297"><ph name="EMAIL" /> رایانامه شما نیست؟</translation>
+<translation id="6210748933810148297"><ph name="EMAIL" /> ایمیل شما نیست؟</translation>
 <translation id="6216432067784365534">گزینه‌های <ph name="NAME_OF_LIST_ITEM" /></translation>
 <translation id="6221633008163990886">برای صادر کردن گذرواژه‌ها، قفل را باز کنید</translation>
 <translation id="6232535412751077445">فعال کردن «ردیابی نشود» به این معنی است که درخواستی به ترافیک مرور شما اضافه می‌شود. هر گونه اثری به این بستگی دارد که وب‌سایت به درخواست‌ پاسخ می‌دهد یا نه و درخواست چگونه تفسیر می‌شود.
@@ -807,7 +813,7 @@
 <translation id="7658239707568436148">لغو</translation>
 <translation id="7665369617277396874">افزودن حساب</translation>
 <translation id="7682724950699840886">نکات زیر را امتحان کنید: مطمئن شوید که در دستگاهتان فضای کافی وجود داشته باشد، سعی کنید دوباره صادر کنید.</translation>
-<translation id="7698359219371678927">ایجاد رایانامه در <ph name="APP_NAME" /></translation>
+<translation id="7698359219371678927">ایجاد ایمیل در <ph name="APP_NAME" /></translation>
 <translation id="7704317875155739195">تکمیل خودکار جستجوها و نشانی‌های وب</translation>
 <translation id="773466115871691567">صفحه‌های <ph name="SOURCE_LANGUAGE" /> همیشه ترجمه شوند</translation>
 <translation id="7735672056998735387"><ph name="SPACE_FREE" /> (<ph name="SPACE_OTHER" />)</translation>
@@ -827,7 +833,7 @@
 <translation id="7846076177841592234">لغو انتخاب</translation>
 <translation id="784934925303690534">محدوده زمانی</translation>
 <translation id="7851858861565204677">دستگاه‌های دیگر</translation>
-<translation id="7875915731392087153">ایجاد رایانامه</translation>
+<translation id="7875915731392087153">ایجاد ایمیل</translation>
 <translation id="7876243839304621966">حذف همه</translation>
 <translation id="7882131421121961860">هیچ سابقه‌ای پیدا نشد</translation>
 <translation id="7882806643839505685">پخش صدا برای سایتی خاص مجاز شود.</translation>
@@ -862,6 +868,7 @@
 <translation id="8100932616285851614">پانل پیمایش بسته شد</translation>
 <translation id="8103578431304235997">برگه ناشناس</translation>
 <translation id="8105951947646329362">پیشنهاد صفحه‌های مرتبط</translation>
+<translation id="8109613176066109935">برای اینکه به نشانک‌ها در همه دستگاه‌هایتان دسترسی داشته باشید، همگام‌سازی را روشن کنید</translation>
 <translation id="8116925261070264013">صامت‌شده</translation>
 <translation id="813082847718468539">مشاهدهٔ اطلاعات سایت</translation>
 <translation id="8168435359814927499">محتوا</translation>
@@ -966,6 +973,7 @@
 <translation id="9065203028668620118">ویرایش</translation>
 <translation id="9070377983101773829">شروع جستجوی گفتاری</translation>
 <translation id="9071742570345586758">‏برای مشاهده محتوای واقعیت مجازی، «سرویس‌های Google VR» را نصب کنید</translation>
+<translation id="9074336505530349563">‏برای اینکه Google محتوای شخصی‌شده به شما پیشنهاد دهد، به سیستم وارده شوید و همگام‌سازی را روشن کنید</translation>
 <translation id="9086455579313502267">دسترسی به شبکه امکان‌پذیر نیست</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> کیلوبایت بارگیری شد</translation>
 <translation id="9100505651305367705">پیشنهاد نمایش مقالات در نمای ساده‌شده، درصورت پشتیبانی</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
index d3be28dd..2980e6e3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Seuraava</translation>
 <translation id="1204037785786432551">Lataa linkin kohde</translation>
 <translation id="1206892813135768548">Kopioi linkin teksti</translation>
+<translation id="1208340532756947324">Ota synkronointi käyttöön, niin sisältö synkronoidaan ja yksilöidään eri laitteilla</translation>
 <translation id="1209206284964581585">Piilota toistaiseksi</translation>
 <translation id="123724288017357924">Päivitä nykyinen sivu, ohita välimuistin sisältö</translation>
 <translation id="124116460088058876">Lisää kieliä</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Selaa</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> haluaa muodostaa laiteparin</translation>
 <translation id="1994173015038366702">Sivuston URL-osoite</translation>
+<translation id="2002537628803770967">Luottokortit ja osoitteet Google Paysta</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kt muita sovelluksia</translation>
 <translation id="2017836877785168846">Tyhjentää historian ja osoitepalkin automaattiset täydennykset.</translation>
 <translation id="2021896219286479412">Ohjaimet koko näytön tilassa</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sekuntia jäljellä</translation>
 <translation id="2781151931089541271">1 sekunti jäljellä</translation>
 <translation id="2810645512293415242">Yksinkertaistettu sivu, joka säästää dataa ja latautuu nopeammin.</translation>
+<translation id="2818669890320396765">Kirjaudu sisään ja ota synkronointi käyttöön, niin voit käyttää kirjanmerkkejäsi kaikilla laitteilla</translation>
 <translation id="2836148919159985482">Poistu koko näytön tilasta Takaisin-painikkeella.</translation>
 <translation id="2842985007712546952">Ylätason kansio</translation>
 <translation id="2870560284913253234">Sivusto</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Haku omasta historiasta</translation>
 <translation id="3552151358455404883">Hallinnoi Chromen synkronointia ja räätälöintiä <ph name="BEGIN_LINK1" />asetuksissa<ph name="END_LINK1" />.</translation>
 <translation id="3557336313807607643">Lisää yhteystietoihin</translation>
+<translation id="3568688522516854065">Kirjaudu sisään ja ota synkronointi käyttöön, niin voit käyttää välilehtiä muilta laitteiltasi</translation>
 <translation id="3587482841069643663">Kaikki</translation>
 <translation id="3590487821116122040">Tallennetut sivustotiedot, joita Chrome ei pidä tärkeinä (esim. sivustot, joilla ei ole tallennettuja asetuksia tai joilla et käy usein).</translation>
 <translation id="3599863153486145794">Tyhjentää kaikkien sisäänkirjautuneiden laitteiden historian. Google-tililläsi voi olla muuta toimintaa osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Tarkista asetukset seuraavalla ruudulla</translation>
 <translation id="4195643157523330669">Avaa uudessa välilehdessä</translation>
 <translation id="4198423547019359126">Tallennussijainteja ei ole saatavilla</translation>
+<translation id="4209895695669353772">Ota synkronointi käyttöön, niin näet Googlen suosittelemaa yksilöllistä sisältöä</translation>
 <translation id="4226663524361240545">Laite voi väristä ilmoitusten yhteydessä.</translation>
 <translation id="4242533952199664413">Avaa asetukset</translation>
 <translation id="424864128008805179">Kirjaudutaanko ulos Chromesta?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Lisätty kirjanmerkiksi kansioon <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> on ladattu kohteeseen <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Mykistä tietyn sivuston äänet.</translation>
+<translation id="4472118726404937099">Kirjaudu sisään ja ota synkronointi käyttöön, niin sisältö synkronoidaan ja yksilöidään eri laitteilla</translation>
 <translation id="4479647676395637221">Pyydä lupaa, kun sivustot yrittävät käyttää kameraasi (suositus).</translation>
 <translation id="4487967297491345095">Kaikki Chromen sovellustiedot, mukaan lukien tiedostot, asetukset, tilit ja tietokannat, poistetaan pysyvästi.</translation>
 <translation id="4508440807153586353">Salattuja tietojasi voi lukea vain tunnuslauseesi avulla. Tunnuslausetta ei lähetetä Googlelle eikä Google tallenna sitä. Jos unohdat tunnuslauseesi tai haluat muokata tätä asetusta, synkronointi täytyy nollata. <ph name="BEGIN_LINK" />Lisätietoja<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Valitut tiedot on poistettu Chromesta ja synkronoiduilta laitteilta.
 
 Google-tililläsi voi olla muita selaushistoriatietoja, kuten hakuja ja toimintaa muista Google-palveluista. Voit katsella tietoja osoitteessa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Tarkastele ja hallinnoi tallennettuja salasanoja osoitteessa <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Valitse kansio</translation>
 <translation id="4550003330909367850">Aseta laitteelle näytön lukitus, niin voit nähdä ja kopioida salasanasi tässä.</translation>
 <translation id="4558311620361989323">Verkkosivun pikanäppäimet</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Yli 30 päivää vanhat</translation>
 <translation id="5858741533101922242">Chrome ei voi ottaa käyttöön Bluetooth-sovitinta.</translation>
 <translation id="5860033963881614850">Pois käytöstä</translation>
+<translation id="5862731021271217234">Ota synkronointi käyttöön, niin voit käyttää välilehtiä muilta laitteiltasi</translation>
 <translation id="5864174910718532887">Lisätiedot: Lajiteltu sivuston nimen mukaan</translation>
 <translation id="5864419784173784555">Odottaa toista latausta…</translation>
 <translation id="5869522115854928033">Tallennetut salasanat</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigointipalkki suljettu</translation>
 <translation id="8103578431304235997">Incognito-välilehti</translation>
 <translation id="8105951947646329362">Ehdota aiheeseen liittyviä sivuja</translation>
+<translation id="8109613176066109935">Ota synkronointi käyttöön, niin voit käyttää kirjanmerkkejä kaikilla laitteillasi</translation>
 <translation id="8116925261070264013">Mykistetty</translation>
 <translation id="813082847718468539">Näytä sivuston tiedot</translation>
 <translation id="8168435359814927499">Sisältö</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Muokkaa</translation>
 <translation id="9070377983101773829">Aloita puhehaku</translation>
 <translation id="9071742570345586758">Jos haluat tarkastella virtuaalitodellisuussisältöä, asenna Googlen VR-palvelut.</translation>
+<translation id="9074336505530349563">Kirjaudu sisään ja ota synkronointi käyttöön, niin näet Googlen suosittelemaa yksilöllistä sisältöä</translation>
 <translation id="9086455579313502267">Ei yhteyttä verkkoon.</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> Kt ladattu</translation>
 <translation id="9100505651305367705">Tarjoa yksinkertaistettua näkymää, jos artikkeli tukee sitä</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
index 13100440..21ef50f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Susunod</translation>
 <translation id="1204037785786432551">I-download ang link</translation>
 <translation id="1206892813135768548">Kopyahin ang text ng link</translation>
+<translation id="1208340532756947324">Para mag-sync at mag-personalize sa mga device, i-on ang pag-sync</translation>
 <translation id="1209206284964581585">Itago sa ngayon</translation>
 <translation id="123724288017357924">I-reload ang page, balewalain ang cached content</translation>
 <translation id="124116460088058876">Higit pang wika</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Mag-browse</translation>
 <translation id="1993768208584545658">Gustong makipagpares ng <ph name="SITE" /></translation>
 <translation id="1994173015038366702">URL ng site</translation>
+<translation id="2002537628803770967">Mga credit card at address na gumagamit ng Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB na iba pang mga app</translation>
 <translation id="2017836877785168846">Kini-clear ang history at mga awtomatikong pagkumpleto sa address bar.</translation>
 <translation id="2021896219286479412">Control ng full screen sa site</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> (na) segundo na lang ang natitira</translation>
 <translation id="2781151931089541271">1 segundo na lang ang natitira</translation>
 <translation id="2810645512293415242">Pinasimple ang page upang ma-save ang data at mag-load nang mas mabilis.</translation>
+<translation id="2818669890320396765">Para makuha ang iyong mga bookmark sa lahat ng device mo, mag-sign in at i-on ang pag-sync</translation>
 <translation id="2836148919159985482">Pindutin ang button na bumalik upang lumabas sa full screen.</translation>
 <translation id="2842985007712546952">Pangunahing folder</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Hanapin sa iyong history</translation>
 <translation id="3552151358455404883">Pamahalaan ang Chrome Sync at pag-personalize sa <ph name="BEGIN_LINK1" />Mga Setting<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Idagdag sa mga contact</translation>
+<translation id="3568688522516854065">Para makuha ang iyong mga tab sa iba mo pang device, mag-sign in at i-on ang pag-sync</translation>
 <translation id="3587482841069643663">Lahat</translation>
 <translation id="3590487821116122040">Storage ng site na sa tingin ng Chrome ay hindi mahalaga (hal. mga site na walang mga naka-save na setting o hindi mo madalas bisitahin)</translation>
 <translation id="3599863153486145794">Kini-clear ang history sa lahat ng naka-sign in na device. Maaaring may iba pang anyo ng history ng pag-browse ang iyong Google Account sa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Suriin ang iyong mga setting sa susunod na screen</translation>
 <translation id="4195643157523330669">Buksan sa bagong tab</translation>
 <translation id="4198423547019359126">Walang available na lokasyon ng pag-download</translation>
+<translation id="4209895695669353772">Para makakuha ng naka-personalize na content na iminumungkahi ng Google, i-on ang pag-sync</translation>
 <translation id="4226663524361240545">Maaaring mag-vibrate ang device dahil sa mga notification</translation>
 <translation id="4242533952199664413">Buksan ang mga setting</translation>
 <translation id="424864128008805179">Mag-sign out sa Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Na-bookmark sa <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Na-download ang <ph name="FILE_NAME" /> sa <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">I-mute ang tunog para sa isang partikular na site.</translation>
+<translation id="4472118726404937099">Para mag-sync at mag-personalize sa mga device, mag-sign in at i-on ang pag-sync</translation>
 <translation id="4479647676395637221">Magtanong muna bago payagan ang mga site na gamitin ang iyong camera (inirerekomenda)</translation>
 <translation id="4487967297491345095">Permanenteng ide-delete ang lahat ng data ng app ng Chrome. Kabilang dito ang lahat ng file, setting, account, database, atbp.</translation>
 <translation id="4508440807153586353">Ang taong may alam ng iyong passphrase lang ang makakabasa sa iyong naka-encrypt na data. Hindi ipinapadala sa o iniimbak ng Google ang passphrase. Kung makakalimutan mo ang iyong passphrase o gusto mong baguhin ang setting na ito, kakailanganin mong i-reset ang pag-sync. <ph name="BEGIN_LINK" />Matuto nang higit pa<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Inalis ang napiling data sa Chrome at sa iyong mga naka-sync na device.
 
 Maaaring may ibang uri ng history ng pag-browse ang iyong Google account tulad ng mga paghahanap at aktibidad mula sa iba pang serbisyo ng Google sa <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Tingnan at pamahalaan ang mga naka-save na password sa <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Pumili ng folder</translation>
 <translation id="4550003330909367850">Upang tingnan o kopyahin ang iyong password dito, magtakda ng lock ng screen sa device na ito.</translation>
 <translation id="4558311620361989323">Mga shortcut ng webpage</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Mas matagal sa 30 araw</translation>
 <translation id="5858741533101922242">Hindi ma-on ng Chrome ang Bluetooth adapter</translation>
 <translation id="5860033963881614850">Naka-off</translation>
+<translation id="5862731021271217234">Para makuha ang iyong mga tab mula sa iba mo pang device, i-on ang pag-sync</translation>
 <translation id="5864174910718532887">Mga detalye: Pinagbukud-bukod ayon sa pangalan ng site</translation>
 <translation id="5864419784173784555">Naghihintay ng isa pang download…</translation>
 <translation id="5869522115854928033">Mga naka-save na password</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Sinara ang panel ng navigation</translation>
 <translation id="8103578431304235997">Tab na Incognito</translation>
 <translation id="8105951947646329362">Magmungkahi ng mga nauugnay na page</translation>
+<translation id="8109613176066109935">Para makuha ang iyong mga bookmark sa lahat ng device mo, i-on ang pag-sync</translation>
 <translation id="8116925261070264013">Naka-mute</translation>
 <translation id="813082847718468539">Tingnan ang impormasyon ng site</translation>
 <translation id="8168435359814927499">Content</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">I-edit</translation>
 <translation id="9070377983101773829">Simulan ang paghahanap gamit ang boses</translation>
 <translation id="9071742570345586758">Upang tingnan ang virtual reality na content, i-install ang Mga Serbisyo ng Google VR</translation>
+<translation id="9074336505530349563">Para makakuha ng naka-personalize na content na iminumungkahi ng Google, mag-sign in at i-on ang pag-sync</translation>
 <translation id="9086455579313502267">Hindi magawang ma-access ang network</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB na mga na-download</translation>
 <translation id="9100505651305367705">Mag-alok na ipakita ang mga artikulo sa pinasimpleng view, kapag sinusuportahan</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
index 9d78107..6d19917 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Suivant</translation>
 <translation id="1204037785786432551">Télécharger le lien</translation>
 <translation id="1206892813135768548">Copier le texte du lien</translation>
+<translation id="1208340532756947324">Activez la synchronisation pour accéder à vos données et les personnaliser sur tous vos appareils</translation>
 <translation id="1209206284964581585">Masquer pour le moment</translation>
 <translation id="123724288017357924">Actualiser page active et ignorer contenu en cache</translation>
 <translation id="124116460088058876">Plus de langues</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Parcourir</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> tente de s'associer</translation>
 <translation id="1994173015038366702">URL du site</translation>
+<translation id="2002537628803770967">Cartes de crédit et adresses utilisées dans Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> Ko par d'autres applis</translation>
 <translation id="2017836877785168846">Efface l'historique et les saisies semi-automatiques dans la barre d'adresse.</translation>
 <translation id="2021896219286479412">Commandes du site en plein écran</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> secondes restantes</translation>
 <translation id="2781151931089541271">1 seconde restante</translation>
 <translation id="2810645512293415242">Page simplifiée pour économiser des données et accélérer le chargement.</translation>
+<translation id="2818669890320396765">Connectez-vous et activez la synchronisation pour accéder à vos favoris sur tous vos appareils</translation>
 <translation id="2836148919159985482">Appuyez sur le bouton Retour pour quitter le mode plein écran.</translation>
 <translation id="2842985007712546952">Dossier parent</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Chercher dans l'historique</translation>
 <translation id="3552151358455404883">Gérer la synchronisation et la personnalisation de Chrome dans les <ph name="BEGIN_LINK1" />paramètres<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Ajouter aux contacts</translation>
+<translation id="3568688522516854065">Connectez-vous et activez la synchronisation pour accéder à vos onglets sur vos autres appareils</translation>
 <translation id="3587482841069643663">Tous</translation>
 <translation id="3590487821116122040">Données de site stockées, que Chrome ne considère pas comme importantes (par exemple, pour des sites sans paramètres enregistrés ou que vous ne consultez pas souvent)</translation>
 <translation id="3599863153486145794">Efface l'historique de tous les appareils sur lesquels vous êtes connecté à votre compte Google. Ce dernier peut conserver d'autres formes d'historique de navigation sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Consulter vos paramètres sur l'écran suivant</translation>
 <translation id="4195643157523330669">Ouvrir dans un nouvel onglet</translation>
 <translation id="4198423547019359126">Aucun emplacement de téléchargements disponible</translation>
+<translation id="4209895695669353772">Activez la synchronisation pour obtenir des suggestions de contenu personnalisées de la part de Google</translation>
 <translation id="4226663524361240545">L'appareil vibrera en cas de notifications.</translation>
 <translation id="4242533952199664413">Ouvrir les paramètres</translation>
 <translation id="424864128008805179">Se déconnecter de Chrome ?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Ajouté aux favoris dans "<ph name="FOLDER_NAME" />"</translation>
 <translation id="4453340223357552416">Le fichier <ph name="FILE_NAME" /> a bien été téléchargé dans <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Coupe le son d'un site spécifique.</translation>
+<translation id="4472118726404937099">Connectez-vous et activez la synchronisation pour accéder à vos données et les personnaliser sur tous vos appareils</translation>
 <translation id="4479647676395637221">Demander avant d'autoriser des sites à utiliser ma caméra (recommandé)</translation>
 <translation id="4487967297491345095">Toutes les données de l'application Chrome seront supprimées de façon définitive, y compris les fichiers, paramètres, comptes, bases de données, etc.</translation>
 <translation id="4508440807153586353">Seule une personne connaissant votre phrase secrète peut lire vos données chiffrées. La phrase secrète ne nous est pas envoyée et nous ne la stockons pas. Si vous l'oubliez, vous devrez réinitialiser la synchronisation. <ph name="BEGIN_LINK" />En savoir plus<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Les données sélectionnées ont été supprimées de Chrome et des appareils synchronisés.
 
 Votre compte Google conserve peut-être d'autres contenus d'historique de navigation sur la page <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> concernant, par exemple, vos recherches ou vos activités via d'autres services Google.</translation>
-<translation id="4526249700380860531">Afficher et gérer les mots de passe enregistrés sur <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Sélectionner un dossier</translation>
 <translation id="4550003330909367850">Pour afficher ou copier votre mot de passe ici, définissez le verrouillage de l'écran sur cet appareil.</translation>
 <translation id="4558311620361989323">Raccourcis de pages Web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Datant de plus de 30 jours</translation>
 <translation id="5858741533101922242">Impossible d'activer l'adaptateur Bluetooth dans Chrome</translation>
 <translation id="5860033963881614850">Désactivé</translation>
+<translation id="5862731021271217234">Activez la synchronisation pour accéder à vos onglets sur vos autres appareils</translation>
 <translation id="5864174910718532887">Détails : tri effectué par nom de site</translation>
 <translation id="5864419784173784555">En attente d'un autre téléchargement…</translation>
 <translation id="5869522115854928033">Mots de passe enregistrés</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Panneau de navigation fermé</translation>
 <translation id="8103578431304235997">Onglet de navigation privée</translation>
 <translation id="8105951947646329362">Suggérer des pages associées</translation>
+<translation id="8109613176066109935">Activez la synchronisation pour accéder à vos favoris sur tous vos appareils</translation>
 <translation id="8116925261070264013">Son coupé</translation>
 <translation id="813082847718468539">Afficher des informations à propos du site</translation>
 <translation id="8168435359814927499">Contenu</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Modifier</translation>
 <translation id="9070377983101773829">Démarrer la recherche vocale</translation>
 <translation id="9071742570345586758">Pour afficher des contenus de réalité virtuelle, installez les services Google VR</translation>
+<translation id="9074336505530349563">Connectez-vous et activez la synchronisation pour obtenir des suggestions de contenu personnalisées de la part de Google</translation>
 <translation id="9086455579313502267">Impossible d'accéder au réseau.</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> Ko téléchargé(s)</translation>
 <translation id="9100505651305367705">Proposer une version simplifiée des articles, si celle-ci est compatible</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
index e0e87c22..84a50643 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">अगला</translation>
 <translation id="1204037785786432551">डाउनलोड करने का लिंक</translation>
 <translation id="1206892813135768548">लिंक लेख को कॉपी करें</translation>
+<translation id="1208340532756947324">सभी डिवाइस पर सिंक करने और मनमुताबिक बनाने के लिए, 'सिंक करें' को चालू करें</translation>
 <translation id="1209206284964581585">अभी छिपाएं</translation>
 <translation id="123724288017357924">कैश सामग्री को अनदेखा कर, मौजूदा पेज फिर लोड करें</translation>
 <translation id="124116460088058876">अधिक भाषाएं</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">ब्राउज़ करें</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> युग्मित करना चाहता है</translation>
 <translation id="1994173015038366702">साइट URL</translation>
+<translation id="2002537628803770967">Google Pay का इस्तेमाल करने वाले क्रेडिट कार्ड और पते</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> केबी अन्य ऐप्लिकेशन</translation>
 <translation id="2017836877785168846">इतिहास साफ़ करता है और पता बार में स्वत: पूर्णता को साफ़ करता है.</translation>
 <translation id="2021896219286479412">पूरी स्क्रीन के साइट नियंत्रण</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> सेकंड शेष</translation>
 <translation id="2781151931089541271">1 सेकंड शेष</translation>
 <translation id="2810645512293415242">डेटा बचाने और तेज़ी से लोड करने के लिए आसान बनाया गया पेज.</translation>
+<translation id="2818669890320396765">अपने सभी डिवाइस पर अपने बुकमार्क पाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें</translation>
 <translation id="2836148919159985482">पूर्ण स्क्रीन से बाहर निकलने के लिए वापस जाएं बटन स्पर्श करें.</translation>
 <translation id="2842985007712546952">मूल फ़ोल्‍डर</translation>
 <translation id="2870560284913253234">साइट</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">अपने इतिहास में खोजें</translation>
 <translation id="3552151358455404883"><ph name="BEGIN_LINK1" />सेटिंग<ph name="END_LINK1" /> में जाकर Chrome सिंक और वैयक्तिकरण प्रबंधित करें</translation>
 <translation id="3557336313807607643">संपर्कों में जोड़ें</translation>
+<translation id="3568688522516854065">अपने दूसरे डिवाइस से अपने टैब पाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें</translation>
 <translation id="3587482841069643663">सभी</translation>
 <translation id="3590487821116122040">ऐसी 'साइट मेमोरी' जो Chrome के हिसाब से ज़रूरी नहीं है (जैसे कि ऐसी साइट जिनमें कोई भी सेटिंग नहीं सेव की गई है या जिन पर आप अक्सर नहीं जाते हैं)</translation>
 <translation id="3599863153486145794">प्रवेश किए हुए सभी डिवाइसों से इतिहास साफ़ कर देता है. आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर अन्य प्रकार के ब्राउज़िंग इतिहास हो सकतेे हैं.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">अगली स्क्रीन पर अपनी सेटिंग देखें</translation>
 <translation id="4195643157523330669">नए टैब में खोलें</translation>
 <translation id="4198423547019359126">डाउनलोड करने की कोई जगह उपलब्ध नहीं है</translation>
+<translation id="4209895695669353772">Google की ओर से सुझाई गई मनमुताबिक सामग्री पाने के लिए, 'सिंक करें' को चालू करें</translation>
 <translation id="4226663524361240545">नोटिफ़िकेशन से डिवाइस में कंपन हो सकता है</translation>
 <translation id="4242533952199664413">सेटिंग खोलें</translation>
 <translation id="424864128008805179">Chrome से प्रस्थान करें?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> में बुकमार्क किया गया</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> को <ph name="PRODUCT_NAME" /> में डाउनलोड किया गया</translation>
 <translation id="4468959413250150279">किसी खास साइट के लिए आवाज़ बंद करें.</translation>
+<translation id="4472118726404937099">सभी डिवाइस पर सिंक करने और मनमुताबिक बनाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें</translation>
 <translation id="4479647676395637221">साइट को अपने कैमरे का उपयोग करने देने से पहले अनुमति लेना आवश्यक बनाएं (अनुशंसित)</translation>
 <translation id="4487967297491345095">Chrome का सभी ऐप्लिकेशन डेटा हमेशा केे लिए हटा दिया जाएगा. इसमें सभी फ़ाइलें, सेटिंग, खाते, डेटाबेस आदि शामिल हैं.</translation>
 <translation id="4508440807153586353">आपके एन्क्रिप्ट किए गए डेटा को केवल वही व्यक्ति पढ़ सकता है जिसके पास आपका पासफ़्रेज़ है. Google द्वारा पासफ़्रेज़ भेजा या संग्रहित नहीं किया जाता. यदि आप अपना पासफ़्रेज़ भूल जाते हैं या यह सेटिंग बदलना चाहते हैं, तो आपको समन्वयन को रीसेट करना होगा. <ph name="BEGIN_LINK" />अधिक जानें<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">चुना गया डेटा Chrome और आपके सिंक किए गए डिवाइस से हटा दिया गया है.
 
 आपके Google खाते में <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> पर की जाने वाली खोजों और अन्य Google सेवाओं की गतिविधि जैसे दूसरी तरह के ब्राउज़िंग इतिहास मौजूद हो सकते हैं.</translation>
-<translation id="4526249700380860531">सहेजे गए पासवर्ड <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> पर देखें और प्रबंधित करें</translation>
 <translation id="4532845899244822526">फ़ोल्डर चुनें</translation>
 <translation id="4550003330909367850">यहां अपना पासवर्ड देखने या उसे कॉपी करने के लिए, इस डिवाइस पर स्क्रीन लॉक सेट करें.</translation>
 <translation id="4558311620361989323">वेबपेज शॉर्टकट</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">30 दिनों से ज़्यादा पुराना</translation>
 <translation id="5858741533101922242">Chrome, ब्लूटूथ एडाप्टर को चालू नहीं कर सका</translation>
 <translation id="5860033963881614850">बंद</translation>
+<translation id="5862731021271217234">अपने दूसरे डिवाइस से अपने टैब पाने के लिए, 'सिंक करें' को चालू करें</translation>
 <translation id="5864174910718532887">जानकारी: 'साइट नाम' के अनुसार क्रम से लगाया गया</translation>
 <translation id="5864419784173784555">दूसरे डाउनलोड का इंतज़ार किया जा रहा है…</translation>
 <translation id="5869522115854928033">सहेजे गए पासवर्ड</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">मार्गदर्शक फलक बंद है</translation>
 <translation id="8103578431304235997">गुप्त टैब</translation>
 <translation id="8105951947646329362">मिलते-जुलते पेज सुझाएं</translation>
+<translation id="8109613176066109935">अपने सभी डिवाइस पर अपने बुकमार्क पाने के लिए, 'सिंक करें' को चालू करें</translation>
 <translation id="8116925261070264013">आवाज़ बंद की गई</translation>
 <translation id="813082847718468539">साइट जानकारी देखें</translation>
 <translation id="8168435359814927499">सामग्री</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">संपादित करें</translation>
 <translation id="9070377983101773829">बोलकर खोजें चालू करें</translation>
 <translation id="9071742570345586758">आभासी वास्तविकता वाली सामग्री देखने के लिए, Google VR सेवाएं इंस्टॉल करें</translation>
+<translation id="9074336505530349563">Google की ओर से सुझाई गई मनमुताबिक सामग्री पाने के लिए, साइन इन करें और 'सिंक करें' को चालू करें</translation>
 <translation id="9086455579313502267">नेटवर्क तक पहुंचने में असमर्थ</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> केबी डाउलनोड किया गया</translation>
 <translation id="9100505651305367705">अगर सुविधा उपलब्ध है, तो लेखों को सरल बनाए गए व्यू में दिखाना ऑफ़र करें</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
index 5e228e2d..38e644e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Sljedeće</translation>
 <translation id="1204037785786432551">Preuzmi vezu</translation>
 <translation id="1206892813135768548">Kopiraj tekst veze</translation>
+<translation id="1208340532756947324">Da biste sinkronizirali i prilagodili više uređaja, uključite sinkronizaciju</translation>
 <translation id="1209206284964581585">Sakrij za sad</translation>
 <translation id="123724288017357924">Ponovno učitavanje trenutačne stranice uz zanemarivanje sadržaja iz predmemorije</translation>
 <translation id="124116460088058876">Više jezika</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Pregledaj</translation>
 <translation id="1993768208584545658">Web-lokacija <ph name="SITE" /> želi se upariti</translation>
 <translation id="1994173015038366702">URL web-lokacije</translation>
+<translation id="2002537628803770967">Kreditne kartice i adrese s Google Paya</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB ostale aplikacije</translation>
 <translation id="2017836877785168846">Briše povijest i automatsko dovršavanje u adresnoj traci.</translation>
 <translation id="2021896219286479412">Kontrole web-lokacije na cijelom zaslonu</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Preostalo sekundi: <ph name="SECONDS" /></translation>
 <translation id="2781151931089541271">Još 1 s</translation>
 <translation id="2810645512293415242">Pojednostavljena stranica štedi podatke i učitava se brže.</translation>
+<translation id="2818669890320396765">Da bi se vaše oznake prikazale na svim vašim uređajima, prijavite se i uključite sinkronizaciju</translation>
 <translation id="2836148919159985482">Dodirnite gumb Natrag da biste zatvorili prikaz na cijelom zaslonu.</translation>
 <translation id="2842985007712546952">Nadređena mapa</translation>
 <translation id="2870560284913253234">Web lokacija</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Pretraži povijest</translation>
 <translation id="3552151358455404883">Sinkronizacijom Chromea i prilagodbom možete upravljati na stranici <ph name="BEGIN_LINK1" />Postavke<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Dodaj u kontakte</translation>
+<translation id="3568688522516854065">Da bi se prikazale kartice s vaših ostalih uređaja, prijavite se i uključite sinkronizaciju</translation>
 <translation id="3587482841069643663">Sve</translation>
 <translation id="3590487821116122040">Pohrana web-lokacije koju Chrome ne smatra važnom (primjerice web-lokacije koje nemaju spremljene postavke ili koje ne posjećujete često)</translation>
 <translation id="3599863153486145794">Briše povijest na svim uređajima na kojima ste prijavljeni. Na vašem Google računu možda postoje drugi oblici povijesti pregledavanja na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Pregledajte svoje postavke na sljedećem zaslonu</translation>
 <translation id="4195643157523330669">Otvori u novoj kartici</translation>
 <translation id="4198423547019359126">Lokacije preuzimanja nisu dostupne</translation>
+<translation id="4209895695669353772">Uključite sinkronizaciju ako želite da vam Google predlaže prilagođene sadržaje</translation>
 <translation id="4226663524361240545">Obavijesti mogu uključiti vibriranje uređaja</translation>
 <translation id="4242533952199664413">Otvori postavke</translation>
 <translation id="424864128008805179">Želite li se odjaviti s Chromea?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Oznaka dodana u mapu <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Datoteka <ph name="FILE_NAME" /> preuzeta u pregledniku <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Isključivanje zvuka za određenu web-lokaciju.</translation>
+<translation id="4472118726404937099">Ako želite sinkronizirati i prilagoditi više uređaja, prijavite se i uključite sinkronizaciju</translation>
 <translation id="4479647676395637221">Web-lokacije moraju tražiti dopuštenje za pristup kameri (preporučeno)</translation>
 <translation id="4487967297491345095">Svi Chromeovi podaci aplikacije trajno će se izbrisati. To uključuje sve datoteke, postavke, račune, baze podataka i slično.</translation>
 <translation id="4508440807153586353">Samo osoba koja ima vašu šifru može čitati vaše kriptirane podatke. Šifra se ne šalje Googleu i ne pohranjuje na njemu. Ako zaboravite šifru ili želite promijeniti tu postavku, morat ćete poništiti sinkronizaciju. <ph name="BEGIN_LINK" />Saznajte više<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Odabrani podaci uklonjeni su iz Chromea i sa sinkroniziranih uređaja.
 
 Vaš Google račun može sadržavati druge oblike povijesti pregledavanja, na primjer pretraživanja i aktivnosti s drugih Googleovih usluga, na stranici <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Prikaz spremljenih zaporki i upravljanje njima na <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Odabir mape</translation>
 <translation id="4550003330909367850">Da biste ovdje pregledali ili kopirali zaporku, postavite zaključavanje zaslona na uređaju.</translation>
 <translation id="4558311620361989323">Prečaci web-stranice</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Starije od 30 dana</translation>
 <translation id="5858741533101922242">Chrome ne može uključiti Bluetooth adapter</translation>
 <translation id="5860033963881614850">Isključeno</translation>
+<translation id="5862731021271217234">Da bi se prikazale kartice s vaših ostalih uređaja, uključite sinkronizaciju</translation>
 <translation id="5864174910718532887">Pojedinosti: poredano po nazivu web-lokacije</translation>
 <translation id="5864419784173784555">Čekanje na još jedno preuzimanje…</translation>
 <translation id="5869522115854928033">Spremljene zaporke</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigacijska ploča zatvorena</translation>
 <translation id="8103578431304235997">Anonimna kartica</translation>
 <translation id="8105951947646329362">Predloži povezane stranice</translation>
+<translation id="8109613176066109935">Da bi se vaše oznake prikazale na svim vašim uređajima, uključite sinkronizaciju</translation>
 <translation id="8116925261070264013">Bez zvuka</translation>
 <translation id="813082847718468539">Prikaz informacija o web-mjestu</translation>
 <translation id="8168435359814927499">Sadržaj</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Uredi</translation>
 <translation id="9070377983101773829">Pokretanje glasovnog pretraživanja</translation>
 <translation id="9071742570345586758">Da biste gledali sadržaj virtualne stvarnosti, instalirajte Googleove VR usluge</translation>
+<translation id="9074336505530349563">Prijavite se i uključite sinkronizaciju ako želite da vam Google predlaže prilagođene sadržaje</translation>
 <translation id="9086455579313502267">Nije moguće pristupiti mreži</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB preuzimanja</translation>
 <translation id="9100505651305367705">Nuđenje prikazivanja članaka u pojednostavljenom prikazu kada je to podržano</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
index d185d1e4..853e4b0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Következő</translation>
 <translation id="1204037785786432551">Link letöltése</translation>
 <translation id="1206892813135768548">Link szövegének másolása</translation>
+<translation id="1208340532756947324">Az eszközök közötti szinkronizáláshoz és személyre szabáshoz kapcsolja be a szinkronizálást</translation>
 <translation id="1209206284964581585">Elrejtés most</translation>
 <translation id="123724288017357924">Oldal újratöltése a gyorsítótárat figyelmen kívül hagyva</translation>
 <translation id="124116460088058876">További nyelvek…</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Böngészés</translation>
 <translation id="1993768208584545658">A(z) <ph name="SITE" /> párosítást szeretne végrehajtani</translation>
 <translation id="1994173015038366702">Webhely URL-je</translation>
+<translation id="2002537628803770967">A Google Pay szolgáltatást használó hitelkártyák és címek</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB más alkalmazások által</translation>
 <translation id="2017836877785168846">Törli a címsávban található előzményeket és automatikus kiegészítéseket.</translation>
 <translation id="2021896219286479412">Teljes képernyős oldal vezérlői</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> másodperc van hátra</translation>
 <translation id="2781151931089541271">1 másodperc van hátra</translation>
 <translation id="2810645512293415242">Egyszerűsített oldal az alacsonyabb adathasználat és a gyorsabb betöltés érdekében.</translation>
+<translation id="2818669890320396765">Ha az összes eszközén szeretné elérni könyvjelzőit, jelentkezzen be, és kapcsolja be a szinkronizálást</translation>
 <translation id="2836148919159985482">A teljes képernyős megjelenítésből való kilépéshez koppintson a vissza gombra.</translation>
 <translation id="2842985007712546952">Szülőmappa</translation>
 <translation id="2870560284913253234">Webhely</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Keresés az előzményekben</translation>
 <translation id="3552151358455404883">A Chrome-szinkronizálást és a személyre szabást a <ph name="BEGIN_LINK1" />Beállításokban<ph name="END_LINK1" /> kezelheti</translation>
 <translation id="3557336313807607643">Hozzáadás a névjegyekhez</translation>
+<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="3590487821116122040">A Chrome által nem fontosnak ítélt webhelytárhely (például a mentett beállítások nélküli vagy ritkán megnyitott webhelyek)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Tekintse át a beállításokat a következő képernyőn</translation>
 <translation id="4195643157523330669">Megnyitás új lapon</translation>
 <translation id="4198423547019359126">Nem áll rendelkezésre letöltési hely</translation>
+<translation id="4209895695669353772">A Google által javasolt, személyre szabott tartalmak fogadásához kapcsolja be a szinkronizálást</translation>
 <translation id="4226663524361240545">Az értesítések miatt rezeghet az eszköz</translation>
 <translation id="4242533952199664413">Beállítások megnyitása</translation>
 <translation id="424864128008805179">Kijelentkezés a Chrome-ból</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Könyvjelzők közé téve itt: <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">A(z) <ph name="PRODUCT_NAME" /> letöltötte a következő fájlt: <ph name="FILE_NAME" /></translation>
 <translation id="4468959413250150279">Egy adott webhely hangjának némítása.</translation>
+<translation id="4472118726404937099">Az eszközök közötti szinkronizáláshoz és személyre szabáshoz jelentkezzen be, és kapcsolja be a szinkronizálást</translation>
 <translation id="4479647676395637221">Kérdezzen rá, mielőtt engedélyezné a webhelyek számára a kamera használatát (ajánlott)</translation>
 <translation id="4487967297491345095">A Chrome összes alkalmazásadata véglegesen törlődik, beleértve a fájlokat, beállításokat, fiókokat, adatbázisokat stb.</translation>
 <translation id="4508440807153586353">Titkosított adatait csak az olvashatja el, aki rendelkezik ö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ítani szeretné 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>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">A kiválasztott adatok el lettek távolítva a Chrome-ból és a szinkronizált eszközökről.
 
 Előfordulhat, hogy Google-fiókjában (a <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> címen) még szerepelnek a böngészési előzmények egyéb formái, így például a keresések és egyéb tevékenységek más Google-szolgáltatásokból.</translation>
-<translation id="4526249700380860531">A mentett jelszavak megtekintése és kezelése a <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> címen</translation>
 <translation id="4532845899244822526">Mappa kiválasztása</translation>
 <translation id="4550003330909367850">A jelszó megtekintéséhez vagy idemásolásához állítson be képernyőzárat az eszközön.</translation>
 <translation id="4558311620361989323">Weboldalakkal kapcsolatos billentyűparancsok</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">30 napnál régebbi</translation>
 <translation id="5858741533101922242">A Chrome nem tudja bekapcsolni a Bluetooth-adaptert</translation>
 <translation id="5860033963881614850">Kikapcsolva</translation>
+<translation id="5862731021271217234">Ha a többi eszközén lévő lapjait is szeretné elérni, kapcsolja be a szinkronizálást</translation>
 <translation id="5864174910718532887">Részletek: Webhelynév szerinti rendezés</translation>
 <translation id="5864419784173784555">Várakozás a másik letöltésre…</translation>
 <translation id="5869522115854928033">Mentett jelszavak</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigációs panel bezárva</translation>
 <translation id="8103578431304235997">Inkognitólap</translation>
 <translation id="8105951947646329362">Kapcsolódó oldalak ajánlása</translation>
+<translation id="8109613176066109935">Ha az összes eszközén szeretné elérni könyvjelzőit, kapcsolja be a szinkronizálást</translation>
 <translation id="8116925261070264013">Némítva</translation>
 <translation id="813082847718468539">Az oldalinformációk megtekintése</translation>
 <translation id="8168435359814927499">Tartalom</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Szerkesztés</translation>
 <translation id="9070377983101773829">Hangalapú keresés indítása</translation>
 <translation id="9071742570345586758">A virtuális valósággal kapcsolatos tartalmak megtekintéséhez telepítse a Google VR-szolgáltatásait</translation>
+<translation id="9074336505530349563">A Google által javasolt, személyre szabott tartalmak fogadásához jelentkezzen be, és kapcsolja be a szinkronizálást</translation>
 <translation id="9086455579313502267">Nem sikerült elérni a hálózatot</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB letöltve</translation>
 <translation id="9100505651305367705">A cikkek egyszerűsített nézetben való megjelenítésének felajánlása (ha támogatott a funkció)</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
index 4e855e4..681fcbc 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Berikutnya</translation>
 <translation id="1204037785786432551">Download link</translation>
 <translation id="1206892813135768548">Salin teks link</translation>
+<translation id="1208340532756947324">Untuk menyinkronkan dan mempersonalisasikan di berbagai perangkat, aktifkan sinkronisasi</translation>
 <translation id="1209206284964581585">Sembunyikan sekarang</translation>
 <translation id="123724288017357924">Memuat ulang halaman, mengabaikan konten dalam cache</translation>
 <translation id="124116460088058876">Bahasa lainnya</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Jelajahi</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> ingin menyandingkan</translation>
 <translation id="1994173015038366702">URL situs</translation>
+<translation id="2002537628803770967">Kartu kredit dan alamat yang menggunakan Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB aplikasi lain</translation>
 <translation id="2017836877785168846">Hapus histori dan pelengkapan otomatis di kolom URL.</translation>
 <translation id="2021896219286479412">Kontrol situs layar penuh</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> detik lagi</translation>
 <translation id="2781151931089541271">1 detik lagi</translation>
 <translation id="2810645512293415242">Halaman disederhanakan agar data disimpan dan dimuat lebih cepat.</translation>
+<translation id="2818669890320396765">Untuk mendapatkan bookmark di semua perangkat Anda, login dan aktifkan sinkronisasi</translation>
 <translation id="2836148919159985482">Ketuk tombol kembali untuk keluar dari mode layar penuh.</translation>
 <translation id="2842985007712546952">Folder induk</translation>
 <translation id="2870560284913253234">Situs</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Telusuri histori penggunaan</translation>
 <translation id="3552151358455404883">Kelola personalisasi dan Sinkronisasi Chrome di <ph name="BEGIN_LINK1" />Setelan<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Tambahkan ke kontak</translation>
+<translation id="3568688522516854065">Untuk mendapatkan tab dari perangkat Anda yang lain, login dan aktifkan sinkronisasi</translation>
 <translation id="3587482841069643663">Semua</translation>
 <translation id="3590487821116122040">Penyimpanan situs yang dianggap tidak penting oleh Chrome (misalnya situs yang tidak memiliki setelan penyimpanan atau situs yang tidak sering Anda kunjungi)</translation>
 <translation id="3599863153486145794">Menghapus histori dari semua perangkat yang dibuat login. Akun Google Anda mungkin memiliki bentuk histori browsing lain di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Lihat setelan Anda di layar berikutnya</translation>
 <translation id="4195643157523330669">Buka di tab baru</translation>
 <translation id="4198423547019359126">Tidak tersedia lokasi download</translation>
+<translation id="4209895695669353772">Untuk mendapatkan konten hasil personalisasi yang disarankan oleh Google, aktifkan sinkronisasi</translation>
 <translation id="4226663524361240545">Notifikasi dapat membuat perangkat bergetar</translation>
 <translation id="4242533952199664413">Buka setelan</translation>
 <translation id="424864128008805179">Keluar dari Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Dibookmark ke <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> didownload di <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Mematikan suara untuk situs tertentu.</translation>
+<translation id="4472118726404937099">Untuk menyinkronkan dan mempersonalisasi di berbagai perangkat, login dan aktifkan sinkronisasi</translation>
 <translation id="4479647676395637221">Minta izin terlebih dahulu sebelum memungkinkan situs menggunakan kamera Anda (disarankan)</translation>
 <translation id="4487967297491345095">Semua data aplikasi Chrome akan dihapus secara permanen. Hal ini meliputi semua file, setelan, akun, database, dll.</translation>
 <translation id="4508440807153586353">Hanya mereka yang memiliki frasa sandi Anda yang dapat membaca data yang telah dienkripsi. Frasa sandi tidak akan dikirim ke atau disimpan oleh Google. Jika lupa frasa sandi atau ingin mengubah setelan ini, Anda perlu menyetel ulang sinkronisasi. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Data yang dipilih telah dihapus dari Chrome dan perangkat yang disinkronkan.
 
 Akun Google Anda mungkin memiliki bentuk histori browsing lain seperti penelusuran dan aktivitas dari layanan Google lainnya di <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Melihat dan mengelola sandi yang tersimpan di <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Pilih folder</translation>
 <translation id="4550003330909367850">Untuk melihat atau menyalin sandi di sini, setel kunci layar di perangkat ini.</translation>
 <translation id="4558311620361989323">Pintasan halaman web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Lebih dari 30 hari</translation>
 <translation id="5858741533101922242">Chrome tidak dapat mengaktifkan adaptor Bluetooth</translation>
 <translation id="5860033963881614850">Nonaktif</translation>
+<translation id="5862731021271217234">Untuk mendapatkan tab dari perangkat Anda yang lain, aktifkan sinkronisasi</translation>
 <translation id="5864174910718532887">Detail: Diurutkan menurut nama situs</translation>
 <translation id="5864419784173784555">Menunggu proses download lain…</translation>
 <translation id="5869522115854928033">Sandi tersimpan</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Panel navigasi ditutup</translation>
 <translation id="8103578431304235997">Tab Penyamaran</translation>
 <translation id="8105951947646329362">Sarankan halaman terkait</translation>
+<translation id="8109613176066109935">Untuk mendapatkan bookmark di semua perangkat Anda, aktifkan sinkronisasi</translation>
 <translation id="8116925261070264013">Dinonaktifkan</translation>
 <translation id="813082847718468539">Lihat informasi situs</translation>
 <translation id="8168435359814927499">Konten</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Edit</translation>
 <translation id="9070377983101773829">Mulai penelusuran suara</translation>
 <translation id="9071742570345586758">Untuk melihat konten realitas maya, instal Layanan Google VR</translation>
+<translation id="9074336505530349563">Untuk mendapatkan konten hasil personalisasi yang disarankan oleh Google, login dan aktifkan sinkronisasi</translation>
 <translation id="9086455579313502267">Tidak dapat mengakses jaringan</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB didownload</translation>
 <translation id="9100505651305367705">Tawarkan untuk menampilkan artikel dalam tampilan sederhana, jika didukung</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
index cd4ef0a..7f92c6f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Avanti</translation>
 <translation id="1204037785786432551">Scarica link</translation>
 <translation id="1206892813135768548">Copia testo link</translation>
+<translation id="1208340532756947324">Attiva la sincronizzazione per sincronizzare e personalizzare tutti i dispositivi</translation>
 <translation id="1209206284964581585">Nascondi per ora</translation>
 <translation id="123724288017357924">Ricarica pag. corr. Ignora i contenuti nella cache</translation>
 <translation id="124116460088058876">Altre lingue</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Esplora</translation>
 <translation id="1993768208584545658">Il sito <ph name="SITE" /> desidera accoppiarsi</translation>
 <translation id="1994173015038366702">URL sito</translation>
+<translation id="2002537628803770967">Carte di credito e indirizzi che utilizzano Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kB per altre app</translation>
 <translation id="2017836877785168846">Consente di cancellare la cronologia e i completamenti automatici nella barra degli indirizzi.</translation>
 <translation id="2021896219286479412">Controlli sito a schermo intero</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sec rimanenti</translation>
 <translation id="2781151931089541271">1 sec rimanente</translation>
 <translation id="2810645512293415242">Pagina semplificata per risparmiare dati e caricarla più velocemente.</translation>
+<translation id="2818669890320396765">Accedi e attiva la sincronizzazione per trovare i tuoi preferiti su tutti i dispositivi</translation>
 <translation id="2836148919159985482">Tocca il pulsante Indietro per uscire dalla modalità a schermo intero.</translation>
 <translation id="2842985007712546952">Cartella principale</translation>
 <translation id="2870560284913253234">Sito</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Cerca nella cronologia</translation>
 <translation id="3552151358455404883">Gestisci la funzione Sincronizzazione Chrome e la personalizzazione nelle <ph name="BEGIN_LINK1" />Impostazioni<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Aggiungi ai contatti</translation>
+<translation id="3568688522516854065">Accedi e attiva la sincronizzazione per trovare le tue schede degli altri dispositivi</translation>
 <translation id="3587482841069643663">Tutti</translation>
 <translation id="3590487821116122040">Memoria utilizzata da siti che Chrome non ritiene importanti (ad esempio siti senza impostazioni salvate o che non visiti spesso)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Controlla le impostazioni nella prossima schermata</translation>
 <translation id="4195643157523330669">Apri in un'altra scheda</translation>
 <translation id="4198423547019359126">Nessun percorso di download disponibile</translation>
+<translation id="4209895695669353772">Per ricevere contenuti suggeriti appositamente per te da Google, attiva la sincronizzazione</translation>
 <translation id="4226663524361240545">Le notifiche possono far vibrare il dispositivo</translation>
 <translation id="4242533952199664413">Apri le impostazioni</translation>
 <translation id="424864128008805179">Uscire da Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Preferito aggiunto in: <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> scaricato in <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Disattiva l'audio per un sito specifico.</translation>
+<translation id="4472118726404937099">Accedi e attiva la sincronizzazione per sincronizzare e personalizzare tutti i dispositivi</translation>
 <translation id="4479647676395637221">Chiedi conferma prima di consentire ai siti di utilizzare la videocamera (opzione consigliata)</translation>
 <translation id="4487967297491345095">Tutti i dati delle app di Chrome saranno eliminati definitivamente. Sono inclusi tutti i file, le impostazioni, gli account, i database e così via.</translation>
 <translation id="4508440807153586353">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>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">I dati selezionati sono stati rimossi da Chrome e dai dispositivi sincronizzati.
 
 Il tuo account Google potrebbe avere altre forme di cronologia di navigazione, ad esempio ricerche e attività, di altri servizi Google alla pagina <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Controlla e gestisci le password salvate all'indirizzo <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Scegli cartella</translation>
 <translation id="4550003330909367850">Per visualizzare o copiare la password qui, imposta il blocco schermo sul dispositivo.</translation>
 <translation id="4558311620361989323">Scorciatoie delle pagine web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Oltre 30 giorni fa</translation>
 <translation id="5858741533101922242">Chrome non riesce ad attivare l'adattatore Bluetooth</translation>
 <translation id="5860033963881614850">Off</translation>
+<translation id="5862731021271217234">Attiva la sincronizzazione per trovare le tue schede degli altri dispositivi</translation>
 <translation id="5864174910718532887">Dettagli: ordinati per nome del sito</translation>
 <translation id="5864419784173784555">In attesa di un altro download…</translation>
 <translation id="5869522115854928033">Password salvate</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Riquadro di navigazione chiuso</translation>
 <translation id="8103578431304235997">Scheda di navigazione in incognito</translation>
 <translation id="8105951947646329362">Suggerisci pagine correlate</translation>
+<translation id="8109613176066109935">Attiva la sincronizzazione per trovare i tuoi preferiti su tutti i dispositivi</translation>
 <translation id="8116925261070264013">Con audio disattivato</translation>
 <translation id="813082847718468539">Visualizza informazioni sul sito</translation>
 <translation id="8168435359814927499">Contenuti</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Modifica</translation>
 <translation id="9070377983101773829">Avvia la ricerca vocale</translation>
 <translation id="9071742570345586758">Per vedere contenuti di realtà virtuale, installa Servizi Google VR</translation>
+<translation id="9074336505530349563">Per ricevere contenuti suggeriti appositamente per te da Google, attiva la sincronizzazione</translation>
 <translation id="9086455579313502267">Impossibile accedere alla rete</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> kB per i download</translation>
 <translation id="9100505651305367705">Chiedi di mostrare gli articoli in visualizzazione semplificata, se supportata</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
index 4f84c69..0fd4c6e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">הבא</translation>
 <translation id="1204037785786432551">הורד קישור</translation>
 <translation id="1206892813135768548">העתק טקסט קישור</translation>
+<translation id="1208340532756947324">כדי לסנכרן ולהתאים אישית את החוויה במכשירים שונים, יש להפעיל את הסנכרון</translation>
 <translation id="1209206284964581585">הסתר בינתיים</translation>
 <translation id="123724288017357924">טען מחדש את הדף הנוכחי, תוך התעלמות מתוכן שמאוחסן בקובץ השמור</translation>
 <translation id="124116460088058876">שפות נוספות</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">דפדף</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> רוצה לבצע התאמה עם</translation>
 <translation id="1994173015038366702">כתובת אתר</translation>
+<translation id="2002537628803770967">‏כרטיסי אשראי וכתובות דרך Google Pay</translation>
 <translation id="200815880754187296">‏‎<ph name="KILOBYTES" /> KB ליישומים אחרים</translation>
 <translation id="2017836877785168846">מנקה את ההיסטוריה וההשלמות האוטומטיות בסרגל הכתובות</translation>
 <translation id="2021896219286479412">פקדי אתר במסך מלא</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">נותרו <ph name="SECONDS" /> שניות</translation>
 <translation id="2781151931089541271">נותרה שניה אחת</translation>
 <translation id="2810645512293415242">דף פשוט יותר שחוסך בנתונים ונטען מהר יותר.</translation>
+<translation id="2818669890320396765">כדי לקבל גישה אל הסימניות שלך בכל המכשירים יש להיכנס לחשבון ולהפעיל את הסנכרון</translation>
 <translation id="2836148919159985482">כדי לצאת ממסך מלא, גע בלחצן 'הקודם'.</translation>
 <translation id="2842985007712546952">תיקיית אב</translation>
 <translation id="2870560284913253234">אתר</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">חפש בהיסטוריה שלך</translation>
 <translation id="3552151358455404883">‏נהל את סנכרון Chrome וההתאמה האישית ב<ph name="BEGIN_LINK1" />הגדרות<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">הוסף לאנשי הקשר</translation>
+<translation id="3568688522516854065">כדי לקבל את הכרטיסיות מהמכשירים האחרים שלך, יש להיכנס לחשבון ולהפעיל את הסנכרון</translation>
 <translation id="3587482841069643663">הכל</translation>
 <translation id="3590487821116122040">‏נתוני אתר מאוחסנים ש-Chrome לא מחשיב כחשובים (לדוגמה, אתרים ללא הגדרות שמורות או כאלה שאינך מבקר בהם לעתים קרובות)</translation>
 <translation id="3599863153486145794">‏ניקוי ההיסטוריה מכל המכשירים שבהם המשתמש נכנס לחשבון. ייתכן שלחשבון Google שלך יהיו צורות אחרות של היסטוריית גלישה בכתובת <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">אפשר לבדוק את ההגדרות במסך הבא</translation>
 <translation id="4195643157523330669">פתח בכרטיסייה חדשה</translation>
 <translation id="4198423547019359126">אין מיקומים זמינים להורדה</translation>
+<translation id="4209895695669353772">‏כדי לקבל מ-Google הצעות לתוכן מותאם אישית, יש להפעיל את הסנכרון</translation>
 <translation id="4226663524361240545">רטט של המכשיר אפשרי כשמתקבלת הודעה</translation>
 <translation id="4242533952199664413">פתח את 'הגדרות'</translation>
 <translation id="424864128008805179">‏האם לצאת מ-Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">התווסף לסימניות ב-<ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">הורדה של <ph name="FILE_NAME" /> בוצעה ב-<ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">השתקת צלילים באתר ספציפי.</translation>
+<translation id="4472118726404937099">כדי לסנכרן ולהתאים אישית את החוויה במכשירים שונים, יש להיכנס לחשבון ולהפעיל את הסנכרון</translation>
 <translation id="4479647676395637221">שאל לפני שתאפשר לאתרים להשתמש במצלמה שלך (מומלץ)</translation>
 <translation id="4487967297491345095">‏כל נתוני היישומים של Chrome יימחקו לצמיתות, כולל כל הקבצים, ההגדרות, החשבונות, מסדי הנתונים וכו'</translation>
 <translation id="4508440807153586353">‏רק מי שיודע את ביטוי הסיסמה שלך יכול לקרוא את הנתונים המוצפנים. ביטוי הסיסמה לא נשלח אל Google והיא אינה מאחסנת אותו. אם תשכח את ביטוי הסיסמה או אם תרצה לשנות את ההגדרה הזו, יהיה עליך לאפס את הסינכרון. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">‏הנתונים שבחרת הוסרו מ-Chrome ומהמכשירים המסונכרנים.
 
 ייתכן שבכתובת <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> יש סוגים אחרים של היסטוריית גלישה בחשבון Google, כמו חיפושים ופעילות משירותי Google אחרים.</translation>
-<translation id="4526249700380860531">‏הצג ונהל סיסמאות שמורות ב-<ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">בחר תיקייה</translation>
 <translation id="4550003330909367850">כדי להציג או להעתיק את הסיסמה יש להגדיר נעילת מסך במכשיר זה.</translation>
 <translation id="4558311620361989323">קיצורי דרך בדפי אינטרנט</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">לפני יותר מ-30 ימים</translation>
 <translation id="5858741533101922242">‏לא ניתן להפעיל ב-Chrome את מתאם Bluetooth</translation>
 <translation id="5860033963881614850">כבוי</translation>
+<translation id="5862731021271217234">כדי לקבל את הכרטיסיות מהמכשירים האחרים שלך, יש להפעיל את הסנכרון</translation>
 <translation id="5864174910718532887">פרטים: ממוינות לפי שם האתר</translation>
 <translation id="5864419784173784555">ממתין להורדה נוספת…</translation>
 <translation id="5869522115854928033">סיסמאות שמורות</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">חלונית הניווט נסגרה</translation>
 <translation id="8103578431304235997">כרטיסיית גלישה בסתר</translation>
 <translation id="8105951947646329362">הצעת דפים קשורים</translation>
+<translation id="8109613176066109935">כדי שהסימניות יופיעו בכל המכשירים שלך, יש להפעיל את הסנכרון</translation>
 <translation id="8116925261070264013">מושתקים</translation>
 <translation id="813082847718468539">הצג נתוני אתר</translation>
 <translation id="8168435359814927499">תוכן</translation>
@@ -965,6 +972,7 @@
 <translation id="9065203028668620118">ערוך</translation>
 <translation id="9070377983101773829">התחל חיפוש קולי</translation>
 <translation id="9071742570345586758">‏עליך להתקין את Google VR Services כדי שתוכל להציג תוכן של מציאות מדומה</translation>
+<translation id="9074336505530349563">‏כדי לקבל מ-Google הצעות לתוכן מותאם אישית, יש להיכנס ולהפעיל את הסנכרון</translation>
 <translation id="9086455579313502267">אין אפשרות לגשת לרשת</translation>
 <translation id="9099018167121903954">‏‎<ph name="KILOBYTES" /> KB להורדות</translation>
 <translation id="9100505651305367705">יש להציע הצגת מאמרים בתצוגה פשוטה, כשהאפשרות נתמכת</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
index 6261cc0..5370a76 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">次へ</translation>
 <translation id="1204037785786432551">リンクをダウンロード</translation>
 <translation id="1206892813135768548">リンク テキストをコピー</translation>
+<translation id="1208340532756947324">複数の端末で独自の設定を同期して共有するには、同期を有効にします</translation>
 <translation id="1209206284964581585">今は表示しない</translation>
 <translation id="123724288017357924">キャッシュ コンテンツを無視して現在のページを再読み込みする</translation>
 <translation id="124116460088058876">その他の言語</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">閲覧</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> がペア設定を要求しています</translation>
 <translation id="1994173015038366702">サイトの URL</translation>
+<translation id="2002537628803770967">Google Pay に登録したクレジット カードと住所</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB を他のアプリで使用中</translation>
 <translation id="2017836877785168846">アドレスバーの履歴とオートコンプリート データを削除します。</translation>
 <translation id="2021896219286479412">全画面表示時のサイトの操作項目</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">残り <ph name="SECONDS" /> 秒</translation>
 <translation id="2781151931089541271">残り 1 秒</translation>
 <translation id="2810645512293415242">簡易版ページを使用してデータの保存と読み込みを高速化します。</translation>
+<translation id="2818669890320396765">お使いのどの端末でも同じブックマークを使用するには、ログインして同期を有効にします</translation>
 <translation id="2836148919159985482">全画面表示を終了するには戻るボタンをタップします。</translation>
 <translation id="2842985007712546952">親フォルダ</translation>
 <translation id="2870560284913253234">サイト</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">履歴を検索</translation>
 <translation id="3552151358455404883">Chrome の同期とカスタマイズを [<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />] で管理</translation>
 <translation id="3557336313807607643">連絡先に追加</translation>
+<translation id="3568688522516854065">他の端末と同じタブを使用するには、ログインして同期を有効にします</translation>
 <translation id="3587482841069643663">すべて</translation>
 <translation id="3590487821116122040">Chrome で重要度が低いと判断されるサイトのストレージ(設定を保存していないサイトやアクセス頻度の少ないサイトなど)</translation>
 <translation id="3599863153486145794">ログインしているすべての端末の履歴を削除します。お使いの Google アカウントの <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> に、他の形式の閲覧履歴が記録されている場合があります。</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">次の画面で設定を確認</translation>
 <translation id="4195643157523330669">新しいタブで開く</translation>
 <translation id="4198423547019359126">ダウンロードの保存先はありません</translation>
+<translation id="4209895695669353772">ユーザーに合わせた Google からのおすすめコンテンツを表示するには、同期を有効にします</translation>
 <translation id="4226663524361240545">通知を受け取ると端末が振動します</translation>
 <translation id="4242533952199664413">設定を開く</translation>
 <translation id="424864128008805179">Chrome からログアウトしますか?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">「<ph name="FOLDER_NAME" />」にブックマークしました</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> を <ph name="PRODUCT_NAME" /> でダウンロードしました</translation>
 <translation id="4468959413250150279">特定のサイトの音声をミュートします。</translation>
+<translation id="4472118726404937099">複数の端末で独自の設定を同期して共有するには、ログインして同期を有効にします</translation>
 <translation id="4479647676395637221">サイトにカメラの使用を許可する前に確認する(推奨)</translation>
 <translation id="4487967297491345095">Chrome のすべてのアプリデータを完全に削除します。削除されるデータには、すべてのファイル、設定、アカウント、データベースなどが含まれます。</translation>
 <translation id="4508440807153586353">パスフレーズを知っているユーザーだけが暗号化データを読み取ることができます。パスフレーズが Google に送信されたり Google で保存されたりすることはありません。パスフレーズを忘れた場合や、この設定を変更する場合は、同期をリセットする必要があります。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">選択したデータが Chrome から削除され、同期デバイスからも削除されました。
 
 他の Google サービスでの検索や操作など、Google アカウントの他の形式の閲覧履歴が <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> に残ることがあります。</translation>
-<translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> での保存パスワードの表示と管理</translation>
 <translation id="4532845899244822526">フォルダの選択</translation>
 <translation id="4550003330909367850">ここでパスワードを表示またはコピーするには、この端末に画面ロックを設定してください。</translation>
 <translation id="4558311620361989323">ウェブページのショートカット</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">30 日以上経過</translation>
 <translation id="5858741533101922242">Chrome から Bluetooth アダプタをオンにできません</translation>
 <translation id="5860033963881614850">オフ</translation>
+<translation id="5862731021271217234">他の端末と同じタブを使用するには、同期を有効にします</translation>
 <translation id="5864174910718532887">詳細: サイト名の順</translation>
 <translation id="5864419784173784555">別のダウンロードの完了待ちです…</translation>
 <translation id="5869522115854928033">保存したパスワード</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">ナビゲーションパネルを閉じました</translation>
 <translation id="8103578431304235997">シークレット タブ</translation>
 <translation id="8105951947646329362">関連ページを表示する</translation>
+<translation id="8109613176066109935">お使いのどの端末でも同じブックマークを使用するには、同期を有効にします</translation>
 <translation id="8116925261070264013">ミュート中</translation>
 <translation id="813082847718468539">サイト情報を表示</translation>
 <translation id="8168435359814927499">コンテンツ</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">編集</translation>
 <translation id="9070377983101773829">音声検索を開始</translation>
 <translation id="9071742570345586758">バーチャル リアリティ コンテンツを表示するには、Google VR サービスをインストールしてください</translation>
+<translation id="9074336505530349563">ユーザーに合わせた Google からのおすすめコンテンツを表示するには、ログインして同期を有効にします</translation>
 <translation id="9086455579313502267">ネットワークにアクセスできません</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB をダウンロードで使用中</translation>
 <translation id="9100505651305367705">記事の簡易表示がサポートされている場合、簡易表示を提案する</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
index 34b604f..3a958629 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">선택한 데이터가 Chrome 및 동기화된 기기에서 삭제되었습니다.
 
 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />에서 검색이나 기타 Google 서비스에서의 활동 등 내 Google 계정에 있는 다른 형식의 탐색 기록을 확인할 수 있습니다.</translation>
-<translation id="4526249700380860531"><ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" />에서 저장된 비밀번호 보기 및 관리</translation>
 <translation id="4532845899244822526">폴더 선택</translation>
 <translation id="4550003330909367850">여기에서 비밀번호를 보거나 복사하려면 이 기기에 화면 잠금을 설정하세요.</translation>
 <translation id="4558311620361989323">웹페이지 단축키</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
index 736a27b..e140090 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Toliau</translation>
 <translation id="1204037785786432551">Atsisiųsti nuorodą</translation>
 <translation id="1206892813135768548">Kopijuoti nuorodos tekstą</translation>
+<translation id="1208340532756947324">Kad turinys būtų sinchronizuojamas visuose įrenginiuose, įjunkite sinchronizavimą</translation>
 <translation id="1209206284964581585">Slėpti dabar</translation>
 <translation id="123724288017357924">Įk. šį puslapį iš naujo, nepais. talp. es. turinio</translation>
 <translation id="124116460088058876">Daugiau kalbų</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Naršyti</translation>
 <translation id="1993768208584545658">Svetainė <ph name="SITE" /> nori būti susieta su</translation>
 <translation id="1994173015038366702">Svetainės URL</translation>
+<translation id="2002537628803770967">„Google Pay“ naudojamos kredito kortelės ir adresai</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB užima kitos programos</translation>
 <translation id="2017836877785168846">Išvaloma istorija ir automatiniai užbaigimai adreso juostoje.</translation>
 <translation id="2021896219286479412">Viso ekrano svetainės valdikliai</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Liko <ph name="SECONDS" /> sek.</translation>
 <translation id="2781151931089541271">Liko 1 sek.</translation>
 <translation id="2810645512293415242">Supaprastintas puslapis, kad būtų galima saugoti duomenis ir greičiau įkelti.</translation>
+<translation id="2818669890320396765">Jei norite pasiekti žymes visuose įrenginiuose, prisijunkite ir įjunkite sinchronizavimą</translation>
 <translation id="2836148919159985482">Palieskite mygtuką „Atgal“, kad išeitumėte iš viso ekrano režimo.</translation>
 <translation id="2842985007712546952">Viršaplankis</translation>
 <translation id="2870560284913253234">Svetainė</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Ieškokite savo istorijoje</translation>
 <translation id="3552151358455404883">Tvarkykite „Chrome“ sinchronizavimo ir suasmeninimo funkcijas skiltyje <ph name="BEGIN_LINK1" />„Nustatymai“<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Pridėti prie kontaktų</translation>
+<translation id="3568688522516854065">Jei norite pasiekti skirtukus iš kitų įrenginių, prisijunkite ir įjunkite sinchronizavimą</translation>
 <translation id="3587482841069643663">Visi</translation>
 <translation id="3590487821116122040">Svetainės saugykla, kurios „Chrome“ nelaiko svarbia (pvz., svetainės be išsaugotų nustatymų arba tos, kuriose retai lankotės)</translation>
 <translation id="3599863153486145794">Išvaloma visų įrenginių, prie kurių prisijungta, istorija. „Google“ paskyroje gali būti kito tipo naršymo istorijos, kuri pasiekiama adresu <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Peržiūrėkite nustatymus kitame ekrane</translation>
 <translation id="4195643157523330669">Atidaryti naujame skirtuke</translation>
 <translation id="4198423547019359126">Nėra pasiekiamų atsisiuntimo vietų</translation>
+<translation id="4209895695669353772">Jei norite gauti „Google“ siūlomo suasmeninto turinio, įjunkite sinchronizavimą</translation>
 <translation id="4226663524361240545">Gavus pranešimą įrenginys gali vibruoti</translation>
 <translation id="4242533952199664413">Atidaryti nustatymus</translation>
 <translation id="424864128008805179">Atsijungti nuo „Chrome“?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Sukurta „<ph name="FOLDER_NAME" />“ žymė</translation>
 <translation id="4453340223357552416">Failas „<ph name="FILE_NAME" />“ atsisiųstas naršyklėje „<ph name="PRODUCT_NAME" />“</translation>
 <translation id="4468959413250150279">Konkrečios svetainės garso išjungimas.</translation>
+<translation id="4472118726404937099">Jei norite sinchronizuoti ir suasmeninti turinį visuose įrenginiuose, prisijunkite ir įjunkite sinchronizavimą</translation>
 <translation id="4479647676395637221">Pirmiausia klausti prieš leidžiant svetainėms naudoti kamerą (rekomenduojama)</translation>
 <translation id="4487967297491345095">Visi „Chrome“ duomenys bus ištrinti visam laikui. Tai apima visus failus, nustatymus, paskyras, duomenų bazes ir kt.</translation>
 <translation id="4508440807153586353">Tik jūsų slaptafrazę žinantis asmuo gali skaityti šifruotus duomenis. Slaptafrazė nesiunčiama į sistemą „Google“ ir joje nesaugoma. Pamiršę slaptafrazę arba norėdami pakeisti šį nustatymą turėsite iš naujo nustatyti sinchronizavimą. <ph name="BEGIN_LINK" />Sužinokite daugiau<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Pasirinkti duomenys pašalinti iš „Chrome“ ir sinchronizuojamų įrenginių.
 
 Adresu <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> gali būti pateikta kitų formų jūsų „Google“ paskyros naršymo istorija, pvz., paieškos ir veikla kitose „Google“ paslaugose.</translation>
-<translation id="4526249700380860531">Peržiūrėkite ir tvarkykite išsaugotus slaptažodžius apsilankę adresu <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Pasirinkti aplanką</translation>
 <translation id="4550003330909367850">Jei norite čia peržiūrėti ar nukopijuoti slaptažodį, nustatykite ekrano užraktą šiame įrenginyje.</translation>
 <translation id="4558311620361989323">Tinklalapių spartieji klavišai</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Senesni nei 30 dienų</translation>
 <translation id="5858741533101922242">„Chrome“ nepavyksta įjungti „Bluetooth“ adapterio</translation>
 <translation id="5860033963881614850">Išjungta</translation>
+<translation id="5862731021271217234">Jei norite pasiekti skirtukus iš kitų įrenginių, įjunkite sinchronizavimą</translation>
 <translation id="5864174910718532887">Išsami informacija: surūšiuota pagal svetainės pavadinimą</translation>
 <translation id="5864419784173784555">Laukiama kito atsisiuntimo…</translation>
 <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Naršymo skydelis uždarytas</translation>
 <translation id="8103578431304235997">Inkognito skirtukas</translation>
 <translation id="8105951947646329362">Siūlyti susijusius puslapius</translation>
+<translation id="8109613176066109935">Jei norite pasiekti žymes visuose įrenginiuose, įjunkite sinchronizavimą</translation>
 <translation id="8116925261070264013">Išjungta</translation>
 <translation id="813082847718468539">Žiūrėti svetainės informaciją</translation>
 <translation id="8168435359814927499">Turinys</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Redaguoti</translation>
 <translation id="9070377983101773829">Pradėti paiešką balsu</translation>
 <translation id="9071742570345586758">Kad galėtumėte peržiūrėti virtualiosios realybės turinį, įdiekite „Google“ VR paslaugas</translation>
+<translation id="9074336505530349563">Jei norite gauti „Google“ siūlomo suasmeninto turinio, prisijunkite ir įjunkite sinchronizavimą</translation>
 <translation id="9086455579313502267">Nepavyko pasiekti tinklo</translation>
 <translation id="9099018167121903954">Atsisiųsta <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">Siūlyti rodyti straipsnius supaprastintame rodinyje, kai palaikoma</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
index 238e4d9..f2b59f66 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Nākamais</translation>
 <translation id="1204037785786432551">Lejupielādēt saiti</translation>
 <translation id="1206892813135768548">Kopēt saites tekstu</translation>
+<translation id="1208340532756947324">Lai sinhronizētu un personalizētu saturu dažādās ierīcēs, ieslēdziet sinhronizāciju.</translation>
 <translation id="1209206284964581585">Pagaidām slēpt</translation>
 <translation id="123724288017357924">Atkārtoti ielādēt lapu, ignorējot saturu kešatmiņā</translation>
 <translation id="124116460088058876">Citas valodas…</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Pārlūkot</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> vēlas savienot pārī</translation>
 <translation id="1994173015038366702">Vietnes URL</translation>
+<translation id="2002537628803770967">Kredītkartes un adreses no pakalpojuma Google Pay</translation>
 <translation id="200815880754187296">Citas lietotnes: <ph name="KILOBYTES" /> KB</translation>
 <translation id="2017836877785168846">Notīra vēsturi un automātiskās pabeigšanas ierakstus adreses joslā.</translation>
 <translation id="2021896219286479412">Pilnekrāna vietnes vadīklas</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Atlikušas <ph name="SECONDS" /> s</translation>
 <translation id="2781151931089541271">Atlikusi 1 s</translation>
 <translation id="2810645512293415242">Lapa tika vienkāršota, lai samazinātu datu lietojumu un paātrinātu ielādi.</translation>
+<translation id="2818669890320396765">Lai grāmatzīmes būtu pieejamas visās jūsu ierīcēs, pierakstieties un ieslēdziet sinhronizāciju.</translation>
 <translation id="2836148919159985482">Lai izietu no pilnekrāna režīma, pieskarieties pogai Atpakaļ.</translation>
 <translation id="2842985007712546952">Vecākmape</translation>
 <translation id="2870560284913253234">Vietne</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Meklēt savā vēsturē</translation>
 <translation id="3552151358455404883">Pārvaldīt Chrome sinhronizāciju un personalizēšanu <ph name="BEGIN_LINK1" />iestatījumos<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Pievienot kontaktpersonām</translation>
+<translation id="3568688522516854065">Lai varētu piekļūt cilnēm no citām ierīcēm, pierakstieties un ieslēdziet sinhronizāciju.</translation>
 <translation id="3587482841069643663">Visi</translation>
 <translation id="3590487821116122040">Vietnes krātuve, kura pārlūkā Chrome netiek uzskatīta par svarīgu (piemēram, vietnes bez saglabātiem iestatījumiem vai vietnes, kuras neapmeklējat bieži)</translation>
 <translation id="3599863153486145794">Notīra vēsturi no visām ierīcēm, kurās esat pierakstījies. Jūsu Google kontam vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> var būt citu veidu pārlūkošanas vēstures dati.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Pārskatiet savus iestatījumus nākamajā ekrānā</translation>
 <translation id="4195643157523330669">Atvērt jaunā cilnē</translation>
 <translation id="4198423547019359126">Nav pieejamu lejupielādes atrašanās vietu.</translation>
+<translation id="4209895695669353772">Lai saņemtu Google ieteikto personalizēto saturu, ieslēdziet sinhronizāciju.</translation>
 <translation id="4226663524361240545">Saņemot paziņojumu, ierīce var vibrēt.</translation>
 <translation id="4242533952199664413">Atvērt iestatījumus</translation>
 <translation id="424864128008805179">Vai izrakstīties no pārlūka Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Grāmatzīme saglabāta mapē <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Fails <ph name="FILE_NAME" /> lejupielādēts pārlūkā <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Izslēgt skaņu noteiktai vietnei</translation>
+<translation id="4472118726404937099">Lai sinhronizētu un personalizētu saturu dažādās ierīcēs, pierakstieties un ieslēdziet sinhronizāciju.</translation>
 <translation id="4479647676395637221">Jautāt, pirms atļaut vietnēm izmantot jūsu kameru (ieteicams)</translation>
 <translation id="4487967297491345095">Visi lietotnes Chrome dati tiks neatgriezeniski izdzēsti. Tas attiecas uz visiem failiem, iestatījumiem, kontiem, datu bāzēm un citiem datiem.</translation>
 <translation id="4508440807153586353">Jūsu šifrētos datus var lasīt tikai personas, kurām ir zināma jūsu ieejas frāze. Ieejas frāze netiek sūtīta Google serveriem un netiek tajos glabāta. Ja aizmirsīsiet ieejas frāzi vai vēlēsieties mainīt šo iestatījumu, jums būs jāatiestata sinhronizācija. <ph name="BEGIN_LINK" />Uzziniet vairāk<ph name="END_LINK" />.</translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Atlasītie dati ir noņemti no pārlūka Chrome un jūsu sinhronizētajām ierīcēm.
 
 Jūsu Google kontam vietnē <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> var būt citu veidu pārlūkošanas vēstures dati, piemēram, meklēšanas vaicājumi un darbības citos Google pakalpojumos.</translation>
-<translation id="4526249700380860531">Skatīt un pārvaldīt saglabātās paroles vietnē <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Mapes izvēlēšanās</translation>
 <translation id="4550003330909367850">Lai skatītu vai kopētu savu paroli šeit, iestatiet ekrāna bloķēšanu šajā ierīcē.</translation>
 <translation id="4558311620361989323">Tīmekļa lapu īsinājumtaustiņi</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Vecāki par 30 dienām</translation>
 <translation id="5858741533101922242">Chrome nevar ieslēgt Bluetooth adapteri.</translation>
 <translation id="5860033963881614850">Izsl.</translation>
+<translation id="5862731021271217234">Lai varētu piekļūt cilnēm no citām ierīcēm, ieslēdziet sinhronizāciju.</translation>
 <translation id="5864174910718532887">Detalizēta informācija: kārtota pēc vietnes nosaukuma</translation>
 <translation id="5864419784173784555">Tiek gaidīta cita lejupielāde…</translation>
 <translation id="5869522115854928033">Saglabātās paroles</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigācijas panelis aizvērts</translation>
 <translation id="8103578431304235997">Inkognito cilne</translation>
 <translation id="8105951947646329362">Saistīto lapu ieteikšana</translation>
+<translation id="8109613176066109935">Lai grāmatzīmes būtu pieejamas visās jūsu ierīcēs, ieslēdziet sinhronizāciju.</translation>
 <translation id="8116925261070264013">Izslēgta skaņa</translation>
 <translation id="813082847718468539">Skatīt informāciju par vietni</translation>
 <translation id="8168435359814927499">Saturs</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Labot</translation>
 <translation id="9070377983101773829">Sākt meklēšanu ar balsi</translation>
 <translation id="9071742570345586758">Lai skatītu virtuālās realitātes saturu, instalējiet Google VR pakalpojumus.</translation>
+<translation id="9074336505530349563">Lai saņemtu Google ieteikto personalizēto saturu, pierakstieties un ieslēdziet sinhronizāciju.</translation>
 <translation id="9086455579313502267">Nevar piekļūt tīklam</translation>
 <translation id="9099018167121903954">Lejupielādes: <ph name="KILOBYTES" /> KB.</translation>
 <translation id="9100505651305367705">Piedāvāt rādīt rakstus vienkāršotā skatā, ja tāds tiek atbalstīts</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
index deafbf26..4805273 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Volgende</translation>
 <translation id="1204037785786432551">Link downloaden</translation>
 <translation id="1206892813135768548">Linktekst kopiëren</translation>
+<translation id="1208340532756947324">Schakel synchronisatie in om verschillende apparaten te synchroniseren en te personaliseren</translation>
 <translation id="1209206284964581585">Voorlopig verbergen</translation>
 <translation id="123724288017357924">De pagina opnieuw laden, gecachte content negeren</translation>
 <translation id="124116460088058876">Meer talen</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Browsen</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> wil koppelen</translation>
 <translation id="1994173015038366702">Site-URL</translation>
+<translation id="2002537628803770967">Creditcards en adressen die Google Pay gebruiken</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB voor andere apps</translation>
 <translation id="2017836877785168846">Wist de geschiedenis en automatische aanvullingen in de adresbalk.</translation>
 <translation id="2021896219286479412">Siteopties op volledig scherm</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> seconden resterend</translation>
 <translation id="2781151931089541271">1 seconde resterend</translation>
 <translation id="2810645512293415242">Vereenvoudigde pagina om data te besparen en sneller te laden.</translation>
+<translation id="2818669890320396765">Log in en schakel synchronisatie in om op al je apparaten toegang tot je bladwijzers te hebben</translation>
 <translation id="2836148919159985482">Tik op de knop Terug om het volledige scherm te sluiten.</translation>
 <translation id="2842985007712546952">Bovenliggende map</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Je geschiedenis doorzoeken</translation>
 <translation id="3552151358455404883">Chrome-synchronisatie en -personalisatie beheren in <ph name="BEGIN_LINK1" />Instellingen<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Toevoegen aan contacten</translation>
+<translation id="3568688522516854065">Log in en schakel synchronisatie in om de tabbladen van je andere apparaten te bekijken</translation>
 <translation id="3587482841069643663">Alles</translation>
 <translation id="3590487821116122040">Site-opslag waarvan Chrome denkt dat deze niet belangrijk is (bijvoorbeeld sites zonder opgeslagen instellingen of sites die je niet vaak bezoekt)</translation>
 <translation id="3599863153486145794">Hiermee wordt de geschiedenis van alle ingelogde apparaten gewist. Er kunnen andere vormen van browsegeschiedenis zijn opgeslagen voor je Google-account op <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Controleer je instellingen op het volgende scherm</translation>
 <translation id="4195643157523330669">Openen op nieuw tabblad</translation>
 <translation id="4198423547019359126">Geen beschikbare downloadlocaties</translation>
+<translation id="4209895695669353772">Schakel synchronisatie in om suggesties voor gepersonaliseerde content van Google te ontvangen</translation>
 <translation id="4226663524361240545">Het apparaat kan trillen bij meldingen</translation>
 <translation id="4242533952199664413">Instellingen openen</translation>
 <translation id="424864128008805179">Uitloggen bij Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Bladwijzer gemaakt in <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> gedownload in <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Geluid dempen voor een specifieke site.</translation>
+<translation id="4472118726404937099">Log in en schakel synchronisatie in om verschillende apparaten te synchroniseren en te personaliseren</translation>
 <translation id="4479647676395637221">Eerst vragen voordat sites je camera mogen gebruiken (aanbevolen)</translation>
 <translation id="4487967297491345095">Alle app-gegevens voor Chrome worden definitief verwijderd. Dit omvat alle bestanden, instellingen, accounts, databases, enzovoort.</translation>
 <translation id="4508440807153586353">Alleen iemand met je wachtwoordzin kan je versleutelde gegevens lezen. De wachtwoordzin wordt niet verzonden naar of opgeslagen door Google. Als je je wachtwoordzin vergeet of deze instelling wilt wijzigen, moet je de synchronisatie opnieuw instellen. <ph name="BEGIN_LINK" />Meer informatie<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">De geselecteerde gegevens zijn verwijderd uit Chrome en van je gesynchroniseerde apparaten.
 
 Voor je Google-account kunnen andere vormen van browsegeschiedenis (zoals zoekopdrachten en activiteit uit andere Google-services) beschikbaar zijn via <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Opgeslagen wachtwoorden bekijken en beheren via <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Map kiezen</translation>
 <translation id="4550003330909367850">Als je hier je wachtwoord wilt bekijken of kopiëren, stel je schermvergrendeling in op dit apparaat.</translation>
 <translation id="4558311620361989323">Sneltoetsen voor webpagina's</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Ouder dan 30 dagen</translation>
 <translation id="5858741533101922242">Chrome kan de Bluetooth-adapter niet inschakelen</translation>
 <translation id="5860033963881614850">Uit</translation>
+<translation id="5862731021271217234">Schakel synchronisatie in om de tabbladen van je andere apparaten te bekijken</translation>
 <translation id="5864174910718532887">Details: gesorteerd op sitenaam</translation>
 <translation id="5864419784173784555">Wachten op andere download…</translation>
 <translation id="5869522115854928033">Opgeslagen wachtwoorden</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigatievenster gesloten</translation>
 <translation id="8103578431304235997">Incognitotabblad</translation>
 <translation id="8105951947646329362">Gerelateerde pagina's voorstellen</translation>
+<translation id="8109613176066109935">Schakel synchronisatie in om op al je apparaten toegang tot je bladwijzers te hebben</translation>
 <translation id="8116925261070264013">Gedempt</translation>
 <translation id="813082847718468539">Sitegegevens bekijken</translation>
 <translation id="8168435359814927499">Content</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Bewerken</translation>
 <translation id="9070377983101773829">Gesproken zoekopdracht starten</translation>
 <translation id="9071742570345586758">Installeer VR-services van Google om virtual reality-content te bekijken</translation>
+<translation id="9074336505530349563">Log in en schakel synchronisatie in om suggesties voor gepersonaliseerde content van Google te ontvangen</translation>
 <translation id="9086455579313502267">Geen toegang tot het netwerk</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB gedownload</translation>
 <translation id="9100505651305367705">Aanbieden om artikelen weer te geven in een vereenvoudigde weergave (indien ondersteund)</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
index de44e92..e051bca0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -193,8 +193,8 @@
 <translation id="2498359688066513246">Hjelp og tilbakemelding</translation>
 <translation id="2501278716633472235">Gå tilbake</translation>
 <translation id="2512222046227390255">Fyll ut skjemaer automatisk</translation>
-<translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger som er relatert til personvern, sikkerhet og datainnsamling.</translation>
-<translation id="2523184218357549926">Sender nettadresser til sidene du besøker i Google</translation>
+<translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger knyttet til personvern, sikkerhet og datainnsamling.</translation>
+<translation id="2523184218357549926">Sender Google nettadressene til sider du besøker</translation>
 <translation id="2526148617758225454">Datasparing er på. Du kan administrere denne funksjonen i Innstillinger.</translation>
 <translation id="2532336938189706096">Nettvisning</translation>
 <translation id="2536728043171574184">Ser på en lokalt lagret versjon av denne siden</translation>
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">De valgte dataene er er fjernet fra Chrome og de synkroniserte enhetene dine.
 
 Google-kontoen din kan ha andre former for nettlesingslogg, for eksempel søk og aktivitet fra andre Google-tjenester, på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Se på og administrer lagrede passord på <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Velg en mappe</translation>
 <translation id="4550003330909367850">For å se eller kopiere passordet ditt her, angi skjermlås på denne enheten.</translation>
 <translation id="4558311620361989323">Hurtigtaster for nettsider</translation>
@@ -726,7 +725,7 @@
 <translation id="699220179437400583">Rapportér detaljer om mulige sikkerhetsbrudd til Google automatisk</translation>
 <translation id="6992289844737586249">Spør før nettsteder får bruke mikrofonen (anbefales)</translation>
 <translation id="7016516562562142042">Tillatt for den aktive søkemotoren</translation>
-<translation id="7017968314960951695">Bruker innhold fra nettsteder du besøker, nettleseraktivitet og andre interaksjoner for personligsering.</translation>
+<translation id="7017968314960951695">Bruker innhold fra nettsteder du besøker, nettleseraktivitet og andre interaksjoner for å gi ting et personlig preg.</translation>
 <translation id="7021515813996758557"><ph name="FILE_NAME" /> er lastet ned</translation>
 <translation id="7022756207310403729">Åpne i nettleseren</translation>
 <translation id="7029809446516969842">Passord</translation>
@@ -899,7 +898,7 @@
 <translation id="8497726226069778601">Det er ikke noe her foreløpig</translation>
 <translation id="8503559462189395349">Chrome-passord</translation>
 <translation id="8503813439785031346">Brukernavn</translation>
-<translation id="8504988642345501642">Når du ruller oppover, vises raskt linkene til relaterte sidern. Nettadressene til sidene du besøker, sendes til Google.</translation>
+<translation id="8504988642345501642">Når du ruller oppover, vises hurtiglinker til relaterte sider. Nettadressene til sidene du besøker, sendes til Google.</translation>
 <translation id="8514477925623180633">Eksportér passord som er lagret med Chrome</translation>
 <translation id="8514577642972634246">Slå på inkognitomodus</translation>
 <translation id="851751545965956758">Blokkér at nettsteder kobler til enheter</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
index 96060ed..2a6bcd2f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Dalej</translation>
 <translation id="1204037785786432551">Pobierz link</translation>
 <translation id="1206892813135768548">Kopiuj tekst linku</translation>
+<translation id="1208340532756947324">Aby synchronizować i personalizować wszystkie swoje urządzenia, włącz synchronizację</translation>
 <translation id="1209206284964581585">Na razie ukryj</translation>
 <translation id="123724288017357924">Ponowie załaduj stronę, bez pamięci podręcznej</translation>
 <translation id="124116460088058876">Więcej języków</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Przeglądaj</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> chce się sparować</translation>
 <translation id="1994173015038366702">URL strony</translation>
+<translation id="2002537628803770967">Karty kredytowe i adresy z Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB innych aplikacji</translation>
 <translation id="2017836877785168846">Usuwa historię i wpisy autouzupełniania w pasku adresu.</translation>
 <translation id="2021896219286479412">Elementy sterowania stroną na pełnym ekranie</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Pozostało: <ph name="SECONDS" /> s</translation>
 <translation id="2781151931089541271">Pozostała sekunda</translation>
 <translation id="2810645512293415242">Uproszczona wersja strony pozwala szybciej zapisywać i wczytywać dane.</translation>
+<translation id="2818669890320396765">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, zaloguj się i włącz synchronizację</translation>
 <translation id="2836148919159985482">Kliknij przycisk Wstecz, by wyjść z trybu pełnoekranowego.</translation>
 <translation id="2842985007712546952">Folder nadrzędny</translation>
 <translation id="2870560284913253234">Witryna</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Przeszukaj historię</translation>
 <translation id="3552151358455404883">Zarządzaj synchronizacją Chrome i personalizacją w <ph name="BEGIN_LINK1" />Ustawieniach<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Dodaj do kontaktów</translation>
+<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="3590487821116122040">Dane witryn, które Chrome uznaje za nieistotne (np. witryny, które rzadko odwiedzasz lub które nie mają zapisanych ustawień)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Przejrzyj ustawienia na następnym ekranie</translation>
 <translation id="4195643157523330669">Otwórz w nowej karcie</translation>
 <translation id="4198423547019359126">Brak dostępnych miejsc zapisu pobieranych plików</translation>
+<translation id="4209895695669353772">Aby uzyskać dostęp do spersonalizowanej treści proponowanej przez Google, włącz synchronizację</translation>
 <translation id="4226663524361240545">Powiadomienia będą sygnalizowane wibracjami</translation>
 <translation id="4242533952199664413">Otwórz ustawienia</translation>
 <translation id="424864128008805179">Wylogować z Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Utworzono zakładkę w folderze <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Plik <ph name="FILE_NAME" /> został pobrany w: <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Wycisz dźwięk na konkretnej stronie.</translation>
+<translation id="4472118726404937099">Aby synchronizować i personalizować wszystkie swoje urządzenia, zaloguj się i włącz synchronizację</translation>
 <translation id="4479647676395637221">Pytaj, zanim zezwolisz stronom na korzystanie z kamery (zalecane)</translation>
 <translation id="4487967297491345095">Wszystkie dane aplikacji Chrome zostaną trwale usunięte. Dotyczy to wszystkich plików, ustawień, kont, baz danych itp.</translation>
 <translation id="4508440807153586353">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, musisz zresetować synchronizację. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Wybrane dane zostały usunięte z Chrome i ze zsynchronizowanych urządzeń.
 
 Na stronie <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> na Twoim koncie Google mogą być zapisane inne rodzaje historii przeglądania, takie jak wyszukiwania lub aktywność z innych usług Google.</translation>
-<translation id="4526249700380860531">Wyświetlaj zapisane hasła i zarządzaj nimi na <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Wybierz folder</translation>
 <translation id="4550003330909367850">Aby wyświetlić lub skopiować hasło, ustaw blokadę ekranu na urządzeniu.</translation>
 <translation id="4558311620361989323">Skróty stron internetowych</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Sprzed ponad 30 dni</translation>
 <translation id="5858741533101922242">Chrome nie może włączyć adaptera Bluetooth</translation>
 <translation id="5860033963881614850">Wyłączone</translation>
+<translation id="5862731021271217234">Aby korzystać z kart ze swoich innych urządzeń, włącz synchronizację</translation>
 <translation id="5864174910718532887">Szczegóły: posortowane według nazwy witryny</translation>
 <translation id="5864419784173784555">Czekam na inny plik do pobrania…</translation>
 <translation id="5869522115854928033">Zapisane hasła</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Zamknięto panel użytkownika</translation>
 <translation id="8103578431304235997">Karta incognito</translation>
 <translation id="8105951947646329362">Sugeruj powiązane strony</translation>
+<translation id="8109613176066109935">Aby korzystać ze swoich zakładek na wszystkich urządzeniach, włącz synchronizację</translation>
 <translation id="8116925261070264013">Wyciszone</translation>
 <translation id="813082847718468539">Wyświetl informacje o witrynie</translation>
 <translation id="8168435359814927499">Treści</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Edytuj</translation>
 <translation id="9070377983101773829">Rozpocznij wyszukiwanie głosowe</translation>
 <translation id="9071742570345586758">Aby oglądać treści rzeczywistości wirtualnej, zainstaluj Usługi Google VR</translation>
+<translation id="9074336505530349563">Aby uzyskać dostęp do spersonalizowanej treści proponowanej przez Google, zaloguj się i włącz synchronizację</translation>
 <translation id="9086455579313502267">Nie można uzyskać dostępu do sieci</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB pobranych plików</translation>
 <translation id="9100505651305367705">Proponuj wyświetlanie artykułów w widoku uproszczonym, gdy jest obsługiwany</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
index a5dd400..399dd067 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Próxima</translation>
 <translation id="1204037785786432551">Fazer o download do link</translation>
 <translation id="1206892813135768548">Copiar texto do link</translation>
+<translation id="1208340532756947324">Para sincronizar e personalizar vários dispositivos, ative a sincronização</translation>
 <translation id="1209206284964581585">Ocultar por enquanto</translation>
 <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation>
 <translation id="124116460088058876">Mais idiomas</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Procurar</translation>
 <translation id="1993768208584545658">O <ph name="SITE" /> deseja realizar o pareamento</translation>
 <translation id="1994173015038366702">URL do site</translation>
+<translation id="2002537628803770967">Cartões de crédito e endereços que usam o Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB de outros apps</translation>
 <translation id="2017836877785168846">Limpa o histórico e o preenchimento automático na barra de endereço.</translation>
 <translation id="2021896219286479412">Controles de site em tela cheia</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> segundos restantes</translation>
 <translation id="2781151931089541271">Um segundo restante</translation>
 <translation id="2810645512293415242">Página simplificada para economizar dados e carregar mais rapidamente.</translation>
+<translation id="2818669890320396765">Para ter seus favoritos em todos os seus dispositivos, faça login e ative a sincronização</translation>
 <translation id="2836148919159985482">Toque no botão "Voltar" para sair da tela cheia.</translation>
 <translation id="2842985007712546952">Pasta mãe</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Pesquise o seu histórico</translation>
 <translation id="3552151358455404883">Gerenciar a sincronização e a personalização do Chrome em <ph name="BEGIN_LINK1" />Configurações<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Adicionar aos contatos</translation>
+<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="3590487821116122040">Dados de armazenamento de site que o Chrome não acredita serem importantes (por exemplo, sites sem configurações salvas ou que você não visita com frequência)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Revise suas configurações na próxima tela</translation>
 <translation id="4195643157523330669">Abrir em uma nova guia</translation>
 <translation id="4198423547019359126">Não há locais de download disponíveis</translation>
+<translation id="4209895695669353772">Para receber conteúdo personalizado sugerido pelo Google, ative a sincronização</translation>
 <translation id="4226663524361240545">É possível que as notificações façam o dispositivo vibrar</translation>
 <translation id="4242533952199664413">Abrir configurações.</translation>
 <translation id="424864128008805179">Sair do Google Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Adicionado como favorito em <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Download do arquivo <ph name="FILE_NAME" /> realizado no <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Desative o som de um site específico.</translation>
+<translation id="4472118726404937099">Para sincronizar e personalizar vários dispositivos, faça login e ative a sincronização</translation>
 <translation id="4479647676395637221">Perguntar antes de permitir que sites usem sua câmera (recomendado)</translation>
 <translation id="4487967297491345095">Todos os dados de app do Chrome serão excluídos permanentemente. Isso inclui todos os arquivos, configurações, contas, bancos de dados etc.</translation>
 <translation id="4508440807153586353">Somente uma pessoa com sua senha longa pode ler seus dados criptografados. A senha longa não é enviada ou armazenada pelo Google. Se você esquecer sua 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>
@@ -409,7 +415,6 @@
 
 É possível que sua Conta do Google tenha outras formas de histórico de navegação, como pesquisas e atividades de outros serviços do Google em 
  <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Ver e gerenciar as senhas salvas em <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Escolher pasta</translation>
 <translation id="4550003330909367850">Para ver ou copiar sua senha aqui, defina um bloqueio de tela nesse dispositivo.</translation>
 <translation id="4558311620361989323">Atalhos de páginas da Web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Com mais de 30 dias</translation>
 <translation id="5858741533101922242">O Chrome não pôde ativar o adaptador Bluetooth</translation>
 <translation id="5860033963881614850">Desativado</translation>
+<translation id="5862731021271217234">Para ver as guias dos seus outros dispositivos, ative a sincronização</translation>
 <translation id="5864174910718532887">Detalhes: classificados por nome do site</translation>
 <translation id="5864419784173784555">Aguardando outro download…</translation>
 <translation id="5869522115854928033">Senhas salvas</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Painel de navegação fechado</translation>
 <translation id="8103578431304235997">Guia anônima</translation>
 <translation id="8105951947646329362">Sugerir páginas relacionadas</translation>
+<translation id="8109613176066109935">Para ter seus favoritos em todos os seus dispositivos, ative a sincronização</translation>
 <translation id="8116925261070264013">Com som desativado</translation>
 <translation id="813082847718468539">Visualizar informações do site</translation>
 <translation id="8168435359814927499">Conteúdo</translation>
@@ -966,6 +973,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9070377983101773829">Iniciar pesquisa por voz</translation>
 <translation id="9071742570345586758">Para ver conteúdo de realidade virtual, instale os Serviços de RV do Google</translation>
+<translation id="9074336505530349563">Para receber conteúdo personalizado sugerido pelo Google, ative a sincronização</translation>
 <translation id="9086455579313502267">Não foi possível acessar a rede</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB transferido(s) por download</translation>
 <translation id="9100505651305367705">Oferecer para mostrar artigos em uma visualização simplificada, quando compatível</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
index fd490a6..1218ad2 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Seguinte</translation>
 <translation id="1204037785786432551">Transferir link</translation>
 <translation id="1206892813135768548">Copiar texto do link</translation>
+<translation id="1208340532756947324">Para sincronizar e personalizar entre dispositivos, ative a sincronização.</translation>
 <translation id="1209206284964581585">Ocultar para já</translation>
 <translation id="123724288017357924">Atualizar página atual e ignorar conteúdo em cache</translation>
 <translation id="124116460088058876">Mais idiomas</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Procurar</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> pretende sincronizar</translation>
 <translation id="1994173015038366702">URL do site</translation>
+<translation id="2002537628803770967">Cartões de crédito e endereços com o Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB de outras aplicações</translation>
 <translation id="2017836877785168846">Limpa o histórico e os preenchimentos automáticos da barra de endereço.</translation>
 <translation id="2021896219286479412">Controlos de site em ecrã int.</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Faltam <ph name="SECONDS" /> segundos</translation>
 <translation id="2781151931089541271">Falta 1 segundo</translation>
 <translation id="2810645512293415242">Página simplificada para poupar dados e carregar mais rapidamente.</translation>
+<translation id="2818669890320396765">Para obter os seus marcadores em todos os dispositivos, inicie sessão e ative a sincronização.</translation>
 <translation id="2836148919159985482">Toque no botão de retrocesso para sair do ecrã inteiro.</translation>
 <translation id="2842985007712546952">Pasta superior</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Pesquisar no histórico</translation>
 <translation id="3552151358455404883">Gerir a Sincronização do Chrome e a personalização nas <ph name="BEGIN_LINK1" />Definições<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Adicionar aos contactos</translation>
+<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="3590487821116122040">Armazenamento do site que o Chrome não considera importante (por exemplo, sites sem definições guardadas ou aos quais não acede com frequência)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Rever as suas definições no ecrã seguinte</translation>
 <translation id="4195643157523330669">Abrir num novo separador</translation>
 <translation id="4198423547019359126">Não existem localizações de transferência disponíveis.</translation>
+<translation id="4209895695669353772">Para obter conteúdo personalizado sugerido pelo Google, ative a sincronização.</translation>
 <translation id="4226663524361240545">As notificações podem fazer com que o dispositivo vibre</translation>
 <translation id="4242533952199664413">Abrir definições</translation>
 <translation id="424864128008805179">Pretende terminar sessão no Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Adicionado aos marcadores em <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> transferido no <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Desative o som de um site específico.</translation>
+<translation id="4472118726404937099">Para sincronizar e personalizar entre dispositivos, inicie sessão e ative a sincronização.</translation>
 <translation id="4479647676395637221">Perguntar antes de permitir que os sites utilizem a câmara (recomendado)</translation>
 <translation id="4487967297491345095">Todos os dados de aplicações do Chrome são eliminados permanentemente, incluindo todos os ficheiros, definições, contas, bases de dados, etc.</translation>
 <translation id="4508440807153586353">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>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Os dados selecionados foram removidos do Chrome e dos dispositivos sincronizados.
 
 A sua Conta Google pode ter outras formas do histórico de navegação, como pesquisas e atividade de outros serviços Google, em <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Ver e gerir as palavras-passe guardadas em <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Escolher pasta</translation>
 <translation id="4550003330909367850">Para ver ou copiar a sua palavra-passe aqui, defina o bloqueio de ecrã neste dispositivo.</translation>
 <translation id="4558311620361989323">Atalhos da página Web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Com mais de 30 dias</translation>
 <translation id="5858741533101922242">O Chrome não consegue ativar o adaptador Bluetooth</translation>
 <translation id="5860033963881614850">Desativado</translation>
+<translation id="5862731021271217234">Para obter os separadores dos seus outros dispositivos, ative a sincronização.</translation>
 <translation id="5864174910718532887">Detalhes: ordenado por nome do site</translation>
 <translation id="5864419784173784555">A aguardar por outra transferência…</translation>
 <translation id="5869522115854928033">Palavras-passe guardadas</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Painel de navegação fechado</translation>
 <translation id="8103578431304235997">Separador de navegação anónima</translation>
 <translation id="8105951947646329362">Páginas relacionadas sugeridas</translation>
+<translation id="8109613176066109935">Para obter os seus marcadores em todos os dispositivos, ative a sincronização.</translation>
 <translation id="8116925261070264013">Com som desativado</translation>
 <translation id="813082847718468539">Ver informações do Web site</translation>
 <translation id="8168435359814927499">Conteúdo</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Editar</translation>
 <translation id="9070377983101773829">Iniciar pesquisa por voz</translation>
 <translation id="9071742570345586758">Para ver conteúdo de realidade virtual, instale os Serviços de RV da Google</translation>
+<translation id="9074336505530349563">Para obter conteúdo personalizado sugerido pelo Google, inicie sessão e ative a sincronização.</translation>
 <translation id="9086455579313502267">Não é possível aceder à rede</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB transferido(s)</translation>
 <translation id="9100505651305367705">Sugerir a apresentação de artigos na vista simplificada, quando suportada</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
index 9c745b2..b3247ce 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Înainte</translation>
 <translation id="1204037785786432551">Descarcă linkul</translation>
 <translation id="1206892813135768548">Copiați textul linkului</translation>
+<translation id="1208340532756947324">Pentru a sincroniza și a personaliza pe toate dispozitivele, activează sincronizarea</translation>
 <translation id="1209206284964581585">Ascunde momentan</translation>
 <translation id="123724288017357924">Reîncarcă pagina, ignorând conținutul din cache</translation>
 <translation id="124116460088058876">Mai multe limbi</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Răsfoiește</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> dorește să se asocieze</translation>
 <translation id="1994173015038366702">Adresa URL a site-ului</translation>
+<translation id="2002537628803770967">Carduri de credit și adrese care folosesc Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB pentru alte aplicații</translation>
 <translation id="2017836877785168846">Șterge istoricul și completările automate din bara de adrese.</translation>
 <translation id="2021896219286479412">Comenzi site în ecran complet</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sec. rămase</translation>
 <translation id="2781151931089541271">1 sec. rămasă</translation>
 <translation id="2810645512293415242">Pagină simplificată pentru economie de date și încărcare mai rapidă.</translation>
+<translation id="2818669890320396765">Pentru a accesa marcajele pe toate dispozitivele, conectează-te și activează sincronizarea</translation>
 <translation id="2836148919159985482">Atinge butonul Înapoi pentru a ieși din ecranul complet.</translation>
 <translation id="2842985007712546952">Dosar părinte</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Căutați în istoricul dvs.</translation>
 <translation id="3552151358455404883">Gestionează Sincronizarea Chrome și personalizarea în <ph name="BEGIN_LINK1" />Setări<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Adaugă în Agendă</translation>
+<translation id="3568688522516854065">Pentru a accesa filele de pe alte dispozitive, conectează-te și activează sincronizarea</translation>
 <translation id="3587482841069643663">Toate</translation>
 <translation id="3590487821116122040">Stocare a site-urilor pe care Chrome nu o consideră importantă (de ex., site-uri care nu au setări salvate sau pe care nu le accesezi frecvent)</translation>
 <translation id="3599863153486145794">Șterge istoricul de pe toate dispozitivele conectate. Contul Google poate să ofere alte forme ale istoricului de navigare la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Examinează setările pe ecranul următor</translation>
 <translation id="4195643157523330669">Deschide în filă nouă</translation>
 <translation id="4198423547019359126">Nu există locații de descărcare disponibile</translation>
+<translation id="4209895695669353772">Pentru a obține sugestii de conținut personalizat de la Google, activează sincronizarea</translation>
 <translation id="4226663524361240545">Notificările pot face dispozitivul să vibreze</translation>
 <translation id="4242533952199664413">Deschide setările</translation>
 <translation id="424864128008805179">Te deconectezi de la Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Marcaj adăugat în <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> s-a descărcat în <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Dezactivează sunetul pentru un anumit site.</translation>
+<translation id="4472118726404937099">Pentru a sincroniza și a personaliza pe toate dispozitivele, conectează-te și activează sincronizarea</translation>
 <translation id="4479647676395637221">Întreabă înainte de a permite site-urilor să folosească camera foto (recomandat)</translation>
 <translation id="4487967297491345095">Toate datele aplicației Chrome vor fi șterse definitiv. Sunt incluse toate fișierele, setările, conturile, bazele de date etc.</translation>
 <translation id="4508440807153586353">Numai un utilizator care are expresia de acces poate citi datele criptate. Expresia de acces nu este trimisă sau stocată la Google. Dacă uiți expresia de acces sau dorești să modifici această setare, va fi necesar să resetezi sincronizarea. <ph name="BEGIN_LINK" />Află mai multe<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Datele selectate au fost eliminate din Chrome și de pe dispozitivele sincronizate.
 
 Contul Google poate să ofere alte forme ale istoricului de navigare, cum ar fi căutările și activitatea din alte servicii Google, la <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Vezi și gestionează parolele salvate la <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Alege dosarul</translation>
 <translation id="4550003330909367850">Ca să vezi sau să copiezi parola aici, setează blocarea ecranului pe acest dispozitiv.</translation>
 <translation id="4558311620361989323">Comenzi rapide pentru pagini web</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Mai vechi de 30 de zile</translation>
 <translation id="5858741533101922242">Chrome nu poate activa adaptorul Bluetooth</translation>
 <translation id="5860033963881614850">Dezactivat</translation>
+<translation id="5862731021271217234">Pentru a accesa filele de pe alte dispozitive, activează sincronizarea</translation>
 <translation id="5864174910718532887">Detalii: sortate după numele site-ului</translation>
 <translation id="5864419784173784555">Se așteaptă altă descărcare…</translation>
 <translation id="5869522115854928033">Parole salvate</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Panoul de navigare este închis</translation>
 <translation id="8103578431304235997">Filă incognito</translation>
 <translation id="8105951947646329362">Sugerează pagini similare</translation>
+<translation id="8109613176066109935">Pentru a accesa marcajele pe toate dispozitivele, activează sincronizarea</translation>
 <translation id="8116925261070264013">Cu sunetul dezactivat</translation>
 <translation id="813082847718468539">Afișează informațiile privind site-ul</translation>
 <translation id="8168435359814927499">Conținut</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Editează</translation>
 <translation id="9070377983101773829">Începe căutarea vocală</translation>
 <translation id="9071742570345586758">Pentru a vedea conținut de realitate virtuală, instalează serviciile Google VR</translation>
+<translation id="9074336505530349563">Pentru a obține sugestii de conținut personalizat de la Google, conectează-te și activează sincronizarea</translation>
 <translation id="9086455579313502267">Nu se poate accesa rețeaua</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB pentru descărcări</translation>
 <translation id="9100505651305367705">Oferă afișarea simplificată a articolelor, dacă este acceptată</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
index 6978900..d7244f41 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">Выбранные данные удалены из Chrome и с синхронизированных устройств.
 
 Остальная история ваших действий в Интернете может храниться в аккаунте Google, например в виде поисковых запросов и сведений из наших сервисов. Она доступна на странице <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Просматривайте сохраненные пароли и управляйте ими на странице <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Выбор папки</translation>
 <translation id="4550003330909367850">Чтобы просмотреть или скопировать пароль, включите блокировку экрана на этом устройстве.</translation>
 <translation id="4558311620361989323">Работа с веб-страницами</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
index 878fbc3..ec4bdc7 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Ďalej</translation>
 <translation id="1204037785786432551">Stiahnuť obsah odkazu</translation>
 <translation id="1206892813135768548">Kopírovať text odkazu</translation>
+<translation id="1208340532756947324">Ak chcete synchronizovať a prispôsobovať viaceré zariadenia, zapnite synchronizáciu</translation>
 <translation id="1209206284964581585">Skryť</translation>
 <translation id="123724288017357924">Opätovné načítanie aktuálnej stránky a ignorovanie obsahu vo vyrovnávacej pamäti</translation>
 <translation id="124116460088058876">Ďalšie jazyky</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Prehliadať</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> žiada o spárovanie</translation>
 <translation id="1994173015038366702">Webová adresa stránok</translation>
+<translation id="2002537628803770967">Kreditné karty a adresy pomocou služby Google Pay</translation>
 <translation id="200815880754187296">Ďalšie aplikácie: <ph name="KILOBYTES" /> KB</translation>
 <translation id="2017836877785168846">Vymaže históriu a automaticky doplňované výrazy v paneli s adresou.</translation>
 <translation id="2021896219286479412">Ovládanie webu na celú obrazovku</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Zostáva: <ph name="SECONDS" /> s</translation>
 <translation id="2781151931089541271">Zostáva: 1 s</translation>
 <translation id="2810645512293415242">Zjednodušená stránka vám pomôže ušetriť dáta a zrýchliť načítavanie.</translation>
+<translation id="2818669890320396765">Ak chcete získať záložky vo všetkých zariadeniach, prihláste sa a zapnite synchronizáciu</translation>
 <translation id="2836148919159985482">Ukončite režim celej obrazovky klepnutím na tlačidlo Späť.</translation>
 <translation id="2842985007712546952">Nadradený priečinok</translation>
 <translation id="2870560284913253234">Webové stránky</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Prehľadať históriu</translation>
 <translation id="3552151358455404883">Synchronizáciu a prispôsobenie Chromu môžete spravovať v <ph name="BEGIN_LINK1" />Nastaveniach<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Pridať do kontaktov</translation>
+<translation id="3568688522516854065">Ak chcete získať karty zo svojich ostatných zariadení, prihláste sa a zapnite synchronizáciu</translation>
 <translation id="3587482841069643663">Všetko</translation>
 <translation id="3590487821116122040">Úložisko webu, ktoré Chrome nepovažuje za dôležité (napr. webové stránky bez uložených nastavení alebo také, ktoré nenavštevujete často)</translation>
 <translation id="3599863153486145794">Vymaže históriu zo všetkých prihlásených zariadení. Váš účet Google môže mať ďalšie formy histórie prehliadania na adrese <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Skontrolujte nastavenia na ďalšej obrazovke</translation>
 <translation id="4195643157523330669">Otvoriť na novej karte</translation>
 <translation id="4198423547019359126">Nie sú k dispozícii žiadne umiestnenia stiahnutých súborov</translation>
+<translation id="4209895695669353772">Ak chcete získavať prispôsobený obsah navrhnutý Googlom, zapnite synchronizáciu</translation>
 <translation id="4226663524361240545">Upozornenia môžu pri prijatí na zariadení spustiť vibrovanie</translation>
 <translation id="4242533952199664413">Otvoriť nastavenia</translation>
 <translation id="424864128008805179">Odhlásiť sa z prehliadača Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Uložené ako záložka v priečinku <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Súbor <ph name="FILE_NAME" /> bol stiahnutý v prehliadači <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Vypnite zvuk konkrétneho webu.</translation>
+<translation id="4472118726404937099">Ak chcete synchronizovať a prispôsobovať viaceré zariadenia, prihláste sa a zapnite synchronizáciu</translation>
 <translation id="4479647676395637221">Opýtať sa pred povolením webu používať vašu kameru (odporúčané)</translation>
 <translation id="4487967297491345095">Všetky dáta aplikácií v Chrome budú natrvalo odstránené. Platí to aj pre všetky súbory, nastavenia, účty, databázy atď.</translation>
 <translation id="4508440807153586353">Šifrované údaje môže čítať iba používateľ s prístupovou frázou. Prístupová fráza sa do Googlu neodosiela a Google ju ani neukladá. Ak zabudnete prístupovú frázu alebo budete chcieť zmeniť toto nastavenie zmeniť, musíte resetovať synchronizáciu. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Vybrané údaje boli odstránené z Chromu a vašich synchronizovaných zariadení.
 
 Váš účet Google môže mať na adrese <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> ďalšie formy histórie prehliadania, ako napríklad vyhľadávania a aktivity v iných službách Googlu.</translation>
-<translation id="4526249700380860531">Zobrazte si a spravujte uložené heslá na stránke <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Výber priečinka</translation>
 <translation id="4550003330909367850">Ak si tu chcete zobraziť heslo alebo ho sem chcete skopírovať, nastavte v tomto zariadení zámku obrazovky.</translation>
 <translation id="4558311620361989323">Skratky pre webové stránky</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Staršie ako 30 dní</translation>
 <translation id="5858741533101922242">Chrome nedokáže zapnúť adaptér Bluetooth</translation>
 <translation id="5860033963881614850">Vypnuté</translation>
+<translation id="5862731021271217234">Ak chcete získať karty zo svojich ostatných zariadení, zapnite synchronizáciu</translation>
 <translation id="5864174910718532887">Podrobnosti: zoradené podľa názvu webu</translation>
 <translation id="5864419784173784555">Čaká sa na ďalší sťahovaný súbor…</translation>
 <translation id="5869522115854928033">Uložené heslá</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Bol zavretý navigačný panel</translation>
 <translation id="8103578431304235997">Karta inkognito</translation>
 <translation id="8105951947646329362">Navrhovať súvisiace stránky</translation>
+<translation id="8109613176066109935">Ak chcete získať záložky vo všetkých zariadeniach, zapnite synchronizáciu</translation>
 <translation id="8116925261070264013">Zvuk bol vypnutý</translation>
 <translation id="813082847718468539">Zobraziť informácie o stránkach</translation>
 <translation id="8168435359814927499">Obsah</translation>
@@ -965,6 +972,7 @@
 <translation id="9065203028668620118">Upraviť</translation>
 <translation id="9070377983101773829">Spustiť hlasové vyhľadávanie</translation>
 <translation id="9071742570345586758">Na zobrazenie obsahu virtuálnej reality je potrebné nainštalovať služby Google VR</translation>
+<translation id="9074336505530349563">Ak chcete získavať prispôsobený obsah navrhnutý Googlom, prihláste sa a zapnite synchronizáciu</translation>
 <translation id="9086455579313502267">Nepodarilo sa pristúpiť k sieti</translation>
 <translation id="9099018167121903954">Stiahnuté: <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">Ponúkať zjednodušené zobrazenie článkov (ak je podporované)</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
index bd8fa53..0101212c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Naprej</translation>
 <translation id="1204037785786432551">Povezava za prenos</translation>
 <translation id="1206892813135768548">Kopiraj besedilo povezave</translation>
+<translation id="1208340532756947324">Če želite sinhronizirati in prilagajati v vseh napravah, vklopite sinhronizacijo</translation>
 <translation id="1209206284964581585">Zaenkrat skrij</translation>
 <translation id="123724288017357924">Vnov. nalag. tren. strani s prezrtjem predp. vseb.</translation>
 <translation id="124116460088058876">Več jezikov</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Brskanje</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> želi opraviti seznanitev</translation>
 <translation id="1994173015038366702">URL spletnega mesta</translation>
+<translation id="2002537628803770967">Kreditne kartice in naslovi z Googlom Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB drugih aplikacij</translation>
 <translation id="2017836877785168846">Izbriše zgodovino in samodokončanja v naslovni vrstici.</translation>
 <translation id="2021896219286479412">Kontrol. za mesto v celo. načinu</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Še <ph name="SECONDS" /> s</translation>
 <translation id="2781151931089541271">Še 1 s</translation>
 <translation id="2810645512293415242">Poenostavljena stran zaradi prihranka pri prenosu podatkov in hitrejšega nalaganja.</translation>
+<translation id="2818669890320396765">Če želite dostopati do zaznamkov v vseh napravah, se prijavite in vklopite sinhronizacijo</translation>
 <translation id="2836148919159985482">Dotaknite se gumba za nazaj, če želite zapreti celozaslonski način.</translation>
 <translation id="2842985007712546952">Nadrejena mapa</translation>
 <translation id="2870560284913253234">Spletno mesto</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Iščite v svoji zgodovini</translation>
 <translation id="3552151358455404883">Upravljanje sinhronizacije za Chrome in prilagajanja v <ph name="BEGIN_LINK1" />Nastavitvah<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Dodaj med stike</translation>
+<translation id="3568688522516854065">Če želite dostopati do zavihkov iz drugih naprav, vklopite sinhronizacijo</translation>
 <translation id="3587482841069643663">Vse</translation>
 <translation id="3590487821116122040">Shranjeni podatki spletnega mesta, ki se Chromu ne zdijo pomembni (npr. spletna mesta, za katera nimate shranjenih nastavitev ali ki jih ne obiskujete pogosto).</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Pregled nastavitev na naslednjem zaslonu</translation>
 <translation id="4195643157523330669">Odpri v novem zavihku</translation>
 <translation id="4198423547019359126">Ni razpoložljivih mest za prenos</translation>
+<translation id="4209895695669353772">Če želite prejemati prilagojeno vsebino, ki jo predlaga Google, vklopite sinhronizacijo</translation>
 <translation id="4226663524361240545">Ob prejemanju obvestil naprava morda vibrira</translation>
 <translation id="4242533952199664413">Odpri nastavitve</translation>
 <translation id="424864128008805179">Se želite odjaviti iz Chroma?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Zaznamek ustvarjen v mapi <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> – preneseno v izdelku <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Izklop zvoka za določeno spletno mesto.</translation>
+<translation id="4472118726404937099">Če želite sinhronizirati in prilagajati v vseh napravah, se prijavite in vklopite sinhronizacijo</translation>
 <translation id="4479647676395637221">Poziv, preden se spletnim mestom dovoli uporaba kamere (priporočeno)</translation>
 <translation id="4487967297491345095">Vsi podatki aplikacije Chrome bodo trajno izbrisani, vključno z vsemi datotekami, nastavitvami, računi, zbirkami podatkov ipd.</translation>
 <translation id="4508440807153586353">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 če želite spremeniti to nastavitev, boste morali sinhronizacijo ponastaviti. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Izbrani podatki so bili odstranjeni iz Chroma in sinhroniziranih naprav.
 
 V Google Računu so morda druge vrste zgodovine brskanja, kot so iskanja in dejavnosti iz drugih Googlovih storitev, na <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Ogled in upravljanje shranjenih gesel na <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Izbira mape</translation>
 <translation id="4550003330909367850">Če si želite ogledati geslo ali ga kopirati sem, v napravi nastavite zaklepanje zaslona.</translation>
 <translation id="4558311620361989323">Bližnjice za spletne strani</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Starejše od 30 dni</translation>
 <translation id="5858741533101922242">Chrome ne more vklopiti vmesnika za Bluetooth</translation>
 <translation id="5860033963881614850">Izklopljeno</translation>
+<translation id="5862731021271217234">Če želite dostopati do zavihkov iz drugih naprav, vklopite sinhronizacijo</translation>
 <translation id="5864174910718532887">Podrobnosti: razvrščeno po imenu spletnega mesta</translation>
 <translation id="5864419784173784555">Čakanje na drug prenos …</translation>
 <translation id="5869522115854928033">Shranjena gesla</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Podokno za krmarjenje je zaprto</translation>
 <translation id="8103578431304235997">Zavihek brez beleženja zgodovine</translation>
 <translation id="8105951947646329362">Predlaganje sorodnih strani</translation>
+<translation id="8109613176066109935">Če želite dostopati do zaznamkov v vseh napravah, vklopite sinhronizacijo</translation>
 <translation id="8116925261070264013">Prezrto</translation>
 <translation id="813082847718468539">Ogled podatkov o mestu</translation>
 <translation id="8168435359814927499">Vsebina</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Uredi</translation>
 <translation id="9070377983101773829">Začni glasovno iskanje</translation>
 <translation id="9071742570345586758">Če si želite ogledati vsebino v navidezni resničnosti, namestite Googlove storitve za navidezno resničnost</translation>
+<translation id="9074336505530349563">Če želite prejemati prilagojeno vsebino, ki jo predlaga Google, se prijavite in vklopite sinhronizacijo</translation>
 <translation id="9086455579313502267">Dostop do omrežja ni mogoč</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> KB prenesenih datotek</translation>
 <translation id="9100505651305367705">Možnost prikaza člankov v preprostem pogledu, če je podprt</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
index a3c6787..c13eb4f3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Даље</translation>
 <translation id="1204037785786432551">Преузми линк</translation>
 <translation id="1206892813135768548">Копирај текст линка</translation>
+<translation id="1208340532756947324">Да бисте синхронизовали и персонализовали садржај на уређајима, укључите синхронизацију</translation>
 <translation id="1209206284964581585">Сакриј за сада</translation>
 <translation id="123724288017357924">Поновно учитавање актуелне странице, занемарујући кеширани садржај</translation>
 <translation id="124116460088058876">Још језика</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Прегледај</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> жели да се упари</translation>
 <translation id="1994173015038366702">URL сајта</translation>
+<translation id="2002537628803770967">Кредитне картице и адресе из Google Pay-а</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kB – друге апликације</translation>
 <translation id="2017836877785168846">Брише историју и аутоматска довршавања у траци за адресу.</translation>
 <translation id="2021896219286479412">Контроле сајта на целом екрану</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Још <ph name="SECONDS" /> сек</translation>
 <translation id="2781151931089541271">Још 1 сек</translation>
 <translation id="2810645512293415242">Страница је поједностављена ради уштеде на подацима и бржег учитавања.</translation>
+<translation id="2818669890320396765">Да би вам обележивачи били доступни на свим уређајима, пријавите се и укључите синхронизацију</translation>
 <translation id="2836148919159985482">Додирните дугме Назад да бисте изашли из режима целог екрана.</translation>
 <translation id="2842985007712546952">Надређени директоријум</translation>
 <translation id="2870560284913253234">Сајт</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Претражите своју историју</translation>
 <translation id="3552151358455404883">Управљајте синхронизацијом и персонализацијом за Chrome у <ph name="BEGIN_LINK1" />подешавањима<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Додај у контакте</translation>
+<translation id="3568688522516854065">Да би вам картице биле доступне на другим уређајима, пријавите се и укључите синхронизацију</translation>
 <translation id="3587482841069643663">Све</translation>
 <translation id="3590487821116122040">Меморијски простор за сајтове који Chrome не сматра важним (нпр. сајтови без сачуваних подешавања или сајтови које не посећујете често)</translation>
 <translation id="3599863153486145794">Брише историју са свих уређаја на којима сте пријављени. Google налог може да има друге облике историје прегледања на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Прегледајте подешавања на следећем екрану</translation>
 <translation id="4195643157523330669">Отвори у новој картици</translation>
 <translation id="4198423547019359126">Нема доступних локација за преузимања</translation>
+<translation id="4209895695669353772">Да бисте добијали персонализовани садржај који предлаже Google, укључите синхронизацију</translation>
 <translation id="4226663524361240545">Уређај ће вибрирати када примате обавештења</translation>
 <translation id="4242533952199664413">Отвори подешавања</translation>
 <translation id="424864128008805179">Желите ли да се одјавите из Chrome-а?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Обележивач је додат у <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416">Датотека <ph name="FILE_NAME" /> је преузета у <ph name="PRODUCT_NAME" />-у</translation>
 <translation id="4468959413250150279">Искључи звук за одређени сајт</translation>
+<translation id="4472118726404937099">Да бисте синхронизовали и персонализовали садржај на уређајима, пријавите се и укључите синхронизацију</translation>
 <translation id="4479647676395637221">Питај пре него што дозволиш сајтовима да користе камеру (препоручено)</translation>
 <translation id="4487967297491345095">Сви подаци Chrome апликација ће бити трајно избрисани. То обухвата све датотеке, подешавања, налоге, базе података итд.</translation>
 <translation id="4508440807153586353">Само неко ко има приступну фразу може да чита шифроване податке. Google не шаље нити чува приступну фразу. Ако заборавите приступну фразу или желите да промените ово подешавање, мораћете да ресетујете синхронизацију. <ph name="BEGIN_LINK" />Сазнајте више<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Изабрани подаци су уклоњени из Chrome-а и са синхронизованих уређаја.
 
 Google налог можда има друге облике историје прегледања, попут претрага и активности у другим Google услугама на <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Прегледајте сачуване лозинке и управљајте њима на <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Изаберите директоријум</translation>
 <translation id="4550003330909367850">Да бисте прегледали или копирали лозинку овде, подесите закључавање екрана на овом уређају.</translation>
 <translation id="4558311620361989323">Пречице за веб-странице</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Старије од 30 дана</translation>
 <translation id="5858741533101922242">Chrome не може да укључи Bluetooth адаптер</translation>
 <translation id="5860033963881614850">Искључено</translation>
+<translation id="5862731021271217234">Да би вам картице биле доступне на другим уређајима, укључите синхронизацију</translation>
 <translation id="5864174910718532887">Детаљи: сортирано према називу сајта</translation>
 <translation id="5864419784173784555">Чека се друго преузимање...</translation>
 <translation id="5869522115854928033">Сачуване лозинке</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Навигациона табла је затворена</translation>
 <translation id="8103578431304235997">Картице без архивирања</translation>
 <translation id="8105951947646329362">Приказуј предлоге сродних страница</translation>
+<translation id="8109613176066109935">Да би вам обележивачи били доступни на свим уређајима, укључите синхронизацију</translation>
 <translation id="8116925261070264013">Звук је искључен</translation>
 <translation id="813082847718468539">Погледајте информације о сајту</translation>
 <translation id="8168435359814927499">Садржај</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Измени</translation>
 <translation id="9070377983101773829">Започни гласовну претрагу</translation>
 <translation id="9071742570345586758">Да бисте прегледали садржај виртуелне реалности, инсталирајте Google услуге виртуелне реалности</translation>
+<translation id="9074336505530349563">Да бисте добијали персонализовани садржај који предлаже Google, пријавите се и укључите синхронизацију</translation>
 <translation id="9086455579313502267">Не можемо да приступимо мрежи</translation>
 <translation id="9099018167121903954">Преузели сте <ph name="KILOBYTES" /> kB</translation>
 <translation id="9100505651305367705">Понуди приказивање чланака у поједностављеном приказу када је то подржано</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
index 3477f04..798c40b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Nästa</translation>
 <translation id="1204037785786432551">Ladda ned länk</translation>
 <translation id="1206892813135768548">Kopiera länktext</translation>
+<translation id="1208340532756947324">Aktivera synkronisering om du vill synkronisera och anpassa alla dina enheter</translation>
 <translation id="1209206284964581585">Dölj för tillfället</translation>
 <translation id="123724288017357924">Läs in den aktuella sidan igen och ignorera cachelagrat innehåll</translation>
 <translation id="124116460088058876">Fler språk</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Bläddra</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> vill kopplas</translation>
 <translation id="1994173015038366702">Webbadress</translation>
+<translation id="2002537628803770967">Kreditkort och adresser som används med Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> kB används av övriga appar</translation>
 <translation id="2017836877785168846">Rensar historik och autoslutföranden i adressfältet.</translation>
 <translation id="2021896219286479412">Helskärmskontroller på webbsidan</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sekunder kvar</translation>
 <translation id="2781151931089541271">1 sekund kvar</translation>
 <translation id="2810645512293415242">Förenklad sida visades för att spara data och minska inläsningstiden.</translation>
+<translation id="2818669890320396765">Logga in och aktivera synkronisering om du vill ha dina bokmärken tillgängliga på alla enheter</translation>
 <translation id="2836148919159985482">Tryck på bakåtknappen för att lämna helskärmsläget.</translation>
 <translation id="2842985007712546952">Överordnad mapp</translation>
 <translation id="2870560284913253234">Webbplats</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Sök i historik</translation>
 <translation id="3552151358455404883">Hantera Chrome Sync och anpassning i <ph name="BEGIN_LINK1" />inställningarna<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Lägg till i kontakter</translation>
+<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="3590487821116122040">Webbplatslagring som Chrome bedömer som oviktig (t.ex. webbplatser utan sparade inställningar eller som du inte besöker ofta)</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>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Granska inställningarna på nästa skärm</translation>
 <translation id="4195643157523330669">Öppna i ny flik</translation>
 <translation id="4198423547019359126">Det fins inga tillgängliga nedladdningsplatser</translation>
+<translation id="4209895695669353772">Aktivera synkronisering om du vill få förslag på anpassat innehåll från Google</translation>
 <translation id="4226663524361240545">Aviseringar kan göra att enheten vibrerar</translation>
 <translation id="4242533952199664413">Öppna Inställningar</translation>
 <translation id="424864128008805179">Vill du logga ut från Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Bokmärkt i <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> har laddats ned i <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Stäng av ljudet för en webbplats.</translation>
+<translation id="4472118726404937099">Logga in och aktivera synkronisering om du vill synkronisera och anpassa alla dina enheter</translation>
 <translation id="4479647676395637221">Fråga innan webbplatser tillåts att använda kameran (rekommenderas)</translation>
 <translation id="4487967297491345095">All appdata i Chrome raderas permanent. Detta omfattar alla filer, inställningar, konton, databaser osv.</translation>
 <translation id="4508440807153586353">Endast personer som har ditt lösenord kan läsa dina krypterade uppgifter. Lösenordet skickas inte till och sparas inte av Google. Om du glömmer lösenordet måste du återställa synkroniseringen. <ph name="BEGIN_LINK" />Läs mer<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Markerad data har tagits bort från Chrome och från synkroniserade enheter.
 
 Det kan finnas andra former av webbhistorik i Google-kontot på <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />, t.ex. sökningar och aktivitet på andra tjänster från Google.</translation>
-<translation id="4526249700380860531">Visa och hantera sparade lösenord på <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Välj mapp</translation>
 <translation id="4550003330909367850">Ange ett skärmlås på enheten om du vill visa eller kopiera lösenordet här.</translation>
 <translation id="4558311620361989323">Kortkommandon på webbsidor</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Äldre än 30 dagar</translation>
 <translation id="5858741533101922242">Det gick inte att aktivera Bluetooth-adaptern i Chrome</translation>
 <translation id="5860033963881614850">Av</translation>
+<translation id="5862731021271217234">Aktivera synkronisering om du vill ha samma flikar tillgängliga på alla enheter</translation>
 <translation id="5864174910718532887">Mer information: Sorterad efter webbplatsnamn</translation>
 <translation id="5864419784173784555">Väntar på nästa nedladdning …</translation>
 <translation id="5869522115854928033">Sparade lösenord</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Navigeringspanelen har stängts</translation>
 <translation id="8103578431304235997">Inkognitoflik</translation>
 <translation id="8105951947646329362">Föreslå relaterade sidor</translation>
+<translation id="8109613176066109935">Aktivera synkronisering om du vill ha dina bokmärken tillgängliga på alla enheter</translation>
 <translation id="8116925261070264013">Ljudet avstängt</translation>
 <translation id="813082847718468539">Visa information om webbplatsen</translation>
 <translation id="8168435359814927499">Innehåll</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Redigera</translation>
 <translation id="9070377983101773829">Starta röstsökning</translation>
 <translation id="9071742570345586758">Installera Googles VR-tjänster om du vill visa innehåll med virtuell verklighet</translation>
+<translation id="9074336505530349563">Logga in och aktivera synkronisering om du vill få förslag på anpassat innehåll från Google</translation>
 <translation id="9086455579313502267">Det går inte att ansluta till nätverket</translation>
 <translation id="9099018167121903954"><ph name="KILOBYTES" /> kB används av nedladdningar</translation>
 <translation id="9100505651305367705">Fråga om artiklarna ska visas i en förenklad vy när detta stöds</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
index ee86f6c..37317654 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Ifuatayo</translation>
 <translation id="1204037785786432551">Kiungo cha kupakua</translation>
 <translation id="1206892813135768548">Nakili maandishi ya kiungo</translation>
+<translation id="1208340532756947324">Ili usawazishe na uweke mapendeleo kwenye vifaa vyako vyote, washa kipengele cha usawazishaji</translation>
 <translation id="1209206284964581585">Ficha kwa sasa</translation>
 <translation id="123724288017357924">Pakia upya ukurasa wa sasa, puuza maudhui ya akiba</translation>
 <translation id="124116460088058876">Lugha zaidi</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Vinjari</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> inataka kuoanisha</translation>
 <translation id="1994173015038366702">URL ya Tovuti</translation>
+<translation id="2002537628803770967">Kadi za mikopo na anwani zinazotumia Google Pay</translation>
 <translation id="200815880754187296">Programu nyingine za KB <ph name="KILOBYTES" /></translation>
 <translation id="2017836877785168846">Hufuta historia na ujazaji kiotomatiki katika sehemu ya anwani.</translation>
 <translation id="2021896219286479412">Vidhibiti vya tovuti vya skrini nzima</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Zimesalia sekunde <ph name="SECONDS" /></translation>
 <translation id="2781151931089541271">Imesalia sekunde 1</translation>
 <translation id="2810645512293415242">Ukurasa umerahisishwa ili uokoe data na upakie haraka zaidi.</translation>
+<translation id="2818669890320396765">Ingia katika akaunti na uwashe kipengele cha usawazishaji ili upate alamisho zako kwenye vifaa vyako vyote</translation>
 <translation id="2836148919159985482">Gusa kitufe cha kurudi nyuma ili uondoke kwenye skrini nzima.</translation>
 <translation id="2842985007712546952">Folda kuu</translation>
 <translation id="2870560284913253234">Tovuti</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Tafuta katika historia yako</translation>
 <translation id="3552151358455404883">Dhibiti Usawazishaji wa Chrome na uboreshaji katika <ph name="BEGIN_LINK1" />Mipangilio<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Ongeza kwenye anwani</translation>
+<translation id="3568688522516854065">Ingia katika akaunti na uwashe kipengele cha usawazishaji ili upate vichupo vyako kutoka vifaa vyako vingine</translation>
 <translation id="3587482841069643663">Zote</translation>
 <translation id="3590487821116122040">Hifadhi ya tovuti ambayo Chrome haidhani ni muhimu (k.m. tovuti ambazo hazina mipangilio iliyohifadhiwa au ambazo hutembelei sana)</translation>
 <translation id="3599863153486145794">Hufuta historia kwenye vifaa vyote ulivyotumia kuingia katika akaunti. Huenda Akaunti yako ya Google ikawa na aina nyingine za historia ya kuvinjari kwenye <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Kagua mipangilio yako kwenye skrini inayofuata</translation>
 <translation id="4195643157523330669">Fungua katika kichupo kipya</translation>
 <translation id="4198423547019359126">Hakuna maeneno ya upakuaji</translation>
+<translation id="4209895695669353772">Washa kipengele cha usawazishaji ili Google ikupendekezee maudhui yanayokufaa</translation>
 <translation id="4226663524361240545">Arifa huenda zitatetemesha kifaa</translation>
 <translation id="4242533952199664413">Fungua mipangilio</translation>
 <translation id="424864128008805179">Ungependa kuondoka kwenye Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Imetia alamishwa kwenye <ph name="FOLDER_NAME" /></translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> imepakuliwa katika <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Zima sauti katika tovuti mahususi.</translation>
+<translation id="4472118726404937099">Ingia katika akaunti na uwashe kipengele cha usawazishaji ili usawazishe na uweke mapendeleo kwenye vifaa vyako vyote</translation>
 <translation id="4479647676395637221">Uliza kwanza kabla ya kuruhusu tovuti zitumie kamera yako (inapendekezwa)</translation>
 <translation id="4487967297491345095">Data yote ya programu ya Chrome itafutwa kabisa. Hii ni pamoja na faili, mipangilio, akaunti, hifadhidata zote, n.k.</translation>
 <translation id="4508440807153586353">Ni mtu mwenye kauli yako ya siri pekee ndiye anaweza kusoma data yako iliyosimbwa kwa njia fiche. Kauli ya siri haitumwi au kuhifadhiwa na Google. Ukisahau kauli yako ya siri, utahitaji kufanya usawazishaji upya. <ph name="BEGIN_LINK" />Pata maelezo zaidi<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Data uliyochagua imeondolewa kwenye Chrome na kwenye vifaa vyako vilivyosawazishwa. 
 
 Huenda akaunti yako ya Google ina aina nyingine za historia ya kuvinjari kama vile mambo uliyotafuta na shughuli kutoka huduma nyingine za Google katika <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Angalia na udhibiti manenosiri yaliyohifadhiwa kwenye <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Chagua folda</translation>
 <translation id="4550003330909367850">Ili uangalie au unakili nenosiri lako hapa, weka kipengele cha kufunga skrini kwenye kifaa hiki.</translation>
 <translation id="4558311620361989323">Njia za mikato za ukurasa wa wavuti</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Iliyohifadhiwa kwa zaidi ya siku 30</translation>
 <translation id="5858741533101922242">Chrome imeshindwa kuwasha adapta ya Bluetooth</translation>
 <translation id="5860033963881614850">Kimezimwa</translation>
+<translation id="5862731021271217234">Washa kipengele cha usawazishaji ili upate vichupo kutoka kwenye vifaa vyako vingine</translation>
 <translation id="5864174910718532887">Maelezo: Imepangwa kulingana na jina la tovuti</translation>
 <translation id="5864419784173784555">Inasubiri kipakuliwa kingine…</translation>
 <translation id="5869522115854928033">Manenosiri yaliyohifadhiwa</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Kidirisha cha kusogeza kimefungwa</translation>
 <translation id="8103578431304235997">Kichupo Fiche</translation>
 <translation id="8105951947646329362">Pendekeza kurasa zinazohusiana</translation>
+<translation id="8109613176066109935">Washa kipengele cha usawazishaji ili upate alamisho kwenye vifaa vyako vyote</translation>
 <translation id="8116925261070264013">Imezimwa</translation>
 <translation id="813082847718468539">Angalia maelezo ya tovuti</translation>
 <translation id="8168435359814927499">Maudhui</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Badilisha</translation>
 <translation id="9070377983101773829">Anza kutafuta kwa kutamka</translation>
 <translation id="9071742570345586758">Sakinisha Huduma za Google VR ili uangalie maudhui ya uhalisi pepe</translation>
+<translation id="9074336505530349563">Ingia katika akaunti na uwashe kipengee cha usawazishaji ili upate maudhui yanayokufaa unayopendekezewa na Google</translation>
 <translation id="9086455579313502267">Haiwezi kufikia mtandao</translation>
 <translation id="9099018167121903954">Imepakua KB <ph name="KILOBYTES" /></translation>
 <translation id="9100505651305367705">Onyesha makala katika mwonekano rahisi, ikiwa yanatumika</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
index 5469f21..92c82c0 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">ถัดไป</translation>
 <translation id="1204037785786432551">ดาวน์โหลดลิงก์</translation>
 <translation id="1206892813135768548">คัดลอกข้อความลิงก์</translation>
+<translation id="1208340532756947324">เปิดการซิงค์เพื่อซิงค์และปรับเปลี่ยนการตั้งค่าในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="1209206284964581585">ซ่อนไปก่อน</translation>
 <translation id="123724288017357924">โหลดหน้าปัจจุบันซ้ำ โดยไม่คำนึงถึงเนื้อหาที่แคชไว้</translation>
 <translation id="124116460088058876">ภาษาเพิ่มเติม</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">เล่นเน็ต</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> ต้องการจับคู่</translation>
 <translation id="1994173015038366702">URL ของเว็บไซต์</translation>
+<translation id="2002537628803770967">ใช้ข้อมูลบัตรเครดิตและที่อยู่จาก Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB จากแอปอื่นๆ</translation>
 <translation id="2017836877785168846">ล้างประวัติการเข้าชมและการเติมข้อความอัตโนมัติในแถบที่อยู่เว็บ</translation>
 <translation id="2021896219286479412">ส่วนควบคุมเว็บไซต์แบบเต็มหน้าจอ</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">เหลือ <ph name="SECONDS" /> วิ</translation>
 <translation id="2781151931089541271">เหลือ 1 วิ</translation>
 <translation id="2810645512293415242">ลดรายละเอียดหน้าเว็บเพื่อประหยัดเน็ตมือถือและโหลดได้เร็วขึ้น</translation>
+<translation id="2818669890320396765">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation>
 <translation id="2836148919159985482">แตะปุ่มกลับเพื่อออกจากโหมดเต็มหน้าจอ</translation>
 <translation id="2842985007712546952">โฟลเดอร์ระดับบนสุด</translation>
 <translation id="2870560284913253234">เว็บไซต์</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">ค้นหาประวัติการเข้าชม</translation>
 <translation id="3552151358455404883">จัดการการซิงค์ของ Chrome และการปรับเปลี่ยนในแบบของคุณใน<ph name="BEGIN_LINK1" />การตั้งค่า<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">เพิ่มในรายชื่อติดต่อ</translation>
+<translation id="3568688522516854065">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
 <translation id="3587482841069643663">ทั้งหมด</translation>
 <translation id="3590487821116122040">พื้นที่เก็บข้อมูลเว็บไซต์ที่ Chrome คิดว่าไม่สำคัญ (เช่น เว็บไซต์ที่ไม่มีการตั้งค่าที่บันทึกไว้หรือที่คุณไม่ได้เข้าชมบ่อยครั้ง)</translation>
 <translation id="3599863153486145794">ล้างประวัติจากอุปกรณ์ที่ลงชื่อเข้าใช้ทั้งหมด บัญชี Google อาจมีประวัติการท่องเว็บรูปแบบอื่นๆ ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">ตรวจสอบการตั้งค่าในหน้าจอถัดไป</translation>
 <translation id="4195643157523330669">เปิดในแท็บใหม่</translation>
 <translation id="4198423547019359126">ไม่มีตำแหน่งการดาวน์โหลดที่ใช้ได้</translation>
+<translation id="4209895695669353772">เปิดการซิงค์เพื่อรับคำแนะนำเนื้อหาที่ปรับเปลี่ยนในแบบของคุณจาก Google</translation>
 <translation id="4226663524361240545">การแจ้งเตือนอาจทำให้อุปกรณ์สั่น</translation>
 <translation id="4242533952199664413">เปิดการตั้งค่า</translation>
 <translation id="424864128008805179">ต้องการออกจากระบบ Chrome ไหม</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">เพิ่มบุ๊กมาร์กไปยัง <ph name="FOLDER_NAME" /> แล้ว</translation>
 <translation id="4453340223357552416">ดาวน์โหลด <ph name="FILE_NAME" /> ไว้ใน <ph name="PRODUCT_NAME" /> แล้ว</translation>
 <translation id="4468959413250150279">ปิดเสียงไซต์ที่ต้องการ</translation>
+<translation id="4472118726404937099">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อซิงค์และปรับเปลี่ยนการตั้งค่าในอุปกรณ์ทุกเครื่อง</translation>
 <translation id="4479647676395637221">ถามก่อน ก่อนที่จะอนุญาตให้เว็บไซต์ใช้กล้องถ่ายรูปของคุณ (แนะนำ)</translation>
 <translation id="4487967297491345095">ระบบจะลบข้อมูลแอปทั้งหมดของ Chrome อย่างถาวร ซึ่งรวมถึงไฟล์ทั้งหมด การตั้งค่า บัญชี ฐานข้อมูล และอื่นๆ</translation>
 <translation id="4508440807153586353">เฉพาะผู้ที่มีรหัสผ่านของคุณเท่านั้นจึงจะสามารถอ่านข้อมูลที่เข้ารหัสของคุณได้ Google จะไม่ส่งหรือจัดเก็บรหัสผ่านนี้ หากคุณลืมรหัสผ่านหรือต้องการเปลี่ยนการตั้งค่านี้ คุณจะต้องรีเซ็ตการซิงค์ <ph name="BEGIN_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">ระบบได้นำข้อมูลที่เลือกออกจาก Chrome และอุปกรณ์ที่ซิงค์แล้ว
 
 บัญชี Google ของคุณอาจมีประวัติการท่องเว็บในรูปแบบอื่นๆ เช่น การค้นหาและกิจกรรมจากบริการอื่นๆ ของ Google ที่ <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /></translation>
-<translation id="4526249700380860531">ดูและจัดการรหัสผ่านที่บันทึกไว้ที่ <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">เลือกโฟลเดอร์</translation>
 <translation id="4550003330909367850">หากต้องการดูหรือคัดลอกรหัสผ่านที่นี่ ให้ตั้งค่าการล็อกหน้าจอในอุปกรณ์นี้</translation>
 <translation id="4558311620361989323">แป้นพิมพ์ลัดสำหรับหน้าเว็บ</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">เกิน 30 วัน</translation>
 <translation id="5858741533101922242">Chrome ไม่สามารถเปิดอะแดปเตอร์บลูทูธ</translation>
 <translation id="5860033963881614850">ปิด</translation>
+<translation id="5862731021271217234">เปิดการซิงค์เพื่อรับแท็บจากอุปกรณ์เครื่องอื่นๆ ของคุณ</translation>
 <translation id="5864174910718532887">รายละเอียด: จัดเรียงตามชื่อเว็บไซต์</translation>
 <translation id="5864419784173784555">กำลังรอการดาวน์โหลดรายการอื่น…</translation>
 <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">ปิดแผงการนำทางแล้ว</translation>
 <translation id="8103578431304235997">แท็บที่ไม่ระบุตัวตน</translation>
 <translation id="8105951947646329362">แนะนำหน้าเว็บที่เกี่ยวข้อง</translation>
+<translation id="8109613176066109935">เปิดการซิงค์เพื่อรับบุ๊กมาร์กในอุปกรณ์ทุกเครื่องของคุณ</translation>
 <translation id="8116925261070264013">ปิดเสียง</translation>
 <translation id="813082847718468539">ดูข้อมูลเว็บไซต์</translation>
 <translation id="8168435359814927499">เนื้อหา</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">แก้ไข</translation>
 <translation id="9070377983101773829">เริ่มค้นหาด้วยเสียง</translation>
 <translation id="9071742570345586758">หากต้องการดูเนื้อหา Virtual Reality โปรดติดตั้งบริการ VR ของ Google</translation>
+<translation id="9074336505530349563">ลงชื่อเข้าใช้และเปิดการซิงค์เพื่อรับคำแนะนำเนื้อหาที่ปรับเปลี่ยนในแบบของคุณจาก Google</translation>
 <translation id="9086455579313502267">ไม่สามารถเข้าถึงเครือข่าย</translation>
 <translation id="9099018167121903954">พื้นที่ที่ใช้ไปสำหรับการดาวน์โหลด <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">เสนอการแสดงบทความในมุมมองอย่างง่าย ในกรณีที่บทความทำได้</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
index 3c5b7ee..dce8d396 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Sonraki</translation>
 <translation id="1204037785786432551">Bağlantıyı indir</translation>
 <translation id="1206892813135768548">Bağlantı metnini kopyala</translation>
+<translation id="1208340532756947324">Cihazlar arasında senkronizasyon ve kişiselleştirme yapmak için senkronizasyonu etkinleştirin</translation>
 <translation id="1209206284964581585">Şimdilik gizle</translation>
 <translation id="123724288017357924">Önbelleğe alınmış içeriği yoksayarak geçerli sayfayı yeniden yükler</translation>
 <translation id="124116460088058876">Diğer diller</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Göz at</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> eşlenmek istiyor</translation>
 <translation id="1994173015038366702">Site URL'si</translation>
+<translation id="2002537628803770967">Google Pay'i kullanan kredi kartları ve adresler</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> KB diğer uygulamalar</translation>
 <translation id="2017836877785168846">Geçmişi ve adres çubuğundaki otomatik tamamlama bilgilerini temizler.</translation>
 <translation id="2021896219286479412">Tam ekran site kontrolleri</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389"><ph name="SECONDS" /> sn. kaldı</translation>
 <translation id="2781151931089541271">1 sn. kaldı</translation>
 <translation id="2810645512293415242">Veriden tasarruf etmek ve daha hızlı yüklemek için basitleştirilmiş sayfa.</translation>
+<translation id="2818669890320396765">Yer işaretlerinizi tüm cihazlarınızda almak için oturum açın ve senkronizasyonu etkinleştirin</translation>
 <translation id="2836148919159985482">Tam ekrandan çıkmak için geri düğmesine dokunun.</translation>
 <translation id="2842985007712546952">Ana klasör</translation>
 <translation id="2870560284913253234">Site</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Geçmişinizde arayın</translation>
 <translation id="3552151358455404883">Chrome Senkronizasyonu'nu ve kişiselleştirmeyi <ph name="BEGIN_LINK1" />Ayarlar<ph name="END_LINK1" /> bölümünden yönetin</translation>
 <translation id="3557336313807607643">Kişilere ekle</translation>
+<translation id="3568688522516854065">Diğer cihazlarınızdaki sekmelerinize ulaşmak için oturum açın ve senkronizasyonu etkinleştirin</translation>
 <translation id="3587482841069643663">Tümü</translation>
 <translation id="3590487821116122040">Chrome'un önemli olmadığını düşündüğü site depolama alanı (ör. kayıtlı ayarları bulunmayan veya sık ziyaret etmediğiniz siteler)</translation>
 <translation id="3599863153486145794">Oturumunuzun açık olduğu tüm cihazlarda geçmişi temizler. Google Hesabınızın <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde başka biçimlerde tarama geçmişi olabilir.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Bir sonraki ekranda ayarlarınızı gözden geçirin</translation>
 <translation id="4195643157523330669">Yeni sekmede aç</translation>
 <translation id="4198423547019359126">Kullanılabilir indirme yeri yok</translation>
+<translation id="4209895695669353772">Google tarafından önerilen kişiselleştirilmiş içeriği almak için senkronizasyonu açın</translation>
 <translation id="4226663524361240545">Bildirimler cihazı titretebilir</translation>
 <translation id="4242533952199664413">Ayarları aç</translation>
 <translation id="424864128008805179">Chrome oturumu kapatılsın mı?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Yer işareti <ph name="FOLDER_NAME" /> klasörüne eklendi</translation>
 <translation id="4453340223357552416"><ph name="FILE_NAME" /> dosyası <ph name="PRODUCT_NAME" /> uygulamasında indirildi</translation>
 <translation id="4468959413250150279">Belirli bir site için sesi kapatın.</translation>
+<translation id="4472118726404937099">Cihazlar arasında senkronizasyon ve kişiselleştirme yapmak için oturum açın ve senkronizasyonu etkinleştirin</translation>
 <translation id="4479647676395637221">Sitelerin, kameranızı kullanmasına izin verilmeden önce size sorulsun (önerilir)</translation>
 <translation id="4487967297491345095">Chrome'un tüm uygulama verileri kalıcı olarak silinecek. Buna tüm dosyalar, ayarlar, hesaplar, veritabanları vb. dahildir.</translation>
 <translation id="4508440807153586353">Yalnızca parolanızı bilen biri, şifrelenmiş verilerinizi okuyabilir. Parola Google'a gönderilmez veya Google tarafından saklanmaz. Parolanızı unutursanız veya bu ayarı değiştirmek isterseniz senkronizasyonu sıfırlamanız gerekir. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Seçilen veriler Chrome'dan ve senkronize edilen cihazlarınızdan kaldırıldı.
 
 Diğer Google hizmetlerinden yapılan aramalar ve etkinlikler gibi Google hesabınızla ilişkili başka biçimlerde tarama geçmişi <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> adresinde bulunabilir.</translation>
-<translation id="4526249700380860531">Kaydedilmiş şifreleri <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> adresinden görüntüleyin ve yönetin</translation>
 <translation id="4532845899244822526">Klasör seçin</translation>
 <translation id="4550003330909367850">Burada şifrenizi görüntülemek veya kopyalamak için bu cihazda ekran kilidini ayarlayın.</translation>
 <translation id="4558311620361989323">Web sayfası kısayolları</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">30 günden daha eski</translation>
 <translation id="5858741533101922242">Chrome, Bluetooth adaptörünü açamıyor</translation>
 <translation id="5860033963881614850">Kapalı</translation>
+<translation id="5862731021271217234">Diğer cihazlarınızdaki sekmelerinize ulaşmak için senkronizasyonu etkinleştirin</translation>
 <translation id="5864174910718532887">Ayrıntılar: Site adına göre sıralı</translation>
 <translation id="5864419784173784555">Başka bir indirme işlemi bekleniyor…</translation>
 <translation id="5869522115854928033">Kayıtlı şifreler</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Gezinme paneli kapatıldı</translation>
 <translation id="8103578431304235997">Gizli Sekme</translation>
 <translation id="8105951947646329362">İlgili sayfalar öner</translation>
+<translation id="8109613176066109935">Yer işaretlerinize tüm cihazlarınızda ulaşmak için senkronizasyonu açın</translation>
 <translation id="8116925261070264013">Ses kapatıldı</translation>
 <translation id="813082847718468539">Site bilgilerini görüntüle</translation>
 <translation id="8168435359814927499">İçerik</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Düzenle</translation>
 <translation id="9070377983101773829">Sesli arama başlat</translation>
 <translation id="9071742570345586758">Sanal gerçeklik içeriğini görüntülemek için Google VR Hizmetleri'ni yükleyin</translation>
+<translation id="9074336505530349563">Google tarafından önerilen kişiselleştirilmiş içeriği almak için oturum açın ve senkronizasyonu etkinleştirin</translation>
 <translation id="9086455579313502267">Ağa erişilemiyor</translation>
 <translation id="9099018167121903954">İndirilenler <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">Desteklendiğinde makaleleri basitleştirilmiş görünümde göstermeyi öner</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
index 4ec1c27..448a723 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">Далі</translation>
 <translation id="1204037785786432551">Завантажити посилання</translation>
 <translation id="1206892813135768548">Копіювати текст посилання</translation>
+<translation id="1208340532756947324">Щоб синхронізувати й персоналізувати дані на пристроях, увімкніть синхронізацію</translation>
 <translation id="1209206284964581585">Приховати</translation>
 <translation id="123724288017357924">Оновити цю сторінку, ігноруючи кешований вміст</translation>
 <translation id="124116460088058876">Інші мови</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">Переглянути</translation>
 <translation id="1993768208584545658">Сайт <ph name="SITE" /> хоче підключитися до пристрою</translation>
 <translation id="1994173015038366702">URL-адреса сайту</translation>
+<translation id="2002537628803770967">Кредитні картки й адреси, додані в Google Pay</translation>
 <translation id="200815880754187296"><ph name="KILOBYTES" /> КБ використовується іншими додатками</translation>
 <translation id="2017836877785168846">Очищує історію й автозавершення в адресному рядку.</translation>
 <translation id="2021896219286479412">Керування повноекранним режимом</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">Залишилося <ph name="SECONDS" /> с</translation>
 <translation id="2781151931089541271">Залишилась 1 с</translation>
 <translation id="2810645512293415242">Спрощена сторінка для заощадження трафіку та швидшого завантаження.</translation>
+<translation id="2818669890320396765">Щоб мати доступ до закладок на всіх своїх пристроях, увійдіть в обліковий запис і ввімкніть синхронізацію</translation>
 <translation id="2836148919159985482">Щоб вийти з повноекранного режиму, торкніться кнопки "Назад".</translation>
 <translation id="2842985007712546952">Батьківська папка</translation>
 <translation id="2870560284913253234">Сайт</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">Пошук в історії</translation>
 <translation id="3552151358455404883">Керуйте синхронізацією та персоналізацією Chrome у <ph name="BEGIN_LINK1" />налаштуваннях<ph name="END_LINK1" /></translation>
 <translation id="3557336313807607643">Додати до контактів</translation>
+<translation id="3568688522516854065">Щоб мати доступ до вкладок з інших пристроїв, увійдіть в обліковий запис і ввімкніть синхронізацію</translation>
 <translation id="3587482841069643663">Все</translation>
 <translation id="3590487821116122040">Дані сайтів, які Chrome визначив як неважливі, зокрема сайтів із незбереженими налаштуваннями або тих, які ви рідко відвідуєте</translation>
 <translation id="3599863153486145794">Очищує історію на всіх пристроях, на яких ви ввійшли в обліковий запис. У вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> можуть бути інші форми історії веб-перегляду.</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">Перегляньте налаштування на наступному екрані</translation>
 <translation id="4195643157523330669">Відкрити в новій вкладці</translation>
 <translation id="4198423547019359126">Немає доступних місць для завантаження</translation>
+<translation id="4209895695669353772">Щоб отримувати персоналізовані пропозиції від Google, увімкніть синхронізацію</translation>
 <translation id="4226663524361240545">Коли надходитимуть сповіщення, пристрій може вібрувати</translation>
 <translation id="4242533952199664413">Відкрити налаштування</translation>
 <translation id="424864128008805179">Вийти з Chrome?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">Закладку збережено в папці "<ph name="FOLDER_NAME" />"</translation>
 <translation id="4453340223357552416">Файл <ph name="FILE_NAME" /> завантажено в продукті <ph name="PRODUCT_NAME" /></translation>
 <translation id="4468959413250150279">Вимкнути звук для певного сайту.</translation>
+<translation id="4472118726404937099">Щоб синхронізувати й персоналізувати дані на пристроях, увійдіть в обліковий запис і ввімкніть синхронізацію</translation>
 <translation id="4479647676395637221">Запитувати, перш ніж дозволити сайтам використовувати камеру (рекомендується)</translation>
 <translation id="4487967297491345095">Усі дані Chrome буде видалено назавжди. Це стосується всіх файлів, налаштувань, облікових записів, баз даних тощо.</translation>
 <translation id="4508440807153586353">Ваші зашифровані дані можуть переглядати лише користувачі, які знають вашу парольну фразу. Парольна фраза не надсилається й не зберігається в Google. Якщо ви забули її або хочете змінити це налаштування, скиньте синхронізацію. <ph name="BEGIN_LINK" />Докладніше<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">Вибрані дані видалено з Chrome і синхронізованих пристроїв.
 
 У вашому обліковому записі Google на сторінці <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> можуть бути додаткові форми історії веб-перегляду, як-от пошукові запити чи активність в інших сервісах Google.</translation>
-<translation id="4526249700380860531">Переглядайте збережені паролі та керуйте ними на сторінці <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Вибрати папку</translation>
 <translation id="4550003330909367850">Щоб переглядати та копіювати пароль тут, налаштуйте на цьому пристрої блокування екрана.</translation>
 <translation id="4558311620361989323">Комбінації клавіш для роботи з веб-сторінками</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">Понад 30 днів тому</translation>
 <translation id="5858741533101922242">Chrome не може ввімкнути адаптер Bluetooth</translation>
 <translation id="5860033963881614850">Вимк.</translation>
+<translation id="5862731021271217234">Щоб мати доступ до вкладок з інших пристроїв, увімкніть синхронізацію</translation>
 <translation id="5864174910718532887">Деталі: відсортовано за назвою сайту</translation>
 <translation id="5864419784173784555">Очікується інше завантаження…</translation>
 <translation id="5869522115854928033">Збережені паролі</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">Панель навігації закрито</translation>
 <translation id="8103578431304235997">Анонімна вкладка</translation>
 <translation id="8105951947646329362">Пропонувати схожі сторінки</translation>
+<translation id="8109613176066109935">Щоб мати доступ до закладок на всіх своїх пристроях, увімкніть синхронізацію</translation>
 <translation id="8116925261070264013">Звук вимкнено</translation>
 <translation id="813082847718468539">Перегляд інформації про сайт</translation>
 <translation id="8168435359814927499">Вміст</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">Редагувати</translation>
 <translation id="9070377983101773829">Почати голосовий пошук</translation>
 <translation id="9071742570345586758">Щоб переглядати вміст віртуальної реальності, установіть Google VR-сервіси</translation>
+<translation id="9074336505530349563">Щоб отримувати персоналізовані пропозиції від Google, увійдіть в обліковий запис і ввімкніть синхронізацію</translation>
 <translation id="9086455579313502267">Неможливо отримати доступ до мережі</translation>
 <translation id="9099018167121903954">Завантажено <ph name="KILOBYTES" /> КБ</translation>
 <translation id="9100505651305367705">Пропонувати статті в режимі спрощеного перегляду, якщо він підтримується</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
index 4af16b6..ab2993b 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">Dữ liệu được chọn đã bị xóa khỏi Chrome và các thiết bị đã đồng bộ hóa của bạn.
 
 Tài khoản Google của bạn có thể có các dạng lịch sử duyệt web khác, chẳng hạn như tìm kiếm và hoạt động từ các dịch vụ khác của Google tại <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />.</translation>
-<translation id="4526249700380860531">Xem và quản lý mật khẩu đã lưu tại <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /></translation>
 <translation id="4532845899244822526">Chọn thư mục</translation>
 <translation id="4550003330909367850">Để xem hoặc sao chép mật khẩu của bạn tại đây, hãy đặt khóa màn hình trên thiết bị này.</translation>
 <translation id="4558311620361989323">Phím tắt cho trang web</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
index 5d697b0..2723e75 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -408,7 +408,6 @@
 <translation id="4521489764227272523">所选数据已从 Chrome 和同步的设备中移除。
 
 不过,您的 Google 帐号在 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 上可能还有其他形式的浏览记录(例如,在其他 Google 服务中的搜索记录和活动记录)。</translation>
-<translation id="4526249700380860531">通过 <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> 查看和管理已保存的密码</translation>
 <translation id="4532845899244822526">选择文件夹</translation>
 <translation id="4550003330909367850">要想在此处查看或复制您的密码,请在此设备上设置屏幕锁定。</translation>
 <translation id="4558311620361989323">网页快捷键</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
index 517ba6a0..d818f58d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_zh-TW.xtb
@@ -29,6 +29,7 @@
 <translation id="1201402288615127009">繼續</translation>
 <translation id="1204037785786432551">下載連結</translation>
 <translation id="1206892813135768548">複製連結文字</translation>
+<translation id="1208340532756947324">如要進行同步處理並在所有裝置上享有個人化的體驗,請開啟同步處理功能</translation>
 <translation id="1209206284964581585">暫時隱藏</translation>
 <translation id="123724288017357924">重新載入目前的網頁,略過已快取的內容</translation>
 <translation id="124116460088058876">更多語言</translation>
@@ -129,6 +130,7 @@
 <translation id="1989112275319619282">瀏覽</translation>
 <translation id="1993768208584545658"><ph name="SITE" /> 要求配對</translation>
 <translation id="1994173015038366702">網站網址</translation>
+<translation id="2002537628803770967">使用 Google Pay 儲存的信用卡和地址資訊</translation>
 <translation id="200815880754187296">其他應用程式佔 <ph name="KILOBYTES" /> KB</translation>
 <translation id="2017836877785168846">將歷史記錄和自動即時查詢從網址列中清除。</translation>
 <translation id="2021896219286479412">全螢幕網站控制</translation>
@@ -225,6 +227,7 @@
 <translation id="2777555524387840389">還剩 <ph name="SECONDS" /> 秒</translation>
 <translation id="2781151931089541271">還剩 1 秒</translation>
 <translation id="2810645512293415242">網頁內容經過簡化,不僅節省數據用量,更加快載入速度。</translation>
+<translation id="2818669890320396765">如要將書籤同步到所有裝置,請登入並開啟同步處理功能</translation>
 <translation id="2836148919159985482">輕觸返回按鈕即可結束全螢幕模式。</translation>
 <translation id="2842985007712546952">上層資料夾</translation>
 <translation id="2870560284913253234">網站</translation>
@@ -303,6 +306,7 @@
 <translation id="3549657413697417275">搜尋你的記錄</translation>
 <translation id="3552151358455404883">前往<ph name="BEGIN_LINK1" />設定<ph name="END_LINK1" />頁面管理 Chrome 同步功能和個人化設定</translation>
 <translation id="3557336313807607643">新增為聯絡人</translation>
+<translation id="3568688522516854065">如要存取你在其他裝置上開啟的分頁,請登入並開啟同步處理功能</translation>
 <translation id="3587482841069643663">全部</translation>
 <translation id="3590487821116122040">Chrome 認定為不重要的網站 (例如未儲存任何設定的網站,或是您不常造訪的網站) 所儲存的資料</translation>
 <translation id="3599863153486145794">將歷史記錄從所有登入帳戶的裝置上清除。你的 Google 帳戶可能會儲存其他形式的瀏覽記錄,請參閱 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" />。</translation>
@@ -375,6 +379,7 @@
 <translation id="4192273449750167573">在下一個畫面中查看你的設定</translation>
 <translation id="4195643157523330669">在新分頁中開啟</translation>
 <translation id="4198423547019359126">沒有可用的下載位置</translation>
+<translation id="4209895695669353772">如要取得個人化的 Google 推薦內容,請開啟同步處理功能</translation>
 <translation id="4226663524361240545">收到通知時裝置會震動</translation>
 <translation id="4242533952199664413">開啟設定</translation>
 <translation id="424864128008805179">要登出 Chrome 嗎?</translation>
@@ -400,6 +405,7 @@
 <translation id="4452548195519783679">已將書籤加入「<ph name="FOLDER_NAME" />」</translation>
 <translation id="4453340223357552416"><ph name="PRODUCT_NAME" /> 已下載「<ph name="FILE_NAME" />」</translation>
 <translation id="4468959413250150279">將特定網站設為靜音。</translation>
+<translation id="4472118726404937099">如要進行同步處理並在所有裝置上享有個人化的體驗,請登入並開啟同步處理功能</translation>
 <translation id="4479647676395637221">允許網站使用您的攝影機前,必須先詢問您 (建議)</translation>
 <translation id="4487967297491345095">Chrome 的應用程式資料會全部遭到永久刪除,包括所有檔案、設定、帳戶、資料庫等等。</translation>
 <translation id="4508440807153586353">只有知道您通關密語的使用者,才能讀取加密保護的資料。系統不會將通關密語傳送給 Google,Google 也不會儲存通關密語。如果您忘記自己的通關密語,或是想變更這項設定,則必須重設同步功能。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation>
@@ -408,7 +414,6 @@
 <translation id="4521489764227272523">系統已將你所選取的資料從 Chrome 和其他同步的裝置中移除。
 
 你的 Google 帳戶仍可能保留了其他類型的瀏覽記錄,例如其他 Google 服務中的搜尋和活動記錄 (可前往 <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> 查詢)。</translation>
-<translation id="4526249700380860531">您可以前往 <ph name="BEGIN_LINK" />passwords.google.com<ph name="END_LINK" /> 查看及管理已儲存的密碼</translation>
 <translation id="4532845899244822526">選擇資料夾</translation>
 <translation id="4550003330909367850">如要在這裡查看或複製你的密碼,請為這個裝置設定螢幕鎖定功能。</translation>
 <translation id="4558311620361989323">網頁快速鍵</translation>
@@ -585,6 +590,7 @@
 <translation id="5854790677617711513">超過 30 天前</translation>
 <translation id="5858741533101922242">Chrome 無法開啟藍牙轉接器</translation>
 <translation id="5860033963881614850">關閉</translation>
+<translation id="5862731021271217234">如要存取你在其他裝置上開啟的分頁,請開啟同步處理功能</translation>
 <translation id="5864174910718532887">詳細資料:依網站名稱排序</translation>
 <translation id="5864419784173784555">正在等待其他下載程序完成…</translation>
 <translation id="5869522115854928033">已儲存的密碼</translation>
@@ -863,6 +869,7 @@
 <translation id="8100932616285851614">導覽面版已關閉</translation>
 <translation id="8103578431304235997">無痕式分頁</translation>
 <translation id="8105951947646329362">建議相關的網頁</translation>
+<translation id="8109613176066109935">如要將書籤同步到所有裝置,請開啟同步處理功能</translation>
 <translation id="8116925261070264013">已設為靜音</translation>
 <translation id="813082847718468539">查看網站資訊</translation>
 <translation id="8168435359814927499">內容</translation>
@@ -967,6 +974,7 @@
 <translation id="9065203028668620118">編輯</translation>
 <translation id="9070377983101773829">開始語音搜尋</translation>
 <translation id="9071742570345586758">如要查看虛擬實境內容,請安裝 Google VR 服務</translation>
+<translation id="9074336505530349563">如要取得個人化的 Google 推薦內容,請登入並開啟同步處理功能</translation>
 <translation id="9086455579313502267">無法存取網路</translation>
 <translation id="9099018167121903954">下載內容佔 <ph name="KILOBYTES" /> KB</translation>
 <translation id="9100505651305367705">詢問是否以簡易模式顯示支援這項功能的文章</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java
index 288f021..b098c819 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchTapEventTest.java
@@ -85,7 +85,7 @@
             selectionPopupController.setSelectionClient(this.getContextualSearchSelectionClient());
             MockContextualSearchPolicy policy = new MockContextualSearchPolicy();
             setContextualSearchPolicy(policy);
-            mTranslateController = new MockedCSTranslateController(activity, policy, null);
+            mTranslateController = new MockedCSTranslateController(policy, null);
         }
 
         @Override
@@ -138,9 +138,9 @@
         private static final String ENGLISH_TARGET_LANGUAGE = "en";
         private static final String ENGLISH_ACCEPT_LANGUAGES = "en-US,en";
 
-        MockedCSTranslateController(ChromeActivity activity, ContextualSearchPolicy policy,
-                ContextualSearchTranslateInterface hostInterface) {
-            super(activity, policy, hostInterface);
+        MockedCSTranslateController(
+                ContextualSearchPolicy policy, ContextualSearchTranslateInterface hostInterface) {
+            super(policy, hostInterface);
         }
 
         @Override
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
index b9ce579..684c49d 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateDataFetcherTest.java
@@ -103,8 +103,8 @@
         ThreadUtils.runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                WebApkInfo oldInfo = WebApkInfo.create("", "", scopeUrl, null, null, null, null, -1,
-                        -1, -1, -1, -1, "random.package", -1, manifestUrl, "",
+                WebApkInfo oldInfo = WebApkInfo.create("", "", scopeUrl, null, null, null, null,
+                        null, -1, -1, -1, -1, -1, "random.package", -1, manifestUrl, "",
                         new HashMap<String, String>(), false /* forceNavigation */);
                 fetcher.start(mTab, oldInfo, observer);
             }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
index 5da1fec4..cd3630bd 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerTest.java
@@ -154,7 +154,7 @@
             @Override
             public void run() {
                 WebApkInfo info = WebApkInfo.create(WEBAPK_ID, "", creationData.scope, null, null,
-                        creationData.name, creationData.shortName, creationData.displayMode,
+                        null, creationData.name, creationData.shortName, creationData.displayMode,
                         creationData.orientation, 0, creationData.themeColor,
                         creationData.backgroundColor, "", WebApkVersion.CURRENT_SHELL_APK_VERSION,
                         creationData.manifestUrl, creationData.startUrl,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
index e8d7efe..faf7528 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/webapps/WebappVisibilityTest.java
@@ -130,7 +130,7 @@
                 ? WebappInfo.create("", webappStartUrlOrScopeUrl, null, null, null, null,
                           displayMode, 0, 0, 0, 0, null, false /* isIconGenerated */,
                           false /* forceNavigation */)
-                : WebApkInfo.create("", "", webappStartUrlOrScopeUrl, null, null, null, null,
+                : WebApkInfo.create("", "", webappStartUrlOrScopeUrl, null, null, null, null, null,
                           displayMode, 0, 0, 0, 0, "", 0, null, "", null,
                           false /* forceNavigation */);
     }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkInfoTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkInfoTest.java
index f0db7a8..357de600 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkInfoTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkInfoTest.java
@@ -148,6 +148,7 @@
 
         Assert.assertEquals(null, info.icon());
         Assert.assertEquals(null, info.badgeIcon());
+        Assert.assertEquals(null, info.splashIcon());
     }
 
     /**
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
index 2fa8f69..fa73207d 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebApkUpdateManagerUnitTest.java
@@ -253,7 +253,7 @@
         final String kPackageName = "org.random.webapk";
         return WebApkInfo.create(getWebApkId(kPackageName), "", manifestData.scopeUrl,
                 new WebApkInfo.Icon(manifestData.primaryIcon),
-                new WebApkInfo.Icon(manifestData.badgeIcon), manifestData.name,
+                new WebApkInfo.Icon(manifestData.badgeIcon), null, manifestData.name,
                 manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1,
                 manifestData.themeColor, manifestData.backgroundColor, kPackageName, -1,
                 WEB_MANIFEST_URL, manifestData.startUrl, manifestData.iconUrlToMurmur2HashMap,
diff --git a/chrome/android/webapk/libs/common/src/org/chromium/webapk/lib/common/WebApkMetaDataKeys.java b/chrome/android/webapk/libs/common/src/org/chromium/webapk/lib/common/WebApkMetaDataKeys.java
index de21b92..01966fd 100644
--- a/chrome/android/webapk/libs/common/src/org/chromium/webapk/lib/common/WebApkMetaDataKeys.java
+++ b/chrome/android/webapk/libs/common/src/org/chromium/webapk/lib/common/WebApkMetaDataKeys.java
@@ -23,6 +23,7 @@
     public static final String THEME_COLOR = "org.chromium.webapk.shell_apk.themeColor";
     public static final String BACKGROUND_COLOR = "org.chromium.webapk.shell_apk.backgroundColor";
     public static final String ICON_ID = "org.chromium.webapk.shell_apk.iconId";
+    public static final String SPLASH_ID = "org.chromium.webapk.shell_apk.splashId";
 
     public static final String ICON_URLS_AND_ICON_MURMUR2_HASHES =
             "org.chromium.webapk.shell_apk.iconUrlsAndIconMurmur2Hashes";
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index 45d8533..7c9aa1a 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -4783,6 +4783,15 @@
       <message name="IDS_NTP_CUSTOM_BG_IMAGE_NOT_USABLE" desc="Error message for when an uploaded image is not usuable as a custom background. (On the New Tab Page)">
         This image can't be used. Choose a different image.
       </message>
+      <message name="IDS_NTP_CUSTOM_BG_BACK_LABEL" desc="Accessibility label for the back arrow on the background picker dialog. (On the New Tab Page)">
+        Back
+      </message>
+      <message name="IDS_NTP_CUSTOM_BG_CUSTOMIZE_NTP_LABEL" desc="Accessibility label for the gear icon. (On the New Tab Page)">
+        Customize this page
+      </message>
+      <message name="IDS_NTP_CUSTOM_BG_GOOGLE_PHOTO_LABEL" desc="Accessibility label for a Google Photos image tile. (On the New Tab Page)">
+        Photo
+      </message>
 
       <!--Tooltip strings-->
       <message name="IDS_TOOLTIP_BACK" desc="The tooltip for back button">
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_BACK_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_BACK_LABEL.png.sha1
new file mode 100644
index 0000000..8c490f4
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_BACK_LABEL.png.sha1
@@ -0,0 +1 @@
+f29b09ad3bbe74cf10e3e7a7becf2a4a1aefae41
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_CUSTOMIZE_NTP_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_CUSTOMIZE_NTP_LABEL.png.sha1
new file mode 100644
index 0000000..632b2b4f
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_CUSTOMIZE_NTP_LABEL.png.sha1
@@ -0,0 +1 @@
+28d6b42dde96828b2f8adb23a8846787a6ed7fa7
\ No newline at end of file
diff --git a/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_GOOGLE_PHOTO_LABEL.png.sha1 b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_GOOGLE_PHOTO_LABEL.png.sha1
new file mode 100644
index 0000000..fa2cadd20
--- /dev/null
+++ b/chrome/app/generated_resources_grd/IDS_NTP_CUSTOM_BG_GOOGLE_PHOTO_LABEL.png.sha1
@@ -0,0 +1 @@
+b3ce3cdb8cdfbe65b6cd2d5a25ae93b2f3eeff3b
\ No newline at end of file
diff --git a/chrome/app/resources/chromium_strings_am.xtb b/chrome/app/resources/chromium_strings_am.xtb
index 22072d6..ecfff66 100644
--- a/chrome/app/resources/chromium_strings_am.xtb
+++ b/chrome/app/resources/chromium_strings_am.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium በራስ-ሰር ይዘመናል፣ ስለዚህ ሁልጊዜ አዲሱ ስሪት ይኖርዎታል።</translation>
 <translation id="7975919845073681630">ይሄ ሁለተኛ የChromium ጭነት ነው፣ እና ነባሪ አሳሽዎ ማድረግ አይቻልም።</translation>
 <translation id="7979877361127045932">በChromium ምናሌ ውስጥ ደብቅ</translation>
+<translation id="8013436988911883588">አንዴ Chromium መዳረሻ ከኖረው በኋላ ድር ጣቢያዎች እርስዎን መዳረሻ መጠየቅ ይችላሉ።</translation>
 <translation id="8030318113982266900">መሳሪያዎን ወደ <ph name="CHANNEL_NAME" /> ሰርጥ በማዘመን ላይ...</translation>
 <translation id="8157153840442649507">Chromium በዚህ ቋንቋ እየታየ ነው</translation>
 <translation id="81770708095080097">ይህ ፋይል አደገኛ ስለሆነ Chromium አግዶታል።</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb
index 36c5565..5dcc5b5b 100644
--- a/chrome/app/resources/chromium_strings_bg.xtb
+++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -212,6 +212,7 @@
 <translation id="7962572577636132072">Chromium се актуализира автоматично, така че винаги да имате най-новата версия.</translation>
 <translation id="7975919845073681630">Тази инсталация на Chromium е алтернативна и не може да се зададе като браузър по подразбиране.</translation>
 <translation id="7979877361127045932">Скриване в менюто на Chromium</translation>
+<translation id="8013436988911883588">След като Chromium получи достъп, уебсайтовете ще могат да искат достъп от вас.</translation>
 <translation id="8030318113982266900">Устройството ви се актуализира до канал: <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium се показва на този език</translation>
 <translation id="81770708095080097">Chromium блокира този файл, тъй като е опасен.</translation>
diff --git a/chrome/app/resources/chromium_strings_ca.xtb b/chrome/app/resources/chromium_strings_ca.xtb
index 1b32299..b8d7576f 100644
--- a/chrome/app/resources/chromium_strings_ca.xtb
+++ b/chrome/app/resources/chromium_strings_ca.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium s'actualitza automàticament perquè en tingueu sempre la versió més recent.</translation>
 <translation id="7975919845073681630">Aquesta és una instal·lació secundària de Chromium i no pot definir-se com a navegador predeterminat.</translation>
 <translation id="7979877361127045932">Amaga al menú de Chromium</translation>
+<translation id="8013436988911883588">Un cop Chromium tingui accés, els llocs web et podran demanar accés.</translation>
 <translation id="8030318113982266900">S'està actualitzant el vostre dispositiu al canal <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium es mostra en aquest idioma</translation>
 <translation id="81770708095080097">Chromium ha bloquejat aquest fitxer perquè és perillós.</translation>
diff --git a/chrome/app/resources/chromium_strings_cs.xtb b/chrome/app/resources/chromium_strings_cs.xtb
index 8be0b24..24943061 100644
--- a/chrome/app/resources/chromium_strings_cs.xtb
+++ b/chrome/app/resources/chromium_strings_cs.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Prohlížeč Chromium se automaticky aktualizuje, abyste vždy měli k dispozici nejnovější verzi.</translation>
 <translation id="7975919845073681630">Toto je druhá instalace prohlížeče Chromium. Tuto instalaci nelze nastavit jako výchozí prohlížeč.</translation>
 <translation id="7979877361127045932">Skrýt v nabídce Chromium</translation>
+<translation id="8013436988911883588">Až bude mít Chromium přístup, budou vás weby moci požádat o přístup.</translation>
 <translation id="8030318113982266900">Aktualizace zařízení na verzi <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium se zobrazuje v tomto jazyce</translation>
 <translation id="81770708095080097">Tento soubor je nebezpečný, proto jej prohlížeč Chromium zablokoval.</translation>
diff --git a/chrome/app/resources/chromium_strings_da.xtb b/chrome/app/resources/chromium_strings_da.xtb
index 0bd0488..1288c4a 100644
--- a/chrome/app/resources/chromium_strings_da.xtb
+++ b/chrome/app/resources/chromium_strings_da.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium opdateres automatisk, så du altid har den nyeste version.</translation>
 <translation id="7975919845073681630">Dette er en sekundær installation af Chromium, og den kan ikke gøres til din standardbrowser.</translation>
 <translation id="7979877361127045932">Skjul i Chromium-menuen</translation>
+<translation id="8013436988911883588">Når Chromium har adgang, kan websites bede dig om adgang.</translation>
 <translation id="8030318113982266900">Opdaterer din enhed til kanalen <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium vises på dette sprog</translation>
 <translation id="81770708095080097">Denne fil er farlig, så Chromium har blokeret den.</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb
index 16950848..7c00c90 100644
--- a/chrome/app/resources/chromium_strings_de.xtb
+++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium wird automatisch aktualisiert, sodass Sie immer über die neueste Version verfügen.</translation>
 <translation id="7975919845073681630">Dies ist eine Zweitinstallation, daher kann Chromium nicht als Standardbrowser festgelegt werden.</translation>
 <translation id="7979877361127045932">Im Chromium-Menü ausblenden</translation>
+<translation id="8013436988911883588">Sobald Chromium Zugriff hat, können Websites Sie um Zugriff bitten.</translation>
 <translation id="8030318113982266900">Ihr Gerät wird auf Kanal <ph name="CHANNEL_NAME" /> aktualisiert...</translation>
 <translation id="8157153840442649507">Chromium wird in dieser Sprache angezeigt</translation>
 <translation id="81770708095080097">Diese Datei ist schädlich und wurde von Chromium blockiert.</translation>
diff --git a/chrome/app/resources/chromium_strings_el.xtb b/chrome/app/resources/chromium_strings_el.xtb
index ef61c304..9a3842f 100644
--- a/chrome/app/resources/chromium_strings_el.xtb
+++ b/chrome/app/resources/chromium_strings_el.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Το Chromium ενημερώνεται αυτόματα, προκειμένου να έχετε πάντα στη διάθεσή σας τη νεότερη έκδοση.</translation>
 <translation id="7975919845073681630">Αυτή είναι μια δευτερεύουσα εγκατάσταση του Chromium και δεν μπορεί να γίνει το προεπιλεγμένο πρόγραμμα περιήγησης.</translation>
 <translation id="7979877361127045932">Απόκρυψη από το μενού του Chromium</translation>
+<translation id="8013436988911883588">Όταν το Chromium αποκτήσει πρόσβαση, οι ιστότοποι θα μπορούν να σας ζητήσουν πρόσβαση.</translation>
 <translation id="8030318113982266900">Ενημέρωση της συσκευής σας στο κανάλι <ph name="CHANNEL_NAME" />…</translation>
 <translation id="8157153840442649507">Το Chromium εμφανίζεται σε αυτήν τη γλώσσα</translation>
 <translation id="81770708095080097">Αυτό το αρχείο είναι επικίνδυνο και έχει αποκλειστεί από το Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_es.xtb b/chrome/app/resources/chromium_strings_es.xtb
index 39e68b47..7cd6c73 100644
--- a/chrome/app/resources/chromium_strings_es.xtb
+++ b/chrome/app/resources/chromium_strings_es.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium se actualiza automáticamente para que siempre dispongas de la última versión.</translation>
 <translation id="7975919845073681630">Esta instalación de Chromium es secundaria, por lo que no se puede establecer como navegador predeterminado.</translation>
 <translation id="7979877361127045932">Ocultar en el menú de Chromium</translation>
+<translation id="8013436988911883588">Una vez que Chromium tenga acceso, los sitios web podrán solicitarlo también.</translation>
 <translation id="8030318113982266900">Actualizando el canal del dispositivo a <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium se muestra en este idioma</translation>
 <translation id="81770708095080097">Este archivo es peligroso, por lo que Chromium lo ha bloqueado.</translation>
diff --git a/chrome/app/resources/chromium_strings_et.xtb b/chrome/app/resources/chromium_strings_et.xtb
index da57d90..2be06cf 100644
--- a/chrome/app/resources/chromium_strings_et.xtb
+++ b/chrome/app/resources/chromium_strings_et.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium teeb värskendused automaatselt, nii et kasutate alati uusimat versiooni.</translation>
 <translation id="7975919845073681630">See on Chromiumi sekundaarne install ja seda ei saa määrata vaikebrauseriks.</translation>
 <translation id="7979877361127045932">Chromiumi menüüs peitmine</translation>
+<translation id="8013436988911883588">Kui annate Chromiumile juurdepääsu, saavad veebisaidid küsida teilt juurdepääsuluba.</translation>
 <translation id="8030318113982266900">Seadet värskendatakse kanalile <ph name="CHANNEL_NAME" /> ...</translation>
 <translation id="8157153840442649507">Chromium kuvatakse selles keeles</translation>
 <translation id="81770708095080097">Chromium blokeeris faili, kuna see on ohtlik.</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb
index 8d8eeb2..b0724a9 100644
--- a/chrome/app/resources/chromium_strings_fa.xtb
+++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">‏Chromium به صورت خودکار به‌روزرسانی می‌شود بنابراین همیشه جدیدترین نسخه را دارید.</translation>
 <translation id="7975919845073681630">‏این نصب ثانویه Chromium است و نمی‌تواند مرورگر پیش‌فرضتان شود.</translation>
 <translation id="7979877361127045932">‏پنهان در منوی Chromium</translation>
+<translation id="8013436988911883588">‏وقتی Chromium دسترسی داشته باشد، وب‌سایت‌ها می‌توانند مجوز دسترسی درخواست کنند.</translation>
 <translation id="8030318113982266900">درحال به روزرسانی دستگاه شما به کانال <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">‏Chromium به این زبان نشان داده می‌شود</translation>
 <translation id="81770708095080097">‏این فایل خطرناک است، بنابراین Chromium آن را مسدود کرده است.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb
index f1a2ab96..d356292c 100644
--- a/chrome/app/resources/chromium_strings_fi.xtb
+++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium päivitetään automaattisesti, joten käytössäsi on aina uusin versio.</translation>
 <translation id="7975919845073681630">Tämä on Chromiumin toissijainen asennus, eikä sitä voi asettaa oletusselaimeksi.</translation>
 <translation id="7979877361127045932">Piilota Chromium-valikossa</translation>
+<translation id="8013436988911883588">Kun Chromiumilla on käyttöoikeus, sivustot voivat pyytää sitä sinulta.</translation>
 <translation id="8030318113982266900">Päivitetään laitteeseen kanavaa <ph name="CHANNEL_NAME" />…</translation>
 <translation id="8157153840442649507">Chromium näytetään tällä kielellä.</translation>
 <translation id="81770708095080097">Tämä tiedosto on vaarallinen, joten Chromium on estänyt sen.</translation>
diff --git a/chrome/app/resources/chromium_strings_fil.xtb b/chrome/app/resources/chromium_strings_fil.xtb
index d698c31..3096a3e 100644
--- a/chrome/app/resources/chromium_strings_fil.xtb
+++ b/chrome/app/resources/chromium_strings_fil.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Awtomatikong nag-a-update ang Chromium upang palagi kang may pinakabagong bersyon.</translation>
 <translation id="7975919845073681630">Pangalawang pag-install ito ng Chromium at hindi ito maaaring gawing iyong default na browser.</translation>
 <translation id="7979877361127045932">Itago sa menu ng Chromium</translation>
+<translation id="8013436988911883588">Kapag mayroon nang access ang Chromium, makakahingi na ang mga website ng access sa iyo.</translation>
 <translation id="8030318113982266900">Ina-update ang iyong device sa <ph name="CHANNEL_NAME" /> na channel...</translation>
 <translation id="8157153840442649507">Ipinapakita ang Chromium sa wikang ito</translation>
 <translation id="81770708095080097">Mapanganib ang file na ito, kaya na-block ito ng Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb
index eccdab4..93a089d 100644
--- a/chrome/app/resources/chromium_strings_fr.xtb
+++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -219,6 +219,7 @@
 <translation id="7962572577636132072">Chromium est automatiquement mis à jour pour vous permettre de toujours disposer de la dernière version.</translation>
 <translation id="7975919845073681630">Ceci est une installation secondaire de Chromium. Vous ne pouvez pas le définir comme navigateur par défaut.</translation>
 <translation id="7979877361127045932">Masquer dans le menu Chromium</translation>
+<translation id="8013436988911883588">Une fois l'accès à une ressource accordé à Chromium, les sites Web sont également en mesure de vous demander l'accès.</translation>
 <translation id="8030318113982266900">Passage de votre appareil à la version <ph name="CHANNEL_NAME" />…</translation>
 <translation id="8157153840442649507">Chromium est affiché dans cette langue</translation>
 <translation id="81770708095080097">Chromium a bloqué ce fichier, car ce dernier est dangereux.</translation>
diff --git a/chrome/app/resources/chromium_strings_gu.xtb b/chrome/app/resources/chromium_strings_gu.xtb
index 32735ea..10a2f0ce 100644
--- a/chrome/app/resources/chromium_strings_gu.xtb
+++ b/chrome/app/resources/chromium_strings_gu.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium આપમેળે અપડેટ થાય છે જેથી કરીને તમારી પાસે હંમેશા સૌથી તાજું સંસ્કરણ રહે છે.</translation>
 <translation id="7975919845073681630">આ Google Chrome નું દ્વિતીય ઇન્સ્ટૉલેશન છે અને આને તમારું ડિફૉલ્ટ બ્રાઉઝર બનાવી શકાતું નથી.</translation>
 <translation id="7979877361127045932">Chromium મેનૂમાં છુપાવો</translation>
+<translation id="8013436988911883588">એકવાર Chromiumને ઍક્સેસ મળે, તે પછી વેબસાઇટ તમારી પાસે ઍક્સેસ માગી શકશે.</translation>
 <translation id="8030318113982266900">તમારા ઉપકરણને <ph name="CHANNEL_NAME" /> ચેનલ પર અપડેટ કરી રહ્યાં છે...</translation>
 <translation id="8157153840442649507">આ ભાષામાં Chromium પ્રદર્શિત થાય છે</translation>
 <translation id="81770708095080097">આ ફાઇલ જોખમી છે, તેથી Chromium એ તેને અવરોધિત કરેલ છે.</translation>
diff --git a/chrome/app/resources/chromium_strings_hi.xtb b/chrome/app/resources/chromium_strings_hi.xtb
index 6daa2bc6..cb76f4bb 100644
--- a/chrome/app/resources/chromium_strings_hi.xtb
+++ b/chrome/app/resources/chromium_strings_hi.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">क्रोमियम अपने आप अपडेट हो जाता है इसलिए आपके पास हमेशा नवीनतम वर्शन रहता है.</translation>
 <translation id="7975919845073681630">यह क्रोमियम का द्वितीयक इंस्टॉलेशन है और इसे आपका डिफ़ॉल्ट ब्राउज़र नहीं बनाया जा सकता.</translation>
 <translation id="7979877361127045932">क्रोमियम मेनू में छिपाएं</translation>
+<translation id="8013436988911883588">क्रोमियम को एक्सेस मिलने के बाद, वेबसाइटें आपसे एक्सेस मांग सकेंगी.</translation>
 <translation id="8030318113982266900">आपके डिवाइस को <ph name="CHANNEL_NAME" /> चैनल पर अपडेट किया जा रहा है...</translation>
 <translation id="8157153840442649507">क्रोमियम इस भाषा में प्रदर्शित किया जा रहा है</translation>
 <translation id="81770708095080097">यह फ़ाइल खतरनाक है, इसलिए क्रोमियम ने इसे अवरुद्ध कर दिया है.</translation>
diff --git a/chrome/app/resources/chromium_strings_hr.xtb b/chrome/app/resources/chromium_strings_hr.xtb
index 3d65d7df..c0daa217 100644
--- a/chrome/app/resources/chromium_strings_hr.xtb
+++ b/chrome/app/resources/chromium_strings_hr.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium se automatski ažurira tako da uvijek imate najnoviju verziju.</translation>
 <translation id="7975919845073681630">Ovo je sekundarna instalacija Chromiuma, pa on ne može biti vaš zadani preglednik.</translation>
 <translation id="7979877361127045932">Sakrij u izborniku Chromiuma</translation>
+<translation id="8013436988911883588">Kada Chromium dobije pristup, web-lokacije će vas moći tražiti pristup.</translation>
 <translation id="8030318113982266900">Ažuriranje vašeg uređaja na kanal <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium se prikazuje na tom jeziku</translation>
 <translation id="81770708095080097">Datoteka je opasna i Chromium ju je blokirao.</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb
index 0a0ffeb..f912d3f 100644
--- a/chrome/app/resources/chromium_strings_hu.xtb
+++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">A Chromium automatikusan frissít, így Ön mindig a legújabb verzióval rendelkezik.</translation>
 <translation id="7975919845073681630">Ez a Chromium második telepítése, amelyet nem állíthat be az alapértelmezett böngészővé.</translation>
 <translation id="7979877361127045932">Elrejtés a Chromium-menüben</translation>
+<translation id="8013436988911883588">Miután hozzáférést biztosított a Chromiumnak, a webhelyek is hozzáférést kérhetnek.</translation>
 <translation id="8030318113982266900">Eszköz frissítése a(z) <ph name="CHANNEL_NAME" /> csatornára...</translation>
 <translation id="8157153840442649507">A Chromium ezen a nyelven jelenik meg</translation>
 <translation id="81770708095080097">Ez a fájl veszélyes, ezért a Chromium letiltotta.</translation>
diff --git a/chrome/app/resources/chromium_strings_id.xtb b/chrome/app/resources/chromium_strings_id.xtb
index 63a41f59..609b17d 100644
--- a/chrome/app/resources/chromium_strings_id.xtb
+++ b/chrome/app/resources/chromium_strings_id.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium otomatis diperbarui sehingga Anda selalu memiliki versi terbaru.</translation>
 <translation id="7975919845073681630">Ini adalah pemasangan Chromium sekunder, dan tidak dapat digunakan sebagai browser default.</translation>
 <translation id="7979877361127045932">Sembunyikan di menu Chromium</translation>
+<translation id="8013436988911883588">Setelah Chromium memiliki akses, situs dapat meminta akses dari Anda.</translation>
 <translation id="8030318113982266900">Memperbarui perangkat Anda ke saluran <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium ditampilkan dalam bahasa ini</translation>
 <translation id="81770708095080097">File ini berbahaya, jadi Chromium telah memblokirnya.</translation>
diff --git a/chrome/app/resources/chromium_strings_it.xtb b/chrome/app/resources/chromium_strings_it.xtb
index 8c0c7cb..5bbde3f 100644
--- a/chrome/app/resources/chromium_strings_it.xtb
+++ b/chrome/app/resources/chromium_strings_it.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium si aggiorna automaticamente per consentirti di avere sempre la versione più recente.</translation>
 <translation id="7975919845073681630">Questa è un'installazione secondaria, di conseguenza Chromium non può essere impostato come browser predefinito.</translation>
 <translation id="7979877361127045932">Nascondi in menu Chromium</translation>
+<translation id="8013436988911883588">Dopo che Chromium avrà ottenuto l'accesso, i siti web potranno chiederti l'accesso.</translation>
 <translation id="8030318113982266900">Aggiornamento del dispositivo al canale <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium è visualizzato in questa lingua</translation>
 <translation id="81770708095080097">Questo file è pericoloso, pertanto è stato bloccato da Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb
index d87d05b..a9b4df5 100644
--- a/chrome/app/resources/chromium_strings_iw.xtb
+++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">‏Chromium מתעדכן באופן אוטומטי כך שתמיד ברשותך הגרסה העדכנית ביותר.</translation>
 <translation id="7975919845073681630">‏זוהי התקנה משנית של Chromium, ולא ניתן להפוך אותו לדפדפן ברירת המחדל שלך.</translation>
 <translation id="7979877361127045932">‏הסתר בתפריט Chromium</translation>
+<translation id="8013436988911883588">‏אחרי מתן גישה ל-Chromium, אתרים יוכלו לבקש ממך גישה.</translation>
 <translation id="8030318113982266900">מעדכן את המכשיר שלך לערוץ <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">‏Chromium מוצג בשפה זו</translation>
 <translation id="81770708095080097">‏Chromium‏ חסם את הקובץ הזה כי הוא מסוכן.</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb
index de724f9..ee7a501 100644
--- a/chrome/app/resources/chromium_strings_ja.xtb
+++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium は自動的に更新されるため、常に最新版をご利用になれます。</translation>
 <translation id="7975919845073681630">この Chromium はセカンダリ インストールのため、既定のブラウザには設定できません。</translation>
 <translation id="7979877361127045932">Chromium メニューで非表示</translation>
+<translation id="8013436988911883588">Chromium にアクセスを許可すると、ウェブサイトからアクセスをリクエストできるようになります。</translation>
 <translation id="8030318113982266900">デバイスを <ph name="CHANNEL_NAME" /> チャンネルに更新しています...</translation>
 <translation id="8157153840442649507">Chromium はこの言語で表示されています</translation>
 <translation id="81770708095080097">このファイルは危険なファイルであるため、Chromium でブロックしました。</translation>
diff --git a/chrome/app/resources/chromium_strings_kn.xtb b/chrome/app/resources/chromium_strings_kn.xtb
index b37e863..b6138a9 100644
--- a/chrome/app/resources/chromium_strings_kn.xtb
+++ b/chrome/app/resources/chromium_strings_kn.xtb
@@ -212,6 +212,7 @@
 <translation id="7962572577636132072">Chromium ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಣಗೊಳ್ಳುತ್ತದೆ ಈ ಮೂಲಕ ನೀವು ಯಾವಾಗಲೂ ತಾಜಾ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿರುತ್ತೀರಿ.</translation>
 <translation id="7975919845073681630">ಇದು Chromium ನ ದ್ವಿತೀಯ ಸ್ಥಾಪನೆಯಾಗಿದೆ ಮತ್ತು ಅದನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಬ್ರೌಸರ್ ಆಗಿ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="7979877361127045932">Chromium ಮೆನುವಿನಲ್ಲಿ ಮರೆಮಾಡು</translation>
+<translation id="8013436988911883588">Chromium ಒಮ್ಮೆ ಪ್ರವೇಶವನ್ನು ಪಡೆದ ಬಳಿಕ, ವೆಬ್‌ಸೈಟ್‌ಗಳು ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮನ್ನು ಕೇಳಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="8030318113982266900">ನಿಮ್ಮ ಸಾಧನವನ್ನು <ph name="CHANNEL_NAME" /> ಚಾನಲ್‌ಗೆ ನವೀಕರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8157153840442649507">ಈ ಭಾಷೆಯಲ್ಲಿ Chromium ಪ್ರದರ್ಶನಗೊಂಡಿದೆ</translation>
 <translation id="81770708095080097">ಈ ಫೈಲ್ ಅಪಾಯಕಾರಿಯಾಗಿದೆ, ಹೀಗಾಗಿ Chromium ಇದನ್ನು ನಿರ್ಬಂಧಿಸಿದೆ.</translation>
diff --git a/chrome/app/resources/chromium_strings_lt.xtb b/chrome/app/resources/chromium_strings_lt.xtb
index 3f92cad8..cda33988 100644
--- a/chrome/app/resources/chromium_strings_lt.xtb
+++ b/chrome/app/resources/chromium_strings_lt.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">„Chromium“ atnaujinama automatiškai, todėl visada naudojatės naujausia versija.</translation>
 <translation id="7975919845073681630">Tai yra antrinis „Chromium“ diegimas, todėl ji negali būti nustatyta kaip numatytoji naršyklė.</translation>
 <translation id="7979877361127045932">Paslėpti „Chromium“ meniu elementą</translation>
+<translation id="8013436988911883588">Kai „Chromium“ galės pasiekti duomenis, svetainės taip pat galės prašyti suteikti leidimą juos pasiekti.</translation>
 <translation id="8030318113982266900">Atnaujinamas įrenginys į „<ph name="CHANNEL_NAME" />“ kanalą...</translation>
 <translation id="8157153840442649507">„Chromium“ pateikiama šia kalba</translation>
 <translation id="81770708095080097">Šis failas pavojingas, todėl „Chromium“ jį užblokavo.</translation>
diff --git a/chrome/app/resources/chromium_strings_lv.xtb b/chrome/app/resources/chromium_strings_lv.xtb
index 03fb9435c..f2b35c39 100644
--- a/chrome/app/resources/chromium_strings_lv.xtb
+++ b/chrome/app/resources/chromium_strings_lv.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">Pārlūks Chromium tiek atjaunināts automātiski, tādēļ jums vienmēr būs pieejama visjaunākā versija.</translation>
 <translation id="7975919845073681630">Šī ir Chromium papildu instalācija, un to nevar izmantot kā noklusējuma pārlūku.</translation>
 <translation id="7979877361127045932">Paslēpt Chromium izvēlnē</translation>
+<translation id="8013436988911883588">Tiklīdz pārlūkam Chromium tiks sniegta piekļuve, vietnes varēs lūgt jums piekļuvi.</translation>
 <translation id="8030318113982266900">Notiek ierīces atjaunināšana uz kanālu <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium tiek rādīts šajā valodā.</translation>
 <translation id="81770708095080097">Šis fails ir bīstams, tāpēc Chromium to bloķēja.</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb
index d0ccd5ce..e860097 100644
--- a/chrome/app/resources/chromium_strings_ml.xtb
+++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium സ്വയമേവ അപ്‌ഡേറ്റുചെയ്യുന്നതിനാൽ, നിങ്ങളുടേത് എല്ലായ്പ്പോഴും ഏറ്റവും പുതിയ പതിപ്പായിരിക്കും.</translation>
 <translation id="7975919845073681630">ഇത് Chromium-ത്തിന്റെ ദ്വിതീയ ഇൻസ്‌റ്റലേഷനായതിനാൽ, നിങ്ങളുടെ ഡിഫോൾട്ട് ബ്രൗസറാക്കാൻ കഴിയില്ല.</translation>
 <translation id="7979877361127045932">Chromium മെനുവിൽ മറയ്‌ക്കുക</translation>
+<translation id="8013436988911883588">Chromium-ത്തിന് ആക്‌സസ് ലഭിച്ചുകഴിഞ്ഞാൽ, വെബ്‌സൈറ്റുകൾക്ക് നിങ്ങളോട് ആക്‌സസ് ചോദിക്കാനാകും.</translation>
 <translation id="8030318113982266900">നിങ്ങളുടെ ഉപകരണം <ph name="CHANNEL_NAME" /> ചാനലിലേയ്‌ക്ക് അപ്‌ഡേറ്റുചെയ്യുന്നു...</translation>
 <translation id="8157153840442649507">Chromium ഈ ഭാഷയിൽ പ്രദർശിപ്പിച്ചിരിക്കുന്നു</translation>
 <translation id="81770708095080097">ഈ ഫയൽ അപകടകരമായതിനാൽ Chromium ഇതിനെ ബ്ലോക്കുചെയ്‌തു.</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb
index 5b209bc..d2fe0d5 100644
--- a/chrome/app/resources/chromium_strings_mr.xtb
+++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी सर्वात नवीन आवृत्ती असते.</translation>
 <translation id="7975919845073681630">ही Chromium ची दुय्यम स्थापना असून त्यास आपला डीफॉल्ट ब्राउझर बनवू शकत नाही.</translation>
 <translation id="7979877361127045932">Chromium मेनूमध्‍ये लपवा</translation>
+<translation id="8013436988911883588">एकदा का Chromium ला अॅक्सेस मिळाला की, वेबसाइट तुम्हाला अॅक्सेससाठी विचारू शकतील.</translation>
 <translation id="8030318113982266900"><ph name="CHANNEL_NAME" /> चॅनेलवर आपले डीव्हाइस अपडेट करत आहे...</translation>
 <translation id="8157153840442649507">Chromium या भाषेत प्रदर्शित केले आहे</translation>
 <translation id="81770708095080097">ही फाईल धोकादायक आहे, त्यामुळे Chromium ने अवरोधित केली आहे.</translation>
diff --git a/chrome/app/resources/chromium_strings_ms.xtb b/chrome/app/resources/chromium_strings_ms.xtb
index 5feca3c7..f22dded 100644
--- a/chrome/app/resources/chromium_strings_ms.xtb
+++ b/chrome/app/resources/chromium_strings_ms.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium dikemas kini secara automatik supaya anda sentiasa mempunyai versi yang terbaharu.</translation>
 <translation id="7975919845073681630">Ini adalah pemasangan kedua Chromium dan tidak boleh dijadikan penyemak imbas lalai anda.</translation>
 <translation id="7979877361127045932">Sembunyikan dalam menu Chromium</translation>
+<translation id="8013436988911883588">Sebaik sahaja Chromium mempunyai akses, tapak web akan dapat meminta akses daripada anda.</translation>
 <translation id="8030318113982266900">Mengemas kini peranti anda kepada saluran <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium dipaparkan dalam bahasa ini</translation>
 <translation id="81770708095080097">Fail ini berbahaya, maka Chromium telah menyekatnya.</translation>
diff --git a/chrome/app/resources/chromium_strings_nl.xtb b/chrome/app/resources/chromium_strings_nl.xtb
index a68066b..ffc00cf 100644
--- a/chrome/app/resources/chromium_strings_nl.xtb
+++ b/chrome/app/resources/chromium_strings_nl.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium wordt automatisch bijgewerkt, zodat je altijd beschikt over de nieuwste versie.</translation>
 <translation id="7975919845073681630">Dit is een tweede installatie van Chromium en kan niet als standaardbrowser worden ingesteld.</translation>
 <translation id="7979877361127045932">Verbergen in Chromium-menu</translation>
+<translation id="8013436988911883588">Zodra Chromium toegang heeft, kunnen websites je om toegang vragen.</translation>
 <translation id="8030318113982266900">Je apparaat bijwerken naar <ph name="CHANNEL_NAME" /> kanaal...</translation>
 <translation id="8157153840442649507">Chromium wordt weergegeven in deze taal</translation>
 <translation id="81770708095080097">Dit bestand is gevaarlijk en is daarom door Chromium geblokkeerd.</translation>
diff --git a/chrome/app/resources/chromium_strings_no.xtb b/chrome/app/resources/chromium_strings_no.xtb
index e0dca0e..20de7ed 100644
--- a/chrome/app/resources/chromium_strings_no.xtb
+++ b/chrome/app/resources/chromium_strings_no.xtb
@@ -153,12 +153,12 @@
 <translation id="6394232988457703198">Du bør starte Chromium på nytt nå.</translation>
 <translation id="6400072781405947421">Chromium fungerer kanskje ikke riktig fordi den ikke lenger støttes på Mac OS X 10.9.</translation>
 <translation id="6403826409255603130">Chromium er en nettleser som kjører nettsider og programmer i lynets hastighet. Den er rask, stabil og enkel å bruke. Surf på nettet på en tryggere måte med Chromium, som har innebygd beskyttelse mot skadelig programvare og nettfisking.</translation>
-<translation id="641451971369018375">Kommuniserer med Google for å forbedre nettlesing og Chromium</translation>
+<translation id="641451971369018375">Kommuniserer med Google for å gjøre nettlesing og Chromium bedre</translation>
 <translation id="6457450909262716557">{SECONDS,plural, =1{Chromium startes på nytt om 1 sekund}other{Chromium startes på nytt om # sekunder}}</translation>
 <translation id="6475912303565314141">Den styrer også hvilken side som vises når du starter Chromium.</translation>
 <translation id="6485906693002546646">Du bruker <ph name="PROFILE_EMAIL" /> for synkronisering av Chromium-tingene dine. For å oppdatere alternativene for synkronisering eller bruke Chromium uten Google-konto, kan du gå til <ph name="SETTINGS_LINK" />.</translation>
 <translation id="6510925080656968729">Avinstaller Chromium</translation>
-<translation id="6570579332384693436">For å rette opp i skrivefeil, Chromium sender teksten du skriver i tekstfeltet til Google</translation>
+<translation id="6570579332384693436">For å rette opp i skrivefeil sender Chromium sender tekst du skriver i tekstfelt, til Google</translation>
 <translation id="6598877126913850652">Gå til innstillinger for Chromium-varsler</translation>
 <translation id="6664239887951090350">{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="6676384891291319759">Gå til Internett</translation>
diff --git a/chrome/app/resources/chromium_strings_pl.xtb b/chrome/app/resources/chromium_strings_pl.xtb
index 8684f67..1672112 100644
--- a/chrome/app/resources/chromium_strings_pl.xtb
+++ b/chrome/app/resources/chromium_strings_pl.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">Chromium aktualizuje się automatycznie, więc zawsze masz najnowszą wersję.</translation>
 <translation id="7975919845073681630">To jest druga instalacja Chromium. Nie można ustawić jej jako przeglądarki domyślnej.</translation>
 <translation id="7979877361127045932">Ukryj w menu Chromium</translation>
+<translation id="8013436988911883588">Gdy Chromium będzie mieć dostęp, strony będą mogły prosić Cię o dostęp.</translation>
 <translation id="8030318113982266900">Aktualizuję Twoje urządzenie do kanału: <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium działa obecnie w tym języku</translation>
 <translation id="81770708095080097">Ten plik jest niebezpieczny, dlatego został zablokowany przez Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-BR.xtb b/chrome/app/resources/chromium_strings_pt-BR.xtb
index 36962e3..34cb8cff 100644
--- a/chrome/app/resources/chromium_strings_pt-BR.xtb
+++ b/chrome/app/resources/chromium_strings_pt-BR.xtb
@@ -213,6 +213,7 @@
 <translation id="7962572577636132072">O Chromium é atualizado automaticamente para que você sempre tenha a versão mais recente.</translation>
 <translation id="7975919845073681630">Como esta é uma instalação secundária do Chromium, ele não pode se tornar seu navegador padrão.</translation>
 <translation id="7979877361127045932">Esconder no menu do Chromium</translation>
+<translation id="8013436988911883588">Assim que o Chromium tiver acesso, os sites poderão solicitar acesso.</translation>
 <translation id="8030318113982266900">Atualizando seu dispositivo para o canal <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">O Chromium é exibido neste idioma</translation>
 <translation id="81770708095080097">Esse arquivo é perigoso, por isso ele foi bloqueado pelo Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_pt-PT.xtb b/chrome/app/resources/chromium_strings_pt-PT.xtb
index 72c019f0..50c46a5 100644
--- a/chrome/app/resources/chromium_strings_pt-PT.xtb
+++ b/chrome/app/resources/chromium_strings_pt-PT.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">O Chromium é atualizado automaticamente para que tenha sempre a versão mais recente.</translation>
 <translation id="7975919845073681630">Esta é uma instalação secundária do Chromium, pelo que não pode tornar-se o navegador predefinido.</translation>
 <translation id="7979877361127045932">Ocultar no menu do Chromium</translation>
+<translation id="8013436988911883588">Assim que o Chromium tiver acesso, os Websites poderão solicitar-lhe o acesso.</translation>
 <translation id="8030318113982266900">A atualizar o dispositivo para o canal <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">O Chromium é apresentado neste idioma</translation>
 <translation id="81770708095080097">Este ficheiro é perigoso. Como tal, o Chromium bloqueou-o.</translation>
diff --git a/chrome/app/resources/chromium_strings_ro.xtb b/chrome/app/resources/chromium_strings_ro.xtb
index cfbedc7..276b5959 100644
--- a/chrome/app/resources/chromium_strings_ro.xtb
+++ b/chrome/app/resources/chromium_strings_ro.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium se actualizează automat, deci vei avea întotdeauna cea mai recentă versiune.</translation>
 <translation id="7975919845073681630">Aceasta este o instalare secundară a browserului Chromium și nu poate fi setat ca browser prestabilit.</translation>
 <translation id="7979877361127045932">Ascunde în meniul Chromium</translation>
+<translation id="8013436988911883588">Odată ce Chromium are acces, site-urile web îți vor putea solicita accesul.</translation>
 <translation id="8030318113982266900">Se actualizează dispozitivul pentru canalul <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium este afișat în această limbă</translation>
 <translation id="81770708095080097">Fișierul este periculos, așadar Chromium l-a blocat.</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb
index df1f66a..c5d10b98 100644
--- a/chrome/app/resources/chromium_strings_sk.xtb
+++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium sa aktualizuje automaticky, aby ste mali vždy k dispozícii najnovšiu verziu.</translation>
 <translation id="7975919845073681630">Toto je sekundárna inštalácia prehliadača Chromium – nemôže byť nastavený ako váš predvolený prehliadač.</translation>
 <translation id="7979877361127045932">Skryť v Ponuke Chromium</translation>
+<translation id="8013436988911883588">Keď Chromium získa prístup, weby vás budú môcť žiadať o prístup.</translation>
 <translation id="8030318113982266900">Prebieha aktualizácia vášho zariadenia na kanál <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium sa zobrazuje v tomto jazyku</translation>
 <translation id="81770708095080097">Tento súbor je nebezpečný, a preto ho prehliadač Chromium zablokoval.</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb
index 11d67b56..7dcd788 100644
--- a/chrome/app/resources/chromium_strings_sl.xtb
+++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -221,6 +221,7 @@
 <translation id="7962572577636132072">Chromium se samodejno posodablja, zato boste vedno imeli najnovejšo različico.</translation>
 <translation id="7975919845073681630">To je sekundarna namestitev Chromiuma in ga ni mogoče nastaviti kot privzeti brskalnik.</translation>
 <translation id="7979877361127045932">Skrij v meniju Chromiuma</translation>
+<translation id="8013436988911883588">Ko bo imel Chromium dostop, vas bodo spletna mesta lahko pozvala k omogočanju dostopa.</translation>
 <translation id="8030318113982266900">Posodabljanje naprave na kanal <ph name="CHANNEL_NAME" /> ...</translation>
 <translation id="8157153840442649507">Chromium je v tem jeziku</translation>
 <translation id="81770708095080097">Ta datoteka je nevarna, zato jo je Chromium blokiral.</translation>
diff --git a/chrome/app/resources/chromium_strings_sr.xtb b/chrome/app/resources/chromium_strings_sr.xtb
index 3eb3d05..981f9cf 100644
--- a/chrome/app/resources/chromium_strings_sr.xtb
+++ b/chrome/app/resources/chromium_strings_sr.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium се аутоматски ажурира, па увек имате најновију верзију.</translation>
 <translation id="7975919845073681630">Ово је секундарна инсталација Chromium-а па не можете да га подесите као подразумевани прегледач.</translation>
 <translation id="7979877361127045932">Сакриј у Chromium менију</translation>
+<translation id="8013436988911883588">Када Chromium добије приступ, веб-сајтови ће моћи да затраже приступ.</translation>
 <translation id="8030318113982266900">Ажурирање уређаја на канал <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium се приказује на овом језику</translation>
 <translation id="81770708095080097">Ова датотека је опасна, па ју је Chromium блокирао.</translation>
diff --git a/chrome/app/resources/chromium_strings_sv.xtb b/chrome/app/resources/chromium_strings_sv.xtb
index 09580daa..bef04b9a 100644
--- a/chrome/app/resources/chromium_strings_sv.xtb
+++ b/chrome/app/resources/chromium_strings_sv.xtb
@@ -220,6 +220,7 @@
 <translation id="7962572577636132072">Chromium uppdateras automatiskt så att du alltid har den senaste versionen.</translation>
 <translation id="7975919845073681630">Det här är en sekundär installation av Chromium. Det går inte att göra den till standardwebbläsare.</translation>
 <translation id="7979877361127045932">Dölj i Chromium-menyn</translation>
+<translation id="8013436988911883588">När du har gett Chromium åtkomst kan webbplatser begära att få åtkomst.</translation>
 <translation id="8030318113982266900">Uppdaterar din enhet till kanalen <ph name="CHANNEL_NAME" /> ...</translation>
 <translation id="8157153840442649507">Chromium visas på det här språket</translation>
 <translation id="81770708095080097">Filen är farlig och har blockerats av Chromium.</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb
index 9cee794..20a258c 100644
--- a/chrome/app/resources/chromium_strings_sw.xtb
+++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -219,6 +219,7 @@
 <translation id="7962572577636132072">Chromium husasisha kiotomatiki, kwa hivyo, utakuwa na toleo jipya zaidi wakati wowote.</translation>
 <translation id="7975919845073681630">Huu ni usakinishaji wa pili wa Chromium, na haiwezi kufanywa kuwa kivinjari chako chaguomsingi.</translation>
 <translation id="7979877361127045932">Ficha katika menyu ya Chromium</translation>
+<translation id="8013436988911883588">Chromium itakapopata idhini, tovuti zitaweza kukuomba idhini ya kufikia.</translation>
 <translation id="8030318113982266900">Inasasisha kituo chako kwenda kituo cha <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium inaonyeshwa katika lugha hii</translation>
 <translation id="81770708095080097">Faili hii ni hatari, kwa hivyo Chromium imeizuia.</translation>
diff --git a/chrome/app/resources/chromium_strings_th.xtb b/chrome/app/resources/chromium_strings_th.xtb
index edef0be..5ad20e3 100644
--- a/chrome/app/resources/chromium_strings_th.xtb
+++ b/chrome/app/resources/chromium_strings_th.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium จะอัปเดตโดยอัตโนมัติเพื่อให้คุณได้ใช้เวอร์ชันใหม่ล่าสุดอยู่เสมอ</translation>
 <translation id="7975919845073681630">นี่เป็นการติดตั้ง Chromium แบบสำรอง และไม่สามารถใช้เป็นเบราว์เซอร์เริ่มต้นของคุณ</translation>
 <translation id="7979877361127045932">ซ่อนในเมนู Chromium</translation>
+<translation id="8013436988911883588">เมื่อ Chromium มีสิทธิ์การเข้าถึงแล้ว เว็บไซต์จะขอสิทธิ์การเข้าถึงจากคุณได้</translation>
 <translation id="8030318113982266900">กำลังอัปเดตอุปกรณ์ของคุณไปยังช่อง <ph name="CHANNEL_NAME" />...</translation>
 <translation id="8157153840442649507">Chromium แสดงในภาษานี้</translation>
 <translation id="81770708095080097">ไฟล์นี้อันตราย Chromium จึงบล็อกไว้</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb
index 4149639..bd01f780 100644
--- a/chrome/app/resources/chromium_strings_tr.xtb
+++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -216,6 +216,7 @@
 <translation id="7962572577636132072">Chromium otomatik olarak güncellenir, böylece her zaman en yeni sürüme sahip olursunuz.</translation>
 <translation id="7975919845073681630">Bu, Chromium'un ikincil bir yüklemesidir ve varsayılan tarayıcınız yapılamaz.</translation>
 <translation id="7979877361127045932">Chromium menüsünde gizle</translation>
+<translation id="8013436988911883588">Chromium erişim izni aldıktan sonra, web siteleri de erişim için sizden izin isteyebilecek.</translation>
 <translation id="8030318113982266900">Cihazınız <ph name="CHANNEL_NAME" /> kanalına güncelleniyor...</translation>
 <translation id="8157153840442649507">Chromium bu dilde görüntüleniyor</translation>
 <translation id="81770708095080097">Bu dosya tehlikeli olduğu için Chromium tarafından engellendi.</translation>
diff --git a/chrome/app/resources/chromium_strings_uk.xtb b/chrome/app/resources/chromium_strings_uk.xtb
index 7199348..8fc7765 100644
--- a/chrome/app/resources/chromium_strings_uk.xtb
+++ b/chrome/app/resources/chromium_strings_uk.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium оновлюється автоматично, щоб у вас завжди була найновіша версія.</translation>
 <translation id="7975919845073681630">Це додаткове встановлення Chromium. Його не можна зробити вашим веб-переглядачем за умовчанням.</translation>
 <translation id="7979877361127045932">Сховати в меню Chromium</translation>
+<translation id="8013436988911883588">Коли Chromium отримає доступ, веб-сайти зможуть надсилати вам запити на доступ.</translation>
 <translation id="8030318113982266900">Оновлення пристрою до каналу <ph name="CHANNEL_NAME" />…</translation>
 <translation id="8157153840442649507">Для Chromium вибрано цю мову</translation>
 <translation id="81770708095080097">Цей файл небезпечний, тому Chromium заблокував його.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb
index 12faaa810..72be313 100644
--- a/chrome/app/resources/chromium_strings_zh-TW.xtb
+++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -218,6 +218,7 @@
 <translation id="7962572577636132072">Chromium 會自動更新,隨時讓你使用最新版本。</translation>
 <translation id="7975919845073681630">這是以並存形式安裝的次要 Chromium,無法設為您的預設瀏覽器。</translation>
 <translation id="7979877361127045932">在 Chromium 選單中隱藏</translation>
+<translation id="8013436988911883588">Chromium 取得存取權後,網站將可要求你授予存取權。</translation>
 <translation id="8030318113982266900">正在將裝置更新至「<ph name="CHANNEL_NAME" />」...</translation>
 <translation id="8157153840442649507">Chromium 的介面文字已設為這種語言</translation>
 <translation id="81770708095080097">這個檔案並不安全,因此遭到 Chromium 封鎖。</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 4dc02a57..3a57d8ca 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">ከመድረስ በፊት ጠይቅ</translation>
 <translation id="1434696352799406980">ይህ የእርስዎን የመነሻ ገጽ፣ አዲስ የትር ገጽ፣ የፍለጋ ፕሮግራምን እና የተሰኩ ትሮችን ዳግም ያቀናብራቸዋል። እንዲሁም ሁሉንም ቅጥያዎች ያሰናክላል እና እንደ ኩኪዎች ያለ ጊዜያዊ ውሂብን ያጸዳል። የእርስዎ ዕልባቶች፣ ታሪክ እና የተቀመጡ የይለፍ ቃላት አይጸዱም።</translation>
 <translation id="1434886155212424586">መነሻ ገጽ አዲሱ የትር ገጽ ነው</translation>
+<translation id="1436671784520050284">ማዋቀር ቀጥል</translation>
 <translation id="1436784010935106834">ተወግዷል</translation>
 <translation id="1438632560381091872">የትሮች ድምጸ-ከል አንሳ</translation>
 <translation id="1442392616396121389">የመሄጃ ቅድመ ቅጥያ</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">የፒዛ ቁራጭ</translation>
 <translation id="1467432559032391204">ግራ</translation>
 <translation id="1468571364034902819">ይህን መገለጫ መጠቀም አይቻልም</translation>
+<translation id="1470533772306424441">እነዚያን መተግበሪያዎች ለእርስዎ እንጭንልዎታለን። በPlay መደብር ውስጥ ለእርስዎ መሣሪያ ተጨማሪ መተግበሪያዎችን ማግኘት ይችላሉ።</translation>
 <translation id="1470811252759861213">በሁሉም ኮምፒውተሮችዎ ላይ ቅጥያዎችዎን ለማግኘት <ph name="SIGN_IN_LINK" />።</translation>
 <translation id="1474339897586437869">«<ph name="FILENAME" />» አልተሰቀለም። በእርስዎ Google Drive ውስጥ በቂ የሆነ ነፃ ቦታ የለም።</translation>
 <translation id="1475502736924165259">ከሌሎች ማንኛቸውም መደቦች ጋር የማይገጣጠሙ የእውቅና ማረጋገጫዎች በፋይል ላይ አለዎት</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;አሳንስ</translation>
 <translation id="1830550083491357902">አልተገባም</translation>
 <translation id="1832511806131704864">የስልክ ለውጥ ዘምኗል</translation>
-<translation id="1832685970989658809">የተቀመጡ የመክፈያ ዘዴዎች በእርስዎ አስተዳዳሪ ተሰናክሏል</translation>
 <translation id="1834503245783133039">ማውረድ አልተሳካም፦ <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">ፍለጋን ያፅዱ</translation>
 <translation id="1838709767668011582">የGoogle ጣቢያ</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">ከ፦</translation>
 <translation id="2193365732679659387">የእምነት ቅንብሮች</translation>
 <translation id="2195729137168608510">የኢሜይል መከላከያ</translation>
+<translation id="2199298570273670671">ስህተት</translation>
 <translation id="2200356397587687044">Chrome ለመቀጠል ፈቃድ ያስፈልገዋል</translation>
 <translation id="220138918934036434">አዝራር ደብቅ</translation>
 <translation id="2202898655984161076">አታሚዎችን መዘርዘር ላይ ችግር ነበር። አንዳንድ አታሚዎችዎ በተሳካ ሁኔታ <ph name="CLOUD_PRINT_NAME" /> ላይ አልተመዘገቡም።</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">የይለፍ ቃል አሳይ</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ሁሉንም የ<ph name="PROTOCOL" /> አገናኞች እንዲከፍት ይፈቀድለት?</translation>
 <translation id="2436707352762155834">አነስተኛ</translation>
-<translation id="2437139306601019091">የውሂብ አጠቃቀምን መለካት ተጠናቅቋል</translation>
 <translation id="2440604414813129000">ም&amp;ንጭ አሳይ</translation>
 <translation id="2445081178310039857">የቅጥያ ስርወ ማውጫ ያስፈልጋል።</translation>
 <translation id="2445484935443597917">አዲስ መገለጫ ፍጠር</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> የእርስዎን ማንነት ማረጋገጥ ይፈልጋል</translation>
 <translation id="2448312741937722512">አይነት</translation>
 <translation id="2450223707519584812">የGoogle ኤፒአይ ቁልፎች ስለጎደሉ ተጠቃሚዎችን ማከል አይችሉም። ለዝርዝሩ <ph name="DETAILS_URL" />ን ይመልከቱ።</translation>
 <translation id="2450310832094867474">ማመሳሰል ይጥፋ እና በመለያ ይወጣ?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">ፋይል አስቀድሞ አለ</translation>
 <translation id="2453860139492968684">ጨርስ</translation>
 <translation id="2454247629720664989">ቁልፍ ቃል</translation>
+<translation id="245661998428026871">በሥዕል-ውስጥ-ሥዕል ሁነታ ላይ ያለው ቪዲዮ ማጫወት ያቆማል።</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ከ<ph name="VOLUME_NAME" /> ፋይሎችን ለመቅዳት ይፈልጋል።</translation>
 <translation id="2462724976360937186">የእውቅና ማረጋገጫ ባለስልጣን ቁልፍ መታወቂያ</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ታክሏል</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">የትሮች ድምጸ-ከል አንሳ</translation>
 <translation id="3053013834507634016">የሰርቲፊኬት ቁልፍ ጠቀሜታ</translation>
 <translation id="3057861065630527966">የእርስዎን ፎቶዎች እና ቪዲዮዎች በምትኬ ያስቀምጡ</translation>
+<translation id="3059313675706898490">የAndroid መልእክቶች</translation>
 <translation id="3060379269883947824">ለመናገር-ይምረጡን ያንቁ</translation>
 <translation id="3061707000357573562">የመጠገኛ አገልግሎት</translation>
 <translation id="3064410671692449875">በቂ ያልሆነ ውሂብ</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">የይለፍ ቃል ረሱ?</translation>
 <translation id="3132996321662585180">በየቀኑ ዳግም አድስ</translation>
 <translation id="3135204511829026971">ማያ ገጹን አዙር</translation>
+<translation id="313638818480447860">ለዚህ መሣሪያ የተቡ <ph name="NUMBER_OF_APPS" /> ከመለያዎ ጋር የተገናኙ መተግበሪያዎችን አግኝተናል።</translation>
 <translation id="313963229645891001">በማውረድ ላይ፣ <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">ነባሪ ቢጫ አምሳያ</translation>
 <translation id="3140353188828248647">የአድራሻ አሞሌ ላይ አተኩር</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">ፊደል አራሚ</translation>
 <translation id="3183139917765991655">የመገለጫ አስመጪ</translation>
 <translation id="3184560914950696195">ወደ $1 ማስቀመጥ አልተቻለም። አርትዖት የተደረጉ ምስሎች በውርዶች አቃፊው ውስጥ ይቀመጣሉ።</translation>
+<translation id="3188257591659621405">የእኔ ፋይሎች</translation>
 <translation id="3188465121994729530">አማካኝ በመውሰድ ላይ</translation>
 <translation id="3190558889382726167">የይለፍ ቃል ተቀምጧል</translation>
 <translation id="3192947282887913208">የድምጽ ፋይሎች</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" />ን በማጨቅ ላይ...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">የመተግበሪያ መረጃ</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - ቪዲዮ በሥዕል-ውስጥ-ሥዕል ሁነታ ላይ በመጫወት ላይ</translation>
 <translation id="3335337277364016868">የተቀረጸበት ዓመት</translation>
 <translation id="3335947283844343239">የተዘጋውን ትር ዳግም ክፈት</translation>
 <translation id="3336664756920573711">የእርስዎን <ph name="DEVICE_TYPE" /> በAndroid ስልክዎ ይክፈቱት</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">ማተም አልተሳካም። እባክዎ አታሚዎን ይፈትሹትና እንደገና ይሞክሩ።</translation>
 <translation id="3364721542077212959">የስቲለስ መሣሪያዎች</translation>
 <translation id="3365598184818502391">Ctrl ወይም Alt ይጠቀሙ</translation>
+<translation id="3367047597842238025">የእርስዎን <ph name="DEVICE_TYPE" /> ልክ እንደሚፈልጉት አድርገው ያዋቅሩትና ሁሉንም አስገራሚ ሊደረጉ የሚችሉ ችሎታዎች በእጅዎ መዳፍ ላይ ያግኟቸው።</translation>
 <translation id="3368922792935385530">ተያይዟል</translation>
 <translation id="3369624026883419694">ለአስተናጋጅ መፍትሄ በመፈለግ ላይ…</translation>
 <translation id="337286756654493126">በመተግበሪያው ውስጥ የሚከፍቷቸውን አቃፊዎች ያነባል</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">በተግባር አሞሌው ላይ የ<ph name="SMALL_PRODUCT_LOGO" /> አዶን ቀኝ ጠቅ ያድርጉ</translation>
 <translation id="3391716558283801616">ትር 7</translation>
 <translation id="3396331542604645348">የተመረጠው አታሚ የለም ወይም በትክክል አልተጫነም። አታሚዎን ያረጋግጡ ወይም ሌላ አታሚ ለመምረጥ ይሞክሩ።</translation>
+<translation id="3396800784455899911">የ«እስማማለሁ እና ቀጥል» አዝራርን ጠቅ በማድረግ ለእነዚህ የGoogle አገልግሎቶች ከላይ በተብራራው ማስሄድ መስማማትዎን ያረጋግጣሉ።</translation>
 <translation id="3399432415385675819">ማሳወቂያዎች ይሰናከላሉ</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />፣ <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">ለዚህ ጣቢያ ምንም የይለፍ ቃላት አልተቀመጡም</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">የዚህ መሣሪያ ስርዓተ ፋይል ስለማይደገፍ ስላልሆነ ሊከፈት አይችልም።</translation>
 <translation id="3727148787322499904">ይህን ቅንብር መቀየር በሁሉም የተጋሩ አውታረ መረቦች ላይ ተጽዕኖ አለው</translation>
 <translation id="3727187387656390258">ብቅባይ መርምር</translation>
+<translation id="3729506734996624908">የተፈቀደላቸው ጣቢያዎች</translation>
 <translation id="3732078975418297900">በመስመር <ph name="ERROR_LINE" /> ላይ ስህተት</translation>
 <translation id="3733127536501031542">SSL አገልጋይ ከነ ማሳደጊያው</translation>
+<translation id="3735740477244556633">ደርድር በ</translation>
 <translation id="3737274407993947948">Linuxን በመጫን ላይ ስህተት...</translation>
 <translation id="3737536731758327622">የእርስዎ ውርዶች እዚህ ይታያሉ</translation>
+<translation id="3738671331307774213">የእርስዎን ማንነት ማረጋገጥ የግል ውሂብዎን ለመጠበቅ ያግዛል</translation>
 <translation id="3738924763801731196"><ph name="OID" />፦</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ይከፈት?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> አሁን በአስተዳዳሪ መሥሪያው ውስጥ ይታያል</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">ድር ጣቢያዎችን፣ የAndroid መተግበሪያዎችን እና ተጨማሪ ነገሮችን ለመገንባት የሚሆኑ መሣሪያዎችን ያግኙ። Linuxን መጫን <ph name="DOWNLOAD_SIZE" /> ውሂብን ያወርዳል።</translation>
 <translation id="385051799172605136">ተመለስ</translation>
 <translation id="3851428669031642514">ደህንነታቸው አስተማማኝ ያልሆኑ የአጻጻፍ ስርዓቶችን ጫን</translation>
+<translation id="3854599674806204102">አንድ አማራጭ ይምረጡ</translation>
 <translation id="3855441664322950881">ቅጥያን ጠቅልል</translation>
 <translation id="3855676282923585394">ዕልባቶችን እና ቅንብሮችን ያስመጡ...</translation>
 <translation id="3856800405688283469">የሰዓት ሰቅ ይምረጡ</translation>
-<translation id="3856921555429624101">የውሂብ አጠቃቀምን መለካት ተጠናቅቋል</translation>
 <translation id="3857228364945137633">የእርስዎ ስልክ በአቅራቢያ በሚሆንበት ጊዜ የእርስዎን <ph name="DEVICE_TYPE" /> ያለ ይለፍ ቃል ለመክፈት Smart Lockን ይሞክሩት።</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />፦ ማሳመር ባለበት ቆሟል</translation>
@@ -2247,7 +2259,6 @@
 <translation id="4508051413094283164">ሁሉንም ማንነት በማያሳውቅ መስኮት ውስጥ ክፈት</translation>
 <translation id="4508265954913339219">ማግበር አልተሳካም</translation>
 <translation id="4508765956121923607">ም&amp;ንጭ አሳይ</translation>
-<translation id="4509823033118379431">ምስሎቹ በአሁኑ ጊዜ አይገኙም። ስብስቦቹን ለመመልከት እባክዎ ዳግም ይገናኙ።</translation>
 <translation id="451407183922382411">በ<ph name="COMPANY_NAME" /> የተጎላበተ</translation>
 <translation id="4514542542275172126">አዲስ ክትትል የሚደረግበት ተጠቃሚ ያዋቅሩ</translation>
 <translation id="4514610446763173167">ቪዲዮን ለማጫወት ወይም ባለበት ለማቆም ቀያይር</translation>
@@ -2324,6 +2335,7 @@
 <translation id="4627442949885028695">ከሌላ መሣሪያ ላይ ቀጥል</translation>
 <translation id="4628314759732363424">ይቀይሩ...</translation>
 <translation id="4628757576491864469">መሣሪያዎች</translation>
+<translation id="4628948037717959914">ፎቶ</translation>
 <translation id="4630590996962964935">ልክ ያልሆነ ቁምፊ፦ $1</translation>
 <translation id="4631887759990505102">አርቲስት</translation>
 <translation id="4632483769545853758">የትር ድምጸ-ከል አንሳ</translation>
@@ -2509,7 +2521,6 @@
 <translation id="4905417359854579806">የ<ph name="FILE_COUNT" />ን ምትኬ ለማስቀመጥ ዝግጁ</translation>
 <translation id="4907161631261076876">ይህ ፋይል በተለምዶ የሚወርድ አይደለም፣ እና አደገኛ ሊሆን ይችላል።</translation>
 <translation id="4907306957610201395">የፈቃድ ምድብ</translation>
-<translation id="4907824805858067479">የተቀመጡ ካርዶች በእርስዎ አስተዳዳሪ ተሰናክሏል</translation>
 <translation id="4908811072292128752">በአንዴ ሁለት ጣቢያዎችን ለማሰስ አዲስ ትር ይክፈቱ</translation>
 <translation id="4909038193460299775">ይህ መለያ የሚቀናበረው በ<ph name="DOMAIN" /> ስለሆነ የእርስዎ ዕልባቶች፣ ታሪክ፣ የይለፍ ቃላት እና ሌሎች ቅንብሮች ከዚህ መሣሪያ ይጸዳሉ። ይሁንና፣ የእርስዎ ውሂብ በGoogle መለያ ላይ እንዳለ የሚቀር ሲሆን በ<ph name="BEGIN_LINK" />Google ዳሽቦርድ<ph name="END_LINK" /> ላይ መቀናበር ይችላል።</translation>
 <translation id="4909359680501173791">እርስዎ በተሳካ ሁኔታ ተመዝግበዋል</translation>
@@ -2541,6 +2552,7 @@
 <translation id="4955814292505481804">ዓመታዊ</translation>
 <translation id="4957949153200969297">ከ<ph name="IDS_SHORT_PRODUCT_NAME" /> ስምረት ጋር የተዛመዱ ባህሪያትን ብቻ ያንቁ</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">የእርስዎን ካርዶች በአንድ ቦታ ያግኟቸው</translation>
 <translation id="496226124210045887">የመረጡት አቃፊ ሊጎዱ የሚችሉ ፋይሎች አሉት። እርግጠኛ ነዎት ዘላቂ የዚህ አቃፊ የንባብ መዳረሻ ለ«$1» መስጠት ይፈልጋሉ?</translation>
 <translation id="4964455510556214366">አደራደር</translation>
 <translation id="4964673849688379040">በመፈተሽ ላይ...</translation>
@@ -2588,6 +2600,7 @@
 <translation id="5027562294707732951">ቅጥያ ያክሉ</translation>
 <translation id="5029568752722684782">ቅጂን አጽዳ</translation>
 <translation id="5030338702439866405">የቀረበው</translation>
+<translation id="503155457707535043">መተግበሪያዎች በመውረድ ላይ</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ካሜራዎን እና ማይክሮፎንዎን መጠቀም ይፈልጋል</translation>
 <translation id="5036662165765606524">ማንኛውንም ጣቢያ በርካታ ፋይሎችን በራስ ሰር እንዲያወርድ አትፍቀድ</translation>
 <translation id="5037676449506322593">ሁሉንም ምረጥ</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">ድምጽ ይዝጉ</translation>
 <translation id="5785583009707899920">የChrome ፋይል መገልገያዎች</translation>
 <translation id="5787146423283493983">ቁልፍ ስምምነት</translation>
+<translation id="5788127256798019331">የPlay ፋይሎች</translation>
 <translation id="5788367137662787332">ይቅርታ፣ በመሣሪያ <ph name="DEVICE_LABEL" /> ላይ ያለ ቢያንስ አንድ ክፍልፍል ሊፈናጠጥ አልቻለም።</translation>
 <translation id="5794414402486823030">ሁልጊዜ ከስርዓት ተመልካች ጋር ይክፈቱ</translation>
 <translation id="5794786537412027208">ከሁሉም የChrome መተግበሪያዎች ውጣ</translation>
@@ -3228,7 +3242,6 @@
 <translation id="5990386583461751448">የተተረጎመ</translation>
 <translation id="5991049340509704927">አጉላ</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ ይህን መተግበሪያ እንዲያስወግዱ ይጠይቋቸው።}one{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}other{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}}</translation>
-<translation id="5993332328670040093">የውሂብ አጠቃቀምዎ ከአሁን በኋላ አይለካም።</translation>
 <translation id="6002458620803359783">የሚመረጡ ድምጾች</translation>
 <translation id="6005695835120147974">ሚዲያ ራውተር</translation>
 <translation id="6006484371116297560">የታወቀ ገጽታ</translation>
@@ -3354,6 +3367,7 @@
 <translation id="6178664161104547336">የዕውቅና ማረጋገጫ ምረጥ/ሰርቲፊኬት</translation>
 <translation id="6181431612547969857">ማውረድ ታግዷል</translation>
 <translation id="6185132558746749656">የመሣሪያ አካባቢ</translation>
+<translation id="6185617499004995178">CUPS IPP አረጋጋጭ</translation>
 <translation id="6185696379715117369">ገጽ ወደላይ</translation>
 <translation id="6189273858858366896">የአውታረ መረብ ፋይል ማጋራቶችን ያዋቅሩ ወይም ያቀናብሩ</translation>
 <translation id="6189412234224385711">በ<ph name="EXTENSION_NAME" /> ክፈት</translation>
@@ -3386,6 +3400,7 @@
 <translation id="6231881193380278751">ገጹን በራስ-ለማደስ በዩአርኤል ውስጥ የመጠይቅ ልኬት ያክሉ፦ chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">ባትሪ</translation>
 <translation id="6232116551750539448">ወደ <ph name="NAME" /> ግንኙነት ጠፍቷል</translation>
+<translation id="6235700927623181151">ይህ ትር የእርስዎን የዴስክቶፕ ይዘት በማጋራት ላይ ነው።</translation>
 <translation id="6237816943013845465">የእርስዎን ማያ ገጽ ምስል ጥራት እንዲቀይሩ ያስችልዎታል</translation>
 <translation id="6238923052227198598">በማያ ገጽ መቆለፊያ ላይ የቅርብ ጊዜውን ማስታወሻ አቆይ</translation>
 <translation id="6239558157302047471">&amp;ክፈፍን ዳግም ጫን</translation>
@@ -3420,7 +3435,6 @@
 <translation id="6280912520669706465">ኤአርሲ</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> በተለምዶ የሚወርድ ፋይል አይደለም፣ እና አደገኛ ሊሆን ይችላል።</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{በእርስዎ አውታረ መረብ ላይ ያለ አዲስ አታሚ}one{በእርስዎ አውታረ መረብ ላይ ያሉ አዲስ አታሚዎች}other{በእርስዎ አውታረ መረብ ላይ ያሉ አዲስ አታሚዎች}}</translation>
-<translation id="6286684120317096255">የውሂብ አጠቃቀም በመለካት ላይ ነው</translation>
 <translation id="6286708577777130801">የተቀመጡ የይለፍ ቃላት ዝርዝሮች</translation>
 <translation id="6287852322318138013">ይህን ፋይል የሚከፍቱበት መተግበሪያ ይምረጡ</translation>
 <translation id="6289452883081499048">እንደ Play ያሉ ግላዊነት የተላበሱ የGoogle አገልግሎቶች</translation>
@@ -3531,6 +3545,7 @@
 <translation id="6451180435462401570">የደመና ሕትመት መሣሪያዎችን ያስተዳድሩ</translation>
 <translation id="6451689256222386810">የእርስዎን የይለፍ ሐረግ ከረሱት ወይም ይህን ቅንብር መለወጥ ከፈለጉ <ph name="BEGIN_LINK" />ስምረትን ዳግም ያስጀምሩ<ph name="END_LINK" /></translation>
 <translation id="6452181791372256707">አይቀበሉ</translation>
+<translation id="6455264371803474013">በተወሰኑ ጣቢያዎች ላይ</translation>
 <translation id="6455894534188563617">&amp;አዲስ አቃፊ</translation>
 <translation id="6456394469623773452">ጥሩ</translation>
 <translation id="6456631036739229488">የSmart Lock ስልክ ተለውጧል። Smart Lockን ለማዘመን የእርስዎን የይለፍ ቃል ያስገቡ። በሚቀጥለው ጊዜ ስልክዎ የእርስዎን <ph name="DEVICE_TYPE" /> ይከፍተዋል። በቅንብሮች ውስጥ Smart Lockን ያጥፉ።</translation>
@@ -3608,6 +3623,7 @@
 <translation id="657402800789773160">ይህን ገጽ &amp;ዳግም ጫን</translation>
 <translation id="6577284282025554716">ማውረድ ተሰርዟል፦ <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">የሰመሩ ይለፍ ቃላ በእርስዎ የGoogle ተጠቃሚ ስም እና ይለፍ ቃል ያመስጥሯቸው</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - የዴስክቶፕ ይዘት ተጋርቷል</translation>
 <translation id="6580151766480067746">የኤአርሲ ስሪት</translation>
 <translation id="6581162200855843583">Google Drive አገናኝ</translation>
 <translation id="6582421931165117398">የግል መረጃዎን ለመጠበቅ የይለፍ ቃልዎን አሁን ይቀይሩት። የይለፍ ቃልዎን መቀየር ከመቻልዎ በፊት በመለያ እንዲገቡ ይጠየቃሉ።</translation>
@@ -4074,6 +4090,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{ይህ መተግበሪያ Chrome በአግባቡ እንዳይሠራ ሊከላከል ይችላል።}one{እነዚህ መተግበሪያዎች Chrome በአግባቡ እንዳይሠራ ሊከላከሉ ይችላሉ።}other{እነዚህ መተግበሪያዎች Chrome በአግባቡ እንዳይሠራ ሊከላከሉ ይችላሉ።}}</translation>
 <translation id="7303900363563182677">ይህ ጣቢያ ወደ ቅንጥብ ሰሌዳው የተቀዱ ጽሑፍን እና ምስሎችን እንዳይመለከት ታግዷል</translation>
 <translation id="730515362922783851">በአካባቢ አውታረመረብ ወይም በይነመረብ ላይ ከማናቸውም መሣሪያ ጋር ውሂብ ተለዋወጥ</translation>
+<translation id="7307129035224081534">ባለበት ቆሟል</translation>
 <translation id="7308002049209013926">ወደ አዲስ መተግበሪያዎች እና እንቅስቃሴዎች በፍጥነት ለመሄድ ማስጀመሪያን ይጠቀሙ። በቁልፍ ሰሌዳ ወደዚህ ለመምጣት Alt + Shift + L ይጫኑ።</translation>
 <translation id="7309257895202129721">&amp;ቁጥጥሮችን አሳይ</translation>
 <translation id="7310598146671372464">በመለያ መግባት አልተሳካም። አገልጋዩ የተጠቀሱትን የKerberos ምሥጠራ ዓይነቶች አይደግፍም። እባክዎ የእርስዎን አስተዳዳሪ ያነጋግሩ።</translation>
@@ -4131,7 +4148,6 @@
 <translation id="7400839060291901923">በእርስዎ <ph name="PHONE_NAME" /> ላይ ግንኙነት ያቀናብሩ</translation>
 <translation id="740624631517654988">ብቅ-ባይ ታግዷል</translation>
 <translation id="7407430846095439694">አስመጣ እና እሰር</translation>
-<translation id="7409233648990234464">ዳግም አስጀምር እና Powerwash</translation>
 <translation id="7409836189476010449">Flash አሂድ</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> ካሜራዎን እና ማይክሮፎንዎን መድረስ ይፈልግ እንደሆነ ይጠይቁ</translation>
 <translation id="741204030948306876">አዎ፣ ገብቼያለሁ</translation>
@@ -4164,6 +4180,7 @@
 <translation id="7465778193084373987">የNetscape ሰርቲፊኬት የመሻሪያ URL</translation>
 <translation id="7469894403370665791">ከዚህ አውታረ መረብ ጋር በራስ-ሰር ይገናኙ</translation>
 <translation id="747114903913869239">ስህተት፦ ቅጥያዎችን ዲኮድ ማድረግ አልተቻለም</translation>
+<translation id="7473753388963818366">የእርስዎን <ph name="DEVICE_TYPE" /> ለእርስዎ ዝግጁ እናደርገው</translation>
 <translation id="7473891865547856676">አይ፣ አመሰግናለሁ</translation>
 <translation id="747459581954555080">ሁሉንም ወደነበረበት መልስ</translation>
 <translation id="7475671414023905704">የNetscape የጠፋ የይለፍ ቃል URL</translation>
@@ -4288,6 +4305,7 @@
 <translation id="7665369617277396874">መለያ ያክሉ</translation>
 <translation id="7671130400130574146">የሥርዓት ርእሰ አሞሌ እና ጠርዞች</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />፣ በ<ph name="PAGE_TITLE" /> ውስጥ።</translation>
+<translation id="7676867886086876795">ወደ ማናቸውም የጽሑፍ መስክ በቃል ማስጻፍን ለመፍቀድ ድምጽዎን ወደ Google ይላኩ።</translation>
 <translation id="7681095912841365527">ጣቢያ ብሉቱዝን መጠቀም ይችላል</translation>
 <translation id="7683373461016844951">ለመቀጠል እሺን ጠቅ ያድርጉ፣ ከዚያ ለ<ph name="DOMAIN" /> ኢሜይል አድራሻዎ አዲስ መገለጫ ለመስራት ሰው አክልን ጠቅ ያድርጉ።</translation>
 <translation id="7684212569183643648">በእርስዎ አስተዳዳሪ የተጫነ</translation>
@@ -4329,6 +4347,7 @@
 <translation id="7740996059027112821">መደበኛ</translation>
 <translation id="7748528009589593815">ቀዳሚ ትር</translation>
 <translation id="7748626145866214022">ተጨማሪ አማራጮች በእርምጃ አሞሌው ላይ ይገኛሉ። በእርምጃ አሞሌው ላይ ለማተኮር Alt + A ይጫኑ።</translation>
+<translation id="7750228210027921155">በሥዕል ውስጥ ሥዕል</translation>
 <translation id="7751260505918304024">ሁሉንም አሳይ</translation>
 <translation id="7754704193130578113">እያንዳንዱ ፋይል ከመውረዱ በፊት የት እንደሚቀመጥ ጠይቅ</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4437,6 +4456,7 @@
 <translation id="7857949311770343000">የጠበቁት የአዲስ ትር ገጽ ይሄ ነው?</translation>
 <translation id="786073089922909430">አገልግሎት፦ <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;የወረዱ</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 ኩኪ}one{# ኩኪዎች}other{# ኩኪዎች}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ተጣምሯል</translation>
 <translation id="7870730066603611552">ቅንብርን የሚከተሉትን የማስመር አማራጮች ይገምግሙ</translation>
 <translation id="7870790288828963061">ምንም አዲስ ስሪት ያላቸው የKiosk መተግበሪያዎች አልተገኙም። ምንም የሚዘምን ነገር የለም። እባክዎ የዩ.ኤስ.ቢ. ስቲኩን ያስወግዱ።</translation>
@@ -4763,6 +4783,7 @@
 <translation id="8373553483208508744">ትሮች ላይ ድምጸ-ከል ያድርጉ</translation>
 <translation id="8382913212082956454">&amp;ኢሜይል አድራሻ ቅዳ</translation>
 <translation id="8386903983509584791">መቃኘት ተጠናቅቋል</translation>
+<translation id="8389492867173948260">ይህ ቅጥያ በሚጎበኟቸው ድር ጣቢያዎች ላይ ያለው ሁሉም ውሂብዎን እንዲያነብብ እና እንዲቀይር ይፍቀዱ፦</translation>
 <translation id="8390449457866780408">አገልጋይ አይገኝም።</translation>
 <translation id="8391712576156218334">ምስል ሊገኝ አይችልም። ቆይተው እንደገና ይሞክሩ።</translation>
 <translation id="8392234662362215700">የቁልፍ ሰሌዳ አቀማመጥን ለመቀየር Control-Shift-Space ይምቱ።</translation>
@@ -4794,6 +4815,7 @@
 <translation id="84297032718407999">በ<ph name="LOGOUT_TIME_LEFT" /> ውስጥ ዘግተው እንዲወጡ ይደረጋሉ</translation>
 <translation id="8431909052837336408">የሲም ፒን ይለውጡ</translation>
 <translation id="8434480141477525001">NaCl ስህተት ማረሚያ ወደብ</translation>
+<translation id="8435395510592618362">የእርስዎን ማንነት በ<ph name="APP_NAME" /> ያረጋግጡ</translation>
 <translation id="843760761634048214">ክሬዲት ካርድ አስቀምጥ</translation>
 <translation id="8438328416656800239">ወደ ዘመናዊ አሳሽ ቀይር</translation>
 <translation id="8438566539970814960">ፍለጋዎችን እና አሰሳን የተሻለ አድርግ</translation>
@@ -4820,6 +4842,7 @@
 <translation id="8465252176946159372">ልክ ያልሆነ</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ለማሄድ የእርስዎ ፍቃድ ያስፈልገዋል</translation>
 <translation id="8466234950814670489">የTar ማህደር</translation>
+<translation id="8466417995783206254">ይህ ትር አንድ ቪዲዮ በሥዕል-ውስጥ-ሥዕል ሁነታ ላይ እያጫወተ ነው።</translation>
 <translation id="8468750959626135884">የእርስዎን <ph name="DEVICE_TYPE" /> በAndroid ስልክዎ ይክፈቱት።</translation>
 <translation id="8470028084415844044">ሁሉንም የእርስዎ የይለፍ ቃላት በሁሉም መሣሪያዎችዎ ላይ ለማግኘት ስምረትን ያብሩ።</translation>
 <translation id="8470513973197838199">የተቀመጡ የ<ph name="ORIGIN" /> የይለፍ ቃላት</translation>
@@ -4840,6 +4863,7 @@
 <translation id="8496717697661868878">ይህን ተሰኪ አሂድ</translation>
 <translation id="8497219075884839166">የWindows መገልገያዎች</translation>
 <translation id="8498214519255567734">ማያ ገጽዎን በደበዘዘ ብርሃን ላይ መመልከት ወይም ማንበብ ቀላል ያድርጉት</translation>
+<translation id="8498395510292172881">በChrome ውስጥ ማንበብ ይቀጥሉ</translation>
 <translation id="8503813439785031346">የተጣቃሚ ስም</translation>
 <translation id="850875081535031620">ምንም ጎጂ ሶፍትዌር አልተገኘም</translation>
 <translation id="8509646642152301857">የፊደል ማረሚያ መዝገበ-ቃላት ማውረድ አልተሳካም።</translation>
@@ -4990,7 +5014,6 @@
 <translation id="8725066075913043281">እንደገና ይሞክሩ</translation>
 <translation id="8725178340343806893">ተወዳጆች/ዕልባቶች</translation>
 <translation id="8726206820263995930">የመምሪያ ቅንብሮች ከዚህ አገልጋይ በማምጣት ላይ ሳለ ስህተት፦ <ph name="CLIENT_ERROR" />።</translation>
-<translation id="8727142376512517020">ይህን ዳግም አታሳይ</translation>
 <translation id="8727344521467137076">በእርስዎ ኮምፒውተር ላይ ጎጂ ሶፍትዌር አለ። Chrome የእርስዎን አሰሳ እንደገና በጤናማነት እንዲሠራ ለማድረግ ያስወግደው እና የእርስዎን ቅንብሮች እንደነበሩ ይመልሳቸዋል።</translation>
 <translation id="8730621377337864115">ተከናውኗል</translation>
 <translation id="8732030010853991079">ይህን አዶ ጠቅ በማድረግ ይህንን ቅጥያ ይጠቀሙበት።</translation>
@@ -5181,6 +5204,7 @@
 <translation id="9027459031423301635">አገናኙን በአዲስ &amp;ትር ክፈት</translation>
 <translation id="9030515284705930323">የእርስዎ ድርጅት Google Play መደብርን ለመለያዎ አላነቃም። ተጨማሪ መረጃን ለማግኘት አስተዳዳሪዎን ያነጋግሩ።</translation>
 <translation id="9033857511263905942">&amp;ለጥፍ</translation>
+<translation id="9034924485347205037">የLinux ፋይሎች</translation>
 <translation id="9035012421917565900">ንጥሎቹ ተመልሰው ወደ «<ph name="DESTINATION_NAME" />» ሊወሰዱ አይችሉም፤ ስለዚህ ይህን ድርጊት መቀልበስ አይችሉም።</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">የመጀመሪያውን አሳይ</translation>
@@ -5281,6 +5305,7 @@
 <translation id="9173995187295789444">የብሉቱዝ መሣሪያዎችን በመቃኘት ላይ...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - የብሉቱዝ መሣሪያ ተገናኝቷል</translation>
 <translation id="9177499212658576372">በአሁኑ ጊዜ ከ<ph name="NETWORK_TYPE" /> አውታረ መረቡ ጋር ተገናኝቷል።</translation>
+<translation id="9179734824669616955">Linux (ቅድመ-ይሁንታ) በእርስዎ <ph name="DEVICE_TYPE" /> ላይ ያቀናብሩ</translation>
 <translation id="9180281769944411366">ይህ ሂደት ጥቂት ደቂቃዎችን ሊወስድ ይችላል። የLinux መያዣውን በመጀመር ላይ።</translation>
 <translation id="9180380851667544951">ጣቢያ የእርስዎን ማያ ገጽ ማጋራት ይችላል</translation>
 <translation id="9188441292293901223">ይህን <ph name="DEVICE_TYPE" /> ለማስከፈት እባክዎ ስልክዎን ወደ አዲስ የAndroid ስሪት ያዘምኑት።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index b4aee45..395aa0e 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -565,7 +565,6 @@
 <translation id="1829192082282182671">ت&amp;صغير</translation>
 <translation id="1830550083491357902">لم يتم تسجيل الدخول</translation>
 <translation id="1832511806131704864">تم تحديث تغيير الهاتف</translation>
-<translation id="1832685970989658809">أوقف المشرف طرق الدفع المحفوظة.</translation>
 <translation id="1834503245783133039">تعذّر التنزيل: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">محو البحث</translation>
 <translation id="1838709767668011582">‏موقع Google</translation>
@@ -942,7 +941,6 @@
 <translation id="2435457462613246316">عرض كلمة المرور</translation>
 <translation id="2436186046335138073">هل تريد السماح لـ <ph name="HANDLER_HOSTNAME" /> بفتح كل روابط <ph name="PROTOCOL" />؟</translation>
 <translation id="2436707352762155834">الحد الأدنى</translation>
-<translation id="2437139306601019091">انتهى قياس استخدام البيانات</translation>
 <translation id="2440604414813129000">عرض الم&amp;صدر</translation>
 <translation id="2445081178310039857">دليل الجذر للإضافة مطلوب.</translation>
 <translation id="2445484935443597917">إنشاء ملف شخصي جديد</translation>
@@ -1876,7 +1874,6 @@
 <translation id="3855441664322950881">إنشاء حزمة للإضافة</translation>
 <translation id="3855676282923585394">إشارات وإعدادات الاستيراد...</translation>
 <translation id="3856800405688283469">تحديد منطقة زمنية</translation>
-<translation id="3856921555429624101">انتهى قياس استخدام البيانات</translation>
 <translation id="3857228364945137633">‏يمكنك تجربة Smart Lock لإلغاء قفل جهاز <ph name="DEVICE_TYPE" /> من دون كلمة المرور عندما يكون هاتفك قريبًا.</translation>
 <translation id="3857773447683694438">أبجد هوز حطي كلمن سعفص قرشت</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: تم إيقاف المزامنة مؤقتًا</translation>
@@ -2244,7 +2241,6 @@
 <translation id="4508051413094283164">فتح الكل في نافذة التصفح المتخفي</translation>
 <translation id="4508265954913339219">تعذّر إتمام عملية التفعيل</translation>
 <translation id="4508765956121923607">عرض الم&amp;صدر</translation>
-<translation id="4509823033118379431">الصور غير متوفِّرة حاليًا. يُرجى إعادة الاتصال لعرض مجموعات الصور.</translation>
 <translation id="451407183922382411">تم التشغيل من قبل <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">إعداد مستخدم جديد تحت الإشراف</translation>
 <translation id="4514610446763173167">تبديل الفيديو لتشغيله أو إيقافه مؤقتًا</translation>
@@ -2321,6 +2317,7 @@
 <translation id="4627442949885028695">متابعة من جهاز آخر</translation>
 <translation id="4628314759732363424">تغيير...</translation>
 <translation id="4628757576491864469">الأجهزة</translation>
+<translation id="4628948037717959914">صورة</translation>
 <translation id="4630590996962964935">حرف غير صالح: $1</translation>
 <translation id="4631887759990505102">الفنان</translation>
 <translation id="4632483769545853758">إلغاء تجاهل علامة التبويب</translation>
@@ -2506,7 +2503,6 @@
 <translation id="4905417359854579806">جاهز للاحتفاظ بنسخة احتياطية من <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">لا يتم تنزيل هذا الملف بشكل شائع وقد يكون ضارًا.</translation>
 <translation id="4907306957610201395">فئة الإذن</translation>
-<translation id="4907824805858067479">أوقف المشرف البطاقات المحفوظة</translation>
 <translation id="4908811072292128752">فتح علامة تبويب جديدة لتصفح موقعي ويب في وقت واحد</translation>
 <translation id="4909038193460299775">‏نظرًا لأنه تتم إدارة هذا الحساب من قبل <ph name="DOMAIN" />، سيتم مسح الإشارات والسجل وكلمات المرور والإعدادات الأخرى من هذا الجهاز. ومع ذلك ستبقى بياناتك مخزنة في حسابك في Google ويمكن إدارتها على <ph name="BEGIN_LINK" />لوحة تحكم Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">تم التسجيل بنجاح</translation>
@@ -3225,7 +3221,6 @@
 <translation id="5990386583461751448">مترجَمة</translation>
 <translation id="5991049340509704927">تكبير</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذا التطبيق.}zero{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}two{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذين التطبيقين.}few{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}many{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}other{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}}</translation>
-<translation id="5993332328670040093">لن يتم قياس استخدام البيانات بعد ذلك.</translation>
 <translation id="6002458620803359783">الأصوات المُفضَّلة</translation>
 <translation id="6005695835120147974">موجّه الوسائط</translation>
 <translation id="6006484371116297560">كلاسيكي</translation>
@@ -3418,7 +3413,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">لا يتم تنزيل <ph name="FILE_NAME" /> بشكل شائع وربما يكون ضارًا.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{طابعة جديدة على شبكتك}zero{طابعات جديدة على شبكتك}two{طابعتان جديدتان على شبكتك}few{طابعات جديدة على شبكتك}many{طابعات جديدة على شبكتك}other{طابعات جديدة على شبكتك}}</translation>
-<translation id="6286684120317096255">يتم الآن قياس استخدام البيانات</translation>
 <translation id="6286708577777130801">تفاصيل كلمة المرور المحفوظة</translation>
 <translation id="6287852322318138013">حدد تطبيقًا لفتح هذا الملف من خلاله</translation>
 <translation id="6289452883081499048">‏خدمات Google المُخصَّصة مثل Google Play</translation>
@@ -4129,7 +4123,6 @@
 <translation id="7400839060291901923">إعداد الاتصال على جهاز <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">تم منع النوافذ المنبثقة.</translation>
 <translation id="7407430846095439694">الاستيراد والربط</translation>
-<translation id="7409233648990234464">‏إعادة تشغيل وإجراء Powerwash</translation>
 <translation id="7409836189476010449">‏تشغيل Flash</translation>
 <translation id="7410344089573941623">السؤال عند رغبة <ph name="HOST" /> في الدخول إلى الكاميرا والميكروفون التابعين لك</translation>
 <translation id="741204030948306876">نعم، موافق</translation>
@@ -4984,7 +4977,6 @@
 <translation id="8725066075913043281">أعد المحاولة</translation>
 <translation id="8725178340343806893">المفضّلة/الإشارات</translation>
 <translation id="8726206820263995930">حدث خطأ عند جلب إعدادات السياسة من الخادم: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">عدم إظهار ذلك مرة أخرى</translation>
 <translation id="8727344521467137076">‏هناك برنامج ضار على جهاز الكمبيوتر، ويعمل Chrome حاليًا على إزالته واستعادة إعداداتك لكي يعمل متصفحك بشكلٍ طبيعي من جديد.</translation>
 <translation id="8730621377337864115">تم</translation>
 <translation id="8732030010853991079">استخدم هذه الإضافة بالنقر على هذا الرمز.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index ecf9e18..86b138e 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Извеждане на запитване преди осъществяване на достъп</translation>
 <translation id="1434696352799406980">Така ще се нулират началната страница, новият раздел в браузъра, търсещата машина и фиксираните раздели. Освен това ще се деактивират всички разширения и ще се изчистят временните данни, като например „бисквитките“. Отметките, историята и запазените ви пароли няма да бъдат премахнати.</translation>
 <translation id="1434886155212424586">Началната страница е новият раздел</translation>
+<translation id="1436671784520050284">Продължаване с настройването</translation>
 <translation id="1436784010935106834">Премахнато</translation>
 <translation id="1438632560381091872">Включване отново на звука на разделите</translation>
 <translation id="1442392616396121389">Префикс за маршрутизиране</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Парче пица</translation>
 <translation id="1467432559032391204">Наляво</translation>
 <translation id="1468571364034902819">Не можете да използвате този потребителски профил</translation>
+<translation id="1470533772306424441">Ще инсталираме тези приложения за вас. Можете да намерите още приложения за устройството си в Google Play Магазин.</translation>
 <translation id="1470811252759861213"><ph name="SIGN_IN_LINK" />, за да получите разширенията си на всичките си компютри.</translation>
 <translation id="1474339897586437869">Файлът „<ph name="FILENAME" />“ не бе качен. Нямате достатъчно свободно място в Google Диск.</translation>
 <translation id="1475502736924165259">Разполагате със сертификати, които не отговарят на нито една от другите категории</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">&amp;Намаляване</translation>
 <translation id="1830550083491357902">Не сте в профила си</translation>
 <translation id="1832511806131704864">Промяната на телефона е актуализирана</translation>
-<translation id="1832685970989658809">Запазените начини на плащане са деактивирани от администратора ви</translation>
 <translation id="1834503245783133039">Неуспешно изтегляне: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Изчистване на търсенето</translation>
 <translation id="1838709767668011582">Сайт в Google</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">От:</translation>
 <translation id="2193365732679659387">Настройки за доверие</translation>
 <translation id="2195729137168608510">Защита за имейли</translation>
+<translation id="2199298570273670671">Грешка</translation>
 <translation id="2200356397587687044">Chrome се нуждае от разрешение, за да продължи</translation>
 <translation id="220138918934036434">Скриване на бутона</translation>
 <translation id="2202898655984161076">При изреждането на принтерите възникна проблем. Възможно е някои от тях да не са регистрирани успешно с/ъс <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">Показване на паролата</translation>
 <translation id="2436186046335138073">Да се разреши ли на <ph name="HANDLER_HOSTNAME" /> да отваря всички връзки от типа „<ph name="PROTOCOL" />“?</translation>
 <translation id="2436707352762155834">Минимум</translation>
-<translation id="2437139306601019091">Измерването на преноса на данни приключи</translation>
 <translation id="2440604414813129000">&amp;Преглед на изходния код</translation>
 <translation id="2445081178310039857">Необходима е основна директория на разширението.</translation>
 <translation id="2445484935443597917">Създаване на нов потребителски профил</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> иска да потвърди самоличността ви</translation>
 <translation id="2448312741937722512">Тип</translation>
 <translation id="2450223707519584812">Няма да можете да добавяте потребители, тъй като липсват ключове за приложните програмни интерфейси (API) на Google. За подробности вижте <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Изключване на синхронизирането и изход?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">Файлът вече съществува</translation>
 <translation id="2453860139492968684">Край</translation>
 <translation id="2454247629720664989">Ключова дума</translation>
+<translation id="245661998428026871">Видеоклипът в режим „Картина в картината“ ще спре да се възпроизвежда.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> иска да копира файлове от „<ph name="VOLUME_NAME" />“.</translation>
 <translation id="2462724976360937186">Идентификатор (ИД) на ключ на сертифициращия орган</translation>
 <translation id="2462752602710430187">Добавихте <ph name="PRINTER_NAME" /></translation>
@@ -1359,6 +1362,7 @@
 <translation id="304826556400666995">Включване отново на звука на разделите</translation>
 <translation id="3053013834507634016">Използване на ключа на сертификата</translation>
 <translation id="3057861065630527966">Създаване на резервни копия на снимките и видеоклиповете ви</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Активиране на функцията Прочитане на глас</translation>
 <translation id="3061707000357573562">Услуга за корекции</translation>
 <translation id="3064410671692449875">Недостатъчно данни</translation>
@@ -1407,6 +1411,7 @@
 <translation id="313205617302240621">Забравили сте паролата си?</translation>
 <translation id="3132996321662585180">Ежедневно опресняване</translation>
 <translation id="3135204511829026971">Завъртане на екрана</translation>
+<translation id="313638818480447860">Намерихме <ph name="NUMBER_OF_APPS" /> приложения, свързани с профила ви, които са оптимизирани за това устройство.</translation>
 <translation id="313963229645891001">Изтегля се, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Стандартен жълт аватар</translation>
 <translation id="3140353188828248647">Преместване на фокуса върху адресната лента</translation>
@@ -1437,6 +1442,7 @@
 <translation id="3182749001423093222">Проверка на правописа</translation>
 <translation id="3183139917765991655">Импортиране на потребителски профили</translation>
 <translation id="3184560914950696195">Запазването в/ъв „$1“ е невъзможно. Редактираните изображения ще бъдат запазени в папката за изтегляния.</translation>
+<translation id="3188257591659621405">Моите файлове</translation>
 <translation id="3188465121994729530">Пълзяща средна стойност</translation>
 <translation id="3190558889382726167">Паролата бе запазена</translation>
 <translation id="3192947282887913208">Аудиофайлове</translation>
@@ -1524,6 +1530,7 @@
 <translation id="3326821416087822643">„<ph name="FILE_NAME" />“ се компресира...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Информация за приложението</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – видеоклипът се възпроизвежда в режим „Картина в картината“</translation>
 <translation id="3335337277364016868">Година на записване</translation>
 <translation id="3335947283844343239">Повторно отваряне на затворения раздел</translation>
 <translation id="3336664756920573711">Отключвайте устройството си <ph name="DEVICE_TYPE" /> с телефона си с Android</translation>
@@ -1543,6 +1550,7 @@
 <translation id="3360297538363969800">Отпечатването не бе успешно. Моля, проверете принтера си и опитайте отново.</translation>
 <translation id="3364721542077212959">Инструменти за писане</translation>
 <translation id="3365598184818502391">Използвайте или Ctrl, или Alt</translation>
+<translation id="3367047597842238025">Настройте устройството си <ph name="DEVICE_TYPE" /> по свой вкус и открийте всички невероятни функции, до които имате непосредствен достъп.</translation>
 <translation id="3368922792935385530">Установена е връзка</translation>
 <translation id="3369624026883419694">Получава се разрешение от хоста...</translation>
 <translation id="337286756654493126">Четене на папки, които сте отворили в приложението</translation>
@@ -1556,6 +1564,7 @@
 <translation id="3389312115541230716">Кликнете с десния бутон на мишката върху иконата <ph name="SMALL_PRODUCT_LOGO" /> в лентата на задачите</translation>
 <translation id="3391716558283801616">Раздел 7</translation>
 <translation id="3396331542604645348">Избраният принтер не е налице или не е инсталиран правилно. Проверете принтера си или опитайте да изберете друг.</translation>
+<translation id="3396800784455899911">С кликването си върху бутона „Приемам и продължавам“ приемате описаното по-горе обработване за тези услуги на Google.</translation>
 <translation id="3399432415385675819">Известията ще бъдат деактивирани</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Няма запазени пароли за този сайт</translation>
@@ -1785,10 +1794,13 @@
 <translation id="3726463242007121105">Това устройство не може да бъде отворено, защото файловата му система не се поддържа.</translation>
 <translation id="3727148787322499904">Промяната на тази настройка ще засегне всички споделени мрежи</translation>
 <translation id="3727187387656390258">Инспектиране на изскачащ прозорец</translation>
+<translation id="3729506734996624908">Разрешени сайтове</translation>
 <translation id="3732078975418297900">Грешка в ред <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL сървър с повишаване на сигурността</translation>
+<translation id="3735740477244556633">Сортиране по</translation>
 <translation id="3737274407993947948">Грешка при инсталирането на Linux...</translation>
 <translation id="3737536731758327622">Изтеглените от вас неща ще се показват тук</translation>
+<translation id="3738671331307774213">Потвърждаването на самоличността ви помага за защитата на частните ви данни</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Да се отвори ли <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">„<ph name="DEVICE_NAME" />“ вече ще се показва в Admin console</translation>
@@ -1874,10 +1886,10 @@
 При инсталирането на Linux ще бъдат изтеглени <ph name="DOWNLOAD_SIZE" /> данни.</translation>
 <translation id="385051799172605136">Назад</translation>
 <translation id="3851428669031642514">Зареждане на опасните скриптове</translation>
+<translation id="3854599674806204102">Изберете опция</translation>
 <translation id="3855441664322950881">Пакетиране на разширение</translation>
 <translation id="3855676282923585394">Импортиране на отметки и настройки...</translation>
 <translation id="3856800405688283469">Изберете часова зона</translation>
-<translation id="3856921555429624101">Измерването на преноса на данни приключи</translation>
 <translation id="3857228364945137633">Изпробвайте Smart Lock, за да отключвате своя <ph name="DEVICE_TYPE" /> без парола, когато телефонът ви е наблизо.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: синхронизирането е на пауза</translation>
@@ -2248,7 +2260,6 @@
 <translation id="4508051413094283164">Отваряне на всички в прозорец в режим „инкогнито“</translation>
 <translation id="4508265954913339219">Активирането не бе успешно</translation>
 <translation id="4508765956121923607">Преглед на изходн&amp;ия код</translation>
-<translation id="4509823033118379431">Изображенията не са налице в момента. Моля, свържете се отново, за да видите колекциите.</translation>
 <translation id="451407183922382411">Предоставено от <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Настройване на нов контролиран потребител</translation>
 <translation id="4514610446763173167">Превключвател за възпроизвеждане или поставяне на пауза на видеоклипа</translation>
@@ -2325,6 +2336,7 @@
 <translation id="4627442949885028695">Продължаване от друго устройство</translation>
 <translation id="4628314759732363424">Промяна...</translation>
 <translation id="4628757576491864469">Устройства</translation>
+<translation id="4628948037717959914">Снимка</translation>
 <translation id="4630590996962964935">Невалиден знак: $1</translation>
 <translation id="4631887759990505102">Изпълнител</translation>
 <translation id="4632483769545853758">Включване отново на звука на раздела</translation>
@@ -2510,7 +2522,6 @@
 <translation id="4905417359854579806">Готови сме да създадем резервно копие на <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Този файл обикновено не се изтегля и може да е опасен.</translation>
 <translation id="4907306957610201395">Категория за разрешения</translation>
-<translation id="4907824805858067479">Запазените карти са деактивирани от администратора ви</translation>
 <translation id="4908811072292128752">Отворете нов раздел, за да сърфирате в два сайта едновременно</translation>
 <translation id="4909038193460299775">Тъй като този профил се управлява от <ph name="DOMAIN" />, вашите отметки, история, пароли и други настройки ще бъдат изчистени от устройството. Данните ви обаче ще продължат да се съхраняват в профила ви в Google. Можете да ги управлявате от <ph name="BEGIN_LINK" />Google Табло за управление<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Регистрирахте се успешно</translation>
@@ -2542,6 +2553,7 @@
 <translation id="4955814292505481804">Годишен</translation>
 <translation id="4957949153200969297">Активиране само на функциите, свързани със синхронизирането в <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Всичките ви карти на едно място</translation>
 <translation id="496226124210045887">Избраната от вас папка съдържа деликатни файлове. Наистина ли искате да предоставите на „$1“ постоянен достъп за четене от тази папка?</translation>
 <translation id="4964455510556214366">Подредба</translation>
 <translation id="4964673849688379040">Проверява се...</translation>
@@ -2589,6 +2601,7 @@
 <translation id="5027562294707732951">Добавяне на разширението</translation>
 <translation id="5029568752722684782">Изчистване на копието</translation>
 <translation id="5030338702439866405">Издаден от</translation>
+<translation id="503155457707535043">Приложенията се изтеглят</translation>
 <translation id="503498442187459473"><ph name="HOST" /> иска да използва камерата и микрофона ви</translation>
 <translation id="5036662165765606524">Да не се разрешава на сайтовете да изтеглят автоматично няколко файла</translation>
 <translation id="5037676449506322593">Избиране на всички</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Заглушаване</translation>
 <translation id="5785583009707899920">Помощни програми за файлове на Chrome</translation>
 <translation id="5787146423283493983">Договаряне на ключ</translation>
+<translation id="5788127256798019331">Файлове от Google Play</translation>
 <translation id="5788367137662787332">За съжаление поне един дял на устройството <ph name="DEVICE_LABEL" /> не можа да бъде свързан.</translation>
 <translation id="5794414402486823030">Отваряне винаги със системния визуализатор</translation>
 <translation id="5794786537412027208">Затваряне на всички приложения в Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Преведено</translation>
 <translation id="5991049340509704927">Увеличаване</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне това приложение.}other{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне тези приложения.}}</translation>
-<translation id="5993332328670040093">Преносът на данни вече няма да се измерва.</translation>
 <translation id="6002458620803359783">Предпочитани гласове</translation>
 <translation id="6005695835120147974">Медиен маршрутизатор</translation>
 <translation id="6006484371116297560">Класическа тема</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Избор на сертификат</translation>
 <translation id="6181431612547969857">Изтеглянето е блокирано</translation>
 <translation id="6185132558746749656">Местоположение на устройството</translation>
+<translation id="6185617499004995178">Инструмент за проверка на IPP заявки за CUPS</translation>
 <translation id="6185696379715117369">Страница нагоре</translation>
 <translation id="6189273858858366896">Настройване или управление на споделянето на файлове в мрежата.</translation>
 <translation id="6189412234224385711">Отваряне с/ъс <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">За да се опреснява страницата автоматично, добавете към URL адреса параметър на заявката: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Батерия</translation>
 <translation id="6232116551750539448">Връзката с/ъс <ph name="NAME" /> прекъсна</translation>
+<translation id="6235700927623181151">Този раздел споделя съдържанието на работния ви плот.</translation>
 <translation id="6237816943013845465">Позволява ви да коригирате разделителната способност на екрана</translation>
 <translation id="6238923052227198598">Запазване на най-новата бележка на заключения екран</translation>
 <translation id="6239558157302047471">Презареждане на рамката</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Файлът „<ph name="FILE_NAME" />“ не е често изтеглян и може да е опасен.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Нов принтер в мрежата ви}other{Нови принтери в мрежата ви}}</translation>
-<translation id="6286684120317096255">Преносът на данни се измерва</translation>
 <translation id="6286708577777130801">Подробности за запазената парола</translation>
 <translation id="6287852322318138013">Изберете приложение за отваряне на този файл</translation>
 <translation id="6289452883081499048">Персонализирани наши услуги, като Google Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Управление на устройствата в Отпечатване в облак</translation>
 <translation id="6451689256222386810">Ако забравите пропуска си или искате да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Отхвърляне</translation>
+<translation id="6455264371803474013">На конкретни сайтове</translation>
 <translation id="6455894534188563617">&amp;Нова папка</translation>
 <translation id="6456394469623773452">Добър</translation>
 <translation id="6456631036739229488">Телефонът за Smart Lock е променен. Въведете паролата си, за да актуализирате функцията. Следващия път телефонът ви ще отключи вашия <ph name="DEVICE_TYPE" />. Можете да изключите Smart Lock от настройките.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Презареждане на тази страница</translation>
 <translation id="6577284282025554716">Изтеглянето е анулирано: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Шифроване на синхронизираните пароли с потребителското име и паролата ви в Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – съдържанието на работния плот е споделено</translation>
 <translation id="6580151766480067746">Версия на ARC</translation>
 <translation id="6581162200855843583">Връзка към Google Диск</translation>
 <translation id="6582421931165117398">За да защитите личната си информация, променете паролата си сега. Преди това ще бъдете подканени да влезете в профила си.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Възможно е това приложение да пречи на Chrome да работи правилно.}other{Възможно е тези приложения да пречат на Chrome да работи правилно.}}</translation>
 <translation id="7303900363563182677">Този сайт няма право да преглежда текста и изображенията, копирани в буферната памет</translation>
 <translation id="730515362922783851">Обмен на данни с всяко устройство в локалната мрежа или интернет</translation>
+<translation id="7307129035224081534">На пауза</translation>
 <translation id="7308002049209013926">Използвайте стартовия панел, за да стигате бързо до новите приложения и активности. За да го отворите от клавиатурата, натиснете Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Показване на &amp;контролите</translation>
 <translation id="7310598146671372464">Влизането в профила не бе успешно. Сървърът не поддържа посочените типове шифроване в Kerberos. Моля, обърнете се към администратора си.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Настройте връзката на телефона си <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Блокиран бе изскачащ прозорец</translation>
 <translation id="7407430846095439694">Импортиране и свързване</translation>
-<translation id="7409233648990234464">Повторно стартиране и Powerwash</translation>
 <translation id="7409836189476010449">Изпълни Flash</translation>
 <translation id="7410344089573941623">Да се получава запитване, ако <ph name="HOST" /> иска достъп до камерата и микрофона ви</translation>
 <translation id="741204030948306876">Да, ще участвам</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">URL адрес за анулиране на сертификат на Netscape</translation>
 <translation id="7469894403370665791">Автоматично свързване с тази мрежа</translation>
 <translation id="747114903913869239">Грешка: Разширението не може да се декодира</translation>
+<translation id="7473753388963818366">Да подготвим устройството ви <ph name="DEVICE_TYPE" /> за вас</translation>
 <translation id="7473891865547856676">Не, благодаря</translation>
 <translation id="747459581954555080">Възстановяване на всички</translation>
 <translation id="7475671414023905704">URL адрес за изгубена парола на Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Добавяне на профил</translation>
 <translation id="7671130400130574146">Използване на системната заглавна лента и контурите</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, в страницата „<ph name="PAGE_TITLE" />“.</translation>
+<translation id="7676867886086876795">Изпращане на гласа ви до Google, за да можете да диктувате във всяко текстово поле.</translation>
 <translation id="7681095912841365527">Сайтът може да използва Bluetooth</translation>
 <translation id="7683373461016844951">За да продължите, кликнете върху „OK“ и след това – върху „Добавяне на човек“, така че да създадете нов потребителски профил за имейл адреса си от <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Инсталирано от администратора ви</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Стандартна</translation>
 <translation id="7748528009589593815">Предишният раздел</translation>
 <translation id="7748626145866214022">В лентата за действия има още опции. Натиснете Alt + A, за да поставите фокуса върху нея.</translation>
+<translation id="7750228210027921155">Картина в картината</translation>
 <translation id="7751260505918304024">Показване на всички</translation>
 <translation id="7754704193130578113">Извеждане на запитване къде да бъде запазен всеки файл преди изтеглянето му</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Това очакваният от вас нов раздел ли е?</translation>
 <translation id="786073089922909430">Услуга: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;За изтегляне</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 „бисквитка“}other{# „бисквитки“}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – сдвоено</translation>
 <translation id="7870730066603611552">Преглед на опциите за синхронизиране след настройването</translation>
 <translation id="7870790288828963061">Няма намерени павилионни приложения с по-нова версия. Няма нищо за актуализиране. Моля, извадете USB паметта.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Спиране на звука на разделите</translation>
 <translation id="8382913212082956454">Копиране на име&amp;йл адреса</translation>
 <translation id="8386903983509584791">Сканирането завърши</translation>
+<translation id="8389492867173948260">Разрешаване на това разширение да чете и променя всичките ви данни в посещаваните от вас уебсайтове:</translation>
 <translation id="8390449457866780408">Няма достъп до сървъра.</translation>
 <translation id="8391712576156218334">Изображението не е налице. Опитайте отново по-късно.</translation>
 <translation id="8392234662362215700">Натиснете „Control-Shift-интервал“ за превключване на клавиатурната подредба.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Ще излезете от профила си след <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Промяна на ПИН за SIM картата</translation>
 <translation id="8434480141477525001">Порт за отстраняване на грешки в клиента с директно изпълнение</translation>
+<translation id="8435395510592618362">Потвърждаване на самоличността ви чрез <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Запазване на кредитната карта</translation>
 <translation id="8438328416656800239">Преминете към интелигентен браузър</translation>
 <translation id="8438566539970814960">Подобряване на търсенията и сърфирането</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Не е валидно</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> се нуждае от разрешението ви, за да стартира</translation>
 <translation id="8466234950814670489">Tar архив</translation>
+<translation id="8466417995783206254">В този раздел се възпроизвежда видеоклип в режим „Картина в картината“.</translation>
 <translation id="8468750959626135884">Отключвайте устройството си <ph name="DEVICE_TYPE" /> с телефона си с Android.</translation>
 <translation id="8470028084415844044">Включете синхронизирането, за да получите паролите си на всичките си устройства.</translation>
 <translation id="8470513973197838199">Запазени пароли за <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Стартиране на тази приставка</translation>
 <translation id="8497219075884839166">Помощни програми за Windows</translation>
 <translation id="8498214519255567734">Подобряване на видимостта на екрана и улесняване на четенето при слаба светлина</translation>
+<translation id="8498395510292172881">Продължаване на четенето в Chrome</translation>
 <translation id="8503813439785031346">Потребителско име</translation>
 <translation id="850875081535031620">Няма намерен опасен софтуер</translation>
 <translation id="8509646642152301857">Изтеглянето на речника за проверка на правописа не бе успешно.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Опитайте отново</translation>
 <translation id="8725178340343806893">Любими/Отметки</translation>
 <translation id="8726206820263995930">Грешка при извличането на настройките за правилa от сървъра: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Без повторно показване</translation>
 <translation id="8727344521467137076">На компютъра ви има опасен софтуер. Chrome го премахва и възстановява настройките ви, така че браузърът отново да заработи нормално.</translation>
 <translation id="8730621377337864115">Готово</translation>
 <translation id="8732030010853991079">Използвайте това разширение, като кликнете върху съответната икона.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Отваряне на връзката в нов &amp;раздел</translation>
 <translation id="9030515284705930323">Организацията ви не е активирала Google Play Магазин за профила ви. Свържете се с администратора си за повече информация.</translation>
 <translation id="9033857511263905942">&amp;Поставяне</translation>
+<translation id="9034924485347205037">Файлове за Linux</translation>
 <translation id="9035012421917565900">Елементите не могат да бъдат върнати в/ъв „<ph name="DESTINATION_NAME" />“, така че няма да можете да отмените това действие.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Показване на оригинала</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Сканира се за устройства с Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – установена е връзка с устройство с Bluetooth</translation>
 <translation id="9177499212658576372">Понастоящем сте свързани с <ph name="NETWORK_TYPE" /> мрежа.</translation>
+<translation id="9179734824669616955">Настройване на Linux (бета) на устройството ви <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Това може да отнеме няколко минути. Контейнерът за Linux стартира.</translation>
 <translation id="9180380851667544951">Сайтът може да споделя екрана ви</translation>
 <translation id="9188441292293901223">Моля, актуализирайте телефона си до по-нова версия на Android, за да отключите този <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index f35e1cc..b370cd1a 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -221,7 +221,7 @@
 <translation id="131461803491198646">হোম নেটওয়ার্ক, রোমিং নয়</translation>
 <translation id="1316136264406804862">সার্চ করা হচ্ছে...</translation>
 <translation id="1316495628809031177">সিঙ্ক থামানো হয়েছে</translation>
-<translation id="1319979322914001937">Chrome ওয়েব দোকান থেকে এক্সটেনশানগুলির একটি ফিল্টার করা তালিকা দেখায় এমন একটি অ্যাপ্লিকেশান। তালিকার এক্সটেনশানগুলি অ্যাপ্লিকেশানটি থেকে সরাসরি ইনস্টল করা যাবে।</translation>
+<translation id="1319979322914001937">Chrome ওয়েব স্টোর থেকে এক্সটেনশ একটি ফিল্টার করা তালিকা দেখায় এমন একটি অ্যাপ। তালিকার এক্সটেনশনগুলি অ্যাপটি থেকে সরাসরি ইনস্টল করা যাবে।</translation>
 <translation id="1326317727527857210">আপনার অন্য ডিভাইসগুলি থেকে আপনার ট্যাবগুলি পেতে, Chrome এ প্রবেশ করুন।</translation>
 <translation id="1327074568633507428">Google ক্লাউড মুদ্রণে থাকা প্রিন্টার</translation>
 <translation id="1327977588028644528">গেটওয়ে</translation>
@@ -562,7 +562,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out</translation>
 <translation id="1830550083491357902">প্রবেশ করেননি</translation>
 <translation id="1832511806131704864">ফোন পরিবর্তন আপডেট হয়েছে</translation>
-<translation id="1832685970989658809">আপনার অ্যাডমিনিস্ট্রেটর সেভ করা পেমেন্টের পদ্ধতি বন্ধ করে রেখেছে</translation>
 <translation id="1834503245783133039">ডাউনলোড হয়নি: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">সার্চ সাফ করুন</translation>
 <translation id="1838709767668011582">Google সাইট</translation>
@@ -752,7 +751,7 @@
 <translation id="214169863967063661">চেহারা সেটিংস খুলুন</translation>
 <translation id="2142328300403846845">এ হিসেবে লিঙ্ক খুলুন</translation>
 <translation id="214353449635805613">স্ক্রীনশটের  অঞ্চল</translation>
-<translation id="2143765403545170146">পূর্ণ স্ক্রীনে টুল দণ্ড সবসময় দেখান</translation>
+<translation id="2143765403545170146">ফুল-স্ক্রিনে টুলবার দেখানোর অনুমতি দিন</translation>
 <translation id="2143778271340628265">ম্যানুয়াল প্রক্সি কনফিগারেশন</translation>
 <translation id="2144536955299248197">শংসাপত্র দর্শনকারী: <ph name="CERTIFICATE_NAME" /></translation>
 <translation id="2148219725039824548">মাউন্টিং শেয়ারে সমস্যা। নেটওয়ার্কে নির্দিষ্ট শেয়ারটি পাওয়া যায়নি।</translation>
@@ -870,7 +869,7 @@
 <translation id="2318817390901984578">Android অ্যাপ ব্যবহার করতে, আপনার <ph name="DEVICE_TYPE" /> চার্জ ও আপডেট করতে।</translation>
 <translation id="2318923050469484167">বর্তমান ছদ্মবেশী সেশন (<ph name="EMBEDDING" />)</translation>
 <translation id="2322193970951063277">শিরোলেখ এবং পাদলেখ</translation>
-<translation id="2325650632570794183">এই ফাইল প্রকারটি সমর্থিত নয়৷ এই ধরণের ফাইল খুলতে পারে এমন অ্যাপ্লিকেশন খুঁজতে দয়া করে Chrome ওয়েব দোকান দেখুন৷</translation>
+<translation id="2325650632570794183">এই ফাইলের প্রকারটি সমর্থিত নয়৷ এই ধরনের ফাইল খুলতে পারে এমন অ্যাপ খুঁজে পেতে Chrome ওয়েব স্টোরে যান।</translation>
 <translation id="2326931316514688470">&amp;অ্যাপ্লিকেশান আবার লোড করুন</translation>
 <translation id="2327492829706409234">অ্যাপ্লিকেশন সক্ষম করুন</translation>
 <translation id="2329597144923131178">আপনার সকল ডিভাইসে আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংস পেতে প্রবেশ করুন।</translation>
@@ -894,7 +893,7 @@
 <translation id="2353297238722298836">ক্যামেরা এবং মাইক্রোফোন ব্যবহারে অনুমতি দেওয়া হয়েছে</translation>
 <translation id="2356070529366658676">জিজ্ঞাসা করুন</translation>
 <translation id="2357949918965361754">আপনি আপনার টিভি বা অন্যান্য ডিভাইসে Chrome থেকে সামগ্রী প্রদর্শন করার জন্য এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন।</translation>
-<translation id="2359345697448000899">টুল মেনুতে এক্সটেনশান ক্লিক করে আপনার এক্সটেনশানগুলি পরিচালনা করুন৷</translation>
+<translation id="2359345697448000899">টুল মেনুতে এক্সটেনশনে ক্লিক করে আপনার এক্সটেনশনগুলি পরিচালনা করুন৷</translation>
 <translation id="2359808026110333948">অবিরত</translation>
 <translation id="236117173274098341">অপ্টিমাইজ করুন</translation>
 <translation id="236141728043665931">মাইক্রোফোনের অ্যাক্সেস সর্বদা অবরুদ্ধ রাখুন</translation>
@@ -935,7 +934,6 @@
 <translation id="2435457462613246316">পাসওয়ার্ড দেখান</translation>
 <translation id="2436186046335138073">সমস্ত <ph name="PROTOCOL" /> লিঙ্কগুলিকে খুলতে <ph name="HANDLER_HOSTNAME" />কে সক্ষম করবেন?</translation>
 <translation id="2436707352762155834">ন্যূনতম</translation>
-<translation id="2437139306601019091">ডেটা ব্যবহার পরিমাপ করা শেষ হয়েছে</translation>
 <translation id="2440604414813129000">উ&amp;ত্স দেখুন</translation>
 <translation id="2445081178310039857">এক্সটেনশন রুট ডিরেক্টরি প্রয়োজন৷</translation>
 <translation id="2445484935443597917">একটি নতুন প্রোফাইল তৈরি করুন</translation>
@@ -1088,7 +1086,7 @@
 <translation id="2660779039299703961">ইভেন্ট</translation>
 <translation id="266079277508604648">প্রিন্টারটি সংযুক্ত করা যায়নি। প্রিন্টারটি চালু আছে কিনা এবং ওয়াই-ফাই অথবা USB এর মাধ্যমে Chromebook এর সাথে সংযুক্ত আছে কিনা দেখে নিন।</translation>
 <translation id="2661146741306740526">১৬x৯</translation>
-<translation id="2662876636500006917">Chrome  ওয়েব বাজার</translation>
+<translation id="2662876636500006917">Chrome ওয়েব স্টোর</translation>
 <translation id="2663302507110284145">ভাষা</translation>
 <translation id="2665394472441560184">একটি নতুন শব্দ জুড়ুন</translation>
 <translation id="2665717534925640469">এই পৃষ্ঠাটি এখন পূর্ণ স্ক্রীণে আছে এবং আপনার মাউস কার্সার অক্ষম করা হয়েছে৷</translation>
@@ -1692,7 +1690,7 @@
 <translation id="3608454375274108141">F10</translation>
 <translation id="3608576286259426129">ব্যবহারকারীর ছবির পূর্বদৃশ্য</translation>
 <translation id="3609785682760573515">সিঙ্ক হচ্ছে...</translation>
-<translation id="3609895557594655134">Android ভিপিএন যোগ করুন...</translation>
+<translation id="3609895557594655134">Android VPN যোগ করুন...</translation>
 <translation id="361106536627977100">ফ্ল্যাশ ডেটা</translation>
 <translation id="3612673635130633812">&lt;a href="<ph name="URL" />"&gt;<ph name="EXTENSION" />&lt;/a&gt; এর দ্বারা ডাউনলোড হয়েছে</translation>
 <translation id="3613134908380545408"><ph name="FOLDER_NAME" /> দেখান</translation>
@@ -1805,10 +1803,10 @@
 <translation id="3768037234834996183">আপনার পছন্দগুলি সিঙ্ক হচ্ছে...</translation>
 <translation id="3771294271822695279">ভিডিও  ফাইলসমূহ</translation>
 <translation id="3775432569830822555">SSL সার্ভার শংসাপত্র</translation>
-<translation id="3776796446459804932">এই এক্সটেনশানটি Chrome ওয়েব দোকান এর নীতি লঙ্ঘন করে৷</translation>
+<translation id="3776796446459804932">এই এক্সটেনশনটি Chrome ওয়েব স্টোর এর নীতি লঙ্ঘন করে৷</translation>
 <translation id="3777806571986431400">এক্সটেনশান সক্ষম হয়েছে</translation>
 <translation id="3778152852029592020">ডাউনলোড বাতিল হয়েছে৷</translation>
-<translation id="3778740492972734840">&amp;বিকাশকারী টুল</translation>
+<translation id="3778740492972734840">&amp;ডেভেলপার টুল</translation>
 <translation id="3778868487658107119">প্রশ্ন জিজ্ঞাসা করুন। কিছু করতে বলুন। এটি আপনার নিজস্ব Google যেটি সবসময় আপনাকে সাহায্য করে।</translation>
 <translation id="3780536599611287598">আপনার কাছে '<ph name="FOLDER_NAME" />'-এ ফাইলগুলি সরানোর অনুমতি নেই।</translation>
 <translation id="378312418865624974">এই কম্পিউটারের জন্য একটি অনন্য শনাক্তকারী পড়ুন</translation>
@@ -1863,7 +1861,6 @@
 <translation id="3855441664322950881">প্যাক এক্সটেনশান</translation>
 <translation id="3855676282923585394">বুকমার্কস এবং সেটিংস আমদানি করুন...</translation>
 <translation id="3856800405688283469">সময় অঞ্চল বেছে নিন</translation>
-<translation id="3856921555429624101">ডেটা ব্যবহার পরিমাপ শেষ হয়েছে</translation>
 <translation id="3857228364945137633">আপনার ফোন আশেপাশে থাকলে Smart Lock ব্যবহার করে <ph name="DEVICE_TYPE" /> আনলক করতে পারবেন।</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: সিঙ্ক থামানো হয়েছে</translation>
@@ -1882,7 +1879,7 @@
 <translation id="3878840326289104869">তত্ত্বাবধানে থাকা ব্যবহারকারী তৈরি করা হচ্ছে</translation>
 <translation id="3879748587602334249">ডাউনলোড ম্যানেজার</translation>
 <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ব্যবহার করে নোট নেওয়া হচ্ছে</translation>
-<translation id="3892414795099177503">উম্মুক্ত VPN/L2TP যোগ করুন...</translation>
+<translation id="3892414795099177503">OpenVPN / L2TP যোগ করুন...</translation>
 <translation id="3893536212201235195">আপনার অ্যাক্সেসিবিলিটি সেটিংস পড়ুন ও পরিবর্তন করুন</translation>
 <translation id="3893630138897523026">ChromeVox (কথ্য প্রতিক্রিয়া)</translation>
 <translation id="3894427358181296146">ফোল্ডার যোগ করুন</translation>
@@ -2066,7 +2063,7 @@
 <translation id="4184885522552335684">কোনো প্রদর্শন সরাতে টেনে আনুন</translation>
 <translation id="4192273449750167573">পরবর্তী স্ক্রিনে আপনার সেটিংস পর্যালোচনা করুন</translation>
 <translation id="4193154014135846272">Google দস্তাবেজ</translation>
-<translation id="4194570336751258953">ট্যাপ-টু-ক্লিক সক্ষম করুন</translation>
+<translation id="4194570336751258953">ট্যাপ-টু-ক্লিক চালু করুন</translation>
 <translation id="4195643157523330669">নতুন ট্যাবে খুলুন</translation>
 <translation id="4195814663415092787">আপনি যেখানে ছেডেছেন সেখান থেকে চালিয়ে যান</translation>
 <translation id="4197674956721858839">জিপ নির্বাচন</translation>
@@ -2108,7 +2105,7 @@
 <translation id="4256316378292851214">এইরূপে ভিডিও সংর&amp;ক্ষণ করুন...</translation>
 <translation id="4258348331913189841">ফাইল সিস্টেম</translation>
 <translation id="4261901459838235729">Google উপস্থাপনা</translation>
-<translation id="4262366363486082931">সরঞ্জামদণ্ডে ফোকাস করুন</translation>
+<translation id="4262366363486082931">টুলবারে ফোকাস করুন</translation>
 <translation id="4263757076580287579">প্রিন্টের নিবন্ধন বাতিল করা হয়েছে৷</translation>
 <translation id="426564820080660648">আপডেটগুলি পরীক্ষা করার জন্য, দয়া করে Ethernet, ওয়াই-ফাই বা মোবাইল ডেটা ব্যবহার করুন৷</translation>
 <translation id="4268025649754414643">কী চিহ্নকরণ</translation>
@@ -2210,7 +2207,7 @@
 <translation id="4450974146388585462">নির্ণয় করুন</translation>
 <translation id="4453946976636652378"><ph name="SEARCH_ENGINE_NAME" />-এ সার্চ করুন অথবা ইউআরএল টাইপ করুন</translation>
 <translation id="4462159676511157176">কাস্টম নাম সার্ভার</translation>
-<translation id="4467100756425880649">Chrome ওয়েব দোকান গ্যালারি</translation>
+<translation id="4467100756425880649">Chrome ওয়েব স্টোর গ্যালারি</translation>
 <translation id="4467101674048705704"><ph name="FOLDER_NAME" /> ফোল্ডারটি বড় করুন</translation>
 <translation id="447252321002412580">Chrome-এর বৈশিষ্ট্য এবং পারফরম্যান্স উন্নত করে তুলতে সাহায্য করুন</translation>
 <translation id="4472575034687746823">শুরু করুন</translation>
@@ -2232,7 +2229,6 @@
 <translation id="4508051413094283164">সবগুলি ছদ্মবেশী উইন্ডোতে খুলুন</translation>
 <translation id="4508265954913339219">সক্রিয়করণ ব্যর্থ</translation>
 <translation id="4508765956121923607">উ&amp;ৎস দেখুন</translation>
-<translation id="4509823033118379431">ছবিটি বর্তমানে পাওয়া যাচ্ছে না। সংগ্রহগুলি দেখতে অনুগ্রহ করে আবার কানেক্ট করুন।</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> এর দ্বারা চালিত</translation>
 <translation id="4514542542275172126">তত্ত্বাবধানে থাকা ব্যবহারকারী সেট করুন</translation>
 <translation id="4514610446763173167">ভিডিও চালাতে বা থামানোর জন্য টগল করুন</translation>
@@ -2309,6 +2305,7 @@
 <translation id="4627442949885028695">অন্য ডিভাইস থেকে চালিয়ে যান</translation>
 <translation id="4628314759732363424">পরিবর্তন করুন...</translation>
 <translation id="4628757576491864469">ডিভাইস</translation>
+<translation id="4628948037717959914">ফটো</translation>
 <translation id="4630590996962964935">অবৈধ অক্ষর: $1</translation>
 <translation id="4631887759990505102">শিল্পী</translation>
 <translation id="4632483769545853758">ট্যাব সশব্দ করুন</translation>
@@ -2323,7 +2320,7 @@
 <translation id="4647697156028544508">দয়া করে "<ph name="DEVICE_NAME" />"-এর পিন লিখুন:</translation>
 <translation id="4648491805942548247">অপর্যাপ্ত অনুমতিগুলি</translation>
 <translation id="4648499713050786492">কোনো ব্যক্তি যোগ করার আগে দয়া করে আপনার প্রোফাইলটি আনলক করুন।</translation>
-<translation id="465499440663162826">Chrome ওয়েব দোকানে সংযোগ করতে পারেনি।</translation>
+<translation id="465499440663162826">Chrome ওয়েব স্টোর কানেক্ট করা যায়নি।</translation>
 <translation id="4656293982926141856">এই কম্পিউটার</translation>
 <translation id="4658312088164718891">Smart Lock চালু করতে পাসওয়ার্ড লিখুন। পরের বার, আপনার ফোন থেকে <ph name="DEVICE_TYPE" /> আনলক করতে পারবেন। সেটিংসে গিয়ে Smart Lock বন্ধ করুন।</translation>
 <translation id="4660476621274971848">"<ph name="EXPECTED_VERSION" />" ভার্সনটি হওয়া উচিত ছিল, কিন্তু ভার্সনটি হল "<ph name="NEW_ID" />"</translation>
@@ -2334,7 +2331,7 @@
 <translation id="4668721319092543482"><ph name="PLUGIN_NAME" /> সক্ষম করার জন্য ক্লিক করুন</translation>
 <translation id="4669606053856530811">এই আইটেমগুলি '<ph name="SOURCE_NAME" />' এর সদস্যদের সাথে শেয়ার না করলে তারা সেগুলি অ্যাক্সেস করতে পারবে না।</translation>
 <translation id="4672657274720418656">পৃষ্ঠা পাতন করুন</translation>
-<translation id="4673442866648850031">লেখনী সরানো হলে লেখনী টুল খুলুন</translation>
+<translation id="4673442866648850031">স্টাইলাস সরানো হলে স্টাইলাস টুল খুলুন</translation>
 <translation id="4677585247300749148"><ph name="URL" /> অ্যাক্সেসযোগ্যতা ইভেন্টে প্রতিক্রিয়া দিয়ে চায়</translation>
 <translation id="4677692029604506169">আপনার <ph name="DEVICE_TYPE" /> আনলক করার জন্য যে ফোন আপনি ব্যবহার করছেন সেটির নিরাপত্তার জন্য স্ক্রিন লক প্রয়োজন। সাধারণত, এটি একটি পিন, প্যাটার্ন, বা পাসওয়ার্ড। আগে থেকেই স্ক্রিন লক আছে? যাচাই করতে এবং চালিয়ে যেতে আবার দেখুন বেছে নিন।</translation>
 <translation id="4677772697204437347">GPU মেমোরি</translation>
@@ -2382,7 +2379,7 @@
 <translation id="4742746985488890273">শেল্ফে পিন করুন</translation>
 <translation id="4743260470722568160"><ph name="BEGIN_LINK" />অ্যাপ্লিকেশন কীভাবে আপডেট করতে হয় তা জানুন<ph name="END_LINK" /></translation>
 <translation id="4746971725921104503">দেখে মনে হচ্ছে আপনি ইতিমধ্যে এই নাম দিয়ে একটি ব্যবহারকারীকে পরিচালনা করছেন৷ আপনি কি  <ph name="LINK_START" /> <ph name="USER_DISPLAY_NAME" /> এই ডিভাইসে আমদানি করতে চান<ph name="LINK_END" />?</translation>
-<translation id="4748762018725435655">Chrome ওয়েব স্টোর থেকে এক্সটেনশানের প্রয়োজন</translation>
+<translation id="4748762018725435655">Chrome ওয়েব স্টোর থেকে এক্সটেনশন প্রয়োজন</translation>
 <translation id="4750394297954878236">প্রস্তাবনা</translation>
 <translation id="475088594373173692">প্রথম ব্যবহারকারী</translation>
 <translation id="4751476147751820511">মোশন বা হালকা সেন্সর</translation>
@@ -2456,7 +2453,7 @@
 <translation id="48704129375571883">অতিরিক্ত বৈশিষ্ট্যগুলি যোগ করুন</translation>
 <translation id="4870903493621965035">কোনো ডিভাইস যুক্ত করা নেই</translation>
 <translation id="4871210892959306034">KB</translation>
-<translation id="4871308555310586478">Chrome ওয়েব দোকান থেকে নয়৷</translation>
+<translation id="4871308555310586478">Chrome ওয়েব স্টোর থেকে নয়।</translation>
 <translation id="4871370605780490696">বুকমার্ক যোগ করুন</translation>
 <translation id="4873312501243535625">মিডিয়া ফাইল পরীক্ষাকারী</translation>
 <translation id="4876273079589074638">এই ক্র্যাশ বা সমস্যাটির বিষয়ে সার্চ করে সেটি ঠিক করতে আমাদের ইঞ্জিনিয়ারদের সাহায্য করুন। কোনও বিবরণ যত ছোটই হোক না কেন সেটি গুরুত্বপূর্ণ!</translation>
@@ -2492,7 +2489,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" />টির ব্যাকআপ নিতে প্রস্তুত</translation>
 <translation id="4907161631261076876">এই ফাইলটি সাধারণভাবে ডাউনলোড করা হয় না এবং এটি বিপজ্জনক হতে পারে।</translation>
 <translation id="4907306957610201395">অনুমতির শ্রেণীবিভাগ</translation>
-<translation id="4907824805858067479">কার্ড সেভ করার বিকল্পটি প্রশাসক অক্ষম করে রেখেছেন</translation>
 <translation id="4908811072292128752">একইসাথে দুটি সাইট ব্রাউজ করতে নতুন ট্যাব খুলুন</translation>
 <translation id="4909038193460299775">এই অ্যাকাউন্টটি <ph name="DOMAIN" /> দ্বারা পরিচালিত হওয়ার কারণে আপনার বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং অন্যান্য সেটিংস এই ডিভাইস থেকে সাফ করা হবে। অবশ্য, আপনার ডেটা আপনার Google অ্যাকাউন্টে সঞ্চিত থাকবে এবং <ph name="BEGIN_LINK" />Google ড্যাশবোর্ড<ph name="END_LINK" /> থেকে তা পরিচালনা করা যাবে।</translation>
 <translation id="4909359680501173791">আপনি নথিভুক্ত করেছেন</translation>
@@ -2501,7 +2497,7 @@
 <translation id="4917385247580444890">জোরালো</translation>
 <translation id="4918021164741308375">"<ph name="EXTENSION_NAME" />" এক্সটেনশন দ্বারা <ph name="ORIGIN" /> যোগাযোগ করতে চায়</translation>
 <translation id="4918086044614829423">স্বীকার</translation>
-<translation id="4920350943031252905">Chromebook-এ Linux-এর টুল, এডিটর এবং IDE চালান।</translation>
+<translation id="4920350943031252905">Chromebook-এ Linux টুল, এডিটর এবং IDE চালান।</translation>
 <translation id="4920887663447894854">এই পৃষ্ঠাতে আপনার লোকেশন নির্ধারণ করার জন্য নিম্নলিখিত সাইটগুলি অবরুদ্ধ করা হয়েছে:</translation>
 <translation id="492299503953721473">Android অ্যাপ্লিকেশানগুলি সরান</translation>
 <translation id="4923279099980110923">হ্যাঁ, আমি সাহায্য করতে চাই</translation>
@@ -2617,7 +2613,7 @@
 <translation id="5108967062857032718">সেটিংস - Android অ্যাপ্লিকেশানগুলি সরান</translation>
 <translation id="5109044022078737958">মিয়া</translation>
 <translation id="5111692334209731439">&amp;বুকমার্ক পরিচালক</translation>
-<translation id="5112577000029535889">&amp;বিকাশকারী টুল</translation>
+<translation id="5112577000029535889">&amp;ডেভেলপার টুল</translation>
 <translation id="5113739826273394829">আপনি এই প্রতিকৃতিতে ক্লিক করুন, আপনি এই <ph name="DEVICE_TYPE" />টি ম্যানুয়ালি লক করবেন৷ পরবর্তী সময়ে, আপনাকে প্রবেশ করার জন্য আপনার পাসওয়ার্ড টাইপ করতে হবে৷</translation>
 <translation id="5115309401544567011">অনুগ্রহ করে আপনার <ph name="DEVICE_TYPE" /> এ চার্জ দিন।</translation>
 <translation id="5116628073786783676">এইরূপে অডিও সংর&amp;ক্ষণ করুন...</translation>
@@ -2712,7 +2708,7 @@
 <translation id="52550593576409946">Kiosk অ্যাপ্লিকেশান লঞ্চ করা যায়নি৷</translation>
 <translation id="5256861893479663409">সমস্ত সাইটে</translation>
 <translation id="5260508466980570042">দুঃখিত, আপনার ইমেল বা পাসওয়ার্ড যাচাই হয়নি৷ দয়া করে আবার চেষ্টা করুন৷</translation>
-<translation id="5261683757250193089">ওয়েব দোকানে খুলুন</translation>
+<translation id="5261683757250193089">ওয়েব স্টোরে খুলুন</translation>
 <translation id="5262311848634918433"><ph name="MARKUP_1" />যে কোনো জায়গা থেকে এমনকি অফলাইনে থাকাকালীনও, ফাইলগুলি অ্যাক্সেস করুন।<ph name="MARKUP_2" />
     Google ড্রাইভে থাকা ফাইলগুলি আপ-টু-ডেট আছে এবং সেগুলি যেকোনো ডিভাইস থেকে উপলব্ধ।<ph name="MARKUP_3" />
     <ph name="MARKUP_4" />আপনার ফাইলগুলিকে নিরাপদ রাখুন।<ph name="MARKUP_5" />
@@ -2836,7 +2832,7 @@
 <translation id="5428850089342283580"><ph name="ACCNAME_APP" /> (আপডেট উপলব্ধ আছে)</translation>
 <translation id="5430931332414098647">ঝটপট টিথারিং</translation>
 <translation id="5431318178759467895">রঙ</translation>
-<translation id="5431825016875453137">VPN / L2TP খুলুন</translation>
+<translation id="5431825016875453137">OpenVPN / L2TP</translation>
 <translation id="5432996274932278848">আপনার ডিভাইস, অ্যাপ এবং ওয়েব সার্চ করুন। আপনার অ্যাপগুলি নেভিগেট করতে তীর কী ব্যবহার করুন।</translation>
 <translation id="543381445212956829">WiMAX সক্ষম করুন</translation>
 <translation id="5434065355175441495">PKCS #1 RSA এনক্রিপশান</translation>
@@ -3206,7 +3202,6 @@
 <translation id="5990386583461751448">অনূদিত</translation>
 <translation id="5991049340509704927">বিবর্ধিত করুন</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনটি সরিয়ে দিতে বলুন।}one{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}other{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}}</translation>
-<translation id="5993332328670040093">আপনার ডেটা ব্যবহার আর পরিমাপ করা হবে না।</translation>
 <translation id="6002458620803359783">পছন্দসই ভয়েস</translation>
 <translation id="6005695835120147974">মিডিয়া রাউটার</translation>
 <translation id="6006484371116297560">ক্লাসিক</translation>
@@ -3398,7 +3393,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> সাধারণভাবে ডাউনলোড করা হয় না এবং এটি বিপজ্জনক হতে পারে।</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{আপনার নেটওয়ার্কে নতুন প্রিন্টারটি}one{আপনার নেটওয়ার্কে নতুন প্রিন্টারগুলি}other{আপনার নেটওয়ার্কে নতুন প্রিন্টারগুলি}}</translation>
-<translation id="6286684120317096255">ডেটা ব্যবহার পরিমাপ করা হচ্ছে</translation>
 <translation id="6286708577777130801">সংরক্ষিত পাসওয়ার্ডের বিশদ বিবরণ</translation>
 <translation id="6287852322318138013">এই ফাইলটি খোলার জন্য একটি অ্যাপ্লিকেশান বেছে নিন</translation>
 <translation id="6289452883081499048">আপনার জন্য তৈরি Google পরিষেবা যেমন Play</translation>
@@ -3486,7 +3480,7 @@
 <translation id="6419288379019356534">এই ডিভাইসটি <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> দ্বারা পরিচালিত হয়।
     <ph name="LINE_BREAK" />
     আপনার <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> অ্যাকাউন্টে প্রবেশ করুন চালিয়ে যেতে দয়া করে "পরবর্তী" ক্লিক করুন।</translation>
-<translation id="6419546358665792306">প্যাকমুক্ত না করা অবস্থায় লোড করুন</translation>
+<translation id="6419546358665792306">আনপ্যাক করা অবস্থায় লোড করুন</translation>
 <translation id="642282551015776456">ফাইল বা ফোল্ডারের নাম হিসাবে নামটি ব্যবহৃত নাও হতে পারে</translation>
 <translation id="642469772702851743">এই ডিভাইসের (SN: <ph name="SERIAL_NUMBER" />) মালিক এটি লক করেছেন।</translation>
 <translation id="6426200009596957090">ChromeVox এর সেটিংস খুলুন</translation>
@@ -3495,7 +3489,7 @@
 <translation id="6431217872648827691">আপনার Google পাসওয়ার্ডের মাধ্যমে <ph name="TIME" /> তারিখ অনুযায়ী সমস্ত ডেটা এনক্রিপটেড হয়েছে</translation>
 <translation id="6431347207794742960">এই কম্পিউটারে সকল ব্যবহারকারীর জন্য <ph name="PRODUCT_NAME" /> স্বয়ংক্রিয় আপডেটগুলো সেটআপ করবে।</translation>
 <translation id="6434309073475700221">বাতিল</translation>
-<translation id="6436164536244065364">ওয়েব দোকানের মধ্যে দেখুন</translation>
+<translation id="6436164536244065364">ওয়েব স্টোরে দেখুন</translation>
 <translation id="6438992844451964465"><ph name="WINDOW_TITLE" /> - অডিও বাজছে</translation>
 <translation id="6442187272350399447">দুর্দান্ত</translation>
 <translation id="6442697326824312960">আনপিন ট্যাব</translation>
@@ -3718,7 +3712,7 @@
 <translation id="6782111308708962316">কুকি ডেটা সংরক্ষণ করা এবং পড়া থেকে তৃতীয় পক্ষের ওয়েবসাইটগুলিকে আটকান</translation>
 <translation id="6786747875388722282">এক্সটেনশানসমূহ</translation>
 <translation id="6787839852456839824">কীবোর্ড শর্টকাটগুলি</translation>
-<translation id="6788210894632713004">এক্সটেনশান প্যাকমুক্ত করুন</translation>
+<translation id="6788210894632713004">এক্সটেনশন আনপ্যাক করা হয়েছে</translation>
 <translation id="6790428901817661496">চালু করুন</translation>
 <translation id="6790497603648687708"><ph name="EXTENSION_NAME" /> কে দূরবর্তী লোকেশন থেকে যোগ করা হয়েছিল</translation>
 <translation id="6790820461102226165">ব্যক্তিকে যোগ করুন...</translation>
@@ -4073,7 +4067,7 @@
 <translation id="7348093485538360975">অন-স্ক্রীণ কীবোর্ড</translation>
 <translation id="7352651011704765696">কিছু সমস্যা হয়েছে</translation>
 <translation id="735361434055555355">Linux ইনস্টল করা হচ্ছে...</translation>
-<translation id="735745346212279324">VPN সংযোগ বিচ্ছিন্ন করা হয়েছে</translation>
+<translation id="735745346212279324">VPN ডিসকানেক্ট করা হয়েছে</translation>
 <translation id="7359588939039777303">বিজ্ঞাপন ব্লক করা হয়েছে।</translation>
 <translation id="7360183604634508679">Bookmarks মেনু</translation>
 <translation id="7360233684753165754"><ph name="PRINTER_NAME" /> এ <ph name="PAGE_NUMBER" />টি পাতা</translation>
@@ -4106,7 +4100,6 @@
 <translation id="7400839060291901923">আপনার <ph name="PHONE_NAME" /> এ সংযোগ সেট আপ করুন</translation>
 <translation id="740624631517654988">পপ-আপ  অবরুদ্ধ</translation>
 <translation id="7407430846095439694">আমদানি করে আটকান</translation>
-<translation id="7409233648990234464">আবার লঞ্চ করুন এবং পাওয়ারওয়াশ করুন</translation>
 <translation id="7409836189476010449">Flash চালান</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> আপনার ক্যামেরা এবং মাইক্রোফোন অ্যাক্সেস  করতে চায় কিনা জিজ্ঞাসা করুন</translation>
 <translation id="741204030948306876">হ্যাঁ, আমি রাজি</translation>
@@ -4363,25 +4356,24 @@
     <ph name="LINE_BREAK2" />
     কিছু ফটো বেছে নেওয়ার চেষ্টা করুন।</translation>
 <translation id="782590969421016895">বর্তমান পৃষ্ঠাগুলি ব্যবহার করুন</translation>
-<translation id="7826790948326204519"><ph name="BEGIN_H3" />ডিবাগিং বৈশিষ্ট্য<ph name="END_H3" />
+<translation id="7826790948326204519"><ph name="BEGIN_H3" />ডিবাগিংয়ের ফিচারগুলি<ph name="END_H3" />
     <ph name="BR" />
-    আপনি Chrome OS ডিভাইসে কাস্টম কোড ইনস্টল এবং পরীক্ষা করার জন্য ডিবাগিং বৈশিষ্ট্যগুলি চালু করতে পারেন।  এতে আপনি:<ph name="BR" />
+    আপনার ডিভাইসে কাস্টম কোড ইনস্টল এবং পরীক্ষা করতে, আপনি আপনার Chrome OS ডিভাইসে ডিবাগিংয়ের ফিচারগুলি চালু করতে পারেন। এটি আপনাকে নিম্নলিখিতগুলি করতে দেবে:<ph name="BR" />
     <ph name="BEGIN_LIST" />
-      <ph name="LIST_ITEM" />OS ফাইলে পরিবর্তন করার জন্য rootfs যাচাইকরণের ধাপটি সরিয়ে দিতে পারেন
-      <ph name="LIST_ITEM" /><ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" />-এর মতো টুলের মাধ্যমে ডিভাইস অ্যাক্সেস করার জন্য স্ট্যান্ডার্ড টেস্ট কী ব্যবহার করে ডিভাইসে SSH অ্যাক্সেস চালু করতে পারেন
-      <ph name="LIST_ITEM" />ইউএসবি ড্রাইভ থেকে OS ইমেজ ইনস্টল করার জন্য ইউএসবি থেকে বুট করার সুবিধা চালু করতে পারেন
-      <ph name="LIST_ITEM" />ডিভাইসে ম্যানুয়ালি SSH করার জন্য ডেভেলপার এবং সিস্টেম রুট লগ-ইন পাসওয়ার্ড দুটি কাস্টম মানে সেট করতে পারেন
+      <ph name="LIST_ITEM" />যাচাইকরণ সরিয়ে দিয়ে আপনাকে OS ফাইলগুলি পরিবর্তন করতে দেবে
+      <ph name="LIST_ITEM" />যাতে আপনি <ph name="BEGIN_CODE" />'cros flash'<ph name="END_CODE" />-এর মত টুলগুলি ব্যবহার করে ডিভাইস অ্যাক্সেস করতে পারেন সেজন্য স্ট্যান্ডার্ড পরীক্ষার কীগুলি ব্যবহার করে ডিভাইসে SSH অ্যাক্সেস চালু করতে দেবে
+      <ph name="LIST_ITEM" />যাতে আপনি ইউএসবি ড্রাইভ থেকে OS-এর একটি ইমেজ ইনস্টল করতে পারেন সেজন্য ইউএসবির সাহায্যে বুট করা চালু করতে দেবে
+      <ph name="LIST_ITEM" />যাতে আপনি ম্যানুয়ালি ডিভাইসে SSH করতে পারেন সেজন্য ডেভ এবং সিস্টেমের রুট লগ-ইন পাসওয়ার্ড কাস্টম মানে সেট করতে দেবে
     <ph name="END_LIST" />
     <ph name="BR" />
-    ডিবাগিং চালু করা হলে এর বেশিরভাগ বৈশিষ্ট্য পাওয়ারওয়াশ করা অথবা এন্টারপ্রাইজ দ্বারা পরিচালিত ডিভাইস থেকে ডেটা মুছে দেওয়ার পরেও চালু রয়ে যাবে।  সমস্ত ডিবাগিং বৈশিষ্ট্য বন্ধ করার জন্য Chrome OS ফিরিয়ে আনার সম্পূর্ণ প্রক্রিয়াটি অনুসরণ করুন
-(https://support.google.com/chromebook/answer/1080595)।
+   এটি চালু করলে, কোনও এন্টারপ্রাইজ পরিচালিত ডিভাইসে পাওয়ারওয়াশ বা ডেটা ওয়াইপ করার পরেও প্রায় সমস্ত ডিবাগিংয়ের ফিচারগুলি চালু থাকবে৷  সমস্ত ডিবাগিংয়ের ফিচারগুলি সম্পূর্ণরূপে বন্ধ করতে, Chrome OS পুনরুদ্ধার করার প্রক্রিয়াটি সম্পূর্ণ করুন (https://support.google.com/chromebook/answer/1080595).
     <ph name="BR" />
     <ph name="BR" />
-    ডিবাগিং বৈশিষ্টের বিষয়ে আরও তথ্যের জন্য এখানে যান:<ph name="BR" />
+    ডিবাগিংয়ের ফিচারগুলি সম্পর্কে আরও তথ্যের জন্য এটি দেখুন:<ph name="BR" />
     https://www.chromium.org/chromium-os/how-tos-and-troubleshooting/debugging-features
     <ph name="BR" />
     <ph name="BR" />
-    <ph name="BEGIN_BOLD" />দ্রষ্টব্য:<ph name="END_BOLD" />  এটি করলে সিস্টেম রিবুট করা হবে।</translation>
+    <ph name="BEGIN_BOLD" />দ্রষ্টব্য:<ph name="END_BOLD" />  প্রক্রিয়াটির সময় সিস্টেমটি রিবুট হবে৷</translation>
 <translation id="7829298379596169484">অডিও ইনপুট অ্যাক্সেস করা হচ্ছে</translation>
 <translation id="7831491651892296503">নেটওয়ার্ক কনফিগার করার সময় ত্রুটি</translation>
 <translation id="7831754656372780761"><ph name="TAB_TITLE" /> <ph name="EMOJI_MUTING" /></translation>
@@ -4628,7 +4620,7 @@
 <translation id="8188120771410500975">&amp;পাঠ্য ক্ষেত্রগুলির বানান চেক করুন</translation>
 <translation id="8190193592390505034"><ph name="PROVIDER_NAME" />-তে সংযুক্ত হচ্ছে</translation>
 <translation id="8191230140820435481">আপনার অ্যাপ্লিকেশন, এক্সটেনশন, এবং থিম পরিচালনা করুন</translation>
-<translation id="8191453843330043793">V8 প্রক্সী সমাধানকারী</translation>
+<translation id="8191453843330043793">V8 প্রক্সি সমাধানকারী</translation>
 <translation id="8193175696669055101">ডিভাইস মডেল</translation>
 <translation id="8195027750202970175">ডিস্কের মাপ</translation>
 <translation id="8199300056570174101">নেটওয়ার্ক (পরিষেবা) এবং ডিভাইসের বৈশিষ্ট্য</translation>
@@ -4677,7 +4669,7 @@
 <translation id="8270242299912238708">PDF দস্তাবেজগুলি</translation>
 <translation id="827097179112817503">হোম বোতাম দেখান</translation>
 <translation id="8271246892936492311">{COUNT,plural, =1{১টি বুকমার্ক মোছা হয়েছে}one{#টি বুকমার্ক মোছা হয়েছে}other{#টি বুকমার্ক মোছা হয়েছে}}</translation>
-<translation id="8272443605911821513">"আরও সরঞ্জামগুলির মেনুতে" এক্সটেনশানগুলিতে ক্লিক করে আপনার এক্সটেনশানগুলি পরিচালনা করুন৷</translation>
+<translation id="8272443605911821513">"আরও টুলগুলির মেনুতে" এক্সটেনশনগুলি ক্লিক করে আপনার এক্সটেনশনগুলি পরিচালনা করুন৷</translation>
 <translation id="8274332263553132018">ফাইল কাস্ট করুন</translation>
 <translation id="8274924778568117936">আপডেটটি সম্পূর্ণ না হওয়া পর্যন্ত <ph name="DEVICE_TYPE" />টি বন্ধ করবেন না। ইনস্টলেশন হয়ে গেলে <ph name="DEVICE_TYPE" />টি নিজে থেকেই রিস্টার্ট হবে।</translation>
 <translation id="8275038454117074363">আমদানি</translation>
@@ -4956,7 +4948,6 @@
 <translation id="8725066075913043281">আবার চেষ্টা করুন</translation>
 <translation id="8725178340343806893">পছন্দসই/বুকমার্কস</translation>
 <translation id="8726206820263995930">সার্ভার থেকে নীতি সেটিংস নিয়ে আসার সময়ে ত্রুটি: <ph name="CLIENT_ERROR" />৷</translation>
-<translation id="8727142376512517020">এটিকে আবার দেখাবেন না</translation>
 <translation id="8727344521467137076">আপনার কম্পিউটারে ক্ষতিকর সফ্টওয়্যার আছে। Chrome এটিকে সরিয়ে দিচ্ছে এবং আপনার সেটিংস রিস্টোর করতে পারে যাতে আপনার ব্রাউজার আবার স্বাভাবিকভাবে কাজ করে।</translation>
 <translation id="8730621377337864115">হয়ে গেছে</translation>
 <translation id="8732030010853991079">এই আইকনের উপর ক্লিক করে এই এক্সটেনশনটি ব্যবহার করুন৷</translation>
@@ -5010,7 +5001,7 @@
 <translation id="8804398419035066391">সহযোগী ওয়েবসাইটগুলির মাধ্যমে যোগাযোগ করুন</translation>
 <translation id="8805140816472474147">সিঙ্ক করার জন্য সিঙ্ক সেটিংস নিশ্চিত করুন।</translation>
 <translation id="8807632654848257479">স্থায়ী</translation>
-<translation id="8808478386290700967">ওয়েব দোকান</translation>
+<translation id="8808478386290700967">ওয়েব স্টোর</translation>
 <translation id="8808686172382650546">বিড়াল</translation>
 <translation id="8813698869395535039"><ph name="USERNAME" /> এ সাইন ইন করা যাচ্ছে না</translation>
 <translation id="8813811964357448561">কাগজের পত্রক</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index ecce6fd..d5689d3 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Demana permís abans d'accedir</translation>
 <translation id="1434696352799406980">Aquesta funció restablirà la pàgina d'inici, la pàgina Pestanya nova, el motor de cerca i les pestanyes fixades que tingueu configurades. També desactivarà totes les extensions i esborrarà les dades temporals, com ara les galetes. Les adreces d'interès, l'historial i les contrasenyes desades no s'esborraran.</translation>
 <translation id="1434886155212424586">La pàgina d'inici és la pàgina Pestanya nova</translation>
+<translation id="1436671784520050284">Continua amb la configuració</translation>
 <translation id="1436784010935106834">Eliminat</translation>
 <translation id="1438632560381091872">Activa el so de les pestanyes</translation>
 <translation id="1442392616396121389">Prefix d'encaminament</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Tall de pizza</translation>
 <translation id="1467432559032391204">A l'esquerra</translation>
 <translation id="1468571364034902819">Aquest perfil no es pot utilitzar</translation>
+<translation id="1470533772306424441">T'instal·larem aquestes aplicacions. Pots trobar-ne més per al teu dispositiu a Play Store.</translation>
 <translation id="1470811252759861213">Per accedir a les extensions des de tots els ordinadors, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" no s'ha penjat. No hi ha prou espai lliure al vostre compte de Google Drive.</translation>
 <translation id="1475502736924165259">Tens certificats arxivats que no s'ajusten a cap de les altres categories</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;Redueix</translation>
 <translation id="1830550083491357902">Sessió no iniciada</translation>
 <translation id="1832511806131704864">Canvi de telèfon actualitzat</translation>
-<translation id="1832685970989658809">L'administrador ha desactivat les formes de pagament desades</translation>
 <translation id="1834503245783133039">Error en la baixada: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Esborra la cerca</translation>
 <translation id="1838709767668011582">Lloc de Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuració de confiança</translation>
 <translation id="2195729137168608510">Protecció del correu electrònic</translation>
+<translation id="2199298570273670671">Error</translation>
 <translation id="2200356397587687044">Chrome necessita permís per continuar</translation>
 <translation id="220138918934036434">Amaga el botó</translation>
 <translation id="2202898655984161076">S'ha produït un problema en enumerar les impressores. Pot ser que algunes impressores no s'hagin registrat correctament a <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -821,7 +823,7 @@
 <translation id="2232379019872353004">Envia a Google algunes dades del sistema i contingut de les pàgines</translation>
 <translation id="2232876851878324699">El fitxer contenia un certificat que no s'ha importat:</translation>
 <translation id="2233502537820838181">&amp;Més informació</translation>
-<translation id="2234876718134438132">Sincronitz. i serveis de Google</translation>
+<translation id="2234876718134438132">Sincronització i serveis de Google</translation>
 <translation id="2238379619048995541">Dades de l'estat de freqüència</translation>
 <translation id="2239921694246509981">Afegeix una persona supervisada</translation>
 <translation id="2241053333139545397">Llegir i modificar les dades d'una sèrie de llocs web</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Mostra la contrasenya</translation>
 <translation id="2436186046335138073">Voleu permetre que <ph name="HANDLER_HOSTNAME" /> obri tots els enllaços de <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínim</translation>
-<translation id="2437139306601019091">El recompte de l'ús de dades ha finalitzat</translation>
 <translation id="2440604414813129000">Visualitza l'&amp;origen</translation>
 <translation id="2445081178310039857">El directori arrel de l'extensió és obligatori.</translation>
 <translation id="2445484935443597917">Crea un perfil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> vol verificar la teva identitat</translation>
 <translation id="2448312741937722512">Tipus</translation>
 <translation id="2450223707519584812">No podreu afegir usuaris perquè falten les claus de l'API de Google. Consulteu <ph name="DETAILS_URL" /> per obtenir-ne més informació.</translation>
 <translation id="2450310832094867474">Vols desactivar la sincronització i tancar la sessió?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">El fitxer ja existeix</translation>
 <translation id="2453860139492968684">Finalitza</translation>
 <translation id="2454247629720664989">Paraula clau</translation>
+<translation id="245661998428026871">El vídeo en mode de pantalla en pantalla deixarà de reproduir-se.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> vol copiar fitxers desats a <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Identificador de clau d'entitat emissora de certificats</translation>
 <translation id="2462752602710430187">S'ha afegit <ph name="PRINTER_NAME" /></translation>
@@ -1361,6 +1364,7 @@
 <translation id="304826556400666995">Activa el so de les pestanyes</translation>
 <translation id="3053013834507634016">Ús de claus de certificat</translation>
 <translation id="3057861065630527966">Crea una còpia de seguretat de les fotos i dels vídeos</translation>
+<translation id="3059313675706898490">Missatges Android</translation>
 <translation id="3060379269883947824">Activa Escolta la selecció</translation>
 <translation id="3061707000357573562">Servei de pedaç</translation>
 <translation id="3064410671692449875">Dades insuficients</translation>
@@ -1409,6 +1413,7 @@
 <translation id="313205617302240621">Has oblidat la contrasenya?</translation>
 <translation id="3132996321662585180">Actualitza diàriament</translation>
 <translation id="3135204511829026971">Gira la pantalla</translation>
+<translation id="313638818480447860">Hem trobat <ph name="NUMBER_OF_APPS" /> aplicacions connectades al teu compte que estan optimitzades per a aquest dispositiu.</translation>
 <translation id="313963229645891001">S'està baixant, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar groc predeterminat</translation>
 <translation id="3140353188828248647">Mou el focus a la barra d'adreces</translation>
@@ -1439,6 +1444,7 @@
 <translation id="3182749001423093222">Corrector ortogràfic</translation>
 <translation id="3183139917765991655">Importador de perfils</translation>
 <translation id="3184560914950696195">No es pot desar a $1. Les imatges modificades es desaran a la carpeta Baixades.</translation>
+<translation id="3188257591659621405">Els meus fitxers</translation>
 <translation id="3188465121994729530">Mitjana variable</translation>
 <translation id="3190558889382726167">S'ha desat la contrasenya</translation>
 <translation id="3192947282887913208">Fitxers d'àudio</translation>
@@ -1525,6 +1531,7 @@
 <translation id="3326821416087822643">S'està comprimint <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informació de l'aplicació</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" />: s'està reproduint el vídeo en mode de pantalla en pantalla</translation>
 <translation id="3335337277364016868">Any de gravació</translation>
 <translation id="3335947283844343239">Torna a obrir la pestanya tancada</translation>
 <translation id="3336664756920573711">Desbloqueja <ph name="DEVICE_TYPE" /> amb el telèfon Android</translation>
@@ -1544,6 +1551,7 @@
 <translation id="3360297538363969800">Hi ha hagut un error en imprimir. Comproveu la impressora i torneu-ho a provar.</translation>
 <translation id="3364721542077212959">Eines del llapis òptic</translation>
 <translation id="3365598184818502391">Utilitza Ctrl o Alt</translation>
+<translation id="3367047597842238025">Configura <ph name="DEVICE_TYPE" /> al teu gust i descobreix les increïbles funcions que tens al teu abast.</translation>
 <translation id="3368922792935385530">Connectat</translation>
 <translation id="3369624026883419694">Resolent l'amfitrió...</translation>
 <translation id="337286756654493126">Llegir carpetes que s'obrin a l'aplicació</translation>
@@ -1557,6 +1565,7 @@
 <translation id="3389312115541230716">Fes clic a la icona <ph name="SMALL_PRODUCT_LOGO" /> de la barra de tasques</translation>
 <translation id="3391716558283801616">Pestanya 7</translation>
 <translation id="3396331542604645348">La impressora seleccionada no està disponible o no s'ha instal·lat correctament. Comproveu la impressora o proveu de seleccionar-ne una altra.</translation>
+<translation id="3396800784455899911">En fer clic al botó Accepta i continua, acceptes el processament descrit anteriorment per a aquests serveis de Google.</translation>
 <translation id="3399432415385675819">Les notificacions es desactivaran</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">No hi ha cap contrasenya desada per a aquest lloc web</translation>
@@ -1785,10 +1794,13 @@
 <translation id="3726463242007121105">Aquest dispositiu no es pot obrir perquè el seu sistema de fitxers no és compatible.</translation>
 <translation id="3727148787322499904">Els canvis en aquesta opció de configuració afectaran totes les xarxes compartides</translation>
 <translation id="3727187387656390258">Inspecciona l'element emergent</translation>
+<translation id="3729506734996624908">Llocs web permesos</translation>
 <translation id="3732078975418297900">Hi ha un error a la línia <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Servidor SSL amb entrada progressiva</translation>
+<translation id="3735740477244556633">Ordena per</translation>
 <translation id="3737274407993947948">S'ha produït un error en instal·lar Linux...</translation>
 <translation id="3737536731758327622">Les baixades es mostren aquí</translation>
+<translation id="3738671331307774213">Verificar la teva identitat t'ajuda a protegir les dades privades</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vols obrir <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ara es mostrarà a la Consola d'administració.</translation>
@@ -1873,10 +1885,10 @@
 <translation id="3846116211488856547">Obtén eines per desenvolupar llocs web i aplicacions d'Android, entre d'altres. En instal·lar Linux, es baixaran <ph name="DOWNLOAD_SIZE" /> de dades.</translation>
 <translation id="385051799172605136">Enrere</translation>
 <translation id="3851428669031642514">Carrega els scripts insegurs</translation>
+<translation id="3854599674806204102">Tria una opció</translation>
 <translation id="3855441664322950881">Empaqueta l'extensió</translation>
 <translation id="3855676282923585394">Importa les adreces d'interès i la configuració...</translation>
 <translation id="3856800405688283469">Selecciona la zona horària</translation>
-<translation id="3856921555429624101">El recompte de l'ús de dades ha finalitzat</translation>
 <translation id="3857228364945137633">Prova Smart Lock per desbloquejar <ph name="DEVICE_TYPE" /> sense contrasenya quan tinguis el telèfon a prop.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: la sincronització s'ha posat en pausa</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">Obre-ho tot en una finestra d'incògnit</translation>
 <translation id="4508265954913339219">S'ha produït un error en l'activació.</translation>
 <translation id="4508765956121923607">Visualitza l'&amp;origen</translation>
-<translation id="4509823033118379431">En aquests moments les imatges no estan disponibles. Torna't a connectar per veure les col·leccions.</translation>
 <translation id="451407183922382411">Amb tecnologia de: <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configura un usuari supervisat nou</translation>
 <translation id="4514610446763173167">Reprodueix o posa en pausa el vídeo</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">Continua des d'un altre dispositiu</translation>
 <translation id="4628314759732363424">Canvia...</translation>
 <translation id="4628757576491864469">Dispositius</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Caràcter no vàlid: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Activar el so de la pestanya</translation>
@@ -2509,7 +2521,6 @@
 <translation id="4905417359854579806">A punt per afegir <ph name="FILE_COUNT" /> a la còpia de seguretat</translation>
 <translation id="4907161631261076876">Aquest fitxer no se sol baixar i podria ser perillós.</translation>
 <translation id="4907306957610201395">Categoria de permisos</translation>
-<translation id="4907824805858067479">El teu administrador ha desactivat les targetes desades</translation>
 <translation id="4908811072292128752">Obre una pestanya nova per navegar per dos llocs web a la vegada</translation>
 <translation id="4909038193460299775">Com que <ph name="DOMAIN" /> gestiona aquest compte, s'esborraran d'aquest dispositiu les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració. No obstant això, les dades continuaran emmagatzemades al teu compte de Google i es podran gestionar al <ph name="BEGIN_LINK" />Tauler de control de Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">T'has inscrit correctament</translation>
@@ -2541,6 +2552,7 @@
 <translation id="4955814292505481804">Anual</translation>
 <translation id="4957949153200969297">Activa només funcions relacionades amb Sincronització de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" />: <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Aplega les targetes en un sol lloc</translation>
 <translation id="496226124210045887">La carpeta que heu seleccionat conté fitxers confidencials. Confirmes que vols concedir a "$1" accés de lectura permanent en aquesta carpeta?</translation>
 <translation id="4964455510556214366">Disposició</translation>
 <translation id="4964673849688379040">S'està comprovant…</translation>
@@ -2588,6 +2600,7 @@
 <translation id="5027562294707732951">Afegeix l'extensió</translation>
 <translation id="5029568752722684782">Esborra la còpia</translation>
 <translation id="5030338702439866405">Emès per</translation>
+<translation id="503155457707535043">S'estan baixant les aplicacions</translation>
 <translation id="503498442187459473"><ph name="HOST" /> vol utilitzar la càmera i el micròfon</translation>
 <translation id="5036662165765606524">No permetis que cap lloc baixi diversos fitxers automàticament</translation>
 <translation id="5037676449506322593">Selecciona-ho tot</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Silencia</translation>
 <translation id="5785583009707899920">Utilitats per a fitxers de Chrome</translation>
 <translation id="5787146423283493983">Acord de clau</translation>
+<translation id="5788127256798019331">Fitxers de Play</translation>
 <translation id="5788367137662787332">Com a mínim una partició del dispositiu <ph name="DEVICE_LABEL" /> no s'ha pogut muntar.</translation>
 <translation id="5794414402486823030">Obre sempre amb el visualitzador del sistema</translation>
 <translation id="5794786537412027208">Surt de totes les aplicacions de Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Traduïda</translation>
 <translation id="5991049340509704927">Amplia</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Per assegurar-te que pots continuar navegant per Internet, demana a l'administrador que suprimeixi aquesta aplicació.}other{Per assegurar-te que pots continuar navegant per Internet, demana a l'administrador que suprimeixi aquestes aplicacions.}}</translation>
-<translation id="5993332328670040093">Ja no es mesurarà el vostre ús de dades.</translation>
 <translation id="6002458620803359783">Veus preferides</translation>
 <translation id="6005695835120147974">Encaminador multimèdia</translation>
 <translation id="6006484371116297560">Clàssic</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Seleccioneu un certificat</translation>
 <translation id="6181431612547969857">S'ha bloquejat la baixada</translation>
 <translation id="6185132558746749656">Ubicació del dispositiu</translation>
+<translation id="6185617499004995178">Validador d'IPP per a CUPS</translation>
 <translation id="6185696379715117369">Re Pàg</translation>
 <translation id="6189273858858366896">Configura o gestiona l'ús compartit dels fitxers de la xarxa.</translation>
 <translation id="6189412234224385711">Obre amb <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Afegiu un paràmetre de consulta a l'URL per actualitzar la pàgina de manera automàtica: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Bateria</translation>
 <translation id="6232116551750539448">S'ha perdut la connexió amb <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Aquesta pestanya està compartint el contingut del teu escriptori.</translation>
 <translation id="6237816943013845465">Permet ajustar la resolució de pantalla</translation>
 <translation id="6238923052227198598">Mantén la darrera nota a la pantalla de bloqueig</translation>
 <translation id="6239558157302047471">Torna a carregar el &amp;marc</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> no se sol baixar i podria ser perillós.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Impressora nova a la xarxa}other{Impressores noves a la xarxa}}</translation>
-<translation id="6286684120317096255">L'ús de dades s'està mesurant</translation>
 <translation id="6286708577777130801">Detalls de la contrasenya desada</translation>
 <translation id="6287852322318138013">Selecció d'una aplicació per obrir el fitxer</translation>
 <translation id="6289452883081499048">Serveis de Google personalitzats, com ara Play</translation>
@@ -3533,6 +3547,7 @@
 <translation id="6451180435462401570">Gestiona els dispositius Cloud Print</translation>
 <translation id="6451689256222386810">Si has oblidat la frase de contrasenya o vols canviar aquesta opció, <ph name="BEGIN_LINK" />restableix la sincronització<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Rebutja</translation>
+<translation id="6455264371803474013">En llocs web específics</translation>
 <translation id="6455894534188563617">Carpeta &amp;nova</translation>
 <translation id="6456394469623773452">Bona</translation>
 <translation id="6456631036739229488">El telèfon Smart Lock ha canviat. Introdueix la contrasenya per actualitzar Smart Lock. La propera vegada, el telèfon desbloquejarà <ph name="DEVICE_TYPE" />. Desactiva Smart Lock a Configuració.</translation>
@@ -3610,6 +3625,7 @@
 <translation id="657402800789773160">&amp;Torna a carregar aquesta pàgina</translation>
 <translation id="6577284282025554716">Baixada cancel·lada: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Encripta les contrasenyes sincronitzades amb el teu nom d'usuari i la teva contrasenya de Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" />: el contingut de l'escriptori es comparteix</translation>
 <translation id="6580151766480067746">Versió d'ARC</translation>
 <translation id="6581162200855843583">Enllaç de Google Drive</translation>
 <translation id="6582421931165117398">Per protegir la teva informació personal, canvia la contrasenya ara. Per poder-la canviar se't demanarà que iniciïs la sessió.</translation>
@@ -4076,6 +4092,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Aquesta aplicació pot impedir que Chrome funcioni correctament.}other{Aquestes aplicacions poden impedir que Chrome funcioni correctament.}}</translation>
 <translation id="7303900363563182677">No es permet que aquest lloc web vegi el text ni les imatges copiats al porta-retalls</translation>
 <translation id="730515362922783851">Intercanviar dades amb un altre dispositiu de la xarxa local o d'Internet</translation>
+<translation id="7307129035224081534">En pausa</translation>
 <translation id="7308002049209013926">Utilitza el menú d'aplicacions per accedir ràpidament a aplicacions i activitats noves. Per accedir-hi amb el teclat, prem Alt+Maj+L.</translation>
 <translation id="7309257895202129721">Mostra els &amp;controls</translation>
 <translation id="7310598146671372464">No s'ha pogut iniciar la sessió. El servidor no admet els tipus d'encriptació de Kerberos especificats. Contacta amb l'administrador.</translation>
@@ -4133,7 +4150,6 @@
 <translation id="7400839060291901923">Configura la connexió al telèfon <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Finestra emergent bloquejada</translation>
 <translation id="7407430846095439694">Importa i vincula</translation>
-<translation id="7409233648990234464">Torna a iniciar i fes powerwash</translation>
 <translation id="7409836189476010449">Executar Flash</translation>
 <translation id="7410344089573941623">Pregunta si <ph name="HOST" /> vol accedir a la càmera i al micròfon</translation>
 <translation id="741204030948306876">Sí, ho accepto</translation>
@@ -4166,6 +4182,7 @@
 <translation id="7465778193084373987">URL de revocació de certificats de Netscape</translation>
 <translation id="7469894403370665791">Connecta automàticament a aquesta xarxa</translation>
 <translation id="747114903913869239">Error: no s'ha pogut descodificar l'extensió</translation>
+<translation id="7473753388963818366">Deixem <ph name="DEVICE_TYPE" /> a punt</translation>
 <translation id="7473891865547856676">No, gràcies</translation>
 <translation id="747459581954555080">Restaura'ls tots</translation>
 <translation id="7475671414023905704">URL de contrasenya perduda de Netscape</translation>
@@ -4288,6 +4305,7 @@
 <translation id="7665369617277396874">Afegeix un compte</translation>
 <translation id="7671130400130574146">Utilitza la barra del títol i els límits del sistema</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, a <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Envia la teva veu a Google per permetre els dictats en qualsevol camp de text.</translation>
 <translation id="7681095912841365527">El lloc web pot utilitzar el Bluetooth</translation>
 <translation id="7683373461016844951">Per continuar, fes clic a D'acord i, a continuació, a Afegeix una persona per crear un perfil per a la teva adreça electrònica del domini <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Extensió instal·lada per l'administrador</translation>
@@ -4329,6 +4347,7 @@
 <translation id="7740996059027112821">Estàndard</translation>
 <translation id="7748528009589593815">Pestanya anterior</translation>
 <translation id="7748626145866214022">Hi ha més opcions disponibles a la barra d'accions. Prem Alt+A per posar el focus a la barra d'accions.</translation>
+<translation id="7750228210027921155">Pantalla en pantalla</translation>
 <translation id="7751260505918304024">Mostra-ho tot</translation>
 <translation id="7754704193130578113">Pregunta on es desarà cada fitxer abans de baixar-lo</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4437,6 +4456,7 @@
 <translation id="7857949311770343000">Aquesta és la pàgina de la pestanya nova que volíeu?</translation>
 <translation id="786073089922909430">Servei: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Baixades</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 galeta}other{# galetes}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: vinculat</translation>
 <translation id="7870730066603611552">Mostra les opcions de sincronització en finalitzar la configuració</translation>
 <translation id="7870790288828963061">No s'ha trobat cap aplicació de Quiosc amb una versió més nova. No hi ha res per actualitzar. Extraieu la memòria USB.</translation>
@@ -4758,6 +4778,7 @@
 <translation id="8373553483208508744">Silencia les pestanyes</translation>
 <translation id="8382913212082956454">Copia l'&amp;adreça electrònica</translation>
 <translation id="8386903983509584791">S'ha completat la cerca</translation>
+<translation id="8389492867173948260">Permet que aquesta extensió llegeixi i modifiqui totes les dades dels llocs web que visitis.</translation>
 <translation id="8390449457866780408">El servidor no està disponible.</translation>
 <translation id="8391712576156218334">La imatge no està disponible. Torna-ho a provar més tard.</translation>
 <translation id="8392234662362215700">Premeu Ctrl+Maj+espai per canviar la disposició del teclat.</translation>
@@ -4789,6 +4810,7 @@
 <translation id="84297032718407999">Es tancarà la sessió d'aquí a <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Canvia el PIN de la SIM</translation>
 <translation id="8434480141477525001">Port de depuració NaCI</translation>
+<translation id="8435395510592618362">Verifica la teva identitat amb <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Desa la targeta de crèdit</translation>
 <translation id="8438328416656800239">Canvia a un navegador intel·ligent</translation>
 <translation id="8438566539970814960">Millora les cerques i la navegació</translation>
@@ -4815,6 +4837,7 @@
 <translation id="8465252176946159372">No és vàlid</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> necessita el teu permís per executar-se</translation>
 <translation id="8466234950814670489">Arxiu tar</translation>
+<translation id="8466417995783206254">En aquesta pestanya s'està reproduint un vídeo en mode de pantalla en pantalla.</translation>
 <translation id="8468750959626135884">Desbloqueja <ph name="DEVICE_TYPE" /> amb el telèfon Android.</translation>
 <translation id="8470028084415844044">Per tenir totes les teves contrasenyes en tots els dispositius, activa la sincronització.</translation>
 <translation id="8470513973197838199">Contrasenyes desades per a <ph name="ORIGIN" /></translation>
@@ -4835,6 +4858,7 @@
 <translation id="8496717697661868878">Executa aquest connector</translation>
 <translation id="8497219075884839166">Utilitats per a Windows</translation>
 <translation id="8498214519255567734">Facilita mirar la pantalla o llegir-hi amb poca llum</translation>
+<translation id="8498395510292172881">Continua llegint una pàgina web a Chrome</translation>
 <translation id="8503813439785031346">Nom d'usuari</translation>
 <translation id="850875081535031620">No s'ha trobat programari maliciós</translation>
 <translation id="8509646642152301857">La baixada del diccionari del corrector ortogràfic ha fallat.</translation>
@@ -4985,7 +5009,6 @@
 <translation id="8725066075913043281">Torna-ho a provar</translation>
 <translation id="8725178340343806893">Preferits/adreces d'interès</translation>
 <translation id="8726206820263995930">S'ha produït un error en recuperar la configuració de la política del servidor: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">No ho tornis a mostrar</translation>
 <translation id="8727344521467137076">Hi ha programari maliciós a l'ordinador. Chrome l'està suprimint i restaurarà la configuració perquè el navegador torni a funcionar amb normalitat.</translation>
 <translation id="8730621377337864115">Fet</translation>
 <translation id="8732030010853991079">Per fer servir aquesta extensió, feu clic en aquesta icona.</translation>
@@ -5176,6 +5199,7 @@
 <translation id="9027459031423301635">Obre l'enllaç en una pes&amp;tanya nova</translation>
 <translation id="9030515284705930323">La teva organització no t'ha activat Google Play Store al compte. Contacta amb l'administrador per obtenir més informació.</translation>
 <translation id="9033857511263905942">&amp;Enganxa</translation>
+<translation id="9034924485347205037">Fitxers de Linux</translation>
 <translation id="9035012421917565900">Com que els elements no es poden retornar a <ph name="DESTINATION_NAME" />, aquesta acció no es pot desfer.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Mostra l'original</translation>
@@ -5276,6 +5300,7 @@
 <translation id="9173995187295789444">S'estan cercant dispositius Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" />: hi ha un dispositiu Bluetooth connectat</translation>
 <translation id="9177499212658576372">Actualment esteu connectat a la xarxa <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configura Linux (versió beta) a <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Aquest procés pot tardar uns quants minuts. S'està iniciant el contenidor de Linux.</translation>
 <translation id="9180380851667544951">El lloc web pot compartir la pantalla</translation>
 <translation id="9188441292293901223">Feu l'actualització del telèfon a una versió més recent d'Android per desbloquejar aquest dispositiu <ph name="DEVICE_TYPE" /></translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 5da220fa..d303fb6 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Před přístupem se zeptat</translation>
 <translation id="1434696352799406980">Bude resetována vaše počáteční stránka, stránka Nová karta, vyhledávač a připnuté karty. Budou také zakázána všechna rozšíření a vymazána dočasná data, jako jsou soubory cookie. Uložené záložky, historie ani hesla vymazána nebudou.</translation>
 <translation id="1434886155212424586">Domovská stránka je stránka nové karty</translation>
+<translation id="1436671784520050284">Pokračovat v nastavování</translation>
 <translation id="1436784010935106834">Odebráno</translation>
 <translation id="1438632560381091872">Zapnout zvuk karet</translation>
 <translation id="1442392616396121389">Předpona směrování</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Kousek pizzy</translation>
 <translation id="1467432559032391204">Doleva</translation>
 <translation id="1468571364034902819">Tento profil nelze použít</translation>
+<translation id="1470533772306424441">Tyto aplikace vám nainstalujeme. Další aplikace pro své zařízení najdete v Obchodě Play.</translation>
 <translation id="1470811252759861213">Chcete-li rozšíření přenést do všech počítačů, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Soubor <ph name="FILENAME" /> nelze nahrát. Na Disku Google je nedostatek místa.</translation>
 <translation id="1475502736924165259">Máte založené certifikáty, které se nehodí do žádné z ostatních kategorií</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;Oddálit</translation>
 <translation id="1830550083491357902">Nejste přihlášeni</translation>
 <translation id="1832511806131704864">Změna telefonu aktualizována</translation>
-<translation id="1832685970989658809">Administrátor uložené platební metody zakázal.</translation>
 <translation id="1834503245783133039">Stažení se nezdařilo: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Vymazat vyhledávání</translation>
 <translation id="1838709767668011582">Web Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Zdroj:</translation>
 <translation id="2193365732679659387">Nastavení důvěryhodnosti</translation>
 <translation id="2195729137168608510">Ochrana e-mailu</translation>
+<translation id="2199298570273670671">Chyba</translation>
 <translation id="2200356397587687044">Chrome k pokračování potřebuje oprávnění</translation>
 <translation id="220138918934036434">Skrýt tlačítko</translation>
 <translation id="2202898655984161076">Při vytváření seznamu tiskáren se vyskytla chyba. Některé vaše tiskárny možná nebyly ve službě <ph name="CLOUD_PRINT_NAME" /> úspěšně zaregistrovány.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Zobrazit heslo</translation>
 <translation id="2436186046335138073">Chcete obslužnému nástroji <ph name="HANDLER_HOSTNAME" /> povolit otevírat všechny odkazy s protokolem <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimální</translation>
-<translation id="2437139306601019091">Měření využití dat skončilo</translation>
 <translation id="2440604414813129000">Zobrazit zdrojový kód</translation>
 <translation id="2445081178310039857">Je vyžadován kořenový adresář rozšíření.</translation>
 <translation id="2445484935443597917">Vytvořit nový profil</translation>
+<translation id="2446585455334014596">Web <ph name="APP_NAME" /> chce ověřit vaši identitu</translation>
 <translation id="2448312741937722512">Typ</translation>
 <translation id="2450223707519584812">Uživatele nebudete moci přidávat, protože chybí klíče rozhraní Google API. Podrobnosti naleznete na adrese <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Vypnout synchronizaci a odhlásit se?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Soubor již existuje</translation>
 <translation id="2453860139492968684">Dokončit</translation>
 <translation id="2454247629720664989">Klíčové slovo</translation>
+<translation id="245661998428026871">Video v režimu obraz v obraze se přestane přehrávat.</translation>
 <translation id="2457246892030921239">Aplikace <ph name="APP_NAME" /> chce zkopírovat souboru ze svazku <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID klíče certifikační autority</translation>
 <translation id="2462752602710430187">Byla přidána tiskárna <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Zapnout zvuk karet</translation>
 <translation id="3053013834507634016">Použití klíče certifikátu</translation>
 <translation id="3057861065630527966">Zálohovat fotky a videa</translation>
+<translation id="3059313675706898490">Zprávy pro Android</translation>
 <translation id="3060379269883947824">Zapnout poslech vybraného textu</translation>
 <translation id="3061707000357573562">Služba oprav</translation>
 <translation id="3064410671692449875">Nedostatek dat</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Zapomněli jste heslo?</translation>
 <translation id="3132996321662585180">Každý den obnovit</translation>
 <translation id="3135204511829026971">Otočit obrazovku</translation>
+<translation id="313638818480447860">K vašemu účtu je připojen tento počet aplikací, které jsou optimalizovány pro toto zařízení: <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="313963229645891001">Stahování: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Výchozí žlutý avatar</translation>
 <translation id="3140353188828248647">Přepnout do adresního řádku</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Kontrola pravopisu</translation>
 <translation id="3183139917765991655">Nástroj na import profilů</translation>
 <translation id="3184560914950696195">Do složky $1 nelze ukládat. Upravené obrázky se uloží do složky Stažené soubory.</translation>
+<translation id="3188257591659621405">Moje soubory</translation>
 <translation id="3188465121994729530">Plovoucí průměr</translation>
 <translation id="3190558889382726167">Heslo uloženo</translation>
 <translation id="3192947282887913208">Zvukové soubory</translation>
@@ -1525,6 +1531,7 @@
 <translation id="3326821416087822643">Komprimace souboru <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">O aplikaci</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – video se přehrává v režimu obrazu v obraze</translation>
 <translation id="3335337277364016868">Rok nahrávky</translation>
 <translation id="3335947283844343239">Znovu otevřít zavřenou kartu</translation>
 <translation id="3336664756920573711">Odemykejte zařízení <ph name="DEVICE_TYPE" /> telefonem Android</translation>
@@ -1544,6 +1551,7 @@
 <translation id="3360297538363969800">Tisk se nezdařil. Zkontrolujte tiskárnu a zkuste to znovu.</translation>
 <translation id="3364721542077212959">Nástroje pro dotykové pero</translation>
 <translation id="3365598184818502391">Použijte buď Ctrl, nebo Alt</translation>
+<translation id="3367047597842238025">Nastavte si své zařízení <ph name="DEVICE_TYPE" /> podle svých představ a objevte všechny skvělé funkce, které máte na dosah.</translation>
 <translation id="3368922792935385530">Připojeno</translation>
 <translation id="3369624026883419694">Rozpoznávání hostitele...</translation>
 <translation id="337286756654493126">Čtení složek, které v aplikaci otevřete</translation>
@@ -1557,6 +1565,7 @@
 <translation id="3389312115541230716">Klikněte pravým tlačítkem na ikonu <ph name="SMALL_PRODUCT_LOGO" /> na hlavním panelu.</translation>
 <translation id="3391716558283801616">Karta 7</translation>
 <translation id="3396331542604645348">Zvolená tiskárna není k dispozici nebo není správně nainstalovaná. Zkontrolujte tiskárnu nebo vyberte jinou.</translation>
+<translation id="3396800784455899911">Kliknutím na tlačítko Přijmout a pokračovat vyjadřujete souhlas se zpracováním popsaným výše pro tyto služby Google.</translation>
 <translation id="3399432415385675819">Oznámení budou zakázána</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Pro tento web nejsou uložena žádná hesla</translation>
@@ -1785,10 +1794,13 @@
 <translation id="3726463242007121105">Toto zařízení nelze otevřít, protože jeho systém souborů není podporován.</translation>
 <translation id="3727148787322499904">Změna tohoto nastavení bude mít dopad na všechny sdílené sítě</translation>
 <translation id="3727187387656390258">Prozkoumat vyskakovací kontextovou nabídku</translation>
+<translation id="3729506734996624908">Povolené weby</translation>
 <translation id="3732078975418297900">Chyba na řádku <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL s technologií Step-up</translation>
+<translation id="3735740477244556633">Seřadit podle</translation>
 <translation id="3737274407993947948">Při instalaci systému Linux došlo k chybě...</translation>
 <translation id="3737536731758327622">Zde se zobrazují vaše stažené soubory</translation>
+<translation id="3738671331307774213">Ověření vaší identity pomáhá ochránit vaše soukromá data</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Spustit aplikaci <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Zařízení <ph name="DEVICE_NAME" /> se teď bude zobrazovat v administrátorské konzoli</translation>
@@ -1873,10 +1885,10 @@
 <translation id="3846116211488856547">Získejte nástroje k vývoji webů, aplikací pro Android apod. Při instalaci systému Linux se stáhne <ph name="DOWNLOAD_SIZE" /> dat.</translation>
 <translation id="385051799172605136">Zpět</translation>
 <translation id="3851428669031642514">Načíst nezabezpečené skripty</translation>
+<translation id="3854599674806204102">Vyberte požadovanou možnost</translation>
 <translation id="3855441664322950881">Zabalit rozšíření</translation>
 <translation id="3855676282923585394">Importovat záložky a nastavení...</translation>
 <translation id="3856800405688283469">Vybrat časové pásmo</translation>
-<translation id="3856921555429624101">Měření využití dat skončilo</translation>
 <translation id="3857228364945137633">Zkuste své zařízení <ph name="DEVICE_TYPE" /> odemykat bez hesla pomocí funkce Smart Lock, když je poblíž váš telefon.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Synchronizace pozastavena</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">Otevřít vše v anonymním okně</translation>
 <translation id="4508265954913339219">Aktivace se nezdařila</translation>
 <translation id="4508765956121923607">Z&amp;obrazit zdrojový kód</translation>
-<translation id="4509823033118379431">Obrázky aktuálně nejsou k dispozici. Chcete-li zobrazit sbírky, znovu se připojte.</translation>
 <translation id="451407183922382411">Založeno na technologii <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Nastavení nového dozorovaného uživatele</translation>
 <translation id="4514610446763173167">Přepnout mezi přehráváním a pozastavením videa</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">Pokračovat z jiného zařízení</translation>
 <translation id="4628314759732363424">Změnit...</translation>
 <translation id="4628757576491864469">Zařízení</translation>
+<translation id="4628948037717959914">Fotka</translation>
 <translation id="4630590996962964935">Neplatný znak: $1</translation>
 <translation id="4631887759990505102">Interpret</translation>
 <translation id="4632483769545853758">Zapnout zvuk karty</translation>
@@ -2508,7 +2520,6 @@
 <translation id="4905417359854579806">Připraveno k zálohování: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Tento soubor se běžně nestahuje a může být nebezpečný.</translation>
 <translation id="4907306957610201395">Kategorie oprávnění</translation>
-<translation id="4907824805858067479">Administrátor uložené karty zakázal</translation>
 <translation id="4908811072292128752">Otevřete novou kartu a prohlížejte dvě webové stránky naráz</translation>
 <translation id="4909038193460299775">Protože je tento účet spravován doménou <ph name="DOMAIN" />, budou z tohoto zařízení vymazány vaše záložky, historie, hesla a další nastavení. Data však zůstanou uložená ve vašem účtu Google a lze je spravovat v <ph name="BEGIN_LINK" />Hlavním panelu Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Úspěšně jste se zaregistrovali</translation>
@@ -2540,6 +2551,7 @@
 <translation id="4955814292505481804">Roční</translation>
 <translation id="4957949153200969297">Povolit jen funkce související se synchronizací prohlížeče <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Mějte všechny karty na jednom místě</translation>
 <translation id="496226124210045887">Vybraná složka obsahuje citlivé soubory. Opravdu chcete aplikaci $1 udělit trvalý přístup ke čtení této složky?</translation>
 <translation id="4964455510556214366">Uspořádání</translation>
 <translation id="4964673849688379040">Kontrola...</translation>
@@ -2587,6 +2599,7 @@
 <translation id="5027562294707732951">Přidat rozšíření</translation>
 <translation id="5029568752722684782">Vymazat kopii</translation>
 <translation id="5030338702439866405">Vydal:</translation>
+<translation id="503155457707535043">Aplikace se stahují</translation>
 <translation id="503498442187459473">Web <ph name="HOST" /> chce použít váš mikrofon a kameru</translation>
 <translation id="5036662165765606524">Nepovolovat žádnému webu automatické stahování několika souborů</translation>
 <translation id="5037676449506322593">Vybrat vše</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">Ztlumit</translation>
 <translation id="5785583009707899920">Nástroje Chrome pro práci se soubory</translation>
 <translation id="5787146423283493983">Smlouva o klíči</translation>
+<translation id="5788127256798019331">Soubory Play</translation>
 <translation id="5788367137662787332">Je nám líto, minimálně jeden oddíl zařízení <ph name="DEVICE_LABEL" /> nelze připojit.</translation>
 <translation id="5794414402486823030">Vždy otevřít pomocí systémového prohlížeče</translation>
 <translation id="5794786537412027208">Ukončit všechny aplikace Chrome</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">Přeloženo</translation>
 <translation id="5991049340509704927">Zvětšit</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}few{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}many{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}other{Abyste mohli nadále procházet web, požádejte administrátora o odstranění této aplikace.}}</translation>
-<translation id="5993332328670040093">Vaše využití dat již nebude měřeno</translation>
 <translation id="6002458620803359783">Preferované hlasy</translation>
 <translation id="6005695835120147974">Směrovač médií</translation>
 <translation id="6006484371116297560">Klasické</translation>
@@ -3353,6 +3366,7 @@
 <translation id="6178664161104547336">Vyberte certifikát</translation>
 <translation id="6181431612547969857">Stahování zablokováno</translation>
 <translation id="6185132558746749656">Poloha zařízení</translation>
+<translation id="6185617499004995178">Validátor CUPS IPP</translation>
 <translation id="6185696379715117369">O stránku nahoru</translation>
 <translation id="6189273858858366896">Nastavit nebo spravovat sdílené síťové složky.</translation>
 <translation id="6189412234224385711">Otevřít pomocí rozšíření <ph name="EXTENSION_NAME" /></translation>
@@ -3385,6 +3399,7 @@
 <translation id="6231881193380278751">Přidejte do adresy URL parametr dotazu pro automatickou aktualizaci stránky: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterie</translation>
 <translation id="6232116551750539448">Připojení k síti <ph name="NAME" /> bylo ztraceno</translation>
+<translation id="6235700927623181151">Tato karta sdílí obsah vaší plochy.</translation>
 <translation id="6237816943013845465">Umožňuje upravit rozlišení obrazovky</translation>
 <translation id="6238923052227198598">Zobrazovat poslední poznámku na obrazovce uzamčení</translation>
 <translation id="6239558157302047471">Znovu načíst &amp;rámec</translation>
@@ -3419,7 +3434,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Soubor <ph name="FILE_NAME" /> se běžně nestahuje a může být nebezpečný.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nová tiskárna v síti}few{Nové tiskárny v síti}many{Nové tiskárny v síti}other{Nové tiskárny v síti}}</translation>
-<translation id="6286684120317096255">Využití dat je měřeno</translation>
 <translation id="6286708577777130801">Podrobnosti uloženého hesla</translation>
 <translation id="6287852322318138013">Vyberte aplikaci, pomocí které soubor otevřete</translation>
 <translation id="6289452883081499048">Přizpůsobené služby Google, jako je Google Play</translation>
@@ -3530,6 +3544,7 @@
 <translation id="6451180435462401570">Spravovat zařízení Cloud Print</translation>
 <translation id="6451689256222386810">Pokud jste heslovou frázi zapomněli nebo toto nastavení chcete změnit, <ph name="BEGIN_LINK" />resetujte synchronizaci<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Odmítnout</translation>
+<translation id="6455264371803474013">Na konkrétních webech</translation>
 <translation id="6455894534188563617">&amp;Nová složka</translation>
 <translation id="6456394469623773452">Průměrný</translation>
 <translation id="6456631036739229488">Telefon pro Smart Lock se změnil. Chcete-li funkci Smart Lock aktualizovat, zadejte heslo. Příště váš telefon zařízení <ph name="DEVICE_TYPE" /> odemkne. Funkci Smart Lock můžete vypnout v Nastavení.</translation>
@@ -3607,6 +3622,7 @@
 <translation id="657402800789773160">&amp;Načíst tuto stránku znovu</translation>
 <translation id="6577284282025554716">Stahování zrušeno: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifrovat synchronizovaná hesla pomocí vašeho uživatelského jména a hesla</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – sdílí obsah plochy</translation>
 <translation id="6580151766480067746">Verze ARC</translation>
 <translation id="6581162200855843583">Odkaz na Disk Google</translation>
 <translation id="6582421931165117398">Chcete-li ochránit své osobní údaje, neprodleně změňte heslo. Před změnou hesla budete požádáni o přihlášení.</translation>
@@ -4073,6 +4089,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Tato aplikace by Chromu mohla bránit ve správném fungování.}few{Tyto aplikace by Chromu mohly bránit ve správném fungování.}many{Tyto aplikace by Chromu mohly bránit ve správném fungování.}other{Tyto aplikace by Chromu mohly bránit ve správném fungování.}}</translation>
 <translation id="7303900363563182677">Tomuto webu byl zablokován přístup k textu a obrázkům zkopírovaným do schránky</translation>
 <translation id="730515362922783851">Výměna dat s libovolným zařízením v lokální síti nebo internetu</translation>
+<translation id="7307129035224081534">Pozastaveno</translation>
 <translation id="7308002049209013926">Pomocí Spouštěče se rychle dostanete k novým aplikacím a činnostem. Chcete-li se sem dostat pomocí klávesnice, stiskněte Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Zobrazit &amp;ovládací prvky</translation>
 <translation id="7310598146671372464">Přihlášení se nezdařilo. Server nepodporuje zadané typy šifrování Kerberos. Obraťte se na svého administrátora.</translation>
@@ -4130,7 +4147,6 @@
 <translation id="7400839060291901923">Nastavte připojení na zařízení <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Zablokováno vyskakovací okno</translation>
 <translation id="7407430846095439694">Importovat a svázat</translation>
-<translation id="7409233648990234464">Znovu spustit a použít funkci Powerwash</translation>
 <translation id="7409836189476010449">Spustit Flash</translation>
 <translation id="7410344089573941623">Zobrazit dotaz, pokud bude chtít web <ph name="HOST" /> používat webovou kameru a mikrofon</translation>
 <translation id="741204030948306876">Ano</translation>
@@ -4163,6 +4179,7 @@
 <translation id="7465778193084373987">Adresa URL pro odvolání certifikátu Netscape</translation>
 <translation id="7469894403370665791">Automaticky připojit k této síti</translation>
 <translation id="747114903913869239">Chyba: Nelze dekódovat rozšíření</translation>
+<translation id="7473753388963818366">Připravte si zařízení <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Ne, děkuji</translation>
 <translation id="747459581954555080">Obnovit vše</translation>
 <translation id="7475671414023905704">Adresa URL pro získání ztraceného hesla Netscape</translation>
@@ -4285,6 +4302,7 @@
 <translation id="7665369617277396874">Přidat účet</translation>
 <translation id="7671130400130574146">Použít systémové záhlaví a okraje okna</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> na stránce <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Odesílat hlasové údaje do Googlu, aby bylo možné diktovat do libovolného textového pole.</translation>
 <translation id="7681095912841365527">Web může použít Bluetooth</translation>
 <translation id="7683373461016844951">Chcete-li pokračovat, klikněte na OK a poté kliknutím na Přidat uživatele vytvořte nový profil pro svou novou e-mailovou adresu v doméně <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Nainstaloval váš administrátor</translation>
@@ -4326,6 +4344,7 @@
 <translation id="7740996059027112821">Standardně</translation>
 <translation id="7748528009589593815">Předchozí karta</translation>
 <translation id="7748626145866214022">Další možnosti jsou k dispozici na panelu akcí. Na panel akcí přejdete stisknutím kláves Alt + A.</translation>
+<translation id="7750228210027921155">Obraz v obraze</translation>
 <translation id="7751260505918304024">Zobrazit vše</translation>
 <translation id="7754704193130578113">Před stažením se vždy zeptat na místo uložení každého souboru</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4434,6 +4453,7 @@
 <translation id="7857949311770343000">Je toto stránka nové karty, kterou jste očekávali?</translation>
 <translation id="786073089922909430">Služba: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Stažené soubory</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 soubor cookie}few{# soubory cookie}many{# souboru cookie}other{# souborů cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – spárováno</translation>
 <translation id="7870730066603611552">Po nastavení zkontrolovat možnosti synchronizace</translation>
 <translation id="7870790288828963061">Nebyly nalezeny žádné novější verze terminálových aplikací. Aktualizaci není třeba provést. Vyjměte jednotku USB.</translation>
@@ -4755,6 +4775,7 @@
 <translation id="8373553483208508744">Vypnout zvuk karet</translation>
 <translation id="8382913212082956454">Kopírovat &amp;e-mailovou adresu</translation>
 <translation id="8386903983509584791">Vyhledávání je dokončeno</translation>
+<translation id="8389492867173948260">Povolit tomuto rozšíření číst a měnit všechna vaše data na navštívených webech:</translation>
 <translation id="8390449457866780408">Server není dostupný.</translation>
 <translation id="8391712576156218334">Vybraný obrázek není k dispozici. Zkuste to znovu později.</translation>
 <translation id="8392234662362215700">Rozložení klávesnice přepnete stisknutím kláves Ctrl + Shift + mezerník.</translation>
@@ -4786,6 +4807,7 @@
 <translation id="84297032718407999">Za <ph name="LOGOUT_TIME_LEFT" /> budete odhlášeni</translation>
 <translation id="8431909052837336408">Změnit PIN SIM karty</translation>
 <translation id="8434480141477525001">Port ladění klientu NaCl</translation>
+<translation id="8435395510592618362">Ověřte svou identitu pomocí aplikace <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Uložit platební kartu</translation>
 <translation id="8438328416656800239">Přejděte na chytrý prohlížeč</translation>
 <translation id="8438566539970814960">Vylepšit vyhledávání a procházení</translation>
@@ -4812,6 +4834,7 @@
 <translation id="8465252176946159372">Neplatné</translation>
 <translation id="8465444703385715657">Plugin <ph name="PLUGIN_NAME" /> potřebuje ke spuštění vaše povolení</translation>
 <translation id="8466234950814670489">Archiv ve formátu Tar</translation>
+<translation id="8466417995783206254">Na této kartě se přehrává video v režimu obrazu v obraze</translation>
 <translation id="8468750959626135884">Odemykejte <ph name="DEVICE_TYPE" /> pomocí telefonu Android.</translation>
 <translation id="8470028084415844044">Chcete-li mít všechna hesla na všech svých zařízeních, zapněte synchronizaci.</translation>
 <translation id="8470513973197838199">Uložená hesla z webu <ph name="ORIGIN" /></translation>
@@ -4832,6 +4855,7 @@
 <translation id="8496717697661868878">Spustit plugin</translation>
 <translation id="8497219075884839166">Nástroje Windows</translation>
 <translation id="8498214519255567734">Usnadnit čtení a sledování obrazovky při tlumeném osvětlení</translation>
+<translation id="8498395510292172881">Pokračovat ve čtení v Chromu</translation>
 <translation id="8503813439785031346">Uživatelské jméno</translation>
 <translation id="850875081535031620">Nebyl nalezen žádný škodlivý software</translation>
 <translation id="8509646642152301857">Stažení slovníku pro kontrolu pravopisu se nezdařilo.</translation>
@@ -4982,7 +5006,6 @@
 <translation id="8725066075913043281">Zkusit znovu</translation>
 <translation id="8725178340343806893">Oblíbené položky/záložky</translation>
 <translation id="8726206820263995930">Při načítání nastavení zásad ze serveru došlo k chybě: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Příště tuto zprávu nezobrazovat</translation>
 <translation id="8727344521467137076">Máte v počítači škodlivý software. Chrome jej odstraňuje a obnoví vaše nastavení, aby prohlížeč opět fungoval jako obvykle.</translation>
 <translation id="8730621377337864115">Hotovo</translation>
 <translation id="8732030010853991079">Toto rozšíření aktivujete kliknutím na tuto ikonu.</translation>
@@ -5173,6 +5196,7 @@
 <translation id="9027459031423301635">Otevří&amp;t odkaz v nové kartě</translation>
 <translation id="9030515284705930323">Vaše organizace pro váš účet Obchod Google Play nepovolila. Další informace získáte u svého administrátora.</translation>
 <translation id="9033857511263905942">&amp;Vložit</translation>
+<translation id="9034924485347205037">Soubory systému Linux</translation>
 <translation id="9035012421917565900">Položky nelze přesunout zpět do týmu <ph name="DESTINATION_NAME" />. Tuto akci proto nebude možné vrátit zpět.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Zobrazit originál</translation>
@@ -5273,6 +5297,7 @@
 <translation id="9173995187295789444">Vyhledávání zařízení Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – je připojeno zařízení Bluetooth</translation>
 <translation id="9177499212658576372">V současnosti jste připojeni k síti typu <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Nastavení systému Linux (Beta) na zařízení <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Tento proces může trvat několik minut. Probíhá spouštění kontejneru systému Linux.</translation>
 <translation id="9180380851667544951">Web může sdílet vaši obrazovku</translation>
 <translation id="9188441292293901223">Chcete-li odemknout toto zařízení <ph name="DEVICE_TYPE" />, aktualizujte svůj telefon na novější verzi platformy Android.</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index f74048e8..b703f347 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Spørg, før der gives adgang</translation>
 <translation id="1434696352799406980">Denne funktion nulstiller din opstartsside, siden Ny fane, din søgemaskine og dine fastgjorte faner. Den deaktiverer også alle udvidelser og rydder midlertidige data, såsom cookies. Dine bogmærker, din historik og dine gemte adgangskoder slettes ikke.</translation>
 <translation id="1434886155212424586">Startsiden er siden Ny fane</translation>
+<translation id="1436671784520050284">Fortsæt konfiguration</translation>
 <translation id="1436784010935106834">Fjernet</translation>
 <translation id="1438632560381091872">Slå fanernes lyd til</translation>
 <translation id="1442392616396121389">Omdirigeringspræfiks</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzastykke</translation>
 <translation id="1467432559032391204">Venstre</translation>
 <translation id="1468571364034902819">Du kan ikke bruge denne profil</translation>
+<translation id="1470533772306424441">Vi installerer disse apps for dig. Du kan finde flere apps til din enhed i Play Butik.</translation>
 <translation id="1470811252759861213"><ph name="SIGN_IN_LINK" /> for at få dine udvidelser på alle dine computere.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" blev ikke uploadet. Der er ikke plads nok i Google Drev.</translation>
 <translation id="1475502736924165259">Du har lagrede certifikater, som ikke passer i nogen af de andre kategorier</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">Zoom &amp;ud</translation>
 <translation id="1830550083491357902">Ikke logget ind</translation>
 <translation id="1832511806131704864">Telefonændring opdateret</translation>
-<translation id="1832685970989658809">Gemte betalingsmetoder er deaktiveret af din administrator</translation>
 <translation id="1834503245783133039">Downloaden blev ikke gennemført: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Ryd søgning</translation>
 <translation id="1838709767668011582">Google-website</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">Fra:</translation>
 <translation id="2193365732679659387">Tillidsindstillinger</translation>
 <translation id="2195729137168608510">Mail-beskyttelse</translation>
+<translation id="2199298570273670671">Fejl</translation>
 <translation id="2200356397587687044">Chrome skal have tilladelse til at fortsætte</translation>
 <translation id="220138918934036434">Skjul knap</translation>
 <translation id="2202898655984161076">Der opstod et problem under fortegnelsen af printere. Nogle af dine printere er muligvis ikke registreret korrekt hos <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">Vis adgangskode</translation>
 <translation id="2436186046335138073">Vil du tillade, at <ph name="HANDLER_HOSTNAME" /> åbner alle <ph name="PROTOCOL" />-links?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Måling af dataforbrug sluttede</translation>
 <translation id="2440604414813129000">Vis &amp;kilde</translation>
 <translation id="2445081178310039857">Udvidelsens rodmappe er påkrævet.</translation>
 <translation id="2445484935443597917">Opret en ny profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> vil bekræfte din identitet</translation>
 <translation id="2448312741937722512">Type</translation>
 <translation id="2450223707519584812">Du vil ikke kunne tilføje brugere, da der mangler Google API-nøgler. Se <ph name="DETAILS_URL" /> for at få flere oplysninger.</translation>
 <translation id="2450310832094867474">Vil du deaktivere synkronisering og logge ud?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">Filen findes allerede</translation>
 <translation id="2453860139492968684">Udfør</translation>
 <translation id="2454247629720664989">Søgeord</translation>
+<translation id="245661998428026871">Afspilningen af videoen i tilstanden med integreret billede afbrydes.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ønsker at kopiere filer fra <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Nøgle-id for certifikatautoritet</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> blev tilføjet</translation>
@@ -1360,6 +1363,7 @@
 <translation id="304826556400666995">Slå fanernes lyd til</translation>
 <translation id="3053013834507634016">Brug af certifikatnøgle</translation>
 <translation id="3057861065630527966">Sikkerhedskopiér dine billeder og videoer</translation>
+<translation id="3059313675706898490">Android Beskeder</translation>
 <translation id="3060379269883947824">Aktivér Tekstoplæsning</translation>
 <translation id="3061707000357573562">Tjeneste til programrettelse</translation>
 <translation id="3064410671692449875">Utilstrækkelige data</translation>
@@ -1408,6 +1412,7 @@
 <translation id="313205617302240621">Har du glemt din adgangskode?</translation>
 <translation id="3132996321662585180">Opdater dagligt</translation>
 <translation id="3135204511829026971">Roter skærmen</translation>
+<translation id="313638818480447860">Vi fandt <ph name="NUMBER_OF_APPS" /> apps, som er tilknyttet din konto og er optimeret til denne enhed.</translation>
 <translation id="313963229645891001">Downloader – <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Gul standardavatar</translation>
 <translation id="3140353188828248647">Fokuser på adresselinje</translation>
@@ -1438,6 +1443,7 @@
 <translation id="3182749001423093222">Stavekontrol</translation>
 <translation id="3183139917765991655">Profilimport</translation>
 <translation id="3184560914950696195">Der kunne ikke gemmes til $1. Redigerede billeder vil blive gemt i mappen Downloads.</translation>
+<translation id="3188257591659621405">Mine filer</translation>
 <translation id="3188465121994729530">Glidende gennemsnit</translation>
 <translation id="3190558889382726167">Adgangskoden er blevet gemt</translation>
 <translation id="3192947282887913208">Lydfiler</translation>
@@ -1525,6 +1531,7 @@
 <translation id="3326821416087822643">Komprimerer <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Oplysninger om appen</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – afspiller video i tilstanden med integreret billede</translation>
 <translation id="3335337277364016868">År, det blev optaget</translation>
 <translation id="3335947283844343239">Åbn lukket fane igen</translation>
 <translation id="3336664756920573711">Lås din <ph name="DEVICE_TYPE" /> op med din Android-telefon.</translation>
@@ -1544,6 +1551,7 @@
 <translation id="3360297538363969800">Udskrivning mislykkedes. Kontrollér din printer, og prøv igen.</translation>
 <translation id="3364721542077212959">Penneværktøjer</translation>
 <translation id="3365598184818502391">Brug enten Ctrl eller Alt</translation>
+<translation id="3367047597842238025">Konfigurer <ph name="DEVICE_TYPE" />, helt som du vil, og opdag alle de fantastiske funktioner, du har lige ved hånden.</translation>
 <translation id="3368922792935385530">Tilsluttet</translation>
 <translation id="3369624026883419694">Identificerer vært...</translation>
 <translation id="337286756654493126">Læse mapper, som du åbner i applikationen</translation>
@@ -1557,6 +1565,7 @@
 <translation id="3389312115541230716">Højreklik på <ph name="SMALL_PRODUCT_LOGO" />-ikonet på proceslinjen</translation>
 <translation id="3391716558283801616">Fane 7</translation>
 <translation id="3396331542604645348">Den valgte printer er ikke tilgængelig eller ikke installeret korrekt. Tjek din printer, eller vælg en anden printer.</translation>
+<translation id="3396800784455899911">Når du klikker på knappen "Acceptér og fortsæt", accepterer du den behandling, der er beskrevet ovenfor, for disse Google-tjenester.</translation>
 <translation id="3399432415385675819">Underretninger deaktiveres</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Der er ikke gemt nogen adgangskoder til dette website</translation>
@@ -1785,10 +1794,13 @@
 <translation id="3726463242007121105">Denne enhed kan ikke åbnes, fordi dens filsystem ikke understøttes.</translation>
 <translation id="3727148787322499904">Hvis denne indstilling ændres, påvirker det alle delte netværk</translation>
 <translation id="3727187387656390258">Undersøg pop op-vindue</translation>
+<translation id="3729506734996624908">Tilladte websites</translation>
 <translation id="3732078975418297900">Der er fejl på linjen <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server med optrapning</translation>
+<translation id="3735740477244556633">Sortér efter</translation>
 <translation id="3737274407993947948">Der opstod en fejl under installationen af Linux...</translation>
 <translation id="3737536731758327622">Dine downloads vises her</translation>
+<translation id="3738671331307774213">Bekræftelse af din identitet hjælper med at beskytte dine personlige data</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vil du åbne <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> vises nu i administrationskonsollen</translation>
@@ -1873,10 +1885,10 @@
 <translation id="3846116211488856547">Få værktøjer til at udvikle websites, Android-apps og meget mere. Når du installerer Linux, downloades <ph name="DOWNLOAD_SIZE" /> data.</translation>
 <translation id="385051799172605136">Tilbage</translation>
 <translation id="3851428669031642514">Indlæs usikre scripts</translation>
+<translation id="3854599674806204102">Vælg en indstilling</translation>
 <translation id="3855441664322950881">Pak udvidelse</translation>
 <translation id="3855676282923585394">Importer bogmærker og indstillinger...</translation>
 <translation id="3856800405688283469">Vælg tidszone</translation>
-<translation id="3856921555429624101">Måling af dataforbrug er afsluttet</translation>
 <translation id="3857228364945137633">Prøv Smart Lock for at låse din <ph name="DEVICE_TYPE" /> op uden en adgangskode, når din telefon er i nærheden.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Synkronisering er sat på pause</translation>
@@ -2247,7 +2259,6 @@
 <translation id="4508051413094283164">Åbn alle i et inkognitovindue</translation>
 <translation id="4508265954913339219">Aktiveringen mislykkedes</translation>
 <translation id="4508765956121923607">Vis k&amp;ilde</translation>
-<translation id="4509823033118379431">Billederne er ikke tilgængelige i øjeblikket. Opret forbindelse igen for at se samlingerne.</translation>
 <translation id="451407183922382411">Leveret af <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Konfigurer ny administreret bruger</translation>
 <translation id="4514610446763173167">Afspil eller sæt video på pause</translation>
@@ -2324,6 +2335,7 @@
 <translation id="4627442949885028695">Fortsæt fra en anden enhed</translation>
 <translation id="4628314759732363424">Skift...</translation>
 <translation id="4628757576491864469">Enheder</translation>
+<translation id="4628948037717959914">Billede</translation>
 <translation id="4630590996962964935">Ugyldigt tegn: $1</translation>
 <translation id="4631887759990505102">Kunstner</translation>
 <translation id="4632483769545853758">Slå fanens lyd til</translation>
@@ -2509,7 +2521,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> er klar til at blive sikkerhedskopieret</translation>
 <translation id="4907161631261076876">Denne fil er ikke downloadet på almindelig vis og kan være farlig.</translation>
 <translation id="4907306957610201395">Tilladelseskategori</translation>
-<translation id="4907824805858067479">Gemte kort er deaktiveret af din administrator.</translation>
 <translation id="4908811072292128752">Åbn en ny fane for at se to websites på én gang</translation>
 <translation id="4909038193460299775">Eftersom denne konto administreres af <ph name="DOMAIN" />, slettes dine bogmærker, din historik, dine adgangskoder og andre indstillinger på denne enhed. Dine data vil dog fortsat være gemt på din Google-konto og kan administreres i <ph name="BEGIN_LINK" />Google Betjeningspanel<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Du er tilmeldt</translation>
@@ -2541,6 +2552,7 @@
 <translation id="4955814292505481804">Årligt</translation>
 <translation id="4957949153200969297">Aktivér kun funktioner, der er relateret til <ph name="IDS_SHORT_PRODUCT_NAME" />-synkronisering</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Hav dine kort samlet ét sted</translation>
 <translation id="496226124210045887">Den mappe, du har valgt, indeholder følsomme filer. Vil du give "$1" permanent læseadgang til denne mappe?</translation>
 <translation id="4964455510556214366">Opstilling</translation>
 <translation id="4964673849688379040">Kontrollerer...</translation>
@@ -2588,6 +2600,7 @@
 <translation id="5027562294707732951">Tilføj udvidelsen</translation>
 <translation id="5029568752722684782">Slet kopi</translation>
 <translation id="5030338702439866405">Udstedt af</translation>
+<translation id="503155457707535043">De valgte apps downloades</translation>
 <translation id="503498442187459473"><ph name="HOST" /> anmoder om at bruge dit kamera og din mikrofon</translation>
 <translation id="5036662165765606524">Tillad ikke, at nogen websites kan downloade flere filer automatisk</translation>
 <translation id="5037676449506322593">Vælg alle</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">Slå lyden fra</translation>
 <translation id="5785583009707899920">Filværktøjer til Chrome</translation>
 <translation id="5787146423283493983">Nøgleoverensstemmelse</translation>
+<translation id="5788127256798019331">Play-filer</translation>
 <translation id="5788367137662787332">Vi beklager, men der kunne ikke oprettes forbindelse til mindst én partition på enheden <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Åbn altid med systemets visningsprogram</translation>
 <translation id="5794786537412027208">Afslut alle Chrome-apps</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">Oversat</translation>
 <translation id="5991049340509704927">Forstør</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne denne app.}one{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne denne app.}other{Hvis du vil være sikker på fortsat at kunne bruge internettet, skal du bede din administrator om at fjerne disse apps.}}</translation>
-<translation id="5993332328670040093">Dit dataforbrug måles ikke længere.</translation>
 <translation id="6002458620803359783">Foretrukne stemmer</translation>
 <translation id="6005695835120147974">Medierouter</translation>
 <translation id="6006484371116297560">Klassisk</translation>
@@ -3356,6 +3369,7 @@
 <translation id="6178664161104547336">Vælg et certifikat</translation>
 <translation id="6181431612547969857">Downloaden blev blokeret</translation>
 <translation id="6185132558746749656">Enhedsplacering</translation>
+<translation id="6185617499004995178">CUPS IPP-validering</translation>
 <translation id="6185696379715117369">Gå en side op</translation>
 <translation id="6189273858858366896">Konfigurer eller administrer fildeling via netværk.</translation>
 <translation id="6189412234224385711">Åbn med <ph name="EXTENSION_NAME" /></translation>
@@ -3388,6 +3402,7 @@
 <translation id="6231881193380278751">Tilføj en forespørgselsparameter i webadressen for at opdatere siden automatisk: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batteri</translation>
 <translation id="6232116551750539448">Forbindelsen til <ph name="NAME" /> er afbrudt.</translation>
+<translation id="6235700927623181151">Denne fane deler indholdet fra dit skrivebord.</translation>
 <translation id="6237816943013845465">Giver dig mulighed for at justere skærmopløsningen</translation>
 <translation id="6238923052227198598">Behold den nyeste note på låseskærmen</translation>
 <translation id="6239558157302047471">Genindlæs &amp;ramme</translation>
@@ -3422,7 +3437,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> downloades normalt ikke og kan være skadelig.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny printer på dit netværk}one{Nye printere på dit netværk}other{Nye printere på dit netværk}}</translation>
-<translation id="6286684120317096255">Dataforbruget måles</translation>
 <translation id="6286708577777130801">Oplysninger om gemt adgangskode</translation>
 <translation id="6287852322318138013">Vælg en app, der skal åbne denne fil</translation>
 <translation id="6289452883081499048">Tilpassede Google-tjenester som f.eks. Play</translation>
@@ -3533,6 +3547,7 @@
 <translation id="6451180435462401570">Administrer Cloud Print-enheder</translation>
 <translation id="6451689256222386810">Hvis du har glemt din adgangssætning eller vil ændre denne indstilling, skal du <ph name="BEGIN_LINK" />nulstille synkroniseringen<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Afvis</translation>
+<translation id="6455264371803474013">På specifikke websites</translation>
 <translation id="6455894534188563617">&amp;Ny mappe</translation>
 <translation id="6456394469623773452">God</translation>
 <translation id="6456631036739229488">Smart Lock-telefonen er ændret. Angiv din adgangskode for at opdatere Smart Lock. Næste gang kan din telefon låse din <ph name="DEVICE_TYPE" /> op. Slå Smart Lock fra i Indstillinger.</translation>
@@ -3610,6 +3625,7 @@
 <translation id="657402800789773160">&amp;Genindlæs denne side</translation>
 <translation id="6577284282025554716">Downloaden blev annulleret: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Kryptér synkroniserede adgangskoder med brugernavnet og adgangskoden til din Google-konto</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – skrivebordsindholdet deles</translation>
 <translation id="6580151766480067746">ARC-version</translation>
 <translation id="6581162200855843583">Link til Google Drev</translation>
 <translation id="6582421931165117398">Skift din adgangskode nu for at beskytte dine personlige oplysninger. Du bliver bedt om at logge ind, før du kan skifte din adgangskode.</translation>
@@ -4076,6 +4092,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Denne app kan forhindre Chrome i at fungere korrekt.}one{Denne app kan forhindre Chrome i at fungere korrekt.}other{Disse apps kan forhindre Chrome i at fungere korrekt.}}</translation>
 <translation id="7303900363563182677">Dette website er blokeret fra at se tekst og billeder, der er kopieret til udklipsholderen</translation>
 <translation id="730515362922783851">Udveksle data med en enhed på det lokale netværk eller internettet</translation>
+<translation id="7307129035224081534">Sat på pause</translation>
 <translation id="7308002049209013926">Brug Appliste til hurtigt at gå til nye apps og aktiviteter. Du kan også bruge tastaturet ved at trykke på Alt+Shift+L.</translation>
 <translation id="7309257895202129721">Vis &amp;knapper</translation>
 <translation id="7310598146671372464">Der kunne ikke logges ind. Serveren understøtter ikke de angivne Kerberos-krypteringstyper. Kontakt din administrator.</translation>
@@ -4133,7 +4150,6 @@
 <translation id="7400839060291901923">Konfigurer en forbindelse på din <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Pop op-vindue blokeret</translation>
 <translation id="7407430846095439694">Importér, og tilknyt</translation>
-<translation id="7409233648990234464">Genstart og powerwash</translation>
 <translation id="7409836189476010449">Kør Flash</translation>
 <translation id="7410344089573941623">Spørg, hvis <ph name="HOST" /> vil have adgang til dit kamera og din mikrofon</translation>
 <translation id="741204030948306876">Ja tak</translation>
@@ -4166,6 +4182,7 @@
 <translation id="7465778193084373987">Webadresse for tilbagekaldelse af Netscape-certifikat</translation>
 <translation id="7469894403370665791">Opret automatisk forbindelse til dette netværk</translation>
 <translation id="747114903913869239">Fejl: Udvidelsen kunne ikke afkodes</translation>
+<translation id="7473753388963818366">Lad os gøre din <ph name="DEVICE_TYPE" /> klar til dig</translation>
 <translation id="7473891865547856676">Nej tak</translation>
 <translation id="747459581954555080">Gendan alle</translation>
 <translation id="7475671414023905704">Netscape-webadresse til mistet adgangskode</translation>
@@ -4290,6 +4307,7 @@
 <translation id="7665369617277396874">Tilføj konto</translation>
 <translation id="7671130400130574146">Brug systemets titellinje og rammer</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> på <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Send din stemme til Google, så du kan diktere i ethvert tekstfelt.</translation>
 <translation id="7681095912841365527">Websitet kan anvende Bluetooth</translation>
 <translation id="7683373461016844951">Hvis du vil fortsætte, skal du klikke på Tilføj person for at oprette en ny profil til din mailadresse på <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Installeret af din administrator</translation>
@@ -4331,6 +4349,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Forrige fane</translation>
 <translation id="7748626145866214022">Der er flere tilgængelige muligheder på handlingslinjen. Tryk på Alt+A for at fokusere på handlingslinjen.</translation>
+<translation id="7750228210027921155">Integreret billede</translation>
 <translation id="7751260505918304024">Vis alle</translation>
 <translation id="7754704193130578113">Spørg, hvor hver enkelt fil skal gemmes, inden download begynder</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4438,6 +4457,7 @@
 <translation id="7857949311770343000">Er dette den forventede side Ny fane?</translation>
 <translation id="786073089922909430">Tjeneste: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Downloads</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}one{# cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> er parret</translation>
 <translation id="7870730066603611552">Gennemgå indstillingerne for synkronisering efter konfigurationen</translation>
 <translation id="7870790288828963061">Der blev ikke fundet nogen terminalapps med en nyere version. Intet at opdatere. Fjern USB-stikket.</translation>
@@ -4759,6 +4779,7 @@
 <translation id="8373553483208508744">Slå fanernes lyd fra</translation>
 <translation id="8382913212082956454">Kopier &amp;e-mailadresse</translation>
 <translation id="8386903983509584791">Scanningen er udført</translation>
+<translation id="8389492867173948260">Tillad, at denne udvidelse læser og ændrer alle dine data på websites, du besøger:</translation>
 <translation id="8390449457866780408">Serveren er utilgængelig.</translation>
 <translation id="8391712576156218334">Billedet er ikke tilgængeligt. Prøv igen senere.</translation>
 <translation id="8392234662362215700">Tryk på Ctrl+Shift+mellemrumstasten for at skifte tastaturlayout.</translation>
@@ -4790,6 +4811,7 @@
 <translation id="84297032718407999">Du logges ud om <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Skift pinkode til SIM-kort</translation>
 <translation id="8434480141477525001">NaCl-fejlretningsport</translation>
+<translation id="8435395510592618362">Bekræft din identitet med <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Gem kreditkort</translation>
 <translation id="8438328416656800239">Skift til en smart browser</translation>
 <translation id="8438566539970814960">Gør søgninger og browsing endnu bedre</translation>
@@ -4816,6 +4838,7 @@
 <translation id="8465252176946159372">Ikke gyldig</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> kræver din tilladelse for at køre</translation>
 <translation id="8466234950814670489">Tar-arkiv</translation>
+<translation id="8466417995783206254">Denne fane afspiller en video i tilstanden med integreret billede.</translation>
 <translation id="8468750959626135884">Lås din <ph name="DEVICE_TYPE" /> op med din Android-telefon.</translation>
 <translation id="8470028084415844044">Aktivér synkronisering for at få alle dine adgangskoder på alle dine enheder.</translation>
 <translation id="8470513973197838199">Gemte adgangskoder til <ph name="ORIGIN" /></translation>
@@ -4836,6 +4859,7 @@
 <translation id="8496717697661868878">Kør dette plugin</translation>
 <translation id="8497219075884839166">Windows-værktøjer</translation>
 <translation id="8498214519255567734">Gør din skærm mere behagelig at læse eller se på i svag belysning</translation>
+<translation id="8498395510292172881">Fortsæt læsningen i Chrome</translation>
 <translation id="8503813439785031346">Brugernavn</translation>
 <translation id="850875081535031620">Der blev ikke fundet skadelig software</translation>
 <translation id="8509646642152301857">Download af ordbog til stavekontrol mislykkedes.</translation>
@@ -4986,7 +5010,6 @@
 <translation id="8725066075913043281">Forsøg igen</translation>
 <translation id="8725178340343806893">Foretrukne/Bogmærker</translation>
 <translation id="8726206820263995930">Fejl ved hentning af politikindstillinger fra serveren: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Vis ikke denne underretning igen</translation>
 <translation id="8727344521467137076">Der er skadelig software på din computer. Chrome sletter den og gendanner dine indstillinger, så din browser fungerer normalt igen.</translation>
 <translation id="8730621377337864115">Udfør</translation>
 <translation id="8732030010853991079">Brug denne udvidelse ved at klikke på dette ikon.</translation>
@@ -5178,6 +5201,7 @@
 <translation id="9027459031423301635">Åbn link på ny &amp;fane</translation>
 <translation id="9030515284705930323">Din organisation har ikke aktiveret Google Play Butik for din konto. Kontakt din administrator for at få yderligere oplysninger.</translation>
 <translation id="9033857511263905942">&amp;Indsæt</translation>
+<translation id="9034924485347205037">Linux-filer</translation>
 <translation id="9035012421917565900">Elementerne kan ikke flyttes tilbage til "<ph name="DESTINATION_NAME" />", så du kan ikke fortryde denne handling.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Vis oprindelig</translation>
@@ -5278,6 +5302,7 @@
 <translation id="9173995187295789444">Søger efter Bluetooth-enheder...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – en Bluetooth-enhed er forbundet</translation>
 <translation id="9177499212658576372">Du har i øjeblikket forbindelse til netværket <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Konfigurer Linux (beta) på din <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Denne proces kan tage et par minutter. Linux-containeren startes.</translation>
 <translation id="9180380851667544951">Websitet kan dele din skærm</translation>
 <translation id="9188441292293901223">Opdater din telefon til en nyere version af Android for at låse denne <ph name="DEVICE_TYPE" /> op.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index 8893694e..279d3d8 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Vor dem Zugriff nachfragen</translation>
 <translation id="1434696352799406980">Mit dieser Funktion werden Ihre "Beim Start"-Seite, Ihre Suchmaschine, die "Neuer Tab"-Seite und angeheftete Tabs zurückgesetzt. Außerdem werden alle Erweiterungen deaktiviert und temporäre Daten wie Cookies gelöscht. Ihre Lesezeichen, der Verlauf und gespeicherte Passwörter werden nicht gelöscht.</translation>
 <translation id="1434886155212424586">Die "Neuer Tab"-Seite ist die Startseite.</translation>
+<translation id="1436671784520050284">Einrichtung fortsetzen</translation>
 <translation id="1436784010935106834">Entfernt</translation>
 <translation id="1438632560381091872">Stummschaltung der Tabs aufheben</translation>
 <translation id="1442392616396121389">Routing-Präfix</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzascheibe</translation>
 <translation id="1467432559032391204">Links</translation>
 <translation id="1468571364034902819">Dieses Profil kann nicht verwendet werden</translation>
+<translation id="1470533772306424441">Wir installieren diese Apps für Sie. Weitere Apps für Ihr Gerät finden Sie im Play Store.</translation>
 <translation id="1470811252759861213">Um die Erweiterungen auf allen Ihren Computern zu nutzen, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" konnte nicht hochgeladen werden. In Ihrem Google Drive-Konto ist nicht genügend Speicherplatz frei.</translation>
 <translation id="1475502736924165259">Einige Ihrer gespeicherten Zertifikate passen zu keiner der anderen Kategorien</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">Ver&amp;kleinern</translation>
 <translation id="1830550083491357902">Nicht angemeldet</translation>
 <translation id="1832511806131704864">Änderung übernommen</translation>
-<translation id="1832685970989658809">Ihr Administrator hat gespeicherte Zahlungsmethoden deaktiviert</translation>
 <translation id="1834503245783133039">Download fehlgeschlagen: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Suche löschen</translation>
 <translation id="1838709767668011582">Google Sites-Website</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">von</translation>
 <translation id="2193365732679659387">Vertrauenseinstellungen</translation>
 <translation id="2195729137168608510">E-Mail-Schutz</translation>
+<translation id="2199298570273670671">Fehler</translation>
 <translation id="2200356397587687044">Chrome benötigt eine Berechtigung, um fortzufahren</translation>
 <translation id="220138918934036434">Schaltfläche ausblenden</translation>
 <translation id="2202898655984161076">Problem beim Erstellen der Druckerliste. Einige Ihrer Drucker wurden möglicherweise nicht richtig bei <ph name="CLOUD_PRINT_NAME" /> registriert.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">Passwort anzeigen</translation>
 <translation id="2436186046335138073">Öffnen aller <ph name="PROTOCOL" />-Links durch <ph name="HANDLER_HOSTNAME" /> zulassen?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Messung der Datennutzung beendet</translation>
 <translation id="2440604414813129000">Quelltext an&amp;zeigen</translation>
 <translation id="2445081178310039857">Stammverzeichnis der Erweiterung ist erforderlich.</translation>
 <translation id="2445484935443597917">Neues Profil erstellen</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> möchte Ihre Identität überprüfen</translation>
 <translation id="2448312741937722512">Art</translation>
 <translation id="2450223707519584812">Sie können keine Nutzer hinzufügen, da Google API-Schlüssel fehlen. Weitere Informationen erhalten Sie unter <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Synchronisierung deaktivieren und abmelden?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">Datei bereits vorhanden</translation>
 <translation id="2453860139492968684">Fertig</translation>
 <translation id="2454247629720664989">Suchkürzel</translation>
+<translation id="245661998428026871">Die Wiedergabe des Videos im Bild-im-Bild-Modus wird gestoppt.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> möchte Dateien von <ph name="VOLUME_NAME" /> kopieren.</translation>
 <translation id="2462724976360937186">Schlüssel-ID der Zertifizierungsstelle</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> hinzugefügt</translation>
@@ -1358,6 +1361,7 @@
 <translation id="304826556400666995">Stummschaltung der Tabs aufheben</translation>
 <translation id="3053013834507634016">Zertifikatschlüsselverwendung</translation>
 <translation id="3057861065630527966">Fotos und Videos sichern</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Vorlesen aktivieren</translation>
 <translation id="3061707000357573562">Patchdienst</translation>
 <translation id="3064410671692449875">Daten reichen nicht aus</translation>
@@ -1406,6 +1410,7 @@
 <translation id="313205617302240621">Passwort vergessen?</translation>
 <translation id="3132996321662585180">Täglich aktualisieren</translation>
 <translation id="3135204511829026971">Bildschirm drehen</translation>
+<translation id="313638818480447860">Es wurden <ph name="NUMBER_OF_APPS" /> Apps gefunden, die mit Ihrem Konto verbunden und für dieses Gerät optimiert sind.</translation>
 <translation id="313963229645891001">Wird heruntergeladen, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Gelber Standardavatar</translation>
 <translation id="3140353188828248647">Adressleiste fokussieren</translation>
@@ -1436,6 +1441,7 @@
 <translation id="3182749001423093222">Rechtschreibprüfung</translation>
 <translation id="3183139917765991655">Profilimport</translation>
 <translation id="3184560914950696195">Fehler beim Speichern unter $1. Bearbeitete Bilder werden im Ordner "Downloads" gespeichert.</translation>
+<translation id="3188257591659621405">Meine Dateien</translation>
 <translation id="3188465121994729530">Gleitender Durchschnitt</translation>
 <translation id="3190558889382726167">Passwort gespeichert</translation>
 <translation id="3192947282887913208">Audiodateien</translation>
@@ -1523,6 +1529,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> wird gezippt...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">App-Info</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – Video wird im Bild-im-Bild-Modus abgespielt</translation>
 <translation id="3335337277364016868">Aufnahmejahr</translation>
 <translation id="3335947283844343239">Geschlossenen Tab wieder öffnen</translation>
 <translation id="3336664756920573711">Sie können Ihr <ph name="DEVICE_TYPE" /> mit Ihrem Android-Smartphone entsperren</translation>
@@ -1542,6 +1549,7 @@
 <translation id="3360297538363969800">Fehler beim Drucken. Bitte überprüfen Sie Ihren Drucker und versuchen Sie es erneut.</translation>
 <translation id="3364721542077212959">Eingabestift-Tools</translation>
 <translation id="3365598184818502391">Verwenden Sie entweder Strg oder Alt</translation>
+<translation id="3367047597842238025">Hier können Sie Ihr <ph name="DEVICE_TYPE" /> einrichten, wie Sie möchten, und alle die großartigen Funktionen entdecken.</translation>
 <translation id="3368922792935385530">Verbunden</translation>
 <translation id="3369624026883419694">Host auflösen...</translation>
 <translation id="337286756654493126">Ordner lesen, die Sie in der Anwendung öffnen</translation>
@@ -1555,6 +1563,7 @@
 <translation id="3389312115541230716">Klicken Sie mit der rechten Maustaste auf das Symbol <ph name="SMALL_PRODUCT_LOGO" /> in der Taskleiste</translation>
 <translation id="3391716558283801616">Tab 7</translation>
 <translation id="3396331542604645348">Der ausgewählte Drucker ist entweder nicht verfügbar oder nicht ordnungsgemäß installiert. Überprüfen Sie den Drucker oder wählen Sie einen anderen Drucker aus.</translation>
+<translation id="3396800784455899911">Wenn Sie auf die Schaltfläche "Akzeptieren und fortfahren" klicken, willigen Sie damit in die oben für diese Google-Dienste beschriebene Verarbeitung Ihrer Daten ein.</translation>
 <translation id="3399432415385675819">Benachrichtigungen werden deaktiviert</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Für diese Website sind keine Passwörter gespeichert</translation>
@@ -1783,10 +1792,13 @@
 <translation id="3726463242007121105">Dieses Gerät kann nicht geöffnet werden, da das zugehörige Dateisystem nicht unterstützt wird.</translation>
 <translation id="3727148787322499904">Änderungen dieser Einstellung wirken sich auf alle freigegebenen Netzwerke aus</translation>
 <translation id="3727187387656390258">Pop-up prüfen</translation>
+<translation id="3729506734996624908">Erlaubte Websites</translation>
 <translation id="3732078975418297900">Fehler in Zeile <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-Server mit Step-up</translation>
+<translation id="3735740477244556633">Sortieren nach</translation>
 <translation id="3737274407993947948">Fehler beim Installieren von Linux…</translation>
 <translation id="3737536731758327622">Hier werden Ihre Downloads angezeigt</translation>
+<translation id="3738671331307774213">Wenn Ihre Identität überprüft wird, hilft dies, Ihre private Daten zu schützen</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> öffnen?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> erscheint nun in der Admin-Konsole.</translation>
@@ -1871,10 +1883,10 @@
 <translation id="3846116211488856547">Tools für die Entwicklung erhalten, z. B. von Websites und Android-Apps. Für die Installation von Linux werden <ph name="DOWNLOAD_SIZE" /> an Daten heruntergeladen.</translation>
 <translation id="385051799172605136">Zurück</translation>
 <translation id="3851428669031642514">Unsichere Skripts laden</translation>
+<translation id="3854599674806204102">Wählen Sie eine Option aus</translation>
 <translation id="3855441664322950881">Erweiterung packen</translation>
 <translation id="3855676282923585394">Lesezeichen und Einstellungen importieren...</translation>
 <translation id="3856800405688283469">Zeitzone auswählen</translation>
-<translation id="3856921555429624101">Messung der Datennutzung ist beendet</translation>
 <translation id="3857228364945137633">Mit Smart Lock können Sie Ihr <ph name="DEVICE_TYPE" /> ohne Passwort entsperren, wenn Ihr Smartphone in der Nähe ist.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Synchronisierung pausiert</translation>
@@ -2245,7 +2257,6 @@
 <translation id="4508051413094283164">Alle in Inkognitofenster öffnen</translation>
 <translation id="4508265954913339219">Aktivierung fehlgeschlagen</translation>
 <translation id="4508765956121923607">Q&amp;uelle anzeigen</translation>
-<translation id="4509823033118379431">Die Bilder sind momentan nicht verfügbar. Verbinden Sie sich noch einmal, um sich die Sammlungen anzusehen.</translation>
 <translation id="451407183922382411">Powered by <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Neuen betreuten Nutzer einrichten</translation>
 <translation id="4514610446763173167">Video wiedergeben oder pausieren</translation>
@@ -2322,6 +2333,7 @@
 <translation id="4627442949885028695">Auf einem anderen Gerät fortsetzen</translation>
 <translation id="4628314759732363424">Ändern...</translation>
 <translation id="4628757576491864469">Geräte</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Ungültiges Zeichen: $1</translation>
 <translation id="4631887759990505102">Musiker</translation>
 <translation id="4632483769545853758">Stummschaltung des Tabs aufheben</translation>
@@ -2507,7 +2519,6 @@
 <translation id="4905417359854579806">Bereit zum Sichern von <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Diese Datei ist ein ungewöhnlicher Download und könnte schädlich sein.</translation>
 <translation id="4907306957610201395">Berechtigungskategorie</translation>
-<translation id="4907824805858067479">Die Funktion "Gespeicherte Karten" wurde von Ihrem Administrator deaktiviert</translation>
 <translation id="4908811072292128752">Wenn Sie zwei Websites gleichzeitig ansehen möchten, öffnen Sie einen neuen Tab</translation>
 <translation id="4909038193460299775">Da dieses Konto von <ph name="DOMAIN" /> verwaltet wird, werden Ihr Verlauf sowie Ihre Lesezeichen, Passwörter und sonstigen Einstellungen von diesem Gerät gelöscht. Die Daten bleiben jedoch in Ihrem Google-Konto gespeichert und Sie können sie über das <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" /> verwalten.</translation>
 <translation id="4909359680501173791">Sie sind angemeldet</translation>
@@ -2539,6 +2550,7 @@
 <translation id="4955814292505481804">Jährlich</translation>
 <translation id="4957949153200969297">Nur Funktionen aktivieren, die zur <ph name="IDS_SHORT_PRODUCT_NAME" />-Synchronisierung gehören</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Alle Ihre Karten an einem Ort speichern</translation>
 <translation id="496226124210045887">Der ausgewählte Ordner enthält sensible Dateien. Möchten Sie "$1" wirklich dauerhaft Lesezugriff auf diesen Ordner gewähren?</translation>
 <translation id="4964455510556214366">Anordnung</translation>
 <translation id="4964673849688379040">Wird überprüft...</translation>
@@ -2586,6 +2598,7 @@
 <translation id="5027562294707732951">Erweiterung hinzufügen</translation>
 <translation id="5029568752722684782">Kopie löschen</translation>
 <translation id="5030338702439866405">Ausgestellt von</translation>
+<translation id="503155457707535043">Apps werden heruntergeladen</translation>
 <translation id="503498442187459473"><ph name="HOST" /> möchte Ihre Kamera und Ihr Mikrofon verwenden</translation>
 <translation id="5036662165765606524">Keiner Website gestatten, automatisch mehrere Dateien herunterzuladen</translation>
 <translation id="5037676449506322593">Alle auswählen</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">Stummschalten</translation>
 <translation id="5785583009707899920">Dienstprogramme für Chrome-spezifische Dateivorgänge</translation>
 <translation id="5787146423283493983">Schlüsselvereinbarung</translation>
+<translation id="5788127256798019331">Google Play-Dateien</translation>
 <translation id="5788367137662787332">Mindestens eine Partition auf dem Gerät <ph name="DEVICE_LABEL" /> konnte nicht bereitgestellt werden.</translation>
 <translation id="5794414402486823030">Immer mit System Viewer öffnen</translation>
 <translation id="5794786537412027208">Alle Chrome-Apps beenden</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">Übersetzt</translation>
 <translation id="5991049340509704927">Vergrößern</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Bitten Sie den Administrator, diese Anwendung zu entfernen, damit Sie weiterhin im Web surfen können.}other{Bitten Sie den Administrator, diese Anwendungen zu entfernen, damit Sie weiterhin im Web surfen können.}}</translation>
-<translation id="5993332328670040093">Ihre Datennutzung wird nicht mehr gemessen.</translation>
 <translation id="6002458620803359783">Bevorzugte Stimmen</translation>
 <translation id="6005695835120147974">Media Router</translation>
 <translation id="6006484371116297560">Klassisch</translation>
@@ -3353,6 +3366,7 @@
 <translation id="6178664161104547336">Zertifikat auswählen</translation>
 <translation id="6181431612547969857">Download blockiert</translation>
 <translation id="6185132558746749656">Gerätestandort</translation>
+<translation id="6185617499004995178">CUPS-IPP-Validierung</translation>
 <translation id="6185696379715117369">Bildlauf nach oben</translation>
 <translation id="6189273858858366896">Netzwerkfreigaben einrichten oder verwalten.</translation>
 <translation id="6189412234224385711">Öffnen mit <ph name="EXTENSION_NAME" /></translation>
@@ -3385,6 +3399,7 @@
 <translation id="6231881193380278751">Abfrageparameter in URL zum automatischen Aktualisieren der Seite hinzufügen: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Akku</translation>
 <translation id="6232116551750539448">Verbindung mit <ph name="NAME" /> wurde unterbrochen.</translation>
+<translation id="6235700927623181151">Dieser Tab enthält Ihre Desktopinhalte.</translation>
 <translation id="6237816943013845465">Ermöglicht die Anpassung der Bildschirmauflösung</translation>
 <translation id="6238923052227198598">Neueste Notiz auf Sperrbildschirm anzeigen</translation>
 <translation id="6239558157302047471">&amp;Frame neu laden</translation>
@@ -3419,7 +3434,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> ist ein ungewöhnlicher Download und könnte schädlich sein.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Neuer Drucker in Ihrem Netzwerk gefunden}other{Neue Drucker in Ihrem Netzwerk gefunden}}</translation>
-<translation id="6286684120317096255">Die Datennutzung wird gemessen.</translation>
 <translation id="6286708577777130801">Gespeicherte Passwortdetails</translation>
 <translation id="6287852322318138013">App zum Öffnen der Datei auswählen</translation>
 <translation id="6289452883081499048">Personalisierte Google-Dienste wie Play</translation>
@@ -3530,6 +3544,7 @@
 <translation id="6451180435462401570">Cloud Print-Geräte verwalten</translation>
 <translation id="6451689256222386810">Wenn Sie Ihre Passphrase vergessen haben oder diese Einstellung ändern möchten, <ph name="BEGIN_LINK" />setzen Sie die Synchronisierung zurück<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Ablehnen</translation>
+<translation id="6455264371803474013">Auf bestimmten Websites</translation>
 <translation id="6455894534188563617">&amp;Neuer Ordner</translation>
 <translation id="6456394469623773452">In Ordnung</translation>
 <translation id="6456631036739229488">Das Smartphone für Smart Lock wurde geändert. Geben Sie Ihr Passwort ein, um Smart Lock zu aktualisieren. Das nächste Mal wird Ihr <ph name="DEVICE_TYPE" /> von Ihrem Smartphone entsperrt. Sie können Smart Lock bei Bedarf jederzeit in den Einstellungen deaktivieren.</translation>
@@ -3607,6 +3622,7 @@
 <translation id="657402800789773160">&amp;Diese Seite neu laden</translation>
 <translation id="6577284282025554716">Download abgebrochen: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Synchronisierte Passwörter mit meinem Google-Nutzernamen und meinem Passwort verschlüsseln</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Desktopinhalte geteilt</translation>
 <translation id="6580151766480067746">ARC-Version</translation>
 <translation id="6581162200855843583">Google Drive-Link</translation>
 <translation id="6582421931165117398">Ändern Sie jetzt Ihr Passwort, um Ihre persönlichen Informationen zu schützen. Bevor Sie Ihr Passwort ändern können, werden Sie aufgefordert, sich anzumelden.</translation>
@@ -4073,6 +4089,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Diese Anwendung könnte verhindern, dass Chrome wie vorgesehen funktioniert.}other{Diese Anwendungen könnten verhindern, dass Chrome wie vorgesehen funktioniert.}}</translation>
 <translation id="7303900363563182677">Diese Website wurde daran gehindert, Texte und Bilder aus der Zwischenablage abzurufen</translation>
 <translation id="730515362922783851">Daten mit einem beliebigen Gerät im lokalen Netzwerk oder Internet austauschen</translation>
+<translation id="7307129035224081534">Pausiert</translation>
 <translation id="7308002049209013926">Über den Launcher gelangen Sie schnell zu neuen Apps und Aktivitäten. Zum Öffnen über die Tastatur drücken Sie Alt + Umschalttaste + L.</translation>
 <translation id="7309257895202129721">&amp;Steuerelemente anzeigen</translation>
 <translation id="7310598146671372464">Fehler beim Anmelden. Der Server unterstützt keine angegebenen Kerberos-Verschlüsselungstypen. Bitte wenden Sie sich an Ihren Administrator.</translation>
@@ -4130,7 +4147,6 @@
 <translation id="7400839060291901923">Verbindung auf <ph name="PHONE_NAME" /> einrichten</translation>
 <translation id="740624631517654988">Pop-up blockiert</translation>
 <translation id="7407430846095439694">Importieren und binden</translation>
-<translation id="7409233648990234464">Neustart und Powerwash</translation>
 <translation id="7409836189476010449">Flash ausführen</translation>
 <translation id="7410344089573941623">Nachfragen, wenn <ph name="HOST" /> auf Kamera und Mikrofon zugreifen möchte</translation>
 <translation id="741204030948306876">Ja, bitte</translation>
@@ -4163,6 +4179,7 @@
 <translation id="7465778193084373987">URL zum Zurückrufen von Netscape-Zertifikaten</translation>
 <translation id="7469894403370665791">Verbindung zu diesem Netzwerk automatisch herstellen</translation>
 <translation id="747114903913869239">Fehler: Erweiterung kann nicht entschlüsselt werden.</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> einrichten</translation>
 <translation id="7473891865547856676">Nein danke</translation>
 <translation id="747459581954555080">Alle wiederherstellen</translation>
 <translation id="7475671414023905704">Netscape-URL für vergessene Passwörter</translation>
@@ -4287,6 +4304,7 @@
 <translation id="7665369617277396874">Konto hinzufügen</translation>
 <translation id="7671130400130574146">Titelleiste und Ränder des Systems verwenden</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> auf <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Ihre Spracheingaben werden an Google gesendet, damit sie in das entsprechende Textfeld eingetragen werden können.</translation>
 <translation id="7681095912841365527">Website kann Bluetooth verwenden</translation>
 <translation id="7683373461016844951">Um fortzufahren, klicken Sie auf OK. Klicken Sie dann auf "Person hinzufügen", um ein neues Profil für Ihre E-Mail-Adresse bei <ph name="DOMAIN" /> zu erstellen.</translation>
 <translation id="7684212569183643648">Von Ihrem Administrator installiert</translation>
@@ -4328,6 +4346,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Vorheriger Tab</translation>
 <translation id="7748626145866214022">Auf der Aktionsleiste sind weitere Optionen verfügbar. Drücken Sie Alt + A, um den Fokus auf die Aktionsleiste zu setzen.</translation>
+<translation id="7750228210027921155">Bild-in-Bild</translation>
 <translation id="7751260505918304024">Alle anzeigen</translation>
 <translation id="7754704193130578113">Vor dem Download von Dateien nach dem Speicherort fragen</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4436,6 +4455,7 @@
 <translation id="7857949311770343000">Ist das die "Neuer Tab"-Seite, die Sie erwartet hatten?</translation>
 <translation id="786073089922909430">Dienst: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Downloads</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 Cookie}other{# Cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – gekoppelt</translation>
 <translation id="7870730066603611552">Synchronisierungsoptionen nach der Einrichtung überprüfen</translation>
 <translation id="7870790288828963061">Es wurden keine Kiosk-Apps mit neuerer Version gefunden. Es sind keine Updates vorhanden. Bitte entfernen Sie den USB-Stick.</translation>
@@ -4758,6 +4778,7 @@
 <translation id="8373553483208508744">Tabs stummschalten</translation>
 <translation id="8382913212082956454">E-Mail-Adr&amp;esse kopieren</translation>
 <translation id="8386903983509584791">Suche abgeschlossen</translation>
+<translation id="8389492867173948260">Dieser Erweiterung erlauben, alle Ihre Daten auf von Ihnen besuchten Websites zu lesen und zu ändern:</translation>
 <translation id="8390449457866780408">Der Server ist nicht verfügbar.</translation>
 <translation id="8391712576156218334">Bild ist nicht verfügbar. Versuchen Sie es später noch einmal.</translation>
 <translation id="8392234662362215700">Drücken Sie Strg + Umschalttaste + Leertaste, um das Tastaturlayout zu ändern.</translation>
@@ -4789,6 +4810,7 @@
 <translation id="84297032718407999">Sie werden in <ph name="LOGOUT_TIME_LEFT" /> abgemeldet</translation>
 <translation id="8431909052837336408">PIN der SIM-Karte ändern</translation>
 <translation id="8434480141477525001">NaCl-Debug-Port</translation>
+<translation id="8435395510592618362">Ihre Identität mit <ph name="APP_NAME" /> bestätigen</translation>
 <translation id="843760761634048214">Kreditkarte speichern</translation>
 <translation id="8438328416656800239">Steigen Sie auf einen intelligenten Browser um</translation>
 <translation id="8438566539970814960">Suchanfragen und das Surfen verbessern</translation>
@@ -4815,6 +4837,7 @@
 <translation id="8465252176946159372">Ungültig</translation>
 <translation id="8465444703385715657">Zum Ausführen von <ph name="PLUGIN_NAME" /> ist Ihre Genehmigung erforderlich</translation>
 <translation id="8466234950814670489">Tar-Archiv</translation>
+<translation id="8466417995783206254">Auf diesem Tab wird ein Video im Bild-im-Bild-Modus abgespielt.</translation>
 <translation id="8468750959626135884">Entsperren Sie Ihr <ph name="DEVICE_TYPE" /> mit Ihrem Android-Smartphone.</translation>
 <translation id="8470028084415844044">Wenn Sie Ihre Passwörter auf allen Ihren Geräten verfügbar haben möchten, aktivieren Sie die Synchronisierung.</translation>
 <translation id="8470513973197838199">Gespeicherte Passwörter für <ph name="ORIGIN" /></translation>
@@ -4835,6 +4858,7 @@
 <translation id="8496717697661868878">Dieses Plug-in ausführen</translation>
 <translation id="8497219075884839166">Windows-Dienstprogramme</translation>
 <translation id="8498214519255567734">Der Bildschirm ist bei schwachem Licht nicht störend hell und kann leichter gelesen werden</translation>
+<translation id="8498395510292172881">In Chrome weiterlesen</translation>
 <translation id="8503813439785031346">Nutzername</translation>
 <translation id="850875081535031620">Keine schädliche Software gefunden</translation>
 <translation id="8509646642152301857">Beim Herunterladen des Wörterbuchs für die Rechtschreibprüfung ist ein Fehler aufgetreten.</translation>
@@ -4985,7 +5009,6 @@
 <translation id="8725066075913043281">Erneut versuchen</translation>
 <translation id="8725178340343806893">Favoriten/Lesezeichen</translation>
 <translation id="8726206820263995930">Fehler beim Übertragen von Richtlinieneinstellungen vom Server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Nicht mehr anzeigen</translation>
 <translation id="8727344521467137076">Schädliche Software wurde auf Ihrem Computer gefunden. Chrome entfernt diese Software und stellt Ihre Einstellungen wieder her, sodass Ihr Browser wieder wie gewohnt funktioniert.</translation>
 <translation id="8730621377337864115">Fertig</translation>
 <translation id="8732030010853991079">Klicken Sie auf dieses Symbol, um die Erweiterung zu verwenden.</translation>
@@ -5176,6 +5199,7 @@
 <translation id="9027459031423301635">Link in neuem Tab öffnen</translation>
 <translation id="9030515284705930323">Ihre Organisation hat den Google Play Store für Ihr Konto nicht aktiviert. Weitere Informationen erhalten Sie von Ihrem Administrator.</translation>
 <translation id="9033857511263905942">&amp;Einfügen</translation>
+<translation id="9034924485347205037">Linux-Dateien</translation>
 <translation id="9035012421917565900">Diese Elemente können nicht in "<ph name="DESTINATION_NAME" />" zurückverschoben werden. Diese Aktion lässt sich also nicht rückgängig machen.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Original anzeigen</translation>
@@ -5277,6 +5301,7 @@
 <translation id="9173995187295789444">Nach Bluetooth-Geräten wird gesucht…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth-Gerät verbunden</translation>
 <translation id="9177499212658576372">Sie sind derzeit mit dem <ph name="NETWORK_TYPE" />-Netzwerk verbunden.</translation>
+<translation id="9179734824669616955">Linux (Beta) auf Ihrem <ph name="DEVICE_TYPE" /> einrichten</translation>
 <translation id="9180281769944411366">Der Vorgang kann einige Minuten dauern. Linux-Container wird gestartet.</translation>
 <translation id="9180380851667544951">Die Website kann Ihren Bildschirm freigeben</translation>
 <translation id="9188441292293901223">Bitte aktualisieren Sie Ihr Telefon auf eine neuere Android-Version, um dieses <ph name="DEVICE_TYPE" /> zu entsperren.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index 515a311..5115693 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Ερώτηση πριν από την πρόσβαση</translation>
 <translation id="1434696352799406980">Με αυτήν την ενέργεια, θα γίνει επαναφορά της σελίδας εκκίνησης, της σελίδας σε νέα καρτέλα, της μηχανής αναζήτησης και των καρφιτσωμένων καρτελών σας. Επιπλέον, θα απενεργοποιηθούν όλες οι επεκτάσεις και θα γίνει διαγραφή των προσωρινών δεδομένων σας, όπως είναι τα cookie. Οι σελιδοδείκτες, το ιστορικό και οι αποθηκευμένοι κωδικοί πρόσβασής σας δεν θα διαγραφούν.</translation>
 <translation id="1434886155212424586">Η αρχική σελίδα είναι η σελίδα "Νέα καρτέλα"</translation>
+<translation id="1436671784520050284">Συνέχιση ρύθμισης</translation>
 <translation id="1436784010935106834">Καταργήθηκαν</translation>
 <translation id="1438632560381091872">Κατάργηση σίγασης καρτελών</translation>
 <translation id="1442392616396121389">Πρόθημα δρομολόγησης</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Κομμάτι πίτσα</translation>
 <translation id="1467432559032391204">Αριστερά</translation>
 <translation id="1468571364034902819">Δεν είναι δυνατή η χρήση αυτού του προφίλ</translation>
+<translation id="1470533772306424441">Θα εγκαταστήσουμε αυτές τις εφαρμογές για εσάς. Μπορείτε να βρείτε περισσότερες εφαρμογές για τη συσκευή σας στο Play Store.</translation>
 <translation id="1470811252759861213">Για να εμφανίζονται οι επεκτάσεις σε όλους τους υπολογιστές, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Το αρχείο "<ph name="FILENAME" />" δεν ανέβηκε. Δεν υπάρχει επαρκής ελεύθερος χώρος στο Google Drive σας.</translation>
 <translation id="1475502736924165259">Έχετε καταχωρίσει πιστοποιητικά που δεν αντιστοιχούν σε καμία από τις άλλες κατηγορίες</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Σμίκρυνση</translation>
 <translation id="1830550083491357902">Δεν είναι συνδεδεμένος</translation>
 <translation id="1832511806131704864">Η αλλαγή του τηλεφώνου ενημερώθηκε</translation>
-<translation id="1832685970989658809">Οι αποθηκευμένοι τρόποι πληρωμής απενεργοποιήθηκαν από τον διαχειριστή σας</translation>
 <translation id="1834503245783133039">Ανεπιτυχής λήψη: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Διαγραφή αναζητήσεων</translation>
 <translation id="1838709767668011582">Ιστότοπος Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Από:</translation>
 <translation id="2193365732679659387">Ρυθμίσεις αξιοπιστίας</translation>
 <translation id="2195729137168608510">Προστασία ηλεκτρονικού ταχυδρομείου</translation>
+<translation id="2199298570273670671">Σφάλμα</translation>
 <translation id="2200356397587687044">Το Chrome χρειάζεται άδεια για να συνεχίσει</translation>
 <translation id="220138918934036434">Απόκρυψη κουμπιού</translation>
 <translation id="2202898655984161076">Προέκυψε πρόβλημα κατά την καταχώριση εκτυπωτών. Μερικοί από τους εκτυπωτές σας ενδέχεται να μην έχουν καταχωρηθεί σωστά με το <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Εμφάνιση κωδικού πρόσβασης</translation>
 <translation id="2436186046335138073">Να επιτρέπεται στο <ph name="HANDLER_HOSTNAME" /> το άνοιγμα όλων των συνδέσμων <ph name="PROTOCOL" />;</translation>
 <translation id="2436707352762155834">Ελάχιστο</translation>
-<translation id="2437139306601019091">Η μέτρηση της χρήσης δεδομένων έληξε</translation>
 <translation id="2440604414813129000">Προβολή κώ&amp;δικα</translation>
 <translation id="2445081178310039857">Απαιτείται ο κατάλογος ρίζας επέκτασης.</translation>
 <translation id="2445484935443597917">Δημιουργία νέου προφίλ</translation>
+<translation id="2446585455334014596">Η εφαρμογή <ph name="APP_NAME" /> θέλει να επαληθεύσει την ταυτότητά σας</translation>
 <translation id="2448312741937722512">Τύπος</translation>
 <translation id="2450223707519584812">Δεν θα μπορείτε να προσθέσετε χρήστες, επειδή απουσιάζουν τα κλειδιά του Google API. Για λεπτομέρειες, ανατρέξτε στη διεύθυνση <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Απενεργοποίηση συγχρονισμού και αποσύνδεση;</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Το αρχείο υπάρχει ήδη</translation>
 <translation id="2453860139492968684">Τέλος</translation>
 <translation id="2454247629720664989">Λέξη-κλειδί</translation>
+<translation id="245661998428026871">Θα σταματήσει η αναπαραγωγή του βίντεο στη λειτουργία picture-in-picture.</translation>
 <translation id="2457246892030921239">Η εφαρμογή <ph name="APP_NAME" /> θέλει να αντιγράψει αρχεία από <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Αναγνωριστικό κλειδιού Αρχής πιστοποίησης</translation>
 <translation id="2462752602710430187">Προστέθηκε <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Κατάργηση σίγασης καρτελών</translation>
 <translation id="3053013834507634016">Χρήση κλειδιού πιστοποιητικού</translation>
 <translation id="3057861065630527966">Δημιουργία αντιγράφων ασφαλείας για τις φωτογραφίες και τα βίντεό σας</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Ενεργοποίηση λειτουργίας "Επιλέξτε για εκφώνηση"</translation>
 <translation id="3061707000357573562">Υπηρεσία ενημέρωσης κώδικα</translation>
 <translation id="3064410671692449875">Ανεπαρκή δεδομένα</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Ξεχάσατε τον κωδικό πρόσβασής σας;</translation>
 <translation id="3132996321662585180">Ανανέωση καθημερινά</translation>
 <translation id="3135204511829026971">Περιστροφή οθόνης</translation>
+<translation id="313638818480447860">Βρήκαμε <ph name="NUMBER_OF_APPS" /> εφαρμογές οι οποίες έχουν συνδεθεί στον λογαριασμό σας και έχουν βελτιστοποιηθεί για αυτήν τη συσκευή.</translation>
 <translation id="313963229645891001">Λήψη: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Προεπιλεγμένο κίτρινο avatar</translation>
 <translation id="3140353188828248647">Εστίαση γραμμής διευθύνσεων</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Ορθογραφικός έλεγχος</translation>
 <translation id="3183139917765991655">Εργαλείο εισαγωγής προφίλ</translation>
 <translation id="3184560914950696195">Δεν είναι δυνατή η αποθήκευση στο $1. Οι επεξεργασμένες εικόνες θα αποθηκεύονται στο φάκελο "Λήψεις".</translation>
+<translation id="3188257591659621405">Τα αρχεία μου</translation>
 <translation id="3188465121994729530">Μετακίνηση μέσου όρου</translation>
 <translation id="3190558889382726167">Ο κωδικός πρόσβασης αποθηκεύτηκε</translation>
 <translation id="3192947282887913208">Αρχεία ήχου</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Συμπίεση αρχείου <ph name="FILE_NAME" />…</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Πληροφορίες εφαρμογής</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Αναπαραγωγή βίντεο στη λειτουργία picture-in-picture</translation>
 <translation id="3335337277364016868">Έτος ηχογράφησης</translation>
 <translation id="3335947283844343239">Εκ Νέου Άνοιγμα Κλεισμένης Καρτέλας</translation>
 <translation id="3336664756920573711">Ξεκλειδώστε τη συσκευή <ph name="DEVICE_TYPE" /> με το τηλέφωνο Android που χρησιμοποιείτε</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Η εκτύπωση απέτυχε. Ελέγξτε τον εκτυπωτή σας και δοκιμάστε ξανά.</translation>
 <translation id="3364721542077212959">Εργαλεία γραφίδας</translation>
 <translation id="3365598184818502391">Χρησιμοποιήστε το Ctrl ή το Alt</translation>
+<translation id="3367047597842238025">Ρυθμίστε τη συσκευή <ph name="DEVICE_TYPE" /> όπως θέλετε και ανακαλύψτε όλες τις εκπληκτικές δυνατότητες που είναι στη διάθεσή σας.</translation>
 <translation id="3368922792935385530">Σε σύνδεση</translation>
 <translation id="3369624026883419694">Ανάλυση της διεύθυνσης του κεντρικού υπολογιστή...</translation>
 <translation id="337286756654493126">Ανάγνωση φακέλων που ανοίγετε στην εφαρμογή</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Κάντε δεξί κλικ στο εικονίδιο <ph name="SMALL_PRODUCT_LOGO" /> στη γραμμή εργασιών</translation>
 <translation id="3391716558283801616">Καρτέλα 7</translation>
 <translation id="3396331542604645348">Ο επιλεγμένος εκτυπωτής δεν είναι διαθέσιμος ή δεν έχει εγκατασταθεί σωστά. Ελέγξτε τον εκτυπωτή σας ή δοκιμάστε να επιλέξετε άλλον εκτυπωτή.</translation>
+<translation id="3396800784455899911">Εάν κάνετε κλικ στο κουμπί "Αποδοχή και συνέχεια", αποδέχεστε την επεξεργασία που περιγράφεται παραπάνω για αυτές τις υπηρεσίες Google.</translation>
 <translation id="3399432415385675819">Οι ειδοποιήσεις θα απενεργοποιηθούν</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Δεν υπάρχουν αποθηκευμένοι κωδικοί πρόσβασης για αυτόν τον ιστότοπο</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Δεν είναι δυνατό το άνοιγμα αυτής της συσκευής επειδή δεν υποστηρίζεται το σύστημα αρχείων της.</translation>
 <translation id="3727148787322499904">Η αλλαγή αυτής της ρύθμισης θα επηρεάσει όλα τα κοινόχρηστα δίκτυα</translation>
 <translation id="3727187387656390258">Έλεγχος αναδυόμενου παραθύρου</translation>
+<translation id="3729506734996624908">Επιτρεπόμενοι ιστότοποι</translation>
 <translation id="3732078975418297900">Σφάλμα στη γραμμή <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Διακομιστής SSL με αναβάθμιση</translation>
+<translation id="3735740477244556633">Ταξινόμηση κατά</translation>
 <translation id="3737274407993947948">Σφάλμα εγκατάστασης Linux…</translation>
 <translation id="3737536731758327622">Οι λήψεις σας εμφανίζονται εδώ</translation>
+<translation id="3738671331307774213">Η επαλήθευση της ταυτότητάς σας συμβάλλει στην προστασία των προσωπικών δεδομένων σας</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Άνοιγμα <ph name="APPLICATION" />;</translation>
 <translation id="3741158646617793859">Το <ph name="DEVICE_NAME" /> θα εμφανίζεται πλέον στην Κονσόλα διαχειριστή</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Αποκτήστε εργαλεία για τον προγραμματισμό ιστοτόπων, εφαρμογών Android και άλλων στοιχείων. Με την εγκατάσταση του Linux, θα ληφθούν <ph name="DOWNLOAD_SIZE" /> δεδομένα.</translation>
 <translation id="385051799172605136">Πίσω</translation>
 <translation id="3851428669031642514">Φόρτωση μη ασφαλών σεναρίων</translation>
+<translation id="3854599674806204102">Ορίστε μια επιλογή</translation>
 <translation id="3855441664322950881">Στοίβαξη επέκτασης</translation>
 <translation id="3855676282923585394">Εισαγωγή σελιδοδεικτών και ρυθμίσεων...</translation>
 <translation id="3856800405688283469">Επιλογή ζώνης ώρας</translation>
-<translation id="3856921555429624101">Η μέτρηση της χρήσης δεδομένων έληξε</translation>
 <translation id="3857228364945137633">Δοκιμάστε το Smart Lock, για να ξεκλειδώσετε το <ph name="DEVICE_TYPE" /> χωρίς κωδικό πρόσβασης, όταν το τηλέφωνό σας είναι κοντά.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Ο συγχρονισμός τέθηκε σε παύση</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Άνοιγμα όλων σε παράθυρο για ανώνυμη περιήγηση</translation>
 <translation id="4508265954913339219">Η ενεργοποίηση απέτυχε</translation>
 <translation id="4508765956121923607">Προβολή Πηγαίου Κώ&amp;δικα</translation>
-<translation id="4509823033118379431">Οι εικόνες δεν είναι διαθέσιμες προς το παρόν. Συνδεθείτε ξανά για να δείτε τις συλλογές.</translation>
 <translation id="451407183922382411">Με την υποστήριξη της <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Ρύθμιση νέου εποπτευόμενου χρήστη</translation>
 <translation id="4514610446763173167">Εναλλαγή αναπαραγωγής ή παύσης βίντεο</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Συνέχεια από άλλη συσκευή</translation>
 <translation id="4628314759732363424">Αλλαγή…</translation>
 <translation id="4628757576491864469">Συσκευές</translation>
+<translation id="4628948037717959914">Φωτογραφία</translation>
 <translation id="4630590996962964935">Μη έγκυρος χαρακτήρας: $1</translation>
 <translation id="4631887759990505102">Καλλιτέχνης</translation>
 <translation id="4632483769545853758">Κατάργηση σίγασης καρτέλας</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Έτοιμο για δημιουργία αντιγράφων ασφαλείας για <ph name="FILE_COUNT" /> αρχεία</translation>
 <translation id="4907161631261076876">Δεν πραγματοποιείται συχνά λήψη αυτού του αρχείου και ενδέχεται να είναι επικίνδυνη.</translation>
 <translation id="4907306957610201395">Κατηγορία δικαιωμάτων</translation>
-<translation id="4907824805858067479">Οι αποθηκευμένες κάρτες απενεργοποιήθηκαν από τον διαχειριστή σας</translation>
 <translation id="4908811072292128752">Ανοίξτε μια νέα καρτέλα για ταυτόχρονη περιήγηση σε δύο ιστότοπους</translation>
 <translation id="4909038193460299775">Επειδή η διαχείριση αυτού του λογαριασμού γίνεται από τον τομέα <ph name="DOMAIN" />, οι σελιδοδείκτες, το ιστορικό, οι κωδικοί πρόσβασης και άλλες ρυθμίσεις θα διαγραφούν από αυτήν τη συσκευή. Ωστόσο, τα δεδομένα σας θα παραμείνουν αποθηκευμένα στον Λογαριασμό σας Google και η διαχείρισή τους μπορεί να γίνεται στον <ph name="BEGIN_LINK" />Πίνακα ελέγχου Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Έχετε εγγραφεί επιτυχώς</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Ετήσια</translation>
 <translation id="4957949153200969297">Ενεργοποιήστε μόνο τις λειτουργίες που σχετίζονται με τον Συγχρονισμό <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Οι κάρτες σας θα πρέπει να είναι σε ένα σημείο</translation>
 <translation id="496226124210045887">Ο φάκελος που επιλέξατε περιέχει ευαίσθητα αρχεία. Είστε σίγουροι ότι θέλετε να παραχωρήσετε στο "$1" μόνιμη πρόσβαση ανάγνωσης σε αυτόν το φάκελο;</translation>
 <translation id="4964455510556214366">Διάταξη</translation>
 <translation id="4964673849688379040">Γίνεται έλεγχος…</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Προσθήκη επέκτασης</translation>
 <translation id="5029568752722684782">Διαγραφή αντιγράφου</translation>
 <translation id="5030338702439866405">Έκδοση από</translation>
+<translation id="503155457707535043">Λήψη εφαρμογών</translation>
 <translation id="503498442187459473">Ο ιστότοπος <ph name="HOST" /> επιθυμεί να χρησιμοποιήσει την κάμερα και το μικρόφωνο σας</translation>
 <translation id="5036662165765606524">Να μην επιτρέπεται σε κανέναν ιστότοπο να κατεβάζει αυτόματα πολλά αρχεία</translation>
 <translation id="5037676449506322593">Επιλογή Όλων</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Σίγαση</translation>
 <translation id="5785583009707899920">Βοηθητικά προγράμματα διαχείρισης αρχείων του Chrome</translation>
 <translation id="5787146423283493983">Βασική συμφωνία</translation>
+<translation id="5788127256798019331">Αρχεία Play</translation>
 <translation id="5788367137662787332">Λυπούμαστε, δεν ήταν δυνατή η προσάρτηση τουλάχιστον ενός διαμερίσματος της συσκευής <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Άνοιγμα πάντα με πρόγραμμα προβολής συστήματος</translation>
 <translation id="5794786537412027208">Τερματισμός όλων των εφαρμογών του Chrome</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Μεταφρασμένη</translation>
 <translation id="5991049340509704927">Μεγέθυνση</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτήν την εφαρμογή.}other{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτές τις εφαρμογές.}}</translation>
-<translation id="5993332328670040093">Δεν θα εκτελείται πλέον μέτρηση της χρήσης δεδομένων σας.</translation>
 <translation id="6002458620803359783">Προτιμώμενες φωνές</translation>
 <translation id="6005695835120147974">Δρομολογητής μέσων</translation>
 <translation id="6006484371116297560">Κλασικό</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Επιλογή πιστοποιητικού</translation>
 <translation id="6181431612547969857">Η λήψη αποκλείστηκε</translation>
 <translation id="6185132558746749656">Τοποθεσία συσκευής</translation>
+<translation id="6185617499004995178">Εργαλείο επικύρωσης CUPS IPP</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">Ρύθμιση ή διαχείριση κοινόχρηστων αρχείων δικτύου.</translation>
 <translation id="6189412234224385711">Άνοιγμα με <ph name="EXTENSION_NAME" /></translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Προσθέστε μια παράμετρο ερωτήματος στη διεύθυνση URL για αυτόματη ανανέωση της σελίδας: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Μπαταρία</translation>
 <translation id="6232116551750539448">Η σύνδεση με το <ph name="NAME" /> χάθηκε</translation>
+<translation id="6235700927623181151">Αυτή η καρτέλα μοιράζεται το περιεχόμενο της επιφάνειας εργασίας σας.</translation>
 <translation id="6237816943013845465">Σας επιτρέπει να προσαρμόσετε την ανάλυση της οθόνης σας</translation>
 <translation id="6238923052227198598">Διατήρηση πιο πρόσφατης σημείωσης στον οθόνη κλειδώματος</translation>
 <translation id="6239558157302047471">Επαναφόρτωση &amp;πλαισίου</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Η λήψη του αρχείου <ph name="FILE_NAME" /> δεν είναι συνήθης και μπορεί να είναι επικίνδυνη.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Εντοπίστηκε νέος εκτυπωτής στο δίκτυό σας}other{Εντοπίστηκαν νέοι εκτυπωτές στο δίκτυό σας}}</translation>
-<translation id="6286684120317096255">Η χρήση δεδομένων σας καταμετράται</translation>
 <translation id="6286708577777130801">Λεπτομέρειες αποθηκευμένου κωδικού πρόσβασης</translation>
 <translation id="6287852322318138013">Επιλέξτε μια εφαρμογή για να ανοίξετε αυτό το αρχείο</translation>
 <translation id="6289452883081499048">Εξατομικευμένες υπηρεσίες Google, όπως το Play</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Διαχείριση συσκευών Cloud Print</translation>
 <translation id="6451689256222386810">Εάν ξεχάσετε τη φράση πρόσβασης ή θέλετε να αλλάξετε αυτήν τη ρύθμιση, <ph name="BEGIN_LINK" />επαναφέρετε τον συγχρονισμό<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Απόρριψη</translation>
+<translation id="6455264371803474013">Σε συγκεκριμένους ιστοτόπους</translation>
 <translation id="6455894534188563617">&amp;Νέος φάκελος</translation>
 <translation id="6456394469623773452">Καλό</translation>
 <translation id="6456631036739229488">Το τηλέφωνο στο οποίο χρησιμοποιείται το Smart Lock άλλαξε. Καταχωρίστε τον κωδικό πρόσβασης, για να ενημερώσετε το Smart Lock. Την επόμενη φορά, το τηλέφωνό σας θα ξεκλειδώσει το <ph name="DEVICE_TYPE" />. Απενεργοποιήστε το Smart Lock στις Ρυθμίσεις.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">&amp;Επαναφόρτωση αυτής της σελίδας</translation>
 <translation id="6577284282025554716">Η λήψη ακυρώθηκε: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Κρυπτογράφηση συγχρονισμένων κωδικών πρόσβαση με το όνομα χρήστη και τον κωδικό πρόσβασης Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Κοινόχρηστο περιεχόμενο επιφάνειας εργασίας</translation>
 <translation id="6580151766480067746">Έκδοση ARC</translation>
 <translation id="6581162200855843583">Σύνδεσμος του Google Drive</translation>
 <translation id="6582421931165117398">Προκειμένου να προστατεύσετε τα προσωπικά στοιχεία σας, αλλάξτε τον κωδικό πρόσβασής σας τώρα. Θα σας ζητηθεί να συνδεθείτε, για να μπορέσετε να αλλάξετε τον κωδικό πρόσβασής σας.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Αυτή η εφαρμογή μπορεί να εμποδίσει τη σωστή λειτουργία του Chrome.}other{Αυτές οι εφαρμογές μπορεί να εμποδίσουν τη σωστή λειτουργία του Chrome.}}</translation>
 <translation id="7303900363563182677">Αυτός ο ιστότοπος δεν μπορεί να δει το κείμενο και τις εικόνες που έχουν αντιγραφεί στο πρόχειρο</translation>
 <translation id="730515362922783851">Ανταλλαγή δεδομένων με οποιαδήποτε συσκευή στο τοπικό δίκτυο ή το διαδίκτυο</translation>
+<translation id="7307129035224081534">Σε παύση</translation>
 <translation id="7308002049209013926">Χρησιμοποιήστε την Εφαρμογή εκκίνησης, για να μεταβείτε γρήγορα σε νέες εφαρμογές και δραστηριότητες. Για να μεταβείτε εδώ από το πληκτρολόγιο, πατήστε Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Εμφάνιση &amp;στοιχείων ελέγχου</translation>
 <translation id="7310598146671372464">Η σύνδεση απέτυχε. Ο διακομιστής δεν υποστηρίζει τους καθορισμένους τύπους κρυπτογράφησης Kerberos. Επικοινωνήστε με τον διαχειριστή σας.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">Ρυθμίστε τη σύνδεση στο τηλέφωνό σας <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Αποκλείστηκε αναδυόμενο παράθυρο</translation>
 <translation id="7407430846095439694">Εισαγωγή και δέσμευση</translation>
-<translation id="7409233648990234464">Επανεκκίνηση και Powerwash</translation>
 <translation id="7409836189476010449">Εκτέλεση Flash</translation>
 <translation id="7410344089573941623">Ερώτηση εάν το <ph name="HOST" /> θέλει να αποκτήσει πρόσβαση στην κάμερα και στο μικρόφωνό σας</translation>
 <translation id="741204030948306876">Ναι, συμφωνώ</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">URL ανάκλησης πιστοποιητικού Netscape</translation>
 <translation id="7469894403370665791">Αυτόματη σύνδεση σε αυτό το δίκτυο</translation>
 <translation id="747114903913869239">Σφάλμα: Δεν είναι δυνατή η αποκωδικοποίηση της επέκτασης</translation>
+<translation id="7473753388963818366">Ας ετοιμάσουμε το <ph name="DEVICE_TYPE" /> για εσάς</translation>
 <translation id="7473891865547856676">Όχι, ευχαριστώ</translation>
 <translation id="747459581954555080">Επαναφορά όλων</translation>
 <translation id="7475671414023905704">URL χαμένου κωδικού πρόσβασης Netscape</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Προσθήκη λογαριασμού</translation>
 <translation id="7671130400130574146">Χρήση της γραμμής τίτλου συστήματος και των περιγραμμάτων.</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> στη σελίδα <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Αποστολή της φωνής σας στην Google, ώστε να επιτρέπεται η υπαγόρευση σε οποιοδήποτε πεδίο κειμένου.</translation>
 <translation id="7681095912841365527">Ο ιστότοπος μπορεί να χρησιμοποιεί bluetooth</translation>
 <translation id="7683373461016844951">Για να συνεχίσετε, κάντε κλικ στο κουμπί OK και, στη συνέχεια, κάντε κλικ στην επιλογή "Προσθήκη ατόμου" για να δημιουργήσετε ένα νέο προφίλ για τη διεύθυνση ηλεκτρονικού ταχυδρομείου <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Εγκαταστάθηκε από το διαχειριστή σας</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Τυπική</translation>
 <translation id="7748528009589593815">Προηγούμενη καρτέλα</translation>
 <translation id="7748626145866214022">Στη γραμμή ενεργειών υπάρχουν περισσότερες επιλογές. Πιέστε Alt + A, για να εστιάσετε στη γραμμή ενεργειών.</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7751260505918304024">Προβολή όλων</translation>
 <translation id="7754704193130578113">Εμφάνιση ερώτησης για τη θέση αποθήκευσης κάθε αρχείου πριν από τη λήψη</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4441,6 +4460,7 @@
 <translation id="7857949311770343000">Είναι αυτή η σελίδα νέας καρτέλας που περιμένατε να δείτε;</translation>
 <translation id="786073089922909430">Υπηρεσία: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Λήψεις</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookie}}</translation>
 <translation id="786957569166715433">Έγινε σύζευξη της συσκευής <ph name="DEVICE_NAME" /></translation>
 <translation id="7870730066603611552">Έλεγχος επιλογών συγχρονισμού μετά τη ρύθμιση</translation>
 <translation id="7870790288828963061">Δεν βρέθηκαν εφαρμογές kiosk με νεότερη έκδοση. Δεν υπάρχουν στοιχεία προς ενημέρωση. Αφαιρέστε τη συσκευή USB.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Σίγαση καρτελών</translation>
 <translation id="8382913212082956454">Αντιγραφή διεύθυνσης &amp;ηλεκτρονικού ταχυδρομείου</translation>
 <translation id="8386903983509584791">Η σάρωση ολοκληρώθηκε</translation>
+<translation id="8389492867173948260">Να επιτρέπεται σε αυτήν την επέκταση να διαβάζει και να αλλάζει όλα τα δεδομένα σας στους ιστοτόπους που επισκέπτεστε:</translation>
 <translation id="8390449457866780408">Ο διακομιστής δεν είναι διαθέσιμος.</translation>
 <translation id="8391712576156218334">Η εικόνα δεν είναι διαθέσιμη. Δοκιμάστε ξανά αργότερα.</translation>
 <translation id="8392234662362215700">Πατήστε Control-Shift-Space για εναλλαγή διάταξης πληκτρολογίου.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Θα αποσυνδεθείτε σε <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Αλλαγή αριθμού PIN της κάρτας SIM</translation>
 <translation id="8434480141477525001">NaCl Εντοπισμός σφαλμάτων θύρας</translation>
+<translation id="8435395510592618362">Επαληθεύστε την ταυτότητά σας με την εφαρμογή <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Αποθήκευση πιστωτικής κάρτας</translation>
 <translation id="8438328416656800239">Εναλλαγή σε ένα έξυπνο πρόγραμμα περιήγησης</translation>
 <translation id="8438566539970814960">Βελτιώστε τις αναζητήσεις και την περιήγηση</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Μη έγκυρο</translation>
 <translation id="8465444703385715657">Η προσθήκη <ph name="PLUGIN_NAME" /> απαιτεί την άδειά σας για να εκτελεστεί</translation>
 <translation id="8466234950814670489">Αρχείο Tar</translation>
+<translation id="8466417995783206254">Αυτή η καρτέλα αναπαράγει κάποιο βίντεο στη λειτουργία picture-in-picture.</translation>
 <translation id="8468750959626135884">Ξεκλειδώστε τη συσκευή <ph name="DEVICE_TYPE" /> με το τηλέφωνο Android που χρησιμοποιείτε.</translation>
 <translation id="8470028084415844044">Για να έχετε όλους τους κωδικούς πρόσβασης σε όλες τις συσκευές σας, ενεργοποιήστε τον συγχρονισμό.</translation>
 <translation id="8470513973197838199">Αποθηκευμένοι κωδικοί πρόσβασης για το <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Εκτέλεση αυτής της προσθήκης</translation>
 <translation id="8497219075884839166">Βοηθητικά προγράμματα των Windows</translation>
 <translation id="8498214519255567734">Διευκολύνετε τη θέαση της οθόνης ή την ανάγνωση σε συνθήκες χαμηλού φωτισμού</translation>
+<translation id="8498395510292172881">Συνέχιση ανάγνωσης στο Chrome</translation>
 <translation id="8503813439785031346">Όνομα χρήστη</translation>
 <translation id="850875081535031620">Δεν βρέθηκε επιβλαβές λογισμικό</translation>
 <translation id="8509646642152301857">Η λήψη λεξικού ορθογραφικού ελέγχου απέτυχε.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Προσπαθήστε ξανά</translation>
 <translation id="8725178340343806893">Αγαπημένα/σελιδοδείκτες</translation>
 <translation id="8726206820263995930">Σφάλμα ανάκτησης ρυθμίσεων πολιτικής από το διακομιστή: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Να μην εμφανιστεί ξανά</translation>
 <translation id="8727344521467137076">Υπάρχει επιβλαβές λογισμικό στον υπολογιστή σας. Το Chrome το καταργεί και θα επαναφέρει τις ρυθμίσεις σας, ούτως ώστε το πρόγραμμα περιήγησης να λειτουργεί και πάλι κανονικά.</translation>
 <translation id="8730621377337864115">Ολοκληρώθηκε</translation>
 <translation id="8732030010853991079">Χρησιμοποιήστε αυτήν την επέκταση κάνοντας κλικ σε αυτό το εικονίδιο.</translation>
@@ -5178,6 +5201,7 @@
 <translation id="9027459031423301635">Άνοιγμα Συνδέσμου σε Νέα Καρτέ&amp;λα</translation>
 <translation id="9030515284705930323">Ο οργανισμός σας δεν έχει ενεργοποιήσει το Google Play Store για τον λογαριασμό σας. Για περισσότερες πληροφορίες, επικοινωνήστε με τον διαχειριστή σας.</translation>
 <translation id="9033857511263905942">&amp;Επικόλληση</translation>
+<translation id="9034924485347205037">Αρχεία Linux</translation>
 <translation id="9035012421917565900">Τα στοιχεία δεν είναι δυνατό να επιστρέψουν στο "<ph name="DESTINATION_NAME" />", επομένως δεν θα μπορείτε να αναιρέσετε αυτήν την ενέργεια.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Εμφάνιση πρωτοτύπου</translation>
@@ -5278,6 +5302,7 @@
 <translation id="9173995187295789444">Σάρωση για συσκευές Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Συνδέθηκε συσκευή Bluetooth</translation>
 <translation id="9177499212658576372">Αυτήν τη στιγμή είστε συνδεδεμένοι στο δίκτυο <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Ρύθμιση του Linux (Beta) στο <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Αυτή η διαδικασία μπορεί να διαρκέσει μερικά λεπτά. Έναρξη του κοντέινερ Linux.</translation>
 <translation id="9180380851667544951">Ο ιστότοπος μπορεί να μοιραστεί την οθόνη σας</translation>
 <translation id="9188441292293901223">Ενημερώστε το τηλέφωνό σας σε μια νεότερη έκδοση του Android για να ξεκλειδώσετε αυτό το <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 72f8d89..68b4f6a4 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -567,7 +567,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out</translation>
 <translation id="1830550083491357902">Not signed in</translation>
 <translation id="1832511806131704864">Phone change updated</translation>
-<translation id="1832685970989658809">Saved payment methods are disabled by your administrator</translation>
 <translation id="1834503245783133039">Download unsuccessful: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Clear search</translation>
 <translation id="1838709767668011582">Google site</translation>
@@ -945,7 +944,6 @@
 <translation id="2435457462613246316">Show password</translation>
 <translation id="2436186046335138073">Allow <ph name="HANDLER_HOSTNAME" /> to open all <ph name="PROTOCOL" /> links?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Data use measuring ended</translation>
 <translation id="2440604414813129000">View s&amp;ource</translation>
 <translation id="2445081178310039857">Extension root directory is required.</translation>
 <translation id="2445484935443597917">Create a New Profile</translation>
@@ -1892,7 +1890,6 @@
 <translation id="3855441664322950881">Pack extension</translation>
 <translation id="3855676282923585394">Import Bookmarks and Settings...</translation>
 <translation id="3856800405688283469">Select Time Zone</translation>
-<translation id="3856921555429624101">Data use measuring has ended</translation>
 <translation id="3857228364945137633">Try Smart Lock to unlock your <ph name="DEVICE_TYPE" /> without a password when your phone is nearby.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Sync paused</translation>
@@ -2263,7 +2260,6 @@
 <translation id="4508051413094283164">Open all in incognito window</translation>
 <translation id="4508265954913339219">Activation failed</translation>
 <translation id="4508765956121923607">View S&amp;ource</translation>
-<translation id="4509823033118379431">The images are not currently available. Please reconnect to view the collections.</translation>
 <translation id="451407183922382411">Powered by <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Set up new supervised user</translation>
 <translation id="4514610446763173167">Toggle video to play or pause</translation>
@@ -2340,6 +2336,7 @@
 <translation id="4627442949885028695">Continue from another device</translation>
 <translation id="4628314759732363424">Change...</translation>
 <translation id="4628757576491864469">Devices</translation>
+<translation id="4628948037717959914">Photo</translation>
 <translation id="4630590996962964935">Invalid character: $1</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4632483769545853758">Unmute Tab</translation>
@@ -2525,7 +2522,6 @@
 <translation id="4905417359854579806">Ready to backup <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">This file is not commonly downloaded and may be dangerous.</translation>
 <translation id="4907306957610201395">Permission Category</translation>
-<translation id="4907824805858067479">Saved cards are disabled by your administrator</translation>
 <translation id="4908811072292128752">Open a new tab to browse two sites at once</translation>
 <translation id="4909038193460299775">Because this account is managed by <ph name="DOMAIN" />, your bookmarks, history, passwords and other settings will be cleared from this device. However, your data will remain stored in your Google account and can be managed on <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">You are enrolled successfully</translation>
@@ -3248,7 +3244,6 @@
 <translation id="5990386583461751448">Translated</translation>
 <translation id="5991049340509704927">Magnify</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{To ensure that you can keep browsing the web, ask your administrator to remove this application.}other{To ensure that you can keep browsing the web, ask your administrator to remove these applications.}}</translation>
-<translation id="5993332328670040093">Your data use will no longer be measured.</translation>
 <translation id="6002458620803359783">Preferred Voices</translation>
 <translation id="6005695835120147974">Media Router</translation>
 <translation id="6006484371116297560">Classic</translation>
@@ -3442,7 +3437,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> is not commonly downloaded and may be dangerous.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{New printer on your network}other{New printers on your network}}</translation>
-<translation id="6286684120317096255">Data use is being measured</translation>
 <translation id="6286708577777130801">Saved password details</translation>
 <translation id="6287852322318138013">Select an app to open this file</translation>
 <translation id="6289452883081499048">Personalised Google services such as Play</translation>
@@ -4156,7 +4150,6 @@
 <translation id="7400839060291901923">Set up connection on your <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Pop-up blocked</translation>
 <translation id="7407430846095439694">Import and Bind</translation>
-<translation id="7409233648990234464">Relaunch and Powerwash</translation>
 <translation id="7409836189476010449">Run Flash</translation>
 <translation id="7410344089573941623">Ask if <ph name="HOST" /> wants to access your camera and microphone</translation>
 <translation id="741204030948306876">Yes, I'm in</translation>
@@ -5018,7 +5011,6 @@
 <translation id="8725066075913043281">Try again</translation>
 <translation id="8725178340343806893">Favourites/bookmarks</translation>
 <translation id="8726206820263995930">Error when fetching policy settings from the server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Don’t show this again</translation>
 <translation id="8727344521467137076">There's harmful software on your computer. Chrome is removing it and will restore your settings to make your browser work normally again.</translation>
 <translation id="8730621377337864115">Done</translation>
 <translation id="8732030010853991079">Use this extension by clicking on this icon.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index 5e33c47e..972eab9 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -562,7 +562,6 @@
 <translation id="1829192082282182671">Alejar</translation>
 <translation id="1830550083491357902">No has accedido.</translation>
 <translation id="1832511806131704864">Cambio de teléfono actualizado</translation>
-<translation id="1832685970989658809">Tu administrador inhabilitó las formas de pago guardadas</translation>
 <translation id="1834503245783133039">No se pudo realizar la descarga: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Borrar la búsqueda</translation>
 <translation id="1838709767668011582">Sitio de Google</translation>
@@ -939,7 +938,6 @@
 <translation id="2435457462613246316">Mostrar contraseña</translation>
 <translation id="2436186046335138073">¿Deseas permitir que <ph name="HANDLER_HOSTNAME" /> abra todos los vínculos de <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínimo</translation>
-<translation id="2437139306601019091">Se terminó de medir el uso de datos</translation>
 <translation id="2440604414813129000">Ver códig&amp;o fuente</translation>
 <translation id="2445081178310039857">Se requiere un directorio de raíz de la extensión.</translation>
 <translation id="2445484935443597917">Crear un perfil nuevo</translation>
@@ -1875,7 +1873,6 @@
 <translation id="3855441664322950881">Extensión de empaque</translation>
 <translation id="3855676282923585394">Importar favoritos y configuración...</translation>
 <translation id="3856800405688283469">Seleccionar zona horaria</translation>
-<translation id="3856921555429624101">Se terminó de medir el uso de datos</translation>
 <translation id="3857228364945137633">Prueba Smart Lock para desbloquear tu <ph name="DEVICE_TYPE" /> sin necesidad de una contraseña cuando el teléfono está cerca.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Se pausó la sincronización</translation>
@@ -2246,7 +2243,6 @@
 <translation id="4508051413094283164">Abrir todo en una ventana de incógnito</translation>
 <translation id="4508265954913339219">Falló la activación</translation>
 <translation id="4508765956121923607">Ver códig&amp;o fuente</translation>
-<translation id="4509823033118379431">Por el momento, las imágenes no están disponibles. Vuelve a conectarte para ver las colecciones.</translation>
 <translation id="451407183922382411">Con la tecnología de <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurar un nuevo usuario supervisado</translation>
 <translation id="4514610446763173167">Reproduce o pausa el video</translation>
@@ -2323,6 +2319,7 @@
 <translation id="4627442949885028695">Cómo continuar desde otro dispositivo</translation>
 <translation id="4628314759732363424">Cambiar</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Carácter no válido: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Activar sonido de la pestaña</translation>
@@ -2508,7 +2505,6 @@
 <translation id="4905417359854579806">Ya se puede realizar una copia de seguridad de <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Este archivo no se descarga con frecuencia y podría ser peligroso.</translation>
 <translation id="4907306957610201395">Categoría de permiso</translation>
-<translation id="4907824805858067479">Tu administrador inhabilitó las tarjetas guardadas</translation>
 <translation id="4908811072292128752">Abre una pestaña nueva para navegar en dos sitios al mismo tiempo</translation>
 <translation id="4909038193460299775">Debido a que esta cuenta la administra <ph name="DOMAIN" />, tus favoritos, historial, contraseñas y otras opciones de configuración se borrarán de este dispositivo. Sin embargo, tus datos permanecerán almacenados en tu cuenta de Google y se podrán administrar en el <ph name="BEGIN_LINK" />Panel de control de Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Te inscribiste correctamente</translation>
@@ -3228,7 +3224,6 @@
 <translation id="5990386583461751448">Traducida</translation>
 <translation id="5991049340509704927">Ampliar</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para asegurarte de que puedas seguir navegando en la Web, pídele a tu administrador que quite esta aplicación.}other{Para asegurarte de que puedas seguir navegando en la Web, pídele a tu administrador que quite estas aplicaciones.}}</translation>
-<translation id="5993332328670040093">Ya no se medirá el uso de datos.</translation>
 <translation id="6002458620803359783">Voces preferidas</translation>
 <translation id="6005695835120147974">Router multimedia</translation>
 <translation id="6006484371116297560">Clásico</translation>
@@ -3420,7 +3415,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> no es un archivo que se descargue de forma habitual y es posible que sea peligroso.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nueva impresora en la red}other{Nuevas impresoras en la red}}</translation>
-<translation id="6286684120317096255">Se está midiendo el uso de datos</translation>
 <translation id="6286708577777130801">Detalles de las contraseñas guardadas</translation>
 <translation id="6287852322318138013">Seleccionar una aplicación para abrir este archivo</translation>
 <translation id="6289452883081499048">Servicios de Google personalizados, como Play</translation>
@@ -4131,7 +4125,6 @@
 <translation id="7400839060291901923">Configurar la conexión en tu <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Ventana emergente (pop-up) bloqueada</translation>
 <translation id="7407430846095439694">Importar y vincular</translation>
-<translation id="7409233648990234464">Reiniciar y Powerwash</translation>
 <translation id="7409836189476010449">Ejecutar Flash</translation>
 <translation id="7410344089573941623">Preguntar si <ph name="HOST" /> quiere acceder a la cámara y al micrófono</translation>
 <translation id="741204030948306876">Sí, acepto</translation>
@@ -4986,7 +4979,6 @@
 <translation id="8725066075913043281">Intentar nuevamente</translation>
 <translation id="8725178340343806893">Favoritos/Favoritos</translation>
 <translation id="8726206820263995930">Se produjo un error al recuperar la configuración de la política del servidor: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">No volver a mostrar</translation>
 <translation id="8727344521467137076">Se detectó software dañino en tu computadora. Chrome lo está quitando y restaurará tu configuración para que el navegador vuelva a funcionar con normalidad.</translation>
 <translation id="8730621377337864115">Listo</translation>
 <translation id="8732030010853991079">Para usar esta extensión, haz clic en este ícono.</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 0511043..a334504 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Preguntar antes de acceder</translation>
 <translation id="1434696352799406980">Se restablecerán la página de inicio, la página Nueva pestaña, el motor de búsqueda y las pestañas fijadas. También se inhabilitarán todas las extensiones y se borrarán los datos temporales como las cookies. Los marcadores, el historial y las contraseñas guardadas no se borrarán.</translation>
 <translation id="1434886155212424586">La página de inicio es la página Nueva pestaña</translation>
+<translation id="1436671784520050284">Continuar con la configuración</translation>
 <translation id="1436784010935106834">Eliminado</translation>
 <translation id="1438632560381091872">Activar sonido de pestañas</translation>
 <translation id="1442392616396121389">Prefijo de enrutamiento</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Porción de pizza</translation>
 <translation id="1467432559032391204">Izquierda</translation>
 <translation id="1468571364034902819">No se puede utilizar este perfil</translation>
+<translation id="1470533772306424441">Nos encargaremos de instalar esas aplicaciones. Puedes buscar más aplicaciones para tu dispositivo en Play Store.</translation>
 <translation id="1470811252759861213">Para ver tus extensiones en todos tus ordenadores, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">No se ha subido <ph name="FILENAME" />. No hay suficiente espacio libre en tu cuenta de Google Drive.</translation>
 <translation id="1475502736924165259">Tienes certificados registrados que no corresponden a ninguna otra categoría</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;Reducir zoom</translation>
 <translation id="1830550083491357902">No has iniciado sesión.</translation>
 <translation id="1832511806131704864">Cambio de teléfono actualizado</translation>
-<translation id="1832685970989658809">El administrador ha inhabilitado los métodos de pago guardados.</translation>
 <translation id="1834503245783133039">No se ha podido completar la descarga: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Borrar búsqueda</translation>
 <translation id="1838709767668011582">Sitio de Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configuración de confianza</translation>
 <translation id="2195729137168608510">Protección de correo electrónico</translation>
+<translation id="2199298570273670671">Error</translation>
 <translation id="2200356397587687044">Chrome necesita permiso para continuar</translation>
 <translation id="220138918934036434">Ocultar botón</translation>
 <translation id="2202898655984161076">Se ha producido un error al mostrar las impresoras. Es posible que algunas impresoras no se hayan registrado correctamente en <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Mostrar contraseña</translation>
 <translation id="2436186046335138073">¿Quieres permitir que <ph name="HANDLER_HOSTNAME" /> abra todos los enlaces de <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínimos</translation>
-<translation id="2437139306601019091">La medición del uso de datos ha finalizado</translation>
 <translation id="2440604414813129000">Ver códig&amp;o fuente</translation>
 <translation id="2445081178310039857">El directorio raíz de la extensión es obligatorio.</translation>
 <translation id="2445484935443597917">Crear perfil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> quiere verificar tu identidad</translation>
 <translation id="2448312741937722512">Tipo</translation>
 <translation id="2450223707519584812">No podrás añadir usuarios porque faltan las claves de la API de Google. Consulta <ph name="DETAILS_URL" /> para obtener más información.</translation>
 <translation id="2450310832094867474">¿Quieres desactivar la sincronización y cerrar sesión?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Ya existe este archivo.</translation>
 <translation id="2453860139492968684">Finalizar</translation>
 <translation id="2454247629720664989">Palabra clave</translation>
+<translation id="245661998428026871">Se dejará de reproducir el vídeo en modo imagen en imagen.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> quiere copiar archivos de <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID de clave de la entidad emisora de certificados</translation>
 <translation id="2462752602710430187">Se ha añadido la impresora <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Activar sonido de pestañas</translation>
 <translation id="3053013834507634016">Uso de claves de certificado</translation>
 <translation id="3057861065630527966">Realiza copias de seguridad de tus fotos y vídeos</translation>
+<translation id="3059313675706898490">Mensajes Android</translation>
 <translation id="3060379269883947824">Habilitar Enunciar Selección</translation>
 <translation id="3061707000357573562">Aplicar parche a servicio</translation>
 <translation id="3064410671692449875">Datos insuficientes</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">¿Has olvidado tu contraseña?</translation>
 <translation id="3132996321662585180">Actualizar todos los días</translation>
 <translation id="3135204511829026971">Girar pantalla</translation>
+<translation id="313638818480447860">Aplicaciones conectadas a tu cuenta que están optimizadas para este dispositivo: <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="313963229645891001">Descargando (<ph name="STATUS" />)</translation>
 <translation id="3139925690611372679">Avatar amarillo predeterminado</translation>
 <translation id="3140353188828248647">Activar barra de direcciones</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Revisión ortográfica</translation>
 <translation id="3183139917765991655">Importador de perfiles</translation>
 <translation id="3184560914950696195">No se puede guardar en $1. Las imágenes editadas se guardarán en la carpeta de descargas.</translation>
+<translation id="3188257591659621405">Mis archivos</translation>
 <translation id="3188465121994729530">Media móvil</translation>
 <translation id="3190558889382726167">Contraseña guardada</translation>
 <translation id="3192947282887913208">Archivos de audio</translation>
@@ -1525,6 +1531,7 @@
 <translation id="3326821416087822643">Comprimiendo <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Información de la aplicación</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Reproduciendo vídeo en modo imagen en imagen</translation>
 <translation id="3335337277364016868">Año de grabación</translation>
 <translation id="3335947283844343239">Volver a abrir pestaña cerrada</translation>
 <translation id="3336664756920573711">Desbloquea tu <ph name="DEVICE_TYPE" /> con tu teléfono Android</translation>
@@ -1544,6 +1551,7 @@
 <translation id="3360297538363969800">Se ha producido un error al imprimir. Comprueba la impresora y vuelve a intentarlo.</translation>
 <translation id="3364721542077212959">Herramientas del lápiz óptico</translation>
 <translation id="3365598184818502391">Usa Ctrl o Alt</translation>
+<translation id="3367047597842238025">Configura tu <ph name="DEVICE_TYPE" /> como prefieras y descubre sus increíbles funciones.</translation>
 <translation id="3368922792935385530">Con conexión</translation>
 <translation id="3369624026883419694">Resolviendo host...</translation>
 <translation id="337286756654493126">Lee carpetas que abras en la aplicación</translation>
@@ -1557,6 +1565,7 @@
 <translation id="3389312115541230716">Haz clic con el botón derecho en el icono <ph name="SMALL_PRODUCT_LOGO" /> situado en la barra de tareas</translation>
 <translation id="3391716558283801616">Pestaña 7</translation>
 <translation id="3396331542604645348">La impresora seleccionada no se encuentra disponible o no está instalada correctamente. Comprueba tu impresora o prueba a seleccionar otra.</translation>
+<translation id="3396800784455899911">Al hacer clic en el botón "Aceptar y continuar", declaras que estás conforme con el proceso descrito anteriormente de estos servicios de Google.</translation>
 <translation id="3399432415385675819">Se inhabilitarán las notificaciones</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">No hay contraseñas guardadas de este sitio web</translation>
@@ -1785,10 +1794,13 @@
 <translation id="3726463242007121105">No se puede abrir este dispositivo porque no se admite su sistema de archivos.</translation>
 <translation id="3727148787322499904">Si cambias esta opción, todas las redes compartidas se verán afectadas</translation>
 <translation id="3727187387656390258">Inspeccionar ventana emergente</translation>
+<translation id="3729506734996624908">Sitios web permitidos</translation>
 <translation id="3732078975418297900">Error en la línea <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Servidor SSL con certificado Step-Up</translation>
+<translation id="3735740477244556633">Ordenar por</translation>
 <translation id="3737274407993947948">No se ha podido instalar Linux...</translation>
 <translation id="3737536731758327622">Tus descargas aparecen en esta sección</translation>
+<translation id="3738671331307774213">Verifica tu identidad para proteger tus datos privados</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">¿Abrir <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> aparecerá ahora en la Consola del administrador</translation>
@@ -1873,10 +1885,10 @@
 <translation id="3846116211488856547">Consigue herramientas para desarrollar sitios web, aplicaciones de Android y mucho más. Al instalar Linux, se descargarán <ph name="DOWNLOAD_SIZE" /> de datos.</translation>
 <translation id="385051799172605136">Atrás</translation>
 <translation id="3851428669031642514">Cargar scripts no seguros</translation>
+<translation id="3854599674806204102">Elige una opción</translation>
 <translation id="3855441664322950881">Empaquetar extensión</translation>
 <translation id="3855676282923585394">Importar marcadores y configuración...</translation>
 <translation id="3856800405688283469">Seleccionar zona horaria</translation>
-<translation id="3856921555429624101">La medición del uso de datos ha finalizado</translation>
 <translation id="3857228364945137633">Prueba Smart Lock para desbloquear tu <ph name="DEVICE_TYPE" /> sin una contraseña cuando tu teléfono esté cerca.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sincronización en pausa</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">Abre todos los marcadores en una ventana de incógnito</translation>
 <translation id="4508265954913339219">Error de activación</translation>
 <translation id="4508765956121923607">Ver código f&amp;uente</translation>
-<translation id="4509823033118379431">Las imágenes no están disponibles en este momento. Vuelve a conectarte para ver las colecciones.</translation>
 <translation id="451407183922382411">Con la tecnología de <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurar nuevo usuario supervisado</translation>
 <translation id="4514610446763173167">Reproducir o pausar el video</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">Continuar en otro dispositivo</translation>
 <translation id="4628314759732363424">Cambiar...</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Carácter no válido: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Activar sonido de pestaña</translation>
@@ -2508,7 +2520,6 @@
 <translation id="4905417359854579806">Ya puedes crear la copia de seguridad de <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Este archivo no se descarga habitualmente y puede ser peligroso.</translation>
 <translation id="4907306957610201395">Categoría de permisos</translation>
-<translation id="4907824805858067479">El administrar ha inhabilitado las tarjetas guardadas</translation>
 <translation id="4908811072292128752">Abre una pestaña nueva para navegar por dos sitios web a la vez</translation>
 <translation id="4909038193460299775">Dado que <ph name="DOMAIN" /> administra esta cuenta, tus marcadores, tu historial, tus contraseñas y otros ajustes se borrarán de este dispositivo. No obstante, tus datos permanecerán almacenados en tu cuenta de Google y se podrán administrar en el <ph name="BEGIN_LINK" />Panel de Control de Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Te has registrado correctamente</translation>
@@ -2540,6 +2551,7 @@
 <translation id="4955814292505481804">Anual</translation>
 <translation id="4957949153200969297">Habilita solo las funciones relacionadas con la sincronización de <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Almacena tus tarjetas en un mismo sitio</translation>
 <translation id="496226124210045887">La carpeta que has seleccionado contiene archivos confidenciales. ¿Seguro que quieres conceder a "$1" acceso de lectura permanente a esta carpeta?</translation>
 <translation id="4964455510556214366">Disposición</translation>
 <translation id="4964673849688379040">Comprobando...</translation>
@@ -2586,6 +2598,7 @@
 <translation id="5027562294707732951">Añadir extensión</translation>
 <translation id="5029568752722684782">Borrar copia</translation>
 <translation id="5030338702439866405">Emitido por</translation>
+<translation id="503155457707535043">Se están descargando las aplicaciones</translation>
 <translation id="503498442187459473"><ph name="HOST" /> quiere utilizar la cámara y el micrófono</translation>
 <translation id="5036662165765606524">No permitir que ningún sitio descargue varios archivos automáticamente</translation>
 <translation id="5037676449506322593">Seleccionar todo</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">Silenciar</translation>
 <translation id="5785583009707899920">Utilidades de los archivos de Chrome</translation>
 <translation id="5787146423283493983">Acuerdo de claves</translation>
+<translation id="5788127256798019331">Archivos de Play</translation>
 <translation id="5788367137662787332">Lo sentimos, pero no se ha podido activar al menos una partición del dispositivo <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Abrir siempre con el visor del sistema</translation>
 <translation id="5794786537412027208">Salir de todas las aplicaciones de Chrome</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">Traducida</translation>
 <translation id="5991049340509704927">Ampliar</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para seguir navegando por Internet, pide a tu administrador que quite esta aplicación.}other{Para seguir navegando por Internet, pide a tu administrador que quite estas aplicaciones.}}</translation>
-<translation id="5993332328670040093">El uso de datos dejará de medirse.</translation>
 <translation id="6002458620803359783">Voces preferidas</translation>
 <translation id="6005695835120147974">Router multimedia</translation>
 <translation id="6006484371116297560">Clásico</translation>
@@ -3353,6 +3366,7 @@
 <translation id="6178664161104547336">Seleccionar un certificado</translation>
 <translation id="6181431612547969857">Descarga bloqueada</translation>
 <translation id="6185132558746749656">Ubicación del dispositivo</translation>
+<translation id="6185617499004995178">Validador de IPP de CUPS</translation>
 <translation id="6185696379715117369">Retroceder página</translation>
 <translation id="6189273858858366896">Configurar o gestionar archivos compartidos de la red.</translation>
 <translation id="6189412234224385711">Abrir con <ph name="EXTENSION_NAME" /></translation>
@@ -3385,6 +3399,7 @@
 <translation id="6231881193380278751">Añade un parámetro de consulta en la URL para actualizar la página automáticamente: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batería</translation>
 <translation id="6232116551750539448">Se ha perdido la conexión a <ph name="NAME" /></translation>
+<translation id="6235700927623181151">En esta pestaña se está compartiendo el contenido de tu ordenador.</translation>
 <translation id="6237816943013845465">Te permite ajustar la resolución de pantalla</translation>
 <translation id="6238923052227198598">Mantener la última nota en la pantalla de bloqueo</translation>
 <translation id="6239558157302047471">Volver a cargar &amp;marco</translation>
@@ -3419,7 +3434,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">El archivo <ph name="FILE_NAME" /> no se descarga habitualmente y puede ser peligroso.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nueva impresora en tu red}other{Nuevas impresoras en tu red}}</translation>
-<translation id="6286684120317096255">Se está midiendo el uso de datos</translation>
 <translation id="6286708577777130801">Detalles de contraseña guardada</translation>
 <translation id="6287852322318138013">Seleccionar una aplicación para abrir este archivo</translation>
 <translation id="6289452883081499048">Servicios de Google personalizados, como Play</translation>
@@ -3529,6 +3543,7 @@
 <translation id="6451180435462401570">Administrar dispositivos de Cloud Print</translation>
 <translation id="6451689256222386810">Si has olvidado tu frase de contraseña o quieres cambiar esta opción, <ph name="BEGIN_LINK" />restablece la sincronización<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Rechazar</translation>
+<translation id="6455264371803474013">En sitios web específicos</translation>
 <translation id="6455894534188563617">&amp;Nueva carpeta</translation>
 <translation id="6456394469623773452">Aceptable</translation>
 <translation id="6456631036739229488">Se ha cambiado el teléfono de Smart Lock. Introduce la contraseña para actualizar Smart Lock. La próxima vez, el teléfono desbloqueará tu <ph name="DEVICE_TYPE" />. Desactiva Smart Lock en Configuración.</translation>
@@ -3606,6 +3621,7 @@
 <translation id="657402800789773160">Volver a &amp;cargar la página</translation>
 <translation id="6577284282025554716">Descarga cancelada: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Cifrar las contraseñas sincronizadas con tu nombre de usuario y contraseña de Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Contenido del ordenador compartido</translation>
 <translation id="6580151766480067746">Versión de ARC</translation>
 <translation id="6581162200855843583">Enlace de Google Drive</translation>
 <translation id="6582421931165117398">Cambia tu contraseña ahora para proteger tu información personal. Antes de cambiarla, se te solicitará que inicies sesión.</translation>
@@ -4072,6 +4088,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Esta aplicación puede impedir que Chrome funcione correctamente.}other{Estas aplicaciones pueden impedir que Chrome funcione correctamente.}}</translation>
 <translation id="7303900363563182677">No se permite que este sitio web vea el texto y las imágenes que se hayan copiado en el portapapeles</translation>
 <translation id="730515362922783851">Intercambiar datos con cualquier dispositivo en la red local o Internet</translation>
+<translation id="7307129035224081534">En pausa</translation>
 <translation id="7308002049209013926">Utiliza el menú de aplicaciones para acceder rápidamente a aplicaciones y actividades nuevas. Para acceder al menú con el teclado, pulsa Alt + Mayús + L.</translation>
 <translation id="7309257895202129721">Mostrar &amp;controles</translation>
 <translation id="7310598146671372464">No se ha podido iniciar sesión. El servidor no admite los tipos de cifrado Kerberos especificados. Ponte en contacto con tu administrador.</translation>
@@ -4129,7 +4146,6 @@
 <translation id="7400839060291901923">Configurar la conexión en tu <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Ventana emergente bloqueada</translation>
 <translation id="7407430846095439694">Importar y vincular</translation>
-<translation id="7409233648990234464">Reiniciar y Powerwash</translation>
 <translation id="7409836189476010449">Ejecutar Flash</translation>
 <translation id="7410344089573941623">Preguntar si <ph name="HOST" /> quiere acceder a la cámara y al micrófono</translation>
 <translation id="741204030948306876">Sí, acepto</translation>
@@ -4162,6 +4178,7 @@
 <translation id="7465778193084373987">URL de revocación de certificado de Netscape</translation>
 <translation id="7469894403370665791">Conectarse automáticamente a esta red</translation>
 <translation id="747114903913869239">Error: no es posible decodificar la extensión.</translation>
+<translation id="7473753388963818366">Dejemos listo tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">No, gracias</translation>
 <translation id="747459581954555080">Restaurar todo</translation>
 <translation id="7475671414023905704">URL de contraseñas perdidas de Netscape</translation>
@@ -4286,6 +4303,7 @@
 <translation id="7665369617277396874">Añadir cuenta</translation>
 <translation id="7671130400130574146">Utilizar bordes y barra de título</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> en <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Envía tu voz a Google para utilizar el dictado en cualquier campo de texto.</translation>
 <translation id="7681095912841365527">El sitio web puede usar el Bluetooth</translation>
 <translation id="7683373461016844951">Para continuar, haz clic en Aceptar y, a continuación, en Añadir perfil para crear un perfil con tu dirección de correo electrónico de <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Instalada por tu administrador</translation>
@@ -4327,6 +4345,7 @@
 <translation id="7740996059027112821">Estándar</translation>
 <translation id="7748528009589593815">Pestaña anterior</translation>
 <translation id="7748626145866214022">Hay más opciones disponibles en la barra de acciones. Pulsa Alt + A para seleccionarla.</translation>
+<translation id="7750228210027921155">Imagen en imagen</translation>
 <translation id="7751260505918304024">Mostrar todo</translation>
 <translation id="7754704193130578113">Preguntar dónde se guardará cada archivo antes de descargarlo</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4435,6 +4454,7 @@
 <translation id="7857949311770343000">¿Es esta la página Nueva pestaña que esperabas?</translation>
 <translation id="786073089922909430">Servicio: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Descargas</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: vinculado</translation>
 <translation id="7870730066603611552">Revisar opciones de sincronización después de la configuración</translation>
 <translation id="7870790288828963061">No se ha encontrado ninguna aplicación de kiosco con una versión más reciente. No hay nada que actualizar. Extrae el dispositivo USB.</translation>
@@ -4756,6 +4776,7 @@
 <translation id="8373553483208508744">Silenciar pestañas</translation>
 <translation id="8382913212082956454">Copiar dir&amp;ección de correo electrónico</translation>
 <translation id="8386903983509584791">Búsqueda completada</translation>
+<translation id="8389492867173948260">Permitir que esta extensión lea y cambie todos los datos de los sitios web que visites:</translation>
 <translation id="8390449457866780408">Servidor no disponible</translation>
 <translation id="8391712576156218334">La imagen no está disponible. Inténtalo de nuevo más tarde.</translation>
 <translation id="8392234662362215700">Pulsa Control+Mayús+Espacio para cambiar de diseño de teclado.</translation>
@@ -4787,6 +4808,7 @@
 <translation id="84297032718407999">Tu sesión se cerrará en <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Cambiar PIN de la tarjeta SIM</translation>
 <translation id="8434480141477525001">Puerto de depuración NaCl</translation>
+<translation id="8435395510592618362">Verifica tu identidad con <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Guarda la tarjeta de crédito</translation>
 <translation id="8438328416656800239">Cambia a un navegador inteligente</translation>
 <translation id="8438566539970814960">Mejorar las búsquedas y la navegación</translation>
@@ -4813,6 +4835,7 @@
 <translation id="8465252176946159372">No válido</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> necesita tu permiso para ejecutarse</translation>
 <translation id="8466234950814670489">Archivo tar</translation>
+<translation id="8466417995783206254">En esta pestaña se está reproduciendo un vídeo en modo imagen en imagen.</translation>
 <translation id="8468750959626135884">Desbloquea tu <ph name="DEVICE_TYPE" /> con tu teléfono Android.</translation>
 <translation id="8470028084415844044">Activa la sincronización para tener tus contraseñas en todos tus dispositivos.</translation>
 <translation id="8470513973197838199">Contraseñas guardadas de <ph name="ORIGIN" /></translation>
@@ -4833,6 +4856,7 @@
 <translation id="8496717697661868878">Ejecutar este complemento</translation>
 <translation id="8497219075884839166">Utilidades de Windows</translation>
 <translation id="8498214519255567734">Resulta más fácil ver la pantalla con poca luz</translation>
+<translation id="8498395510292172881">Continuar leyendo en Chrome</translation>
 <translation id="8503813439785031346">Nombre de usuario</translation>
 <translation id="850875081535031620">No se ha encontrado software dañino</translation>
 <translation id="8509646642152301857">Se ha producido un error al descargar el diccionario del corrector ortográfico.</translation>
@@ -4983,7 +5007,6 @@
 <translation id="8725066075913043281">Volver a intentarlo</translation>
 <translation id="8725178340343806893">Favoritos/Marcadores</translation>
 <translation id="8726206820263995930">Error al recuperar la configuración de política del servidor (<ph name="CLIENT_ERROR" />)</translation>
-<translation id="8727142376512517020">No volver a mostrar esta notificación</translation>
 <translation id="8727344521467137076">Se ha detectado software dañino en tu ordenador. Chrome lo eliminará y restaurará tu configuración para que el navegador vuelva a funcionar con normalidad.</translation>
 <translation id="8730621377337864115">Listo</translation>
 <translation id="8732030010853991079">Haz clic en este icono para utilizar esta extensión.</translation>
@@ -5174,6 +5197,7 @@
 <translation id="9027459031423301635">Abrir enlace en una &amp;pestaña nueva</translation>
 <translation id="9030515284705930323">Tu organización no ha habilitado Google Play Store en tu cuenta. Ponte en contacto con el administrador para obtener más información.</translation>
 <translation id="9033857511263905942">&amp;Pegar</translation>
+<translation id="9034924485347205037">Archivos de Linux</translation>
 <translation id="9035012421917565900">Estos elementos no se pueden volver a mover a "<ph name="DESTINATION_NAME" />", por lo que no podrás deshacer esta acción.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Mostrar original</translation>
@@ -5274,6 +5298,7 @@
 <translation id="9173995187295789444">Buscando dispositivos Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" />: dispositivo Bluetooth conectado</translation>
 <translation id="9177499212658576372">Actualmente estás conectado a la red <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configura Linux (Beta) en tu <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Iniciando el contenedor de Linux. Este proceso puede tardar unos minutos.</translation>
 <translation id="9180380851667544951">El sitio web puede compartir tu pantalla</translation>
 <translation id="9188441292293901223">Instala una versión más reciente de Android en el teléfono para desbloquear este <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index f7c50632..3184eea 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Küsi enne juurdepääsemist</translation>
 <translation id="1434696352799406980">See lähtestab käivitamisel avatava lehe, uue vahelehe, otsingumootori ja vähendatud vahelehed. See keelab ka kõik laiendused ja kustutab kõik ajutised andmed (nt küpsised). Teie järjehoidjaid, ajalugu ega salvestatud paroole ei kustutata.</translation>
 <translation id="1434886155212424586">Avaleht on uus vaheleht</translation>
+<translation id="1436671784520050284">Jätka seadistamist</translation>
 <translation id="1436784010935106834">Eemaldatud</translation>
 <translation id="1438632560381091872">Tühista vahekaartide summutus</translation>
 <translation id="1442392616396121389">Marsruutimise eesliide</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pitsalõik</translation>
 <translation id="1467432559032391204">Vasakule</translation>
 <translation id="1468571364034902819">Seda profiili ei saa kasutada</translation>
+<translation id="1470533772306424441">Installime need rakendused teie eest. Play poest leiate oma seadme jaoks rohkem rakendusi.</translation>
 <translation id="1470811252759861213">Oma laienduste nägemiseks kõigis oma arvutites <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Faili „<ph name="FILENAME" />” ei laaditud üles. Teie Google Drive’is ei ole piisavalt vaba ruumi.</translation>
 <translation id="1475502736924165259">Teil on sertifikaate, mis ei sobi ühtegi muusse kategooriasse</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;Vähenda</translation>
 <translation id="1830550083491357902">Pole sisse logitud</translation>
 <translation id="1832511806131704864">Telefoni muutmist värskendati</translation>
-<translation id="1832685970989658809">Teie administraator on salvestatud makseviisid keelanud</translation>
 <translation id="1834503245783133039">Allalaadimine nurjus: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Otsingu kustutamine</translation>
 <translation id="1838709767668011582">Google'i sait</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Allikas:</translation>
 <translation id="2193365732679659387">Usaldusväärsuse seaded</translation>
 <translation id="2195729137168608510">Meilikaitse</translation>
+<translation id="2199298570273670671">Viga</translation>
 <translation id="2200356397587687044">Chrome vajab jätkamiseks luba</translation>
 <translation id="220138918934036434">Peida nupp</translation>
 <translation id="2202898655984161076">Printerite kirjendamisel oli viga. Mõne printeri registreerimine rakendusega <ph name="CLOUD_PRINT_NAME" /> ei õnnestunud.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Kuva parool</translation>
 <translation id="2436186046335138073">Kas lubada kasutajal <ph name="HANDLER_HOSTNAME" /> avada kõik protokolli <ph name="PROTOCOL" /> lingid?</translation>
 <translation id="2436707352762155834">Miinimum</translation>
-<translation id="2437139306601019091">Andmemahu kasutuse mõõtmine lõppes</translation>
 <translation id="2440604414813129000">Vaata a&amp;llikat</translation>
 <translation id="2445081178310039857">Laienduse juurkaust on nõutav.</translation>
 <translation id="2445484935443597917">Loo uus profiil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> soovib teie identiteedi kinnitada</translation>
 <translation id="2448312741937722512">Tüüp</translation>
 <translation id="2450223707519584812">Te ei saa kasutajaid lisada, kuna Google API võtmed puuduvad. Üksikasju vt <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Kas lülitada sünkroonimine välja ja logida välja?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Fail on juba olemas</translation>
 <translation id="2453860139492968684">Valmis</translation>
 <translation id="2454247629720664989">Märksõna</translation>
+<translation id="245661998428026871">Video esitamine režiimis Pilt pildis peatatakse.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> soovib kopeerida faile seadmest <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Sertifitseerimisorgani võtme ID</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> on lisatud</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Vahekaartide summutuse tühistamine</translation>
 <translation id="3053013834507634016">Sertifikaadi võtme kasutus</translation>
 <translation id="3057861065630527966">Fotode ja videote varundamine</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Luba funktsioon Vali ja kuula</translation>
 <translation id="3061707000357573562">Teenuse paikamine</translation>
 <translation id="3064410671692449875">Andmeid pole piisavalt</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Kas olete parooli unustanud?</translation>
 <translation id="3132996321662585180">Värskendatakse iga päev</translation>
 <translation id="3135204511829026971">Pööra ekraani</translation>
+<translation id="313638818480447860">Leidsime <ph name="NUMBER_OF_APPS" /> teie kontoga ühendatud rakendust, mis on selle seadme jaoks optimeeritud.</translation>
 <translation id="313963229645891001">Allalaadimine, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Kollane vaikeavatar</translation>
 <translation id="3140353188828248647">Keskendub aadressiribale</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Õigekirjakontroll</translation>
 <translation id="3183139917765991655">Profiili importija</translation>
 <translation id="3184560914950696195">Asukohta $1 ei saa salvestada. Muudetud pildid salvestatakse kausta Allalaadimised.</translation>
+<translation id="3188257591659621405">Minu failid</translation>
 <translation id="3188465121994729530">Liikuv keskmine</translation>
 <translation id="3190558889382726167">Parool salvestati</translation>
 <translation id="3192947282887913208">Helifailid</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Faili <ph name="FILE_NAME" /> pakkimine ...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Rakenduse teave</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – videot esitatakse režiimis Pilt pildis</translation>
 <translation id="3335337277364016868">Salvestamisaasta</translation>
 <translation id="3335947283844343239">Ava uuesti suletud vaheleht</translation>
 <translation id="3336664756920573711">Seadme <ph name="DEVICE_TYPE" /> avamine Android-telefoniga</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Printimine ebaõnnestus. Kontrollige printerit ja proovige uuesti.</translation>
 <translation id="3364721542077212959">Elektronpliiatsi tööriistad</translation>
 <translation id="3365598184818502391">Kasutage klahvi Ctrl või Alt</translation>
+<translation id="3367047597842238025">Seadistage <ph name="DEVICE_TYPE" /> täpselt nii, nagu soovite, ja uurige kõiki teie käsutuses olevaid hämmastavaid funktsioone.</translation>
 <translation id="3368922792935385530">Ühendatud</translation>
 <translation id="3369624026883419694">Hosti lahendamine...</translation>
 <translation id="337286756654493126">Lugege kaustu, mille rakenduses avate</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Paremklõpsake tegumiribal ikoonil <ph name="SMALL_PRODUCT_LOGO" /></translation>
 <translation id="3391716558283801616">Vahekaart 7</translation>
 <translation id="3396331542604645348">Valitud printer pole saadaval või pole õigesti installitud. Kontrollige printerit või valige teine ​​printer.</translation>
+<translation id="3396800784455899911">Kui klõpsate nupul „Nõustu ja jätka”, nõustute nende Google'i teenuste puhul andmete ülalkirjeldatud töötlemisega.</translation>
 <translation id="3399432415385675819">Märguanded keelatakse</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Selle saidi jaoks ei ole salvestatud ühtki parooli</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Seadet ei saa avada, sest selle failisüsteemi ei toetata.</translation>
 <translation id="3727148787322499904">Selle seade muutmine mõjutab kõiki jagatud võrke</translation>
 <translation id="3727187387656390258">Hüpiku kontrollimine</translation>
+<translation id="3729506734996624908">Lubatud saidid</translation>
 <translation id="3732078975418297900">Viga real <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server koos seadistamisega</translation>
+<translation id="3735740477244556633">Sortimisalus:</translation>
 <translation id="3737274407993947948">Viga Linuxi installimisel …</translation>
 <translation id="3737536731758327622">Teie allalaadimised kuvatakse siin</translation>
+<translation id="3738671331307774213">Teie identiteedi kinnitamine aitab teie privaatseid andmeid kaitsta</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Kas soovite avada rakenduse <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> kuvatakse nüüd administraatorikonsoolis</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Hankige tööriistad veebisaitide, Androidi rakenduste ja muu arendamiseks. Linuxi installimisel laaditakse alla <ph name="DOWNLOAD_SIZE" /> ulatuses andmeid.</translation>
 <translation id="385051799172605136">Tagasi</translation>
 <translation id="3851428669031642514">Laadi ohtlikud skriptid</translation>
+<translation id="3854599674806204102">Tehke valik</translation>
 <translation id="3855441664322950881">Paki laiendus</translation>
 <translation id="3855676282923585394">Impordi järjehoidjad ja seaded...</translation>
 <translation id="3856800405688283469">Ajavööndi valimine</translation>
-<translation id="3856921555429624101">Andmemahu kasutuse mõõtmine on lõppenud</translation>
 <translation id="3857228364945137633">Proovige funktsiooni Smart Lock, et avada oma seade <ph name="DEVICE_TYPE" /> paroolita, kui teie telefon on läheduses.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sünkroonimine on peatatud</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Kõik avatakse inkognito aknas</translation>
 <translation id="4508265954913339219">Aktiveerimine nurjus</translation>
 <translation id="4508765956121923607">Vaata a&amp;llikat</translation>
-<translation id="4509823033118379431">Pildid ei ole praegu saadaval. Kogude vaatamiseks looge uuesti ühendus.</translation>
 <translation id="451407183922382411">Toetab <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Uue jälgitava kasutaja seadistamine</translation>
 <translation id="4514610446763173167">Käivitab/peatab video</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Jätkake sealt, kus muus seadmes pooleli jäite</translation>
 <translation id="4628314759732363424">Muuda ...</translation>
 <translation id="4628757576491864469">Seadmed</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Kehtetu märk: $1</translation>
 <translation id="4631887759990505102">Esitaja</translation>
 <translation id="4632483769545853758">Tühista vahekaardi summutus</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Valmis, et varundada <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Seda faili ei laadita tavaliselt alla ja see võib olla ohtlik.</translation>
 <translation id="4907306957610201395">Loa kategooria</translation>
-<translation id="4907824805858067479">Teie administraator on salvestatud kaardid keelanud</translation>
 <translation id="4908811072292128752">Avage uus vaheleht, et kahte saiti korraga sirvida</translation>
 <translation id="4909038193460299775">Kuna seda kontot haldab domeen <ph name="DOMAIN" />, kustutatakse sellest seadmest teie järjehoidjad, ajalugu, paroolid ja muud seaded. Teie andmed jäävad teie Google'i kontole siiski alles ja neid saab hallata <ph name="BEGIN_LINK" />Google'i juhtpaneelil<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Registreerumine õnnestus</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Aastane</translation>
 <translation id="4957949153200969297">Lubage ainult funktsioonid, mis on seotud teenuse <ph name="IDS_SHORT_PRODUCT_NAME" /> sünkroonimisega</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Hoidke oma kaarte ühes kohas</translation>
 <translation id="496226124210045887">Valitud kaust sisaldab tundlikke faile. Kas soovite kindlasti anda kasutajale „$1” püsiva juurdepääsu selle kausta lugemiseks?</translation>
 <translation id="4964455510556214366">Asetus</translation>
 <translation id="4964673849688379040">Kontrollimine ...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Lisa laiendus</translation>
 <translation id="5029568752722684782">Kustuta koopia</translation>
 <translation id="5030338702439866405">Väljaandja</translation>
+<translation id="503155457707535043">Rakendusi laaditakse alla</translation>
 <translation id="503498442187459473"><ph name="HOST" /> soovib kasutada teie kaamerat ja mikrofoni</translation>
 <translation id="5036662165765606524">Ära luba ühelgi saidil automaatselt mitut faili alla laadida</translation>
 <translation id="5037676449506322593">Vali kõik</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Vaigista</translation>
 <translation id="5785583009707899920">Chrome'i failide utiliidid</translation>
 <translation id="5787146423283493983">Võtme ühildumine</translation>
+<translation id="5788127256798019331">Play failid</translation>
 <translation id="5788367137662787332">Kahjuks ei õnnestunud seadmes <ph name="DEVICE_LABEL" /> vähemalt ühe kettapartitsiooni ühendamine.</translation>
 <translation id="5794414402486823030">Ava alati süsteemivaaturiga</translation>
 <translation id="5794786537412027208">Sule kõik Chrome'i rakendused</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Tõlgitud</translation>
 <translation id="5991049340509704927">Suurenda</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Kui soovite jätkuvalt veebi sirvida, paluge administraatoril see rakendus eemaldada.}other{Kui soovite jätkuvalt veebi sirvida, paluge administraatoril need rakendused eemaldada.}}</translation>
-<translation id="5993332328670040093">Teie andmemahu kasutust ei mõõdeta enam.</translation>
 <translation id="6002458620803359783">Eelistatud hääled</translation>
 <translation id="6005695835120147974">Meedia marsruuter</translation>
 <translation id="6006484371116297560">Klassikaline</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Sertifikaadi valimine</translation>
 <translation id="6181431612547969857">Allalaadimine on blokeeritud</translation>
 <translation id="6185132558746749656">Seadme asukoht</translation>
+<translation id="6185617499004995178">CUPS IPP validaator</translation>
 <translation id="6185696379715117369">Lehel üles</translation>
 <translation id="6189273858858366896">Seadistage või hallake failide võrguhoidlaid.</translation>
 <translation id="6189412234224385711">Ava laiendusega <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Lehe automaatseks värskendamiseks lisage päringu parameeter URL-i: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Aku</translation>
 <translation id="6232116551750539448">Ühendus üksusega <ph name="NAME" /> katkes</translation>
+<translation id="6235700927623181151">See vaheleht jagab teie töölaua sisu.</translation>
 <translation id="6237816943013845465">Võimaldab kohandada ekraani eraldusvõimet</translation>
 <translation id="6238923052227198598">Säilita viimane märge lukustuskuval</translation>
 <translation id="6239558157302047471">Laadi &amp;raam uuesti</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Faili <ph name="FILE_NAME" /> ei laadita sageli alla ja see võib olla ohtlik.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Teie võrgus on uus printer}other{Teie võrgus on uued printerid}}</translation>
-<translation id="6286684120317096255">Andmemahu kasutust mõõdetakse</translation>
 <translation id="6286708577777130801">Salvestatud parooli üksikasjad</translation>
 <translation id="6287852322318138013">Valige faili avamiseks rakendus</translation>
 <translation id="6289452883081499048">Isikupärastatud Google'i teenused, nagu Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Pilvprintimise seadmete haldamine</translation>
 <translation id="6451689256222386810">Kui unustasite parooli või soovite seda seadet muuta, <ph name="BEGIN_LINK" />lähtestage sünkroonimine<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Lükka tagasi</translation>
+<translation id="6455264371803474013">Konkreetsetel saitidel</translation>
 <translation id="6455894534188563617">&amp;Uus kaust</translation>
 <translation id="6456394469623773452">Hea</translation>
 <translation id="6456631036739229488">Smart Locki telefoni muudeti. Funktsiooni Smart Lock värskendamiseks sisestage oma parool. Järgmisel korral avab teie seadme <ph name="DEVICE_TYPE" /> telefon. Funktsiooni Smart Lock saate välja lülitada menüüs Seaded.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Laadi see leht uuesti</translation>
 <translation id="6577284282025554716">Allalaadimine on tühistatud: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Krüpteeri sünkroonitud paroolid minu Google'i kasutajanime ja parooliga</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – jagab töölaua sisu</translation>
 <translation id="6580151766480067746">ARC versioon</translation>
 <translation id="6581162200855843583">Google Drive'i link</translation>
 <translation id="6582421931165117398">Oma isiklike andmete kaitsmiseks muutke nüüd oma parooli. Enne parooli muutmist palutakse teil sisse logida.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Rakendus võib takistada Chrome'i õiget toimimist.}other{Need rakendused võivad takistada Chrome'i õiget toimimist.}}</translation>
 <translation id="7303900363563182677">Selle saidi jaoks blokeeriti lõikelauale kopeeritud teksti ja kujutiste nägemine</translation>
 <translation id="730515362922783851">Vaheta andmeid mis tahes seadmega kohalikus võrgus või Internetis</translation>
+<translation id="7307129035224081534">Peatatud</translation>
 <translation id="7308002049209013926">Kasutage käivitusprogrammi, et kiirelt uute rakenduste ja tegevuste juurde liikuda. Klaviatuuri abil siia liikumiseks vajutage klahvikombinatsiooni Alt + Tõstuklahv + L.</translation>
 <translation id="7309257895202129721">Kuva &amp;juhtelemendid</translation>
 <translation id="7310598146671372464">Sisselogimine ebaõnnestus. Server ei toeta määratud Kerberose krüpteerimistüüpe. Võtke ühendust administraatoriga.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Seadistage ühendus seadmes <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Hüpik blokeeritud</translation>
 <translation id="7407430846095439694">Impordi ja seo</translation>
-<translation id="7409233648990234464">Taaskäivitus ja Powerwash</translation>
 <translation id="7409836189476010449">Flashi käitamine</translation>
 <translation id="7410344089573941623">Küsi, kui host <ph name="HOST" /> soovib juurdepääsu kaamerale ja mikrofonile</translation>
 <translation id="741204030948306876">Jah, sobib</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Netscape'i sertifikaadi tühistus-URL</translation>
 <translation id="7469894403370665791">Võta automaatselt selle võrguga ühendust</translation>
 <translation id="747114903913869239">Viga: laiendust ei õnnestu dekodeerida</translation>
+<translation id="7473753388963818366">Valmistame seadme <ph name="DEVICE_TYPE" /> teie jaoks ette</translation>
 <translation id="7473891865547856676">Tänan, ei</translation>
 <translation id="747459581954555080">Taasta kõik</translation>
 <translation id="7475671414023905704">Netscape'i kaotatud parooli URL</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Konto lisamine</translation>
 <translation id="7671130400130574146">Kasutage süsteemi pealkirjariba ja ääriseid</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> lehel <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Saatke oma hääl Google'ile, et lubada dikteerimine kõigil tekstiväljadel.</translation>
 <translation id="7681095912841365527">Sait saab kasutada Bluetoothi</translation>
 <translation id="7683373461016844951">Jätkamiseks klõpsake nupul OK, seejärel klõpsake valikul Inimese lisamine, et luua oma domeeni <ph name="DOMAIN" /> e-posti aadressi jaoks uus profiil.</translation>
 <translation id="7684212569183643648">Selle installis administraator</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Tavapärane</translation>
 <translation id="7748528009589593815">Eelmine vahekaart</translation>
 <translation id="7748626145866214022">Toiminguribal on saadaval rohkem valikuid. Toiminguriba esiletõstmiseks vajutage klahve Alt + A.</translation>
+<translation id="7750228210027921155">Pilt pildis</translation>
 <translation id="7751260505918304024">Kuva kõik</translation>
 <translation id="7754704193130578113">Küsi enne iga faili allalaadimist, kuhu see salvestada.</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Kas see on uus vaheleht, mida ootasite?</translation>
 <translation id="786073089922909430">Teenus: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Allalaadimised</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 küpsisefail}other{# küpsisefaili}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – seotud</translation>
 <translation id="7870730066603611552">Vaata sünkroonimisvalikud pärast seadistust üle</translation>
 <translation id="7870790288828963061">Ühtegi uuema versiooniga kioski rakendust ei leitud. Midagi pole värskendada. Eemaldage USB-mälupulk.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Summuta vahekaardid</translation>
 <translation id="8382913212082956454">Kopeeri &amp;e-posti aadress</translation>
 <translation id="8386903983509584791">Skannimine jõudis lõpule</translation>
+<translation id="8389492867173948260">Lubage sellel laiendusel lugeda ja muuta külastatavate veebisaitide andmeid:</translation>
 <translation id="8390449457866780408">Server ei ole saadaval.</translation>
 <translation id="8391712576156218334">Pilt pole saadaval. Proovige hiljem uuesti.</translation>
 <translation id="8392234662362215700">Klaviatuuripaigutuse vahetamiseks vajutage korraga juhtklahvi, tõstuklahvi ja tühikut.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Teid logitakse välja <ph name="LOGOUT_TIME_LEFT" /> pärast</translation>
 <translation id="8431909052837336408">Muuda SIM-kaardi PIN-koodi</translation>
 <translation id="8434480141477525001">NaCl silumisport</translation>
+<translation id="8435395510592618362">Kinnitage oma identiteet rakendusega <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Krediitkaardi salvestamine</translation>
 <translation id="8438328416656800239">Minge üle nutikale brauserile</translation>
 <translation id="8438566539970814960">Otsingute ja sirvimise paremaks muutmine</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Pole kehtiv</translation>
 <translation id="8465444703385715657">Pistikprogramm <ph name="PLUGIN_NAME" /> vajab käitamiseks teie luba</translation>
 <translation id="8466234950814670489">TAR-arhiiv</translation>
+<translation id="8466417995783206254">Vahelehel esitatakse videot režiimis Pilt pildis</translation>
 <translation id="8468750959626135884">Seadme <ph name="DEVICE_TYPE" /> avamine Android-telefoniga.</translation>
 <translation id="8470028084415844044">Selleks et hankida kõik oma paroolid kõikidesse seadmetesse, lülitage sünkroonimine sisse.</translation>
 <translation id="8470513973197838199">Salvestatud paroolid – <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Käita pistikprogramm</translation>
 <translation id="8497219075884839166">Windowsi utiliidid</translation>
 <translation id="8498214519255567734">See võimaldab hämaras ekraani mugavamalt vaadata või sellelt teksti lugeda</translation>
+<translation id="8498395510292172881">Jätkake lugemist Chrome'is</translation>
 <translation id="8503813439785031346">Kasutajanimi</translation>
 <translation id="850875081535031620">Ohtlikku tarkvara ei leitud</translation>
 <translation id="8509646642152301857">Õigekirjakontrolli sõnastiku allalaadimine ebaõnnestus.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Proovi uuesti</translation>
 <translation id="8725178340343806893">Lemmikud/järjehoidjad</translation>
 <translation id="8726206820263995930">Serverist reegli seadete toomisel ilmnes viga: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ära näita seda uuesti</translation>
 <translation id="8727344521467137076">Teie arvutis on kahjulik tarkvara. Chrome eemaldab selle ja taastab teie seaded, et brauser töötaks jälle normaalselt.</translation>
 <translation id="8730621377337864115">Valmis</translation>
 <translation id="8732030010853991079">Laienduse aktiveerimiseks klõpsake sellel ikoonil.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Ava &amp;link uuel vahelehel</translation>
 <translation id="9030515284705930323">Organisatsioon pole Google Play poodi teie kontol lubanud. Lisateabe saamiseks võtke ühendust oma administraatoriga.</translation>
 <translation id="9033857511263905942">&amp;Kleebi</translation>
+<translation id="9034924485347205037">Linuxi failid</translation>
 <translation id="9035012421917565900">Üksusi ei saa sihtkohta „<ph name="DESTINATION_NAME" />” tagasi teisaldada, seega ei saa te seda toimingut tagasi võtta.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Kuva originaal</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Bluetoothi seadmete otsimine …</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetoothi seade on ühendatud</translation>
 <translation id="9177499212658576372">Olete praegu ühendatud võrguga <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Linuxi (beetaversioon) seadistamine teie seadmes <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Protsess võib võtta mõne minuti. Linuxi konteinerit käivitatakse.</translation>
 <translation id="9180380851667544951">Sait saab jagada teie ekraanikuva</translation>
 <translation id="9188441292293901223">Seadme <ph name="DEVICE_TYPE" /> avamiseks värskendage oma telefon uuemale Androidi versioonile.</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index 433055f1..827d2fa 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">پیش از دسترسی سؤال شود</translation>
 <translation id="1434696352799406980">این گزینه صفحه شروع، صفحه برگه جدید، موتور جستجو و برگه‌های پین‌شده شما را بازنشانی می‌کند. همچنین همه افزونه‌ها را غیرفعال می‌کند و داده‌های موقتی مانند کوکی‌ها را پاک می‌کند. نشانک‌ها، سابقه و گذرواژه‌های ذخیره‌شده شما پاک نمی‌شوند.</translation>
 <translation id="1434886155212424586">صفحه اصلی، صفحه برگه جدید است</translation>
+<translation id="1436671784520050284">ادامه راه‌اندازی</translation>
 <translation id="1436784010935106834">حذف شد</translation>
 <translation id="1438632560381091872">وصل کردن صدای برگه‌ها</translation>
 <translation id="1442392616396121389">پیشوند مسیریابی</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">تکه پیتزا</translation>
 <translation id="1467432559032391204">چپ</translation>
 <translation id="1468571364034902819">نمی‌توان از این نمایه استفاده کرد</translation>
+<translation id="1470533772306424441">‏آن برنامه‌ها را برایتان نصب می‌کنیم. می‌توانید در «فروشگاه Play» برنامه‌های بیشتری برای دستگاهتان پیدا کنید.</translation>
 <translation id="1470811252759861213">برای دریافت افزونه‌هایتان در همه رایانه‌هایتان، <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">‏«<ph name="FILENAME" />» بارگذاری نشد. فضای کافی در Google Drive شما وجود ندارد.</translation>
 <translation id="1475502736924165259">گواهی‌هایی برای فایل دارید که در هیچ‌کدام از دسته‌های دیگر قرار نمی‌گیرد</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">کوچک&amp; نمایی</translation>
 <translation id="1830550083491357902">وارد سیستم نشده است</translation>
 <translation id="1832511806131704864">تغییر تلفن به‌روزرسانی شد</translation>
-<translation id="1832685970989658809">سرپرست سیستم روش‌های پرداخت ذخیره‌شده را غیرفعال کرده است</translation>
 <translation id="1834503245783133039">بارگیری ناموفق بود: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">پاک کردن جستجو</translation>
 <translation id="1838709767668011582">‏سایت Google</translation>
@@ -789,7 +790,8 @@
 <translation id="2190355936436201913">(خالی)</translation>
 <translation id="2192505247865591433">از:</translation>
 <translation id="2193365732679659387">تنظیمات اطمینان</translation>
-<translation id="2195729137168608510">محافظت از رایانامه</translation>
+<translation id="2195729137168608510">محافظت از ایمیل</translation>
+<translation id="2199298570273670671">خطا</translation>
 <translation id="2200356397587687044">‏Chrome برای ادامه به مجوز نیاز دارد</translation>
 <translation id="220138918934036434">دکمه پنهان کردن</translation>
 <translation id="2202898655984161076">هنگام فهرست کردن چاپگرها مشکلی روی داد. برخی از چاپگرهای شما با <ph name="CLOUD_PRINT_NAME" /> با موفقیت ثبت نشده‌اند.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">نمایش گذرواژه</translation>
 <translation id="2436186046335138073">به <ph name="HANDLER_HOSTNAME" /> امکان داده شود همه پیوندهای <ph name="PROTOCOL" /> را باز کند؟</translation>
 <translation id="2436707352762155834">حداقل</translation>
-<translation id="2437139306601019091">اندازه‌گیری مصرف داده به‌پایان رسید</translation>
 <translation id="2440604414813129000">مشاهده م&amp;نبع</translation>
 <translation id="2445081178310039857">دایرکتوری ریشه برنامهٔ افزودنی لازم است.</translation>
 <translation id="2445484935443597917">ایجاد نمایه جدید</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> می‌خواهد هویتتان را به تأیید برساند</translation>
 <translation id="2448312741937722512">نوع</translation>
 <translation id="2450223707519584812">‏نمی‌توانید کاربران را اضافه کنید زیرا کلیدهای Google API موجود نیستند. برای جزئیات به <ph name="DETAILS_URL" /> مراجعه کنید.</translation>
 <translation id="2450310832094867474">همگام‌سازی خاموش شود و از سیستم خارج می‌شوید؟</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">فایل ازقبل موجود است</translation>
 <translation id="2453860139492968684">پایان</translation>
 <translation id="2454247629720664989">کلمه کلیدی</translation>
+<translation id="245661998428026871">پخش ویدیو در حالت تصویردرتصویر متوقف خواهد شد.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> می‌خواهد چند فایل از <ph name="VOLUME_NAME" /> کپی کند.</translation>
 <translation id="2462724976360937186">شناسه کلید ارائه دهنده مجوز</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> اضافه شد</translation>
@@ -1358,6 +1361,7 @@
 <translation id="304826556400666995">وصل کردن صدای برگه‌ها</translation>
 <translation id="3053013834507634016">کاربرد کلید گواهی</translation>
 <translation id="3057861065630527966">از عکس‌ها و ویدئوهایتان پشتیبان بگیرید</translation>
+<translation id="3059313675706898490">‏پیام‌های Android</translation>
 <translation id="3060379269883947824">فعال کردن «انتخاب کنید تا بتوانید صحبت کنید»</translation>
 <translation id="3061707000357573562">سرویس وصله</translation>
 <translation id="3064410671692449875">داده ناکافی</translation>
@@ -1406,6 +1410,7 @@
 <translation id="313205617302240621">گذرواژه را فراموش کردید؟</translation>
 <translation id="3132996321662585180">بازخوانی روزانه</translation>
 <translation id="3135204511829026971">چرخش صفحه</translation>
+<translation id="313638818480447860"><ph name="NUMBER_OF_APPS" /> برنامه مرتبط با حسابتان پیدا کردیم که برای دستگاهتان بهینه شده است.</translation>
 <translation id="313963229645891001">درحال بارگیری، <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">چهره‌نمای پیش‌فرض زرد</translation>
 <translation id="3140353188828248647">فوکوس نوار آدرس</translation>
@@ -1436,6 +1441,7 @@
 <translation id="3182749001423093222">غلط‌گیر املا</translation>
 <translation id="3183139917765991655">واردکننده نمایه</translation>
 <translation id="3184560914950696195">نمی‌توان در $1 ذخیره کرد. تصاویر ویرایش شده در پوشه بارگیری‌ها ذخیره می‌شوند.</translation>
+<translation id="3188257591659621405">فایل‌های من</translation>
 <translation id="3188465121994729530">میانگین متحرک</translation>
 <translation id="3190558889382726167">گذرواژه ذخیره شد</translation>
 <translation id="3192947282887913208">فایل‌های صوتی</translation>
@@ -1523,6 +1529,7 @@
 <translation id="3326821416087822643">در حال فشرده‌سازی <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">اطلاعات برنامه</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - پخش ویدیو در حالت تصویردرتصویر</translation>
 <translation id="3335337277364016868">سال ضبط</translation>
 <translation id="3335947283844343239">باز کردن مجدد برگه بسته شده</translation>
 <translation id="3336664756920573711">‏باز کردن قفل <ph name="DEVICE_TYPE" /> با تلفن Android</translation>
@@ -1542,6 +1549,7 @@
 <translation id="3360297538363969800">چاپ ناموفق بود. لطفاً چاپگرتان را بررسی کنید و دوباره امتحان کنید.</translation>
 <translation id="3364721542077212959">ابزارهای قلم</translation>
 <translation id="3365598184818502391">‏یا از Ctrl استفاده کنید یا از Alt</translation>
+<translation id="3367047597842238025">دستگاه <ph name="DEVICE_TYPE" /> خود را درست همان‌طور که می‌خواهید تنظیم کنید و همه قابلیت‌های شگفت‌انگیزش را به‌سادگی کشف کنید.</translation>
 <translation id="3368922792935385530">متصل</translation>
 <translation id="3369624026883419694">در حال تحلیل میزبان...</translation>
 <translation id="337286756654493126">خواندن پوشه‌هایی که در برنامه باز می‌کنید</translation>
@@ -1555,6 +1563,7 @@
 <translation id="3389312115541230716">روی نماد <ph name="SMALL_PRODUCT_LOGO" /> در نوار وظیفه کلیک راست کنید</translation>
 <translation id="3391716558283801616">برگه ۷</translation>
 <translation id="3396331542604645348">چاپگر انتخابی موجود نیست یا به درستی نصب نشده است. چاپگر خود را بررسی کرده یا چاپگر دیگری را انتخاب کنید.</translation>
+<translation id="3396800784455899911">‏با کلیک کردن روی دکمه «پذیرفتن و ادامه»، با پردازش مربوط به این سرویس‌های Google که در بالا توضیح داده شد موافقت می‌کنید.</translation>
 <translation id="3399432415385675819">اعلان‌ها غیرفعال خواهند شد</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />، <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">هیچ گذرواژه‌ای برای این سایت ذخیره نشده است</translation>
@@ -1783,10 +1792,13 @@
 <translation id="3726463242007121105">این دستگاه باز نمی‌شود زیرا سیستم فایل آن پشتیبانی نمی‌شود.</translation>
 <translation id="3727148787322499904">تغییر این تنظیم همه شبکه‌های به اشتراک‌گذاشته‌شده را تحت تأثیر قرار می‌دهد</translation>
 <translation id="3727187387656390258">بازرسی پنجره بازشو</translation>
+<translation id="3729506734996624908">سایت‌های مجاز</translation>
 <translation id="3732078975418297900">خطا در خط <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">‏سرور SSL با ارتقا</translation>
+<translation id="3735740477244556633">مرتب کردن براساس</translation>
 <translation id="3737274407993947948">‏بروز خطا هنگام نصب Linux…</translation>
 <translation id="3737536731758327622">بارگیری‌هایتان در اینجا نشان داده می‌شود</translation>
+<translation id="3738671331307774213">تأیید هویت شما به محافظت از داده‌هایتان کمک می‌کند</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> باز شود؟</translation>
 <translation id="3741158646617793859">‏<ph name="DEVICE_NAME" /> اکنون در Admin Console نمایش داده خواهد شد</translation>
@@ -1825,7 +1837,7 @@
 <translation id="3783640748446814672">دگرساز</translation>
 <translation id="3785308913036335955">نمایش میان‌بر «برنامه‌ها»</translation>
 <translation id="3785727820640310185">گذرواژه‌های ذخیره‌شده برای این سایت</translation>
-<translation id="3785852283863272759">رایانامه کردن مکان صفحه</translation>
+<translation id="3785852283863272759">ایمیل کردن مکان صفحه</translation>
 <translation id="3786301125658655746">شما آفلاین هستید</translation>
 <translation id="3788401245189148511">این می‌توانست:</translation>
 <translation id="3789841737615482174">نصب</translation>
@@ -1871,10 +1883,10 @@
 <translation id="3846116211488856547">‏دریافت ابزارهایی برای برنامه‌نویسی وب‌سایت، برنامه‌های Android و سایر موارد. با نصب Linux، <ph name="DOWNLOAD_SIZE" /> داده بارگیری خواهد شد.</translation>
 <translation id="385051799172605136">بازگشت</translation>
 <translation id="3851428669031642514">بارگیری اسکریپت‌های ناامن</translation>
+<translation id="3854599674806204102">گزینه‌ای انتخاب کنید</translation>
 <translation id="3855441664322950881">فشرده کردن افزونه....</translation>
 <translation id="3855676282923585394">وارد کردن نشانک‌ها و تنظیمات...</translation>
 <translation id="3856800405688283469">انتخاب منطقه زمانی</translation>
-<translation id="3856921555429624101">اندازه‌گیری مصرف داده به پایان رسیده است</translation>
 <translation id="3857228364945137633">‏وقتی تلفنتان در اطرافتان است، برای باز کردن قفل <ph name="DEVICE_TYPE" /> بدون استفاده از گذرواژه، Smart Lock را امتحان کنید.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: همگام‌سازی موقتاً متوقف شد</translation>
@@ -2013,7 +2025,7 @@
 <translation id="4068776064906523561">اثرانگشت‌های ذخیره‌شده</translation>
 <translation id="407173827865827707">با کلیک</translation>
 <translation id="4071770069230198275"><ph name="PROFILE_NAME" />: خطای ورود به سیستم</translation>
-<translation id="4074900173531346617">گواهی امضاکننده رایانامه</translation>
+<translation id="4074900173531346617">گواهی امضاکننده ایمیل</translation>
 <translation id="407520071244661467">مقیاس</translation>
 <translation id="4075639477629295004">ارسال محتوای <ph name="FILE_NAME" /> امکان‌پذیر نیست.</translation>
 <translation id="4077917118009885966">آگهی‌های این سایت مسدود شدند</translation>
@@ -2173,7 +2185,7 @@
 <translation id="4364567974334641491"><ph name="APP_NAME" /> در حال اشتراک‌گذاری یک پنجره است.</translation>
 <translation id="4364830672918311045">نمایش اعلان‌ها</translation>
 <translation id="4365673000813822030">وای، همگام‌سازی متوقف شده است.</translation>
-<translation id="4370975561335139969">رایانامه و گذرواژه‌ای که وارد کرده‌اید، مطابقت ندارند</translation>
+<translation id="4370975561335139969">ایمیل و گذرواژه‌ای که وارد کرده‌اید، مطابقت ندارند</translation>
 <translation id="437184764829821926">تنظیمات پیشرفته قلم</translation>
 <translation id="4372884569765913867">۱x۱</translation>
 <translation id="4375035964737468845">باز کردن فایل‌های بارگیری‌شده</translation>
@@ -2245,7 +2257,6 @@
 <translation id="4508051413094283164">باز کردن همه در پنجره ناشناس</translation>
 <translation id="4508265954913339219">فعالسازی انجام نشد</translation>
 <translation id="4508765956121923607">مشاهده م&amp;نبع</translation>
-<translation id="4509823033118379431">تصاویر درحال‌حاضر دردسترس نیستند. لطفاً جهت مشاهده مجموعه‌ها دوباره وصل شوید.</translation>
 <translation id="451407183922382411">ارائه‌شده توسط <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">تنظیم کاربر نظارت شده جدید</translation>
 <translation id="4514610446763173167">تغییر وضعیت بین پخش یا مکث ویدیو</translation>
@@ -2322,6 +2333,7 @@
 <translation id="4627442949885028695">ادامه از دستگاه دیگری</translation>
 <translation id="4628314759732363424">تغییر…</translation>
 <translation id="4628757576491864469">دستگاه‌ها</translation>
+<translation id="4628948037717959914">عکس</translation>
 <translation id="4630590996962964935">نویسه نامعتبر: $1</translation>
 <translation id="4631887759990505102">هنرمند</translation>
 <translation id="4632483769545853758">وصل کردن صدای برگه</translation>
@@ -2507,7 +2519,6 @@
 <translation id="4905417359854579806">آماده پشتیبان گرفتن از <ph name="FILE_COUNT" /> مورد</translation>
 <translation id="4907161631261076876">این فایل معمولاً بارگیری نمی‌شود و ممکن است خطرناک باشد.</translation>
 <translation id="4907306957610201395">دسته مجوز</translation>
-<translation id="4907824805858067479">سرپرستتان کارت‌های ذخیره‌شده را غیرفعال کرده است</translation>
 <translation id="4908811072292128752">برای مرور دو سایت به‌طور هم‌زمان، برگه جدیدی را باز کنید</translation>
 <translation id="4909038193460299775">‏از آن‌جا که این حساب توسط <ph name="DOMAIN" /> مدیریت می‌شود، نشانک‌ها، سابقه، گذرواژه‌ها و دیگر تنظیماتتان از این دستگاه پاک می‌شوند. اما داده‌هایتان در حساب Google ذخیره می‌مانند و می‌توانید آن‌ها را در <ph name="BEGIN_LINK" />داشبورد Google<ph name="END_LINK" /> مدیریت کنید.</translation>
 <translation id="4909359680501173791">ثبت‌نام باموفقیت انجام شد</translation>
@@ -2539,6 +2550,7 @@
 <translation id="4955814292505481804">سالانه</translation>
 <translation id="4957949153200969297">فقط ویژگی‌های مربوط به همگام‌سازی <ph name="IDS_SHORT_PRODUCT_NAME" /> فعال می‌شود</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">همه کارت‌هایتان را در یک مکان داشته باشید</translation>
 <translation id="496226124210045887">پوشه‌ای که انتخاب کرده‌اید حاوی فایل‌های حساسی است. آیا مطمئنید که می‌خواهید به «$1» دسترسی دائم خواندن این پوشه را اعطا کنید؟</translation>
 <translation id="4964455510556214366">ترتیب</translation>
 <translation id="4964673849688379040">درحال بررسی...</translation>
@@ -2582,10 +2594,11 @@
 <translation id="5018207570537526145">باز کردن وب‌سایت افزونه</translation>
 <translation id="5024856940085636730">اقدام بیشتر از انتظار طول می‌کشد. می‌خواهید از این کار صرف‌نظر کنید؟</translation>
 <translation id="5026874946691314267">این مورد دیگر نشان داده نشود.</translation>
-<translation id="5027550639139316293">گواهی رایانامه</translation>
+<translation id="5027550639139316293">گواهی ایمیل</translation>
 <translation id="5027562294707732951">افزودن افزونه</translation>
 <translation id="5029568752722684782">پاک کردن نسخه کپی</translation>
 <translation id="5030338702439866405">صدور توسط</translation>
+<translation id="503155457707535043">درحال بارگیری برنامه‌ها</translation>
 <translation id="503498442187459473"><ph name="HOST" /> می‌خواهد از دوربین و میکروفن شما استفاده کند</translation>
 <translation id="5036662165765606524">به هیچ سایتی اجازه داده نشود چند فایل را به‌طور خودکار بارگیری کند</translation>
 <translation id="5037676449506322593">انتخاب همه</translation>
@@ -2727,7 +2740,7 @@
 <translation id="5254368820972107711">نمایش فایل‌های موردنظر برای پاک کردن</translation>
 <translation id="52550593576409946">برنامه کیوسک راه‌اندازی نشد.</translation>
 <translation id="5256861893479663409">در همه سایت‌ها</translation>
-<translation id="5260508466980570042">متأسفانه رایانامه یا گذرواژه شما تأیید نشد. لطفاً دوباره سعی کنید.</translation>
+<translation id="5260508466980570042">متأسفانه ایمیل یا گذرواژه شما تأیید نشد. لطفاً دوباره سعی کنید.</translation>
 <translation id="5261683757250193089">باز کردن در نت‌بازار</translation>
 <translation id="5262311848634918433">‏<ph name="MARKUP_1" />در همه جا به فایل‌ها دسترسی داشته باشید، حتی وقتی به اینترنت متصل نیستید.<ph name="MARKUP_2" />
         فایل‌های موجود در Google Drive به‌روز هستند و از هر دستگاهی می‌توان به آن‌ها دسترسی داشت.<ph name="MARKUP_3" />
@@ -2918,7 +2931,7 @@
 <translation id="5516183516694518900">‏برای دریافت نشانک‌ها، سابقه، گذرواژه و سایر تنظیمات در تمام دستگاه‌هایتان، با «حساب Google» خود به سیستم Chrome وارد شوید.</translation>
 <translation id="551752069230578406">در حال افزودن چاپگر به حسابتان - این کار ممکن است چند دقیقه طول بکشد...</translation>
 <translation id="5518219166343146486">وقتی سایتی می‌خواهد به نوشتار و تصاویر کپی‌شده در بریده‌دان دسترسی پیدا کند، سؤال شود.</translation>
-<translation id="5518584115117143805">گواهی رمزگذاری رایانامه</translation>
+<translation id="5518584115117143805">گواهی رمزگذاری ایمیل</translation>
 <translation id="5521078259930077036">آیا این همان صفحه اصلی مورد انتظار شماست؟</translation>
 <translation id="5522156646677899028">این برنامه افزودنی از لحاظ امنیتی اصلاً مطمئن نیست.</translation>
 <translation id="5524517123096967210">امکان خواندن فایل وجود نداشت.</translation>
@@ -2947,7 +2960,7 @@
 <translation id="5551573675707792127">صفحه‌کلید و ورود نوشتار</translation>
 <translation id="5553089923092577885">نگاشتهای سیاست گواهی</translation>
 <translation id="5554489410841842733">این نماد وقتی قابل رؤیت است که برنامهٔ افزودنی بتواند برای صفحه فعلی کار کند.</translation>
-<translation id="5554720593229208774">ارائه دهنده مجوز رایانامه</translation>
+<translation id="5554720593229208774">ارائه دهنده مجوز ایمیل</translation>
 <translation id="5556206011531515970">برای انتخاب مرورگر پیش‌فرض روی بعدی کلیک کنید.</translation>
 <translation id="5556459405103347317">تازه‌سازی</translation>
 <translation id="555746285996217175">قفل / روشن/خاموش</translation>
@@ -3017,7 +3030,7 @@
 <translation id="5653140146600257126">پوشه با نام «$1» در حال حاضر موجود است. لطفاً نام دیگری انتخاب کنید.</translation>
 <translation id="5657667036353380798">‏برنامه افزودنی خارجی برای نصب شدن به Chrome نسخه <ph name="MINIMUM_CHROME_VERSION" /> یا بالاتر نیاز دارد.</translation>
 <translation id="5658415415603568799">‏برای امنیت بیشتر، Smart Lock درخواست می‌کند گذرواژه‌تان را بعد از ۲۰ ساعت وارد کنید.</translation>
-<translation id="5659593005791499971">رایانامه</translation>
+<translation id="5659593005791499971">ایمیل</translation>
 <translation id="5659833766619490117">ترجمه این صفحه امکان‌پذیر نیست</translation>
 <translation id="5660204307954428567">مرتبط‌سازی با <ph name="DEVICE_NAME" /></translation>
 <translation id="5662477687021125631">دائمی</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">بی‌صدا کردن</translation>
 <translation id="5785583009707899920">‏امکانات فایل‌ها در Chrome</translation>
 <translation id="5787146423283493983">قرارداد کلید</translation>
+<translation id="5788127256798019331">‏فایل‌های Play</translation>
 <translation id="5788367137662787332">متأسفیم، حداقل یک پارتیشن در دستگاه <ph name="DEVICE_LABEL" /> نصب نمی‌شود.</translation>
 <translation id="5794414402486823030">همیشه با نظاره‌گر سیستم باز شود</translation>
 <translation id="5794786537412027208">‏خروج از همه برنامه‌های Chrome</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">ترجمه‌شده</translation>
 <translation id="5991049340509704927">بزرگ‌نمایی</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه را بردارد.}one{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه‌ها را بردارد.}other{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه‌ها را بردارد.}}</translation>
-<translation id="5993332328670040093">داده‌های شما دیگر اندازه‌گیری نمی‌شود</translation>
 <translation id="6002458620803359783">صداهای برگزیده</translation>
 <translation id="6005695835120147974">رهیاب رسانه</translation>
 <translation id="6006484371116297560">کلاسيک</translation>
@@ -3353,6 +3366,7 @@
 <translation id="6178664161104547336">انتخاب گواهی</translation>
 <translation id="6181431612547969857">بارگیری مسدود شد</translation>
 <translation id="6185132558746749656">مکان دستگاه</translation>
+<translation id="6185617499004995178">‏تأییدکننده CUPS IPP</translation>
 <translation id="6185696379715117369">صفحه بالا</translation>
 <translation id="6189273858858366896">‏راه‌اندازی یا مدیریت Network File Shares.</translation>
 <translation id="6189412234224385711">بازکردن با <ph name="EXTENSION_NAME" /></translation>
@@ -3370,7 +3384,7 @@
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: همگام‌سازی کار نمی‌کند</translation>
 <translation id="6212039847102026977">نمایش ویژگی‌های پیشرفته شبکه</translation>
 <translation id="6212168817037875041">خاموش کردن نمایشگر</translation>
-<translation id="6212752530110374741">پیوند رایانامه</translation>
+<translation id="6212752530110374741">پیوند ایمیل</translation>
 <translation id="6218058416316985984"><ph name="DEVICE_TYPE" /> آفلاین است. به اینترنت متصل شوید و دوباره امتحان کنید.</translation>
 <translation id="6220413761270491930">خطا هنگام بارگیری برنامه افزودنی</translation>
 <translation id="6223447490656896591">تصویر سفارشی:</translation>
@@ -3385,6 +3399,7 @@
 <translation id="6231881193380278751">‏افزودن پارامتر جستار در نشانی وب برای بازخوانی خودکار صفحه: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">باتری</translation>
 <translation id="6232116551750539448">اتصال به <ph name="NAME" /> قطع شده است</translation>
+<translation id="6235700927623181151">این برگه درحال هم‌رسانی محتوای میز کارتان است.</translation>
 <translation id="6237816943013845465">به شما امکان می‌دهد وضوح صفحه را تنظیم کنید</translation>
 <translation id="6238923052227198598">نگه داشتن جدیدترین یادداشت در صفحه درحالت قفل</translation>
 <translation id="6239558157302047471">تازه‌سازی قاب</translation>
@@ -3419,7 +3434,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> معمولاً بارگیری نمی‌شود و ممکن است خطرناک باشد.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{چاپگر جدید در شبکه شما}one{چاپگر جدید در شبکه شما}other{چاپگر جدید در شبکه شما}}</translation>
-<translation id="6286684120317096255">درحال اندازه‌گیری میزان مصرف داده</translation>
 <translation id="6286708577777130801">جزئیات گذرواژه ذخیره‌شده</translation>
 <translation id="6287852322318138013">یک برنامه را برای باز کردن این فایل انتخاب کنید</translation>
 <translation id="6289452883081499048">‏سرویس‌های شخصی‌شده Google مانند Play</translation>
@@ -3530,6 +3544,7 @@
 <translation id="6451180435462401570">‏مدیریت دستگاه‌های Cloud Print</translation>
 <translation id="6451689256222386810">اگر عبارت عبورتان را فراموش کرده‌اید یا می‌خواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگام‌سازی را بازنشانی کنید<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">عدم پذیرش</translation>
+<translation id="6455264371803474013">در سایت‌هایی خاص</translation>
 <translation id="6455894534188563617">پوشه &amp;جدید</translation>
 <translation id="6456394469623773452">عالی</translation>
 <translation id="6456631036739229488">‏تلفن Smart Lock تغییر کرد. برای به‌روزرسانی Smart Lock، گذرواژه‌تان را وارد کنید. دفعه بعد، تلفنتان قفل <ph name="DEVICE_TYPE" /> را باز می‌کند. در «تنظیمات»، Smart Lock را خاموش کنید.</translation>
@@ -3607,6 +3622,7 @@
 <translation id="657402800789773160">&amp;بارگیری مجدد این صفحه</translation>
 <translation id="6577284282025554716">بارگیری لغو شد: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">‏رمزگذاری گذرواژه‌های همگام‌سازی‌شده با گذرواژه و نام کاربری Google شما</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - محتوای میز کار هم‌رسانی می‌شود</translation>
 <translation id="6580151766480067746">‏نسخه ARC</translation>
 <translation id="6581162200855843583">‏پیوند Google Drive</translation>
 <translation id="6582421931165117398">برای محافظت از اطلاعات شخصی، هم‌اکنون گذرواژه را تغییر دهید. قبل از اینکه بتوانید گذرواژه را تغییر دهید، از شما درخواست می‌شود به سیستم وارد شوید.</translation>
@@ -3944,7 +3960,7 @@
 <translation id="7108634116785509031"><ph name="HOST" /> می‌خواهد از دوربین شما استفاده کند</translation>
 <translation id="7108668606237948702">Enter</translation>
 <translation id="7109543803214225826">میان‌بر حذف شد</translation>
-<translation id="7113502843173351041">دیدن نشانی رایانامه شما</translation>
+<translation id="7113502843173351041">دیدن نشانی ایمیل شما</translation>
 <translation id="7114054701490058191">گذرواژه‌ها مطابقت ندارند</translation>
 <translation id="7117228822971127758">لطفاً بعداً دوباره امتحان کنید</translation>
 <translation id="7117247127439884114">ورود مجدد به سیستم...</translation>
@@ -4012,7 +4028,7 @@
 <translation id="7221155467930685510">$1 گیگابایت</translation>
 <translation id="7221855153210829124">نمایش اعلان‌ها</translation>
 <translation id="7221869452894271364">تازه‌سازی این صفحه</translation>
-<translation id="7222232353993864120">نشانی رایانامه</translation>
+<translation id="7222232353993864120">نشانی ایمیل</translation>
 <translation id="7222373446505536781">F11</translation>
 <translation id="7225179976675429563">نوع شبکه موجود نیست</translation>
 <translation id="7228479291753472782">دستکاری در تنظیماتی که مشخص می‌کند آیا وب‌سایت‌ها می‌توانند از قابلیت‌هایی مثل موقعیت جغرافیایی، میکروفون، دوربین و غیره استفاده کنند.</translation>
@@ -4073,6 +4089,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{‏این برنامه می‌تواند مانع عملکرد درست Chrome شود.}one{‏این برنامه‌ها می‌توانند مانع عملکرد درست Chrome شوند.}other{‏این برنامه‌ها می‌توانند مانع عملکرد درست Chrome شوند.}}</translation>
 <translation id="7303900363563182677">دسترسی این سایت به نوشتار و تصاویر کپی‌شده در بریده‌دان مسدود شده است</translation>
 <translation id="730515362922783851">تبادل داده با هر دستگاهی در شبکه محلی یا اینترنت</translation>
+<translation id="7307129035224081534">موقتاً متوقف شد</translation>
 <translation id="7308002049209013926">‏از «راه‌انداز» برای دسترسی سریع به برنامه‌ها و فعالیت‌های جدید استفاده کنید. برای اینکه ازطریق صفحه‌کلید به اینجا بیایید Alt + Shift + L را فشار دهید.</translation>
 <translation id="7309257895202129721">نمایش &amp;کنترل‌ها</translation>
 <translation id="7310598146671372464">‏ورود به سیستم انجام نشد. این سرور از رمزگذاری‌های Kerberos مشخص‌شده پشتیبانی نمی‌کند. لطفاً با سرپرست سیستم تماس بگیرید.</translation>
@@ -4130,7 +4147,6 @@
 <translation id="7400839060291901923">تنظیم اتصال در <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">پنجره‌های بازشو مسدود شدند</translation>
 <translation id="7407430846095439694">وارد کردن و اتصال</translation>
-<translation id="7409233648990234464">راه‌اندازی مجدد و پاورواش</translation>
 <translation id="7409836189476010449">‏اجرای Flash</translation>
 <translation id="7410344089573941623">بپرسید که آیا <ph name="HOST" /> می‌خواهد به دوربین و میکرفون شما دسترسی داشته باشد</translation>
 <translation id="741204030948306876">بله، موافقم</translation>
@@ -4163,6 +4179,7 @@
 <translation id="7465778193084373987">‏نشانی وب ابطال گواهی Netscape</translation>
 <translation id="7469894403370665791">اتصال به این شبکه به صورت خودکار</translation>
 <translation id="747114903913869239">خطا: رمزگشایی برنامهٔ افزودنی ممکن نیست</translation>
+<translation id="7473753388963818366">بیایید <ph name="DEVICE_TYPE" /> را برایتان آماده کنیم</translation>
 <translation id="7473891865547856676">نه متشکرم</translation>
 <translation id="747459581954555080">بازیابی همه</translation>
 <translation id="7475671414023905704">‏نشانی وب گذرواژه گم شده Netscape</translation>
@@ -4287,8 +4304,9 @@
 <translation id="7665369617277396874">افزودن حساب</translation>
 <translation id="7671130400130574146">استفاده از نوار عنوان سیستم و مرزها</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />، در <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">‏صدایتان را برای Google ارسال کنید تا بتوانید هر فیلد نوشتاری را با دیکته کردن پر کنید.</translation>
 <translation id="7681095912841365527">سایت می‌تواند از بلوتوث استفاده کند</translation>
-<translation id="7683373461016844951">برای ادامه، روی «تأیید» کلیک کنید و سپس برای ایجاد نمایه‌ای جدید برای نشانی رایانامه‌ <ph name="DOMAIN" /> خود، روی «افزودن شخص» کلیک کنید.</translation>
+<translation id="7683373461016844951">برای ادامه، روی «تأیید» کلیک کنید و سپس برای ایجاد نمایه‌ای جدید برای نشانی ایمیل‌ <ph name="DOMAIN" /> خود، روی «افزودن شخص» کلیک کنید.</translation>
 <translation id="7684212569183643648">سرپرست سیستم شما نصب کرده است</translation>
 <translation id="7684559058815332124">بازدید از صفحه ورود به سیستم در پورتال محدود</translation>
 <translation id="7685049629764448582">حافطه جاوا اسکریپت</translation>
@@ -4328,6 +4346,7 @@
 <translation id="7740996059027112821">استاندارد</translation>
 <translation id="7748528009589593815">برگه قبلی</translation>
 <translation id="7748626145866214022">‏گزینه‌های بیشتر در نوار کنش دردسترس است. برای تمرکز بر نوار کنش، Alt + A را فشار دهید.</translation>
+<translation id="7750228210027921155">تصویردرتصویر</translation>
 <translation id="7751260505918304024">نمایش همه</translation>
 <translation id="7754704193130578113">قبل از بارگیری هر فایل، درباره مکان ذخیره سؤال شود</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4436,6 +4455,7 @@
 <translation id="7857949311770343000">این صفحه برگه جدیدی است که منتظرش بودید؟</translation>
 <translation id="786073089922909430">سرویس: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;فایلهای بارگیری‌شده</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{۱ کوکی}one{# کوکی}other{# کوکی}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - مرتبط</translation>
 <translation id="7870730066603611552">مرور گزینه‌های همگام‌سازی به دنبال راه‌اندازی</translation>
 <translation id="7870790288828963061">‏برنامه‌های کیوسکی با نسخه جدیدتر پیدا نشد. موردی برای به‌روزرسانی وجود ندارد. لطفاً فلش USB را خارج کنید.</translation>
@@ -4575,7 +4595,7 @@
 <translation id="8053390638574070785">تازه سازی این صفحه</translation>
 <translation id="8054029954190364711">قابلیت باز کردن قفل اثر انگشت</translation>
 <translation id="8054517699425078995">این نوع فایل می‌تواند به دستگاه شما آسیب برساند. با این حال می‌خواهید <ph name="FILE_NAME" /> را نگه دارید؟</translation>
-<translation id="8054563304616131773">لطفاً یک نشانی رایانامه معتبر وارد کنید</translation>
+<translation id="8054563304616131773">لطفاً یک نشانی ایمیل معتبر وارد کنید</translation>
 <translation id="8054921503121346576">‏صفحه‌کلید USB متصل شد</translation>
 <translation id="8058655154417507695">سال انقضا</translation>
 <translation id="8059178146866384858">فایلی به نام «$1» از قبل وجود دارد. لطفاً نام دیگری انتخاب کنید.</translation>
@@ -4757,6 +4777,7 @@
 <translation id="8373553483208508744">بی‌صدا کردن برگه‌ها</translation>
 <translation id="8382913212082956454">کپی آدرس &amp;ایمیل</translation>
 <translation id="8386903983509584791">اسکن کامل شد</translation>
+<translation id="8389492867173948260">به این افزونه اجازه دهید همه داده‌هایتان را در وب‌سایت‌هایی که بازدید می‌کنید بخواند و تغییر دهد:</translation>
 <translation id="8390449457866780408">سرور در دسترس نیست.</translation>
 <translation id="8391712576156218334">تصویر دردسترس نیست. بعداً دوباره امتحان کنید.</translation>
 <translation id="8392234662362215700">‏برای تغییر طرح کلی صفحه‌کلید، Control-Shift و فاصله را فشار دهید.</translation>
@@ -4788,6 +4809,7 @@
 <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> دیگر از سیستم خارج می‌شوید</translation>
 <translation id="8431909052837336408">تغییر پین سیم</translation>
 <translation id="8434480141477525001">‏درگاه اشکال‌زدایی NaCl</translation>
+<translation id="8435395510592618362">هویتتان را با <ph name="APP_NAME" /> تأیید کنید</translation>
 <translation id="843760761634048214">ذخیره کارت اعتباری</translation>
 <translation id="8438328416656800239">به مرورگر هوشمندی جابه‌جا شوید</translation>
 <translation id="8438566539970814960">بهبود جستجوها و مرور</translation>
@@ -4814,6 +4836,7 @@
 <translation id="8465252176946159372">معتبر نیست</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> برای اجرا به مجوز شما نیاز دارد</translation>
 <translation id="8466234950814670489">تار نوار</translation>
+<translation id="8466417995783206254">این برگه درحال پخش ویدیو در حالت تصویردرتصویر است.</translation>
 <translation id="8468750959626135884">‏قفل <ph name="DEVICE_TYPE" /> خود را با تلفن Android خود باز کنید.</translation>
 <translation id="8470028084415844044">برای اینکه همه گذرواژه‌هایتان را در همه دستگاه‌ها دریافت کنید، همگام‌سازی را روشن کنید.</translation>
 <translation id="8470513973197838199">گذرواژه‌های ذخیره‌شده برای <ph name="ORIGIN" /></translation>
@@ -4834,6 +4857,7 @@
 <translation id="8496717697661868878">اجرای این افزایه</translation>
 <translation id="8497219075884839166">‏امکانات WIndows</translation>
 <translation id="8498214519255567734">نگاه کردن به صفحه یا خواندن در نور کم را آسان‌تر می‌کند</translation>
+<translation id="8498395510292172881">‏ادامه خواندن در Chrome</translation>
 <translation id="8503813439785031346">نام کاربری</translation>
 <translation id="850875081535031620">نرم‌افزار مضری پیدا نشد</translation>
 <translation id="8509646642152301857">بارگیری واژه‌نامه بررسی املا انجام نشد.</translation>
@@ -4938,7 +4962,7 @@
 <translation id="8662978096466608964">‏Chrome نمی‌تواند کاغذدیواری را تنظیم کند.</translation>
 <translation id="8663099077749055505">بارگیری خودکار چند مورد در <ph name="HOST" /> همیشه مسدود باشد</translation>
 <translation id="8664389313780386848">&amp;مشاهده منبع صفحه</translation>
-<translation id="866611985033792019">برای شناسایی کاربران رایانامه، به این گواهی اطمینان شود</translation>
+<translation id="866611985033792019">برای شناسایی کاربران ایمیل، به این گواهی اطمینان شود</translation>
 <translation id="8666584013686199826">‏وقتی سایتی می‌خواهد به دستگاه‌های USB دسترسی پیدا کند سؤال شود</translation>
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> در حال حاضر تمام صفحه است و مکان‌نمای ماوس شما را غیرفعال کرده است.</translation>
 <translation id="8669284339312441707">گرم‌تر</translation>
@@ -4984,7 +5008,6 @@
 <translation id="8725066075913043281">سعی مجدد</translation>
 <translation id="8725178340343806893">موارد دلخواه/نشانک‌ها</translation>
 <translation id="8726206820263995930">خطا هنگام واکشی تنظیمات خط‌مشی از سرور: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">دیگر نشان داده نشود</translation>
 <translation id="8727344521467137076">‏نرم‌افزار مضری در رایانه‌تان وجود دارد. Chrome درحال حذف آن است و تنظیماتتان را بازیابی می‌کند تا عملکرد مرورگرتان دوباره عادی شود.</translation>
 <translation id="8730621377337864115">تمام</translation>
 <translation id="8732030010853991079">با کلیک کردن روی این نماد از این برنامه افزودنی استفاده کنید.</translation>
@@ -5160,7 +5183,7 @@
 <translation id="9011163749350026987">نماد همیشه نشان داده شود</translation>
 <translation id="9011178328451474963">آخرین برگه</translation>
 <translation id="9014987600015527693">نمایش یک تلفن دیگر</translation>
-<translation id="901834265349196618">رایانامه</translation>
+<translation id="901834265349196618">ایمیل</translation>
 <translation id="9019062154811256702">خواندن و تغییر تنظیمات تکمیل خودکار</translation>
 <translation id="9020362265352758658">۴ برابر</translation>
 <translation id="9021662811137657072">ویروس شناسایی شد</translation>
@@ -5175,6 +5198,7 @@
 <translation id="9027459031423301635">باز کردن پیوند در &amp;برگه جدید</translation>
 <translation id="9030515284705930323">‏سازمان شما فروشگاه Google Play را برای حسابتان فعال نکرده است. برای اطلاعات بیشتر با سرپرستتان تماس بگیرید.</translation>
 <translation id="9033857511263905942">&amp;جای‌گذاری</translation>
+<translation id="9034924485347205037">‏فایل‌های Linux</translation>
 <translation id="9035012421917565900">این موارد نمی‌توانند به «<ph name="DESTINATION_NAME" />» برگردانده شوند، بنابراین نمی‌توانید این اقدام را واگرد کنید.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">نمایش مورد اصلی</translation>
@@ -5210,7 +5234,7 @@
 <translation id="9073281213608662541">PAP</translation>
 <translation id="9074739597929991885">بلوتوث</translation>
 <translation id="9074836595010225693">‏موشواره USB متصل شد</translation>
-<translation id="9076523132036239772">متأسفم، رایانامه و گذرواژه شما تأیید نشد. ابتدا به یک شبکه متصل شوید.</translation>
+<translation id="9076523132036239772">متأسفم، ایمیل و گذرواژه شما تأیید نشد. ابتدا به یک شبکه متصل شوید.</translation>
 <translation id="9084064520949870008">بازکردن به‌عنوان پنجره</translation>
 <translation id="9088234649737575428"><ph name="PLUGIN_NAME" /> توسط خط‌مشی شرکت مسدود شده است</translation>
 <translation id="9088917181875854783">لطفاً تأیید کنید که این کلیدواژه در دستگاه "<ph name="DEVICE_NAME" />" نشان داده می‌شود:</translation>
@@ -5275,6 +5299,7 @@
 <translation id="9173995187295789444">درحال جستجوی دستگاه‌های بلوتوث...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - دستگاه بلوتوث متصل شد</translation>
 <translation id="9177499212658576372">در حال حاضر به شبکه <ph name="NETWORK_TYPE" /> متصل هستید.</translation>
+<translation id="9179734824669616955">‏نصب Linux (بتا) در <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">‏این فرایند ممکن است چند دقیقه طول بکشد. درحال شروع محتوی Linux.</translation>
 <translation id="9180380851667544951">سایت می‌تواند صفحه‌نمایشتان را هم‌رسانی کند</translation>
 <translation id="9188441292293901223">‏لطفاً تلفنتان را به نسخه جدیدتر Android به‌روزرسانی کنید تا قفل <ph name="DEVICE_TYPE" /> را باز کنید.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index 0c2a43d6..90e7a33 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Kysy ennen käyttöä</translation>
 <translation id="1434696352799406980">Tämä nollaa aloitussivun, Uusi välilehti ‑sivun, hakukoneen ja kiinnitetyt välilehdet. Lisäksi kaikki laajennukset poistetaan käytöstä ja väliaikaiset tiedot kuten evästeet poistetaan. Kirjanmerkkejä, selaushistoriaa tai tallennettuja salasanoja ei poisteta.</translation>
 <translation id="1434886155212424586">Etusivu on Uusi välilehti -sivu</translation>
+<translation id="1436671784520050284">Jatka määritystä</translation>
 <translation id="1436784010935106834">Poistettu</translation>
 <translation id="1438632560381091872">Poista välilehtien mykistys</translation>
 <translation id="1442392616396121389">Reititysetuliite</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzapala</translation>
 <translation id="1467432559032391204">Vasemmalle</translation>
 <translation id="1468571364034902819">Profiilia ei voi käyttää</translation>
+<translation id="1470533772306424441">Nämä sovellukset asennetaan. Play Kaupasta löydät lisää sovelluksia laitteellesi.</translation>
 <translation id="1470811252759861213"><ph name="SIGN_IN_LINK" />, niin voit käyttää laajennuksia kaikilla tietokoneillasi.</translation>
 <translation id="1474339897586437869">Tiedostoa <ph name="FILENAME" /> ei lähetetty. Google Drivessasi ei ole riittävästi vapaata tallennustilaa.</translation>
 <translation id="1475502736924165259">Sinulla on tallennettuja varmenteita, jotka eivät sovi muihin luokkiin.</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">L&amp;oitonna</translation>
 <translation id="1830550083491357902">Ei kirjautunut</translation>
 <translation id="1832511806131704864">Puhelimen vaihdos päivitettiin</translation>
-<translation id="1832685970989658809">Järjestelmänvalvoja on poistanut tallennetut maksutavat käytöstä.</translation>
 <translation id="1834503245783133039">Lataus epäonnistui: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Tyhjennä haku</translation>
 <translation id="1838709767668011582">Google-sivusto</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Lähettäjä:</translation>
 <translation id="2193365732679659387">Luottamusasetukset</translation>
 <translation id="2195729137168608510">Sähköpostin suojaus</translation>
+<translation id="2199298570273670671">Virhe</translation>
 <translation id="2200356397587687044">Chrome tarvitsee luvan jatkamiseen</translation>
 <translation id="220138918934036434">Piilota painike</translation>
 <translation id="2202898655984161076">Tulostimien luetteloinnissa tapahtui virhe. Kaikkia tulostimiasi ei ole välttämättä rekisteröity palveluun <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Näytä salasana</translation>
 <translation id="2436186046335138073">Haluatko tahon <ph name="HANDLER_HOSTNAME" /> avaavan kaikki <ph name="PROTOCOL" />-linkit?</translation>
 <translation id="2436707352762155834">Vähintään</translation>
-<translation id="2437139306601019091">Datankäytön mittaaminen päättyi.</translation>
 <translation id="2440604414813129000">Näytä a&amp;lkuperä</translation>
 <translation id="2445081178310039857">Laajennuksen juurihakemisto tarvitaan.</translation>
 <translation id="2445484935443597917">Luo uusi profiili</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> haluaa vahvistaa henkilöllisyytesi</translation>
 <translation id="2448312741937722512">Tyyppi</translation>
 <translation id="2450223707519584812">Et voi lisätä käyttäjiä, koska Google-sovellusliittymäavaimia ei löydy. Saat lisätietoja osoitteesta <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Haluatko poistaa synkronoinnin käytöstä ja kirjautua ulos?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Tiedosto on jo olemassa</translation>
 <translation id="2453860139492968684">Valmis</translation>
 <translation id="2454247629720664989">Avainsana</translation>
+<translation id="245661998428026871">Videon toisto kuva kuvassa ‑tilassa lopetetaan.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> pyytää lupaa kopioida tiedostoja tallennusvälineeltä <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Varmenteen myöntäjän avaimen tunnus</translation>
 <translation id="2462752602710430187">Lisättiin <ph name="PRINTER_NAME" /></translation>
@@ -1363,6 +1366,7 @@
 <translation id="304826556400666995">Poista välilehtien mykistys</translation>
 <translation id="3053013834507634016">Varmenteen avaimen käyttö</translation>
 <translation id="3057861065630527966">Varmuuskopioi valokuvasi ja videosi.</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Ota käyttöön Teksti puhuttuna</translation>
 <translation id="3061707000357573562">Virheenkorjauspalvelu</translation>
 <translation id="3064410671692449875">Riittämättömät tiedot</translation>
@@ -1411,6 +1415,7 @@
 <translation id="313205617302240621">Unohditko salasanasi?</translation>
 <translation id="3132996321662585180">Päivitä päivittäin</translation>
 <translation id="3135204511829026971">Käännä ruutua</translation>
+<translation id="313638818480447860">Löysimme <ph name="NUMBER_OF_APPS" /> tiliisi yhdistettyä, tälle laitteelle optimoitua sovellusta.</translation>
 <translation id="313963229645891001">Ladataan, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Keltainen oletusavatar</translation>
 <translation id="3140353188828248647">Keskitä osoitepalkkiin</translation>
@@ -1441,6 +1446,7 @@
 <translation id="3182749001423093222">Oikeinkirjoituksen tarkistus</translation>
 <translation id="3183139917765991655">Profiilien tuoja</translation>
 <translation id="3184560914950696195">Kohteeseen $1 ei voi tallentaa. Muokatut kuvat tallennetaan Lataukset-kansioon.</translation>
+<translation id="3188257591659621405">Omat tiedostot</translation>
 <translation id="3188465121994729530">Liukuva keskiarvo</translation>
 <translation id="3190558889382726167">Salasana on tallennettu</translation>
 <translation id="3192947282887913208">Äänitiedostot</translation>
@@ -1528,6 +1534,7 @@
 <translation id="3326821416087822643">Pakataan tiedostoa <ph name="FILE_NAME" />…</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Sovelluksen tiedot</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – Video toistetaan kuva kuvassa ‑tilassa</translation>
 <translation id="3335337277364016868">Nauhoitusvuosi</translation>
 <translation id="3335947283844343239">Avaa suljettu välilehti uudelleen</translation>
 <translation id="3336664756920573711">Avaa <ph name="DEVICE_TYPE" /> Android-puhelimella</translation>
@@ -1547,6 +1554,7 @@
 <translation id="3360297538363969800">Tulostus epäonnistui. Tarkista tulostin ja yritä uudelleen.</translation>
 <translation id="3364721542077212959">Näyttökynätyökalut</translation>
 <translation id="3365598184818502391">Käytä joko Ctrl- tai Alt-näppäintä</translation>
+<translation id="3367047597842238025">Yksilöi <ph name="DEVICE_TYPE" /> makusi mukaiseksi ja löydä sen kaikki hienot ominaisuudet.</translation>
 <translation id="3368922792935385530">Yhdistetty</translation>
 <translation id="3369624026883419694">Jäsennetään palvelinta...</translation>
 <translation id="337286756654493126">Lue sovelluksessa avaamiasi kansioita</translation>
@@ -1560,6 +1568,7 @@
 <translation id="3389312115541230716">Klikkaa tehtäväpalkissa olevaa <ph name="SMALL_PRODUCT_LOGO" />-kuvaketta hiiren kakkospainikkeella.</translation>
 <translation id="3391716558283801616">Välilehti 7</translation>
 <translation id="3396331542604645348">Valittu tulostin ei ole käytettävissä tai oikein asennettu. Varmista, että tulostin on kunnossa, tai valitse toinen tulostin.</translation>
+<translation id="3396800784455899911">Kun valitset Hyväksy ja jatka, hyväksyt käsittelyn näissä Google-palveluissa edellä kuvatuilla tavoilla.</translation>
 <translation id="3399432415385675819">Ilmoitukset poistetaan käytöstä.</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Tämän sivuston salasanoja ei ole tallennettu</translation>
@@ -1788,10 +1797,13 @@
 <translation id="3726463242007121105">Tätä laitetta ei voi avata, sillä sen tiedostojärjestelmää ei tueta.</translation>
 <translation id="3727148787322499904">Tämän asetuksen muuttaminen vaikuttaa kaikkiin jaettuihin verkkoihin.</translation>
 <translation id="3727187387656390258">Näytä ponnahdusikkuna</translation>
+<translation id="3729506734996624908">Sallitut sivustot</translation>
 <translation id="3732078975418297900">Virhe rivillä <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-palvelin ja Step-up</translation>
+<translation id="3735740477244556633">Lajitteluperuste</translation>
 <translation id="3737274407993947948">Virhe asennettaessa Linuxia…</translation>
 <translation id="3737536731758327622">Latauksesi näkyvät täällä.</translation>
+<translation id="3738671331307774213">Henkilöllisyyden vahvistaminen auttaa suojaamaan yksityistä dataasi.</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Avataanko <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> näkyy nyt hallintakonsolissa</translation>
@@ -1876,10 +1888,10 @@
 <translation id="3846116211488856547">Saat verkkosivustojen kehittämistyökaluja, Android-sovelluksia ja paljon muuta. Linuxin asennus lataa <ph name="DOWNLOAD_SIZE" /> dataa.</translation>
 <translation id="385051799172605136">Edellinen</translation>
 <translation id="3851428669031642514">Lataa suojaamattomat koodit</translation>
+<translation id="3854599674806204102">Valitse vaihtoehto.</translation>
 <translation id="3855441664322950881">Pakkaa laajennus</translation>
 <translation id="3855676282923585394">Tuo kirjanmerkit ja asetukset...</translation>
 <translation id="3856800405688283469">Valitse aikavyöhyke</translation>
-<translation id="3856921555429624101">Datankäytön mittaaminen päättyi.</translation>
 <translation id="3857228364945137633">Kokeile Smart Lockia laitteen <ph name="DEVICE_TYPE" /> lukituksen avaamiseen ilman salasanaa, kun puhelimesi on lähellä.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167">Synkronointi keskeytetty: <ph name="PROFILE_NAME" /></translation>
@@ -2247,7 +2259,6 @@
 <translation id="4508051413094283164">Avaa kaikki incognito-ikkunassa</translation>
 <translation id="4508265954913339219">Aktivointi epäonnistui</translation>
 <translation id="4508765956121923607">Näytä lähdek&amp;oodi</translation>
-<translation id="4509823033118379431">Kuvia ei ole tällä hetkellä saatavilla. Muodosta yhteys uudelleen nähdäksesi kokoelmat.</translation>
 <translation id="451407183922382411">Palvelun tarjoaa <ph name="COMPANY_NAME" />.</translation>
 <translation id="4514542542275172126">Luo uusi valvottu käyttäjä</translation>
 <translation id="4514610446763173167">Valitse videon toisto tai keskeytys</translation>
@@ -2324,6 +2335,7 @@
 <translation id="4627442949885028695">Jatka siitä, mihin jäit toisella laitteella</translation>
 <translation id="4628314759732363424">Vaihda…</translation>
 <translation id="4628757576491864469">Laitteet</translation>
+<translation id="4628948037717959914">Valokuva</translation>
 <translation id="4630590996962964935">Virheellinen merkki: $1</translation>
 <translation id="4631887759990505102">Esittäjä</translation>
 <translation id="4632483769545853758">Poista välilehden mykistys</translation>
@@ -2509,7 +2521,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> valmiina varmuuskopiointiin</translation>
 <translation id="4907161631261076876">Tätä tiedostoa ei ladata usein ja se saattaa olla haitallinen.</translation>
 <translation id="4907306957610201395">Käyttöoikeusluokka</translation>
-<translation id="4907824805858067479">Järjestelmänvalvoja on poistanut tallennetut kortit käytöstä.</translation>
 <translation id="4908811072292128752">Avaa uusi välilehti, niin voit selailla kahdella sivulla yhtä aikaa.</translation>
 <translation id="4909038193460299775">Koska <ph name="DOMAIN" /> hallinnoi tätä tiliä, kirjanmerkkisi, historiasi, salasanasi ja muut asetuksesi tyhjennetään tältä laitteelta. Tietosi pysyvät kuitenkin Google-tililläsi ja niitä voidaan hallinnoida <ph name="BEGIN_LINK" />Google Hallintapaneelissa<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Rekisteröinti onnistui</translation>
@@ -2541,6 +2552,7 @@
 <translation id="4955814292505481804">Vuosittainen</translation>
 <translation id="4957949153200969297">Ota käyttöön vain synkronointiominaisuudet: <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Kortit yhdessä paikassa</translation>
 <translation id="496226124210045887">Valitsemasi kansio sisältää arkaluonteisia tiedostoja. Haluatko varmasti myöntää käyttäjälle "$1" pysyvän käyttöoikeuden tähän kansioon?</translation>
 <translation id="4964455510556214366">Asettelu</translation>
 <translation id="4964673849688379040">Tarkistetaan…</translation>
@@ -2588,6 +2600,7 @@
 <translation id="5027562294707732951">Lisää laajennus</translation>
 <translation id="5029568752722684782">Poista kopio</translation>
 <translation id="5030338702439866405">Myöntänyt</translation>
+<translation id="503155457707535043">Sovelluksia ladataan</translation>
 <translation id="503498442187459473"><ph name="HOST" /> haluaa käyttää kameraasi ja mikrofoniasi.</translation>
 <translation id="5036662165765606524">Älä anna sivustojen ladata useita tiedostoja automaattisesti</translation>
 <translation id="5037676449506322593">Valitse kaikki</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">Mykistä</translation>
 <translation id="5785583009707899920">Chrome-tiedostoapuohjelma</translation>
 <translation id="5787146423283493983">Avainsopimus</translation>
+<translation id="5788127256798019331">Play-tiedostot</translation>
 <translation id="5788367137662787332">Ainakin yhtä laitteen <ph name="DEVICE_LABEL" /> osiosta ei voitu ottaa käyttöön.</translation>
 <translation id="5794414402486823030">Avaa aina järjestelmän katselusovelluksella</translation>
 <translation id="5794786537412027208">Sulje kaikki Chrome-sovellukset</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">Käännetty</translation>
 <translation id="5991049340509704927">Suurenna</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Pyydä järjestelmänvalvojaasi poistamaan tämä sovellus, jotta voit varmasti jatkaa verkon selaamista.}other{Pyydä järjestelmänvalvojaasi poistamaan nämä sovellukset, jotta voit varmasti jatkaa verkon selaamista.}}</translation>
-<translation id="5993332328670040093">Datankäyttöäsi ei enää mitata.</translation>
 <translation id="6002458620803359783">Ensisijaiset äänet</translation>
 <translation id="6005695835120147974">Mediareititin</translation>
 <translation id="6006484371116297560">Perinteinen</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Valitse varmenne</translation>
 <translation id="6181431612547969857">Lataus estettiin</translation>
 <translation id="6185132558746749656">Laitteen sijainti</translation>
+<translation id="6185617499004995178">CUPS IPP ‑vahvistus</translation>
 <translation id="6185696379715117369">Sivu ylös</translation>
 <translation id="6189273858858366896">Määritä tai hallinnoi verkkotiedostojen jakamista.</translation>
 <translation id="6189412234224385711">Avaa laajennuksella <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Lisää URL-osoitteeseen kyselyn param-arvo, jotta sivu päivitetään automaattisesti: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Akku</translation>
 <translation id="6232116551750539448">Yhteys kohteeseen <ph name="NAME" /> on katkennut.</translation>
+<translation id="6235700927623181151">Tämä välilehti jakaa työpöydän sisältöä.</translation>
 <translation id="6237816943013845465">Sallii näytön resoluution säätämisen.</translation>
 <translation id="6238923052227198598">Jätä viimeisin muistiinpano lukitusnäytölle</translation>
 <translation id="6239558157302047471">Lataa kehys uudelleen</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> on harvinainen ladattava tiedosto, ja se voi olla vaarallinen.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Verkossasi on uusi tulostin}other{Verkossasi on uusia tulostimia}}</translation>
-<translation id="6286684120317096255">Datankäytön mittaus aloitetaan.</translation>
 <translation id="6286708577777130801">Tallennettujen salasanojen tiedot</translation>
 <translation id="6287852322318138013">Valitse sovellus, jolla haluat avata tämän tiedoston</translation>
 <translation id="6289452883081499048">Play ja muut räätälöidyt Google-palvelut</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Hallitse Cloud Print ‑laitteita</translation>
 <translation id="6451689256222386810">Jos unohdat tunnuslauseesi tai haluat muuttaa tätä asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Hylkää</translation>
+<translation id="6455264371803474013">Tietyillä sivustoilla</translation>
 <translation id="6455894534188563617">Uusi ka&amp;nsio</translation>
 <translation id="6456394469623773452">Hyväksyttävä</translation>
 <translation id="6456631036739229488">Smart Lock ‑puhelin on vaihtunut. Anna salasana, jotta Smart Lock voidaan päivittää. Seuraavalla kerralla puhelimesi avaa laitteen <ph name="DEVICE_TYPE" /> lukituksen. Ota Smart Lock pois käytöstä Asetuksissa.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Päivitä tämä sivu</translation>
 <translation id="6577284282025554716">Lataus peruutettu: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Salaa synkronoidut salasanat Google-käyttäjänimellä ja ‑salasanalla</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – työpöydän sisältöä jaetaan</translation>
 <translation id="6580151766480067746">ARC-versio</translation>
 <translation id="6581162200855843583">Google Drive -linkki</translation>
 <translation id="6582421931165117398">Vaihda salasanasi nyt, jotta henkilötietosi pysyvät turvassa. Sinun on kirjauduttava sisään ennen salasanan vaihtamista.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Tämä sovellus saattaa estää Chromea toimimasta oikein}other{Nämä sovellukset saattavat estää Chromea toimimasta oikein}}</translation>
 <translation id="7303900363563182677">Tämä sivu ei saa nähdä leikepöydälle kopioitua tekstiä tai kuvia.</translation>
 <translation id="730515362922783851">Vaihtaa tietoja minkä tahansa paikallisverkossa tai internetissä olevan laitteen kanssa.</translation>
+<translation id="7307129035224081534">Keskeytetty</translation>
 <translation id="7308002049209013926">Siirry uusiin sovelluksiin ja toimintoihin nopeasti käynnistysohjelmalla. Avaa se näppäimistöllä painamalla Alt + vaihto + L.</translation>
 <translation id="7309257895202129721">Näytä &amp;painikkeet</translation>
 <translation id="7310598146671372464">Kirjautuminen epäonnistui. Palvelin ei tue määritettyjä Kerberos-salaustyyppejä. Ota yhteyttä järjestelmänvalvojaan.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Avaa <ph name="PHONE_NAME" /> ja määritä yhteys</translation>
 <translation id="740624631517654988">Ponnahdusikkuna estetty</translation>
 <translation id="7407430846095439694">Tuo ja sido</translation>
-<translation id="7409233648990234464">Käynnistä uudelleen ja tee Powerwash</translation>
 <translation id="7409836189476010449">suorittaa Flashin</translation>
 <translation id="7410344089573941623">Kysy, jos <ph name="HOST" /> haluaa käyttää kameraa ja mikrofonia</translation>
 <translation id="741204030948306876">Kyllä</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Netscape-varmenteen kumoamis-URL</translation>
 <translation id="7469894403370665791">Yhdistä automaattisesti tähän verkkoon</translation>
 <translation id="747114903913869239">Virhe: laajennuksen koodauksen purkaminen ei onnistunut</translation>
+<translation id="7473753388963818366">Valmistellaan <ph name="DEVICE_TYPE" /> sinua varten</translation>
 <translation id="7473891865547856676">Ei kiitos</translation>
 <translation id="747459581954555080">Palauta kaikki</translation>
 <translation id="7475671414023905704">Netscapen unohtunut salasana -URL</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Lisää tili</translation>
 <translation id="7671130400130574146">Käytä järjestelmän otsikkoriviä ja reunoja</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> (<ph name="PAGE_TITLE" />)</translation>
+<translation id="7676867886086876795">Lähetä äänesi Googlelle, jotta sanelu on mahdollista kaikissa tekstikentissä.</translation>
 <translation id="7681095912841365527">Sivusto voi käyttää Bluetoothia</translation>
 <translation id="7683373461016844951">Jos haluat jatkaa, valitse OK, Lisää henkilö ja luo sähköpostiosoitteellasi (<ph name="DOMAIN" />) uusi profiili.</translation>
 <translation id="7684212569183643648">Järjestelmänvalvojasi asentama</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Vakio</translation>
 <translation id="7748528009589593815">Edellinen välilehti</translation>
 <translation id="7748626145866214022">Lisää valintoja on saatavilla toimintopalkissa. Aseta toimintopalkki aktiiviseksi painamalla Alt + A.</translation>
+<translation id="7750228210027921155">Kuva kuvassa</translation>
 <translation id="7751260505918304024">Näytä kaikki</translation>
 <translation id="7754704193130578113">Kysy, minne kukin tiedosto tallennetaan ennen lataamista</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4439,6 +4458,7 @@
 <translation id="7857949311770343000">Onko tämä haluamasi Uusi välilehti -sivu?</translation>
 <translation id="786073089922909430">Palvelu: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Lataukset</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 eväste}other{# evästettä}}</translation>
 <translation id="786957569166715433">Laitepari muodostettu laitteen <ph name="DEVICE_NAME" /> kanssa</translation>
 <translation id="7870730066603611552">Tarkista synkronointiasetukset määrityksen jälkeen</translation>
 <translation id="7870790288828963061">Ei löytynyt kioskisovelluksia, joiden versio on uudempi. Ei päivitettävää. Irrota USB-tikku.</translation>
@@ -4760,6 +4780,7 @@
 <translation id="8373553483208508744">Mykistä välilehdet</translation>
 <translation id="8382913212082956454">Kopioi s&amp;ähköpostiosoite</translation>
 <translation id="8386903983509584791">Etsintä valmis</translation>
+<translation id="8389492867173948260">Salli tämän laajennuksen lukea ja muuttaa kaikkea dataasi avatuilla verkkosivustoilla:</translation>
 <translation id="8390449457866780408">Palvelin ei ole käytettävissä.</translation>
 <translation id="8391712576156218334">Kuva ei ole saatavilla. Yritä myöhemmin uudelleen.</translation>
 <translation id="8392234662362215700">Vaihda näppäimistöasettelua painamalla Control + Shift + välilyönti.</translation>
@@ -4791,6 +4812,7 @@
 <translation id="84297032718407999">Sinut kirjataan ulos <ph name="LOGOUT_TIME_LEFT" /> päästä</translation>
 <translation id="8431909052837336408">Vaihda SIM-kortin PIN-koodi</translation>
 <translation id="8434480141477525001">NaCl-vianetsintäportti</translation>
+<translation id="8435395510592618362">Henkilöllisyyden vahvistaminen: <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Tallenna luottokortti.</translation>
 <translation id="8438328416656800239">Siirry käyttämään älykästä selainta.</translation>
 <translation id="8438566539970814960">Paranna hakuja ja selausta</translation>
@@ -4817,6 +4839,7 @@
 <translation id="8465252176946159372">Virheellinen</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> tarvitsee suoritusluvan.</translation>
 <translation id="8466234950814670489">Tar-arkisto</translation>
+<translation id="8466417995783206254">Tämä välilehti toistaa videota kuva kuvassa ‑tilassa.</translation>
 <translation id="8468750959626135884">Avaa <ph name="DEVICE_TYPE" /> Android-puhelimellasi.</translation>
 <translation id="8470028084415844044">Ota synkronointi käyttöön, niin voit käyttää salasanojasi kaikilla laitteilla.</translation>
 <translation id="8470513973197838199">Tallennetut salasanat: <ph name="ORIGIN" /></translation>
@@ -4837,6 +4860,7 @@
 <translation id="8496717697661868878">Suorita tämä laajennus</translation>
 <translation id="8497219075884839166">Windows-apuohjelmat</translation>
 <translation id="8498214519255567734">Tämä helpottaa näytön katselua ja lukemista hämärässä.</translation>
+<translation id="8498395510292172881">Jatka lukemista Chromessa</translation>
 <translation id="8503813439785031346">Käyttäjätunnus</translation>
 <translation id="850875081535031620">Haittaohjelmia ei löytynyt.</translation>
 <translation id="8509646642152301857">Oikeinkirjoituksen tarkistuksen sanakirjan lataus epäonnistui.</translation>
@@ -4987,7 +5011,6 @@
 <translation id="8725066075913043281">Yritä uudelleen</translation>
 <translation id="8725178340343806893">Suosikit/Kirjanmerkit</translation>
 <translation id="8726206820263995930">Virhe noudettaessa käytäntöasetuksia palvelimelta: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Älä näytä tätä uudelleen.</translation>
 <translation id="8727344521467137076">Tietokoneellasi on havaittu haittaohjelmia. Chrome poistaa niitä ja palauttaa asetuksesi, jotta selaimesi toimii taas normaalisti.</translation>
 <translation id="8730621377337864115">Valmis</translation>
 <translation id="8732030010853991079">Käytä laajennusta klikkaamalla tätä kuvaketta.</translation>
@@ -5178,6 +5201,7 @@
 <translation id="9027459031423301635">Avaa linkki uudessa &amp;välilehdessä</translation>
 <translation id="9030515284705930323">Organisaatiosi ei ole sallinut tilillesi Google Play Kaupan käyttöä. Kysy lisätietoja järjestelmänvalvojaltasi.</translation>
 <translation id="9033857511263905942">&amp;Liitä</translation>
+<translation id="9034924485347205037">Linux-tiedostot</translation>
 <translation id="9035012421917565900">Kohteita ei voi siirtää takaisin paikkaan <ph name="DESTINATION_NAME" />, joten tätä toimintoa ei voi kumota.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Näytä alkuperäinen</translation>
@@ -5278,6 +5302,7 @@
 <translation id="9173995187295789444">Haetaan Bluetooth-laitteita…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth-laite yhdistetty</translation>
 <translation id="9177499212658576372">Olet nyt yhdistettynä <ph name="NETWORK_TYPE" />verkkoon.</translation>
+<translation id="9179734824669616955">Määritä <ph name="DEVICE_TYPE" /> Linux (beta) ‑käyttöön</translation>
 <translation id="9180281769944411366">Tämä voi kestää muutaman minuutin. Käynnistetään Linux-säilöä.</translation>
 <translation id="9180380851667544951">Sivusto voi jakaa näyttösi</translation>
 <translation id="9188441292293901223">Päivitä puhelimesi uudempaan Android-versioon, jotta voit avata laitteen <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index c6da58d..8f067d5e 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Magtanong bago i-access</translation>
 <translation id="1434696352799406980">Ire-reset nito ang iyong page sa pagsisimula, page ng bagong tab, search engine at mga naka-pin na tab. Idi-disable din nito ang lahat ng extension at iki-clear ang pansamantalang data tulad ng cookies. Hindi iki-clear ang iyong mga bookmark, history at naka-save na password.</translation>
 <translation id="1434886155212424586">Ang homepage ay ang pahina ng Bagong Tab</translation>
+<translation id="1436671784520050284">Ipagpatuloy ang pag-set up</translation>
 <translation id="1436784010935106834">Inalis</translation>
 <translation id="1438632560381091872">Mag-unmute ng mga tab</translation>
 <translation id="1442392616396121389">Routing prefix</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Hiwa ng pizza</translation>
 <translation id="1467432559032391204">Kaliwa</translation>
 <translation id="1468571364034902819">Hindi magagamit ang profile na ito</translation>
+<translation id="1470533772306424441">Ii-install namin ang mga app na iyon para sa iyo. Makakakita ka ng higit pang app para sa iyong device sa Play Store.</translation>
 <translation id="1470811252759861213">Upang mailagay ang iyong mga extension sa lahat ng iyong computer, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Hindi na-upload ang "<ph name="FILENAME" />." Walang sapat na bakanteng espasyo sa iyong Google Drive.</translation>
 <translation id="1475502736924165259">Mayroon kang mga certificate sa file na hindi umaangkop sa alinman sa iba pang mga kategorya</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Mag-zoom &amp;Out</translation>
 <translation id="1830550083491357902">Hindi naka-sign in</translation>
 <translation id="1832511806131704864">Na-update na ang pagbabago sa telepono</translation>
-<translation id="1832685970989658809">Na-disable ng iyong administrator ang mga naka-save na paraan ng pagbabayad</translation>
 <translation id="1834503245783133039">Hindi na-download: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">I-clear ang paghahanap</translation>
 <translation id="1838709767668011582">Site ng Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Mula:</translation>
 <translation id="2193365732679659387">Mga setting ng pagtitiwala</translation>
 <translation id="2195729137168608510">Proteksyon sa Email</translation>
+<translation id="2199298570273670671">Nagka-error</translation>
 <translation id="2200356397587687044">Kailangan ng Chrome ng pahintulot upang magpatuloy</translation>
 <translation id="220138918934036434">Itago ang pindutan</translation>
 <translation id="2202898655984161076">Nagkaproblema sa paglilista ng mga printer. Maaaring hindi matagumpay na nairehistro ang ilan sa iyong mga printer <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Ipakita ang password</translation>
 <translation id="2436186046335138073">Papayagan ang <ph name="HANDLER_HOSTNAME" /> na buksan ang lahat ng link ng <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Tapos na ang pagsusukat sa paggamit ng data</translation>
 <translation id="2440604414813129000">Tingnan s&amp;ource</translation>
 <translation id="2445081178310039857">Kinakailangan ang pinagmulang direktoryo ng extension.</translation>
 <translation id="2445484935443597917">Gumawa ng Bagong Profile</translation>
+<translation id="2446585455334014596">Gustong i-verify ng <ph name="APP_NAME" /> ang iyong pagkakakilanlan</translation>
 <translation id="2448312741937722512">Uri</translation>
 <translation id="2450223707519584812">Hindi mo magagawang magdagdag ng mga user dahil wala ang mga Google API key. Tingnan ang <ph name="DETAILS_URL" /> para sa mga detalye.</translation>
 <translation id="2450310832094867474">I-off ang pag-sync at mag-sign out?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Umiiral na ang file</translation>
 <translation id="2453860139492968684">Tapos na</translation>
 <translation id="2454247629720664989">Keyword</translation>
+<translation id="245661998428026871">Hihinto sa pag-play ang video sa picture-in-picture mode.</translation>
 <translation id="2457246892030921239">Gustong kumopya ng <ph name="APP_NAME" /> ng mga file mula sa <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Certification Authority Key ID</translation>
 <translation id="2462752602710430187">Idinagdag ang <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Mag-unmute ng Mga Tab</translation>
 <translation id="3053013834507634016">Paggamit ng Certificate Key </translation>
 <translation id="3057861065630527966">I-back up ang iyong mga larawan at video</translation>
+<translation id="3059313675706898490">Mga Android Message</translation>
 <translation id="3060379269883947824">I-enable ang Select to Speak</translation>
 <translation id="3061707000357573562">Serbisyo sa Pag-patch</translation>
 <translation id="3064410671692449875">Hindi sapat ang data</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Nakalimutan mo ba ang iyong password?</translation>
 <translation id="3132996321662585180">I-refresh araw-araw</translation>
 <translation id="3135204511829026971">I-rotate ang screen</translation>
+<translation id="313638818480447860">Nakakita kami ng <ph name="NUMBER_OF_APPS" /> (na) app na nakakonekta sa iyong account na naka-optimize para sa device na ito.</translation>
 <translation id="313963229645891001">Nagda-download, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Default na dilaw na avatar</translation>
 <translation id="3140353188828248647">Address bar sa pagtuon</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Pang-check ng pagbabaybay</translation>
 <translation id="3183139917765991655">Pang-import ng Profile</translation>
 <translation id="3184560914950696195">Hindi mai-save sa $1. Ang mga na-edit na larawan ay mase-save sa folder na Mga Download.</translation>
+<translation id="3188257591659621405">Aking mga file</translation>
 <translation id="3188465121994729530">Average ng Paglipat</translation>
 <translation id="3190558889382726167">Nai-save ang password</translation>
 <translation id="3192947282887913208">Mga Audio File</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Sini-zip ang <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Impormasyon ng app</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Nagpe-play ang video sa picture-in-picture mode</translation>
 <translation id="3335337277364016868">Taon kung kailan na-record</translation>
 <translation id="3335947283844343239">Muling buksan ang Nakasarang Tab</translation>
 <translation id="3336664756920573711">I-unlock ang iyong <ph name="DEVICE_TYPE" /> gamit ang Android phone mo</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Hindi nakapag-print. Pakisuri ang iyong printer at subukang muli.</translation>
 <translation id="3364721542077212959">Mga stylus tool</translation>
 <translation id="3365598184818502391">Isa lang sa Ctrl o Alt ang gamitin</translation>
+<translation id="3367047597842238025">I-set up ang iyong <ph name="DEVICE_TYPE" /> sa paraang gusto mo at tuklasin ang lahat ng kamangha-manghang kakayahan nitong maaari mong gamitin.</translation>
 <translation id="3368922792935385530">Nakakonekta</translation>
 <translation id="3369624026883419694">Nilulutas ang host...</translation>
 <translation id="337286756654493126">Mag-read ng mga folder na iyong bubuksan sa application</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">I-right click ang icon na <ph name="SMALL_PRODUCT_LOGO" /> sa taskbar</translation>
 <translation id="3391716558283801616">Tab 7</translation>
 <translation id="3396331542604645348">Ang napiling printer ay hindi available o hindi naka-install nang tama.  Tingnan ang iyong printer o subukang pumili ng isa pang printer.</translation>
+<translation id="3396800784455899911">Sa pamamagitan ng pag-click sa button na "Tanggapin at magpatuloy," sumasang-ayon ka sa pagpoproseso na inilarawan sa itaas para sa mga serbisyong ito ng Google.</translation>
 <translation id="3399432415385675819">Madi-disable ang mga notification</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Walang naka-save na password para sa site na ito</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Hindi mabuksan ang device na ito dahil hindi sinusuportahan ang filesystem nito.</translation>
 <translation id="3727148787322499904">Maaapektuhan ang lahat ng nakabahaging network kung babaguhin ang setting na ito</translation>
 <translation id="3727187387656390258">Siyasatin ang popup</translation>
+<translation id="3729506734996624908">Mga pinapahintulutang site</translation>
 <translation id="3732078975418297900">Error sa linya <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL Server na may Step-up</translation>
+<translation id="3735740477244556633">Pagbukud-bukurin ayon sa</translation>
 <translation id="3737274407993947948">Nagkaroon ng error sa pag-install ng Linux...</translation>
 <translation id="3737536731758327622">Lalabas dito ang iyong mga download</translation>
+<translation id="3738671331307774213">Nakakatulong ang pag-verify ng iyong pagkakakilanlan sa pagprotekta sa pribado mong data</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Buksan ang <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Lalabas na ngayon ang <ph name="DEVICE_NAME" /> sa Admin Console</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Kumuha ng mga tool sa paggawa ng mga website, Android app, at higit pa. Kapag na-install ang Linux, mada-download ang <ph name="DOWNLOAD_SIZE" /> ng data.</translation>
 <translation id="385051799172605136">Bumalik</translation>
 <translation id="3851428669031642514">I-load ang mga hindi ligtas na script</translation>
+<translation id="3854599674806204102">Pumili ng opsyon</translation>
 <translation id="3855441664322950881">Extension ng pack</translation>
 <translation id="3855676282923585394">Mag-import ng Mga Bookmark at Setting...</translation>
 <translation id="3856800405688283469">Pumili ng timezone</translation>
-<translation id="3856921555429624101">Natapos na ang pagsusukat sa paggamit ng data</translation>
 <translation id="3857228364945137633">Subukan ang Smart Lock upang i-unlock ang iyong <ph name="DEVICE_TYPE" /> nang walang password kapag nasa malapit ang telepono mo.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Na-pause ang pag-sync</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Buksan ang lahat sa incognito window</translation>
 <translation id="4508265954913339219">Nabigo ang pag-activate</translation>
 <translation id="4508765956121923607">Tingnan ang P&amp;inagmulan</translation>
-<translation id="4509823033118379431">Kasalukuyang hindi available ang mga larawan. Kumonektang muli para tingnan ang mga koleksyon.</translation>
 <translation id="451407183922382411">Pinapagana ng <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Mag-set up ng bagong pinangangasiwaang user</translation>
 <translation id="4514610446763173167">I-toggle ang video para mag-play o mag-pause</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Magpatuloy mula sa ibang device</translation>
 <translation id="4628314759732363424">Baguhin...</translation>
 <translation id="4628757576491864469">Mga Device</translation>
+<translation id="4628948037717959914">Larawan</translation>
 <translation id="4630590996962964935">Di-wastong character: $1</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4632483769545853758">I-unmute ang Tab</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Handa nang i-back up ang <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Hindi karaniwang dina-download ang app na ito at maaaring mapanganib.</translation>
 <translation id="4907306957610201395">Kategorya ng Pahintulot</translation>
-<translation id="4907824805858067479">Na-disable ng iyong administrator ang mga naka-save na card</translation>
 <translation id="4908811072292128752">Magbukas ng bagong tab upang mag-browse ng dalawang site nang sabay</translation>
 <translation id="4909038193460299775">Dahil pinamamahalaan ng <ph name="DOMAIN" /> ang account na ito, iki-clear sa device na ito ang iyong mga bookmark, history, password at iba pang mga setting. Gayunpaman, mananatiling nakaimbak ang data mo sa iyong Google Account at mapamamahalaan ito sa <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Matagumpay kang na-enroll</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Taunan</translation>
 <translation id="4957949153200969297">Ang mga feature lang na nauugnay sa <ph name="IDS_SHORT_PRODUCT_NAME" /> Sync ang ie-enable</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Makita ang iyong mga card sa iisang lugar</translation>
 <translation id="496226124210045887">Naglalaman ng mga sensitibong file ang folder na iyong pinili. Sigurado ka bang gusto mong magbigay ng "PhP50" na permanenteng read access sa folder na ito?</translation>
 <translation id="4964455510556214366">Kaayusan</translation>
 <translation id="4964673849688379040">Sinusuri...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Idagdag ang extension</translation>
 <translation id="5029568752722684782">I-clear ang kopya</translation>
 <translation id="5030338702439866405">Ibinigay Ni</translation>
+<translation id="503155457707535043">Dina-download ang mga app</translation>
 <translation id="503498442187459473">Gustong gamitin ng <ph name="HOST" /> ang iyong camera at mikropono</translation>
 <translation id="5036662165765606524">Huwag payagan ang anumang site na awtomatikong mag-download ng maraming file</translation>
 <translation id="5037676449506322593">Select All</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">I-mute</translation>
 <translation id="5785583009707899920">Mga Utility ng File ng Chrome</translation>
 <translation id="5787146423283493983">Pangunahing Kasunduan</translation>
+<translation id="5788127256798019331">Mga Play file</translation>
 <translation id="5788367137662787332">Paumanhin, hindi mai-mount ang hindi bababa sa isang bahagi ng device na <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Palaging buksan gamit ang system viewer</translation>
 <translation id="5794786537412027208">Umalis sa lahat ng Chrome Apps</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Naisalin</translation>
 <translation id="5991049340509704927">I-magnify</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang application na ito.}one{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang mga application na ito.}other{Para matiyak na makakapag-browse ka pa rin sa web, hilingin sa iyong administrator na alisin ang mga application na ito.}}</translation>
-<translation id="5993332328670040093">Hindi na susukatin ang paggamit mo ng data.</translation>
 <translation id="6002458620803359783">Mga Gustong Boses</translation>
 <translation id="6005695835120147974">Router para sa Media</translation>
 <translation id="6006484371116297560">Classic</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Pumili ng certificate</translation>
 <translation id="6181431612547969857">Na-block ang pagda-download</translation>
 <translation id="6185132558746749656">Lokasyon ng Device</translation>
+<translation id="6185617499004995178">CUPS IPP Validator</translation>
 <translation id="6185696379715117369">Pataas sa pahina</translation>
 <translation id="6189273858858366896">I-set up o pamahalaan ang Mga Pagbabahagi ng File sa Network.</translation>
 <translation id="6189412234224385711">Buksan gamit ang <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Magdagdag ng query param sa URL upang awtomatikong i-refresh ang page: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterya</translation>
 <translation id="6232116551750539448">Naputol ang koneksyon sa <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Ibinabahagi ng tab na ito ang content ng iyong desktop.</translation>
 <translation id="6237816943013845465">Nagbibigay-daan sa iyong i-adjust ang resolution ng iyong screen</translation>
 <translation id="6238923052227198598">Panatilihin ang pinakabagong tala sa lock screen</translation>
 <translation id="6239558157302047471">I-reload ang &amp;frame</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Hindi karaniwang dina-download ang <ph name="FILE_NAME" /> at maaaring mapanganib ito.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Bagong printer sa iyong network}one{Mga bagong printer sa iyong network}other{Mga bagong printer sa iyong network}}</translation>
-<translation id="6286684120317096255">Sinusukat ang paggamit ng data</translation>
 <translation id="6286708577777130801">Mga naka-save na detalye ng password</translation>
 <translation id="6287852322318138013">Pumili ng isang app upang buksan ang file na ito</translation>
 <translation id="6289452883081499048">Mga naka-personalize na serbisyo ng Google gaya ng Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Pamahalaan ang mga Cloud Print device</translation>
 <translation id="6451689256222386810">Kung nakalimutan mo ang iyong passphrase o gusto mong baguhin ang setting na ito, <ph name="BEGIN_LINK" />i-reset ang pag-sync<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Tanggihan</translation>
+<translation id="6455264371803474013">Sa mga partikular na site</translation>
 <translation id="6455894534188563617">&amp;Bagong Folder</translation>
 <translation id="6456394469623773452">Maayos</translation>
 <translation id="6456631036739229488">Pinalitan ang telepono ng Smart Lock. Ilagay ang iyong password upang i-update ang Smart Lock. Sa susunod, ia-unlock ng telepono mo ang iyong <ph name="DEVICE_TYPE" />. I-off ang Smart Lock sa Mga Setting.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;I-reload ang Pahinang Ito</translation>
 <translation id="6577284282025554716">Nakansela ang pag-download: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">I-encrypt ang mga naka-sync na password sa iyong username at password sa Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Ibinabahagi ang content ng desktop</translation>
 <translation id="6580151766480067746">Bersyon ng ARC</translation>
 <translation id="6581162200855843583">link ng Google Drive</translation>
 <translation id="6582421931165117398">Upang maprotektahan ang iyong personal na impormasyon, palitan na ang password mo. Bago mo palitan ang iyong password, hihilingin sa iyong mag-sign in.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Maaaring hindi gumana nang maayos ang Chrome dahil sa application na ito.}one{Maaaring hindi gumana nang maayos ang Chrome dahil sa mga application na ito.}other{Maaaring hindi gumana nang maayos ang Chrome dahil sa mga application na ito.}}</translation>
 <translation id="7303900363563182677">Na-block ang site na ito na makita ang text at mga larawang kinopya sa clipboard</translation>
 <translation id="730515362922783851">Makipagpalit ng data sa anumang device na nasa lokal na network o internet</translation>
+<translation id="7307129035224081534">Naka-pause</translation>
 <translation id="7308002049209013926">Gamitin ang Launcher upang mabilis na makakuha ng mga bagong app at aktibidad. Upang makapunta rito gamit ang keyboard, pindutin ang Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Ipakita ang &amp;mga control</translation>
 <translation id="7310598146671372464">Hindi makapag-log in. Hindi sinusuportahan ng server ang mga natukoy na uri ng Kerberos na pag-encrypt. Makipag-ugnayan sa iyong administrator.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Mag-set up ng koneksyon sa iyong <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Naka-block ang pop-up</translation>
 <translation id="7407430846095439694">I-import at I-bind</translation>
-<translation id="7409233648990234464">Ilunsad muli at I-powerwash</translation>
 <translation id="7409836189476010449">Patakbuhin ang Flash</translation>
 <translation id="7410344089573941623">Itanong kung gusto ng <ph name="HOST" /> na i-access ang iyong camera at mikropono</translation>
 <translation id="741204030948306876">Oo, sali ako</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">URL ng Pagpapawalang-bisa ng Netscape Certificate</translation>
 <translation id="7469894403370665791">Awtomatikong kumonekta sa network na ito</translation>
 <translation id="747114903913869239">Error: Hindi magawang i-decode ang extension</translation>
+<translation id="7473753388963818366">Ihanda natin ang <ph name="DEVICE_TYPE" /> mo para sa iyo</translation>
 <translation id="7473891865547856676">Hindi, Salamat</translation>
 <translation id="747459581954555080">Ipanumbalik lahat</translation>
 <translation id="7475671414023905704">URL ng Nawalang Password ng Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Magdagdag ng account</translation>
 <translation id="7671130400130574146">Gumamit ng system title bar at mga hangganan</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, sa <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Ipinapadala ang iyong boses sa Google para mabigyang-daan ang dictation sa anumang field ng text.</translation>
 <translation id="7681095912841365527">Maaaring gumamit ng bluetooth ang site</translation>
 <translation id="7683373461016844951">Upang magpatuloy, i-click ang OK, pagkatapos ay i-click ang Magdagdag ng Tao upang gumawa ng bagong profile para sa iyong email address sa <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Na-install ng Iyong Administrator</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Karaniwan</translation>
 <translation id="7748528009589593815">Nakaraang tab</translation>
 <translation id="7748626145866214022">Available ang higit pang opsyon sa action bar. Pindutin ang Alt + A para i-focus ang action bar.</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7751260505918304024">Ipakita lahat</translation>
 <translation id="7754704193130578113">Magtanong kung saan ise-save ang bawat file bago ang pagda-download</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Ito ba ang page ng bagong tab na inaasahan mo?</translation>
 <translation id="786073089922909430">Serbisyo: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Mga download</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}one{# cookie}other{# na cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Nakapares</translation>
 <translation id="7870730066603611552">Suriin ang mga opsyon sa pag-sync pagkatapos ng pag-set up</translation>
 <translation id="7870790288828963061">Walang nahanap na mga Kiosk app na may mas bagong bersyon. Walang ia-update. Mangyaring alisin ang USB stick.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Mag-mute ng mga tab</translation>
 <translation id="8382913212082956454">Kopyahin ang &amp;email address</translation>
 <translation id="8386903983509584791">Nakumpleto ang pag-scan</translation>
+<translation id="8389492867173948260">Pahintulutan ang extension na ito na i-read at baguhin ang lahat ng iyong data sa mga website na binibisita mo:</translation>
 <translation id="8390449457866780408">Hindi available ang server.</translation>
 <translation id="8391712576156218334">Hindi available ang larawan. Subukang muli sa ibang pagkakataon.</translation>
 <translation id="8392234662362215700">Pindutin ang Control-Shift-Space upang magpalit ng layout ng keyboard.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Masa-sign out ka sa loob ng <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Palitan ang PIN ng SIM</translation>
 <translation id="8434480141477525001">NaCl Debug Port</translation>
+<translation id="8435395510592618362">I-verify ang iyong pagkakakilanlan gamit ang <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">I-save ang credit card</translation>
 <translation id="8438328416656800239">Lumipat sa isang mahusay na browser</translation>
 <translation id="8438566539970814960">Mas pahusayin ang mga paghahanap at pag-browse</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Hindi wasto</translation>
 <translation id="8465444703385715657">Kailangan ng <ph name="PLUGIN_NAME" /> ng iyong pahintulot upang tumakbo</translation>
 <translation id="8466234950814670489">Archive na Tar</translation>
+<translation id="8466417995783206254">Nagpe-play ang tab na ito ng video sa picture-in-picture mode.</translation>
 <translation id="8468750959626135884">I-unlock ang iyong <ph name="DEVICE_TYPE" /> gamit ang iyong Android phone.</translation>
 <translation id="8470028084415844044">Para mailagay ang lahat ng iyong password sa lahat ng device mo, i-on ang pag-sync.</translation>
 <translation id="8470513973197838199">Mga naka-save na password para sa <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Patakbuhin ang Plugin na Ito</translation>
 <translation id="8497219075884839166">Mga Utility ng Windows</translation>
 <translation id="8498214519255567734">Pinapadali nitong tumingin sa iyong screen o magbasa sa dilim</translation>
+<translation id="8498395510292172881">Ipagpatuloy ang pagbabasa sa Chrome</translation>
 <translation id="8503813439785031346">Username</translation>
 <translation id="850875081535031620">Walang nahanap na mapaminsalang software</translation>
 <translation id="8509646642152301857">Nabigo ang pag-download ng diksyunaryo ng pang-check ng pagbabaybay.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Muling subukan</translation>
 <translation id="8725178340343806893">Mga Paborito/Bookmark</translation>
 <translation id="8726206820263995930">Error kapag kumukuha ng mga setting ng patakaran mula sa server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Huwag na itong ipakitang muli</translation>
 <translation id="8727344521467137076">May mapaminsalang software sa iyong computer. Aalisin ito ng Chrome at ire-restore ang iyong mga setting para mapaganang muli nang normal ang iyong browser.</translation>
 <translation id="8730621377337864115">Tapos na</translation>
 <translation id="8732030010853991079">Gamitin ang extension na ito sa pamamagitan ng pag-click sa icon na ito.</translation>
@@ -5181,6 +5204,7 @@
 <translation id="9027459031423301635">Buksan ang Link sa Bagong &amp;Tab</translation>
 <translation id="9030515284705930323">Hindi na-enable ng iyong organisasyon ang Google Play Store para sa iyong account. Makipag-ugnayan sa iyong administrator para sa higit pang impormasyon.</translation>
 <translation id="9033857511263905942">I-&amp;paste</translation>
+<translation id="9034924485347205037">Mga Linux file</translation>
 <translation id="9035012421917565900">Hindi na maibabalik ang mga item sa '<ph name="DESTINATION_NAME" />,' kaya hindi mo maa-undo ang pagkilos na ito.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Ipakita Ang Orihinal</translation>
@@ -5281,6 +5305,7 @@
 <translation id="9173995187295789444">Nagsa-scan ng mga Bluetooth device...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - May nakakonektang bluetooth device</translation>
 <translation id="9177499212658576372">Kasalukuyan kang nakakonekta sa <ph name="NETWORK_TYPE" /> network.</translation>
+<translation id="9179734824669616955">I-set up ang Linux (Beta) sa iyong <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Maaaring abutin nang ilang minuto ang prosesong ito. Sinisimulan ang Linux container.</translation>
 <translation id="9180380851667544951">Maaaring ibahagi ng site ang iyong screen</translation>
 <translation id="9188441292293901223">Paki-update ang iyong telepono sa mas bagong bersyon ng Android upang i-unlock ang <ph name="DEVICE_TYPE" /> na ito.</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index fce1ba2..488289b 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Demander avant d'accéder</translation>
 <translation id="1434696352799406980">Cette fonctionnalité réinitialise la page de démarrage, la page Nouvel onglet, le moteur de recherche et les onglets épinglés. Elle désactive en outre toutes les extensions, et efface les données temporaires telles que les cookies. Vos favoris, votre historique et vos mots de passe enregistrés ne sont pas supprimés.</translation>
 <translation id="1434886155212424586">La page Nouvel onglet est la page d'accueil.</translation>
+<translation id="1436671784520050284">Poursuivre la configuration</translation>
 <translation id="1436784010935106834">Supprimé</translation>
 <translation id="1438632560381091872">Réactiver le son des onglets</translation>
 <translation id="1442392616396121389">Préfixe de routage</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Part de pizza</translation>
 <translation id="1467432559032391204">Vers la gauche</translation>
 <translation id="1468571364034902819">Impossible d'utiliser ce profil</translation>
+<translation id="1470533772306424441">Nous installerons ces applications à votre place. Rendez-vous sur le Play Store pour en trouver d'autres à installer sur votre appareil.</translation>
 <translation id="1470811252759861213">Pour synchroniser vos extensions sur tous vos ordinateurs, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Le fichier "<ph name="FILENAME" />" n'a pas été importé, car l'espace disponible sur Google Drive est insuffisant.</translation>
 <translation id="1475502736924165259">Vous disposez de certificats qui n'appartiennent à aucune autre catégorie.</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Z&amp;oom arrière</translation>
 <translation id="1830550083491357902">Non connecté</translation>
 <translation id="1832511806131704864">Changement de téléphone mis à jour</translation>
-<translation id="1832685970989658809">L'administrateur a désactivé les modes de paiement enregistrés</translation>
 <translation id="1834503245783133039">Échec du téléchargement : <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Effacer la recherche</translation>
 <translation id="1838709767668011582">Site Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De :</translation>
 <translation id="2193365732679659387">Paramètres de confiance</translation>
 <translation id="2195729137168608510">Protection du courrier électronique</translation>
+<translation id="2199298570273670671">Erreur</translation>
 <translation id="2200356397587687044">Google Chrome a besoin de votre autorisation pour continuer</translation>
 <translation id="220138918934036434">Masquer le bouton</translation>
 <translation id="2202898655984161076">Un problème est survenu lors de l'affichage de la liste des imprimantes. Certaines de vos imprimantes ne sont peut-être pas correctement enregistrées dans <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Afficher le mot de passe</translation>
 <translation id="2436186046335138073">Autoriser <ph name="HANDLER_HOSTNAME" /> à ouvrir tous les liens <ph name="PROTOCOL" /> ?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">La mesure de l'utilisation des données a pris fin.</translation>
 <translation id="2440604414813129000">Afficher la s&amp;ource</translation>
 <translation id="2445081178310039857">Le répertoire racine de l'extension doit être indiqué.</translation>
 <translation id="2445484935443597917">Créer un profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> souhaite valider votre identité</translation>
 <translation id="2448312741937722512">Type</translation>
 <translation id="2450223707519584812">Vous ne pourrez pas ajouter d'utilisateurs, car des clés d'API Google sont manquantes. Pour en savoir plus, rendez-vous sur <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Désactiver la synchronisation et se déconnecter ?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Le fichier existe déjà.</translation>
 <translation id="2453860139492968684">Terminer</translation>
 <translation id="2454247629720664989">Mot clé</translation>
+<translation id="245661998428026871">La diffusion de la vidéo en mode PIP sera interrompue.</translation>
 <translation id="2457246892030921239">"<ph name="APP_NAME" />" souhaite copier des fichiers depuis "<ph name="VOLUME_NAME" />".</translation>
 <translation id="2462724976360937186">ID de clé de l'autorité de certification</translation>
 <translation id="2462752602710430187">L'imprimante <ph name="PRINTER_NAME" /> a bien été ajoutée.</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Réactiver le son des onglets</translation>
 <translation id="3053013834507634016">Utilisation de la clé du certificat</translation>
 <translation id="3057861065630527966">Sauvegarder vos photos et vos vidéos</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Activer "Sélectionner pour prononcer"</translation>
 <translation id="3061707000357573562">Service d'application de correctifs</translation>
 <translation id="3064410671692449875">Données insuffisantes</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Mot de passe oublié ?</translation>
 <translation id="3132996321662585180">Actualiser quotidiennement</translation>
 <translation id="3135204511829026971">Faire pivoter l'écran</translation>
+<translation id="313638818480447860">Nous avons trouvé <ph name="NUMBER_OF_APPS" /> applications associées à votre compte, qui sont optimisées pour cet appareil.</translation>
 <translation id="313963229645891001">Téléchargement en cours : <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar jaune par défaut</translation>
 <translation id="3140353188828248647">Activer la barre d'adresse</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Correcteur orthographique</translation>
 <translation id="3183139917765991655">Importation de profils</translation>
 <translation id="3184560914950696195">Impossible d'enregistrer les fichiers dans le dossier $1. Les images modifiées seront enregistrées dans le dossier Téléchargements.</translation>
+<translation id="3188257591659621405">Mes fichiers</translation>
 <translation id="3188465121994729530">Moyenne glissante</translation>
 <translation id="3190558889382726167">Mot de passe enregistré</translation>
 <translation id="3192947282887913208">Fichiers audio</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Compression du fichier <ph name="FILE_NAME" /> en cours…</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informations relatives à l'application</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – Vidéo diffusée en mode PIP</translation>
 <translation id="3335337277364016868">Année d'enregistrement</translation>
 <translation id="3335947283844343239">Rouvrir l'onglet fermé</translation>
 <translation id="3336664756920573711">Déverrouillez votre <ph name="DEVICE_TYPE" /> avec votre téléphone Android</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Échec de l'impression. Veuillez vérifier votre imprimante, puis réessayer.</translation>
 <translation id="3364721542077212959">Outils de stylet</translation>
 <translation id="3365598184818502391">Utilisez soit Ctrl, soit Alt</translation>
+<translation id="3367047597842238025">Configurez votre <ph name="DEVICE_TYPE" /> comme bon vous semble et découvrez toutes les fonctionnalités incroyables qui vous sont proposées.</translation>
 <translation id="3368922792935385530">Connecté</translation>
 <translation id="3369624026883419694">Résolution de l'hôte...</translation>
 <translation id="337286756654493126">Accéder en lecture aux dossiers ouverts dans l'application</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Faites un clic droit sur l'icône <ph name="SMALL_PRODUCT_LOGO" /> dans la barre des tâches.</translation>
 <translation id="3391716558283801616">Tab 7</translation>
 <translation id="3396331542604645348">L'imprimante sélectionnée n'est pas disponible ou n'est pas installée correctement. Veuillez vérifier votre imprimante ou en sélectionner une autre.</translation>
+<translation id="3396800784455899911">En cliquant sur le bouton "Accepter et continuer", vous acceptez le processus décrit ci-dessus pour ces services Google.</translation>
 <translation id="3399432415385675819">Les notifications seront désactivées</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Aucun mot de passe enregistré pour ce site</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Impossible d'ouvrir ce périphérique, car son système de fichiers n'est pas compatible.</translation>
 <translation id="3727148787322499904">Les modifications apportées à ce paramètre s'appliquent à tous les réseaux partagés</translation>
 <translation id="3727187387656390258">Inspecter le pop-up</translation>
+<translation id="3729506734996624908">Sites autorisés</translation>
 <translation id="3732078975418297900">Erreur à la ligne <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Serveur SSL avec fonction d'optimisation</translation>
+<translation id="3735740477244556633">Trier par</translation>
 <translation id="3737274407993947948">Erreur lors de l'installation de Linux…</translation>
 <translation id="3737536731758327622">Vos téléchargements s'affichent ici</translation>
+<translation id="3738671331307774213">La validation de votre identité contribue à protéger vos données privées</translation>
 <translation id="3738924763801731196"><ph name="OID" /> :</translation>
 <translation id="3739254215541673094">Ouvrir <ph name="APPLICATION" /> ?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> va s'afficher dans la console d'administration.</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Accédez à des outils conçus pour développer des sites Web, des applications Android, etc. En installant Linux, vous téléchargerez <ph name="DOWNLOAD_SIZE" /> de données.</translation>
 <translation id="385051799172605136">Retour</translation>
 <translation id="3851428669031642514">Charger les scripts à risque</translation>
+<translation id="3854599674806204102">Sélectionnez une option</translation>
 <translation id="3855441664322950881">Empaqueter l'extension</translation>
 <translation id="3855676282923585394">Importer les favoris et les paramètres...</translation>
 <translation id="3856800405688283469">Sélectionner un fuseau horaire</translation>
-<translation id="3856921555429624101">La mesure de l'utilisation des données a pris fin.</translation>
 <translation id="3857228364945137633">Testez Smart Lock pour déverrouiller votre <ph name="DEVICE_TYPE" /> sans mot de passe lorsque votre téléphone est à proximité.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" /> : synchronisation désactivée</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Tout ouvrir dans une fenêtre de navigation privée</translation>
 <translation id="4508265954913339219">Échec de l'activation</translation>
 <translation id="4508765956121923607">Afficher la s&amp;ource</translation>
-<translation id="4509823033118379431">Les images ne sont actuellement pas disponibles. Veuillez vous reconnecter pour afficher les collections.</translation>
 <translation id="451407183922382411">Fourni par <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurer un nouvel utilisateur supervisé</translation>
 <translation id="4514610446763173167">Activer/Désactiver la lecture ou la mise en pause de la vidéo</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Continuer sur un autre appareil</translation>
 <translation id="4628314759732363424">Modifier…</translation>
 <translation id="4628757576491864469">Appareils</translation>
+<translation id="4628948037717959914">Photo</translation>
 <translation id="4630590996962964935">Caractère non valide : 1$.</translation>
 <translation id="4631887759990505102">Artiste</translation>
 <translation id="4632483769545853758">Réactiver le son de l'onglet</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Prêt à sauvegarder <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Ce fichier n'étant pas souvent téléchargé, il peut présenter un danger.</translation>
 <translation id="4907306957610201395">Catégorie d'autorisation</translation>
-<translation id="4907824805858067479">L'administrateur a désactivé les cartes enregistrées</translation>
 <translation id="4908811072292128752">Ouvrez un nouvel onglet pour naviguer sur deux sites Web en même temps</translation>
 <translation id="4909038193460299775">Étant donné que ce compte est géré par <ph name="DOMAIN" />, vos favoris, votre historique, vos mots de passe et les autres paramètres sont effacés de cet appareil. Cependant, vos données restent stockées dans votre compte Google et peuvent être gérées dans le <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Votre inscription a bien été prise en compte</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Annuelle</translation>
 <translation id="4957949153200969297">Option permettant uniquement d'activer les fonctionnalités de la synchronisation <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Avoir vos cartes au même endroit</translation>
 <translation id="496226124210045887">Le dossier que vous avez sélectionné contient des fichiers sensibles. Voulez-vous vraiment accorder à "$1" un accès en lecture permanent à ce dossier ?</translation>
 <translation id="4964455510556214366">Organisation</translation>
 <translation id="4964673849688379040">Vérification en cours…</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Ajouter l'extension</translation>
 <translation id="5029568752722684782">Effacer la copie</translation>
 <translation id="5030338702439866405">Émis par</translation>
+<translation id="503155457707535043">Téléchargement des applications</translation>
 <translation id="503498442187459473"><ph name="HOST" /> souhaite utiliser votre appareil photo et votre micro</translation>
 <translation id="5036662165765606524">N'autoriser le téléchargement automatique de plusieurs fichiers pour aucun site</translation>
 <translation id="5037676449506322593">Tout sélectionner</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Couper le son</translation>
 <translation id="5785583009707899920">Utilitaires de fichiers Chrome</translation>
 <translation id="5787146423283493983">Accord de la clé</translation>
+<translation id="5788127256798019331">Fichiers Play</translation>
 <translation id="5788367137662787332">Désolé, impossible d'installer au moins une partition du périphérique <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Toujours ouvrir avec le lecteur système</translation>
 <translation id="5794786537412027208">Quitter toutes les applications Chrome</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Traduite</translation>
 <translation id="5991049340509704927">Agrandir</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer cette application.}one{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer cette application.}other{Pour pouvoir continuer à naviguer sur Internet, demandez à votre administrateur de supprimer ces applications.}}</translation>
-<translation id="5993332328670040093">Votre utilisation des données ne sera plus mesurée.</translation>
 <translation id="6002458620803359783">Voix préférées</translation>
 <translation id="6005695835120147974">Routeur multimédia</translation>
 <translation id="6006484371116297560">Classique</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Sélectionner un certificat</translation>
 <translation id="6181431612547969857">Téléchargement bloqué</translation>
 <translation id="6185132558746749656">Position de l'appareil</translation>
+<translation id="6185617499004995178">Outil de validation IPP CUPS</translation>
 <translation id="6185696379715117369">Accéder à la page précédente</translation>
 <translation id="6189273858858366896">Configurez ou gérez des partages de fichiers en réseau.</translation>
 <translation id="6189412234224385711">Ouvrir avec <ph name="EXTENSION_NAME" /></translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Ajoutez un paramètre de requête dans l'URL pour une actualisation automatique de la page : chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batterie</translation>
 <translation id="6232116551750539448">La connexion à "<ph name="NAME" />" a été interrompue.</translation>
+<translation id="6235700927623181151">Cet onglet partage le contenu de votre bureau.</translation>
 <translation id="6237816943013845465">Permet d'ajuster la résolution de l'écran</translation>
 <translation id="6238923052227198598">Conserver la dernière note sur l'écran de verrouillage</translation>
 <translation id="6239558157302047471">Actualiser le &amp;cadre</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> n'est pas un fichier couramment téléchargé. Il est peut-être dangereux.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nouvelle imprimante sur le réseau}one{Nouvelle imprimante sur le réseau}other{Nouvelles imprimantes sur le réseau}}</translation>
-<translation id="6286684120317096255">L'utilisation des données est mesurée.</translation>
 <translation id="6286708577777130801">Détails du mot de passe enregistré</translation>
 <translation id="6287852322318138013">Sélectionner une application pour ouvrir ce fichier</translation>
 <translation id="6289452883081499048">Services Google personnalisés tels que Play</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Gérer les appareils Google Cloud Print</translation>
 <translation id="6451689256222386810">Si vous avez oublié votre phrase secrète, ou si vous souhaitez modifier ce paramètre, <ph name="BEGIN_LINK" />réinitialisez la synchronisation<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Refuser</translation>
+<translation id="6455264371803474013">Sur des sites spécifiques</translation>
 <translation id="6455894534188563617">&amp;Nouveau dossier</translation>
 <translation id="6456394469623773452">Bon</translation>
 <translation id="6456631036739229488">Le téléphone Smart Lock a changé. Saisissez votre mot de passe pour mettre à jour Smart Lock. La prochaine fois, votre téléphone déverrouillera votre <ph name="DEVICE_TYPE" />. Vous pouvez désactiver Smart Lock dans les paramètres.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">&amp;Rafraîchir cette page</translation>
 <translation id="6577284282025554716">Téléchargement annulé : <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Chiffrer les mots de passe synchronisés avec votre nom d'utilisateur et votre mot de passe Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Contenu du bureau partagé</translation>
 <translation id="6580151766480067746">Version d'ARC</translation>
 <translation id="6581162200855843583">Lien Google Drive</translation>
 <translation id="6582421931165117398">Pour protéger vos informations personnelles, modifiez votre mot de passe maintenant. Vous devrez vous connecter au préalable.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Cette application peut empêcher Chrome de fonctionner correctement.}one{Cette application peut empêcher Chrome de fonctionner correctement.}other{Ces applications peuvent empêcher Chrome de fonctionner correctement.}}</translation>
 <translation id="7303900363563182677">Ce site ne peut pas accéder en lecture au texte ni aux images copiés dans le presse-papiers</translation>
 <translation id="730515362922783851">Échanger des données avec n'importe quel appareil sur le réseau local ou sur Internet</translation>
+<translation id="7307129035224081534">Suspendue</translation>
 <translation id="7308002049209013926">Utilisez le lanceur d'applications pour accéder rapidement à vos nouvelles applications et activités. Pour y accéder depuis le clavier, appuyez sur Alt+Maj+L.</translation>
 <translation id="7309257895202129721">Afficher les &amp;commandes</translation>
 <translation id="7310598146671372464">Échec de la connexion. Le serveur n'accepte pas les types de chiffrement Kerberos spécifiés. Veuillez contacter votre administrateur.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">Configurer la connexion sur votre <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Fenêtre pop-up bloquée</translation>
 <translation id="7407430846095439694">Importer et lier</translation>
-<translation id="7409233648990234464">Relancer et Powerwash</translation>
 <translation id="7409836189476010449">Exécuter Flash</translation>
 <translation id="7410344089573941623">Demander si <ph name="HOST" /> souhaite accéder à votre caméra et à votre micro</translation>
 <translation id="741204030948306876">J'accepte</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">URL de révocation de certificat Netscape</translation>
 <translation id="7469894403370665791">Se connecter automatiquement à ce réseau</translation>
 <translation id="747114903913869239">Erreur : impossible de décoder l'extension.</translation>
+<translation id="7473753388963818366">Préparons votre <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Non, merci</translation>
 <translation id="747459581954555080">Tout restaurer</translation>
 <translation id="7475671414023905704">URL de mot de passe perdu Netscape</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Ajouter un compte</translation>
 <translation id="7671130400130574146">Utiliser la barre de titre et les bordures de fenêtre du système</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> sur <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Transmettez votre voix à Google pour pouvoir dicter ce que vous voulez dans n'importe quelle zone de texte.</translation>
 <translation id="7681095912841365527">Le site peut utiliser le Bluetooth</translation>
 <translation id="7683373461016844951">Pour continuer, cliquez sur "OK", puis sur "Ajouter une personne" afin de créer un profil pour votre adresse e-mail <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Installée par votre administrateur</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Onglet précédent</translation>
 <translation id="7748626145866214022">D'autres options sont disponibles dans la barre d'action. Appuyez sur Alt+A pour la sélectionner.</translation>
+<translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation>
 <translation id="7751260505918304024">Tout afficher</translation>
 <translation id="7754704193130578113">Toujours demander où enregistrer les fichiers</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4441,6 +4460,7 @@
 <translation id="7857949311770343000">Est-ce la page Nouvel onglet que vous attendiez ?</translation>
 <translation id="786073089922909430">Service : <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Téléchargements</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}one{# cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> associé</translation>
 <translation id="7870730066603611552">Vérifier les options de synchronisation après la configuration</translation>
 <translation id="7870790288828963061">Aucune nouvelle version d'une application kiosque n'a été trouvée. Aucune mise à jour n'est disponible. Veuillez débrancher la clé USB.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Couper le son des onglets</translation>
 <translation id="8382913212082956454">Copi&amp;er l'adresse e-mail</translation>
 <translation id="8386903983509584791">Recherche terminée</translation>
+<translation id="8389492867173948260">Autorisez cette extension à lire et à modifier toutes vos données sur les sites Web que vous consultez :</translation>
 <translation id="8390449457866780408">Serveur indisponible.</translation>
 <translation id="8391712576156218334">L'image n'est pas disponible. Réessayez plus tard.</translation>
 <translation id="8392234662362215700">Appuyez sur Ctrl+Maj+Espace pour changer la disposition du clavier.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Vous allez être déconnecté dans <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Modifier le code de la SIM</translation>
 <translation id="8434480141477525001">Port de débogage de Native Client</translation>
+<translation id="8435395510592618362">Valider votre identité avec <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Enregistrer les informations de la carte de paiement</translation>
 <translation id="8438328416656800239">Passez à un navigateur intelligent</translation>
 <translation id="8438566539970814960">Améliorer les recherches et la navigation</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Non valide</translation>
 <translation id="8465444703385715657">L'exécution de <ph name="PLUGIN_NAME" /> requiert votre autorisation.</translation>
 <translation id="8466234950814670489">Archive TAR</translation>
+<translation id="8466417995783206254">Une vidéo est diffusée en mode PIP dans cet onglet.</translation>
 <translation id="8468750959626135884">Déverrouillez votre <ph name="DEVICE_TYPE" /> avec votre téléphone Android.</translation>
 <translation id="8470028084415844044">Pour avoir tous vos mots de passe sur tous vos appareils, activez la synchronisation.</translation>
 <translation id="8470513973197838199">Mots de passe enregistrés pour <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Exécuter ce plug-in</translation>
 <translation id="8497219075884839166">Utilitaires Windows</translation>
 <translation id="8498214519255567734">Facilite la lecture à l'écran lorsque l'éclairage est faible</translation>
+<translation id="8498395510292172881">Poursuivre la lecture dans Chrome</translation>
 <translation id="8503813439785031346">Nom d'utilisateur</translation>
 <translation id="850875081535031620">Aucun logiciel malveillant détecté</translation>
 <translation id="8509646642152301857">Échec du téléchargement du dictionnaire du correcteur orthographique.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Réessayer</translation>
 <translation id="8725178340343806893">Favoris</translation>
 <translation id="8726206820263995930">Erreur survenue lors de la récupération des paramètres des règles depuis le serveur : <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ne plus afficher ce message</translation>
 <translation id="8727344521467137076">Un logiciel malveillant a été détecté sur votre ordinateur. Chrome est en train de le supprimer et restaurera vos paramètres pour que votre navigateur fonctionne de nouveau normalement.</translation>
 <translation id="8730621377337864115">OK</translation>
 <translation id="8732030010853991079">Utilisez cette extension en cliquant sur cette icône</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Ouvrir le lien dans un nouvel ongle&amp;t</translation>
 <translation id="9030515284705930323">Votre organisation n'a pas activé le Google Play Store pour votre compte. Contactez votre administrateur pour plus d'informations.</translation>
 <translation id="9033857511263905942">&amp;Coller</translation>
+<translation id="9034924485347205037">Fichiers Linux</translation>
 <translation id="9035012421917565900">Les éléments ne pourront pas être redéplacés vers "<ph name="DESTINATION_NAME" />". Cette action est donc irréversible.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Afficher l'original</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Recherche d'appareils Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Appareil Bluetooth connecté</translation>
 <translation id="9177499212658576372">Vous êtes actuellement connecté au réseau <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configurer Linux (version bêta) sur votre <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Cette opération peut prendre quelques minutes. Démarrage du conteneur Linux…</translation>
 <translation id="9180380851667544951">Le site peut partager votre écran</translation>
 <translation id="9188441292293901223">Installer une version plus récente d'Android sur votre téléphone pour déverrouiller votre <ph name="DEVICE_TYPE" /></translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index 5abd64e..f56f86d 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">ઍક્સેસ કરતાં પહેલાં પૂછો</translation>
 <translation id="1434696352799406980">આ તમારા સ્ટાર્ટઅપ પૃષ્ઠ, નવું ટેબ પૃષ્ઠ, શોધ એંજિન અને પિન કરેલ ટેબને ફરીથી સેટ કરશે. તે તમામ એક્સટેન્શન્સને પણ અક્ષમ કરશે અને કુકીઝ જેવો અસ્થાયી ડેટા પણ સાફ કરશે. તમારા બુકમાર્ક્સ, ઇતિહાસ અને સાચવેલ પાસવર્ડ્સ સાફ કરવામાં આવશે નહીં.</translation>
 <translation id="1434886155212424586">હોમપેજ એ નવું ટેબ પૃષ્ઠ છે</translation>
+<translation id="1436671784520050284">સેટઅપ ચાલુ રાખો</translation>
 <translation id="1436784010935106834">દૂર કરેલું</translation>
 <translation id="1438632560381091872">ટૅબ્સને અનમ્યૂટ કરો</translation>
 <translation id="1442392616396121389">રાઉટિંગ પ્રીફિક્સ</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">પીઝા સ્લાઇસ</translation>
 <translation id="1467432559032391204">ડાબું</translation>
 <translation id="1468571364034902819">આ પ્રોફાઇલનો ઉપયોગ કરી શકતાં નથી</translation>
+<translation id="1470533772306424441">અમે તમારા માટે એ બધી ઍપ ઇન્સ્ટૉલ કરીશું. તમે તમારા ઉપકરણ માટે Play સ્ટોર પર વધુ ઍપ શોધી શકશો.</translation>
 <translation id="1470811252759861213">તમારા તમામ કમ્પ્યુટર્સ પર તમારા એક્સ્ટેન્શન્સ મેળવવા માટે, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" ને અપલોડ કરવામાં આવી ન હતી. તમારી Google ડ્રાઇવમાં પૂરતી ખાલી જગ્યા નથી.</translation>
 <translation id="1475502736924165259">તમારી પાસે ફાઇલ પર પ્રમાણપત્રો છે જે અન્ય કોઈપણ કૅટેગરીઝમાં ફિટ થતાં નથી</translation>
@@ -561,7 +563,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out</translation>
 <translation id="1830550083491357902">સાઇન ઇન નથી</translation>
 <translation id="1832511806131704864">ફોન ફેરફાર અપડેટ કર્યો</translation>
-<translation id="1832685970989658809">સાચવેલ ચુકવણી પદ્ધતિઓને તમારા વ્યવસ્થાપકે બંધ કરી છે</translation>
 <translation id="1834503245783133039">ડાઉનલોડ અસફળ: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">શોધ સાફ કરો</translation>
 <translation id="1838709767668011582">Google સાઇટ</translation>
@@ -789,6 +790,7 @@
 <translation id="2192505247865591433">તરફથી:</translation>
 <translation id="2193365732679659387">વિશ્વાસ સેટિંગ્સ</translation>
 <translation id="2195729137168608510">ઇમેઇલ સુરક્ષા</translation>
+<translation id="2199298570273670671">ભૂલ</translation>
 <translation id="2200356397587687044">Chromeને આગળ વધવા મંજૂરીની જરૂર છે</translation>
 <translation id="220138918934036434">છુપાવો બટન</translation>
 <translation id="2202898655984161076">પિંટર્સની સૂચિ બનાવવામાં સમસ્યા આવી. તમારા કેટલાક પ્રિંટર્સ<ph name="CLOUD_PRINT_NAME" /> સાથે સફળતાપૂર્વક નોંધાઈ શક્યા નથી.</translation>
@@ -938,10 +940,10 @@
 <translation id="2435457462613246316">પાસવર્ડ બતાવો</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ને બધી <ph name="PROTOCOL" /> લિંક્સ ખોલવાની મંજૂરી આપીએ?</translation>
 <translation id="2436707352762155834">ન્યૂનતમ</translation>
-<translation id="2437139306601019091">ડેટા વપરાશ માપન સક્ષમ કર્યું</translation>
 <translation id="2440604414813129000">સ્રોત જુ&amp;ઓ</translation>
 <translation id="2445081178310039857">એક્સ્ટેંશન રૂટ ડાયરેક્ટરી આવશ્યક છે.</translation>
 <translation id="2445484935443597917">એક નવી પ્રોફાઇલ બનાવો</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" />ને તમારી ઓળખ ચકાસવી છે</translation>
 <translation id="2448312741937722512">પ્રકાર</translation>
 <translation id="2450223707519584812">તમે વપરાશકર્તાઓને ઉમેરવામાં સમર્થ થશો નહીં કારણ કે Google API કીઝ ખૂટે છે. વિગતો માટે <ph name="DETAILS_URL" /> જુઓ.</translation>
 <translation id="2450310832094867474">સિંક બંધ કરીને સાઇન આઉટ કરીએ?</translation>
@@ -951,6 +953,7 @@
 <translation id="2453576648990281505">ફાઇલ પહેલાથી જ અસ્તિત્વમાં છે</translation>
 <translation id="2453860139492968684">સમાપ્ત</translation>
 <translation id="2454247629720664989">કીવર્ડ</translation>
+<translation id="245661998428026871">ચિત્રમાં ચિત્ર મોડમાં ચાલતો વીડિઓ બંધ થઈ જશે.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> માંથી ફાઈલ્સ કોપી કરવા માંગે છે.</translation>
 <translation id="2462724976360937186">પ્રમાણન અધિકારી કી ID</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ઉમેર્યું</translation>
@@ -1358,6 +1361,7 @@
 <translation id="304826556400666995">ટૅબ્સને અનમ્યૂટ કરો</translation>
 <translation id="3053013834507634016">પ્રમાણપત્ર કી ઉપયોગ</translation>
 <translation id="3057861065630527966">તમારા ફોટો અને વિડિઓઝનો બેકઅપ લો</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">સાંભળવા માટે પસંદ કરોને ચાલુ કરો</translation>
 <translation id="3061707000357573562">પૅચ સેવા</translation>
 <translation id="3064410671692449875">અપૂરતો ડેટા</translation>
@@ -1406,6 +1410,7 @@
 <translation id="313205617302240621">પાસવર્ડ ભૂલી ગયા?</translation>
 <translation id="3132996321662585180">દરરોજ રિફ્રેશ કરો</translation>
 <translation id="3135204511829026971">સ્ક્રીન ફેરવો</translation>
+<translation id="313638818480447860">અમને તમારા એકાઉન્ટ સાથે કનેક્ટ કરેલી <ph name="NUMBER_OF_APPS" /> ઍપ મળી, જે આ ઉપકરણ માટે ઑપ્ટિમાઇઝ કરવામાં આવેલી છે.</translation>
 <translation id="313963229645891001">ડાઉનલોડ કરી રહ્યાં છીએ, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">ડિફોલ્ટ પીળો અવતાર</translation>
 <translation id="3140353188828248647">સરનામાં બાર પર ફોકસ કરો</translation>
@@ -1436,6 +1441,7 @@
 <translation id="3182749001423093222">જોડણી તપાસણી</translation>
 <translation id="3183139917765991655">પ્રોફાઇલ આયાતકાર</translation>
 <translation id="3184560914950696195">$1 પર સાચવી શકાતું નથી. સંપાદિત છબીઓ ડાઉનલોડ્સ ફોલ્ડરમાં સાચવવામાં આવશે.</translation>
+<translation id="3188257591659621405">મારી ફાઇલો</translation>
 <translation id="3188465121994729530">ચલ સરેરાશ</translation>
 <translation id="3190558889382726167">પાસવર્ડ સાચવ્યો</translation>
 <translation id="3192947282887913208">ઑડિઓ ફાઇલો </translation>
@@ -1523,6 +1529,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> ને ઝિપ કરી રહ્યું છે...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">ઍપ્લિકેશન માહિતી</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - વીડિઓ ચિત્રમાં ચિત્ર મોડમાં ચાલી રહ્યો છે</translation>
 <translation id="3335337277364016868">રેકોર્ડ કર્યાનું વર્ષ</translation>
 <translation id="3335947283844343239">બંધ કરેલું ટૅબ ફરીથી ખોલો</translation>
 <translation id="3336664756920573711">તમારા Android ફોન વડે તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરો</translation>
@@ -1542,6 +1549,7 @@
 <translation id="3360297538363969800">છાપવાનું નિષ્ફળ થયું. કૃપા કરીને તમારું પ્રિન્ટર તપાસો અને ફરી પ્રયાસ કરો.</translation>
 <translation id="3364721542077212959">કલમના સાધનો</translation>
 <translation id="3365598184818502391">Ctrl અથવા Altનો ઉપયોગ કરો</translation>
+<translation id="3367047597842238025">તમારી ઇચ્છાનુસાર તમારા <ph name="DEVICE_TYPE" />ને સેટ અપ કરો અને તમારી આંગળીના ટેરવે બધી અદ્ભૂત ક્ષમતાઓ મેળવો.</translation>
 <translation id="3368922792935385530">કનેક્ટેડ</translation>
 <translation id="3369624026883419694">હોસ્ટને રીસોલ્વ કરી રહ્યું છે...</translation>
 <translation id="337286756654493126">તમે એપ્લિકેશનમાં ખોલો છો તે ફોલ્ડર્સ વાંચો</translation>
@@ -1555,6 +1563,7 @@
 <translation id="3389312115541230716">ટાસ્કબારમાં <ph name="SMALL_PRODUCT_LOGO" /> આઇકનને રાઇટ ક્લિક કરો</translation>
 <translation id="3391716558283801616">ટૅબ 7</translation>
 <translation id="3396331542604645348">પસંદ કરેલું પ્રિંટર ઉપલબ્ધ નથી અથવા ઠીકથી ઇન્સ્ટોલ કરેલું નથી. તમારા પ્રિંટરને તપાસો અથવા બીજા પ્રિંટરને પસંદ કરી જુઓ.</translation>
+<translation id="3396800784455899911">"સ્વીકારો અને ચાલુ રાખો" બટન પર ક્લિક કરીને, તમે આ Google સેવાઓ માટે ઉપર વર્ણવેલી પ્રક્રિયા સાથે સંમત થાઓ છો.</translation>
 <translation id="3399432415385675819">સૂચનાઓ અક્ષમ કરવામાં આવશે</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">આ સાઇટ માટે કોઈ પાસવર્ડ સાચવેલા નથી</translation>
@@ -1783,10 +1792,13 @@
 <translation id="3726463242007121105">આ ઉપકરણ ખોલી શકાતું નથી કારણ કે તેની ફાઇલસિસ્ટમને સપોર્ટ નથી.</translation>
 <translation id="3727148787322499904">આ સેટિંગને બદલવું તમામ શેર કરેલ નેટવર્કને પ્રભાવિત કરશે</translation>
 <translation id="3727187387656390258">પૉપ અપની તપાસ કરો</translation>
+<translation id="3729506734996624908">મંજૂર કરેલી સાઇટની સૂચિ</translation>
 <translation id="3732078975418297900">લાઇન <ph name="ERROR_LINE" />માં ભૂલ આવી છે</translation>
 <translation id="3733127536501031542">સ્ટેપ-અપ સાથે SSL સર્વર </translation>
+<translation id="3735740477244556633">આ પ્રમાણે સૉર્ટ કરો</translation>
 <translation id="3737274407993947948">Linux ઇન્સ્ટૉલ કરતી વખતે ભૂલ આવી...</translation>
 <translation id="3737536731758327622">તમારા ડાઉનલોડ્સ અહીં દેખાય છે</translation>
+<translation id="3738671331307774213">તમારી ઓળખની ચકાસણી તમારા ગોપનીય ડેટાનું રક્ષણ કરવામાં સહાય કરે છે</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ખોલીએ?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> હવે Admin Console માં દેખાશે</translation>
@@ -1871,10 +1883,10 @@
 <translation id="3846116211488856547">વેબસાઇટ, Android ઍપ અને બીજા ઘણા માટે વિકાસના સાધનો મેળવો. Linux ઇન્સ્ટૉલ કરવાથી <ph name="DOWNLOAD_SIZE" /> ડેટા ડાઉનલોડ થશે.</translation>
 <translation id="385051799172605136">પાછળ</translation>
 <translation id="3851428669031642514">અસુરક્ષિત સ્ક્રિપ્ટ્સ લોડ કરો</translation>
+<translation id="3854599674806204102">વિકલ્પ પસંદ કરો</translation>
 <translation id="3855441664322950881">એક્સટેન્શન પૅક કરો</translation>
 <translation id="3855676282923585394">બુકમાર્ક્સ અને સેટિંગ્સ આયાત કરો...</translation>
 <translation id="3856800405688283469">સમયઝોન પસંદ કરો</translation>
-<translation id="3856921555429624101">ડેટા વપરાશ માપન સમાપ્ત થયું છે</translation>
 <translation id="3857228364945137633">જ્યારે તમારો ફોન નજીકમાં હોય, ત્યારે તમારા <ph name="DEVICE_TYPE" />ને પાસવર્ડ વિના અનલૉક કરવાનો પ્રયાસ કરો.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: સિંક થોભાવ્યું</translation>
@@ -2245,7 +2257,6 @@
 <translation id="4508051413094283164">બધુ છુપી વિંડોમાં ખોલો</translation>
 <translation id="4508265954913339219">સક્રિયતા નિષ્ફળ</translation>
 <translation id="4508765956121923607">સ્રો&amp;ત જુઓ</translation>
-<translation id="4509823033118379431">હાલમાં છબીઓ ઉપલબ્ધ નથી. સંગ્રહો જોવા માટે કૃપા કરીને ફરીથી કનેક્ટ કરો.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> દ્વારા સંચાલિત</translation>
 <translation id="4514542542275172126">નવો નિરીક્ષિત વપરાશકર્તા સેટ કરો</translation>
 <translation id="4514610446763173167">વીડિઓ ચલાવવા અથવા થોભાવવા માટે તેને ટૉગલ કરો</translation>
@@ -2322,6 +2333,7 @@
 <translation id="4627442949885028695">બીજા ઉપકરણમાંથી ચાલુ કરો</translation>
 <translation id="4628314759732363424">બદલો...</translation>
 <translation id="4628757576491864469">ઉપકરણો</translation>
+<translation id="4628948037717959914">ફોટો</translation>
 <translation id="4630590996962964935">અમાન્ય અક્ષર: $1</translation>
 <translation id="4631887759990505102">કલાકાર</translation>
 <translation id="4632483769545853758">ટૅબને અનમ્યૂટ કરો</translation>
@@ -2507,7 +2519,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" />નો બૅકઅપ લેવા માટે તૈયાર</translation>
 <translation id="4907161631261076876">આ ફાઇલ સામાન્ય રીતે ડાઉનલોડ કરવામાં આવતી નથી અને તે જોખમી હોઈ શકે છે.</translation>
 <translation id="4907306957610201395">પરવાનગી કૅટેગરી</translation>
-<translation id="4907824805858067479">તમારા વ્યવસ્થાપકે સાચવેલા કાર્ડ બંધ કર્યા છે</translation>
 <translation id="4908811072292128752">બે સાઇટ એકસાથે બ્રાઉઝ કરવા માટે એક નવી ટૅબ ખોલો</translation>
 <translation id="4909038193460299775">આ એકાઉન્ટ <ph name="DOMAIN" /> દ્વારા સંચાલિત કરવામાં આવી રહ્યું હોવાથી, આ ઉપકરણ પરથી તમારા બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ સાફ કરવામાં આવશે. જો કે, તમારો ડેટા તમારા Google એકાઉન્ટમાં સંગ્રહિત રહેશે અને <ph name="BEGIN_LINK" />Google ડેશબોર્ડ<ph name="END_LINK" /> પર સંચાલિત કરવામાં આવી શકે છે.</translation>
 <translation id="4909359680501173791">તમે સફળતાપૂર્વક નોંધણી કરાવેલ છે</translation>
@@ -2539,6 +2550,7 @@
 <translation id="4955814292505481804">વાર્ષિક</translation>
 <translation id="4957949153200969297">માત્ર <ph name="IDS_SHORT_PRODUCT_NAME" /> સિંક સંબંધિત સુવિધાઓ ચાલુ કરો</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">તમારાં કાર્ડ એક જ સ્થાનમાં રાખો</translation>
 <translation id="496226124210045887">તમે પસંદ કરેલું ફોલ્ડર સંવેદનશીલ ફાઇલો ધરાવે છે. શું તમે ખરેખર "$1" ને આ ફોલ્ડરની કાયમી વાંચવાની ઍક્સેસ આપવા માંગો છો?</translation>
 <translation id="4964455510556214366">ગોઠવણી</translation>
 <translation id="4964673849688379040">તપાસી રહ્યું છે...</translation>
@@ -2586,6 +2598,7 @@
 <translation id="5027562294707732951">એક્સ્ટેન્શન ઉમેરો</translation>
 <translation id="5029568752722684782">કૉપિ સાફ કરો</translation>
 <translation id="5030338702439866405">આના દ્વારા રજૂ કરાયું</translation>
+<translation id="503155457707535043">ઍપ ડાઉનલોડ થઈ રહી છે</translation>
 <translation id="503498442187459473"><ph name="HOST" /> તમારા કૅમેરા અને માઇક્રોફોનનો ઉપયોગ કરવા માગે છે</translation>
 <translation id="5036662165765606524">કોઈપણ સાઇટને આપમેળે બહુવિધ ફાઇલો ડાઉનલોડ કરવાની મંજૂરી આપશો નહીં</translation>
 <translation id="5037676449506322593">બધા પસંદ કરો</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">અવાજ બંધ કરો</translation>
 <translation id="5785583009707899920">Chrome ફાઇલ માટેની ઉપયોગીતાઓ</translation>
 <translation id="5787146423283493983">કી એગ્રીમેન્ટ</translation>
+<translation id="5788127256798019331">Play ફાઇલો</translation>
 <translation id="5788367137662787332">માફ કરશો, ઉપકરણ <ph name="DEVICE_LABEL" /> પર ઓછામાં ઓછું એક પાર્ટિશન માઉન્ટ કરી શકાયું નથી.</translation>
 <translation id="5794414402486823030">હંમેશા સિસ્ટમ દર્શક સાથે ખોલો</translation>
 <translation id="5794786537412027208">બધી Chrome એપ્લિકેશન્સને છોડી દો</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">અનુવાદિત</translation>
 <translation id="5991049340509704927">મૅગ્નિફાઇ</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશન કાઢી નાખવાનું કહો.}one{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}other{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}}</translation>
-<translation id="5993332328670040093">ડેટા વપરાશનું હવેથી માપન કરવામાં આવશે નહિ.</translation>
 <translation id="6002458620803359783">મનપસંદ વૉઇસ</translation>
 <translation id="6005695835120147974">મીડિયા રાઉટર</translation>
 <translation id="6006484371116297560">ક્લાસિક</translation>
@@ -3355,6 +3368,7 @@
 <translation id="6178664161104547336">એક પ્રમાણપત્ર પસંદ કરો</translation>
 <translation id="6181431612547969857">ડાઉનલોડ અવરોધિત કર્યું</translation>
 <translation id="6185132558746749656">ઉપકરણનું સ્થાન</translation>
+<translation id="6185617499004995178">CUPS IPP વૅલિડેટર</translation>
 <translation id="6185696379715117369">પૃષ્ઠ ઉપર</translation>
 <translation id="6189273858858366896">નેટવર્ક ફાઇલ શેર સેટ કરો અને મેનેજ કરો.</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> સાથે ખોલો</translation>
@@ -3387,6 +3401,7 @@
 <translation id="6231881193380278751">પૃષ્ઠને સ્વતઃ-તાજુ કરવા માટે URL માં એક ક્વેરી પરમ ઉમેરો: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">બૅટરી</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> થી કનેક્શન જતું રહ્યું છે</translation>
+<translation id="6235700927623181151">આ ટૅબ તમારા ડેસ્કટૉપ કન્ટેન્ટને શેર કરી રહ્યું છે.</translation>
 <translation id="6237816943013845465">તમને તમારું સ્ક્રીન રિઝોલ્યૂશન સમાયોજિત કરવાની મંજૂરી આપે છે</translation>
 <translation id="6238923052227198598">લૉક સ્ક્રીન પર એક એકદમ નવી નોંધ રાખો</translation>
 <translation id="6239558157302047471">&amp;ફ્રેમ ફરીથી લોડ કરો</translation>
@@ -3421,7 +3436,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> સામાન્ય રીતે ડાઉનલોડ થયેલું નથી અને જોખમકારક હોઈ શકે છે.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{તમારા નેટવર્ક પર નવું પ્રિન્ટર}one{તમારા નેટવર્ક પર નવા પ્રિન્ટર્સ}other{તમારા નેટવર્ક પર નવા પ્રિન્ટર્સ}}</translation>
-<translation id="6286684120317096255">ડેટા વપરાશનું માપન કરવામાં આવી રહ્યું છે</translation>
 <translation id="6286708577777130801">સાચવેલ પાસવર્ડની વિગતો</translation>
 <translation id="6287852322318138013">આ ફાઇલ ખોલવા માટે એક ઍપ્લિકેશન પસંદ કરો</translation>
 <translation id="6289452883081499048">વ્યક્તિગત Google સેવાઓ જેમ કે Play</translation>
@@ -3532,6 +3546,7 @@
 <translation id="6451180435462401570">મેઘ મુદ્રણ ઉપકરણોને સંચાલિત કરો</translation>
 <translation id="6451689256222386810">જો તમે તમારો પાસફ્રેઝ ભૂલી ગયાં હોવ અથવા આ સેટિંગ બદલવા માગતા હોવ, તો <ph name="BEGIN_LINK" />સમન્વયનને ફરીથી સેટ કરો<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">નકારો</translation>
+<translation id="6455264371803474013">વિશિષ્ટ સાઇટ પર</translation>
 <translation id="6455894534188563617">&amp;નવું ફોલ્ડર</translation>
 <translation id="6456394469623773452">સરસ</translation>
 <translation id="6456631036739229488">Smart Lock ફોન બદલાયો. Smart Lock અપડેટ કરવા માટે તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. સેટિંગ્સમાં Smart Lock બંધ કરો.</translation>
@@ -3609,6 +3624,7 @@
 <translation id="657402800789773160">&amp;Reload This Page</translation>
 <translation id="6577284282025554716">ડાઉનલોડ રદ કર્યું: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">તમારા Google વપરાશકર્તાનામ અને પાસવર્ડ સાથે સમન્વયિત પાસવર્ડને એન્ક્રિપ્ટ કરો</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - ડેસ્કટૉપ કન્ટેન્ટ શેર કર્યું</translation>
 <translation id="6580151766480067746">ARC સંસ્કરણ</translation>
 <translation id="6581162200855843583">Google ડ્રાઇવ લિંક</translation>
 <translation id="6582421931165117398">તમારી વ્યક્તિગત માહિતીને સુરક્ષિત રાખવા માટે, હમણાં જ તમારો પાસવર્ડ બદલો. તમે તમારો પાસવર્ડ બદલો તે પહેલાં, તમને સાઇન ઇન કરવાનું કહેવામાં આવશે.</translation>
@@ -4075,6 +4091,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{આ ઍપ્લિકેશન Chromeને યોગ્ય રીતે કાર્ય કરવાથી અટકાવી શકે છે.}one{આ ઍપ્લિકેશનો Chromeને યોગ્ય રીતે કાર્ય કરવાથી અટકાવી શકે છે.}other{આ ઍપ્લિકેશનો Chromeને યોગ્ય રીતે કાર્ય કરવાથી અટકાવી શકે છે.}}</translation>
 <translation id="7303900363563182677">આ સાઇટ ક્લિપબોર્ડ પર કૉપિ કરેલ ટેક્સ્ટ અને છબીઓ જોવાથી બ્લૉક કરેલ છે</translation>
 <translation id="730515362922783851">સ્થાનિક નેટવર્ક અથવા ઈન્ટરનેટ પર કોઈપણ ઉપકરણ સાથે ડેટા વિનિમય કરો</translation>
+<translation id="7307129035224081534">થોભાવ્યું</translation>
 <translation id="7308002049209013926">નવી ઍપ અને પ્રવૃત્તિઓ પર ઝડપથી પહોંચવા માટે લૉન્ચરનો ઉપયોગ કરો. અહીં કીબોર્ડ વડે પહોંચવા માટે, Alt + Shift + L દબાવો.</translation>
 <translation id="7309257895202129721">&amp;નિયંત્રણો બતાવો</translation>
 <translation id="7310598146671372464">લૉગ ઇન કરવામાં નિષ્ફળ થયા. સર્વર આપેલ Kerberos ઍન્ક્રિપ્શન પ્રકારોનું સમર્થન કરતું નથી. કૃપા કરીને તમારા વ્યવસ્થાપકનો સપર્ક કરો.</translation>
@@ -4132,7 +4149,6 @@
 <translation id="7400839060291901923">તમારા <ph name="PHONE_NAME" /> પર કનેક્શન સેટ કરો</translation>
 <translation id="740624631517654988">પૉપ-અપ અવરોધિત છે</translation>
 <translation id="7407430846095439694">આયાત કરો અને પ્રતિબદ્ધ કરો</translation>
-<translation id="7409233648990234464">ફરીથી લૉન્ચ કરો અને Powerwash કરો</translation>
 <translation id="7409836189476010449">ફ્લેશ ચલાવો</translation>
 <translation id="7410344089573941623">પૂછો કે <ph name="HOST" /> તમારા કૅમેરા અને માઇક્રોફોનને ઍક્સેસ કરવા માંગે છે કે કેમ</translation>
 <translation id="741204030948306876">હા, હું સંમત છું</translation>
@@ -4165,6 +4181,7 @@
 <translation id="7465778193084373987">નેટસ્કેપ પ્રમાણપત્ર રિવોકેશન URL</translation>
 <translation id="7469894403370665791">આ નેટવર્કથી આપમેળે કનેક્ટ થાઓ</translation>
 <translation id="747114903913869239">ભૂલ: એક્સટેન્શનને ડિકોડ કરવામાં અક્ષમ</translation>
+<translation id="7473753388963818366">ચાલો, તમારા <ph name="DEVICE_TYPE" />ને તમારા માટે તૈયાર કરીએ</translation>
 <translation id="7473891865547856676">નહીં આભાર</translation>
 <translation id="747459581954555080">બધુ પુનર્પ્રાપ્ત કરો</translation>
 <translation id="7475671414023905704">નેટસ્કેપ ખોવાયેલો પાસવર્ડ URL</translation>
@@ -4289,6 +4306,7 @@
 <translation id="7665369617277396874">એકાઉન્ટ ઉમેરો</translation>
 <translation id="7671130400130574146">સિસ્ટમ શીર્ષક બાર અને બોર્ડર્સનો ઉપયોગ કરો</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" />માં <ph name="HUNG_IFRAME_URL" />.</translation>
+<translation id="7676867886086876795">કોઈપણ ટેક્સ્ટ ફીલ્ડમાં શ્રુતલેખનને મંજૂરી આપવા માટે Googleને તમારો અવાજ મોકલો.</translation>
 <translation id="7681095912841365527">સાઇટ બ્લૂટૂથનો ઉપયોગ કરી શકે છે</translation>
 <translation id="7683373461016844951">ચાલુ રાખવા માટે, ઓકે ક્લિક કરો, પછી તમારા <ph name="DOMAIN" /> ઇમેઇલ ઍડ્રેસ માટે નવી પ્રોફાઇલ બનાવવા માટે વ્યક્તિને ઉમેરો પર ક્લિક કરો.</translation>
 <translation id="7684212569183643648">તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટોલ કરાયું</translation>
@@ -4330,6 +4348,7 @@
 <translation id="7740996059027112821">માનક</translation>
 <translation id="7748528009589593815">પહેલાંનું ટૅબ</translation>
 <translation id="7748626145866214022">ક્રિયા બાર પર વધુ વિકલ્પો ઉપલબ્ધ છે. ક્રિયા બાર પર ફોકસ કરવા માટે Alt + A દબાવો.</translation>
+<translation id="7750228210027921155">ચિત્રમાં ચિત્ર</translation>
 <translation id="7751260505918304024">બધું બતાવો</translation>
 <translation id="7754704193130578113">ડાઉનલોડ કરતાં પહેલાં પ્રત્યેક ફાઇલને ક્યાં સાચવવી છે તે જણાવો</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4437,6 +4456,7 @@
 <translation id="7857949311770343000">શું આ તમારી અપેક્ષા મુજબનું નવું ટેબ પૃષ્ઠ છે?</translation>
 <translation id="786073089922909430">સેવા: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;ડાઉનલોડ્સ</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 કુકી}one{# કુકી}other{# કુકી}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - જોડી કરેલ</translation>
 <translation id="7870730066603611552">સેટઅપ કર્યા પછી સિંક વિકલ્પો રિવ્યૂ કરો</translation>
 <translation id="7870790288828963061">નવા સંસ્કરણ સાથેની કોઇ કિઓસ્ક ઍપ્લિકેશનો મળી નથી. અપડેટ કરવા માટે કંઇ નથી. કૃપા કરીને USB સ્ટીક દૂર કરો.</translation>
@@ -4753,6 +4773,7 @@
 <translation id="8373553483208508744">ટૅબ્સને મ્યૂટ કરો</translation>
 <translation id="8382913212082956454">&amp;ઇમેઇલ સરનામું કૉપિ કરો</translation>
 <translation id="8386903983509584791">સ્કૅન પૂર્ણ થયું</translation>
+<translation id="8389492867173948260">આ એક્સટેંશનને તમે મુલાકાત લો તે વેબસાઇટ પરનો તમારો બધો ડેટા વાંચવાની અને બદલવાની મંજૂરી આપો:</translation>
 <translation id="8390449457866780408">સર્વર અનુપલબ્ધ.</translation>
 <translation id="8391712576156218334">છબી અનુપલબ્ધ. થોડા સમય પછી ફરી પ્રયાસ કરો.</translation>
 <translation id="8392234662362215700">કીબોર્ડ લેઆઉટ સ્વિચ કરવા માટે Control-Shift-Space દબાવો</translation>
@@ -4784,6 +4805,7 @@
 <translation id="84297032718407999">તમે <ph name="LOGOUT_TIME_LEFT" />માં સાઇન આઉટ થઈ જશો</translation>
 <translation id="8431909052837336408">SIM નો PIN બદલો</translation>
 <translation id="8434480141477525001">NaCl ડિબગ પોર્ટ</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" />ને તમારી ઓળખની ચકાસણી કરાવો</translation>
 <translation id="843760761634048214">ક્રેડિટ કાર્ડ સાચવો</translation>
 <translation id="8438328416656800239">એક સ્માર્ટ બ્રાઉઝર પર સ્વિચ કરો</translation>
 <translation id="8438566539970814960">શોધ અને બ્રાઉઝિંગ વધુ સારું બનાવો</translation>
@@ -4810,6 +4832,7 @@
 <translation id="8465252176946159372">માન્ય નથી</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ને ચલાવવા માટે તમારી પરવાનગીની જરૂર છે</translation>
 <translation id="8466234950814670489">તાર આર્કાઇવ</translation>
+<translation id="8466417995783206254">આ ટૅબમાં ચિત્રમાં ચિત્ર મોડમાં વીડિઓ ચાલી રહ્યો છે.</translation>
 <translation id="8468750959626135884">તમારા Android ફોન વડે તમારી <ph name="DEVICE_TYPE" /> ને અનલૉક કરો.</translation>
 <translation id="8470028084415844044">તમારા બધા ઉપકરણો પર તમારા બધા પાસવર્ડ મેળવવા માટે સિંક ચાલુ કરો.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> માટે સાચવેલા પાસવર્ડ</translation>
@@ -4830,6 +4853,7 @@
 <translation id="8496717697661868878">આ પ્લગિન ચલાવો</translation>
 <translation id="8497219075884839166">વિંડોની ઉપયોગીતાઓ</translation>
 <translation id="8498214519255567734">ઓછા પ્રકાશમાં તમારી સ્ક્રીન પર જોવાનું અથવા વાંચવાનું સરળ બનાવે છે</translation>
+<translation id="8498395510292172881">Chromeમાં વાંચવાનું ચાલુ રાખો</translation>
 <translation id="8503813439785031346">વપરાશકર્તાનામ</translation>
 <translation id="850875081535031620">કોઈ નુકસાનકારક સૉફ્ટવેર મળ્યું નથી</translation>
 <translation id="8509646642152301857">જોડણી તપાસ ડાઉનલોડ કરવાનું નિષ્ફળ ગયું.</translation>
@@ -4980,7 +5004,6 @@
 <translation id="8725066075913043281">ફરી પ્રયાસ કરો</translation>
 <translation id="8725178340343806893">પસંદગીઓ/બુકમાર્ક્સ</translation>
 <translation id="8726206820263995930">સર્વરમાંથી નીતિ સેટિંગ્સનું આનયન કરતી વખતે ભૂલ: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">આ ફરી બતાવશો નહીં</translation>
 <translation id="8727344521467137076">તમારા કમ્પ્યુટરમાં નુકસાનકારક સૉફ્ટવેર છે. તમારું બ્રાઉઝર ફરીથી સામાન્ય રીતે કાર્ય કરે તે માટે Chrome તેને કાઢી નાખી રહ્યું છે અને તમારી સેટિંગ પુનઃસ્થાપિત કરશે.</translation>
 <translation id="8730621377337864115">થઈ ગયું</translation>
 <translation id="8732030010853991079">આ આયકન પર ક્લિક કરીને આ એક્સ્ટેંશનનો ઉપયોગ કરો.</translation>
@@ -5171,6 +5194,7 @@
 <translation id="9027459031423301635">લિંક નવા &amp;ટૅબમાં ખોલો</translation>
 <translation id="9030515284705930323">તમારા એકાઉન્ટ માટે તમારી સંસ્થાએ Google Play સ્ટોર સક્ષમ કરેલ નથી. વધુ માહિતી માટે તમારા વ્યવસ્થાપકનો સંપર્ક કરો.</translation>
 <translation id="9033857511263905942">&amp;પેસ્ટ કરો</translation>
+<translation id="9034924485347205037">Linux ફાઇલો</translation>
 <translation id="9035012421917565900">આઇટમને પાછી '<ph name="DESTINATION_NAME" />'માં ખસેડી શકાતી નથી, તેથી તમે આ ક્રિયા પૂર્વવત્ કરી શકશો નહીં.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">મૂળ બતાવો</translation>
@@ -5271,6 +5295,7 @@
 <translation id="9173995187295789444">બ્લૂટૂથ ઉપકરણો માટે સ્કૅન કરી રહ્યાં છીએ...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth ઉપકરણ કનેક્ટ કર્યું</translation>
 <translation id="9177499212658576372">તમે હાલમાં <ph name="NETWORK_TYPE" /> નેટવર્કથી કનેક્ટ કરેલું છે.</translation>
+<translation id="9179734824669616955">તમારા <ph name="DEVICE_TYPE" /> પર Linux (બીટા) સેટ અપ કરો</translation>
 <translation id="9180281769944411366">આ પ્રક્રિયામાં થોડો સમય લાગી શકે છે. Linux કન્ટેઇનર શરૂ કરી રહ્યાં છીએ.</translation>
 <translation id="9180380851667544951">સાઇટ તમારી સ્ક્રીનને શેર કરી શકે છે</translation>
 <translation id="9188441292293901223">આ <ph name="DEVICE_TYPE" /> ને અનલૉક કરવા માટે, કૃપા કરીને તમારા ફોનને Android ના નવા સંસ્કરણ પર અપડેટ કરો.</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 4731c9cd..c52c46f 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">एक्सेस करने से पहले पूछें</translation>
 <translation id="1434696352799406980">यह आपके शुरुआती पेज, नए टैब पेज, खोज इंजन और पिन किए गए टैब को रीसेट करेगा. यह सभी एक्सटेंशन को भी बंद करेगा और कुकी जैसे अस्थायी डेटा को मिटाएगा. आपके बुकमार्क, इतिहास और सेव किए गए पासवर्ड नहीं मिटाए जाएंगे.</translation>
 <translation id="1434886155212424586">मुख्यपेज, नया टैब पेज है</translation>
+<translation id="1436671784520050284">सेटअप जारी रखें</translation>
 <translation id="1436784010935106834">निकाला गया</translation>
 <translation id="1438632560381091872">टैब अनम्‍यूट करें</translation>
 <translation id="1442392616396121389">रूटिंग का प्रारंभिक भाग</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">पिज़्ज़ा का टुकड़ा</translation>
 <translation id="1467432559032391204">बाएं</translation>
 <translation id="1468571364034902819">इस प्रोफ़ाइल का इस्तेमाल नहीं कर सकते</translation>
+<translation id="1470533772306424441">हम आपके लिए उन ऐप्लिकेशन को इंस्टॉल कर देंगे. आप 'Play स्टोर' पर जाकर अपने डिवाइस के लिए और भी ऐप्लिकेशन पा सकते हैं.</translation>
 <translation id="1470811252759861213">अपने सभी कंप्यूटर पर अपने एक्सटेंशन प्राप्त करने के लिए, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" को अपलोड नहीं किया गया. आपकी Google डिस्क में पर्याप्त जगह नहीं है.</translation>
 <translation id="1475502736924165259">आपके पास फ़ाइल पर ऐसे प्रमाणपत्र हैं जो किसी भी अन्य श्रेणी में फ़िट नहीं होते</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">ज़ूम &amp;आउट करें</translation>
 <translation id="1830550083491357902">प्रवेश नहीं है</translation>
 <translation id="1832511806131704864">फ़ोन बदलाव अपडेट किया गया</translation>
-<translation id="1832685970989658809">सेव किए गए भुगतान के तरीके आपके एडमिन ने बंद कर दिए हैं</translation>
 <translation id="1834503245783133039">फ़ाइल डाउनलोड नहीं हो सकी: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">खोज साफ़ करें</translation>
 <translation id="1838709767668011582">Google साइट</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">द्वारा:</translation>
 <translation id="2193365732679659387">विश्‍वास सेटिंग</translation>
 <translation id="2195729137168608510">ईमेल सुरक्षा</translation>
+<translation id="2199298570273670671">गड़बड़ी</translation>
 <translation id="2200356397587687044">जारी रखने के लिए Chrome को अनुमति चाहिए</translation>
 <translation id="220138918934036434">छुपाएं बटन</translation>
 <translation id="2202898655984161076">प्रिंटरों को सूचीबद्ध करने में कोई समस्या थी. आपके प्रिंटरों में से कुछ <ph name="CLOUD_PRINT_NAME" /> के साथ सफलतापूर्वक पंजीकृत नहीं हो सके हैं.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">पासवर्ड दिखाएं</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> को सभी <ph name="PROTOCOL" /> लिंक खोलने दें?</translation>
 <translation id="2436707352762155834">न्यूनतम</translation>
-<translation id="2437139306601019091">डेटा उपयोग मापन पूरा हो गया है</translation>
 <translation id="2440604414813129000">&amp;स्रोत देखें</translation>
 <translation id="2445081178310039857">एक्‍सटेंशन मूल निर्देशिका आवश्यक है.</translation>
 <translation id="2445484935443597917">नई प्रोफ़ाइल बनाएं</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> आपकी पहचान की पुष्टि करना चाहता है</translation>
 <translation id="2448312741937722512">प्रकार</translation>
 <translation id="2450223707519584812">आप उपयोगकर्ताओं को नहीं जोड़ सकेंगे क्योंकि Google API (एपीआई) कुंजियां मौजूद नहीं हैं. जानकारी के लिए <ph name="DETAILS_URL" /> देखें.</translation>
 <translation id="2450310832094867474">सिंक बंद करें और साइन आउट करें?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">फ़ाइल पहले से मौजूद है</translation>
 <translation id="2453860139492968684">समाप्त करें</translation>
 <translation id="2454247629720664989">कीवर्ड</translation>
+<translation id="245661998428026871">वीडियो 'पिक्चर में पिक्चर' मोड में चलना बंद हो जाएगा.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> से फ़ाइलों की कॉपी बनाना चाहता है.</translation>
 <translation id="2462724976360937186">प्रमाणन प्राधिकरण कुंजी आईडी</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> जोड़ा गया</translation>
@@ -1243,7 +1246,7 @@
 <translation id="287286579981869940"><ph name="PROVIDER_NAME" /> जोड़ें...</translation>
 <translation id="2874343608108773609">अपने सभी डिवाइस पर अपने पासवर्ड पाने के लिए, Chrome में साइन इन करें.</translation>
 <translation id="2875698561019555027">(Chrome गड़बड़ी पृष्‍ठ)</translation>
-<translation id="2876441201733326392">USB 'सुरक्षा चाबी' का इस्तेमाल करें</translation>
+<translation id="2876441201733326392">USB सुरक्षा चाबी का इस्तेमाल करें</translation>
 <translation id="288042212351694283">अपने यूनीवर्सल सेकंड फ़ैक्टर डिवाइस एक्सेस करें</translation>
 <translation id="2881966438216424900">अंतिम बार पहुंच प्राप्त करने की तिथि:</translation>
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> पुन: प्रारंभ होगा और जल्‍दी ही रीेसेट हो जाएगा</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">टैब अनम्‍यूट करें</translation>
 <translation id="3053013834507634016">प्रमाणपत्र कुंजी उपयोग</translation>
 <translation id="3057861065630527966">अपनी फ़ोटो और वीडियो का बैक अप लें</translation>
+<translation id="3059313675706898490">Android संदेश</translation>
 <translation id="3060379269883947824">चुनें और सुनें सुविधा चालू करें</translation>
 <translation id="3061707000357573562">पैच सेवा</translation>
 <translation id="3064410671692449875">अपर्याप्त डेटा</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">पासवर्ड भूल गए?</translation>
 <translation id="3132996321662585180">हर रोज़ रीफ्रेश करें</translation>
 <translation id="3135204511829026971">स्क्रीन को घुमाएं</translation>
+<translation id="313638818480447860">हमें आपके खाते से जुड़े हुए ऐसे <ph name="NUMBER_OF_APPS" /> ऐप्लिकेशन मिले हैं जो इस डिवाइस के लिए ऑप्टिमाइज़ किए गए हैं.</translation>
 <translation id="313963229645891001">फ़ाइल डाउनलोड हो रही है, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">डिफ़ॉल्ट पीला अवतार</translation>
 <translation id="3140353188828248647">पता बार को फ़ोकस करें</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">वर्तनी परीक्षण</translation>
 <translation id="3183139917765991655">प्रोफ़ाइल आयातकर्ता</translation>
 <translation id="3184560914950696195">$1 पर नहीं सहेजी जा सकती. संपादित चित्र, डाउनलोड फ़ोल्डर में सहेजी जाएंगी.</translation>
+<translation id="3188257591659621405">मेरी फ़ाइलें</translation>
 <translation id="3188465121994729530">गतिशील औसत</translation>
 <translation id="3190558889382726167">पासवर्ड सहेजा गया</translation>
 <translation id="3192947282887913208">ऑडियो फ़ाइलें</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> ज़िप कर रहा है...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">ऐप्स की जानकारी</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - वीडियो 'पिक्चर में पिक्चर' मोड में चल रहा है</translation>
 <translation id="3335337277364016868">रिकॉर्ड करने का साल</translation>
 <translation id="3335947283844343239">बंद किए गए टैब फिर से खोलें</translation>
 <translation id="3336664756920573711">अपने <ph name="DEVICE_TYPE" /> को अपने Android फ़ोन से अनलॉक करें</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">प्रिंट करना विफल रहा. कृपया अपना प्रिंटर जाँचें और पुन: प्रयास करें.</translation>
 <translation id="3364721542077212959">स्टाइलस टूल</translation>
 <translation id="3365598184818502391">Ctrl या फिर Alt का इस्तेमाल करें</translation>
+<translation id="3367047597842238025">अपनी पसंद के हिसाब से अपना <ph name="DEVICE_TYPE" /> सेट अप करें और उन सभी अनोखी क्षमताओं का पता लगाएं जो आपकी आसान पहुंच में हैं.</translation>
 <translation id="3368922792935385530">कनेक्टेड</translation>
 <translation id="3369624026883419694">होस्ट को परिष्कृत कर रहा है...</translation>
 <translation id="337286756654493126">आपके द्वारा ऐप्लिकेशन में खोले गए फ़ोल्डर पढ़ें</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">टास्कबार में <ph name="SMALL_PRODUCT_LOGO" /> आइकॉन पर राइट क्लिक करें</translation>
 <translation id="3391716558283801616">टैब 7</translation>
 <translation id="3396331542604645348">चयनित प्रिंटर उपलब्‍ध नहीं है या ठीक से इंस्‍टॉल नहीं किया गया है. अपना प्रिंटर जाँचें या किसी अन्‍य प्रिंटर का चयन करने का प्रयास करें.</translation>
+<translation id="3396800784455899911">"स्वीकार करें और जारी रखें" बटन पर क्लिक करके, आप पुष्टि करते हैं कि इन Google सेवाओं के लिए ऊपर बताई गई प्रोसेसिंग से आप सहमत हैं.</translation>
 <translation id="3399432415385675819">नोटिफ़िकेशन अक्षम हो जाएंगे</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">इस साइट के लिए कोई पासवर्ड सेव नहीं किया गया है</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">यह डिवाइस नहीं खोला जा सकता क्‍योंकि इसका फ़ाइल सिस्‍टम समर्थित नहीं है.</translation>
 <translation id="3727148787322499904">यह सेटिंग बदलने से सभी शेयर नेटवर्क प्रभावित होंगे</translation>
 <translation id="3727187387656390258">पॉपअप का निरीक्षण करें</translation>
+<translation id="3729506734996624908">मंज़ूर की गई साइटें</translation>
 <translation id="3732078975418297900">लाइन <ph name="ERROR_LINE" /> पर गड़बड़ी</translation>
 <translation id="3733127536501031542">स्टेप-अप वाला SSL सर्वर</translation>
+<translation id="3735740477244556633">इसके अनुसार क्रम से लगाएं</translation>
 <translation id="3737274407993947948">Linux इंस्टॉल करने में गड़बड़ी...</translation>
 <translation id="3737536731758327622">आपके डाउनलोड यहां दिखाई देंगे</translation>
+<translation id="3738671331307774213">अपनी पहचान की पुष्टि करने से आपको अपना निजी डेटा सुरक्षित रखने में मदद मिलती है</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> खोलना चाहते हैं?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> अब Admin Console में दिखाई देगा</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">वेबसाइटें, Android ऐप्लिकेशन वगैरह बनाने के टूल पाएं. Linux इंस्टॉल करने पर <ph name="DOWNLOAD_SIZE" /> डेटा डाउनलोड होगा.</translation>
 <translation id="385051799172605136">वापस</translation>
 <translation id="3851428669031642514">असुरक्षित स्‍क्रिप्‍ट लोड करें</translation>
+<translation id="3854599674806204102">कोई विकल्प चुनें</translation>
 <translation id="3855441664322950881">एक्सटेंशन पैक करें</translation>
 <translation id="3855676282923585394">बुकमार्क और सेटिंग आयात करें...</translation>
 <translation id="3856800405688283469">समय क्षेत्र चुनें</translation>
-<translation id="3856921555429624101">डेटा उपयोग मापन पूरा हो गया है</translation>
 <translation id="3857228364945137633">अपना फ़ोन आस-पास होने पर अपने <ph name="DEVICE_TYPE" /> को पासवर्ड के बिना अनलॉक करने के लिए Smart Lock का उपयोग करें.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: सिंक करना रोका गया</translation>
@@ -1966,7 +1978,7 @@
 <translation id="3979748722126423326"><ph name="NETWORKDEVICE" /> सक्षम करें</translation>
 <translation id="3981760180856053153">सहेजने का गलत तरीका दर्ज किया गया.</translation>
 <translation id="3983586614702900908">किसी अज्ञात विक्रेता के डिवाइस</translation>
-<translation id="3984159763196946143">'डेमो मोड' शुरू नहीं किया जा सका</translation>
+<translation id="3984159763196946143">डेमो मोड शुरू नहीं किया जा सका</translation>
 <translation id="3985261842049607969">Google डिस्क में बैक अप लें. किसी भी समय अपना डेटा आसानी से बहाल करें या डिवाइस बदलें. आपके बैकअप में ऐप्लिकेशन का डेटा शामिल है. <ph name="BEGIN_LINK1" />अधिक जानें<ph name="END_LINK1" /></translation>
 <translation id="3987348946546879621">बचाया गया डेटा</translation>
 <translation id="3987938432087324095">माफ़ करें, यह समझ में नहीं आया.</translation>
@@ -1987,7 +1999,7 @@
 <translation id="4022426551683927403">शब्दकोश में &amp;जोड़ें</translation>
 <translation id="4023146161712577481">डिवाइस कॉन्फ़िगरेशन निर्धारित करना.</translation>
 <translation id="4027804175521224372">(आप इसे छोड़ रहे हैं—<ph name="IDS_SYNC_PROMO_NOT_SIGNED_IN_STATUS_LINK" />)</translation>
-<translation id="4027951648498485763">आपकी Flash सेटिंग को तब तक रखा जाएगा जब तक कि आप Chrome को छोड़ नहीं देते.</translation>
+<translation id="4027951648498485763">आपकी फ़्लैश सेटिंग को तब तक रखा जाएगा जब तक कि आप Chrome को छोड़ नहीं देते.</translation>
 <translation id="4031179711345676612">माइक्रोफ़ोन की अनुमति है</translation>
 <translation id="4031527940632463547">सेंसर ब्लॉक हैं</translation>
 <translation id="4031910098617850788">F5</translation>
@@ -2248,7 +2260,6 @@
 <translation id="4508051413094283164">सभी को गुप्त विंडो में खोलें</translation>
 <translation id="4508265954913339219">सक्रियण विफल</translation>
 <translation id="4508765956121923607">स्रो&amp;त देखें</translation>
-<translation id="4509823033118379431">इमेज फ़िलहाल उपलब्ध नहीं हैं. संग्रह देखने के लिए कृपया फिर से कनेक्ट करें.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> के उपयोग से</translation>
 <translation id="4514542542275172126">'निगरानी में रखा गया नया उपयोगकर्ता' सेट करें</translation>
 <translation id="4514610446763173167">वीडियो को 'चलाएं' या 'रोकें' पर टॉगल करें</translation>
@@ -2325,6 +2336,7 @@
 <translation id="4627442949885028695">किसी अन्य डिवाइस से जारी रखें</translation>
 <translation id="4628314759732363424">बदलें...</translation>
 <translation id="4628757576491864469">डिवाइस</translation>
+<translation id="4628948037717959914">फ़ोटो</translation>
 <translation id="4630590996962964935">अमान्य वर्ण: $1</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4632483769545853758">टैब अनम्‍यूट करें</translation>
@@ -2510,7 +2522,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> का बैक अप लेने के लिए तैयार है</translation>
 <translation id="4907161631261076876">यह फ़ाइल आमतौर पर डाउनलोड नहीं की जाती है और यह खतरनाक हो सकती है.</translation>
 <translation id="4907306957610201395">अनुमति श्रेणी</translation>
-<translation id="4907824805858067479">सेव किए गए कार्ड आपके एडमिन ने बंद कर दिए हैं</translation>
 <translation id="4908811072292128752">एक बार में दो साइटें ब्राउज़ करने के लिए नया टैब खोलें</translation>
 <translation id="4909038193460299775">चूंकि यह खाता <ph name="DOMAIN" /> द्वारा प्रबंधित किया जाता है, इसलिए इस डिवाइस से आपके बुकमार्क, इतिहास, पासवर्ड और अन्य सेटिंग हटा दी जाएंगी. हालांकि, आपका डेटा आपके Google खाते में संग्रहित रहेगा और उसे <ph name="BEGIN_LINK" />Google डैशबोर्ड<ph name="END_LINK" /> से प्रबंधित किया जा सकता है.</translation>
 <translation id="4909359680501173791">आपको सफलतापूर्वक नामांकित कर लिया गया है</translation>
@@ -2542,6 +2553,7 @@
 <translation id="4955814292505481804">वार्षिक</translation>
 <translation id="4957949153200969297">सिर्फ़ उन्हीं सुविधाओं को चालू करें जो <ph name="IDS_SHORT_PRODUCT_NAME" /> सिंक से जुड़ी हैं</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">अपने कार्ड एक ही जगह पर रखें</translation>
 <translation id="496226124210045887">आपके द्वारा चुने गए फ़ोल्डर में संवेदनशील फ़ाइलें हैं. क्या आप वाकई इस फ़ोल्डर को "$1" स्थायी पढ़ने की एक्सेस देना चाहते हैं?</translation>
 <translation id="4964455510556214366">व्यवस्था</translation>
 <translation id="4964673849688379040">जाँच कर रहा है...</translation>
@@ -2589,6 +2601,7 @@
 <translation id="5027562294707732951">एक्‍सटेंशन जोड़ें</translation>
 <translation id="5029568752722684782">स्‍पष्‍ट कॉपी</translation>
 <translation id="5030338702439866405">जारीकर्ता</translation>
+<translation id="503155457707535043">ऐप्लिकेशन डाउनलोड हो रहे हैं</translation>
 <translation id="503498442187459473"><ph name="HOST" /> आपके कैमरा और माइक्रोफ़ोन का उपयोग करना चाहता है</translation>
 <translation id="5036662165765606524">किसी भी साइट को स्वचालित रूप से एकाधिक फ़ाइलें डाउनलोड न करने दें</translation>
 <translation id="5037676449506322593">सभी को चुनें</translation>
@@ -3103,6 +3116,7 @@
 <translation id="57838592816432529">म्यूट करें</translation>
 <translation id="5785583009707899920">Chrome की फ़ाइल सुविधाएं</translation>
 <translation id="5787146423283493983">मुख्य अनुबंध</translation>
+<translation id="5788127256798019331">Play की फ़ाइलें</translation>
 <translation id="5788367137662787332">क्षमा करें, डिवाइस <ph name="DEVICE_LABEL" /> पर कम-से-कम एक विभाजन माउंट नहीं हो सका.</translation>
 <translation id="5794414402486823030">हमेशा सिस्‍टम व्‍यूअर से खोलें</translation>
 <translation id="5794786537412027208">सभी Chrome Apps से बाहर निकलें</translation>
@@ -3131,7 +3145,7 @@
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - कैमरा या माइक्रोफ़ोन रिकॉर्डिंग</translation>
 <translation id="5835754902560991078">अत्यधिक कम समय (0.6 सेकंड)</translation>
 <translation id="5838456317242088717">वर्तमान गुप्त सत्र</translation>
-<translation id="5842053879378944309"><ph name="APP_NAME" /> के साथ USB 'सुरक्षा चाबी' का इस्तेमाल करें</translation>
+<translation id="5842053879378944309"><ph name="APP_NAME" /> के साथ USB सुरक्षा चाबी का इस्तेमाल करें</translation>
 <translation id="5842497610951477805">ब्लूटूथ सक्षम</translation>
 <translation id="5843250171025351504">आपका डिवाइस अब आपके एडमिन के बताए गए न्यूनतम क्लाइंट वर्शन का अनुपालन नहीं करता है. कृपया लॉगिन करने के लिए अपडेट करें.</translation>
 <translation id="5846929185714966548">टैब 4</translation>
@@ -3230,7 +3244,6 @@
 <translation id="5990386583461751448">अनुवाद किया गया</translation>
 <translation id="5991049340509704927">आवर्धित करें</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को यह ऐप्लिकेशन हटाने के लिए कहें.}one{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}other{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}}</translation>
-<translation id="5993332328670040093">अब आपके डेटा उपयोग का मापन नहीं किया जाएगा.</translation>
 <translation id="6002458620803359783">पसंदीदा आवाज़ें</translation>
 <translation id="6005695835120147974">मीडिया राउटर</translation>
 <translation id="6006484371116297560">क्लासिक</translation>
@@ -3356,6 +3369,7 @@
 <translation id="6178664161104547336">किसी प्रमाणपत्र को चुनें</translation>
 <translation id="6181431612547969857">डाउनलोड अवरोधित किया गया</translation>
 <translation id="6185132558746749656">डिवाइस स्थान</translation>
+<translation id="6185617499004995178">CUPS IPP वैलिडेटर</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">Network File Shares सेट अप करें या प्रबंधित करें.</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> से खोलें</translation>
@@ -3388,6 +3402,7 @@
 <translation id="6231881193380278751">पेज को अपने आप रीफ्रेश करने के लिए URL में एक क्‍वेरी पैरामीटर जोड़ें: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">बैटरी</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> से कनेक्शन टूट गया</translation>
+<translation id="6235700927623181151">यह टैब आपके डेस्कटॉप की सामग्री शेयर कर रहा है.</translation>
 <translation id="6237816943013845465">आपको अपना स्क्रीन रिज़ॉल्‍यूशन समायोजित करने देती है</translation>
 <translation id="6238923052227198598">सबसे नया नोट लॉक स्क्रीन पर रखें</translation>
 <translation id="6239558157302047471">&amp;फ़्रेम फिर लोड करें</translation>
@@ -3422,7 +3437,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> को आमतौर पर डाउनलोड नहीं किया जाता और यह खतरनाक हो सकता है.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{आपके नेटवर्क पर नया प्रिंटर}one{आपके नेटवर्क पर नए प्रिंटर}other{आपके नेटवर्क पर नए प्रिंटर}}</translation>
-<translation id="6286684120317096255">डेटा उपयोग का मापन हो रहा है</translation>
 <translation id="6286708577777130801">सहेजे गए पासवर्ड के विवरण</translation>
 <translation id="6287852322318138013">यह फ़ाइल खोलने के लिए कोई ऐप्लिकेशन चुनें</translation>
 <translation id="6289452883081499048">Play जैसी मनमुताबिक बनाई गई Google सेवाएं</translation>
@@ -3533,6 +3547,7 @@
 <translation id="6451180435462401570">क्लाउड प्रिंट डिवाइस प्रबंधित करें</translation>
 <translation id="6451689256222386810">यदि आप अपना पासफ़्रेज़ भूल गए हैं या यह सेटिंग बदलना चाहते हैं, तो <ph name="BEGIN_LINK" />समन्वयन रीसेट करें<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">अस्‍वीकार करें</translation>
+<translation id="6455264371803474013">कुछ खास साइटों पर</translation>
 <translation id="6455894534188563617">&amp;नया फ़ोल्डर</translation>
 <translation id="6456394469623773452">अच्छा</translation>
 <translation id="6456631036739229488">Smart Lock वाला फ़ोन बदल गया है. Smart Lock अपडेट करने के लिए अपना पासवर्ड डालें. अगली बार, आपका फ़ोन आपके <ph name="DEVICE_TYPE" /> को अनलॉक कर देगा. सेटिंग में जाकर Smart Lock बंद करें.</translation>
@@ -3610,6 +3625,7 @@
 <translation id="657402800789773160">&amp;यह पेज फिर से लोड करें</translation>
 <translation id="6577284282025554716">डाउनलोड रोका गया: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">सिंक किए गए पासवर्ड अपने Google उपयोगकर्ता नाम और पासवर्ड से एन्क्रिप्ट करें</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - डेस्कटॉप की सामग्री शेयर की गई</translation>
 <translation id="6580151766480067746">ARC वर्शन</translation>
 <translation id="6581162200855843583">Google डिस्क लिंक</translation>
 <translation id="6582421931165117398">अपनी व्‍यक्‍तिगत जानकारी की सुरक्षा करने के लिए, अभी अपना पासवर्ड बदलें. आपके पासवर्ड बदलने से पहले आपको प्रवेश करने के लिए कहा जाएगा.</translation>
@@ -3806,7 +3822,7 @@
 <translation id="6885771755599377173">सिस्टम जानकारी पूर्वावलोकन</translation>
 <translation id="6886871292305414135">नए &amp;टैब में लिंक खोलें</translation>
 <translation id="6892812721183419409">लिंक को <ph name="USER" /> के रूप में खोलें</translation>
-<translation id="6896398788631624004">अपनी 'सुरक्षा चाबी' प्लग इन करें और उसे चालू करें</translation>
+<translation id="6896398788631624004">अपनी सुरक्षा चाबी प्लग इन करें और उसे चालू करें</translation>
 <translation id="6896758677409633944">कॉपी बनाएं</translation>
 <translation id="6898440773573063262">किओस्क ऐप्लिकेशन अब इस डिवाइस पर स्वत: लॉन्च होने के लिए कॉन्फ़िगर किए जा सकते हैं.</translation>
 <translation id="6898699227549475383">संगठन (O)</translation>
@@ -3971,7 +3987,7 @@
 <translation id="713888829801648570">क्षमा करें, आपका पासवर्ड सत्‍यापित नहीं किया जा सका क्‍योंकि आप ऑफ़लाइन हैं.</translation>
 <translation id="7140928199327930795">कोई अन्य उपलब्ध डिवाइस नहीं हैं.</translation>
 <translation id="7141105143012495934">प्रवेश करना विफल रहा क्योंकि आपका खाता विवरण पुनः प्राप्त नहीं किया जा सका. कृपया अपने नियंत्रक से संपर्क करें या पुनः प्रयास करें.</translation>
-<translation id="7143092389027215216">'डेमो मोड' चालू किया जा रहा है</translation>
+<translation id="7143092389027215216">डेमो मोड चालू किया जा रहा है</translation>
 <translation id="7143207342074048698">कनेक्‍ट हो रहा है</translation>
 <translation id="7144878232160441200">पुन: प्रयास करें</translation>
 <translation id="7149893636342594995">पिछले 24 घंटे</translation>
@@ -4076,6 +4092,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{यह ऐप्लिकेशन Chrome को ठीक से काम करने से रोक सकता है.}one{ये ऐप्लिकेशन Chrome को ठीक से काम करने से रोक सकते हैं.}other{ये ऐप्लिकेशन Chrome को ठीक से काम करने से रोक सकते हैं.}}</translation>
 <translation id="7303900363563182677">इस साइट को क्लिपबोर्ड पर कॉपी किए गए लेख और इमेज देखने से ब्लॉक कर दिया गया है</translation>
 <translation id="730515362922783851">स्‍थानीय नेटवर्क या इंटरनेट पर किसी भी डिवाइस से डेटा का अादान-प्रदान करें</translation>
+<translation id="7307129035224081534">रोका हुआ है</translation>
 <translation id="7308002049209013926">नए ऐप्लिकेशन और गतिविधियों तक तेज़ी से पहुंचने के लिए लॉन्चर का इस्तेमाल करें. कीबोर्ड के ज़रिये यहां पहुंचने के लिए, Alt + Shift + L दबाएं.</translation>
 <translation id="7309257895202129721">&amp;नियंत्रण दिखाएं</translation>
 <translation id="7310598146671372464">लॉगिन नहीं कर पाए. सर्वर पर बताए गए केर्बेरोस सुरक्षा प्रकार काम नहीं करते हैं. कृपया अपने एडमिन से संपर्क करें.</translation>
@@ -4133,7 +4150,6 @@
 <translation id="7400839060291901923">अपने <ph name="PHONE_NAME" /> पर कनेक्शन सेट अप करें</translation>
 <translation id="740624631517654988">पॉप-अप अवरोधित</translation>
 <translation id="7407430846095439694">आयात करें और आबद्ध करें</translation>
-<translation id="7409233648990234464">रीलॉन्च करें और पावरवॉश करें</translation>
 <translation id="7409836189476010449">Flash चलाएं</translation>
 <translation id="7410344089573941623">यदि <ph name="HOST" /> आपके कैमरे और माइक्रोफ़ोन को एक्सेस करना चाहे, तो पूछें</translation>
 <translation id="741204030948306876">हां मैं सहमत हूं</translation>
@@ -4166,6 +4182,7 @@
 <translation id="7465778193084373987">Netscape प्रमाणपत्र रद्द करने संबंधी URL</translation>
 <translation id="7469894403370665791">इस नेटवर्क से अपने आप कनेक्ट करें</translation>
 <translation id="747114903913869239">गड़बड़ी: एक्सटेंशन डिकोड करने में असमर्थ</translation>
+<translation id="7473753388963818366">आइए आपके लिए आपके <ph name="DEVICE_TYPE" /> को तैयार करते हैं</translation>
 <translation id="7473891865547856676">जी रहने दें</translation>
 <translation id="747459581954555080">सभी को पुनर्स्थापित करें</translation>
 <translation id="7475671414023905704">Netscape खोए पासवर्ड का URL</translation>
@@ -4290,6 +4307,7 @@
 <translation id="7665369617277396874">खाता जोड़ें</translation>
 <translation id="7671130400130574146">सिस्टम शीर्षक बार और बॉर्डर का उपयोग करें</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, <ph name="PAGE_TITLE" /> में.</translation>
+<translation id="7676867886086876795">किसी भी लेख फ़ील्ड में बोलकर टाइप करने की सुविधा देने के लिए आपकी आवाज़ Google को भेजी जाती है.</translation>
 <translation id="7681095912841365527">साइट ब्लूटूथ का इस्तेमाल कर सकती है</translation>
 <translation id="7683373461016844951">जारी रखने के लिए, ठीक पर क्लिक करें, फिर व्‍यक्ति जोड़ें पर क्लिक करें, ताकि आप अपने <ph name="DOMAIN" /> ईमेल पते के लिए नई प्रोफ़ाइल बना सकें.</translation>
 <translation id="7684212569183643648">आपके नियंत्रक द्वारा इंस्‍टॉल किया गया</translation>
@@ -4331,6 +4349,7 @@
 <translation id="7740996059027112821">मानक</translation>
 <translation id="7748528009589593815">पिछला टैब</translation>
 <translation id="7748626145866214022">कार्रवाई बार पर और भी विकल्प उपलब्ध हैं. कार्रवाई बार पर फ़ोकस करने के लिए Alt + A दबाएं.</translation>
+<translation id="7750228210027921155">पिक्चर में पिक्चर</translation>
 <translation id="7751260505918304024">सभी दिखाएं</translation>
 <translation id="7754704193130578113">डाउनलोड करने से पहले प्रत्येक फ़ाइल को सहेजने का स्थान पूछें</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4439,6 +4458,7 @@
 <translation id="7857949311770343000">क्या यह वही नया टैब पेज है जिसकी आप अपेक्षा कर रहे थे?</translation>
 <translation id="786073089922909430">सेवा: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;डाउनलोड</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 कुकी}one{# कुकी}other{# कुकी}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - युग्मित किया गया</translation>
 <translation id="7870730066603611552">सेटअप के बाद सिंक विकल्पों की समीक्षा करें</translation>
 <translation id="7870790288828963061">अधिक नए वर्शन वाला कोई भी कियोस्‍क ऐप नहीं मिला. अपडेट करने के लिए कुछ नहीं है. कृपया USB स्‍टिक को निकालें.</translation>
@@ -4760,6 +4780,7 @@
 <translation id="8373553483208508744">टैब की आवाज़ बंद करें</translation>
 <translation id="8382913212082956454">ईमेल पते की कॉपी बनाएं</translation>
 <translation id="8386903983509584791">स्कैन पूरा हुआ</translation>
+<translation id="8389492867173948260">इस एक्सटेंशन को आपकी देखी जाने वाली इन वेबसाइटों पर मौजूद अपना सभी डेटा पढ़ने और बदलने दें:</translation>
 <translation id="8390449457866780408">सर्वर अनुपलब्‍ध है.</translation>
 <translation id="8391712576156218334">इमेज उपलब्ध नहीं है. बाद में फिर से कोशिश करें.</translation>
 <translation id="8392234662362215700">कीबोर्ड लेआउट बदलने के लिए Control-Shift-Space दबाएं.</translation>
@@ -4791,6 +4812,7 @@
 <translation id="84297032718407999">आपको <ph name="LOGOUT_TIME_LEFT" /> में साइन आउट कर दिया जाएगा</translation>
 <translation id="8431909052837336408">SIM पिन बदलें</translation>
 <translation id="8434480141477525001">NaCl डीबग पोर्ट</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> के ज़रिए अपनी पहचान की पुष्टि करें</translation>
 <translation id="843760761634048214">क्रेडिट कार्ड सहेजें</translation>
 <translation id="8438328416656800239">किसी स्मार्ट ब्राउज़र पर जाएं</translation>
 <translation id="8438566539970814960">खोजों और ब्राउज़िेंग को बेहतर बनाएं</translation>
@@ -4817,6 +4839,7 @@
 <translation id="8465252176946159372">मान्य नहीं है</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> को चलाने के लिए आपकी अनुमति चाहिए</translation>
 <translation id="8466234950814670489">Tar संग्रह</translation>
+<translation id="8466417995783206254">यह टैब वीडियो को 'पिक्चर में पिक्चर' मोड में चला रहा है.</translation>
 <translation id="8468750959626135884">अपने <ph name="DEVICE_TYPE" /> को अपने Android फ़ोन से अनलॉक करें.</translation>
 <translation id="8470028084415844044">अपने सभी डिवाइस पर अपने सभी पासवर्ड पाने के लिए, सिंक चालू करें.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> के लिए सेव किए गए पासवर्ड</translation>
@@ -4837,6 +4860,7 @@
 <translation id="8496717697661868878">यह प्लग इन चलाएं</translation>
 <translation id="8497219075884839166">Windows सुविधाएं</translation>
 <translation id="8498214519255567734">यह मंद रोशनी में आपकी स्क्रीन देखना या पढ़ना आसान बनाती है</translation>
+<translation id="8498395510292172881">Chrome में पढ़ना जारी रखें</translation>
 <translation id="8503813439785031346">उपयोगकर्ता नाम</translation>
 <translation id="850875081535031620">नुकसान पहुंचाने वाला कोई सॉफ़्टवेयर नहीं मिला</translation>
 <translation id="8509646642152301857">वर्तनी जाँच शब्दकोश डाउनलोड विफल रहा.</translation>
@@ -4987,7 +5011,6 @@
 <translation id="8725066075913043281">पुन: प्रयास करें</translation>
 <translation id="8725178340343806893">पसंदीदा/बुकमार्क बार</translation>
 <translation id="8726206820263995930">सर्वर से नीति सेटिंग फ़ेच करते समय गड़बड़ी: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">इसे दोबारा ना दिखाएं</translation>
 <translation id="8727344521467137076">आपके कंप्यूटर पर नुकसान पहुंचाने वाला सॉफ़्टवेयर है. Chrome उसे हटा रहा है और आपकी सेटिंग को बहाल करेगा ताकि आपका ब्राउज़र फिर से सामान्य रूप से काम करने लगे.</translation>
 <translation id="8730621377337864115">पूर्ण</translation>
 <translation id="8732030010853991079">इस आइकॉन पर क्लिक करके इस एक्सटेंशन का उपयोग करें.</translation>
@@ -5178,6 +5201,7 @@
 <translation id="9027459031423301635">नए &amp;टैब में लिंक खोलें</translation>
 <translation id="9030515284705930323">आपके संगठन ने आपके खाते के लिए Google Play स्टोर को सक्षम नहीं किया है. अधिक जानकारी के लिए अपने व्यवस्थापक से संपर्क करें.</translation>
 <translation id="9033857511263905942">&amp;चिपकाएं</translation>
+<translation id="9034924485347205037">Linux की फ़ाइलें</translation>
 <translation id="9035012421917565900">आइटम '<ph name="DESTINATION_NAME" />' में वापस नहीं ले जाए जा सकते हैं, इसलिए आप इस कार्रवाई को पहले जैसा नहीं कर सकेंगे.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">मूल दिखाएं</translation>
@@ -5278,6 +5302,7 @@
 <translation id="9173995187295789444">ब्लूटूथ डिवाइस के लिए स्कैन किया जा रहा है...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - ब्लूटूथ डिवाइस कनेक्ट है</translation>
 <translation id="9177499212658576372">वर्तमान में आप <ph name="NETWORK_TYPE" /> नेटवर्क से कनेक्ट हैं.</translation>
+<translation id="9179734824669616955">अपने <ph name="DEVICE_TYPE" /> पर Linux (बीटा) सेट अप करें</translation>
 <translation id="9180281769944411366">इस प्रोसेस में कुछ मिनट लग सकते हैं. Linux कंटेनर शुरू किया जा रहा है.</translation>
 <translation id="9180380851667544951">साइट आपकी स्क्रीन शेयर कर सकती है</translation>
 <translation id="9188441292293901223">इस <ph name="DEVICE_TYPE" /> को अनलाॅक करने के लिए कृपया अपने फ़ोन को Android के नए वर्शन में अपडेट करें.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 1f84ca31..e80a9be3 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Pitanje prije pristupa</translation>
 <translation id="1434696352799406980">Polazna stranica, web-stranica nove kartice, tražilica i prikvačene kartice vratit će se na zadano. Onemogućit će se sva proširenja i izbrisati privremeni podaci kao što su kolačići. Vaše oznake, povijest i spremljene zaporke neće se izbrisati.</translation>
 <translation id="1434886155212424586">Početna je stranica web-stranica nove kartice</translation>
+<translation id="1436671784520050284">Nastavi s postavljanjem</translation>
 <translation id="1436784010935106834">Uklonjeno</translation>
 <translation id="1438632560381091872">Uključi zvuk na karticama</translation>
 <translation id="1442392616396121389">Prefiks usmjeravanja</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Komad pizze</translation>
 <translation id="1467432559032391204">Ulijevo</translation>
 <translation id="1468571364034902819">Taj se profil ne može upotrijebiti</translation>
+<translation id="1470533772306424441">Instalirat ćemo te aplikacije za vas. Više aplikacija za svoj uređaj možete pronaći u Trgovini Play.</translation>
 <translation id="1470811252759861213">Da biste imali svoja proširenja na svim svojim računalima, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Datoteka "<ph name="FILENAME" />" nije prenesena. Nema dovoljno slobodnog prostora na Google disku.</translation>
 <translation id="1475502736924165259">U arhivi imate certifikate koji ne odgovaraju nijednoj od ostalih kategorija</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out (Smanji)</translation>
 <translation id="1830550083491357902">Nije prijavljen</translation>
 <translation id="1832511806131704864">Promjena telefona ažurirana je</translation>
-<translation id="1832685970989658809">Spremljene načine plaćanja onemogućio je vaš administrator</translation>
 <translation id="1834503245783133039">Preuzimanje nije uspjelo: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Brisanje pretraživanja</translation>
 <translation id="1838709767668011582">Google web-lokacija</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Šalje:</translation>
 <translation id="2193365732679659387">Postavke pouzdanosti</translation>
 <translation id="2195729137168608510">Zaštita e-pošte</translation>
+<translation id="2199298570273670671">Pogreška</translation>
 <translation id="2200356397587687044">Chromeu je potrebno dopuštenje da bi nastavio</translation>
 <translation id="220138918934036434">Sakrij gumb</translation>
 <translation id="2202898655984161076">Postojao je problem s navođenjem pisača. Neki od pisača možda se nisu uspješno prijavili na <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Pokaži zaporku</translation>
 <translation id="2436186046335138073">Želite li dopustiti da <ph name="HANDLER_HOSTNAME" /> otvori sve veze protokola <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Najmanje</translation>
-<translation id="2437139306601019091">Mjerenje korištenja podataka je završilo</translation>
 <translation id="2440604414813129000">Pogledaj i&amp;zvor</translation>
 <translation id="2445081178310039857">Obavezan je korijenski direktorij proširenja.</translation>
 <translation id="2445484935443597917">Izradi novi profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> želi potvrditi vaš identitet</translation>
 <translation id="2448312741937722512">Vrsta</translation>
 <translation id="2450223707519584812">Nećete moći dodati korisnike zato što nedostaju ključevi Google API-ja. Pojedinosti možete saznati na web-lokaciji <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Želite li isključiti sinkronizaciju i odjaviti se?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Datoteka već postoji</translation>
 <translation id="2453860139492968684">Završi</translation>
 <translation id="2454247629720664989">Ključna riječ</translation>
+<translation id="245661998428026871">Videozapis iz načina slike u slici prestat će se reproducirati.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> želi kopirati datoteke s jedinice <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID ključa tijela za izdavanje certifikata</translation>
 <translation id="2462752602710430187">Dodano: <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Uključi zvuk na karticama</translation>
 <translation id="3053013834507634016">Korištenje ključa certifikata</translation>
 <translation id="3057861065630527966">Izrada sigurnosnih kopija fotografija i videozapisa</translation>
+<translation id="3059313675706898490">Android poruke</translation>
 <translation id="3060379269883947824">Omogući Odabir za govor</translation>
 <translation id="3061707000357573562">Usluga zakrpe</translation>
 <translation id="3064410671692449875">Nema dovoljno podataka</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Zaboravili ste zaporku?</translation>
 <translation id="3132996321662585180">Osvježi svaki dan</translation>
 <translation id="3135204511829026971">Rotiranje zaslona</translation>
+<translation id="313638818480447860">S vašim je računom povezano više aplikacija (<ph name="NUMBER_OF_APPS" />) koje su optimizirane za ovaj uređaj.</translation>
 <translation id="313963229645891001">Preuzimanje, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Zadani žuti avatar</translation>
 <translation id="3140353188828248647">Fokusiraj adresnu traku</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Provjera pravopisa</translation>
 <translation id="3183139917765991655">Uvoz profila</translation>
 <translation id="3184560914950696195">Spremanje u direktorij $1 nije moguće. Uređene slike bit će spremljene u mapu Preuzimanja.</translation>
+<translation id="3188257591659621405">Moje datoteke</translation>
 <translation id="3188465121994729530">Klizni prosjek</translation>
 <translation id="3190558889382726167">Zaporka spremljena</translation>
 <translation id="3192947282887913208">Audio datoteke</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Komprimiranje datoteke <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informacije o aplikaciji</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – reprodukcija videozapisa u načinu slike u slici</translation>
 <translation id="3335337277364016868">Godina snimanja</translation>
 <translation id="3335947283844343239">Ponovo otvori zatvorenu karticu</translation>
 <translation id="3336664756920573711">Otključavajte uređaj <ph name="DEVICE_TYPE" /> Android telefonom.</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Ispis nije uspio. Provjerite svoj pisač i pokušajte ponovo.</translation>
 <translation id="3364721542077212959">Alati pisaljke</translation>
 <translation id="3365598184818502391">Upotrijebite Ctrl ili Alt</translation>
+<translation id="3367047597842238025">Postavite uređaj <ph name="DEVICE_TYPE" /> baš kako želite i otkrijte sve izvrsne mogućnosti nadohvat ruke.</translation>
 <translation id="3368922792935385530">Spojeno</translation>
 <translation id="3369624026883419694">Traženje domaćina...</translation>
 <translation id="337286756654493126">čitati mape otvorene u aplikaciji</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Desnom tipkom kliknite ikonu <ph name="SMALL_PRODUCT_LOGO" /> na programskoj traci</translation>
 <translation id="3391716558283801616">Kartica 7</translation>
 <translation id="3396331542604645348">Odabrani pisač nije dostupan ili nije ispravno instaliran. Provjerite pisač ili pokušajte odabrati neki drugi.</translation>
+<translation id="3396800784455899911">Klikom na gumb "Prihvati i nastavi" prihvaćate prethodno opisanu obradu za ove Googleove usluge.</translation>
 <translation id="3399432415385675819">Obavijesti će se onemogućiti</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Za tu web-lokaciju nema spremljenih zaporki</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Nije moguće otvoriti ovaj uređaj jer nije podržan njegov datotečni sustav.</translation>
 <translation id="3727148787322499904">Promjena te postavke utjecat će na sve dijeljene mreže</translation>
 <translation id="3727187387656390258">Provjeri skočni prozor</translation>
+<translation id="3729506734996624908">Dopuštene web-lokacije</translation>
 <translation id="3732078975418297900">Pogreška u <ph name="ERROR_LINE" />. retku</translation>
 <translation id="3733127536501031542">SSL poslužitelj s iskorakom</translation>
+<translation id="3735740477244556633">Poredaj po</translation>
 <translation id="3737274407993947948">Došlo je do pogreške prilikom instaliranja Linuxa...</translation>
 <translation id="3737536731758327622">Ovdje se prikazuju vaša preuzimanja</translation>
+<translation id="3738671331307774213">Potvrđivanjem identiteta bolje štitite svoje privatne podatke</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Želite li otvoriti aplikaciju <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> sada će se pojaviti na konzoli administratora</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Preuzmite alate za razvoj web-lokacija, Android aplikacija itd. Instaliranjem Linuxa preuzet će se <ph name="DOWNLOAD_SIZE" /> podataka.</translation>
 <translation id="385051799172605136">Natrag</translation>
 <translation id="3851428669031642514">Učitaj nesigurne skripte</translation>
+<translation id="3854599674806204102">Odaberite opciju</translation>
 <translation id="3855441664322950881">Zapakiraj proširenje</translation>
 <translation id="3855676282923585394">Uvoz oznaka i postavki...</translation>
 <translation id="3856800405688283469">Odaberite vremensku zonu</translation>
-<translation id="3856921555429624101">Mjerenje korištenja podataka je završilo</translation>
 <translation id="3857228364945137633">Isprobajte Smart Lock i otključavajte svoj <ph name="DEVICE_TYPE" /> bez zaporke kada je vaš telefon u blizini.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sinkronizacija je pauzirana</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Otvori sve u anonimnom prozoru</translation>
 <translation id="4508265954913339219">Aktivacija nije uspjela</translation>
 <translation id="4508765956121923607">Pogledaj i&amp;zvor</translation>
-<translation id="4509823033118379431">Slike trenutačno nisu dostupne. Spojite se ponovo da biste pregledali zbirke.</translation>
 <translation id="451407183922382411">Omogućuje <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Postavite novog nadziranog korisnika</translation>
 <translation id="4514610446763173167">Reproduciraj ili pauziraj videozapis</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Nastavite na drugom uređaju</translation>
 <translation id="4628314759732363424">Promijeni...</translation>
 <translation id="4628757576491864469">Uređaji</translation>
+<translation id="4628948037717959914">Fotografija</translation>
 <translation id="4630590996962964935">Neispravan znak: $1</translation>
 <translation id="4631887759990505102">Izvođač</translation>
 <translation id="4632483769545853758">Uključi zvuk kartice</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Sigurnosno kopiranje datoteka (ukupno <ph name="FILE_COUNT" />) je spremno</translation>
 <translation id="4907161631261076876">Ova se aplikacija ne preuzima često i može biti opasna.</translation>
 <translation id="4907306957610201395">Kategorija dopuštenja</translation>
-<translation id="4907824805858067479">Spremljene kartice onemogućio je vaš administrator</translation>
 <translation id="4908811072292128752">Otvorite novu karticu za istodobni pregled dvije stranice</translation>
 <translation id="4909038193460299775">Budući da ovim računom upravlja <ph name="DOMAIN" />, vaše oznake, povijest, zaporke i druge postavke izbrisat će se s ovog uređaja. No vaši podaci ostat će pohranjeni na vašem Google računu i možete upravljati njima na <ph name="BEGIN_LINK" />Google nadzornoj ploči<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Uspješno ste se prijavili</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Godišnji</translation>
 <translation id="4957949153200969297">Omogući samo značajke vezane uz <ph name="IDS_SHORT_PRODUCT_NAME" /> sinkronizaciju</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Spremite sve svoje kartice na jedno mjesto</translation>
 <translation id="496226124210045887">Mapa koju ste odabrali sadrži osjetljive datoteke. Jeste li sigurni da želite dodijeliti aplikaciji "$1" trajni pristup za čitanje za tu mapu?</translation>
 <translation id="4964455510556214366">Poredak</translation>
 <translation id="4964673849688379040">Provjera u tijeku...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Dodaj proširenje</translation>
 <translation id="5029568752722684782">Izbriši kopiju</translation>
 <translation id="5030338702439866405">Izdaje</translation>
+<translation id="503155457707535043">Preuzimanje aplikacija</translation>
 <translation id="503498442187459473"><ph name="HOST" /> želi upotrijebiti vašu kameru i mikrofon</translation>
 <translation id="5036662165765606524">Ne dozvoli nijednoj web-lokaciji automatsko preuzimanje više datoteka</translation>
 <translation id="5037676449506322593">Odaberi sve</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Isključi zvuk</translation>
 <translation id="5785583009707899920">Uslužni programi za datoteke u Chromeu</translation>
 <translation id="5787146423283493983">Sporazum ključa</translation>
+<translation id="5788127256798019331">Datoteke Playa</translation>
 <translation id="5788367137662787332">Žao nam je, nije bilo moguće postaviti najmanje jednu particiju na uređaju <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Uvijek otvori u pregledniku sustava</translation>
 <translation id="5794786537412027208">Zatvori sve Chromeove aplikacije</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Prevedeno</translation>
 <translation id="5991049340509704927">Uvećanje</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni tu aplikaciju.}one{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}few{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}other{Da biste mogli i dalje pregledavati web, zamolite administratora da ukloni te aplikacije.}}</translation>
-<translation id="5993332328670040093">Vaša upotreba podataka više se neće mjeriti.</translation>
 <translation id="6002458620803359783">Preferirani glasovi</translation>
 <translation id="6005695835120147974">Usmjerivač medija</translation>
 <translation id="6006484371116297560">Klasična</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Odabir certifikata</translation>
 <translation id="6181431612547969857">Preuzimanje je blokirano</translation>
 <translation id="6185132558746749656">Lokacija uređaja</translation>
+<translation id="6185617499004995178">CUPS IPP validator</translation>
 <translation id="6185696379715117369">Stranica prema gore</translation>
 <translation id="6189273858858366896">Postavite mrežno dijeljenje datoteka ili upravljajte njime.</translation>
 <translation id="6189412234224385711">Otvori proširenjem <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Dodajte parametar upita u URL da biste automatski osvježili stranicu: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterija</translation>
 <translation id="6232116551750539448">Prekinuta je veza s mrežom <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Ova kartica dijeli sadržaj vaše radne površine.</translation>
 <translation id="6237816943013845465">Omogućuje prilagodbu razlučivosti zaslona</translation>
 <translation id="6238923052227198598">Zadrži najnoviju bilješku na zaključanom zaslonu</translation>
 <translation id="6239558157302047471">Ponovo učitaj okvir</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Datoteka <ph name="FILE_NAME" /> obično se ne preuzima i mogla bi biti opasna.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Novi pisač na vašoj mreži}one{Novi pisači na vašoj mreži}few{Novi pisači na vašoj mreži}other{Novi pisači na vašoj mreži}}</translation>
-<translation id="6286684120317096255">U tijeku je mjerenje upotrebe podataka</translation>
 <translation id="6286708577777130801">Podaci o spremljenim zaporkama</translation>
 <translation id="6287852322318138013">Odaberite aplikaciju da biste otvorili tu datoteku</translation>
 <translation id="6289452883081499048">Prilagođene Googleove usluge kao što je Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Upravljanje uređajima Cloud Printa</translation>
 <translation id="6451689256222386810">Ako ste zaboravili šifru ili želite promijeniti tu postavku, <ph name="BEGIN_LINK" />poništite sinkronizaciju<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Odbaci</translation>
+<translation id="6455264371803474013">Na određenim web-lokacijama</translation>
 <translation id="6455894534188563617">&amp;Nova mapa</translation>
 <translation id="6456394469623773452">Solidan</translation>
 <translation id="6456631036739229488">Promijenjen je telefon Smart Locka. Unesite zaporku da biste ažurirali Smart Lock. Sljedeći će put telefon otključati vaš <ph name="DEVICE_TYPE" />. Smart Lock isključite u Postavkama.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Reload This Page (Ponovo učitaj ovu stranicu)</translation>
 <translation id="6577284282025554716">Preuzimanje otkazano: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifriraj sinkronizirane zaporke moijm korisničkim imenom i zaporkom za Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – dijeli se sadržaj radne površine</translation>
 <translation id="6580151766480067746">Verzija ARC-a</translation>
 <translation id="6581162200855843583">Veza na Google disk</translation>
 <translation id="6582421931165117398">Radi zaštite osobnih podataka odmah promijenite zaporku. Prije promjene zaporke morat ćete se prijaviti.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ova bi aplikacija mogla spriječiti Chrome da pravilno funkcionira.}one{Ova bi aplikacija (ili više njih) mogla spriječiti Chrome da pravilno funkcionira.}few{Ove bi aplikacije mogle spriječiti Chrome da pravilno funkcionira.}other{Ove bi aplikacije mogle spriječiti Chrome da pravilno funkcionira.}}</translation>
 <translation id="7303900363563182677">Toj je web-lokaciji blokiran uvid u tekst i slike kopirane u međuspremnik</translation>
 <translation id="730515362922783851">razmjenjivati podatke s bilo kojim uređajem na lokalnoj mreži ili internetu</translation>
+<translation id="7307129035224081534">Pauzirano</translation>
 <translation id="7308002049209013926">Pomoću Pokretača možete brzo pristupiti novim aplikacijama i aktivnostima. Da biste ga otvorili pomoću tipkovnice, pritisnite Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Prikaži &amp;upravljačke gumbe</translation>
 <translation id="7310598146671372464">Prijava nije uspjela. Poslužitelj ne podržava navedene vrste enkripcije Kerberos. Obratite se administratoru.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Postavite vezu na telefonu <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Skočni prozor blokiran</translation>
 <translation id="7407430846095439694">Uvezi i uveži</translation>
-<translation id="7409233648990234464">Pokreni ponovo i izvrši Powerwash</translation>
 <translation id="7409836189476010449">pokrenuti Flash</translation>
 <translation id="7410344089573941623">Pitaj ako <ph name="HOST" /> želi pristupiti kameri i mikrofonu</translation>
 <translation id="741204030948306876">Da, u redu</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">URL za opoziv Netscape certifikata</translation>
 <translation id="7469894403370665791">Automatski se povežite s tom mrežom</translation>
 <translation id="747114903913869239">Pogreška: Nije moguće dekodirati proširenje</translation>
+<translation id="7473753388963818366">Hajdemo pripremiti uređaj <ph name="DEVICE_TYPE" /> za vas</translation>
 <translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747459581954555080">Obnovi sve</translation>
 <translation id="7475671414023905704">URL Netscape izgubljene zaporke</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Dodaj račun</translation>
 <translation id="7671130400130574146">Koristi naslovnu traku sustava i obrube</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, na stranici <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Pošaljite audiopodatke o svojem glasu Googleu da biste omogućili diktiranje za bilo koje tekstno polje.</translation>
 <translation id="7681095912841365527">Web-lokacija može upotrebljavati Bluetooth</translation>
 <translation id="7683373461016844951">Za nastavak kliknite U redu, a zatim kliknite Dodaj osobu da biste izradili novi profil za svoju <ph name="DOMAIN" /> e-adresu.</translation>
 <translation id="7684212569183643648">Instalirao vaš administrator</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standardno</translation>
 <translation id="7748528009589593815">Prethodna kartica</translation>
 <translation id="7748626145866214022">Više opcija dostupno je na traci radnji. Pritisnite Alt + A da biste fokusirali traku radnji.</translation>
+<translation id="7750228210027921155">Slika u slici</translation>
 <translation id="7751260505918304024">Prikaži sve</translation>
 <translation id="7754704193130578113">Pitaj gdje spremiti svaku datoteku prije preuzimanja</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Je li to web-stranica nove kartice koju ste očekivali?</translation>
 <translation id="786073089922909430">Usluga: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Preuzimanje</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 kolačić}one{# kolačić}few{# kolačića}other{# kolačića}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – uparen</translation>
 <translation id="7870730066603611552">Pregledajte opcije sinkronizacije nakon postavljanja</translation>
 <translation id="7870790288828963061">Nisu pronađene aplikacije kioska s novijom verzijom. Nema ažuriranja. Uklonite USB privjesak.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Isključi zvuk na karticama</translation>
 <translation id="8382913212082956454">Kopiraj &amp;adresu e-pošte</translation>
 <translation id="8386903983509584791">Traženje je dovršeno</translation>
+<translation id="8389492867173948260">Dopustite ovom proširenju da čita i mijenja sve vaše podatke na web-lokacijama koje posjećujete:</translation>
 <translation id="8390449457866780408">Poslužitelj nije dostupan.</translation>
 <translation id="8391712576156218334">Slika nije dostupna. Pokušajte ponovo kasnije.</translation>
 <translation id="8392234662362215700">Pritisnite Control, Shift i razmaknicu za promjenu rasporeda tipkovnice.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Odjavit ćete se za <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Promjena PIN-a za SIM</translation>
 <translation id="8434480141477525001">Priključak za otklanjanje pogrešaka lokalnog klijenta</translation>
+<translation id="8435395510592618362">Potvrdite svoj identitet pomoću aplikacije <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Spremanje kreditne kartice</translation>
 <translation id="8438328416656800239">Prijeđite na pametan preglednik</translation>
 <translation id="8438566539970814960">Poboljšajte pretraživanje i pregledavanje</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Nije važeće</translation>
 <translation id="8465444703385715657">Dodatak <ph name="PLUGIN_NAME" /> treba vaše dopuštenje da bi se pokrenuo</translation>
 <translation id="8466234950814670489">Tar arhiva</translation>
+<translation id="8466417995783206254">Ova kartica prikazuje videozapis u načinu slike u slici.</translation>
 <translation id="8468750959626135884">Otključavajte uređaj <ph name="DEVICE_TYPE" /> Android telefonom.</translation>
 <translation id="8470028084415844044">Da biste imali sve svoje zaporke na svim svojim uređajima, uključite sinkronizaciju.</translation>
 <translation id="8470513973197838199">Spremljene zaporke za <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Pokreni ovaj dodatak</translation>
 <translation id="8497219075884839166">Uslužni programi za Windowse</translation>
 <translation id="8498214519255567734">Olakšaj gledanje zaslona ili čitanje pri slabom svjetlu</translation>
+<translation id="8498395510292172881">Nastavite čitati u Chromeu</translation>
 <translation id="8503813439785031346">Korisničko ime</translation>
 <translation id="850875081535031620">Nije pronađen štetan softver</translation>
 <translation id="8509646642152301857">Preuzimanje rječnika za provjeru pravopisa nije uspjelo.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Pokušajte ponovo</translation>
 <translation id="8725178340343806893">Favoriti/oznake</translation>
 <translation id="8726206820263995930">Pogreška pri dohvaćanju postavki pravila s poslužitelja: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ne prikazuj to ponovo</translation>
 <translation id="8727344521467137076">Na vašem računalu ima štetnog softvera. Chrome ga uklanja i vratit će vaše postavke kako bi vaš preglednik ponovno funkcionirao normalno.</translation>
 <translation id="8730621377337864115">Gotovo</translation>
 <translation id="8732030010853991079">Upotrijebite to proširenje klikom na ovu ikonu.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Otvori vezu u novoj &amp;kartici</translation>
 <translation id="9030515284705930323">Vaša organizacija nije omogućila Trgovinu Google Play za vaš račun. Više informacija zatražite od administratora.</translation>
 <translation id="9033857511263905942">&amp;Zalijepi</translation>
+<translation id="9034924485347205037">Linux datoteke</translation>
 <translation id="9035012421917565900">Te se stavke ne mogu vratiti na odredište "<ph name="DESTINATION_NAME" />", tako da nećete moći poništiti tu radnju.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Prikaži izvornik</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Traženje Bluetooth uređaja...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth uređaj povezan</translation>
 <translation id="9177499212658576372">Trenutačno ste povezani sa sljedećom vrstom mreže: <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Postavite Linux (Beta) na uređaju <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Taj postupak može potrajati nekoliko minuta. Pokreće se Linuxov spremnik.</translation>
 <translation id="9180380851667544951">Web-lokacija može dijeliti vaš zaslon</translation>
 <translation id="9188441292293901223">Ažurirajte svoj telefon na najnoviju verziju Androida kako biste otključali ovaj <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index b5f8576d..70ad4ae 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Kérdezzen rá hozzáférés előtt</translation>
 <translation id="1434696352799406980">Ez a művelet visszaállítja a kezdőoldalt, az új lap oldalt, a keresőmotort és a rögzített lapokat. Kikapcsol továbbá minden bővítményt, és törli az ideiglenes adatokat, például a cookie-kat. Könyvjelzői, előzményei és mentett jelszavai megmaradnak.</translation>
 <translation id="1434886155212424586">Az Új lap oldal a kezdőoldal</translation>
+<translation id="1436671784520050284">Beállítás folytatása</translation>
 <translation id="1436784010935106834">Eltávolítva</translation>
 <translation id="1438632560381091872">Lapok némításának feloldása</translation>
 <translation id="1442392616396121389">Útvonal előtagja</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzaszelet</translation>
 <translation id="1467432559032391204">Balra</translation>
 <translation id="1468571364034902819">Ez a profil nem használható</translation>
+<translation id="1470533772306424441">Telepítjük Önnek az érintett alkalmazásokat. További alkalmazásokat találhat eszközéhez a Play Áruházban.</translation>
 <translation id="1470811252759861213">Ha az összes számítógépén szeretné elérni bővítményeit: <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">A(z) „<ph name="FILENAME" />” feltöltése nem történt meg. Nincs elegendő szabad terület a Google Drive-on.</translation>
 <translation id="1475502736924165259">Vannak olyan tanúsítványok, amelyek nem illenek a többi kategória egyikébe se</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Kics&amp;inyítés</translation>
 <translation id="1830550083491357902">Nem jelentkezett be</translation>
 <translation id="1832511806131704864">Telefonmódosítás frissítve</translation>
-<translation id="1832685970989658809">A mentett fizetési módokat letiltotta a rendszergazda</translation>
 <translation id="1834503245783133039">Sikertelen letöltés: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Keresett kifejezés törlése</translation>
 <translation id="1838709767668011582">Google-webhely</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Innen:</translation>
 <translation id="2193365732679659387">Bizalmi beállítások</translation>
 <translation id="2195729137168608510">E-mail védelem</translation>
+<translation id="2199298570273670671">Hiba</translation>
 <translation id="2200356397587687044">A Chrome-nak szüksége van egy engedélyre a folytatáshoz</translation>
 <translation id="220138918934036434">Gomb elrejtése</translation>
 <translation id="2202898655984161076">Hiba történt a nyomtatók felsorolása közben. Lehet, hogy néhány nyomtató nem regisztrálható itt: <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Jelszó megjelenítése</translation>
 <translation id="2436186046335138073">Engedélyezi az összes <ph name="PROTOCOL" /> link megnyitását a(z) <ph name="HANDLER_HOSTNAME" /> számára?</translation>
 <translation id="2436707352762155834">Minimális</translation>
-<translation id="2437139306601019091">Az adathasználat mérése befejeződött</translation>
 <translation id="2440604414813129000">F&amp;orrás megtekintése</translation>
 <translation id="2445081178310039857">A bővítmény gyökérkönyvtárát kötelező megadni.</translation>
 <translation id="2445484935443597917">Új profil létrehozása</translation>
+<translation id="2446585455334014596">A(z) <ph name="APP_NAME" /> ellenőrizni szeretné az Ön személyazonosságát</translation>
 <translation id="2448312741937722512">Típus</translation>
 <translation id="2450223707519584812">Nem tud majd hozzáadni felhasználókat, mert hiányoznak a Google API-kulcsok. Részletekért lásd: <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Kikapcsolja a szinkronizálást, és kijelentkezik?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">A fájl már létezik</translation>
 <translation id="2453860139492968684">Befejezés</translation>
 <translation id="2454247629720664989">Kulcsszó</translation>
+<translation id="245661998428026871">Befejeződik a videó lejátszása kép a képben módban.</translation>
 <translation id="2457246892030921239">A(z) <ph name="APP_NAME" /> fájlokat szeretne másolni a következőről: <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Tanúsítványkibocsátó kulcsazonosítója</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> hozzáadva</translation>
@@ -1363,6 +1366,7 @@
 <translation id="304826556400666995">Lapok némításának feloldása</translation>
 <translation id="3053013834507634016">Tanúsítványkulcs felhasználása</translation>
 <translation id="3057861065630527966">Biztonsági másolat készítése a fotókról és videókról</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Felolvasás engedélyezése</translation>
 <translation id="3061707000357573562">Javítókészlet szolgáltatás</translation>
 <translation id="3064410671692449875">Nincs elegendő adat</translation>
@@ -1411,6 +1415,7 @@
 <translation id="313205617302240621">Elfelejtette a jelszavát?</translation>
 <translation id="3132996321662585180">Frissítés naponta</translation>
 <translation id="3135204511829026971">Képernyő elforgatása</translation>
+<translation id="313638818480447860"><ph name="NUMBER_OF_APPS" /> olyan alkalmazás csatlakozik a fiókhoz, amely optimalizálva van erre az eszközre.</translation>
 <translation id="313963229645891001">Letöltés folyamatban, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Alapértelmezett sárga avatar</translation>
 <translation id="3140353188828248647">Fókuszálás a címsávra</translation>
@@ -1441,6 +1446,7 @@
 <translation id="3182749001423093222">Helyesírás-ellenőrzés</translation>
 <translation id="3183139917765991655">Profilimportáló</translation>
 <translation id="3184560914950696195">Nem lehet menteni a következő helyre: $1. A módosított képek a Letöltések mappába lesznek mentve.</translation>
+<translation id="3188257591659621405">Saját fájlok</translation>
 <translation id="3188465121994729530">Mozgás átlaga</translation>
 <translation id="3190558889382726167">A jelszó mentése megtörtént</translation>
 <translation id="3192947282887913208">Audiofájlok</translation>
@@ -1528,6 +1534,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> tömörítése...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Alkalmazásadatok</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – A videó lejátszása kép a képben módban történik</translation>
 <translation id="3335337277364016868">Felvétel éve</translation>
 <translation id="3335947283844343239">Bezárt lap megnyitása</translation>
 <translation id="3336664756920573711"><ph name="DEVICE_TYPE" /> feloldása androidos telefonjával.</translation>
@@ -1547,6 +1554,7 @@
 <translation id="3360297538363969800">A nyomtatás sikertelen. Ellenőrizze a nyomtatót, majd próbálja újra.</translation>
 <translation id="3364721542077212959">Érintőceruza eszközök</translation>
 <translation id="3365598184818502391">Vagy a Ctrl vagy az Alt billentyűt használja</translation>
+<translation id="3367047597842238025">Állítsa be kedve szerint <ph name="DEVICE_TYPE" /> eszközét, és fedezze fel a karnyújtásra lévő lenyűgöző képességeit.</translation>
 <translation id="3368922792935385530">Kapcsolódva</translation>
 <translation id="3369624026883419694">Szerver azonosítása folyamatban...</translation>
 <translation id="337286756654493126">Az alkalmazásban megnyitott mappák olvasása</translation>
@@ -1560,6 +1568,7 @@
 <translation id="3389312115541230716">Kattintson a jobb gombbal a(z) <ph name="SMALL_PRODUCT_LOGO" /> ikonjára a tálcán</translation>
 <translation id="3391716558283801616">7. lap</translation>
 <translation id="3396331542604645348">A kiválasztott nyomtató nem érhető el, vagy nincs megfelelően telepítve. Ellenőrizze a nyomtatót, vagy válasszon egy másikat.</translation>
+<translation id="3396800784455899911">Az „Elfogadás és folytatás” gombra kattintva elfogadja az ezen Google-szolgáltatásokkal kapcsolatos, fent részletezett feldolgozási folyamatot.</translation>
 <translation id="3399432415385675819">Az értesítések le lesznek tiltva</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Ehhez a webhelyhez nincsenek mentve jelszavak</translation>
@@ -1788,10 +1797,13 @@
 <translation id="3726463242007121105">Ezt az eszközt nem lehet megnyitni, mert a fájlrendszere nem támogatott.</translation>
 <translation id="3727148787322499904">A beállítás módosítása az összes megosztott hálózatot érinti</translation>
 <translation id="3727187387656390258">Előugró ablak vizsgálata</translation>
+<translation id="3729506734996624908">Engedélyezett webhelyek</translation>
 <translation id="3732078975418297900">Hiba a következő sorban: <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-szerver Step-up használatával</translation>
+<translation id="3735740477244556633">Rendezés</translation>
 <translation id="3737274407993947948">Hiba történt a Linux telepítése során…</translation>
 <translation id="3737536731758327622">Itt jelennek meg a letöltései</translation>
+<translation id="3738671331307774213">Személyazonosságának igazolásával segít privát adatainak megvédésében</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Megnyitja: <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">A(z) <ph name="DEVICE_NAME" /> mostantól megjelenik a Kezelői konzolban</translation>
@@ -1876,10 +1888,10 @@
 <translation id="3846116211488856547">Eszközök webhelyek és Android-alkalmazások fejlesztéséhez és egyebekhez. A Linux telepítése <ph name="DOWNLOAD_SIZE" /> adat letöltésével jár.</translation>
 <translation id="385051799172605136">Vissza</translation>
 <translation id="3851428669031642514">Nem biztonságos szkriptek betöltése</translation>
+<translation id="3854599674806204102">Válasszon a lehetőségek közül</translation>
 <translation id="3855441664322950881">Bővítmény becsomagolása</translation>
 <translation id="3855676282923585394">Könyvjelzők és beállítások importálása...</translation>
 <translation id="3856800405688283469">Időzóna kiválasztása</translation>
-<translation id="3856921555429624101">Az adathasználat mérése befejeződött</translation>
 <translation id="3857228364945137633">Próbálja ki, hogyan oldhatja fel <ph name="DEVICE_TYPE" /> eszközét jelszó használata nélkül a Smart Lock funkció használatával, ha a telefonja a közelében van.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: a szinkronizálás szünetel</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Összes megnyitása inkognitóablakban</translation>
 <translation id="4508265954913339219">Aktiválás sikertelen</translation>
 <translation id="4508765956121923607">F&amp;orrás megtekintése</translation>
-<translation id="4509823033118379431">A képek jelenleg nem állnak rendelkezésre. Kapcsolódjon újra, ha szeretné megtekinteni a gyűjteményeket.</translation>
 <translation id="451407183922382411">A(z) <ph name="COMPANY_NAME" /> segítségével</translation>
 <translation id="4514542542275172126">Új felügyelt felhasználó beállítása</translation>
 <translation id="4514610446763173167">Váltás a videó lejátszása és szüneteltetése között</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Folytatás másik eszközről</translation>
 <translation id="4628314759732363424">Módosítás…</translation>
 <translation id="4628757576491864469">Eszközök</translation>
+<translation id="4628948037717959914">Fénykép</translation>
 <translation id="4630590996962964935">Érvénytelen karakter: $1</translation>
 <translation id="4631887759990505102">Előadó</translation>
 <translation id="4632483769545853758">Lap némításának feloldása</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">A rendszer készen áll <ph name="FILE_COUNT" /> biztonsági mentésére</translation>
 <translation id="4907161631261076876">Ezt a fájlt nem töltik le gyakran, és veszélyes lehet.</translation>
 <translation id="4907306957610201395">Engedélykategória</translation>
-<translation id="4907824805858067479">A kártyák mentését letiltotta a rendszergazda</translation>
 <translation id="4908811072292128752">Új lap megnyitása két webhely egyidejű böngészéséhez</translation>
 <translation id="4909038193460299775">Mivel ezt a fiókot a(z) <ph name="DOMAIN" /> domain kezeli, könyvjelzői, előzményei, jelszavai és más beállításai törlődnek erről az eszközről. Meglévő adatait azonban továbbra is tárolni fogja Google-fiókja, és azokat a <ph name="BEGIN_LINK" />Google Irányítópulton<ph name="END_LINK" /> kezelheti.</translation>
 <translation id="4909359680501173791">Sikeresen regisztrált</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Éves</translation>
 <translation id="4957949153200969297">Kizárólag a következő szolgáltatással kapcsolatos funkciókat engedélyezze: <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Az összes kártyája egy helyen</translation>
 <translation id="496226124210045887">A kiválasztott mappa érzékeny fájlokat tartalmaz. Biztosan állandó olvasási hozzáférést szeretne adni a következőnek a mappához: „$1”?</translation>
 <translation id="4964455510556214366">Elrendezés</translation>
 <translation id="4964673849688379040">Ellenőrzés…</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Bővítmény hozzáadása</translation>
 <translation id="5029568752722684782">Példány törlése</translation>
 <translation id="5030338702439866405">Kiállította:</translation>
+<translation id="503155457707535043">Alkalmazások letöltése folyamatban</translation>
 <translation id="503498442187459473">A(z) <ph name="HOST" /> webhely használni szeretné a kamerát és a mikrofont</translation>
 <translation id="5036662165765606524">Ne engedélyezze a webhelyeknek több fájl automatikus letöltését</translation>
 <translation id="5037676449506322593">Összes kiválasztása</translation>
@@ -3106,6 +3119,7 @@
 <translation id="57838592816432529">Némítás</translation>
 <translation id="5785583009707899920">Chrome-fájlokkal kapcsolatos segédprogramok</translation>
 <translation id="5787146423283493983">Kulcsmegegyezés</translation>
+<translation id="5788127256798019331">Play-fájlok</translation>
 <translation id="5788367137662787332">Elnézést kérünk, de a(z) <ph name="DEVICE_LABEL" /> eszköz legalább egy partíciója nem csatolható.</translation>
 <translation id="5794414402486823030">Megnyitás mindig a rendszer megtekintőjével</translation>
 <translation id="5794786537412027208">Összes Chrome-alkalmazás bezárása</translation>
@@ -3233,7 +3247,6 @@
 <translation id="5990386583461751448">Fordítás</translation>
 <translation id="5991049340509704927">Nagyítás</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Annak érdekében, hogy biztosan tudjon böngészni az interneten, kérje meg rendszergazdáját az alkalmazás eltávolítására.}other{Annak érdekében, hogy biztosan tudjon böngészni az interneten, kérje meg rendszergazdáját az alkalmazások eltávolítására.}}</translation>
-<translation id="5993332328670040093">Az adathasználatot a továbbiakban nem méri a böngésző.</translation>
 <translation id="6002458620803359783">Előnyben részesített hangok</translation>
 <translation id="6005695835120147974">Adathordozó router</translation>
 <translation id="6006484371116297560">Klasszikus</translation>
@@ -3359,6 +3372,7 @@
 <translation id="6178664161104547336">Tanúsítvány kiválasztása</translation>
 <translation id="6181431612547969857">Letöltés letiltva</translation>
 <translation id="6185132558746749656">Eszközhely</translation>
+<translation id="6185617499004995178">CUPS IPP-érvényesítő</translation>
 <translation id="6185696379715117369">Lapozás felfelé</translation>
 <translation id="6189273858858366896">Hálózati fájlmegosztások beállítása, illetve kezelése.</translation>
 <translation id="6189412234224385711">Megnyitás a következővel: <ph name="EXTENSION_NAME" /></translation>
@@ -3391,6 +3405,7 @@
 <translation id="6231881193380278751">Adjon meg egy lekérdezési paramétert az URL-ben az oldal automatikus frissítéséhez: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Akkumulátor</translation>
 <translation id="6232116551750539448">Megszűnt a kapcsolat a következővel: <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Ez a lap megosztja az asztal tartalmát.</translation>
 <translation id="6237816943013845465">Lehetővé teszi a képernyő felbontásának módosítását</translation>
 <translation id="6238923052227198598">Legutóbbi jegyzet megtartása a lezárási képernyőn</translation>
 <translation id="6239558157302047471">&amp;Keret újratöltése</translation>
@@ -3425,7 +3440,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">A(z) <ph name="FILE_NAME" /> fájlt nem gyakran töltik le, és veszélyes lehet.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Új nyomtató a hálózaton}other{Új nyomtatók a hálózaton}}</translation>
-<translation id="6286684120317096255">Az adathasználat mérése folyamatban van</translation>
 <translation id="6286708577777130801">Mentett jelszavak adatai</translation>
 <translation id="6287852322318138013">Válasszon egy alkalmazást a fájl megnyitásához</translation>
 <translation id="6289452883081499048">Személyre szabott Google-szolgáltatások, például a Play</translation>
@@ -3536,6 +3550,7 @@
 <translation id="6451180435462401570">Cloud Print-eszközök kezelése</translation>
 <translation id="6451689256222386810">Ha elfelejtette összetett jelszavát, vagy módosítani szeretné ezt a beállítást, <ph name="BEGIN_LINK" />állítsa alaphelyzetbe a szinkronizálást<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Elutasítás</translation>
+<translation id="6455264371803474013">Megadott webhelyeken</translation>
 <translation id="6455894534188563617">Új &amp;mappa</translation>
 <translation id="6456394469623773452">Jó</translation>
 <translation id="6456631036739229488">A Smart Lock funkcióval használt telefon megváltozott. Adja meg jelszavát a Smart Lock frissítéséhez. Legközelebb a telefonnal oldhatja fel <ph name="DEVICE_TYPE" /> eszköze lezárását. A Smart Lock funkciót a Beállításokban kapcsolhatja ki.</translation>
@@ -3613,6 +3628,7 @@
 <translation id="657402800789773160">Az oldal új&amp;ratöltése</translation>
 <translation id="6577284282025554716">Letöltés megszakítva: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Szinkronizált jelszavak titkosítása Google-felhasználónevével és -jelszavával</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Megosztott asztali tartalom</translation>
 <translation id="6580151766480067746">ARC-verzió</translation>
 <translation id="6581162200855843583">Google Drive link</translation>
 <translation id="6582421931165117398">Személyes adatainak védelme érdekében módosítsa jelszavát most. A jelszó módosításához a rendszer a bejelentkezését kéri.</translation>
@@ -4079,6 +4095,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ez az alkalmazás megakadályozhatja a Chrome megfelelő működését.}other{Ezek az alkalmazások megakadályozhatják a Chrome megfelelő működését.}}</translation>
 <translation id="7303900363563182677">Ennél a webhelynél le van tiltva a vágólapra másolt szövegek és képek megtekintése</translation>
 <translation id="730515362922783851">Adatok cseréje bármilyen eszközzel a helyi hálózaton vagy az interneten</translation>
+<translation id="7307129035224081534">Szüneteltetve</translation>
 <translation id="7308002049209013926">Az Indító használatával gyorsabban juthat el az új alkalmazásokhoz és tevékenységekhez. Ha a billentyűzet segítségével szeretne ide eljutni, használja az Alt+Shift+l billentyűparancsot.</translation>
 <translation id="7309257895202129721">&amp;Vezérlők megjelenítése</translation>
 <translation id="7310598146671372464">Nem sikerült a bejelentkezés. A szerver nem támogatja a megadott Kerberos-titkosítástípusokat. Forduljon a rendszergazdához.</translation>
@@ -4136,7 +4153,6 @@
 <translation id="7400839060291901923">Kapcsolat beállítása a(z) <ph name="PHONE_NAME" /> eszközön</translation>
 <translation id="740624631517654988">Előugró ablak letiltva</translation>
 <translation id="7407430846095439694">Importálás és összekapcsolás</translation>
-<translation id="7409233648990234464">Újraindítás és Powerwash</translation>
 <translation id="7409836189476010449">Flash futtatása</translation>
 <translation id="7410344089573941623">Kérdezzen rá, ha a(z) <ph name="HOST" /> hozzá szeretne férni a kamerához és a mikrofonhoz</translation>
 <translation id="741204030948306876">Igen, folytatom</translation>
@@ -4169,6 +4185,7 @@
 <translation id="7465778193084373987">Netscape tanúsítvány - visszavonási URL</translation>
 <translation id="7469894403370665791">Automatikus kapcsolódás ehhez a hálózathoz</translation>
 <translation id="747114903913869239">Hiba: nem lehet dekódolni a bővítményt</translation>
+<translation id="7473753388963818366">A(z) <ph name="DEVICE_TYPE" /> felkészítése a használatra</translation>
 <translation id="7473891865547856676">Nem, köszönöm</translation>
 <translation id="747459581954555080">Összes visszaállítása</translation>
 <translation id="7475671414023905704">Netscape - elveszett jelszó URL</translation>
@@ -4293,6 +4310,7 @@
 <translation id="7665369617277396874">Fiók hozzáadása</translation>
 <translation id="7671130400130574146">Az ablak fejlécének és keretének megjelenítése</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, itt: <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">A hangjának elküldése a Google számára, hogy bármely szövegmezőbe diktálhasson.</translation>
 <translation id="7681095912841365527">A webhely használhat Bluetooth-t</translation>
 <translation id="7683373461016844951">A folytatáshoz kattintson az OK gombra, majd a Személy hozzáadása lehetőségre. Ekkor létrehozhatja az e-mail-címéhez (<ph name="DOMAIN" />) tartozó új profilt.</translation>
 <translation id="7684212569183643648">A rendszergazda telepítette</translation>
@@ -4334,6 +4352,7 @@
 <translation id="7740996059027112821">Szokásos</translation>
 <translation id="7748528009589593815">Előző lap</translation>
 <translation id="7748626145866214022">További lehetőségek érhetők el a műveletsávon, amelyre az Alt+A billentyűkóddal helyezheti át a fókuszt.</translation>
+<translation id="7750228210027921155">Kép a képben</translation>
 <translation id="7751260505918304024">Összes megjelenítése</translation>
 <translation id="7754704193130578113">A letöltés előtt kérdezze meg, hová mentse az adott fájlokat</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4442,6 +4461,7 @@
 <translation id="7857949311770343000">Erre az új lap oldalra számított?</translation>
 <translation id="786073089922909430">Szolgáltatás: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Letöltések</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – párosítva</translation>
 <translation id="7870730066603611552">Szinkronizálási beállítások ellenőrzése a beállítást követően</translation>
 <translation id="7870790288828963061">Nem található újabb verziójú kioszkalkalmazás, ezért nincs mit frissíteni. Kérjük, távolítsa el az USB-meghajtót.</translation>
@@ -4763,6 +4783,7 @@
 <translation id="8373553483208508744">Lapok némítása</translation>
 <translation id="8382913212082956454">&amp;E-mail cím másolása</translation>
 <translation id="8386903983509584791">Keresés befejezve</translation>
+<translation id="8389492867173948260">Engedélyezi az alkalmazás számára az Ön által felkeresett webhelyeken lévő valamennyi adatának olvasását és módosítását:</translation>
 <translation id="8390449457866780408">A szerver nem érhető el.</translation>
 <translation id="8391712576156218334">A kép nem hozzáférhető. Próbálja újra később.</translation>
 <translation id="8392234662362215700">A Control + Shift + szóköz billentyűk megnyomásával válthat a billentyűzetkiosztások között.</translation>
@@ -4794,6 +4815,7 @@
 <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> múlva kijelentkezteti a rendszer</translation>
 <translation id="8431909052837336408">SIM-kártya PIN-kódjának módosítása</translation>
 <translation id="8434480141477525001">NaCl hibakeresési port</translation>
+<translation id="8435395510592618362">Igazolja személyazonosságát a(z) <ph name="APP_NAME" /> alkalmazással</translation>
 <translation id="843760761634048214">Hitelkártya mentése</translation>
 <translation id="8438328416656800239">Váltás intelligens böngészőre</translation>
 <translation id="8438566539970814960">Keresések és böngészés javítása</translation>
@@ -4820,6 +4842,7 @@
 <translation id="8465252176946159372">Érvénytelen</translation>
 <translation id="8465444703385715657">A(z) <ph name="PLUGIN_NAME" /> futtatásához az Ön engedélyére van szükség</translation>
 <translation id="8466234950814670489">Tar-archívum</translation>
+<translation id="8466417995783206254">A videó lejátszása a lapon kép a képben módban történik.</translation>
 <translation id="8468750959626135884">Oldja fel <ph name="DEVICE_TYPE" /> eszközét androidos telefonjával.</translation>
 <translation id="8470028084415844044">Ha az összes eszközén szeretné elérni jelszavait, kapcsolja be a szinkronizálást.</translation>
 <translation id="8470513973197838199">A(z) <ph name="ORIGIN" /> mentett jelszavai</translation>
@@ -4840,6 +4863,7 @@
 <translation id="8496717697661868878">A plug-in futtatása</translation>
 <translation id="8497219075884839166">Windows-segédprogramok</translation>
 <translation id="8498214519255567734">Kellemesebbé teszi a képernyő nézését és az olvasást gyenge fény mellett</translation>
+<translation id="8498395510292172881">Olvasás folytatása a Chrome-ban</translation>
 <translation id="8503813439785031346">Felhasználónév</translation>
 <translation id="850875081535031620">Nem találtunk kártékony szoftvereket</translation>
 <translation id="8509646642152301857">A helyesírás-ellenőrző szótár letöltése sikertelen volt.</translation>
@@ -4990,7 +5014,6 @@
 <translation id="8725066075913043281">Újrapróbálás</translation>
 <translation id="8725178340343806893">Kedvencek/könyvjelzők</translation>
 <translation id="8726206820263995930">Hiba a kiszolgálóról származó irányelv-beállítások fogadásakor: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ez ne jelenjen meg többé</translation>
 <translation id="8727344521467137076">Kártékony szoftver található a számítógépen. A Chrome eltávolítja azt, és visszaállítja a beállításokat, hogy a böngésző ismét megfelelően működjön.</translation>
 <translation id="8730621377337864115">Kész</translation>
 <translation id="8732030010853991079">A bővítményt az ikonra kattintva használhatja.</translation>
@@ -5181,6 +5204,7 @@
 <translation id="9027459031423301635">Link megnyitása új &amp;lapon</translation>
 <translation id="9030515284705930323">Szervezete még nem engedélyezte a Google Play Áruház szolgáltatást a fiókjánál. További tájékoztatásért forduljon rendszergazdájához.</translation>
 <translation id="9033857511263905942">&amp;Beillesztés</translation>
+<translation id="9034924485347205037">Linux-fájlok</translation>
 <translation id="9035012421917565900">Az elemek nem helyezhetők vissza ide: „<ph name="DESTINATION_NAME" />”. Nem tudja visszavonni a műveletet.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Eredeti megjelenítése</translation>
@@ -5281,6 +5305,7 @@
 <translation id="9173995187295789444">Bluetooth-eszközök keresése…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth-eszköz csatlakoztatva</translation>
 <translation id="9177499212658576372">Jelenleg <ph name="NETWORK_TYPE" /> hálózathoz kapcsolódik.</translation>
+<translation id="9179734824669616955">A Linux (béta) beállítása a(z) <ph name="DEVICE_TYPE" /> eszközön</translation>
 <translation id="9180281769944411366">Ez a folyamat néhány percet is igénybe vehet. A Linux-tároló indítása folyamatban van.</translation>
 <translation id="9180380851667544951">A webhely megoszthatja a képernyőjét</translation>
 <translation id="9188441292293901223">Kérjük, frissítse telefonja operációs rendszerét az Android egy újabb verziójára, hogy feloldhassa <ph name="DEVICE_TYPE" /> eszközét.</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 4a7df85d..af48259 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Tanyakan sebelum mengakses</translation>
 <translation id="1434696352799406980">Fitur ini akan menyetel ulang halaman mulai, halaman tab baru, mesin telusur, dan tab terpasang. Fitur ini juga akan menonaktifkan semua ekstensi dan menghapus data sementara seperti cookie. Bookmark, histori, dan sandi yang tersimpan tidak akan dihapus.</translation>
 <translation id="1434886155212424586">Beranda adalah halaman Tab Baru</translation>
+<translation id="1436671784520050284">Lanjutkan penyiapan</translation>
 <translation id="1436784010935106834">Dihapus</translation>
 <translation id="1438632560381091872">Nonaktifkan tab</translation>
 <translation id="1442392616396121389">Prefiks perutean</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Irisan pizza</translation>
 <translation id="1467432559032391204">Kiri</translation>
 <translation id="1468571364034902819">Tidak dapat menggunakan profil ini</translation>
+<translation id="1470533772306424441">Kami akan menginstal aplikasi tersebut untuk Anda. Anda dapat menemukan aplikasi lainnya untuk perangkat di Play Store.</translation>
 <translation id="1470811252759861213">Untuk mendapatkan ekstensi di semua komputer, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" tidak diupload. Ruang di Google Drive Anda tidak cukup.</translation>
 <translation id="1475502736924165259">Anda memiliki sertifikat pada file yang tidak sesuai dengan kategori lain mana pun</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Per&amp;kecil</translation>
 <translation id="1830550083491357902">Belum masuk</translation>
 <translation id="1832511806131704864">Perubahan ponsel diperbarui</translation>
-<translation id="1832685970989658809">Metode pembayaran yang disimpan dinonaktifkan oleh administrator</translation>
 <translation id="1834503245783133039">Download tidak berhasil: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Hapus penelusuran</translation>
 <translation id="1838709767668011582">Situs Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Dari:</translation>
 <translation id="2193365732679659387">Setelan kepercayaan</translation>
 <translation id="2195729137168608510">Perlindungan Email</translation>
+<translation id="2199298570273670671">Error</translation>
 <translation id="2200356397587687044">Chrome perlu izin untuk melanjutkan</translation>
 <translation id="220138918934036434">Sembunyikan tombol</translation>
 <translation id="2202898655984161076">Ada masalah dengan pencantuman printer. Beberapa printer Anda mungkin tidak berhasil didaftarkan ke <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Tampilkan sandi</translation>
 <translation id="2436186046335138073">Izinkan <ph name="HANDLER_HOSTNAME" /> membuka semua link <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Pengukuran penggunaan data sudah berakhir</translation>
 <translation id="2440604414813129000">Lihat s&amp;umber</translation>
 <translation id="2445081178310039857">Diperlukan direktori akar ekstensi.</translation>
 <translation id="2445484935443597917">Buat Profil Baru</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> ingin memverifikasi identitas Anda</translation>
 <translation id="2448312741937722512">Jenis</translation>
 <translation id="2450223707519584812">Anda tidak dapat menambahkan pengguna karena kunci API Google tidak ada. Buka <ph name="DETAILS_URL" /> untuk melihat detailnya.</translation>
 <translation id="2450310832094867474">Nonaktifkan sinkronisasi dan logout?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">File sudah ada</translation>
 <translation id="2453860139492968684">Selesai</translation>
 <translation id="2454247629720664989">Kata kunci</translation>
+<translation id="245661998428026871">Video dalam mode picture-in-picture akan berhenti diputar.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ingin menyalin file dari <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID Kunci Otoritas Sertifikasi</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ditambahkan</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Nonaktifkan Tab</translation>
 <translation id="3053013834507634016">Penggunaan Kunci Sertifikat</translation>
 <translation id="3057861065630527966">Cadangkan foto dan video</translation>
+<translation id="3059313675706898490">Android Message</translation>
 <translation id="3060379269883947824">Aktifkan fitur klik untuk diucapkan</translation>
 <translation id="3061707000357573562">Layanan Patch</translation>
 <translation id="3064410671692449875">Data tidak cukup</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Lupa sandi?</translation>
 <translation id="3132996321662585180">Refresh tiap hari</translation>
 <translation id="3135204511829026971">Memutar layar</translation>
+<translation id="313638818480447860">Kami menemukan <ph name="NUMBER_OF_APPS" /> aplikasi yang terhubung ke akun Anda yang dioptimalkan untuk perangkat ini.</translation>
 <translation id="313963229645891001">Mendownload, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar kuning default</translation>
 <translation id="3140353188828248647">Fokus ke bilah alamat</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Periksa ejaan</translation>
 <translation id="3183139917765991655">Pengimpor Profil</translation>
 <translation id="3184560914950696195">Tidak dapat menyimpan ke $1. Gambar yang diedit akan disimpan dalam folder Download.</translation>
+<translation id="3188257591659621405">File saya</translation>
 <translation id="3188465121994729530">Rata-rata Perpindahan</translation>
 <translation id="3190558889382726167">Sandi tersimpan</translation>
 <translation id="3192947282887913208">File Audio</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Membuat file zip <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Info aplikasi</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Video diputar dalam mode picture-in-picture</translation>
 <translation id="3335337277364016868">Tahun perekaman</translation>
 <translation id="3335947283844343239">Buka Kembali Tab yang Tertutup</translation>
 <translation id="3336664756920573711">Buka kunci <ph name="DEVICE_TYPE" /> menggunakan ponsel Android</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Gagal mencetak. Periksa printer Anda dan coba lagi.</translation>
 <translation id="3364721542077212959">Alat stilus</translation>
 <translation id="3365598184818502391">Gunakan Ctrl atau Alt</translation>
+<translation id="3367047597842238025">Siapkan <ph name="DEVICE_TYPE" /> sesuai keinginan Anda dan temukan semua kemampuan yang canggih di genggaman Anda.</translation>
 <translation id="3368922792935385530">Tersambung</translation>
 <translation id="3369624026883419694">Mengontak host...</translation>
 <translation id="337286756654493126">Baca folder yang Anda buka di aplikasi</translation>
@@ -1559,10 +1567,11 @@
 <translation id="3389312115541230716">Klik kanan ikon <ph name="SMALL_PRODUCT_LOGO" /> di bilah tugas</translation>
 <translation id="3391716558283801616">Tab 7</translation>
 <translation id="3396331542604645348">Printer yang dipilih tidak tersedia atau tidak dipasang dengan semestinya. Periksa printer Anda atau coba pilih printer lainnya.</translation>
+<translation id="3396800784455899911">Dengan mengklik tombol "Setuju dan lanjutkan", Anda menyetujui pemrosesan yang dijelaskan di atas terkait layanan Google ini.</translation>
 <translation id="3399432415385675819">Notifikasi akan dinonaktifkan</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Tidak ada sandi yang tersimpan untuk situs ini</translation>
-<translation id="340485819826776184">Gunakan layanan prediksi untuk membantu melengkapi penelusuran dan URL yang dimasukkan di bilah alamat</translation>
+<translation id="340485819826776184">Gunakan layanan prediksi untuk membantu melengkapi penelusuran dan URL yang dimasukkan di kolom URL</translation>
 <translation id="3405664148539009465">Sesuaikan font</translation>
 <translation id="3405763860805964263">...</translation>
 <translation id="3406605057700382950">&amp;Tampilkan bilah bookmark</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Perangkat ini tidak dapat dibuka karena sistem berkasnya tidak didukung.</translation>
 <translation id="3727148787322499904">Perubahan pada setelan ini akan berpengaruh pada semua jaringan bersama</translation>
 <translation id="3727187387656390258">Periksa pop-up</translation>
+<translation id="3729506734996624908">Situs yang diizinkan</translation>
 <translation id="3732078975418297900">Error pada saluran <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL dengan Step-up</translation>
+<translation id="3735740477244556633">Urutkan menurut</translation>
 <translation id="3737274407993947948">Error saat menginstal Linux...</translation>
 <translation id="3737536731758327622">Download Anda muncul di sini</translation>
+<translation id="3738671331307774213">Memverifikasi identitas membantu melindungi data pribadi Anda</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Buka <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Kini <ph name="DEVICE_NAME" /> akan ditampilkan di Konsol Admin</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Dapatkan fitur untuk mengembangkan situs, aplikasi Android, dan lainnya. Menginstal Linux akan mendownload <ph name="DOWNLOAD_SIZE" /> data.</translation>
 <translation id="385051799172605136">Mundur</translation>
 <translation id="3851428669031642514">Muat skrip yang tidak aman</translation>
+<translation id="3854599674806204102">Pilih salah satu opsi</translation>
 <translation id="3855441664322950881">Kemas ekstensi</translation>
 <translation id="3855676282923585394">Impor Bookmark dan Setelan...</translation>
 <translation id="3856800405688283469">Pilih zona waktu</translation>
-<translation id="3856921555429624101">Pengukuran penggunaan data telah berakhir</translation>
 <translation id="3857228364945137633">Gunakan Smart Lock untuk membuka kunci <ph name="DEVICE_TYPE" /> Anda tanpa menggunakan sandi saat ponsel berada dalam jangkauan.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Sinkronisasi dijeda</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Buka semua di jendela samaran</translation>
 <translation id="4508265954913339219">Aktivasi gagal</translation>
 <translation id="4508765956121923607">Lihat S&amp;umber</translation>
-<translation id="4509823033118379431">Gambar saat ini tidak tersedia. Sambungkan kembali untuk melihat koleksi.</translation>
 <translation id="451407183922382411">Diberdayakan oleh <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Menyiapkan pengguna yang dilindungi yang baru</translation>
 <translation id="4514610446763173167">Tombol putar atau jeda video</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Lanjutkan dari perangkat lain</translation>
 <translation id="4628314759732363424">Ubah...</translation>
 <translation id="4628757576491864469">Perangkat</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Karakter tidak valid: $1</translation>
 <translation id="4631887759990505102">Artis</translation>
 <translation id="4632483769545853758">Aktifkan Tab</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Siap untuk mem-backup <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">File ini tidak biasa didownload dan mungkin berbahaya.</translation>
 <translation id="4907306957610201395">Kategori Izin</translation>
-<translation id="4907824805858067479">Kartu yang disimpan dinonaktifkan oleh administrator</translation>
 <translation id="4908811072292128752">Buka tab baru untuk mengakses 2 situs sekaligus</translation>
 <translation id="4909038193460299775">Karena akun ini dikelola oleh <ph name="DOMAIN" />, bookmark, histori, sandi, dan setelan yang lain akan dihapus dari perangkat ini. Namun, data Anda akan tetap disimpan di Akun Google dan dapat dikelola di <ph name="BEGIN_LINK" />Google Dasbor<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Anda berhasil didaftarkan</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Tahunan</translation>
 <translation id="4957949153200969297">Hanya mengaktifkan fitur yang terkait dengan Sinkronisasi <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Simpan semua kartu Anda di satu tempat</translation>
 <translation id="496226124210045887">Folder yang Anda pilih berisi file sensitif. Apakah Anda yakin ingin memberikan izin pada "$1" untuk akses membaca secara permanen ke folder ini?</translation>
 <translation id="4964455510556214366">Pengaturan</translation>
 <translation id="4964673849688379040">Memeriksa...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Tambahkan ekstensi</translation>
 <translation id="5029568752722684782">Hapus salinan</translation>
 <translation id="5030338702439866405">Diterbitkan Oleh</translation>
+<translation id="503155457707535043">Aplikasi sedang didownload</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ingin menggunakan kamera dan mikrofon Anda</translation>
 <translation id="5036662165765606524">Jangan izinkan situs apa pun mendownload beberapa file secara otomatis</translation>
 <translation id="5037676449506322593">Pilih Semua</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Bisukan</translation>
 <translation id="5785583009707899920">Utilitas File Chrome</translation>
 <translation id="5787146423283493983">Perjanjian Kunci</translation>
+<translation id="5788127256798019331">File Play</translation>
 <translation id="5788367137662787332">Maaf, setidaknya satu partisi pada perangkat <ph name="DEVICE_LABEL" /> tidak dapat dipasang.</translation>
 <translation id="5794414402486823030">Selalu buka dengan penampil sistem</translation>
 <translation id="5794786537412027208">Keluar dari semua Aplikasi Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Diterjemahkan</translation>
 <translation id="5991049340509704927">Memperbesar</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Untuk memastikan bahwa Anda tetap dapat mengakses web, minta administrator untuk menghapus aplikasi ini.}other{Untuk memastikan bahwa Anda tetap dapat mengakses web, minta administrator untuk menghapus aplikasi berikut.}}</translation>
-<translation id="5993332328670040093">Penggunaan data Anda tidak akan diukur lagi.</translation>
 <translation id="6002458620803359783">Suara Pilihan</translation>
 <translation id="6005695835120147974">Router Media</translation>
 <translation id="6006484371116297560">Klasik</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Pilih sertifikat</translation>
 <translation id="6181431612547969857">Download diblokir</translation>
 <translation id="6185132558746749656">Lokasi Perangkat</translation>
+<translation id="6185617499004995178">Validator IPP CUPS</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">Siapkan atau kelola Berbagi File Jaringan.</translation>
 <translation id="6189412234224385711">Buka dengan <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Tambahkan parameter kueri di URL untuk menyegarkan halaman secara otomatis: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterai</translation>
 <translation id="6232116551750539448">Sambungan ke <ph name="NAME" /> terputus</translation>
+<translation id="6235700927623181151">Tab ini sedang membagikan konten desktop.</translation>
 <translation id="6237816943013845465">Memungkinkan Anda menyesuaikan resolusi layar</translation>
 <translation id="6238923052227198598">Tampilkan catatan terbaru di layar kunci</translation>
 <translation id="6239558157302047471">Muat ulang &amp;frame</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> tidak biasa didownload dan mungkin berbahaya.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Printer baru di jaringan Anda}other{Printer baru di jaringan Anda}}</translation>
-<translation id="6286684120317096255">Penggunaan data sedang diukur</translation>
 <translation id="6286708577777130801">Detail sandi tersimpan</translation>
 <translation id="6287852322318138013">Pilih aplikasi untuk membuka file ini</translation>
 <translation id="6289452883081499048">Layanan Google yang dipersonalisasi seperti Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Kelola perangkat Cloud Print</translation>
 <translation id="6451689256222386810">Jika lupa frasa sandi atau ingin mengubah setelan ini, <ph name="BEGIN_LINK" />setel ulang sinkronisasi<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Tolak</translation>
+<translation id="6455264371803474013">Di situs tertentu</translation>
 <translation id="6455894534188563617">&amp;Folder Baru</translation>
 <translation id="6456394469623773452">Lancar</translation>
 <translation id="6456631036739229488">Ponsel Smart Lock diubah. Masukkan sandi untuk mengupdate Smart Lock. Lain kali, ponsel akan membuka kunci <ph name="DEVICE_TYPE" /> Anda. Nonaktifkan Smart Lock di Setelan.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Muat Ulang Halaman Ini</translation>
 <translation id="6577284282025554716">Download dibatalkan: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Enkripsikan sandi yang disinkronkan dengan nama pengguna dan sandi Google Anda</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Konten desktop dibagikan</translation>
 <translation id="6580151766480067746">Versi ARC</translation>
 <translation id="6581162200855843583">Tautan Google Drive</translation>
 <translation id="6582421931165117398">Untuk melindungi informasi pribadi, ubah sandi Anda sekarang. Sebelum dapat mengubah sandi, Anda akan diminta untuk login.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Aplikasi ini dapat membuat Chrome tidak berfungsi dengan semestinya.}other{Aplikasi ini dapat membuat Chrome tidak berfungsi dengan semestinya.}}</translation>
 <translation id="7303900363563182677">Situs ini telah diblokir dari melihat teks dan gambar yang disalin ke papan klip</translation>
 <translation id="730515362922783851">Menukar data dengan perangkat di internet atau jaringan lokal</translation>
+<translation id="7307129035224081534">Dijeda</translation>
 <translation id="7308002049209013926">Gunakan Peluncur untuk membuka aktivitas dan aplikasi baru dengan cepat. Untuk membukanya dengan keyboard, tekan Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Tampilkan &amp;kontrol</translation>
 <translation id="7310598146671372464">Gagal login. Server tidak mendukung jenis enkripsi Kerberos yang ditentukan. Harap hubungi administrator.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Siapkan koneksi di <ph name="PHONE_NAME" /> Anda</translation>
 <translation id="740624631517654988">Pop-up diblokir</translation>
 <translation id="7407430846095439694">Impor dan Kaitkan</translation>
-<translation id="7409233648990234464">Luncurkan Kembali dan Powerwash</translation>
 <translation id="7409836189476010449">Jalankan Flash</translation>
 <translation id="7410344089573941623">Tanyakan jika <ph name="HOST" /> ingin mengakses kamera dan mikrofon Anda</translation>
 <translation id="741204030948306876">Ya, saya ikut</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Netscape Certificate Revocation URL</translation>
 <translation id="7469894403370665791">Sambungkan ke jaringan ini secara otomatis</translation>
 <translation id="747114903913869239">Kesalahan: Tidak dapat mendekodekan ekstensi</translation>
+<translation id="7473753388963818366">Mari menyiapkan <ph name="DEVICE_TYPE" /> untuk Anda</translation>
 <translation id="7473891865547856676">Lain Kali</translation>
 <translation id="747459581954555080">Pulihkan semua</translation>
 <translation id="7475671414023905704">Netscape Lost Password URL</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Tambahkan akun</translation>
 <translation id="7671130400130574146">Gunakan bilah judul dan batas sistem</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, di <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Kirimkan suara Anda ke Google untuk memungkinkan pengetikan ke kolom teks.</translation>
 <translation id="7681095912841365527">Situs dapat menggunakan bluetooth</translation>
 <translation id="7683373461016844951">Untuk melanjutkan, klik Oke, lalu klik Tambahkan Pengguna guna membuat profil baru untuk alamat email <ph name="DOMAIN" /> Anda.</translation>
 <translation id="7684212569183643648">Dipasang oleh Administrator Anda</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standar</translation>
 <translation id="7748528009589593815">Tab sebelumnya</translation>
 <translation id="7748626145866214022">Opsi lainnya tersedia di menu tindakan. Tekan Alt + A untuk memindahkan menu tindakan ke posisi tengah.</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7751260505918304024">Tampilkan semua</translation>
 <translation id="7754704193130578113">Tanyakan lokasi penyimpanan setiap file sebelum mendownload</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Apakah ini halaman tab baru yang Anda harapkan?</translation>
 <translation id="786073089922909430">Layanan: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">Un&amp;duhan</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Disandingkan</translation>
 <translation id="7870730066603611552">Tinjau opsi sinkronisasi setelah penyiapan</translation>
 <translation id="7870790288828963061">Tidak ada aplikasi Kios dengan versi lebih baru yang ditemukan. Tidak ada yang akan diperbarui. Lepaskan stik USB.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Nonaktifkan tab</translation>
 <translation id="8382913212082956454">Salin alamat &amp;email</translation>
 <translation id="8386903983509584791">Pemindaian selesai</translation>
+<translation id="8389492867173948260">Mengizinkan ekstensi ini membaca dan mengubah semua data Anda di situs yang dibuka:</translation>
 <translation id="8390449457866780408">Server tidak tersedia.</translation>
 <translation id="8391712576156218334">Gambar tidak tersedia. Coba lagi nanti.</translation>
 <translation id="8392234662362215700">Tekan Control-Shift-Space untuk mengubah tata letak keyboard.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Anda akan logout dalam <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Ubah PIN SIM</translation>
 <translation id="8434480141477525001">Port Debug NaCl</translation>
+<translation id="8435395510592618362">Verifikasi identitas Anda dengan <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Simpan kartu kredit</translation>
 <translation id="8438328416656800239">Beralih ke browser cerdas</translation>
 <translation id="8438566539970814960">Jadikan penelusuran dan penjelajahan lebih baik</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Tidak valid</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> memerlukan izin Anda untuk dijalankan</translation>
 <translation id="8466234950814670489">Arsip Tar</translation>
+<translation id="8466417995783206254">Tab ini diputar dalam mode picture-in-picture.</translation>
 <translation id="8468750959626135884">Buka <ph name="DEVICE_TYPE" /> menggunakan ponsel Android.</translation>
 <translation id="8470028084415844044">Untuk mendapatkan semua sandi di semua perangkat Anda, aktifkan sinkronisasi.</translation>
 <translation id="8470513973197838199">Sandi yang tersimpan untuk <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Jalankan Plugin Ini</translation>
 <translation id="8497219075884839166">Windows Utilities</translation>
 <translation id="8498214519255567734">Memudahkan Anda melihat layar atau membaca saat cahaya redup</translation>
+<translation id="8498395510292172881">Lanjutkan membaca di Chrome</translation>
 <translation id="8503813439785031346">Nama Pengguna</translation>
 <translation id="850875081535031620">Software berbahaya tidak ditemukan</translation>
 <translation id="8509646642152301857">Download kamus periksa ejaan gagal.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Coba lagi</translation>
 <translation id="8725178340343806893">Favorit/Bookmark</translation>
 <translation id="8726206820263995930">Terjadi kesalahan saat mengambil setelan kebijakan dari server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Jangan tampilkan ini lagi</translation>
 <translation id="8727344521467137076">Ada software berbahaya di komputer. Chrome sedang menghapusnya dan akan memulihkan setelan agar browser berfungsi normal lagi.</translation>
 <translation id="8730621377337864115">Selesai</translation>
 <translation id="8732030010853991079">Gunakan ekstensi ini dengan mengeklik ikon ini.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Buka Tautan di &amp;Tab Baru</translation>
 <translation id="9030515284705930323">Organisasi belum mengaktifkan Google Play Store untuk akun Anda. Hubungi administrator untuk informasi selengkapnya.</translation>
 <translation id="9033857511263905942">&amp;Tempel</translation>
+<translation id="9034924485347205037">File Linux</translation>
 <translation id="9035012421917565900">Item tidak dapat dipindahkan kembali ke '<ph name="DESTINATION_NAME" />', jadi tindakan ini tidak dapat diurungkan.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Tampilkan Halaman Asli</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Memindai perangkat Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Perangkat Bluetooth tersambung</translation>
 <translation id="9177499212658576372">Saat ini Anda tersambung ke jaringan <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Siapkan Linux (Beta) di <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Proses ini dapat memerlukan waktu beberapa menit. Memulai container Linux.</translation>
 <translation id="9180380851667544951">Situs dapat membagikan layar Anda</translation>
 <translation id="9188441292293901223">Perbarui ponsel Anda ke versi Android yang lebih baru untuk membuka <ph name="DEVICE_TYPE" /> ini.</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index 50f1418..f5b00b2 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Chiedi prima di accedere</translation>
 <translation id="1434696352799406980">L'operazione reimposterà la pagina iniziale, la pagina Nuova scheda, il motore di ricerca e le schede bloccate. Inoltre, disattiverà tutte le estensioni e rimuoverà i dati temporanei, come i cookie. La cronologia, le password salvate e i preferiti non saranno invece cancellati.</translation>
 <translation id="1434886155212424586">La pagina iniziale è la pagina Nuova scheda</translation>
+<translation id="1436671784520050284">Continua configurazione</translation>
 <translation id="1436784010935106834">Rimosso</translation>
 <translation id="1438632560381091872">Riattiva audio schede</translation>
 <translation id="1442392616396121389">Prefisso di routing</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Fetta di pizza</translation>
 <translation id="1467432559032391204">Sinistra</translation>
 <translation id="1468571364034902819">Impossibile utilizzare questo profilo</translation>
+<translation id="1470533772306424441">Installeremo queste app per te. Puoi trovare altre app per il tuo dispositivo nel Play Store.</translation>
 <translation id="1470811252759861213">Per trovare le tue estensioni su tutti i computer, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Impossibile caricare "<ph name="FILENAME" />". Lo spazio disponibile su Google Drive non è sufficiente.</translation>
 <translation id="1475502736924165259">Hai certificati su file che non rientrano in nessuna delle altre categorie</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Riduc&amp;i</translation>
 <translation id="1830550083491357902">Accesso non eseguito</translation>
 <translation id="1832511806131704864">Cambio di telefono aggiornato</translation>
-<translation id="1832685970989658809">I metodi di pagamento salvati sono stati disattivati dall'amministratore</translation>
 <translation id="1834503245783133039">Download non riuscito: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Cancella ricerca</translation>
 <translation id="1838709767668011582">Sito Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Da:</translation>
 <translation id="2193365732679659387">Impostazioni di attendibilità</translation>
 <translation id="2195729137168608510">Protezione email</translation>
+<translation id="2199298570273670671">Errore</translation>
 <translation id="2200356397587687044">Chrome ha bisogno dell'autorizzazione per continuare</translation>
 <translation id="220138918934036434">Nascondi pulsante</translation>
 <translation id="2202898655984161076">Si è verificato un problema nella visualizzazione dell'elenco di stampanti. È possibile che alcune stampanti non siano state registrate correttamente con <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Mostra password</translation>
 <translation id="2436186046335138073">Consentire a <ph name="HANDLER_HOSTNAME" /> di aprire tutti i link <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimi</translation>
-<translation id="2437139306601019091">Misurazione dell'utilizzo dei dati terminata</translation>
 <translation id="2440604414813129000">Visualizza &amp;sorgente</translation>
 <translation id="2445081178310039857">La directory principale dell'estensione è obbligatoria.</translation>
 <translation id="2445484935443597917">Crea un nuovo profilo</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> vuole verificare la tua identità</translation>
 <translation id="2448312741937722512">Tipo</translation>
 <translation id="2450223707519584812">Non potrai aggiungere utenti perché mancano le chiavi dell'API di Google. Per informazioni dettagliate, visita la pagina <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Vuoi disattivare la sincronizzazione e uscire?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">File già esistente</translation>
 <translation id="2453860139492968684">Termina</translation>
 <translation id="2454247629720664989">Parola chiave</translation>
+<translation id="245661998428026871">La riproduzione del video in modalità Picture in picture verrà interrotta.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> vorrebbe copiare file da <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID della chiave dell'autorità di certificazione</translation>
 <translation id="2462752602710430187">È stata aggiunta la stampante <ph name="PRINTER_NAME" /></translation>
@@ -1361,6 +1364,7 @@
 <translation id="304826556400666995">Riattiva audio schede</translation>
 <translation id="3053013834507634016">Uso della chiave del certificato</translation>
 <translation id="3057861065630527966">Effettua il backup di foto e video</translation>
+<translation id="3059313675706898490">Android Messaggi</translation>
 <translation id="3060379269883947824">Attiva Seleziona per ascoltare</translation>
 <translation id="3061707000357573562">Servizio di applicazione patch</translation>
 <translation id="3064410671692449875">Dati insufficienti</translation>
@@ -1409,6 +1413,7 @@
 <translation id="313205617302240621">Hai dimenticato la password?</translation>
 <translation id="3132996321662585180">Aggiorna ogni giorno</translation>
 <translation id="3135204511829026971">Ruota lo schermo</translation>
+<translation id="313638818480447860">Abbiamo trovato <ph name="NUMBER_OF_APPS" /> app collegate al tuo account ottimizzate per questo dispositivo.</translation>
 <translation id="313963229645891001">Download in corso, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar giallo predefinito</translation>
 <translation id="3140353188828248647">Area attiva nella barra degli indirizzi</translation>
@@ -1439,6 +1444,7 @@
 <translation id="3182749001423093222">Controllo ortografico</translation>
 <translation id="3183139917765991655">Profile Importer</translation>
 <translation id="3184560914950696195">Impossibile salvare su $1. Le immagini modificate verranno salvate nella cartella Download.</translation>
+<translation id="3188257591659621405">I miei file</translation>
 <translation id="3188465121994729530">Media spostamento</translation>
 <translation id="3190558889382726167">Password salvata</translation>
 <translation id="3192947282887913208">File audio</translation>
@@ -1524,6 +1530,7 @@
 <translation id="3326821416087822643">Compressione di <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informazioni sull'app</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Video riprodotto in modalità Picture in picture</translation>
 <translation id="3335337277364016868">Anno di registrazione</translation>
 <translation id="3335947283844343239">Riapri scheda chiusa</translation>
 <translation id="3336664756920573711">Sblocca il tuo dispositivo <ph name="DEVICE_TYPE" /> usando il tuo telefono Android</translation>
@@ -1543,6 +1550,7 @@
 <translation id="3360297538363969800">Errore di stampa. Controlla la stampante e riprova.</translation>
 <translation id="3364721542077212959">Strumenti per stilo</translation>
 <translation id="3365598184818502391">Usa il tasto CTRL o ALT</translation>
+<translation id="3367047597842238025">Configura il tuo <ph name="DEVICE_TYPE" /> secondo le tue preferenze e scopri tutte le incredibili funzionalità a portata di mano.</translation>
 <translation id="3368922792935385530">Connessa</translation>
 <translation id="3369624026883419694">Risoluzione host in corso...</translation>
 <translation id="337286756654493126">Lettura di cartelle aperte nell'applicazione</translation>
@@ -1556,6 +1564,7 @@
 <translation id="3389312115541230716">Fai clic con il pulsante destro del mouse sull'icona <ph name="SMALL_PRODUCT_LOGO" /> nella barra delle applicazioni</translation>
 <translation id="3391716558283801616">Scheda 7</translation>
 <translation id="3396331542604645348">La stampante selezionata non è disponibile o non è installata correttamente. Controlla la stampante o prova a selezionarne un'altra.</translation>
+<translation id="3396800784455899911">Se fai clic sul pulsante "Accetta e continua", accetti l'elaborazione descritta in precedenza per questi servizi Google.</translation>
 <translation id="3399432415385675819">Le notifiche verranno disattivate</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nessuna password salvata per questo sito</translation>
@@ -1784,10 +1793,13 @@
 <translation id="3726463242007121105">Impossibile aprire il dispositivo perché il suo filesystem non è supportato.</translation>
 <translation id="3727148787322499904">La modifica di questa impostazione avrà effetto su tutte le reti condivise</translation>
 <translation id="3727187387656390258">Ispeziona popup</translation>
+<translation id="3729506734996624908">Siti consentiti</translation>
 <translation id="3732078975418297900">Errore nella riga <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL con step-up</translation>
+<translation id="3735740477244556633">Ordina per</translation>
 <translation id="3737274407993947948">Errore durante l'installazione di Linux...</translation>
 <translation id="3737536731758327622">I tuoi download vengono visualizzati qui</translation>
+<translation id="3738671331307774213">La verifica della tua identità aiuta a proteggere i tuoi dati privati</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Aprire <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> verrà ora visualizzato nella Console di amministrazione</translation>
@@ -1872,10 +1884,10 @@
 <translation id="3846116211488856547">Scarica strumenti per sviluppare siti web, app Android e non solo. Se installi Linux verranno scaricati <ph name="DOWNLOAD_SIZE" /> di dati.</translation>
 <translation id="385051799172605136">Indietro</translation>
 <translation id="3851428669031642514">Carica script non sicuri</translation>
+<translation id="3854599674806204102">Scegli un'opzione</translation>
 <translation id="3855441664322950881">Crea pacchetto estensione</translation>
 <translation id="3855676282923585394">Importa preferiti e impostazioni...</translation>
 <translation id="3856800405688283469">Seleziona il fuso orario</translation>
-<translation id="3856921555429624101">La misurazione dell'utilizzo dei dati è terminata</translation>
 <translation id="3857228364945137633">Prova Smart Lock per sbloccare il tuo dispositivo <ph name="DEVICE_TYPE" /> senza password quando il tuo telefono è nelle vicinanze.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sincronizzazione in pausa</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">Apri tutto nella finestra di navigazione in incognito</translation>
 <translation id="4508265954913339219">Attivazione non riuscita</translation>
 <translation id="4508765956121923607">Visualizza s&amp;orgente</translation>
-<translation id="4509823033118379431">Le immagini non sono al momento disponibili. Riconnettiti per visualizzare le raccolte.</translation>
 <translation id="451407183922382411">Con tecnologia <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configura un nuovo utente supervisionato</translation>
 <translation id="4514610446763173167">Attiva/disattiva il video per riprodurre o mettere in pausa</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">Continua da un altro dispositivo</translation>
 <translation id="4628314759732363424">Modifica...</translation>
 <translation id="4628757576491864469">Dispositivi</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Carattere non valido: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Riattiva audio scheda</translation>
@@ -2508,7 +2520,6 @@
 <translation id="4905417359854579806">Pronto per il backup di <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Questo file non viene scaricato spesso e potrebbe essere pericoloso.</translation>
 <translation id="4907306957610201395">Categoria di autorizzazione</translation>
-<translation id="4907824805858067479">Le schede salvate sono state disattivate dall'amministratore</translation>
 <translation id="4908811072292128752">Apri una nuova scheda per visitare due siti contemporaneamente</translation>
 <translation id="4909038193460299775">Questo account è gestito da <ph name="DOMAIN" />, pertanto i preferiti, la cronologia, le password e altre impostazioni verranno cancellati da questo dispositivo. I tuoi dati rimarranno però memorizzati nel tuo account Google e potrai gestirli su <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Registrazione effettuata</translation>
@@ -2540,6 +2551,7 @@
 <translation id="4955814292505481804">Annuale</translation>
 <translation id="4957949153200969297">Attiva solo le funzionalità relative alla sincronizzazione di <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Tieni le tue schede in un unico posto</translation>
 <translation id="496226124210045887">La cartella che hai selezionato contiene file delicati. Vuoi concedere a "$1" accesso di lettura permanente a questa cartella?</translation>
 <translation id="4964455510556214366">Disposizione</translation>
 <translation id="4964673849688379040">Controllo in corso...</translation>
@@ -2587,6 +2599,7 @@
 <translation id="5027562294707732951">Aggiungi estensione</translation>
 <translation id="5029568752722684782">Cancella copia</translation>
 <translation id="5030338702439866405">Emesso da</translation>
+<translation id="503155457707535043">Download delle app in corso</translation>
 <translation id="503498442187459473"><ph name="HOST" /> vuole usare la fotocamera e il microfono</translation>
 <translation id="5036662165765606524">Non consentire ai siti di scaricare automaticamente più file</translation>
 <translation id="5037676449506322593">Seleziona tutto</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">Disattiva audio</translation>
 <translation id="5785583009707899920">Utilità dei file Chrome</translation>
 <translation id="5787146423283493983">Chiave concordata</translation>
+<translation id="5788127256798019331">File Play</translation>
 <translation id="5788367137662787332">Spiacenti, impossibile montare almeno una partizione del dispositivo <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Apri sempre con visualizzatore di sistema</translation>
 <translation id="5794786537412027208">Chiudi tutte le app di Chrome</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">Tradotta</translation>
 <translation id="5991049340509704927">Ingrandisci</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Per assicurarti di poter continuare a navigare sul Web, chiedi al tuo amministratore di rimuovere questa applicazione.}other{Per assicurarti di poter continuare a navigare sul Web, chiedi al tuo amministratore di rimuovere queste applicazioni.}}</translation>
-<translation id="5993332328670040093">L'utilizzo dei dati non verrà più misurato.</translation>
 <translation id="6002458620803359783">Voci preferite</translation>
 <translation id="6005695835120147974">Media Router</translation>
 <translation id="6006484371116297560">Classico</translation>
@@ -3353,6 +3366,7 @@
 <translation id="6178664161104547336">Seleziona un certificato</translation>
 <translation id="6181431612547969857">Download bloccato</translation>
 <translation id="6185132558746749656">Posizione del dispositivo</translation>
+<translation id="6185617499004995178">Validatore IPP CUPS</translation>
 <translation id="6185696379715117369">Pagina su</translation>
 <translation id="6189273858858366896">Configura o gestisci condivisioni file di rete.</translation>
 <translation id="6189412234224385711">Apri con l'estensione <ph name="EXTENSION_NAME" /></translation>
@@ -3385,6 +3399,7 @@
 <translation id="6231881193380278751">Aggiungi un parametro query nell'URL per aggiornare automaticamente la pagina: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batteria</translation>
 <translation id="6232116551750539448">Connection a <ph name="NAME" /> interrotta</translation>
+<translation id="6235700927623181151">Questa scheda sta condividendo i contenuti del tuo computer.</translation>
 <translation id="6237816943013845465">Consente di regolare la risoluzione dello schermo</translation>
 <translation id="6238923052227198598">Tieni le note più recenti sulla schermata di blocco</translation>
 <translation id="6239558157302047471">Ricarica &amp;frame</translation>
@@ -3419,7 +3434,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> non viene scaricato spesso e potrebbe essere pericoloso.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nuova stampante in rete}other{Nuove stampanti in rete}}</translation>
-<translation id="6286684120317096255">È in corso la misurazione dell'utilizzo dei dati</translation>
 <translation id="6286708577777130801">Dettagli password salvata</translation>
 <translation id="6287852322318138013">Seleziona un'app per aprire questo file</translation>
 <translation id="6289452883081499048">Servizi Google personalizzati come Play</translation>
@@ -3530,6 +3544,7 @@
 <translation id="6451180435462401570">Gestisci dispositivi Cloud Print</translation>
 <translation id="6451689256222386810">Se non ricordi la passphrase o vuoi modificare questa impostazione, <ph name="BEGIN_LINK" />reimposta la sincronizzazione<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Rifiuto</translation>
+<translation id="6455264371803474013">Su siti specifici</translation>
 <translation id="6455894534188563617">&amp;Nuova cartella</translation>
 <translation id="6456394469623773452">Accettabile</translation>
 <translation id="6456631036739229488">Telefono con Smart Lock cambiato. Inserisci la password per aggiornare Smart Lock. La prossima volta potrai usare il tuo telefono per sbloccare il dispositivo <ph name="DEVICE_TYPE" />. Disattiva Smart Lock nelle Impostazioni.</translation>
@@ -3607,6 +3622,7 @@
 <translation id="657402800789773160">&amp;Ricarica questa pagina</translation>
 <translation id="6577284282025554716">Download annullato: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Cripta le password sincronizzate con la password e il nome utente del tuo account Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Contenuti del computer condivisi</translation>
 <translation id="6580151766480067746">Versione ARC</translation>
 <translation id="6581162200855843583">Link Google Drive</translation>
 <translation id="6582421931165117398">Cambia subito la password per proteggere le tue informazioni personali. Ti verrà chiesto di accedere per cambiare la password.</translation>
@@ -4073,6 +4089,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Questa applicazione potrebbe impedire il corretto funzionamento di Chrome.}other{Queste applicazioni potrebbero impedire il corretto funzionamento di Chrome.}}</translation>
 <translation id="7303900363563182677">A questo sito è stato impedito di leggere testo e immagini copiati negli appunti</translation>
 <translation id="730515362922783851">Scambiare dati con qualsiasi dispositivo sulla rete locale o su Internet</translation>
+<translation id="7307129035224081534">In pausa</translation>
 <translation id="7308002049209013926">Usa Avvio applicazioni per accedere rapidamente a nuove app e attività. Per accedere usando la tastiera, premi ALT + MAIUSC + L.</translation>
 <translation id="7309257895202129721">Visualizza &amp;comandi</translation>
 <translation id="7310598146671372464">Impossibile accedere. Il server non supporta i tipi di crittografia Kerberos specificati. Contatta l'amministratore.</translation>
@@ -4130,7 +4147,6 @@
 <translation id="7400839060291901923">Configura la connessione sul tuo <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Popup bloccato</translation>
 <translation id="7407430846095439694">Importa e associa</translation>
-<translation id="7409233648990234464">Riavvia ed esegui Powerwash</translation>
 <translation id="7409836189476010449">Esegui Flash</translation>
 <translation id="7410344089573941623">Chiedi conferma se <ph name="HOST" /> vuole accedere alla webcam e al microfono</translation>
 <translation id="741204030948306876">Sì, accetto</translation>
@@ -4163,6 +4179,7 @@
 <translation id="7465778193084373987">URL di revoca certificato Netscape</translation>
 <translation id="7469894403370665791">Collegati automaticamente a questa rete</translation>
 <translation id="747114903913869239">Errore: impossibile decodificare l'estensione</translation>
+<translation id="7473753388963818366">Avvia la configurazione del tuo <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">No grazie</translation>
 <translation id="747459581954555080">Ripristina tutto</translation>
 <translation id="7475671414023905704">URL password persa Netscape</translation>
@@ -4285,6 +4302,7 @@
 <translation id="7665369617277396874">Aggiungi account</translation>
 <translation id="7671130400130574146">Usa barra del titolo di sistema e bordi</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, in <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Invia i tuoi dati audio a Google per consentire la dettatura in tutti i campi di testo.</translation>
 <translation id="7681095912841365527">Il sito può usare il Bluetooth</translation>
 <translation id="7683373461016844951">Per continuare, fai clic su OK, quindi fai clic su Aggiungi persona per creare un nuovo profilo per il tuo indirizzo email <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Installata dall'amministratore</translation>
@@ -4326,6 +4344,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Scheda precedente</translation>
 <translation id="7748626145866214022">Nella barra delle azioni sono disponibili altre opzioni. Premi ALT + A per impostare lo stato attivo sulla barra.</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7751260505918304024">Mostra tutto</translation>
 <translation id="7754704193130578113">Chiedi dove salvare il file prima di scaricarlo</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4434,6 +4453,7 @@
 <translation id="7857949311770343000">È la pagina Nuova scheda prevista?</translation>
 <translation id="786073089922909430">Servizio: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Download</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />, accoppiato</translation>
 <translation id="7870730066603611552">Controlla le opzioni di sincronizzazione dopo la configurazione</translation>
 <translation id="7870790288828963061">Nessuna app kiosk con versione più recente trovata. Non c'è nulla da aggiornare. Rimuovi la chiavetta USB.</translation>
@@ -4755,6 +4775,7 @@
 <translation id="8373553483208508744">Disattiva audio schede</translation>
 <translation id="8382913212082956454">Copia indirizzo &amp;email</translation>
 <translation id="8386903983509584791">Scansione completata</translation>
+<translation id="8389492867173948260">Permetti a questa estensione di leggere e modificare tutti i dati relativi ai siti web che hai visitato:</translation>
 <translation id="8390449457866780408">Server non disponibile.</translation>
 <translation id="8391712576156218334">Immagine non disponibile. Riprova più tardi.</translation>
 <translation id="8392234662362215700">Premi CTRL + MAIUSC + barra spaziatrice per cambiare il layout della tastiera.</translation>
@@ -4786,6 +4807,7 @@
 <translation id="84297032718407999">Verrai disconnesso tra <ph name="LOGOUT_TIME_LEFT" />.</translation>
 <translation id="8431909052837336408">Cambia il PIN della SIM</translation>
 <translation id="8434480141477525001">Porta di debug NaCl</translation>
+<translation id="8435395510592618362">Verifica la tua identità con <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Salva la carta di credito</translation>
 <translation id="8438328416656800239">Passa a un browser intelligente</translation>
 <translation id="8438566539970814960">Migliora le ricerche e le attività di navigazione</translation>
@@ -4812,6 +4834,7 @@
 <translation id="8465252176946159372">Non valido</translation>
 <translation id="8465444703385715657">Per poter eseguire <ph name="PLUGIN_NAME" /> è necessaria la tua autorizzazione</translation>
 <translation id="8466234950814670489">Archivio Tar</translation>
+<translation id="8466417995783206254">In questa scheda è in corso la riproduzione di un video in modalità Picture in picture.</translation>
 <translation id="8468750959626135884">Sblocca il tuo <ph name="DEVICE_TYPE" /> con il tuo telefono Android.</translation>
 <translation id="8470028084415844044">Attiva la sincronizzazione per trovare tutte le tue password su tutti i dispositivi.</translation>
 <translation id="8470513973197838199">Password salvate per il sito <ph name="ORIGIN" /></translation>
@@ -4832,6 +4855,7 @@
 <translation id="8496717697661868878">Esegui questo plug-in</translation>
 <translation id="8497219075884839166">Utilità Windows</translation>
 <translation id="8498214519255567734">Potrai guardare lo schermo senza sforzare la vista o leggere in condizioni di luce attenuata</translation>
+<translation id="8498395510292172881">Continua a leggere in Chrome</translation>
 <translation id="8503813439785031346">Nome utente</translation>
 <translation id="850875081535031620">Nessun software dannoso trovato</translation>
 <translation id="8509646642152301857">Download del dizionario per il controllo ortografico non riuscito.</translation>
@@ -4982,7 +5006,6 @@
 <translation id="8725066075913043281">Riprova</translation>
 <translation id="8725178340343806893">Preferiti/Segnalibri</translation>
 <translation id="8726206820263995930">Errore durante il recupero delle impostazioni criterio dal server. <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Non visualizzare più</translation>
 <translation id="8727344521467137076">Rilevato software dannoso sul computer. Chrome lo sta rimuovendo e ripristinerà le tue impostazioni per ristabilire il normale funzionamento del browser.</translation>
 <translation id="8730621377337864115">Fine</translation>
 <translation id="8732030010853991079">Utilizza questa estensione facendo clic su questa icona.</translation>
@@ -5173,6 +5196,7 @@
 <translation id="9027459031423301635">Apri link in un'altra &amp;scheda</translation>
 <translation id="9030515284705930323">La tua organizzazione non ha attivato Google Play Store per il tuo account. Contatta l'amministratore per avere ulteriori informazioni.</translation>
 <translation id="9033857511263905942">&amp;Incolla</translation>
+<translation id="9034924485347205037">File Linux</translation>
 <translation id="9035012421917565900">Non è possibile spostare di nuovo gli elementi in "<ph name="DESTINATION_NAME" />", quindi non potrai annullare questa azione.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Mostra originale</translation>
@@ -5273,6 +5297,7 @@
 <translation id="9173995187295789444">Ricerca di dispositivi Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Dispositivo Bluetooth connesso</translation>
 <translation id="9177499212658576372">Al momento sei collegato alla rete <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configura Linux (beta) sul tuo <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Questa procedura potrebbe richiedere alcuni minuti. Avvio del container Linux in corso.</translation>
 <translation id="9180380851667544951">Il sito può condividere lo schermo</translation>
 <translation id="9188441292293901223">Aggiorna il telefono a una versione più recente di Android per sbloccare questo dispositivo <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 6e9b751e..277f5c5 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">שאל לפני גישה</translation>
 <translation id="1434696352799406980">‏פעולה זו תאפס את דף הפתיחה, את דף הכרטיסייה החדשה, את מנוע החיפוש ואת הכרטיסיות המוצמדות שלך. היא גם תשבית את כל התוספים ותמחק נתונים זמניים כגון קובצי Cookie. הסימניות, ההיסטוריה והסיסמאות השמורות לא יימחקו.</translation>
 <translation id="1434886155212424586">דף הבית הוא הדף 'כרטיסייה חדשה'</translation>
+<translation id="1436671784520050284">להמשך הגדרה</translation>
 <translation id="1436784010935106834">הוסר</translation>
 <translation id="1438632560381091872">ביטול השתקת כרטיסיות</translation>
 <translation id="1442392616396121389">קידומת לניתוב</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">משולש פיצה</translation>
 <translation id="1467432559032391204">שמאלה</translation>
 <translation id="1468571364034902819">לא ניתן להשתמש בפרופיל הזה</translation>
+<translation id="1470533772306424441">‏נתקין עבורך את האפליקציות האלה. בחנות Play אפשר למצוא אפליקציות נוספות בשביל המכשיר.</translation>
 <translation id="1470811252759861213">כדי להתקין את התוספים בכל המחשבים שלך, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">‏הקובץ "<ph name="FILENAME" />" לא הועלה. אין לך מספיק שטח פנוי ב-Google Drive.</translation>
 <translation id="1475502736924165259">יש לך אישורים בקובץ שאינם מתאימים לאף אחת מהקטגוריות האחרות</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">הת&amp;רחק</translation>
 <translation id="1830550083491357902">לא מחובר</translation>
 <translation id="1832511806131704864">השינוי בטלפון עודכן</translation>
-<translation id="1832685970989658809">אמצעי תשלום שנשמרו הושבתו על-ידי מנהל המערכת</translation>
 <translation id="1834503245783133039">ההורדה נכשלה: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">נקה חיפוש</translation>
 <translation id="1838709767668011582">‏אתר שנוצר באמצעות Google Sites</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">מ:</translation>
 <translation id="2193365732679659387">הגדרות אמון</translation>
 <translation id="2195729137168608510">הגנת אימייל </translation>
+<translation id="2199298570273670671">שגיאה</translation>
 <translation id="2200356397587687044">‏Chrome צריך הרשאה כדי להמשיך</translation>
 <translation id="220138918934036434">לחצן הסתר</translation>
 <translation id="2202898655984161076">היתה בעיה ברישום מדפסות. ייתכן שחלק מהמדפסות שלך לא נרשמו בהצלחה ב-<ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">הצג סיסמה</translation>
 <translation id="2436186046335138073">האם לאפשר ל-<ph name="HANDLER_HOSTNAME" /> לפתוח את כל קישורי <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">מינימום</translation>
-<translation id="2437139306601019091">מדידת השימוש בנתונים הסתיימה</translation>
 <translation id="2440604414813129000">צפה &amp;במקור</translation>
 <translation id="2445081178310039857">ספריית הבסיס של ההרחבה נחוצה.</translation>
 <translation id="2445484935443597917">יצירת פרופיל חדש</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> רוצה לאמת את הזהות שלך</translation>
 <translation id="2448312741937722512">סוג</translation>
 <translation id="2450223707519584812">‏לא תוכל להוסיף משתמשים מפני שהמפתחות של Google API חסרים. לפרטים, עבור אל <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">להשבית את הסינכרון ולצאת?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">הקובץ כבר קיים</translation>
 <translation id="2453860139492968684">סיום</translation>
 <translation id="2454247629720664989">מילת מפתח</translation>
+<translation id="245661998428026871">הפעלת הסרטון במצב 'תמונה בתוך תמונה' תופסק.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> רוצה להעתיק קבצים מ-<ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">מזהה מפתח של רשות אישורים</translation>
 <translation id="2462752602710430187">המדפסת <ph name="PRINTER_NAME" /> נוספה</translation>
@@ -1359,6 +1362,7 @@
 <translation id="304826556400666995">ביטול השתקת כרטיסיות</translation>
 <translation id="3053013834507634016">שימוש במפתח אישור </translation>
 <translation id="3057861065630527966">גבה את התמונות והסרטונים</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">הפעלת הקראה</translation>
 <translation id="3061707000357573562">שירות תיקון</translation>
 <translation id="3064410671692449875">אין מספיק נתונים</translation>
@@ -1407,6 +1411,7 @@
 <translation id="313205617302240621">שכחת את הסיסמה?</translation>
 <translation id="3132996321662585180">רענון מדי יום</translation>
 <translation id="3135204511829026971">סובב את המסך</translation>
+<translation id="313638818480447860">מצאנו <ph name="NUMBER_OF_APPS" /> אפליקציות המחוברות לחשבון שלך ושעברו אופטימיזציה למכשיר הזה.</translation>
 <translation id="313963229645891001">בהורדה, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">דמות ברירת מחדל צהובה</translation>
 <translation id="3140353188828248647">התמקד בסרגל הכתובות</translation>
@@ -1437,6 +1442,7 @@
 <translation id="3182749001423093222">בדיקת איות</translation>
 <translation id="3183139917765991655">מייבא פרופילים</translation>
 <translation id="3184560914950696195">לא ניתן לשמור ב-$1. תמונות ערוכות יישמרו בתיקיית ההורדות.</translation>
+<translation id="3188257591659621405">הקבצים שלי</translation>
 <translation id="3188465121994729530">ממוצע נע</translation>
 <translation id="3190558889382726167">הסיסמה נשמרה</translation>
 <translation id="3192947282887913208">קובצי אודיו</translation>
@@ -1524,6 +1530,7 @@
 <translation id="3326821416087822643">מכווץ את <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">פרטי יישום</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - הסרטון פועל במצב תמונה בתוך תמונה</translation>
 <translation id="3335337277364016868">שנת הקלטה</translation>
 <translation id="3335947283844343239">פתח מחדש כרטיסייה שנסגרה</translation>
 <translation id="3336664756920573711">‏ביטול נעילת ה-<ph name="DEVICE_TYPE" /> בעזרת טלפון ה-Android שלך</translation>
@@ -1543,6 +1550,7 @@
 <translation id="3360297538363969800">ההדפסה נכשלה. בדוק את המדפסת ונסה שוב.</translation>
 <translation id="3364721542077212959">כלי סטיילוס</translation>
 <translation id="3365598184818502391">‏צריך להשתמש ב-Ctrl או ב-Alt</translation>
+<translation id="3367047597842238025">התהליך הזה מאפשר לך להגדיר את ה-<ph name="DEVICE_TYPE" /> לפי ההעדפות שלך ולגלות את כל היכולות המעולות שזמינות לך.</translation>
 <translation id="3368922792935385530">מחובר</translation>
 <translation id="3369624026883419694">מברר כתובת שרת מארח...</translation>
 <translation id="337286756654493126">קריאת תיקיות שאתה פותח ביישום</translation>
@@ -1556,6 +1564,7 @@
 <translation id="3389312115541230716">לחץ לחיצה ימנית על הסמל <ph name="SMALL_PRODUCT_LOGO" /> בשורת המשימות</translation>
 <translation id="3391716558283801616">כרטיסייה 7</translation>
 <translation id="3396331542604645348">המדפסת שנבחרה אינה זמינה או שאינה מותקנת כראוי. בדוק את המדפסת או נסה לבחור מדפסת אחרת.</translation>
+<translation id="3396800784455899911">‏לחיצה על הלחצן "קבלה והמשך" מהווה את הסכמתך לעיבוד שתואר קודם לכן לגבי השירותים האלה של Google.</translation>
 <translation id="3399432415385675819">הודעות יושבתו</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">לא נשמרו סיסמאות לאתר הזה</translation>
@@ -1641,7 +1650,7 @@
 <translation id="3507888235492474624">‏סריקה חוזרת לאיתור מכשירי Bluetooth</translation>
 <translation id="3508920295779105875">בחר תיקייה אחרת...</translation>
 <translation id="3510797500218907545">WiMAX</translation>
-<translation id="3511200754045804813">סרוק מחדש</translation>
+<translation id="3511200754045804813">סריקת מחדש</translation>
 <translation id="3511307672085573050">העתק כתוב&amp;ת קישור</translation>
 <translation id="3511399794969432965">בעיות בהתחברות?</translation>
 <translation id="351152300840026870">גופן ברוחב קבוע</translation>
@@ -1784,10 +1793,13 @@
 <translation id="3726463242007121105">לא ניתן לפתוח מכשיר זה מאחר שמערכת הקבצים שלו אינה נתמכת.</translation>
 <translation id="3727148787322499904">שינוי של הגדרה זו ישפיע על כל הרשתות המשותפות</translation>
 <translation id="3727187387656390258">בדוק חלון מוקפץ</translation>
+<translation id="3729506734996624908">אתרים מורשים</translation>
 <translation id="3732078975418297900">שגיאה בשורה <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">‏שרת SSL עם הגברה</translation>
+<translation id="3735740477244556633">מיון לפי</translation>
 <translation id="3737274407993947948">‏קרתה שגיאה בהתקנת Linux...</translation>
 <translation id="3737536731758327622">ההורדות שלך מופיעות כאן</translation>
+<translation id="3738671331307774213">אימות זהות עוזר להגן על הנתונים הפרטיים שלך</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">לפתוח את <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> יופיע כעת במסוף הניהול</translation>
@@ -1872,10 +1884,10 @@
 <translation id="3846116211488856547">‏אפשר לקבל כלים לפיתוח אתרים, אפליקציות Android ועוד. התקנת Linux תוריד נתונים בנפח של <ph name="DOWNLOAD_SIZE" />.</translation>
 <translation id="385051799172605136">חזור</translation>
 <translation id="3851428669031642514">טען סקריפטים לא בטוחים</translation>
+<translation id="3854599674806204102">צריך לבחור אפשרות</translation>
 <translation id="3855441664322950881">ארוז תוסף</translation>
 <translation id="3855676282923585394">יבא סימניות והגדרות...</translation>
 <translation id="3856800405688283469">בחירת אזור זמן</translation>
-<translation id="3856921555429624101">מדידת השימוש בנתונים הסתיימה</translation>
 <translation id="3857228364945137633">‏כדאי לנסות את Smart Lock כדי לבטל את הנעילה של <ph name="DEVICE_TYPE" /> כשהטלפון בקרבת מקום, בלי להזין סיסמה.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: הסינכרון הושהה</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">פתח הכול בחלון גלישה בסתר</translation>
 <translation id="4508265954913339219">ההפעלה נכשלה</translation>
 <translation id="4508765956121923607">הצג מ&amp;קור</translation>
-<translation id="4509823033118379431">התמונות לא זמינות כרגע. יש להתחבר מחדש כדי להציג את האוספים.</translation>
 <translation id="451407183922382411">מופעל על-ידי <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">הגדר משתמש חדש בפיקוח</translation>
 <translation id="4514610446763173167">הפעלת וידאו או הפסקת הפעולה</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">המשך במכשיר אחר</translation>
 <translation id="4628314759732363424">שנה...</translation>
 <translation id="4628757576491864469">מכשירים</translation>
+<translation id="4628948037717959914">תמונה</translation>
 <translation id="4630590996962964935">תו לא חוקי: $ 1</translation>
 <translation id="4631887759990505102">אמן</translation>
 <translation id="4632483769545853758">ביטול השתקה של כרטיסייה</translation>
@@ -2508,7 +2520,6 @@
 <translation id="4905417359854579806">מוכן לגבות <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">הורדת הקובץ הזה אינה נפוצה והקובץ עלול להיות מסוכן.</translation>
 <translation id="4907306957610201395">קטגוריית הרשאה</translation>
-<translation id="4907824805858067479">כרטיסים שמורים הושבתו על-ידי מנהל המערכת</translation>
 <translation id="4908811072292128752">פתח כרטיסייה חדשה כדי לגלוש בשני אתרים בו-זמנית</translation>
 <translation id="4909038193460299775">‏החשבון הזה מנוהל על-ידי <ph name="DOMAIN" />, ולכן הסימניות, ההיסטוריה, הסיסמאות והגדרות אחרות יימחקו מהמכשיר הזה. עם זאת, הנתונים עדיין יישארו בחשבון Google שלך ותוכל לנהל אותם ב<ph name="BEGIN_LINK" />מרכז השליטה של Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">נרשמת בהצלחה</translation>
@@ -2540,6 +2551,7 @@
 <translation id="4955814292505481804">שנתי</translation>
 <translation id="4957949153200969297">הפעלה רק של תכונות הקשורות לסינכרון <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">הצגת כל הכרטיסיות במקום אחד</translation>
 <translation id="496226124210045887">התיקיה שבחרת מכילה קבצים רגישים. האם אתה בטוח שברצונך להעניק ל-"$1" גישה קבועה לקריאה בתיקיה זו?</translation>
 <translation id="4964455510556214366">סידור</translation>
 <translation id="4964673849688379040">בודק...</translation>
@@ -2587,6 +2599,7 @@
 <translation id="5027562294707732951">התקנת התוסף</translation>
 <translation id="5029568752722684782">נקה את העותק</translation>
 <translation id="5030338702439866405">הונפק על ידי</translation>
+<translation id="503155457707535043">הורדת האפליקציות מתבצעת</translation>
 <translation id="503498442187459473"><ph name="HOST" /> רוצה להשתמש במצלמה ובמיקרופון שלך</translation>
 <translation id="5036662165765606524">אל תאפשר לאף אתר להוריד קבצים מרובים באופן אוטומטי</translation>
 <translation id="5037676449506322593">בחר הכל</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">השתק</translation>
 <translation id="5785583009707899920">‏תוכניות שירות של Chrome לקבצים</translation>
 <translation id="5787146423283493983">הסכם מפתח</translation>
+<translation id="5788127256798019331">‏קובצי Play</translation>
 <translation id="5788367137662787332">מצטערים, לא ניתן להעלות לפחות מחיצה אחת במכשיר <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">פתח תמיד באמצעות מציג המערכת</translation>
 <translation id="5794786537412027208">‏בצע יציאה מכל יישומי Chrome</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">מתורגם</translation>
 <translation id="5991049340509704927">הגדל</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציה הזו.}two{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}many{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}other{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}}</translation>
-<translation id="5993332328670040093">השימוש בנתונים כבר לא יימדד.</translation>
 <translation id="6002458620803359783">קולות מועדפים</translation>
 <translation id="6005695835120147974">נתב מדיה</translation>
 <translation id="6006484371116297560">קלאסי</translation>
@@ -3355,6 +3368,7 @@
 <translation id="6178664161104547336">בחר אישור</translation>
 <translation id="6181431612547969857">ההורדה נחסמה</translation>
 <translation id="6185132558746749656">מיקום מכשיר</translation>
+<translation id="6185617499004995178">‏מאמת CUPS IPP</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">הגדרה או ניהול של שיתופי קבצים ברשת.</translation>
 <translation id="6189412234224385711">פתח באמצעות <ph name="EXTENSION_NAME" /></translation>
@@ -3387,6 +3401,7 @@
 <translation id="6231881193380278751">‏הוסף פרמטר שאילתה בכתובת האתר כדי לרענן את הדף באופן אוטומטי: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">סוללה</translation>
 <translation id="6232116551750539448">החיבור אל <ph name="NAME" /> נותק</translation>
+<translation id="6235700927623181151">הכרטיסייה הזו משתפת את תוכן שולחן העבודה שלך.</translation>
 <translation id="6237816943013845465">הגדרה זו מאפשרת לך לקבוע את רזולוציית המסך</translation>
 <translation id="6238923052227198598">המשך הצגת ההודעה האחרונה במסך הנעילה</translation>
 <translation id="6239558157302047471">טען מחדש את ה&amp;מסגרת</translation>
@@ -3421,7 +3436,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">הורדת הקובץ <ph name="FILE_NAME" /> אינה נפוצה והוא עלול להיות מסוכן.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{מדפסת חדשה ברשת שלך}two{מדפסות חדשות ברשת שלך}many{מדפסות חדשות ברשת שלך}other{מדפסות חדשות ברשת שלך}}</translation>
-<translation id="6286684120317096255">השימוש בנתונים נמדד כעת</translation>
 <translation id="6286708577777130801">פרטי סיסמה שמורה</translation>
 <translation id="6287852322318138013">בחירת יישום לפתיחת הקובץ</translation>
 <translation id="6289452883081499048">‏שירותי Google מותאמים אישית, כמו Play</translation>
@@ -3532,6 +3546,7 @@
 <translation id="6451180435462401570">‏נהל מכשירי Cloud Print</translation>
 <translation id="6451689256222386810">אם שכחת את ביטוי הסיסמה או אם ברצונך לשנות את ההגדרה הזו, <ph name="BEGIN_LINK" />אפס את הסנכרון<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">דחה</translation>
+<translation id="6455264371803474013">באתרים ספציפיים</translation>
 <translation id="6455894534188563617">&amp;תיקייה חדשה</translation>
 <translation id="6456394469623773452">טוב</translation>
 <translation id="6456631036739229488">‏הטלפון שהוגדר ל-Smart Lock השתנה. עליך להזין את הסיסמה שלך כדי לעדכן את Smart Lock. בפעם הבאה, הטלפון שלך יבטל את הנעילה של <ph name="DEVICE_TYPE" />. בהגדרות אפשר להשבית את Smart Lock.</translation>
@@ -3609,6 +3624,7 @@
 <translation id="657402800789773160">&amp;טען דף זה מחדש</translation>
 <translation id="6577284282025554716">ההורדה בוטלה: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">‏הצפן סיסמאות מסונכרנות עם שם המשתמש והסיסמה שלך ב-Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - תוכן שולחן העבודה משותף</translation>
 <translation id="6580151766480067746">‏גירסת ARC</translation>
 <translation id="6581162200855843583">‏קישור ל-Google Drive</translation>
 <translation id="6582421931165117398">כדאי לשנות את הסיסמה עכשיו כדי להגן על המידע האישי. תוצג לך בקשה להיכנס לחשבונך לפני שינוי הסיסמה.</translation>
@@ -4075,6 +4091,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{‏האפליקציה הזו עלולה למנוע מ-Chrome לפעול כמו שצריך.}two{‏האפליקציות האלה עלולות למנוע מ-Chrome לפעול כמו שצריך.}many{‏האפליקציות האלה עלולות למנוע מ-Chrome לפעול כמו שצריך.}other{‏האפליקציות האלה עלולות למנוע מ-Chrome לפעול כמו שצריך.}}</translation>
 <translation id="7303900363563182677">האתר הזה לא יכול לגשת אל טקסט ותמונות שהועתקו ללוח העריכה</translation>
 <translation id="730515362922783851">החלפת נתונים עם כל מכשיר המחובר לרשת המקומית או לאינטרנט</translation>
+<translation id="7307129035224081534">מושהה</translation>
 <translation id="7308002049209013926">‏מפעיל האפליקציות עוזר לך לגשת במהירות לאפליקציות ולפעילויות חדשות. כדי להגיע לכאן בעזרת המקלדת יש להקיש Alt + Shift + L.</translation>
 <translation id="7309257895202129721">הצג &amp;פקדים</translation>
 <translation id="7310598146671372464">‏ההתחברות נכשלה. השרת לא תומך בסוגי הצפנת Kerberos שצוינו. צריך לפנות אל מנהל המערכת.</translation>
@@ -4132,7 +4149,6 @@
 <translation id="7400839060291901923">הגדר את החיבור בטלפון <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">חלונות קופצים חסומים</translation>
 <translation id="7407430846095439694">ייבא ושייך</translation>
-<translation id="7409233648990234464">‏הפעל מחדש ובצע Powerwash</translation>
 <translation id="7409836189476010449">‏להפעיל Flash</translation>
 <translation id="7410344089573941623">שאל אם <ph name="HOST" /> רוצה גישה למצלמה ולמיקרופון</translation>
 <translation id="741204030948306876">כן, אני רוצה</translation>
@@ -4165,6 +4181,7 @@
 <translation id="7465778193084373987">‏כתובת אתר לביטול אישור של Netscape</translation>
 <translation id="7469894403370665791">התחבר אוטומטית לרשת זו.</translation>
 <translation id="747114903913869239">שגיאה: לא ניתן לפענח תוסף</translation>
+<translation id="7473753388963818366">עכשיו נכין את ה-<ph name="DEVICE_TYPE" /> לשימוש</translation>
 <translation id="7473891865547856676">לא, תודה</translation>
 <translation id="747459581954555080">שחזר הכל</translation>
 <translation id="7475671414023905704">‏כתובת אתר לסיסמה שאבדה של Netscape</translation>
@@ -4287,6 +4304,7 @@
 <translation id="7665369617277396874">הוסף חשבון</translation>
 <translation id="7671130400130574146">השתמש בגבולות ובשורת הכותרת של המערכת</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, ב-<ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">‏שליחת הקלטה של הקול שלך אל Google מאפשרת הכתבה בכל תיבת טקסט.</translation>
 <translation id="7681095912841365527">‏האתר רשאי להשתמש ב-Bluetooth</translation>
 <translation id="7683373461016844951">כדי להמשיך יש ללחוץ על 'אישור' ולאחר מכן ללחוץ על 'הוספת משתמש' כדי ליצור פרופיל חדש בשביל כתובת האימייל שלך ב-<ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">הותקן על ידי מנהל המערכת שלך</translation>
@@ -4328,6 +4346,7 @@
 <translation id="7740996059027112821">רגילה</translation>
 <translation id="7748528009589593815">הכרטיסייה הקודמת</translation>
 <translation id="7748626145866214022">‏אפשרויות נוספות זמינות בסרגל הפעולות. הקשה על Alt + A תדגיש את סרגל הפעולות.</translation>
+<translation id="7750228210027921155">תמונה בתוך תמונה</translation>
 <translation id="7751260505918304024">הצג הכל</translation>
 <translation id="7754704193130578113">שאל היכן לשמור כל קובץ לפני הורדתו</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4435,6 +4454,7 @@
 <translation id="7857949311770343000">האם זהו דף הכרטיסייה החדשה שציפית לראות?</translation>
 <translation id="786073089922909430">שירות: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;הורדות</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{‏קובץ Cookie אחד}two{‏# קובצי Cookie}many{‏# קובצי Cookie}other{‏# קובצי Cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - מותאם</translation>
 <translation id="7870730066603611552">בדיקת אפשרויות הסינכרון אחרי ההגדרה</translation>
 <translation id="7870790288828963061">לא נמצאו אפליקציות קיוסק בגרסה חדשה יותר. אין צורך בעדכון. הסר את הדיסק און קי.</translation>
@@ -4756,6 +4776,7 @@
 <translation id="8373553483208508744">השתק כרטיסיות</translation>
 <translation id="8382913212082956454">העתק &amp;כתובת אימייל</translation>
 <translation id="8386903983509584791">הסריקה הושלמה</translation>
+<translation id="8389492867173948260">מתן הרשאה לתוסף הזה לקרוא ולשנות את כל הנתונים שלך באתרים שאליהם נכנסת:</translation>
 <translation id="8390449457866780408">השרת אינו זמין.</translation>
 <translation id="8391712576156218334">התמונה לא זמינה. צריך לנסות שוב מאוחר יותר.</translation>
 <translation id="8392234662362215700">‏כדי להחליף את פריסת המקלדת, הקש על Control‏-Shift-מקש הרווח.</translation>
@@ -4787,6 +4808,7 @@
 <translation id="84297032718407999">בעוד <ph name="LOGOUT_TIME_LEFT" /> תבוצע יציאה מהחשבון</translation>
 <translation id="8431909052837336408">‏שנה את מספר ה-PIN של ה-SIM</translation>
 <translation id="8434480141477525001">יציאת ניפוי באגים של לקוח מקומי</translation>
+<translation id="8435395510592618362">אימות הזהות שלך בעזרת <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">שמור כרטיס אשראי</translation>
 <translation id="8438328416656800239">החלף לדפדפן חכם</translation>
 <translation id="8438566539970814960">שיפור החיפושים והגלישה</translation>
@@ -4813,6 +4835,7 @@
 <translation id="8465252176946159372">לא חוקי</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> צריך אישור ממך כדי לפעול</translation>
 <translation id="8466234950814670489">‏ארכיון TAR</translation>
+<translation id="8466417995783206254">בכרטיסייה הזו מופעל סרטון במצב 'תמונה בתוך תמונה'.</translation>
 <translation id="8468750959626135884">‏בטל את הנעילה של <ph name="DEVICE_TYPE" /> באמצעות טלפון ה-Android שלך.</translation>
 <translation id="8470028084415844044">כדי שכל הסיסמאות יהיו זמינות בכל המכשירים שברשותך, צריך להפעיל את הסינכרון.</translation>
 <translation id="8470513973197838199">סיסמאות שנשמרו בשביל <ph name="ORIGIN" /></translation>
@@ -4833,6 +4856,7 @@
 <translation id="8496717697661868878">הרץ פלאגין זה</translation>
 <translation id="8497219075884839166">‏תוכניות שירות של Windows</translation>
 <translation id="8498214519255567734">מקל עליך להביט במסך או לקרוא באור מעומעם</translation>
+<translation id="8498395510292172881">‏המשך קריאה ב-Chrome</translation>
 <translation id="8503813439785031346">שם משתמש</translation>
 <translation id="850875081535031620">לא נמצאו תוכנות מזיקות</translation>
 <translation id="8509646642152301857">הורדת המילון לבדיקת איות נכשלה.</translation>
@@ -4983,7 +5007,6 @@
 <translation id="8725066075913043281">נסה שוב</translation>
 <translation id="8725178340343806893">מועדפים/סימניות</translation>
 <translation id="8726206820263995930">אירעה שגיאה בעת הבאת הגדרות מדיניות מהשרת: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">אל תציג הודעה זו שוב</translation>
 <translation id="8727344521467137076">‏יש תוכנה מזיקה במחשב. כדי להחזיר את הדפדפן לפעילות רגילה, Chrome מסיר את התוכנה ומשחזר את ההגדרות שלך.</translation>
 <translation id="8730621377337864115">בוצע</translation>
 <translation id="8732030010853991079">השתמש בתוסף זה על ידי לחיצה על סמל זה.</translation>
@@ -5174,6 +5197,7 @@
 <translation id="9027459031423301635">פתח קישור בכרטיסייה &amp;חדשה</translation>
 <translation id="9030515284705930323">‏הארגון שלך לא הפעיל את חנות Google Play בחשבון שלך. למידע נוסף, פנה למנהל המערכת.</translation>
 <translation id="9033857511263905942">&amp;הדבק</translation>
+<translation id="9034924485347205037">‏קובצי Linux</translation>
 <translation id="9035012421917565900">לא ניתן להחזיר את הפריטים אל '<ph name="DESTINATION_NAME" />', ולא ניתן לבטל את הפעולה.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">הצג מקור</translation>
@@ -5274,6 +5298,7 @@
 <translation id="9173995187295789444">‏מחפש מכשירי Bluetooth...</translation>
 <translation id="9176611096776448349">‏<ph name="WINDOW_TITLE" /> - מכשיר Bluetooth מחובר</translation>
 <translation id="9177499212658576372">אתה מחובר כעת לרשת <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">‏הגדרת Linux (בטא) ב-<ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">‏הפעולה עשויה להימשך מספר דקות. מתבצעת הפעלה של הקונטיינר של Linux.</translation>
 <translation id="9180380851667544951">האתר רשאי לשתף את המסך</translation>
 <translation id="9188441292293901223">‏עדכן את הטלפון לגרסה חדשה יותר של Android כדי לבטל את הנעילה של <ph name="DEVICE_TYPE" /> זה.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 8a835c5f..8e7781182 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">アクセスする前に確認する</translation>
 <translation id="1434696352799406980">起動ページ、新しいタブページ、検索エンジン、固定タブをリセットします。また、すべての拡張機能を無効にし、Cookie などの一時データを消去します。ただし、ブックマーク、履歴、保存したパスワードはそのまま残ります。</translation>
 <translation id="1434886155212424586">ホームページは新しいタブのページです</translation>
+<translation id="1436671784520050284">設定を続行</translation>
 <translation id="1436784010935106834">削除しました</translation>
 <translation id="1438632560381091872">タブのミュートを解除</translation>
 <translation id="1442392616396121389">ルーティング プレフィックス</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">ピザ</translation>
 <translation id="1467432559032391204">左</translation>
 <translation id="1468571364034902819">このプロフィールは使用できません</translation>
+<translation id="1470533772306424441">これらのアプリをインストールします。Play ストアでは他にもお使いの端末用のアプリを探すことができます。</translation>
 <translation id="1470811252759861213">お使いのどの端末でも同じ拡張機能を使用するには、<ph name="SIGN_IN_LINK" />します。</translation>
 <translation id="1474339897586437869">「<ph name="FILENAME" />」はアップロードされていません。Google ドライブに十分な空き容量がありません。</translation>
 <translation id="1475502736924165259">他のどのカテゴリにも適合しない証明書がファイルに格納されています</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">縮小(&amp;O)</translation>
 <translation id="1830550083491357902">ログインしていません</translation>
 <translation id="1832511806131704864">スマートフォンの変更が反映されました</translation>
-<translation id="1832685970989658809">保存したお支払い方法は管理者によって無効にされています</translation>
 <translation id="1834503245783133039"><ph name="FILE_NAME" /> をダウンロードできませんでした</translation>
 <translation id="1838374766361614909">検索をクリア</translation>
 <translation id="1838709767668011582">Google サイト</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">取得先:</translation>
 <translation id="2193365732679659387">信頼の設定</translation>
 <translation id="2195729137168608510">電子メールの保護</translation>
+<translation id="2199298570273670671">エラー</translation>
 <translation id="2200356397587687044">続行するには Chrome に権限が必要です</translation>
 <translation id="220138918934036434">ボタンを非表示にする</translation>
 <translation id="2202898655984161076">プリンタのリスト作成中に問題が発生しました。一部のプリンタが <ph name="CLOUD_PRINT_NAME" /> に正常に登録されていない可能性があります。</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">パスワードを表示</translation>
 <translation id="2436186046335138073">すべての <ph name="PROTOCOL" /> リンクを <ph name="HANDLER_HOSTNAME" /> で開きますか?</translation>
 <translation id="2436707352762155834">最小</translation>
-<translation id="2437139306601019091">データ使用量の測定が終了しました</translation>
 <translation id="2440604414813129000">ソースを表示(&amp;O)</translation>
 <translation id="2445081178310039857">拡張機能のルート ディレクトリを指定してください。</translation>
 <translation id="2445484935443597917">新しいプロフィールを作成</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> が本人確認を求めています</translation>
 <translation id="2448312741937722512">種類</translation>
 <translation id="2450223707519584812">Google API キーがないため、ユーザーを追加できません。詳しくは、<ph name="DETAILS_URL" /> をご覧ください。</translation>
 <translation id="2450310832094867474">同期をオフにしてログアウトしますか?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">このファイルは既に存在します</translation>
 <translation id="2453860139492968684">終了</translation>
 <translation id="2454247629720664989">キーワード</translation>
+<translation id="245661998428026871">ピクチャー イン ピクチャー モードの動画は再生が停止されます。</translation>
 <translation id="2457246892030921239">「<ph name="APP_NAME" />」が <ph name="VOLUME_NAME" /> のファイルのコピーを求めています。</translation>
 <translation id="2462724976360937186">認証局キー ID</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> を追加しました</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">タブのミュートを解除</translation>
 <translation id="3053013834507634016">証明書キーの用途</translation>
 <translation id="3057861065630527966">写真や動画をバックアップします</translation>
+<translation id="3059313675706898490">Android メッセージ</translation>
 <translation id="3060379269883947824">「選択して読み上げ」を有効にする</translation>
 <translation id="3061707000357573562">サービスへのパッチの適用</translation>
 <translation id="3064410671692449875">データが不足しています</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">パスワードをお忘れの場合</translation>
 <translation id="3132996321662585180">毎日更新する</translation>
 <translation id="3135204511829026971">画面を回転</translation>
+<translation id="313638818480447860">この端末用に最適化された <ph name="NUMBER_OF_APPS" /> 件のアプリがアカウントに関連付けられています。</translation>
 <translation id="313963229645891001">ダウンロードしています。<ph name="STATUS" /></translation>
 <translation id="3139925690611372679">デフォルトの黄のアバター</translation>
 <translation id="3140353188828248647">アドレスバーにフォーカスを移す</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">スペルチェック</translation>
 <translation id="3183139917765991655">プロフィール インポーター</translation>
 <translation id="3184560914950696195">$1 に保存することができません。編集した画像はダウンロード フォルダに保存されます。</translation>
+<translation id="3188257591659621405">マイファイル</translation>
 <translation id="3188465121994729530">移動平均</translation>
 <translation id="3190558889382726167">パスワードを保存しました</translation>
 <translation id="3192947282887913208">音声ファイル</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> を圧縮しています...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />)<ph name="LONGTZNAME" />(<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">アプリ情報</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - ピクチャー イン ピクチャー モードで再生中の動画</translation>
 <translation id="3335337277364016868">録音された年</translation>
 <translation id="3335947283844343239">閉じたタブを開く</translation>
 <translation id="3336664756920573711">Android スマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除します</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">印刷できませんでした。プリンタを確認してもう一度お試しください。</translation>
 <translation id="3364721542077212959">タッチペン ツール</translation>
 <translation id="3365598184818502391">Ctrl キーまたは Alt キーのいずれかを使用してください</translation>
+<translation id="3367047597842238025"><ph name="DEVICE_TYPE" /> をカスタマイズして、さまざまな機能を思いのままに活用してください。</translation>
 <translation id="3368922792935385530">接続済み</translation>
 <translation id="3369624026883419694">ホストを解決しています...</translation>
 <translation id="337286756654493126">アプリケーションで開いたフォルダに書き込む</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">タスクバーで <ph name="SMALL_PRODUCT_LOGO" /> アイコンを右クリックします</translation>
 <translation id="3391716558283801616">タブ 7</translation>
 <translation id="3396331542604645348">選択したプリンタは利用できないか、正しくインストールされていません。プリンタを確認するか、別のプリンタを選択してみてください。</translation>
+<translation id="3396800784455899911">[同意して続行] をクリックすると、これらの Google サービスに関する上記の処理内容に同意したことになります。</translation>
 <translation id="3399432415385675819">通知が無効になります</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />、<ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">このサイト用に保存されているパスワードはありません</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">ファイルシステムがサポートされていないため、このデバイスを開くことはできません。</translation>
 <translation id="3727148787322499904">この設定を変更すると、共有しているすべてのネットワークに影響します</translation>
 <translation id="3727187387656390258">ポップアップを検証</translation>
+<translation id="3729506734996624908">許可したサイト</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" /> 行目にエラーがあります</translation>
 <translation id="3733127536501031542">International Step-UP 対応の SSL サーバー</translation>
+<translation id="3735740477244556633">並べ替え</translation>
 <translation id="3737274407993947948">Linux のインストール中にエラーが発生しました...</translation>
 <translation id="3737536731758327622">ダウンロードがここに表示されます</translation>
+<translation id="3738671331307774213">本人確認をすることで、個人データを保護できます</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> を開きますか?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> は管理コンソールに表示されます</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">ウェブサイト、Android アプリなどの開発に役立つツールをご利用ください。Linux をインストールする際には <ph name="DOWNLOAD_SIZE" /> のデータがダウンロードされます。</translation>
 <translation id="385051799172605136">戻る</translation>
 <translation id="3851428669031642514">安全でないスクリプトを読み込む</translation>
+<translation id="3854599674806204102">オプションを選択してください</translation>
 <translation id="3855441664322950881">拡張機能をパッケージ化</translation>
 <translation id="3855676282923585394">ブックマークと設定をインポート...</translation>
 <translation id="3856800405688283469">タイムゾーンを選択</translation>
-<translation id="3856921555429624101">データ使用量の測定が終了しました</translation>
 <translation id="3857228364945137633">Smart Lock を使用すると、スマートフォンが近くにあるときに、パスワードを入力しなくても <ph name="DEVICE_TYPE" /> のロックを解除できます。</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: 同期が一時停止されています</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">すべてをシークレット ウィンドウで開く</translation>
 <translation id="4508265954913339219">起動に失敗しました</translation>
 <translation id="4508765956121923607">ソースを表示(&amp;O)</translation>
-<translation id="4509823033118379431">現在画像を利用することができません。コレクションを表示するには、接続しなおしてください。</translation>
 <translation id="451407183922382411">Powered by <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">新しい監視対象ユーザーを設定します</translation>
 <translation id="4514610446763173167">動画の再生と一時停止を切り替え</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">他の端末で開いたタブ</translation>
 <translation id="4628314759732363424">変更...</translation>
 <translation id="4628757576491864469">デバイス</translation>
+<translation id="4628948037717959914">写真</translation>
 <translation id="4630590996962964935">「$1」は無効な文字です。</translation>
 <translation id="4631887759990505102">アーティスト</translation>
 <translation id="4632483769545853758">タブのミュートを解除</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" />をバックアップできます</translation>
 <translation id="4907161631261076876">このファイルは一般的にダウンロードされているファイルではなく、危害を及ぼす可能性があります。</translation>
 <translation id="4907306957610201395">権限のカテゴリ</translation>
-<translation id="4907824805858067479">保存したカードは管理者によって無効になっています</translation>
 <translation id="4908811072292128752">新しいタブを開いて 2 つのサイトを同時に閲覧できます</translation>
 <translation id="4909038193460299775">このアカウントは <ph name="DOMAIN" /> で管理されているため、ブックマーク、履歴、パスワードなどの設定はこの端末から消去されます。ただし、データは Google アカウントに保存され、<ph name="BEGIN_LINK" />Google ダッシュボード<ph name="END_LINK" />で管理できます。</translation>
 <translation id="4909359680501173791">登録が完了しました</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">年間</translation>
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> 同期に関連する機能のみを有効にします</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">すべてのカードを 1 か所で保管できます</translation>
 <translation id="496226124210045887">選択したフォルダには、機密ファイルが含まれています。このフォルダに対する永続的な読み取りアクセス権を「$1」に付与してもよろしいですか?</translation>
 <translation id="4964455510556214366">配置</translation>
 <translation id="4964673849688379040">確認しています...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">拡張機能を追加</translation>
 <translation id="5029568752722684782">コピーを消去</translation>
 <translation id="5030338702439866405">発行元</translation>
+<translation id="503155457707535043">アプリをダウンロード中</translation>
 <translation id="503498442187459473"><ph name="HOST" /> から、カメラとマイクの使用許可を求められています</translation>
 <translation id="5036662165765606524">複数ファイルの自動ダウンロードをどのサイトにも許可しない</translation>
 <translation id="5037676449506322593">すべてを選択</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">ミュート</translation>
 <translation id="5785583009707899920">Chrome ファイル ユーティリティ</translation>
 <translation id="5787146423283493983">キー合意</translation>
+<translation id="5788127256798019331">Play ファイル</translation>
 <translation id="5788367137662787332">デバイス <ph name="DEVICE_LABEL" /> の少なくとも 1 つのパーティションがマウントできませんでした。</translation>
 <translation id="5794414402486823030">常にシステム ビューアで開く</translation>
 <translation id="5794786537412027208">すべての Chrome アプリを終了</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">翻訳済み</translation>
 <translation id="5991049340509704927">拡大表示</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{今後もウェブ ブラウジングを続けられるように、管理者にこのアプリケーションの削除を依頼してください。}other{今後もウェブ ブラウジングを続けられるように、管理者にこれらのアプリケーションの削除を依頼してください。}}</translation>
-<translation id="5993332328670040093">データ使用量はこれ以上測定されません。</translation>
 <translation id="6002458620803359783">使用する音声</translation>
 <translation id="6005695835120147974">メディア ルーター</translation>
 <translation id="6006484371116297560">クラシック</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">証明書の選択</translation>
 <translation id="6181431612547969857">ダウンロードがブロックされました</translation>
 <translation id="6185132558746749656">デバイスの位置情報</translation>
+<translation id="6185617499004995178">CUPS IPP 検証ツール</translation>
 <translation id="6185696379715117369">ページ内を上に移動</translation>
 <translation id="6189273858858366896">ネットワーク ファイル共有を設定または管理する。</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> で開く</translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">ページを自動更新するには URL にクエリ パラメータを追加します: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">バッテリー</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> への接続が切断されました</translation>
+<translation id="6235700927623181151">このタブはパソコンのコンテンツを共有しています。</translation>
 <translation id="6237816943013845465">画面の解像度を調整できます</translation>
 <translation id="6238923052227198598">ロック画面に最新のメモを表示する</translation>
 <translation id="6239558157302047471">フレームを再読み込み(&amp;F)</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> は一般的にダウンロードされているファイルではなく、危害を及ぼす可能性があります。</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{ネットワーク上の新しいプリンタ}other{ネットワーク上の新しいプリンタ}}</translation>
-<translation id="6286684120317096255">データ使用量が測定されます</translation>
 <translation id="6286708577777130801">保存パスワードの詳細</translation>
 <translation id="6287852322318138013">このファイルを開くアプリを選択してください</translation>
 <translation id="6289452883081499048">Play などの Google サービスがカスタマイズされます</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">クラウド プリント端末を管理</translation>
 <translation id="6451689256222386810">パスフレーズを忘れた場合や、この設定を変更する場合は、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />します。</translation>
 <translation id="6452181791372256707">拒否</translation>
+<translation id="6455264371803474013">特定のサイト</translation>
 <translation id="6455894534188563617">新しいフォルダ(&amp;N)</translation>
 <translation id="6456394469623773452">中程度</translation>
 <translation id="6456631036739229488">Smart Lock に使用するスマートフォンが変更されました。Smart Lock を更新するにはパスワードを入力してください。次回から、新しいスマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除できます。Smart Lock を無効にするには [設定] で指定します。</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">ページを再読み込み(&amp;R)</translation>
 <translation id="6577284282025554716"><ph name="FILE_NAME" /> のダウンロードがキャンセルされました</translation>
 <translation id="6578664922716508575">Google のユーザー名とパスワードを使用して同期パスワードを暗号化する</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - パソコンのコンテンツが共有されています</translation>
 <translation id="6580151766480067746">ARC バージョン</translation>
 <translation id="6581162200855843583">Google ドライブ リンク</translation>
 <translation id="6582421931165117398">個人情報を保護するために、今すぐパスワードを変更してください。パスワードを変更する際は、まずログインが求められます。</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{このアプリケーションは、Chrome の正常な動作を妨げる可能性があります。}other{これらのアプリケーションは、Chrome の正常な動作を妨げる可能性があります。}}</translation>
 <translation id="7303900363563182677">このサイトでは、クリップボードにコピーされているテキストや画像へのアクセスがブロックされています</translation>
 <translation id="730515362922783851">ローカル ネットワークまたはインターネット上のデバイスとのデータ交換</translation>
+<translation id="7307129035224081534">一時停止中</translation>
 <translation id="7308002049209013926">ランチャーを使うと、新しいアプリやアクティビティにすばやく移動できます。キーボードからランチャーを表示するには、Alt+Shift+L キーを押します。</translation>
 <translation id="7309257895202129721">コントロールを表示(&amp;C)</translation>
 <translation id="7310598146671372464">ログインできませんでした。指定した Kerberos 暗号化タイプがサーバーでサポートされていません。管理者にお問い合わせください。</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">「<ph name="PHONE_NAME" />」で接続設定を行ってください</translation>
 <translation id="740624631517654988">ポップアップがブロックされました</translation>
 <translation id="7407430846095439694">インポートしてバインド</translation>
-<translation id="7409233648990234464">再起動と Powerwash</translation>
 <translation id="7409836189476010449">Flash の実行</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> がカメラやマイクへのアクセスを要求しているか確認する</translation>
 <translation id="741204030948306876">有効にする</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">Netscape 証明書取り消し URL</translation>
 <translation id="7469894403370665791">このネットワークに自動接続する</translation>
 <translation id="747114903913869239">エラー: 拡張機能をデコードできません</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> の設定を始めましょう</translation>
 <translation id="7473891865547856676">スキップ</translation>
 <translation id="747459581954555080">すべて復元</translation>
 <translation id="7475671414023905704">Netscape パスワード紛失 URL</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">アカウントを追加</translation>
 <translation id="7671130400130574146">システム タイトル バーと枠線の使用</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" /> 内の <ph name="HUNG_IFRAME_URL" /> が停止しています。</translation>
+<translation id="7676867886086876795">テキスト欄で音声入力できるように Google に音声を送信します。</translation>
 <translation id="7681095912841365527">サイトに Bluetooth の使用が許可されています</translation>
 <translation id="7683373461016844951">利用を続けるには、[OK]、[ユーザーを追加] の順にクリックして、<ph name="DOMAIN" /> のメールアドレス用の新しいプロフィールを作成してください。</translation>
 <translation id="7684212569183643648">管理者によりインストールされています</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">標準</translation>
 <translation id="7748528009589593815">前のタブ</translation>
 <translation id="7748626145866214022">アクションバーのオプションが増えました。アクションバーにフォーカスを移動するには Alt+A キーを押してください。</translation>
+<translation id="7750228210027921155">ピクチャー イン ピクチャー</translation>
 <translation id="7751260505918304024">すべて表示</translation>
 <translation id="7754704193130578113">ダウンロード前に各ファイルの保存場所を確認する</translation>
 <translation id="7758143121000533418">ファミリー リンク</translation>
@@ -4441,6 +4460,7 @@
 <translation id="7857949311770343000">この新しいタブ ページでよろしいですか?</translation>
 <translation id="786073089922909430">サービス: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">ダウンロード(&amp;D)</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 件の Cookie}other{# 件の Cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ペア設定済み</translation>
 <translation id="7870730066603611552">設定後に同期オプションを確認する</translation>
 <translation id="7870790288828963061">新しいバージョンのキオスクアプリが見つかりませんでした。更新するものはありません。USB スティックを取り外してください。</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">タブをミュート</translation>
 <translation id="8382913212082956454">メール アドレスをコピー(&amp;E)</translation>
 <translation id="8386903983509584791">スキャンが完了しました</translation>
+<translation id="8389492867173948260">アクセスしたウェブサイト上にある自分の全データの読み取りと変更をこの拡張機能に許可します。</translation>
 <translation id="8390449457866780408">サーバーを使用できません。</translation>
 <translation id="8391712576156218334">画像を利用できません。しばらくしてからもう一度お試しください。</translation>
 <translation id="8392234662362215700">キーボードのレイアウトを切り替えるには Ctrl+Shift+Space を押してください。</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">あと <ph name="LOGOUT_TIME_LEFT" />でログアウトします</translation>
 <translation id="8431909052837336408">SIM PIN を変更</translation>
 <translation id="8434480141477525001">NaCl デバッグ ポート</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> で本人確認を行う</translation>
 <translation id="843760761634048214">クレジット カードを保存</translation>
 <translation id="8438328416656800239">スマートなブラウザをぜひご利用ください</translation>
 <translation id="8438566539970814960">検索とブラウジングを改善する</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">無効です</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> が実行の許可を求めています</translation>
 <translation id="8466234950814670489">tar アーカイブ</translation>
+<translation id="8466417995783206254">このタブではピクチャー イン ピクチャー モードで動画を再生しています。</translation>
 <translation id="8468750959626135884">Android スマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除します。</translation>
 <translation id="8470028084415844044">お使いのどの端末でも同じパスワードを使用するには、同期を有効にします。</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> 用に保存されているパスワード</translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">このプラグインを実行する</translation>
 <translation id="8497219075884839166">Windows ユーティリティ</translation>
 <translation id="8498214519255567734">薄明かりの下でも画面を見やすくします</translation>
+<translation id="8498395510292172881">Chrome で続きを読む</translation>
 <translation id="8503813439785031346">ユーザー名</translation>
 <translation id="850875081535031620">有害なソフトウェアは見つかりませんでした</translation>
 <translation id="8509646642152301857">スペルチェック辞書をダウンロードできませんでした。</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">やり直し</translation>
 <translation id="8725178340343806893">お気に入り/ブックマーク</translation>
 <translation id="8726206820263995930">サーバーからポリシー設定を取得するときにエラーが発生しました: <ph name="CLIENT_ERROR" />。</translation>
-<translation id="8727142376512517020">今後このメッセージを表示しない</translation>
 <translation id="8727344521467137076">お使いのパソコンに有害なソフトウェアが見つかりました。Chrome でこのソフトウェアを削除中です。その後、ブラウザを正常な動作に戻すために設定が復元されます。</translation>
 <translation id="8730621377337864115">完了</translation>
 <translation id="8732030010853991079">この拡張機能を使用するには、このアイコンをクリックします。</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">新しいタブで開く(&amp;T)</translation>
 <translation id="9030515284705930323">組織の設定により、アカウントで Google Play ストアをご利用いただくことができません。詳しくは管理者にお尋ねください。</translation>
 <translation id="9033857511263905942">貼り付け(&amp;P)</translation>
+<translation id="9034924485347205037">Linux ファイル</translation>
 <translation id="9035012421917565900">この操作は元に戻せません(これらのアイテムを「<ph name="DESTINATION_NAME" />」に戻すことはできません)。</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">原文のページを表示</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Bluetooth デバイスをスキャンしています...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth デバイスに接続されています</translation>
 <translation id="9177499212658576372">現在 <ph name="NETWORK_TYPE" /> ネットワークに接続しています。</translation>
+<translation id="9179734824669616955"><ph name="DEVICE_TYPE" /> に Linux(ベータ版)をセットアップ</translation>
 <translation id="9180281769944411366">この処理には数分かかることがあります。Linux コンテナを起動します。</translation>
 <translation id="9180380851667544951">サイトに画面の共有が許可されています</translation>
 <translation id="9188441292293901223">この <ph name="DEVICE_TYPE" /> のロックを解除するには、スマートフォンを新しいバージョンの Android に更新してください。</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index 305e9ad..d93060d 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -295,6 +295,7 @@
 <translation id="1433811987160647649">ಪ್ರವೇಶಿಸುವ ಮೊದಲು ಕೇಳಿ</translation>
 <translation id="1434696352799406980">ಇದು ನಿಮ್ಮ ಪ್ರಾರಂಭ ಪುಟ, ಹೊಸ ಟ್ಯಾಬ್ ಪುಟ, ಹುಡುಕಾಟ ಎಂಜಿನ್ ಮತ್ತು ಪಿನ್ ಮಾಡಲಾದ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಮರುಹೊಂದಿಸುತ್ತದೆ. ಇದು ಎಲ್ಲ ವಿಸ್ತರಣೆಗಳು ಮತ್ತು ಕುಕೀಸ್‌ನಂತಹ ತಾತ್ಕಾಲಿಕ ಡೇಟಾವನ್ನು ಸಹ ತೆರವುಗೊಳಿಸುತ್ತದೆ. ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಉಳಿಸಿದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ತೆರವುಗೊಳಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="1434886155212424586">ಮುಖಪುಟವು ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವಾಗಿದೆ</translation>
+<translation id="1436671784520050284">ಸೆಟಪ್ ಮುಂದುವರಿಸಿ</translation>
 <translation id="1436784010935106834">ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation>
 <translation id="1438632560381091872">ಟ್ಯಾಬ್‌ಗಳನ್ನು ಅನ್‌ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
 <translation id="1442392616396121389">ರೂಟಿಂಗ್ ಪೂರ್ವಪ್ರತ್ಯಯ</translation>
@@ -314,6 +315,7 @@
 <translation id="1465827627707997754">ಪಿಜ್ಜಾ ಸ್ಲೈಸ್‌</translation>
 <translation id="1467432559032391204">ಎಡಕ್ಕೆ</translation>
 <translation id="1468571364034902819">ಈ ಪ್ರೊಫೈಲ್ ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ</translation>
+<translation id="1470533772306424441">ನಿಮಗಾಗಿ ನಾವು ಈ ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತೇವೆ. ನಿಮ್ಮ ಸಾಧನಕ್ಕಾಗಿ ನೀವು ಹೆಚ್ಚಿನ ಆ್ಯಪ್‌ಗಳನ್ನು Play ಸ್ಟೋರ್‌‌ ನಲ್ಲಿ ಹುಡುಕಬಹುದು.</translation>
 <translation id="1470811252759861213">ನಿಮ್ಮ ಎಲ್ಲಾ ಕಂಪ್ಯೂಟರ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ವಿಸ್ತರಣೆಗಳನ್ನು ಪಡೆಯಲು, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" ಅನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ನಿಮ್ಮ Google ಡ್ರೈವ್‌ನಲ್ಲಿ ಸಾಕಷ್ಟು ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ.</translation>
 <translation id="1475502736924165259">ಇತರ ಯಾವುದೇ ವರ್ಗಗಳಿಗೆ ಹೊಂದದಿರುವಂತಹ ಫೈಲ್‌ನಲ್ಲಿ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ನೀವು ಹೊಂದಿರುವಿರಿ</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">ಝೂಮ್ &amp;ಔಟ್</translation>
 <translation id="1830550083491357902">ಸೈನ್ ಇನ್ ಆಗಿಲ್ಲ</translation>
 <translation id="1832511806131704864">ಫೋನ್ ಬದಲಾವಣೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲಾಗಿದೆ</translation>
-<translation id="1832685970989658809">ಉಳಿಸಲಾದ ಪಾವತಿ ವಿಧಾನಗಳನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="1834503245783133039">ಡೌನ್‌ಲೋಡ್‌ ವಿಫಲಗೊಂಡಿದೆ: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">ಹುಡುಕಾಟ ತೆರವುಗೊಳಿಸಿ</translation>
 <translation id="1838709767668011582">Google ಸೈಟ್</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">ಇವರಿಂದ:</translation>
 <translation id="2193365732679659387">ವಿಶ್ವಾಸಾರ್ಹ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="2195729137168608510">ಇಮೇಲ್ ಭದ್ರತೆ</translation>
+<translation id="2199298570273670671">ದೋಷ</translation>
 <translation id="2200356397587687044">ಮುಂದುವರಿಯಲು, Chrome ಗೆ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="220138918934036434">ಬಟನ್ ಅನ್ನು ಮರೆಮಾಡು</translation>
 <translation id="2202898655984161076">ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುವಲ್ಲಿ ಸಮಸ್ಯೆ ಉಂಟಾಗಿದೆ. ನಿಮ್ಮ ಕೆಲವು ಪ್ರಿಂಟರ್‌ಗಳು <ph name="CLOUD_PRINT_NAME" /> ನೊಂದಿಗೆ ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಣಿ ಹೊಂದದೆ ಇರಬಹುದು.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ತೋರಿಸಿ</translation>
 <translation id="2436186046335138073"><ph name="PROTOCOL" /> ಎಲ್ಲಾ ಲಿಂಕ್‌ಗಳನ್ನು ತೆರೆಯಲು <ph name="HANDLER_HOSTNAME" /> ಗೆ ಅನುಮತಿಸುವುದೇ?</translation>
 <translation id="2436707352762155834">ಕನಿಷ್ಠ</translation>
-<translation id="2437139306601019091">ಡೇಟಾ ಬಳಕೆಯ ಮಾಪನ ಮುಕ್ತಾಯಗೊಂಡಿದೆ</translation>
 <translation id="2440604414813129000">ಮೂ&amp;ಲವನ್ನು ವೀಕ್ಷಿಸಿ</translation>
 <translation id="2445081178310039857">ವಿಸ್ತರಣೆ ಮೂಲ ಡೈರೆಕ್ಟರಿ ಅಗತ್ಯವಿದೆ.</translation>
 <translation id="2445484935443597917">ಹೊಸ ಪ್ರೊಫೈಲ್ ರಚಿಸಿ</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> ನಿಮ್ಮ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="2448312741937722512">ಪ್ರಕಾರ</translation>
 <translation id="2450223707519584812">Google API ಕೀಗಳು ಕಾಣೆಯಾಗಿರುವ ಕಾರಣ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಲು ನಿಮಗೆ ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ವಿವರಗಳಿಗೆ <ph name="DETAILS_URL" /> ನೋಡಿ.</translation>
 <translation id="2450310832094867474">ಸಿಂಕ್ ಅನ್ನು ಆಫ್ ಮಾಡಿ, ಸೈನ್ ಔಟ್ ಮಾಡುವುದೇ?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">ಈಗಾಗಲೇ ಫೈಲ್ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ</translation>
 <translation id="2453860139492968684">ಪೂರ್ಣಗೊಳಿಸು</translation>
 <translation id="2454247629720664989">ಕೀವರ್ಡ್</translation>
+<translation id="245661998428026871">'ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ' ಮೋಡ್‌ನಲ್ಲಿರುವ ವೀಡಿಯೊ, ಪ್ಲೇ ಆಗುವುದನ್ನು ನಿಲ್ಲಿಸುತ್ತದೆ.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ಅಪ್ಲಿಕೇಶನ್ <ph name="VOLUME_NAME" /> ನಿಂದ ಫೈಲ್‌ಗಳನ್ನು ನಕಲಿಸಲು ಬಯಸುತ್ತಿದೆ.</translation>
 <translation id="2462724976360937186">ಪ್ರಮಾಣದಪತ್ರದ ಪ್ರಾಧಿಕಾರ ಕೀ ID</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ಸೇರಿಸಲಾಗಿದೆ</translation>
@@ -1359,6 +1362,7 @@
 <translation id="304826556400666995">ಟ್ಯಾಬ್‌ಗಳನ್ನು ಅನ್‌ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
 <translation id="3053013834507634016">ಪ್ರಮಾಣಪತ್ರ ಕೀಲಿ ಬಳಕೆ</translation>
 <translation id="3057861065630527966">ನಿಮ್ಮ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ</translation>
+<translation id="3059313675706898490">Android ಸಂದೇಶಗಳು</translation>
 <translation id="3060379269883947824">ಧ್ವನಿ ಆಯ್ಕೆ ಮಾಡಿ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="3061707000357573562">ಪ್ಯಾಚ್ ಸೇವೆ</translation>
 <translation id="3064410671692449875">ಸಾಕಷ್ಟು ಡೇಟಾ ಇಲ್ಲ</translation>
@@ -1407,6 +1411,7 @@
 <translation id="313205617302240621">ಪಾಸ್‌ವರ್ಡ್ ಮರೆತಿರುವಿರಾ?</translation>
 <translation id="3132996321662585180">ಪ್ರತಿದಿನ ರಿಫ್ರೆಶ್ ಮಾಡಿ</translation>
 <translation id="3135204511829026971">ಪರದೆಯನ್ನು ತಿರುಗಿಸಿ</translation>
+<translation id="313638818480447860">ಈ ಸಾಧನಕ್ಕೆ ಸೂಕ್ತವಾಗಿರುವ <ph name="NUMBER_OF_APPS" /> ಆ್ಯಪ್‌ಗಳು ನಿಮ್ಮ ಖಾತೆಗೆ ಸಂಪರ್ಕಗೊಂಡಿವೆ ಎನ್ನುವುದನ್ನು ನಾವು ಕಂಡುಕೊಂಡಿದ್ದೇವೆ.</translation>
 <translation id="313963229645891001">ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">ಡಿಫಾಲ್ಟ್ ಹಳದಿ ಅವರಾರ್</translation>
 <translation id="3140353188828248647">ವಿಳಾಸ ಪಟ್ಟಿಯನ್ನು ಗಮನಿಸಿ</translation>
@@ -1437,6 +1442,7 @@
 <translation id="3182749001423093222">ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ</translation>
 <translation id="3183139917765991655">ಪ್ರೊಫೈಲ್ ಆಮದುದಾರ</translation>
 <translation id="3184560914950696195">$1 ಗೆ ಉಳಿಸಬೇಡಿ. ಸಂಪಾದಿಸಲಾದ ಚಿತ್ರಗಳನ್ನು ಡೌನ್‌ಲೋಡ್‌ಗಳ ಫೋಲ್ಡರ್‌ನಲ್ಲಿ ಉಳಿಸಲಾಗುತ್ತದೆ.</translation>
+<translation id="3188257591659621405">ನನ್ನ ಫೈಲ್‌ಗಳು</translation>
 <translation id="3188465121994729530">ಸರಿಸುವಿಕೆ ಸರಾಸರಿ</translation>
 <translation id="3190558889382726167">ಪಾಸ್‌ವರ್ಡ್ ಉಳಿಸಲಾಗಿದೆ</translation>
 <translation id="3192947282887913208">ಆಡಿಯೋ ಫೈಲ್‌ಗಳು</translation>
@@ -1524,6 +1530,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> ಅನ್ನು ಜಿಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">ಅಪ್ಲಿಕೇಶನ್‌ ಮಾಹಿತಿ</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ವೀಡಿಯೊ ಪ್ಲೇ ಆಗುತ್ತಿದೆ</translation>
 <translation id="3335337277364016868">ರೆಕಾರ್ಡ್ ಮಾಡಿದ ವರ್ಷ</translation>
 <translation id="3335947283844343239">ಮುಚ್ಚಿದ ಟ್ಯಾಬ್ ಮರುತೆರೆ</translation>
 <translation id="3336664756920573711">ನಿಮ್ಮ Android ಫೋನ್‌ನ ಮೂಲಕ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್ ಮಾಡಿ</translation>
@@ -1543,6 +1550,7 @@
 <translation id="3360297538363969800">ಮುದ್ರಣ ವಿಫಲಗೊಂಡಿದೆ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ಮುದ್ರಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="3364721542077212959">ಸ್ಟೈಲಸ್ ಪರಿಕರಗಳು</translation>
 <translation id="3365598184818502391">Ctrl ಅಥವಾ Alt ಬಳಸಿ</translation>
+<translation id="3367047597842238025">ನಿಮಗೆ ಬೇಕಾದ ರೀತಿಯಲ್ಲಿ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿ, ಮತ್ತು ನಿಮ್ಮ ಬೆರಳ ತುದಿಯಲ್ಲಿರುವ ಅದ್ಭುತ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ.</translation>
 <translation id="3368922792935385530">ಸಂಪರ್ಕಿಸಲಾಗಿದೆ</translation>
 <translation id="3369624026883419694">ಹಾಸ್ಟ್ ಅನ್ನು ನಿವಾರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="337286756654493126">ನೀವು ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ತೆರೆಯುವಂತಹ ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಓದಿರಿ</translation>
@@ -1556,6 +1564,7 @@
 <translation id="3389312115541230716">ಕಾರ್ಯಪಟ್ಟಿಯಲ್ಲಿ <ph name="SMALL_PRODUCT_LOGO" /> ಐಕಾನ್ ಅನ್ನು ರೈಟ್ ಕ್ಲಿಕ್ ಮಾಡಿ</translation>
 <translation id="3391716558283801616">ಟ್ಯಾಬ್ 7</translation>
 <translation id="3396331542604645348">ಆಯ್ಕೆಮಾಡಿದ ಮುದ್ರಕವು ಲಭ್ಯವಿಲ್ಲ ಅಥವಾ ಸರಿಯಾಗಿ ಸ್ಥಾಪನೆ ಮಾಡಲಾಗಿಲ್ಲ. ನಿಮ್ಮ ಮುದ್ರಕವನ್ನು ಪರೀಕ್ಷಿಸಿ ಅಥವಾ ಅವಶ್ಯವಿದ್ದರೆ ಬೇರೊಂದು ಮುದ್ರಕವನ್ನು ಆಯ್ಕೆಮಾಡಲು ಪ್ರಯತ್ನಿಸಿ.</translation>
+<translation id="3396800784455899911">ಈ Google ಸೇವೆಗಳಿಗಾಗಿ "ಸ್ವೀಕರಿಸಿ ಮತ್ತು ಮುಂದುವರೆಸು" ಬಟನ್‌ ಅನ್ನು ಕ್ಲಿಕ್‌ ಮಾಡುವುದರ ಮೂಲಕ, ನೀವು ಮೇಲೆ ವಿವರಿಸಿರುವ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಿಕೆಗೆ ಒಪ್ಪುತ್ತೀರಿ.</translation>
 <translation id="3399432415385675819">ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">ಈ ಸೈಟ್‌ಗಾಗಿ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಿಲ್ಲ</translation>
@@ -1784,10 +1793,13 @@
 <translation id="3726463242007121105">ಇದರ ಫೈಲ್‌ಸಿಸ್ಟಂ ಅನ್ನು ಬೆಂಬಲಿಸದ ಕಾರಣ ಈ ಸಾಧನವನ್ನು ತೆರೆಯಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="3727148787322499904">ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸುವುದರಿಂದ ಎಲ್ಲಾ ಹಂಚಿತ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ</translation>
 <translation id="3727187387656390258">ಪಾಪ್‌ಅಪ್ ಪರೀಕ್ಷಿಸಿ</translation>
+<translation id="3729506734996624908">ಅನುಮತಿಸಲಾದ ಸೈಟ್‌ಗಳು</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" /> ನೇ ಸಾಲಿನಲ್ಲಿ ದೋಷವಿದೆ</translation>
 <translation id="3733127536501031542">ಹೆಚ್ಚುವಿಕೆಯೊಂದಿಗೆ SSL ಸರ್ವರ್</translation>
+<translation id="3735740477244556633">ಈ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ</translation>
 <translation id="3737274407993947948">Linux ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುತ್ತಿರುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ...</translation>
 <translation id="3737536731758327622">ನಿಮ್ಮ ಡೌನ್‌ಲೋಡ್‌ಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation>
+<translation id="3738671331307774213">ನಿಮ್ಮ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸುವುದರಿಂದ ನಿಮ್ಮ ಖಾಸಗಿ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> ತೆರೆಯುವುದೇ?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ಈಗ ನಿರ್ವಹಣೆ ಕನ್ಸೋಲ್‌ನಲ್ಲಿ ಕಾಣಿಸುತ್ತದೆ</translation>
@@ -1872,10 +1884,10 @@
 <translation id="3846116211488856547">ವೆಬ್‌ಸೈಟ್‌ಗಳು, Android ಆ್ಯಪ್‍ಗಳು, ಮತ್ತು ಇನ್ನೂ ಹೆಚ್ಚಿನವುಗಳನ್ನು ಅಭಿವೃದ್ಧಿಪಡಿಸಲು ಪರಿಕರಗಳನ್ನು ಪಡೆಯಿರಿ. Linux ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವುದರಿಂದ <ph name="DOWNLOAD_SIZE" /> ಗಾತ್ರದ ಡೇಟಾವನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="385051799172605136">ಹಿಂದೆ</translation>
 <translation id="3851428669031642514">ಅಸುರಕ್ಷಿತ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ</translation>
+<translation id="3854599674806204102">ಒಂದು ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ</translation>
 <translation id="3855441664322950881">ಪ್ಯಾಕ್ ವಿಸ್ತರಣೆ</translation>
 <translation id="3855676282923585394">ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಮತ್ತು ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಿ...</translation>
 <translation id="3856800405688283469">ಸಮಯ ವಲಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
-<translation id="3856921555429624101">ಡೇಟಾ ಬಳಕೆಯ ಮಾಪನ ಮುಕ್ತಾಯಗೊಂಡಿದೆ</translation>
 <translation id="3857228364945137633">ನಿಮ್ಮ ಫೋನ್ ಸಮೀಪದಲ್ಲಿರುವಾಗ ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಸಾಧನವನ್ನು ಪಾಸ್‌ವರ್ಡ್‌ ಇಲ್ಲದೆಯೇ ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು Smart Lock ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation>
@@ -2246,7 +2258,6 @@
 <translation id="4508051413094283164">ಅಜ್ಞಾತ ವಿಂಡೋದಲ್ಲಿ ಎಲ್ಲವನ್ನೂ ತೆರೆಯಿರಿ</translation>
 <translation id="4508265954913339219">ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ವಿಫಲವಾಗಿದೆ</translation>
 <translation id="4508765956121923607">ಮೂ&amp;ಲವನ್ನು ವೀಕ್ಷಿಸಿ</translation>
-<translation id="4509823033118379431">ಚಿತ್ರಗಳು ಪ್ರಸ್ತುತವಾಗಿ ಲಭ್ಯವಿಲ್ಲ. ಸಂಗ್ರಹಣೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಮರುಸಂಪರ್ಕಗೊಳಿಸಿ.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> ಮೂಲಕ ಸಂಚಾಲಿತಗೊಂಡಿದೆ</translation>
 <translation id="4514542542275172126">ಹೊಸ ಮೇಲ್ಚಿಚಾರಣೆ ಬಳಕೆದಾರರನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="4514610446763173167">ಪ್ಲೇ ಮಾಡಲು ಅಥವಾ ವಿರಾಮಗೊಳಿಸಲು ವೀಡಿಯೊವನ್ನು ಟಾಗಲ್ ಮಾಡಿ</translation>
@@ -2323,6 +2334,7 @@
 <translation id="4627442949885028695">ಬೇರೆ ಸಾಧನದಿಂದ ಮುಂದುವರಿಸಿ</translation>
 <translation id="4628314759732363424">ಬದಲಿಸು...</translation>
 <translation id="4628757576491864469">ಸಾಧನಗಳು</translation>
+<translation id="4628948037717959914">ಫೋಟೋ</translation>
 <translation id="4630590996962964935">ಅಮಾನ್ಯ ಅಕ್ಷರ: $1</translation>
 <translation id="4631887759990505102">ಕಲೆಗಾರ</translation>
 <translation id="4632483769545853758">ಟ್ಯಾಬ್ ಅನ್‌ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
@@ -2509,7 +2521,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> ಅನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಸಿದ್ಧವಾಗಿದೆ</translation>
 <translation id="4907161631261076876">ಈ ಫೈಲ್ ಅನ್ನು ಸಾಮಾನ್ಯ ರೀತಿಯಲ್ಲಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ ಮತ್ತು ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು.</translation>
 <translation id="4907306957610201395">ಅನುಮತಿ ವರ್ಗ</translation>
-<translation id="4907824805858067479">ಉಳಿಸಿದ ಕಾರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation>
 <translation id="4908811072292128752">ಒಮ್ಮೆಲೆ ಎರಡೂ ಸೈಟ್‌ಗಳನ್ನು ಬ್ರೌಸ್ ಮಾಡಲು ಟ್ಯಾಬ್ ತೆರೆಯಿರಿ</translation>
 <translation id="4909038193460299775">ಈ ಖಾತೆಯನ್ನು <ph name="DOMAIN" /> ನಿರ್ವಹಿಸುತ್ತಿರುವ ಕಾರಣದಿಂದ, ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಈ ಸಾಧನದಿಂದ ತೆರವುಗೊಳಿಸಲಾಗುತ್ತದೆ. ಆದರೆ, ನಿಮ್ಮ ಡೇಟಾವು ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿಯೇ ಸಂಗ್ರಹಿತವಾಗಿರುತ್ತದೆ ಮತ್ತು ಅದನ್ನು <ph name="BEGIN_LINK" />Google ಡ್ಯಾಶ್‌ಬೋರ್ಡ್‌ನಲ್ಲಿ<ph name="END_LINK" /> ನಿರ್ವಹಿಸಬಹುದಾಗಿದೆ.</translation>
 <translation id="4909359680501173791">ನಿಮ್ಮನ್ನು ಯಶಸ್ವಿಯಾಗಿ ನೋಂದಾಯಿಸಲಾಗಿದೆ</translation>
@@ -2541,6 +2552,7 @@
 <translation id="4955814292505481804">ವಾರ್ಷಿಕ</translation>
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> ಸಿಂಕ್‌ಗೆ ಸಂಬಂಧಿಸಿದ ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಮಾತ್ರ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">ನಿಮ್ಮ ಕಾರ್ಡ್‌ಗಳನ್ನು ಒಂದೇ ಸ್ಥಳದಲ್ಲಿ ಇರಿಸಿ</translation>
 <translation id="496226124210045887">ನೀವು ಆಯ್ಕೆ ಮಾಡಿರುವ ಫೋಲ್ಡರ್ ಸೂಕ್ಷ್ಮ ಫೈಲ್‌ಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ನೀವು ಈ ಫೋಲ್ಡರ್‌ಗೆ "$1" ನ ಶಾಶ್ವತ ಓದುವ ಪ್ರವೇಶವನ್ನು ಒದಗಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="4964455510556214366">ಹೊಂದಾಣಿಕೆ</translation>
 <translation id="4964673849688379040">ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ...</translation>
@@ -2587,6 +2599,7 @@
 <translation id="5027562294707732951">ವಿಸ್ತರಣೆ ಸೇರಿಸು</translation>
 <translation id="5029568752722684782">ನಕಲು ತೆರವುಗೊಳಿಸು</translation>
 <translation id="5030338702439866405">ಇವರಿಂದ ನೀಡಲಾಗಿದೆ</translation>
+<translation id="503155457707535043">ಆ್ಯಪ್‌ಗಳು ಡೌನ್‌ಲೋಡ್ ಆಗುತ್ತಿವೆ</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಮತ್ತು ಮೈಕ್ರೊಫೋನ್ ಬಳಸಲು ಬಯಸುತ್ತದೆ</translation>
 <translation id="5036662165765606524">ಬಹು ಫೈಲ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಯಾವುದೇ ಸೈಟ್‌ಗೆ ಅನುಮತಿಸುವುದು ಬೇಡ</translation>
 <translation id="5037676449506322593">ಎಲ್ಲವನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">ಮ್ಯೂಟ್</translation>
 <translation id="5785583009707899920">Chrome ಫೈಲ್‌ ಸೌಲಭ್ಯಗಳು</translation>
 <translation id="5787146423283493983">ಪ್ರಮುಖ ಒಪ್ಪಂದ</translation>
+<translation id="5788127256798019331">ಪ್ಲೇ ಫೈಲ್‌ಗಳು</translation>
 <translation id="5788367137662787332">ಕ್ಷಮಿಸಿ, <ph name="DEVICE_LABEL" /> ಸಾಧನದಲ್ಲಿನ ಕನಿಷ್ಠ ಒಂದೇ ಒಂದು ಭಾಗವನ್ನೂ ಜೋಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ.</translation>
 <translation id="5794414402486823030">ಯಾವಾಗಲೂ ಸಿಸ್ಟಂ ವೀಕ್ಷಕದ ಜೊತೆಗೆ ತೆರೆಯಿರಿ</translation>
 <translation id="5794786537412027208">ಎಲ್ಲ Chrome ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತ್ಯಜಿಸಿ</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">ಅನುವಾದಿತ</translation>
 <translation id="5991049340509704927">ವರ್ಧಿಸು</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}one{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}other{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}}</translation>
-<translation id="5993332328670040093">ನಿಮ್ಮ ಡೇಟಾ ಬಳಕೆಯನ್ನು ಇನ್ನು ಮುಂದೆ ಮಾಪನ ಮಾಡಲಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="6002458620803359783">ಆದ್ಯತೆಯ ಧ್ವನಿಗಳು</translation>
 <translation id="6005695835120147974">ಮಾಧ್ಯಮ ರೂಟರ್</translation>
 <translation id="6006484371116297560">ಕ್ಲಾಸಿಕ್</translation>
@@ -3355,6 +3368,7 @@
 <translation id="6178664161104547336">ಒಂದು ಪ್ರಮಾಣಪತ್ರವನ್ನು ಆಯ್ಕೆ ಮಾಡಿ</translation>
 <translation id="6181431612547969857">ಡೌನ್‌ಲೋಡ್‌ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="6185132558746749656">ಸಾಧನದ ಸ್ಥಳ</translation>
+<translation id="6185617499004995178">CUPS IPP ಮೌಲ್ಯಮಾಪಕ</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">ನೆಟ್‌ವರ್ಕ್‌ ಫೈಲ್‌ ಹಂಚಿಕೆಗಳನ್ನು ಸೆಟಪ್‌ ಮಾಡಿ ಅಥವಾ ನಿರ್ವಹಿಸಿ.</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> ಮೂಲಕ ತೆರೆಯಿರಿ</translation>
@@ -3387,6 +3401,7 @@
 <translation id="6231881193380278751">ಪುಟವನ್ನು ಸ್ವಯಂ-ರಿಫ್ರೆಶ್ ಮಾಡಲು ಪ್ರಶ್ನೆಯ ಪರಮ್ ಸೇರಿಸಿ: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">ಬ್ಯಾಟರಿ</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> ಗೆ ಸಂಪರ್ಕ ಕಡಿದು ಹೋಗಿದೆ</translation>
+<translation id="6235700927623181151">ಈ ಟ್ಯಾಬ್ ನಿಮ್ಮ ಡೆಸ್ಕ್‌ಟಾಪ್ ವಿಷಯವನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತಿದೆ.</translation>
 <translation id="6237816943013845465">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ರೆಸಲ್ಯೂಶನ್ ಸರಿಹೊಂದಿಸಲು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ</translation>
 <translation id="6238923052227198598">ಲಾಕ್ ಪರದೆಯ ಮೇಲೆ ಇತ್ತೀಚಿನ ಟಿಪ್ಪಣಿ ಇರಿಸಿ</translation>
 <translation id="6239558157302047471">ರೀಲೋಡ್ &amp;ಫ್ರೇಮ್</translation>
@@ -3421,7 +3436,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> ಅನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ಅಪಾಯಕಾರಿಯಾಗಿರಬಹುದು.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್}one{ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್‌ಗಳು}other{ನಿಮ್ಮ ನೆಟ್‌ವರ್ಕ್‌ನಲ್ಲಿ ಹೊಸ ಪ್ರಿಂಟರ್‌ಗಳು}}</translation>
-<translation id="6286684120317096255">ಡೇಟಾ ಬಳಕೆಯನ್ನು ಮಾಪನ ಮಾಡಲಾಗುತ್ತಿದೆ</translation>
 <translation id="6286708577777130801">ಉಳಿಸಿದ ಪಾಸ್‌ವರ್ಡ್ ವಿವರಗಳು</translation>
 <translation id="6287852322318138013">ಈ ಫೈಲ್ ತೆರೆಯಲು ಒಂದು ಅಪ್ಲಿಕೇಶನ್ ಆಯ್ಕೆಮಾಡಿ</translation>
 <translation id="6289452883081499048">Play ನಂತಹ ವೈಯಕ್ತೀಕರಿಸಿದ Google ಸೇವೆಗಳು</translation>
@@ -3531,6 +3545,7 @@
 <translation id="6451180435462401570">ಮೇಘ ಮುದ್ರಣ ಸಾಧನಗಳನ್ನು ನಿರ್ವಹಿಸು</translation>
 <translation id="6451689256222386810">ನಿಮ್ಮ ಪಾಸ್‍‍ಫ್ರೇಸ್‍‍ ಅನ್ನು ನೀವು ಮರೆತಿದ್ದರೆ ಅಥವಾ ಈ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು ಬಯಸಿದರೆ, <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮರುಹೊಂದಿಸಿ<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">ತಿರಸ್ಕರಿಸಿ</translation>
+<translation id="6455264371803474013">ನಿರ್ದಿಷ್ಟ ಸೈಟ್‌ಗಳಲ್ಲಿ</translation>
 <translation id="6455894534188563617">&amp;ಹೊಸ ಫೋಲ್ಡರ್</translation>
 <translation id="6456394469623773452">ಉತ್ಕೃಷ್ಟ</translation>
 <translation id="6456631036739229488">Smart Lock ಫೋನ್ ಬದಲಾಯಿಸಲಾಗಿದೆ. Smart Lock ಅನ್ನು ಅಪ್‌ಡೇಟ್‌ ಮಾಡಲು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ನಮೂದಿಸಿ, ಮುಂದಿನ ಬಾರಿ, ನಿಮ್ಮ ಫೋನ್‌ ಈ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್‌ ಮಾಡುತ್ತದೆ. ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ Smart Lock ಅನ್ನು ಆಫ್‌ ಮಾಡಿ.</translation>
@@ -3608,6 +3623,7 @@
 <translation id="657402800789773160">ಈ ಪುಟವನ್ನು &amp;ರೀಲೋಡ್ ಮಾಡಿ</translation>
 <translation id="6577284282025554716">ಡೌನ್‌ಲೋಡ್ ರದ್ದುಪಡಿಸಲಾಗಿದೆ: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">ಸಿಂಕ್ ಮಾಡಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ನಿಮ್ಮ Google ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್‌ವರ್ಡ್ ಮೂಲಕ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಿ</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - ಡೆಸ್ಕ್‌ಟಾಪ್ ವಿಷಯವನ್ನು ಹಂಚಲಾಗಿದೆ</translation>
 <translation id="6580151766480067746">ARC ಆವೃತ್ತಿ</translation>
 <translation id="6581162200855843583">Google ಡ್ರೈವ್ ಲಿಂಕ್</translation>
 <translation id="6582421931165117398">ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಸಂರಕ್ಷಿಸಲು, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಇದೀಗ ಬದಲಾಯಿಸಿ. ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಬದಲಾಯಿಸುವ ಮೊದಲು, ಸೈನ್‌ ಇನ್‌ ಮಾಡಲು ನಿಮ್ಮನ್ನು ಕೇಳಲಾಗುತ್ತದೆ.</translation>
@@ -4074,6 +4090,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{ಈ ಅಪ್ಲಿಕೇಶನ್‌ Chrome ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಂತೆ ತಡೆಯಬಹುದು.}one{ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು Chrome ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಂತೆ ತಡೆಯಬಹುದು.}other{ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು Chrome ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದಂತೆ ತಡೆಯಬಹುದು.}}</translation>
 <translation id="7303900363563182677">ಕ್ಲಿಪ್‌ಬೋರ್ಡ್‌ಗೆ ನಕಲಿಸಿರುವ ಪಠ್ಯ ಮತ್ತು ಚಿತ್ರಗಳನ್ನು ನೋಡದಂತೆ ಈ ಸೈಟ್‌ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="730515362922783851">ಸ್ಥಳೀಯ ನೆಟ್‌ವರ್ಕ್ ಅಥವಾ ಇಂಟರ್ನೆಟ್‌ನಲ್ಲಿ ಯಾವುದೇ ಸಾಧನದೊಂದಿಗೆ ಡೇಟಾ ವಿನಿಮಯ ಮಾಡಿ</translation>
+<translation id="7307129035224081534">ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation>
 <translation id="7308002049209013926">ಹೊಸ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಮತ್ತು ಚಟುವಟಿಕೆಗಳನ್ನು ತ್ವರಿತವಾಗಿ ಪಡೆದುಕೊಳ್ಳಲು ಲಾಂಚರ್‌ ಅನ್ನು ಬಳಸಿ. ಕೀಬೋರ್ಡ್‌ನಿಂದ ಇಲ್ಲಿ ಪಡೆಯಲು Alt + Shift + L ಕೀಗಳನ್ನು ಒತ್ತಿರಿ.</translation>
 <translation id="7309257895202129721">&amp;ನಿಯಂತ್ರಣಗಳನ್ನು ತೋರಿಸು</translation>
 <translation id="7310598146671372464">ಲಾಗಿನ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾದ Kerberos ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರಗಳನ್ನು ಸರ್ವರ್ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
@@ -4131,7 +4148,6 @@
 <translation id="7400839060291901923"><ph name="PHONE_NAME" /> ನಲ್ಲಿ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="740624631517654988">ಪಾಪ್-ಅಪ್  ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="7407430846095439694">ಆಮದು ಮಾಡಿ ಮತ್ತು ಬೈಂಡ್ ಮಾಡಿ</translation>
-<translation id="7409233648990234464">ಮರುಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಪವರ್‌ವಾಶ್ ಮಾಡಿ</translation>
 <translation id="7409836189476010449">ಫ್ಲ್ಯಾಶ್ ರನ್ ಮಾಡು</translation>
 <translation id="7410344089573941623">ನಿಮ್ಮ ಕ್ಯಾಮರಾ ಹಾಗೂ ಮೈಕ್ರೋಫೋನ್ ಪ್ರವೇಶಿಸಲು <ph name="HOST" /> ಬಯಸುತ್ತಾರೆಯೇ ಎಂಬುದನ್ನು ಕೇಳಿ</translation>
 <translation id="741204030948306876">ಹೌದು, ನಾನಿದ್ದೇನೆ</translation>
@@ -4164,6 +4180,7 @@
 <translation id="7465778193084373987">Netscape ಪ್ರಮಾಣಪತ್ರ ಹಿಂತೆಗೆದುಕೊಳ್ಳುವಿಕೆ URL</translation>
 <translation id="7469894403370665791">ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ</translation>
 <translation id="747114903913869239">ದೋಷ: ವಿಸ್ತರಣೆಯನ್ನು ಡಿಕೋಡ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> ಅನ್ನು ನಿಮಗಾಗಿ ಸಿದ್ಧಪಡಿಸೋಣ</translation>
 <translation id="7473891865547856676">ಇಲ್ಲ, ಧನ್ಯವಾದಗಳು</translation>
 <translation id="747459581954555080">ಎಲ್ಲವನ್ನು ಮರುಸಂಗ್ರಹಿಸಿ</translation>
 <translation id="7475671414023905704">Netscape ಕಳೆದು ಹೋದ ಪಾಸ್‌ವರ್ಡ್ URL</translation>
@@ -4286,6 +4303,7 @@
 <translation id="7665369617277396874">ಖಾತೆಯನ್ನು ಸೇರಿಸು</translation>
 <translation id="7671130400130574146">ಸಿಸ್ಟಂ ಶೀರ್ಷಿಕೆ ಪಟ್ಟಿ ಮತ್ತು ಅಂಚುಗಳನ್ನು ಬಳಸಿ</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" /> ನಲ್ಲಿ <ph name="HUNG_IFRAME_URL" /></translation>
+<translation id="7676867886086876795">ಯಾವುದೇ ಪಠ್ಯ ಫೀಲ್ಡ್‌ನಲ್ಲಿ ಡಿಕ್ಟೇಷನ್ ಅನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ ಧ್ವನಿಯನ್ನು Google ಗೆ ಕಳುಹಿಸಿ.</translation>
 <translation id="7681095912841365527">ಬ್ಲೂಟೂತ್ ಅನ್ನು ಸೈಟ್‌ ಬಳಸಬಹುದು</translation>
 <translation id="7683373461016844951">ಮುಂದುವರಿಸಲು, ಸರಿ ಎಂಬುದನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ. ಆಮೇಲೆ, ನಿಮ್ಮ <ph name="DOMAIN" /> ಇಮೇಲ್ ವಿಳಾಸಕ್ಕಾಗಿ ಹೊಸ ಪ್ರೊಫೈಲ್ ಅನ್ನು ರಚಿಸಲು, ವ್ಯಕ್ತಿಯನ್ನು ಸೇರಿಸಿ ಎಂಬುದನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿ.</translation>
 <translation id="7684212569183643648">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ</translation>
@@ -4327,6 +4345,7 @@
 <translation id="7740996059027112821">ಪ್ರಮಾಣಿತ</translation>
 <translation id="7748528009589593815">ಹಿಂದಿನ ಟ್ಯಾಬ್</translation>
 <translation id="7748626145866214022">ಕ್ರಿಯೆಯ ಬಾರ್‌ನಲ್ಲಿ ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ. ಕ್ರಿಯೆಯ ಬಾರ್ ಅನ್ನು ಫೋಕಸ್ ಮಾಡಲು Alt + A ಒತ್ತಿರಿ.</translation>
+<translation id="7750228210027921155">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ</translation>
 <translation id="7751260505918304024">ಎಲ್ಲ ತೋರಿಸು</translation>
 <translation id="7754704193130578113">ಡೌನ್‌ಲೋಡ್ ಮಾಡುವ ಮೊದಲು ಪ್ರತಿ ಫೈಲ್ ಅನ್ನು ಎಲ್ಲಿ ಉಳಿಸಬೇಕೆಂದು ಕೇಳು</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4430,6 +4449,7 @@
 <translation id="7857949311770343000">ನೀವು ನಿರೀಕ್ಷಿಸುತ್ತಿರುವುದು ಈ ಹೊಸ ಟ್ಯಾಬ್ ಪುಟವೇ?</translation>
 <translation id="786073089922909430">ಸೇವೆ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;ಡೌನ್‌ಲೋಡ್‌ಗಳು</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 ಕುಕೀ}one{# ಕುಕೀಗಳು}other{# ಕುಕೀಗಳು}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ಜೋಡಿಸಲಾಗಿದೆ</translation>
 <translation id="7870730066603611552">ಸೆಟಪ್ ನಂತರ ಸಿಂಕ್ ಆಯ್ಕೆಗಳನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="7870790288828963061">ಹೊಸ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಯಾವುದೇ ಕಿಯೋಸ್ಕ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಕಂಡುಬಂದಿಲ್ಲ. ನವೀಕರಿಸಲು ಏನೂ ಇಲ್ಲ. ದಯವಿಟ್ಟು USB ಸ್ಟಿಕ್ ತೆಗೆದುಹಾಕಿ.</translation>
@@ -4750,6 +4770,7 @@
 <translation id="8373553483208508744">ಟ್ಯಾಬ್‌ಗಳನ್ನು ಮ್ಯೂಟ್ ಮಾಡಿ</translation>
 <translation id="8382913212082956454">ಇಮೇಲ್ &amp;ವಿಳಾಸವನ್ನು ನಕಲು ಮಾಡಿ</translation>
 <translation id="8386903983509584791">ಸ್ಕ್ಯಾನ್ ಪೂರ್ಣಗೊಂಡಿದೆ</translation>
+<translation id="8389492867173948260">ನೀವು ಭೇಟಿ ನೀಡುವ ವೆಬ್‌ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಡೇಟಾವನ್ನು ಓದಲು ಮತ್ತು ಬದಲಾಯಿಸಲು ಈ ವಿಸ್ತರಣೆಯನ್ನು ಅನುಮತಿಸಿ:</translation>
 <translation id="8390449457866780408">ಸರ್ವರ್ ಲಭ್ಯವಿಲ್ಲ.</translation>
 <translation id="8391712576156218334">ಚಿತ್ರ ಲಭ್ಯವಿಲ್ಲ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation>
 <translation id="8392234662362215700">ಕೀಬೋರ್ಡ್ ಲೇಔಟ್ ಬದಲಾಯಿಸಲು Control-Shift-Space ಒತ್ತಿರಿ.</translation>
@@ -4781,6 +4802,7 @@
 <translation id="84297032718407999">ಇಷ್ಟು ಸಮಯ ಆದ ಮೇಲೆ ನಿಮ್ಮನ್ನು ಸೈನ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತದೆ: <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">ಸಿಮ್‌ ಪಿನ್‌ ಬದಲಾಯಿಸು</translation>
 <translation id="8434480141477525001">NaCl ಡೀಬಗ್‌ ಪೋರ್ಟ್‌</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> ಮೂಲಕ ನಿಮ್ಮ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಿ</translation>
 <translation id="843760761634048214">ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಉಳಿಸಿ</translation>
 <translation id="8438328416656800239">ಸ್ಮಾರ್ಟ್ ಬ್ರೌಸರ್‌ಗೆ ಬದಲಿಸಿ</translation>
 <translation id="8438566539970814960">ಹುಡುಕಾಟಗಳನ್ನು ಮತ್ತು ಬ್ರೌಸಿಂಗ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವಂತೆ ಮಾಡಿ</translation>
@@ -4809,6 +4831,7 @@
 <translation id="8465252176946159372">ಮಾನ್ಯವಾಗಿಲ್ಲ</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ರನ್ ಮಾಡಲು ನಿಮ್ಮ ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="8466234950814670489">ತಾರ್ ಆರ್ಕೈವ್</translation>
+<translation id="8466417995783206254">ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ಈ ಟ್ಯಾಬ್ ವೀಡಿಯೊವನ್ನು ಪ್ಲೇ ಮಾಡುತ್ತಿದೆ.</translation>
 <translation id="8468750959626135884">ನಿಮ್ಮ Android ಫೋನ್ ಬಳಸಿಕೊಂಡು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್‌ಲಾಕ್ ಮಾಡಿ.</translation>
 <translation id="8470028084415844044">ನಿಮ್ಮ ಎಲ್ಲಾ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಎಲ್ಲಾ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲು, ಸಿಂಕ್ ಆನ್ ಮಾಡಿ.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> ಗಾಗಿ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸಲಾಗಿದೆ</translation>
@@ -4829,6 +4852,7 @@
 <translation id="8496717697661868878">ಈ ಪ್ಲಗಿನ್ ಚಾಲನೆ ಮಾಡು</translation>
 <translation id="8497219075884839166">ವಿಂಡೋಗಳ ಸೌಲಭ್ಯಗಳು</translation>
 <translation id="8498214519255567734">ಮಂದ ಬೆಳಕಿನಲ್ಲಿಯೂ ನಿಮ್ಮ ಪರದೆಯನ್ನು ನೋಡಲು ಅಥವಾ ಓದಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ</translation>
+<translation id="8498395510292172881">Chrome ನಲ್ಲಿ ಓದುವುದನ್ನು ಮುಂದುವರಿಸಿ</translation>
 <translation id="8503813439785031346">ಬಳಕೆದಾರಹೆಸರು</translation>
 <translation id="850875081535031620">ಯಾವುದೇ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಕಂಡುಬಂದಿಲ್ಲ</translation>
 <translation id="8509646642152301857">ಕಾಗುಣಿತ ಪರಿಶೀಲನೆ ನಿಘಂಟು ಡೌನ್‌ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.</translation>
@@ -4979,7 +5003,6 @@
 <translation id="8725066075913043281">ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ</translation>
 <translation id="8725178340343806893">ಮೆಚ್ಚಿನವುಗಳು/ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು</translation>
 <translation id="8726206820263995930">ಸರ್ವರ್‌ನಿಂದ ನೀತಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪಡೆಯುತ್ತಿರುವಾಗ ದೋಷ: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">ಇದನ್ನು ಮತ್ತೆ ತೋರಿಸಬೇಡ</translation>
 <translation id="8727344521467137076">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್‌ ಇದೆ. ನಿಮ್ಮ ಬ್ರೌಸರ್ ಪುನಃ ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು, Chrome ಅದನ್ನು ತೆಗೆದುಹಾಕುತ್ತಿದೆ ಹಾಗೂ ನಿಮ್ಮ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸುತ್ತದೆ.</translation>
 <translation id="8730621377337864115">ಮುಗಿದಿದೆ</translation>
 <translation id="8732030010853991079">ಈ ಐಕಾನ್‌ ಕ್ಲಿಕ್ ಮಾಡುವುದರ ಮೂಲಕ ಈ ವಿಸ್ತರಣೆಯನ್ನು ಬಳಸಿ.</translation>
@@ -5170,6 +5193,7 @@
 <translation id="9027459031423301635">ಹೊಸ &amp;ಟ್ಯಾಬ್‌ನಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation>
 <translation id="9030515284705930323">ನಿಮ್ಮ ಸಂಸ್ಥೆ ನಿಮ್ಮ ಖಾತೆಗೆ Google Play ಸ್ಟೋರ್ ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation>
 <translation id="9033857511263905942">&amp;ಅಂಟಿಸಿ</translation>
+<translation id="9034924485347205037">Linux ಫೈಲ್‌ಗಳು</translation>
 <translation id="9035012421917565900">ಐಟಂಗಳನ್ನು '<ph name="DESTINATION_NAME" />' ಗೆ ಮರಳಿ ಹಿಂತಿರುಗಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ, ಆದ್ದರಿಂದ ನಿಮಗೆ ಈ ಕ್ರಿಯೆಯನ್ನು ರದ್ದುಪಡಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">ಮೂಲವನ್ನು ತೋರಿಸು</translation>
@@ -5270,6 +5294,7 @@
 <translation id="9173995187295789444">ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗಾಗಿ ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - ಬ್ಲೂಟೂತ್ ಸಾಧನ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ</translation>
 <translation id="9177499212658576372">ನೀವು ಪ್ರಸ್ತುತ <ph name="NETWORK_TYPE" /> ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಗೊಂಡಿರುವಿರಿ.</translation>
+<translation id="9179734824669616955">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ನಲ್ಲಿ Linux (Beta) ಹೊಂದಿಸಿ</translation>
 <translation id="9180281769944411366">ಈ ಪ್ರಕ್ರಿಯೆಯು ಕೆಲವು ನಿಮಿಷಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಬಹುದು. Linux ಕಂಟೇನರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತಿದೆ.</translation>
 <translation id="9180380851667544951">ನಿಮ್ಮ ಪರದೆಯನ್ನು ಸೈಟ್‌ ಹಂಚಿಕೊಳ್ಳಬಹುದು</translation>
 <translation id="9188441292293901223">ದಯವಿಟ್ಟು ಈ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು Android ಹೊಸ ಆವೃತ್ತಿಗೆ ನಿಮ್ಮ ಫೋನ್‌ ನವೀಕರಿಸಿ.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index be1a17e..23b6615d 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -565,7 +565,6 @@
 <translation id="1829192082282182671">축소(&amp;O)</translation>
 <translation id="1830550083491357902">로그인하지 않음</translation>
 <translation id="1832511806131704864">휴대전화 변경사항이 업데이트됨</translation>
-<translation id="1832685970989658809">관리자가 저장한 결제 수단을 사용 중지했습니다.</translation>
 <translation id="1834503245783133039">다운로드 실패: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">검색어 지우기</translation>
 <translation id="1838709767668011582">Google 사이트</translation>
@@ -942,7 +941,6 @@
 <translation id="2435457462613246316">비밀번호 표시</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" />에서 모든 <ph name="PROTOCOL" /> 링크를 열도록 허용하시겠습니까?</translation>
 <translation id="2436707352762155834">최소</translation>
-<translation id="2437139306601019091">데이터 사용 측정 종료됨</translation>
 <translation id="2440604414813129000">소스 보기(&amp;O)</translation>
 <translation id="2445081178310039857">확장 프로그램 루트 디렉토리가 필요합니다.</translation>
 <translation id="2445484935443597917">새 프로필 만들기</translation>
@@ -1878,7 +1876,6 @@
 <translation id="3855441664322950881">확장 프로그램 압축</translation>
 <translation id="3855676282923585394">북마크 및 설정 가져오기...</translation>
 <translation id="3856800405688283469">시간대 선택</translation>
-<translation id="3856921555429624101">데이터 사용 측정이 종료됨</translation>
 <translation id="3857228364945137633">휴대전화가 근처에 있을 때 비밀번호 없이 Smart Lock을 사용하여 <ph name="DEVICE_TYPE" />을(를) 잠금 해제할 수 있습니다.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: 동기화 중지됨</translation>
@@ -2247,7 +2244,6 @@
 <translation id="4508051413094283164">모두 시크릿 창에서 열기</translation>
 <translation id="4508265954913339219">활성화 실패</translation>
 <translation id="4508765956121923607">소스 보기(&amp;O)</translation>
-<translation id="4509823033118379431">현재 이미지를 사용할 수 없습니다. 컬렉션을 확인하려면 다시 연결하세요.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> 제공</translation>
 <translation id="4514542542275172126">새로운 관리 대상 사용자 설정</translation>
 <translation id="4514610446763173167">동영상 재생 또는 일시중지 전환</translation>
@@ -2324,6 +2320,7 @@
 <translation id="4627442949885028695">다른 기기에서 계속</translation>
 <translation id="4628314759732363424">변경...</translation>
 <translation id="4628757576491864469">기기</translation>
+<translation id="4628948037717959914">사진</translation>
 <translation id="4630590996962964935">잘못된 문자: $1</translation>
 <translation id="4631887759990505102">아티스트</translation>
 <translation id="4632483769545853758">탭 음소거 해제</translation>
@@ -2509,7 +2506,6 @@
 <translation id="4905417359854579806">파일 <ph name="FILE_COUNT" />개 백업 준비 완료</translation>
 <translation id="4907161631261076876">이 파일은 위험할 수 있기 때문에 일반적으로 다운로드하지 않습니다.</translation>
 <translation id="4907306957610201395">권한 카테고리</translation>
-<translation id="4907824805858067479">저장한 카드가 관리자에 의해 사용 중지되었습니다</translation>
 <translation id="4908811072292128752">새 탭을 열어 한 번에 두 개의 사이트를 탐색할 수 있습니다</translation>
 <translation id="4909038193460299775">이 계정은 <ph name="DOMAIN" />에 의해 관리되므로 북마크, 방문 기록, 비밀번호 및 기타 설정이 이 기기에서 삭제됩니다. 하지만 데이터는 Google 계정에 계속 저장되며 <ph name="BEGIN_LINK" />Google 대시보드<ph name="END_LINK" />에서 관리할 수 있습니다.</translation>
 <translation id="4909359680501173791">등록 완료</translation>
@@ -3229,7 +3225,6 @@
 <translation id="5990386583461751448">번역됨</translation>
 <translation id="5991049340509704927">확대</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}other{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}}</translation>
-<translation id="5993332328670040093">더 이상 데이터 사용이 측정되지 않습니다.</translation>
 <translation id="6002458620803359783">선호하는 음성</translation>
 <translation id="6005695835120147974">미디어 라우터</translation>
 <translation id="6006484371116297560">기본</translation>
@@ -3421,7 +3416,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" />은(는) 위험할 수 있으므로 다운로드하지 않습니다.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{네트워크에 새로운 프린터 있음}other{네트워크에 새로운 프린터 있음}}</translation>
-<translation id="6286684120317096255">데이터 사용 측정 중</translation>
 <translation id="6286708577777130801">저장된 암호 세부정보</translation>
 <translation id="6287852322318138013">이 파일을 열 때 사용할 앱 선택</translation>
 <translation id="6289452883081499048">Play 등 Google 서비스 맞춤설정</translation>
@@ -4132,7 +4126,6 @@
 <translation id="7400839060291901923"><ph name="PHONE_NAME" />에서 연결 설정</translation>
 <translation id="740624631517654988">팝업 차단됨</translation>
 <translation id="7407430846095439694">가져오기 및 연결</translation>
-<translation id="7409233648990234464">다시 실행 및 Powerwash</translation>
 <translation id="7409836189476010449">Flash 실행</translation>
 <translation id="7410344089573941623"><ph name="HOST" />에서 카메라와 마이크에 액세스하려는 경우 메시지 표시</translation>
 <translation id="741204030948306876">사용</translation>
@@ -4986,7 +4979,6 @@
 <translation id="8725066075913043281">다시 시도하세요</translation>
 <translation id="8725178340343806893">즐겨찾기/북마크</translation>
 <translation id="8726206820263995930">서버에서 정책 설정을 가져오는 중에 오류 발생: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">이 메시지를 다시 표시하지 않음</translation>
 <translation id="8727344521467137076">컴퓨터에 유해한 소프트웨어가 있습니다. Chrome에서 이 소프트웨어를 삭제하고 있으며 설정을 복원하여 브라우저가 다시 정상적으로 작동하도록 합니다.</translation>
 <translation id="8730621377337864115">완료</translation>
 <translation id="8732030010853991079">아이콘을 클릭하여 확장 프로그램을 사용합니다.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index a666bebb..92e4651 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Klausti prieš pasiekiant</translation>
 <translation id="1434696352799406980">Atlikus šį veiksmą paleidimo puslapis, naujo skirtuko puslapis, paieškos variklis ir prisegti skirtukai bus iš nustatyti naujo. Taip pat bus išjungti visi plėtiniai ir išvalyti laikini duomenys, pvz., slapukai. Žymės, istorija ir išsaugoti slaptažodžiai išvalyti nebus.</translation>
 <translation id="1434886155212424586">Pagrindinis puslapis yra naujo skirtuko puslapis</translation>
+<translation id="1436671784520050284">Tęsti sąranką</translation>
 <translation id="1436784010935106834">Pašalinta</translation>
 <translation id="1438632560381091872">Įjungti garsą skirtukuose</translation>
 <translation id="1442392616396121389">Nukreipimo priešdėlis</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Picos gabalėlis</translation>
 <translation id="1467432559032391204">Kairė</translation>
 <translation id="1468571364034902819">Negalima naudoti šio profilio</translation>
+<translation id="1470533772306424441">Tas programas įdiegsime už jus. Daugiau programų savo įrenginiui galite rasti „Play“ parduotuvėje.</translation>
 <translation id="1470811252759861213">Kad pasiektumėte plėtinius visuose įrenginiuose, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Failas „<ph name="FILENAME" />“ neįkeltas. „Google“ diske nepakanka vietos.</translation>
 <translation id="1475502736924165259">Turite pateiktų sertifikatų, kurie neatitinka jokių kitų kategorijų</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Tolin&amp;ti</translation>
 <translation id="1830550083491357902">Neprisijungta</translation>
 <translation id="1832511806131704864">Telefono pakeitimas atnaujintas</translation>
-<translation id="1832685970989658809">Administratorius išjungė išsaugotus mokėjimo metodus</translation>
 <translation id="1834503245783133039">Nepavyko atsisiųsti: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Išvalyti paiešką</translation>
 <translation id="1838709767668011582">„Google“ svetainė</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Iš:</translation>
 <translation id="2193365732679659387">Patikimumo nustatymai</translation>
 <translation id="2195729137168608510">El. pašto apsauga</translation>
+<translation id="2199298570273670671">Klaida</translation>
 <translation id="2200356397587687044">Norint tęsti „Chrome“ reikia leidimo</translation>
 <translation id="220138918934036434">Paslėpti mygtuką</translation>
 <translation id="2202898655984161076">Sudarant spausdintuvų sąrašą iškilo problema. Kai kurie spausdintuvai galėjo nebūti sėkmingai užregistruoti „<ph name="CLOUD_PRINT_NAME" />“.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Rodyti slaptažodį</translation>
 <translation id="2436186046335138073">Leisti „<ph name="HANDLER_HOSTNAME" />“ atidaryti visas <ph name="PROTOCOL" /> nuorodas?</translation>
 <translation id="2436707352762155834">Minimalus</translation>
-<translation id="2437139306601019091">Duomenų naudojimo vertinimas užbaigtas</translation>
 <translation id="2440604414813129000">Rodyti š&amp;altinį</translation>
 <translation id="2445081178310039857">Reikalingas plėtinio šakninis katalogas.</translation>
 <translation id="2445484935443597917">Kurti naują profilį</translation>
+<translation id="2446585455334014596">„<ph name="APP_NAME" />“ nori patvirtinti jūsų tapatybę</translation>
 <translation id="2448312741937722512">Tipas</translation>
 <translation id="2450223707519584812">Negalėsite pridėti naudotojų, nes trūksta „Google“ API raktų. Jei reikia išsamios informacijos, žr. <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Išjungti sinchronizavimą ir atsijungti?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Failas jau yra</translation>
 <translation id="2453860139492968684">Užbaigti</translation>
 <translation id="2454247629720664989">Raktinis žodis</translation>
+<translation id="245661998428026871">Vaizdo vaizde režimu veikiantis vaizdo įrašas nebebus leidžiamas.</translation>
 <translation id="2457246892030921239">„<ph name="APP_NAME" />“ nori kopijuoti failus iš „<ph name="VOLUME_NAME" />“.</translation>
 <translation id="2462724976360937186">Sertifikavimo institucijos rakto ID</translation>
 <translation id="2462752602710430187">Pridėtas „<ph name="PRINTER_NAME" />“</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Įjungti garsą skirtukuose</translation>
 <translation id="3053013834507634016">Sertifikato rakto naudojimas</translation>
 <translation id="3057861065630527966">Kurkite atsargines nuotraukų ir vaizdo įrašų kopijas</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Įgalinti funkciją „Teksto ištarimas“</translation>
 <translation id="3061707000357573562">Pataisos paslauga</translation>
 <translation id="3064410671692449875">Nepakanka duomenų</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Pamiršote slaptažodį?</translation>
 <translation id="3132996321662585180">Atnaujinti kasdien</translation>
 <translation id="3135204511829026971">Pasukti ekraną</translation>
+<translation id="313638818480447860">Radome su paskyra susietų programų (<ph name="NUMBER_OF_APPS" />), optimizuotų naudoti šiame įrenginyje.</translation>
 <translation id="313963229645891001">Atsisiunčiama: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Numatytasis geltonas pseudoportretas</translation>
 <translation id="3140353188828248647">Fokusuoti adreso juostą</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Rašybos tikrinimas</translation>
 <translation id="3183139917765991655">Profilio importavimo priemonė</translation>
 <translation id="3184560914950696195">Nepavyko išsaugoti aplanke „$1“. Redaguoti vaizdai bus išsaugoti atsisiuntimų aplanke.</translation>
+<translation id="3188257591659621405">Mano failai</translation>
 <translation id="3188465121994729530">Slankusis vidurkis</translation>
 <translation id="3190558889382726167">Slaptažodis išsaugotas</translation>
 <translation id="3192947282887913208">Garso įrašų failai</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Glaudinamas failas „<ph name="FILE_NAME" />“...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Programos informacija</translation>
+<translation id="3334632933872291866">„<ph name="WINDOW_TITLE" />“ – vaizdo įrašas leidžiamas vaizdo vaizde režimu</translation>
 <translation id="3335337277364016868">Įrašymo metai</translation>
 <translation id="3335947283844343239">Iš naujo atidarykite uždarytą skirtuką</translation>
 <translation id="3336664756920573711">Atrakinkite „<ph name="DEVICE_TYPE" />“ naudodami „Android“ telefoną</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Spausdinti nepavyko. Patikrinkite spausdintuvą ir bandykite dar kartą.</translation>
 <translation id="3364721542077212959">Rašiklio įrankiai</translation>
 <translation id="3365598184818502391">Naudokite „Ctrl“ arba „Alt“</translation>
+<translation id="3367047597842238025">Nustatykite „<ph name="DEVICE_TYPE" />“ taip, kaip norite, ir atraskite visas puikias akimirksniu pasiekiamas galimybes.</translation>
 <translation id="3368922792935385530">Prijungta</translation>
 <translation id="3369624026883419694">Ieškoma pagrindinio serverio...</translation>
 <translation id="337286756654493126">Skaityti aplankus, kuriuos atidarėte programoje</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Dešiniuoju pelės klavišu spustelėkite piktogramą <ph name="SMALL_PRODUCT_LOGO" /> užduočių juostoje</translation>
 <translation id="3391716558283801616">7 skirtukas</translation>
 <translation id="3396331542604645348">Pasirinktas spausdintuvas nepasiekiamas arba netinkamai įdiegtas. Patikrinkite spausdintuvą arba pabandykite pasirinkti kitą spausdintuvą.</translation>
+<translation id="3396800784455899911">Spustelėdami mygtuką „Sutikti ir tęsti“ sutinkate, kad šios „Google“ paslaugos būtų apdorojamos, kaip aprašyta anksčiau.</translation>
 <translation id="3399432415385675819">Pranešimai bus išjungti</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nėra išsaugotų šios svetainės slaptažodžių</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Įrenginio negalima atidaryti, nes nepalaikoma jo failų išdėstymo sistema.</translation>
 <translation id="3727148787322499904">Šio nustatymo pakeitimas turės įtakos visiems bendrinamiems tinklams</translation>
 <translation id="3727187387656390258">Tikrinti iššokantįjį langą</translation>
+<translation id="3729506734996624908">Leidžiamos svetainės</translation>
 <translation id="3732078975418297900">Klaida eilutėje Nr. <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL serveris su sąranka</translation>
+<translation id="3735740477244556633">Rūšiuoti pagal</translation>
 <translation id="3737274407993947948">Įdiegiant „Linux“ įvyko klaida...</translation>
 <translation id="3737536731758327622">Čia rodomi jūsų atsisiuntimai</translation>
+<translation id="3738671331307774213">Jei patvirtinsite savo tapatybę, galėsime efektyviau apsaugoti jūsų privačius duomenis</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Atidaryti „<ph name="APPLICATION" />“?</translation>
 <translation id="3741158646617793859">Dabar „<ph name="DEVICE_NAME" />“ bus rodomas „Admin Console“</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Gaukite svetainių, „Android“ programų ir kt. kūrimo įrankius. Įdiegiant „Linux“ bus atsisiųsta <ph name="DOWNLOAD_SIZE" /> duomenų.</translation>
 <translation id="385051799172605136">Grįžti</translation>
 <translation id="3851428669031642514">Įkelti nesaugius scenarijus</translation>
+<translation id="3854599674806204102">Pasirinkite parinktį</translation>
 <translation id="3855441664322950881">Paketo plėtinys</translation>
 <translation id="3855676282923585394">Importuoti žymes ir nustatymus...</translation>
 <translation id="3856800405688283469">Pasirinkti laiko juostą</translation>
-<translation id="3856921555429624101">Duomenų naudojimo vertinimas užbaigtas</translation>
 <translation id="3857228364945137633">Pabandykite naudoti „Smart Lock“, kad atrakintumėte „<ph name="DEVICE_TYPE" />“ be slaptažodžio, kai telefonas yra netoliese.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sinchronizavimas pristabdytas</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Atidaryti viską inkognito lange</translation>
 <translation id="4508265954913339219">Nepavyko suaktyvinti</translation>
 <translation id="4508765956121923607">Žiūrėti ša&amp;ltinį</translation>
-<translation id="4509823033118379431">Vaizdai šiuo metu negalimi. Prisijunkite iš naujo ir peržiūrėkite kolekcijas.</translation>
 <translation id="451407183922382411">Parėmė „<ph name="COMPANY_NAME" />“</translation>
 <translation id="4514542542275172126">Nustatyti naują prižiūrimą naudotoją</translation>
 <translation id="4514610446763173167">Perjunkite mygtuką, kad paleistumėte ar pristabdytumėte vaizdo įrašą</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Tęsiama kitu įrenginiu</translation>
 <translation id="4628314759732363424">Pakeisti…</translation>
 <translation id="4628757576491864469">Įrenginiai</translation>
+<translation id="4628948037717959914">Nuotrauka</translation>
 <translation id="4630590996962964935">Netinkamas simbolis: $1</translation>
 <translation id="4631887759990505102">Atlikėjas</translation>
 <translation id="4632483769545853758">Įjungti skirtuko garsą</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Paruošta kurti atsargines kopijas: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Šis failas atsisiunčiamas retai ir gali būti pavojingas.</translation>
 <translation id="4907306957610201395">Leidimų kategorija</translation>
-<translation id="4907824805858067479">Administratorius išjungė išsaugotas korteles</translation>
 <translation id="4908811072292128752">Jei norite naršyti iš karto dvi svetaines, atidarykite naują skirtuką</translation>
 <translation id="4909038193460299775">Kadangi ši paskyra tvarkoma <ph name="DOMAIN" />, jūsų žymės, istorija, slaptažodžiai ir kiti nustatymai bus išvalyti iš šio įrenginio. Tačiau duomenys bus toliau saugomi „Google“ paskyroje ir juos bus galima tvarkyti <ph name="BEGIN_LINK" />„Google“ informacijos suvestinėje<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Sėkmingai užsiregistravote</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Metinė licencija</translation>
 <translation id="4957949153200969297">Įgalinti tik funkcijas, susijusias su „<ph name="IDS_SHORT_PRODUCT_NAME" />“ sinchronizavimu</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Visas korteles turėkite vienoje vietoje</translation>
 <translation id="496226124210045887">Pasirinktame aplanke yra slaptų failų. Ar tikrai norite „$1“ suteikti nuolatinę šio aplanko skaitymo prieigą?</translation>
 <translation id="4964455510556214366">Išdėstymas</translation>
 <translation id="4964673849688379040">Tikrinama...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Pridėti plėtinį</translation>
 <translation id="5029568752722684782">Išvalyti kopiją</translation>
 <translation id="5030338702439866405">Išdavė</translation>
+<translation id="503155457707535043">Programos atsisiunčiamos</translation>
 <translation id="503498442187459473"><ph name="HOST" /> nori naudoti kamerą ir mikrofoną</translation>
 <translation id="5036662165765606524">Neleisti jokiai svetainei automatiškai atsisiųsti kelis failus</translation>
 <translation id="5037676449506322593">Pasirinkti viską</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Nutildyti</translation>
 <translation id="5785583009707899920">„Chrome“ failų paslaugų programos</translation>
 <translation id="5787146423283493983">Sutartis dėl rakto</translation>
+<translation id="5788127256798019331">„Play“ failai</translation>
 <translation id="5788367137662787332">Apgailestaujame, tačiau neįmanoma įrengti bent vieno įrenginio <ph name="DEVICE_LABEL" /> disko skaidinio.</translation>
 <translation id="5794414402486823030">Visada atidaryti naudojant sistemos peržiūros priemonę</translation>
 <translation id="5794786537412027208">Uždaryti visas „Chrome“ programas</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Išversta</translation>
 <translation id="5991049340509704927">Didinti</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šią programą.}one{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}few{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}many{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}other{Kad galėtumėte toliau naršyti žiniatinklį, paprašykite administratoriaus pašalinti šias programas.}}</translation>
-<translation id="5993332328670040093">Duomenų naudojimas nebebus vertinamas.</translation>
 <translation id="6002458620803359783">Pageidaujami balsai</translation>
 <translation id="6005695835120147974">Medijos maršruto parinktuvas</translation>
 <translation id="6006484371116297560">Klasikinė</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Pasirinkite sertifikatą</translation>
 <translation id="6181431612547969857">Atsisiuntimas užblokuotas</translation>
 <translation id="6185132558746749656">Įrenginio vietovė</translation>
+<translation id="6185617499004995178">CUPS IPP patvirtinimo priemonė</translation>
 <translation id="6185696379715117369">Puslapiu aukštyn</translation>
 <translation id="6189273858858366896">Nustatykite arba tvarkykite tinklo failų bendrinimą.</translation>
 <translation id="6189412234224385711">Atidaryti naudojant „<ph name="EXTENSION_NAME" />“</translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Kad puslapis būtų atnaujintas automatiškai, pridėkite šį užklausos parametrą prie URL: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Akumuliatorius</translation>
 <translation id="6232116551750539448">Ryšys su „<ph name="NAME" />“ nutrūko</translation>
+<translation id="6235700927623181151">Šis skirtukas bendrina jūsų darbalaukio turinį.</translation>
 <translation id="6237816943013845465">Leidžiama koreguoti ekrano skyrą</translation>
 <translation id="6238923052227198598">Palikti naujausią pastabą užrakinimo ekrane</translation>
 <translation id="6239558157302047471">Įkelti &amp;rėmelį iš naujo</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">„<ph name="FILE_NAME" />“ nėra įprastai atsisiunčiamas ir gali būti pavojingas.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Naujas spausdintuvas tinkle}one{Nauji spausdintuvai tinkle}few{Nauji spausdintuvai tinkle}many{Nauji spausdintuvai tinkle}other{Nauji spausdintuvai tinkle}}</translation>
-<translation id="6286684120317096255">Duomenų naudojimas vertinamas</translation>
 <translation id="6286708577777130801">Išsaugota išsami slaptažodžių informacija</translation>
 <translation id="6287852322318138013">Pasirinkite programą, kad atidarytumėte šį failą</translation>
 <translation id="6289452883081499048">Suasmenintos „Google“ paslaugos, pvz., „Play“</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Tvarkyti spausdinimo iš debesies įrenginius</translation>
 <translation id="6451689256222386810">Jei pamiršote slaptafrazę arba norite pakeisti šį nustatymą, <ph name="BEGIN_LINK" />iš naujo nustatykite sinchronizavimą<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Atmesti</translation>
+<translation id="6455264371803474013">Konkrečiose svetainėse</translation>
 <translation id="6455894534188563617">&amp;Naujas aplankas</translation>
 <translation id="6456394469623773452">Geras</translation>
 <translation id="6456631036739229488">„Smart Lock“ telefonas pakeistas. Įveskite slaptažodį, kad atnaujintumėte „Smart Lock“. Kitą kartą telefonu bus galima atrakinti „<ph name="DEVICE_TYPE" />“. Funkciją „Smart Lock“ galite išjungti „Nustatymų“ skiltyje.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">&amp;Iš naujo įkelti šį puslapį</translation>
 <translation id="6577284282025554716">Atsisiuntimas atšauktas: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifruokite sinchronizuotus slaptažodžius naudodami savo „Google“ naudotojo vardą ir slaptažodį</translation>
+<translation id="6579705087617859690">„<ph name="WINDOW_TITLE" />“ – darbalaukio turinys bendrinamas</translation>
 <translation id="6580151766480067746">ARC versija</translation>
 <translation id="6581162200855843583">„Google“ disko nuoroda</translation>
 <translation id="6582421931165117398">Kad apsaugotumėte savo asmens informaciją, pakeiskite slaptažodį dabar. Kad galėtumėte pakeisti slaptažodį, būsite paprašyti prisijungti.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Gali būti, kad ši programa neleidžia „Chrome“ tinkamai veikti.}one{Gali būti, kad šios programos neleidžia „Chrome“ tinkamai veikti.}few{Gali būti, kad šios programos neleidžia „Chrome“ tinkamai veikti.}many{Gali būti, kad šios programos neleidžia „Chrome“ tinkamai veikti.}other{Gali būti, kad šios programos neleidžia „Chrome“ tinkamai veikti.}}</translation>
 <translation id="7303900363563182677">Šiai svetainei neleidžiama peržiūrėti teksto ir vaizdų, nukopijuotų į iškarpinę</translation>
 <translation id="730515362922783851">Keistis duomenimis su bet kuriuo įrenginiu vietiniame tinkle ar internete</translation>
+<translation id="7307129035224081534">Pristabdyta</translation>
 <translation id="7308002049209013926">Naudokite Paleidimo priemonę, kad greitai pasiektumėte naujas programas ir veiklą. Kad čia patektumėte naudodami klaviatūrą, paspauskite „Alt“ + „Shift“ + L.</translation>
 <translation id="7309257895202129721">Rodyti &amp;valdiklius</translation>
 <translation id="7310598146671372464">Nepavyko prisijungti. Serveris nepalaiko nurodytų „Kerberos“ šifruotės tipų. Susisiekite su administratoriumi.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">Nustatykite ryšį „<ph name="PHONE_NAME" />“ įrenginyje</translation>
 <translation id="740624631517654988">Iššokantysis langas užblokuotas</translation>
 <translation id="7407430846095439694">Importuoti ir susaistyti</translation>
-<translation id="7409233648990234464">Paleisti iš naujo ir paleisti „Powerwash“</translation>
 <translation id="7409836189476010449">Vykdyti „Flash“</translation>
 <translation id="7410344089573941623">Klausti, jei <ph name="HOST" /> nori pasiekti fotoaparatą ir mikrofoną</translation>
 <translation id="741204030948306876">Taip, sutinku</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">„Netscape“ sertifikato panaikinimo URL</translation>
 <translation id="7469894403370665791">Automatiškai prisijungti prie šio tinklo</translation>
 <translation id="747114903913869239">Klaida: neįmanoma iššifruoti plėtinio</translation>
+<translation id="7473753388963818366">Paruoškime naudoti „<ph name="DEVICE_TYPE" />“</translation>
 <translation id="7473891865547856676">Ne, ačiū</translation>
 <translation id="747459581954555080">Atkurti viską</translation>
 <translation id="7475671414023905704">„Netscape“ prarasto slaptažodžio URL</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Pridėti paskyrą</translation>
 <translation id="7671130400130574146">Naudoti sistemos pavadinimo juostą ir rėmelius</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, puslapyje „<ph name="PAGE_TITLE" />“.</translation>
+<translation id="7676867886086876795">Balsas siunčiamas į sistemą „Google“, kad bet kuriame teksto lauke būtų galima diktuoti tekstą.</translation>
 <translation id="7681095912841365527">Svetainė gali naudoti „Bluetooth“</translation>
 <translation id="7683373461016844951">Jei norite tęsti, spustelėkite „Gerai“, tada – „Pridėti asmenį“, kad sukurtumėte naują profilį naudodami savo <ph name="DOMAIN" /> el. pašto adresą.</translation>
 <translation id="7684212569183643648">Įdiegė jūsų administratorius</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Standartinis</translation>
 <translation id="7748528009589593815">Ankstesnis skirtukas</translation>
 <translation id="7748626145866214022">Daugiau parinkčių pasiekiama veiksmų juostoje. Paspauskite „Alt“ + A, kad suaktyvintumėte veiksmų juostą.</translation>
+<translation id="7750228210027921155">Vaizdas vaizde</translation>
 <translation id="7751260505918304024">Rodyti visas</translation>
 <translation id="7754704193130578113">Prieš atsiunčiant failą klausti, kur jį išsaugoti</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4441,6 +4460,7 @@
 <translation id="7857949311770343000">Ar tai naujo skirtuko puslapis, kurį tikėjotės išvysti?</translation>
 <translation id="786073089922909430">Paslauga: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Atsisiuntimai</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 slapukas}one{# slapukas}few{# slapukai}many{# slapuko}other{# slapukų}}</translation>
 <translation id="786957569166715433">„<ph name="DEVICE_NAME" />“ – susietas</translation>
 <translation id="7870730066603611552">Nustačius peržiūrėti sinchronizavimo parinktis</translation>
 <translation id="7870790288828963061">Nerasta jokių naujesnių versijų viešojo terminalo programų. Naujinių nėra. Atjunkite USB atmintuką.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Nutildyti skirtukų garsą</translation>
 <translation id="8382913212082956454">Kopijuoti &amp;el. pašto adresą</translation>
 <translation id="8386903983509584791">Nuskaitymas baigtas</translation>
+<translation id="8389492867173948260">Leisti šiam plėtiniui skaityti ir keisti visus lankomų svetainių duomenis:</translation>
 <translation id="8390449457866780408">Serveris nepasiekiamas.</translation>
 <translation id="8391712576156218334">Vaizdas nepasiekiamas. Vėliau bandykite dar kartą.</translation>
 <translation id="8392234662362215700">Paspauskite „Control“–„Shift“–tarpo klavišą, kad perjungtumėte klaviatūros išdėstymą.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Būsite atjungti po <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">SIM kortelės PIN kodo pakeitimas</translation>
 <translation id="8434480141477525001">„Native Client“ derinimo prievadas</translation>
+<translation id="8435395510592618362">Patvirtinkite savo tapatybę naudodami „<ph name="APP_NAME" />“</translation>
 <translation id="843760761634048214">Išsaugoti kredito kortelės informaciją</translation>
 <translation id="8438328416656800239">Perjunkite į išmanią naršyklę</translation>
 <translation id="8438566539970814960">Tobulinti paieškas ir naršymą</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Negalioja</translation>
 <translation id="8465444703385715657">Norint paleisti „<ph name="PLUGIN_NAME" />“ reikalingas jūsų leidimas</translation>
 <translation id="8466234950814670489">TAR archyvas</translation>
+<translation id="8466417995783206254">Šiame skirtuke vaizdo įrašas leidžiamas vaizdo vaizde režimu.</translation>
 <translation id="8468750959626135884">Atrakinkite „<ph name="DEVICE_TYPE" />“ naudodami „Android“ telefoną.</translation>
 <translation id="8470028084415844044">Jei norite pasiekti visus slaptažodžius visuose įrenginiuose, įjunkite sinchronizavimą.</translation>
 <translation id="8470513973197838199">Išsaugoti <ph name="ORIGIN" /> slaptažodžiai</translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Paleisti šį papildinį</translation>
 <translation id="8497219075884839166">„Windows“ paslaugų programos</translation>
 <translation id="8498214519255567734">Padaryti, kad būtų patogiau žiūrėti į ekraną ar skaityti prietemoje</translation>
+<translation id="8498395510292172881">Toliau skaitykite naudodami „Chrome“</translation>
 <translation id="8503813439785031346">Vartotojo vardas</translation>
 <translation id="850875081535031620">Neaptikta kenkėjiškos programinės įrangos</translation>
 <translation id="8509646642152301857">Atsisiunčiant rašybos tikrinimo žodyną įvyko klaida.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Bandyti dar kartą</translation>
 <translation id="8725178340343806893">Adresynas / žymės</translation>
 <translation id="8726206820263995930">Politikos nustatymų gavimo iš serverio klaida: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Daugiau nerodyti</translation>
 <translation id="8727344521467137076">Jūsų kompiuteryje yra žalingos programinės įrangos. „Chrome“ ją pašalins ir atkurs nustatymus, kad naršyklė vėl veiktų įprastai.</translation>
 <translation id="8730621377337864115">Atlikta</translation>
 <translation id="8732030010853991079">Naudokite šį plėtinį spustelėję šią piktogramą.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Atidaryti nuorodą naujame &amp;skirtuke</translation>
 <translation id="9030515284705930323">Organizacija jūsų paskyroje neįgalino „Google Play“ parduotuvės. Jei reikia daugiau informacijos, susisiekite su administratoriumi.</translation>
 <translation id="9033857511263905942">&amp;Įklijuoti</translation>
+<translation id="9034924485347205037">„Linux“ failai</translation>
 <translation id="9035012421917565900">Elementų negalima perkelti atgal į „<ph name="DESTINATION_NAME" />“, todėl negalėsite anuliuoti šio veiksmo.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Rodyti originalą</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Nuskaitoma ieškant „Bluetooth“ įrenginių...</translation>
 <translation id="9176611096776448349">„<ph name="WINDOW_TITLE" />“ – prijungtas „Bluetooth“ įrenginys</translation>
 <translation id="9177499212658576372">Šiuo metu esate prisijungę prie <ph name="NETWORK_TYPE" /> tinklo.</translation>
+<translation id="9179734824669616955">„Linux“ (beta versijos) nustatymas „<ph name="DEVICE_TYPE" />“ įrenginyje</translation>
 <translation id="9180281769944411366">Šis procesas gali užtrukti kelias minutes. Paleidžiamas „Linux“ sudėtinis rodinys.</translation>
 <translation id="9180380851667544951">Svetainė gali bendrinti jūsų ekrano vaizdą</translation>
 <translation id="9188441292293901223">Atnaujinkite telefoną į naujesnę „Android“ versiją, kad atrakintumėte šį „<ph name="DEVICE_TYPE" />“.</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index e8f98275..34c80f4 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Jautāt pirms piekļūšanas</translation>
 <translation id="1434696352799406980">Tādējādi tiks atiestatīta jūsu sākumlapa, jaunas cilnes lapa, meklētājprogramma un piespraustās cilnes. Turklāt tiks atspējoti visi paplašinājumi, kā arī tiks notīrīti pagaidu dati, piemēram, sīkfaili. Netiks notīrītas jūsu grāmatzīmes, vēsture un saglabātās paroles.</translation>
 <translation id="1434886155212424586">Sākumlapa ir jaunas cilnes lapa</translation>
+<translation id="1436671784520050284">Turpināt iestatīšanu</translation>
 <translation id="1436784010935106834">Noņemts</translation>
 <translation id="1438632560381091872">Ieslēgt ciļņu skaņu</translation>
 <translation id="1442392616396121389">Maršrutēšanas prefikss</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Picas šķēle</translation>
 <translation id="1467432559032391204">Pa kreisi</translation>
 <translation id="1468571364034902819">Nevar izmantot šo profilu</translation>
+<translation id="1470533772306424441">Mēs instalēsim šīs lietotnes jūsu vietā. Vairāk lietotņu savai ierīcei varat atrast Play veikalā.</translation>
 <translation id="1470811252759861213">Lai paplašinājumi būtu pieejami visos datoros, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Fails “<ph name="FILENAME" />” netika augšupielādēts. Jūsu Google diskā nepietiek vietas.</translation>
 <translation id="1475502736924165259">Sistēmā ir sertifikāti, kas neiederas nevienā no citām kategorijām</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Tālināt</translation>
 <translation id="1830550083491357902">Nav pierakstījies</translation>
 <translation id="1832511806131704864">Tālruņa iestatījumu izmaiņas atjauninātas</translation>
-<translation id="1832685970989658809">Administrators ir atspējojis saglabātos maksājuma veidus.</translation>
 <translation id="1834503245783133039">Nesekmīga lejupielāde: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Notīrīt meklēšanas vaicājumu</translation>
 <translation id="1838709767668011582">Google vietne</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">No:</translation>
 <translation id="2193365732679659387">Uzticamības iestatījumi</translation>
 <translation id="2195729137168608510">E-pasta aizsardzība</translation>
+<translation id="2199298570273670671">Kļūda</translation>
 <translation id="2200356397587687044">Pārlūkam Chrome ir nepieciešama atļauja turpināt</translation>
 <translation id="220138918934036434">Paslēpt pogu</translation>
 <translation id="2202898655984161076">Radās problēma saistībā ar printeru parādīšanu. Iespējams, daži no printeriem nav sekmīgi reģistrēti pakalpojumā <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Rādīt paroli</translation>
 <translation id="2436186046335138073">Vai atļaut <ph name="HANDLER_HOSTNAME" /> atvērt visas <ph name="PROTOCOL" /> saites?</translation>
 <translation id="2436707352762155834">Minimums</translation>
-<translation id="2437139306601019091">Datu lietojuma mērīšana ir pabeigta.</translation>
 <translation id="2440604414813129000">Skatīt avotu</translation>
 <translation id="2445081178310039857">Nepieciešams paplašinājuma saknes direktorijs.</translation>
 <translation id="2445484935443597917">Izveidot jaunu profilu</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> vēlas verificēt jūsu identitāti</translation>
 <translation id="2448312741937722512">Tips</translation>
 <translation id="2450223707519584812">Jūs nevarēsiet pievienot lietotājus, jo trūkst Google API atslēgu. Detalizētu informāciju skatiet vietnē <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Vai izslēgt sinhronizēšanu un izrakstīties?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Fails jau eksistē</translation>
 <translation id="2453860139492968684">Pabeigt</translation>
 <translation id="2454247629720664989">Atslēgvārds</translation>
+<translation id="245661998428026871">Tiks pārtraukta videoklipa atskaņošana režīmā “Attēls attēlā”.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> vēlas kopēt failus no krātuves <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Sertifikāta izdevējiestādes atslēgas ID</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> pievienots</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Ieslēgt ciļņu skaņu</translation>
 <translation id="3053013834507634016">Sertifikāta atslēgas lietošana</translation>
 <translation id="3057861065630527966">Dublēt fotoattēlus un videoklipus</translation>
+<translation id="3059313675706898490">Android ziņojumi</translation>
 <translation id="3060379269883947824">Iespējot funkciju “Atlasīt, lai izrunātu”</translation>
 <translation id="3061707000357573562">Ielāpu pakalpojums</translation>
 <translation id="3064410671692449875">Nepietiek datu</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Vai aizmirsāt paroli?</translation>
 <translation id="3132996321662585180">Atsvaidzināt katru dienu</translation>
 <translation id="3135204511829026971">Pagriezt ekrānu</translation>
+<translation id="313638818480447860">Mēs atradām <ph name="NUMBER_OF_APPS" /> lietotni(-es), kas ir saistīta(-as) ar jūsu kontu un ir optimizēta(-as) šai ierīcei.</translation>
 <translation id="313963229645891001">Notiek lejupielāde: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Noklusējuma iemiesojums dzeltenā krāsā</translation>
 <translation id="3140353188828248647">Iezīmēt adreses joslu</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Pareizrakstības pārbaude</translation>
 <translation id="3183139917765991655">Profilu importētājs</translation>
 <translation id="3184560914950696195">Nevar saglabāt šeit: $1. Rediģētie attēli tiks saglabāti mapē Lejupielādes.</translation>
+<translation id="3188257591659621405">Mani faili</translation>
 <translation id="3188465121994729530">Pārvietotais vidējais</translation>
 <translation id="3190558889382726167">Parole ir saglabāta</translation>
 <translation id="3192947282887913208">Audio faili</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Notiek faila “<ph name="FILE_NAME" />” tilpsaspiešana...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informācija par lietotni</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> — videoklips tiek atskaņots režīmā “Attēls attēlā”</translation>
 <translation id="3335337277364016868">Ieraksta izveides gads</translation>
 <translation id="3335947283844343239">Vēlreiz atvērt aizvērto cilni</translation>
 <translation id="3336664756920573711">Atbloķējiet ierīci <ph name="DEVICE_TYPE" />, izmantojot savu Android tālruni.</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Drukāšana neizdevās. Lūdzu, pārbaudiet printeri un mēģiniet vēlreiz.</translation>
 <translation id="3364721542077212959">Skārienekrāna pildspalvas rīki</translation>
 <translation id="3365598184818502391">Izmantojiet taustiņu Ctrl vai Alt</translation>
+<translation id="3367047597842238025">Iestatiet <ph name="DEVICE_TYPE" /> ierīci atbilstoši savām vēlmēm un atklājiet visas pieejamās iespējas.</translation>
 <translation id="3368922792935385530">pievienots</translation>
 <translation id="3369624026883419694">Risina saimniekdatoru...</translation>
 <translation id="337286756654493126">Rakstīt mapēs, kuras atverat lietojumprogrammā</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Uzdevumjoslā ar peles labo pogu noklikšķiniet uz ikonas <ph name="SMALL_PRODUCT_LOGO" />.</translation>
 <translation id="3391716558283801616">7. cilne</translation>
 <translation id="3396331542604645348">Atlasītais printeris nav pieejams vai nav instalēts pareizi. Pārbaudiet savu printeri vai pamēģiniet atlasīt citu printeri.</translation>
+<translation id="3396800784455899911">Noklikšķinot uz pogas “Piekrist un turpināt”, jūs piekrītat iepriekš aprakstītajai apstrādei šajos Google pakalpojumos.</translation>
 <translation id="3399432415385675819">Paziņojumi tiks atspējoti</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Šai vietnei nav saglabāta neviena parole</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Šo ierīci nevar atvērt, jo tās failu sistēma netiek atbalstīta.</translation>
 <translation id="3727148787322499904">Nomainot šo iestatījumu, tiks ietekmēti visi koplietotie tīkli.</translation>
 <translation id="3727187387656390258">Pārbaudīt uznirstošo elementu</translation>
+<translation id="3729506734996624908">Atļautās vietnes</translation>
 <translation id="3732078975418297900">Kļūda rindiņā <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL serveris ar palielināšanu</translation>
+<translation id="3735740477244556633">Kārtot pēc</translation>
 <translation id="3737274407993947948">Instalējot Linux, radās kļūda...</translation>
 <translation id="3737536731758327622">Jūsu lejupielādes ir redzamas šeit.</translation>
+<translation id="3738671331307774213">Jūsu identitātes verificēšana palīdz aizsargāt jūsu privātos datus</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vai atvērt lietojumprogrammu <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ierīce tagad tiks rādīta administratora konsolē</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Iegūstiet vietņu, Android lietotņu izstrādes rīkus un citus rīkus. Instalējot Linux, tiks lejupielādēts šāds datu apjoms: <ph name="DOWNLOAD_SIZE" />.</translation>
 <translation id="385051799172605136">Atpakaļ</translation>
 <translation id="3851428669031642514">Ielādēt nedrošos skriptus</translation>
+<translation id="3854599674806204102">Izvēlieties opciju</translation>
 <translation id="3855441664322950881">Pakot paplašinājumu</translation>
 <translation id="3855676282923585394">Importēt grāmatzīmes un iestatījumus...</translation>
 <translation id="3856800405688283469">Laika joslas atlasīšana</translation>
-<translation id="3856921555429624101">Datu lietojuma mērīšana ir pabeigta.</translation>
 <translation id="3857228364945137633">Izmēģiniet Smart Lock, lai atbloķētu savu ierīci (<ph name="DEVICE_TYPE" />) bez paroles, kad tuvumā atrodas tālrunis.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sinhronizācija ir apturēta</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Atvērt visu inkognito režīma logā</translation>
 <translation id="4508265954913339219">Aktivizācija neizdevās</translation>
 <translation id="4508765956121923607">Skatīt av&amp;otu</translation>
-<translation id="4509823033118379431">Šobrīd attēli nav pieejami. Lūdzu, izveidojiet atkārtotu savienojumu, lai skatītu kolekcijas.</translation>
 <translation id="451407183922382411">Nodrošina <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Izveidot jaunu uzraudzītā lietotāja profilu</translation>
 <translation id="4514610446763173167">Izmantojiet video pogu, lai atskaņotu vai pārtrauktu atskaņošanu</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Turpiniet citā ierīcē</translation>
 <translation id="4628314759732363424">Mainīt...</translation>
 <translation id="4628757576491864469">Ierīces</translation>
+<translation id="4628948037717959914">Fotoattēls</translation>
 <translation id="4630590996962964935">Nederīga rakstzīme: $1</translation>
 <translation id="4631887759990505102">Izpildītājs</translation>
 <translation id="4632483769545853758">Ieslēgt cilnes skaņu</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Gatavs dublēšanai: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Šis fails parasti netiek lejupielādēts un var būt bīstams.</translation>
 <translation id="4907306957610201395">Atļaujas kategorija</translation>
-<translation id="4907824805858067479">Jūsu administrators ir atspējojis saglabātās kartes.</translation>
 <translation id="4908811072292128752">Atveriet jaunu cilni, lai pārlūkotu divas vietnes vienlaikus.</translation>
 <translation id="4909038193460299775">Tā kā šo kontu pārvalda <ph name="DOMAIN" />, jūsu grāmatzīmes, vēsture, paroles un citi iestatījumi tiks dzēsti no šīs ierīces. Tomēr jūsu dati joprojām tiks glabāti jūsu Google kontā un tos var pārvaldīt <ph name="BEGIN_LINK" />Google informācijas panelī<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Esat veiksmīgi reģistrējies</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Gada licence</translation>
 <translation id="4957949153200969297">Iespējot tikai funkcijas, kas saistītas ar <ph name="IDS_SHORT_PRODUCT_NAME" /> sinhronizāciju</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> — <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Jūsu kartes vienuviet</translation>
 <translation id="496226124210045887">Atlasītajā mapē ir iekļauti sensitīvi faili. Vai tiešām vēlaties piešķirt lietotnei $1 patstāvīgu lasīšanas piekļuvi šai mapei?</translation>
 <translation id="4964455510556214366">Izkārtojums</translation>
 <translation id="4964673849688379040">Notiek pārbaude...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Pievienot paplašinājumu</translation>
 <translation id="5029568752722684782">Dzēst kopiju</translation>
 <translation id="5030338702439866405">Izsniedzis</translation>
+<translation id="503155457707535043">Pašlaik lejupielādētās lietotnes</translation>
 <translation id="503498442187459473"><ph name="HOST" /> vēlas lietot jūsu kameru un mikrofonu.</translation>
 <translation id="5036662165765606524">Neļaut nevienai vietnei automātiski lejupielādēt vairākus failus</translation>
 <translation id="5037676449506322593">Atlasīt visu</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Izslēgt skaņu</translation>
 <translation id="5785583009707899920">Chrome failu utilītprogrammas</translation>
 <translation id="5787146423283493983">Atslēgu saskaņošana</translation>
+<translation id="5788127256798019331">Play faili</translation>
 <translation id="5788367137662787332">Diemžēl vismaz vienu ierīces <ph name="DEVICE_LABEL" /> nodalījumu nevar uzstādīt.</translation>
 <translation id="5794414402486823030">Vienmēr atvērt, izmantojot sistēmas skatītāju</translation>
 <translation id="5794786537412027208">Aizvērt visas Chrome lietotnes</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Tulkojums</translation>
 <translation id="5991049340509704927">Palielināt</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šo lietojumprogrammu.}zero{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}one{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}other{Lai nodrošinātu iespēju turpmāk pārlūkot tīmekli, palūdziet administratoram noņemt šīs lietojumprogrammas.}}</translation>
-<translation id="5993332328670040093">Jūsu datu lietojums vairs netiks mērīts.</translation>
 <translation id="6002458620803359783">Vēlamās balsis</translation>
 <translation id="6005695835120147974">Multivides maršrutētājs</translation>
 <translation id="6006484371116297560">Klasiskais motīvs</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Sertifikāta atlasīšana</translation>
 <translation id="6181431612547969857">Lejupielāde ir bloķēta.</translation>
 <translation id="6185132558746749656">Ierīces atrašanās vieta</translation>
+<translation id="6185617499004995178">CUPS IPP validators</translation>
 <translation id="6185696379715117369">Augšup</translation>
 <translation id="6189273858858366896">Izveidojiet vai pārvaldiet tīkla failu kopīgošanu.</translation>
 <translation id="6189412234224385711">Atvērt ar paplašinājumu <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Vietrādī URL pievienojiet vaicājuma parametru, lai automātiski atsvaidzinātu lapu: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Akumulators</translation>
 <translation id="6232116551750539448">Savienojums ar “<ph name="NAME" />” tika pārtraukts.</translation>
+<translation id="6235700927623181151">Šajā cilnē tiek kopīgots jūsu darbvirsmas saturs.</translation>
 <translation id="6237816943013845465">Ļauj pielāgot ekrāna izšķirtspēju.</translation>
 <translation id="6238923052227198598">Paturēt pēdējo piezīmi bloķēšanas ekrānā</translation>
 <translation id="6239558157302047471">Atkārtoti ielādēt &amp;ietvaru</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Fails <ph name="FILE_NAME" /> parasti netiek lejupielādēts, un tas var būt bīstams.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Jauns printeris jūsu tīklā}zero{Jauni printeri jūsu tīklā}one{Jauni printeri jūsu tīklā}other{Jauni printeri jūsu tīklā}}</translation>
-<translation id="6286684120317096255">Notiek datu lietojuma mērīšana.</translation>
 <translation id="6286708577777130801">Informācija par saglabāto paroli</translation>
 <translation id="6287852322318138013">Lietotnes atlasīšana šī faila atvēršanai</translation>
 <translation id="6289452883081499048">Personalizēti Google pakalpojumi, piemēram, Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Pārvaldīt mākoņdrukas ierīces</translation>
 <translation id="6451689256222386810">Ja esat aizmirsis ieejas frāzi vai vēlaties mainīt šo iestatījumu, <ph name="BEGIN_LINK" />atiestatiet sinhronizāciju<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Noraidīt</translation>
+<translation id="6455264371803474013">Konkrētās vietnēs</translation>
 <translation id="6455894534188563617">&amp;Jauna mape</translation>
 <translation id="6456394469623773452">Apmierinošs</translation>
 <translation id="6456631036739229488">Smart Lock tālrunis ir mainīts. Ievadiet paroli, lai atjauninātu Smart Lock. Nākamajā reizē šīs ierīces (<ph name="DEVICE_TYPE" />) atbloķēšanai tiks izmantots jūsu tālrunis. Iestatījumos varat izslēgt Smart Lock.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Atkārtoti ielādēt šo lapu</translation>
 <translation id="6577284282025554716">Lejupielāde atcelta: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifrēt sinhronizētās paroles, izmantojot savu Google lietotājvārdu un paroli</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> — tiek kopīgots darbvirsmas saturs</translation>
 <translation id="6580151766480067746">ARC versija</translation>
 <translation id="6581162200855843583">Google diska saite</translation>
 <translation id="6582421931165117398">Lai aizsargātu savu personas informāciju, nekavējoties nomainiet paroli. Lai varētu nomainīt paroli, jums būs jāpierakstās.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Tālāk norādītā lietojumprogramma, iespējams, izraisa pārlūka Chrome nepareizu darbību.}zero{Tālāk norādītās lietojumprogrammas, iespējams, izraisa pārlūka Chrome nepareizu darbību.}one{Tālāk norādītās lietojumprogrammas, iespējams, izraisa pārlūka Chrome nepareizu darbību.}other{Tālāk norādītās lietojumprogrammas, iespējams, izraisa pārlūka Chrome nepareizu darbību.}}</translation>
 <translation id="7303900363563182677">Šajā vietnē ir bloķēta starpliktuvē kopētā teksta un attēlu skatīšana.</translation>
 <translation id="730515362922783851">apmainīties datiem ar jebkuru ierīci lokālajā tīklā vai internetā</translation>
+<translation id="7307129035224081534">Apturēta</translation>
 <translation id="7308002049209013926">Izmantojiet palaišanas programmu, lai ātri piekļūtu lietotnēm un darbībām. Lai tām piekļūtu, izmantojot tastatūru, nospiediet taustiņu kombināciju Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Rādīt &amp;vadīklas</translation>
 <translation id="7310598146671372464">Neizdevās pieteikties. Serveris neatbalsta norādītos Kerberos šifrēšanas veidus. Lūdzu, sazinieties ar administratoru.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Savienojuma iestatīšana tālrunī <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Uznirstošie logi bloķēti</translation>
 <translation id="7407430846095439694">Importēt un saistīt</translation>
-<translation id="7409233648990234464">Atkārtoti palaist un Powerwash</translation>
 <translation id="7409836189476010449">Aktivizēt Flash atskaņotāju</translation>
 <translation id="7410344089573941623">Vaicāt, ja vietne <ph name="HOST" /> vēlas piekļūt jūsu kamerai un mikrofonam</translation>
 <translation id="741204030948306876">Jā, piekrītu</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Netscape sertifikāta atsaukšanas URL</translation>
 <translation id="7469894403370665791">Automātiski pievienoties šim tīklam</translation>
 <translation id="747114903913869239">Kļūda: nespēj dekodēt paplašinājumu</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> ierīces sagatavošana</translation>
 <translation id="7473891865547856676">Nē, paldies!</translation>
 <translation id="747459581954555080">Atjaunot visu</translation>
 <translation id="7475671414023905704">Netscape pazaudētās paroles URL</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Pievienot kontu</translation>
 <translation id="7671130400130574146">Izmantot sistēmas virsrakstjoslu un apmales</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, lapā <ph name="PAGE_TITLE" /></translation>
+<translation id="7676867886086876795">Nosūtiet savus balss datus Google serveriem, lai atļautu diktēšanu jebkurā teksta laukā.</translation>
 <translation id="7681095912841365527">Vietne var izmantot Bluetooth savienojumu.</translation>
 <translation id="7683373461016844951">Lai turpinātu, noklikšķiniet uz “Labi”, pēc tam izveidojiet jaunu profilu savai <ph name="DOMAIN" /> e-pasta adresei, noklikšķinot uz “Pievienot personu”.</translation>
 <translation id="7684212569183643648">Instalēja administrators</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standarta</translation>
 <translation id="7748528009589593815">Iepriekšējā cilne</translation>
 <translation id="7748626145866214022">Vairāk pieejamu opciju darbību joslā. Lai izceltu darbību joslu, nospiediet taustiņu kombināciju Alt+A.</translation>
+<translation id="7750228210027921155">Attēls attēlā</translation>
 <translation id="7751260505918304024">Rādīt visu</translation>
 <translation id="7754704193130578113">Jautāt, kur saglabāt ikvienu failu pirms lejuplādēšanas</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4439,6 +4458,7 @@
 <translation id="7857949311770343000">Vai šī ir jaunas cilnes lapa, ko gaidījāt?</translation>
 <translation id="786073089922909430">Pakalpojums: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">Lejupielādes</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 sīkfails}zero{# sīkfailu}one{# sīkfails}other{# sīkfaili}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> — izveidots savienojums pārī</translation>
 <translation id="7870730066603611552">Sinhronizācijas opciju pārskatīšana pēc iestatīšanas</translation>
 <translation id="7870790288828963061">Netika atrasta neviena Kioska lietotne ar jaunāku versiju. Nav jāatjaunina neviena lietotne. Lūdzu, izņemiet USB atmiņas karti.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Izslēgt ciļņu skaņu</translation>
 <translation id="8382913212082956454">Kopēt un nosūtīt adresi pa e-pastu</translation>
 <translation id="8386903983509584791">Meklēšana ir pabeigta</translation>
+<translation id="8389492867173948260">Ļaut šim paplašinājumam lasīt un mainīt visus jūsu datus jūsu apmeklētajās vietnēs:</translation>
 <translation id="8390449457866780408">Serveris nav pieejams.</translation>
 <translation id="8391712576156218334">Attēls nav pieejams. Vēlāk mēģiniet vēlreiz.</translation>
 <translation id="8392234662362215700">Lai pārslēgtu tastatūras izkārtojumu, nospiediet taustiņus Control-Shift-Space.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Jūs tiksiet izrakstīts pēc šāda laika: <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">SIM kartes PIN mainīšana</translation>
 <translation id="8434480141477525001">Native Client atkļūdošanas ports</translation>
+<translation id="8435395510592618362">Identitātes verificēšana, izmantojot <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Saglabāt kredītkarti</translation>
 <translation id="8438328416656800239">Pāreja uz viedu pārlūku</translation>
 <translation id="8438566539970814960">Uzlabot meklēšanu un pārlūkošanu</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Nav derīgs</translation>
 <translation id="8465444703385715657">Spraudņa <ph name="PLUGIN_NAME" /> izpildīšanai ir nepieciešama jūsu atļauja</translation>
 <translation id="8466234950814670489">Tar arhīvs</translation>
+<translation id="8466417995783206254">Šajā cilnē videoklips tiek atskaņots režīmā “Attēls attēlā”.</translation>
 <translation id="8468750959626135884">Atbloķējiet ierīci <ph name="DEVICE_TYPE" />, izmantojot savu Android tālruni.</translation>
 <translation id="8470028084415844044">Lai visas paroles būtu pieejamas visās jūsu ierīcēs, ieslēdziet sinhronizēšanu.</translation>
 <translation id="8470513973197838199">Saglabātās paroles vietnei <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Izpildīt šo spraudni</translation>
 <translation id="8497219075884839166">Windows utilītprogrammas</translation>
 <translation id="8498214519255567734">Atvieglojiet skatīšanos ekrānā vai lasīšanu blāvā apgaismojumā</translation>
+<translation id="8498395510292172881">Lasīšanas turpināšana pārlūkā Chrome</translation>
 <translation id="8503813439785031346">Lietotājvārds</translation>
 <translation id="850875081535031620">Netika atrasta neviena kaitīga programmatūra.</translation>
 <translation id="8509646642152301857">Pareizrakstības pārbaudes vārdnīcas lejupielāde neizdevās.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Mēģināt vēlreiz</translation>
 <translation id="8725178340343806893">Izlase/Grāmatzīmes</translation>
 <translation id="8726206820263995930">Iegūstot politikas iestatījumus no servera, radās kļūda: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Vairs nerādīt šo paziņojumu</translation>
 <translation id="8727344521467137076">Jūsu datorā ir kaitīga programmatūra. Chrome to noņems un atjaunos jūsu iestatījumus, lai pārlūks atkal darbotos, kā paredzēts.</translation>
 <translation id="8730621377337864115">Gatavs</translation>
 <translation id="8732030010853991079">Lai lietotu šo paplašinājumu, noklikšķiniet uz šīs ikonas.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Atvēr&amp;t saiti jaunā cilnē</translation>
 <translation id="9030515284705930323">Jūsu organizācija nav iespējojusi Google Play veikalu jūsu kontam. Sazinieties ar administratoru, lai saņemtu plašāku informāciju.</translation>
 <translation id="9033857511263905942">&amp;Ielīmēt</translation>
+<translation id="9034924485347205037">Linux faili</translation>
 <translation id="9035012421917565900">Vienumus nevar pārvietot atpakaļ uz “<ph name="DESTINATION_NAME" />”, tādēļ nevarēsiet atsaukt šo darbību.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Rādīt sākotnējo tekstu</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Notiek Bluetooth ierīču meklēšana...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> — pievienota Bluetooth ierīce</translation>
 <translation id="9177499212658576372">Jūs pašlaik esat izveidojis savienojumu ar šādu tīklu: <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Linux (Beta) iestatīšana jūsu <ph name="DEVICE_TYPE" /> ierīcē</translation>
 <translation id="9180281769944411366">Šis process var ilgt dažas minūtes. Notiek Linux konteinera startēšana.</translation>
 <translation id="9180380851667544951">Vietne var kopīgot jūsu ekrānu.</translation>
 <translation id="9188441292293901223">Lūdzu, izmantojiet tālrunī jaunāku Android versiju, lai atbloķētu šo <ph name="DEVICE_TYPE" /> ierīci.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 188787f..59aced3 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">ആക്‌സസ് ചെയ്യുന്നതിന് മുമ്പ് ചോദിക്കുക</translation>
 <translation id="1434696352799406980">ഇത് നിങ്ങളുടെ ആരംഭ പേജ്, പുതിയ ടാബ് പേജ്, തിരയൽ എഞ്ചിൻ, പിൻ ചെയ്‌ത ടാബുകൾ എന്നിവ റീസെറ്റുചെയ്യും. ഒപ്പം ഇത് എല്ലാ വിപുലീകരണങ്ങളെയും പ്രവർത്തനരഹിതമാക്കുകയും കുക്കികൾ പോലുള്ള താൽക്കാലിക ഡാറ്റ മായ്‌ക്കുകയും ചെയ്യും. നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകൾ, ചരിത്രം, സംരക്ഷിച്ച പാസ്‌വേഡുകൾ എന്നിവ മായ്‌ക്കില്ല.</translation>
 <translation id="1434886155212424586">ഹോംപേജ് പുതിയ ടാബ് പേജാണ്</translation>
+<translation id="1436671784520050284">സജ്ജീകരിക്കുന്നത് തുടരുക</translation>
 <translation id="1436784010935106834">നീക്കംചെയ്‌തു</translation>
 <translation id="1438632560381091872">ടാബുകൾ അൺമ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="1442392616396121389">റൂട്ടിംഗ് പ്രിഫിക്‌സ്</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">പിസ്സാ സ്‌ലൈസ്</translation>
 <translation id="1467432559032391204">ഇടത്</translation>
 <translation id="1468571364034902819">ഈ പ്രൊഫൈൽ ഉപയോഗിക്കാനാവില്ല</translation>
+<translation id="1470533772306424441">ആ ആപ്പുകൾ ഞങ്ങൾ നിങ്ങൾക്കായി ഇൻസ്‌റ്റാൾ ചെയ്യും. നിങ്ങളുടെ ഉപകരണത്തിനായുള്ള കൂടുതൽ ആപ്പുകൾ Play സ്‌റ്റോറിൽ കണ്ടെത്താം.</translation>
 <translation id="1470811252759861213">നിങ്ങളുടെ എല്ലാ കമ്പ്യൂട്ടറുകളിലും വിപുലീകരണങ്ങൾ ലഭിക്കാൻ, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" അപ്‌ലോഡുചെയ്‌തില്ല. നിങ്ങളുടെ Google ഡ്രൈവിൽ മതിയായ ഇടമില്ല.</translation>
 <translation id="1475502736924165259">മറ്റ് വിഭാഗങ്ങളിലൊന്നും യോജിക്കാത്ത സര്‍‌ട്ടിഫിക്കറ്റുകള്‍‌ നിങ്ങളുടെ ഫയലിലുണ്ട്</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">സൂം &amp;ഔട്ട് ചെയ്യുക</translation>
 <translation id="1830550083491357902">പ്രവേശിച്ചിട്ടില്ല</translation>
 <translation id="1832511806131704864">ഫോൺ മാറ്റം അപ്‌ഡേറ്റുചെയ്‌തു</translation>
-<translation id="1832685970989658809">സംരക്ഷിച്ച പേയ്മെന്റ് രീതികൾ നിങ്ങളുടെ അഡ്‌മിൻ പ്രവർത്തനരഹിതമാക്കി</translation>
 <translation id="1834503245783133039">ഡൗൺലോഡ് പരാജയപ്പെട്ടു: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">തിരയൽ മായ്ക്കുക</translation>
 <translation id="1838709767668011582">Google സൈറ്റ്</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">പ്രേഷിതാവ്:</translation>
 <translation id="2193365732679659387">വിശ്വസ്ഥത ക്രമീകരണം</translation>
 <translation id="2195729137168608510">ഇമെയില്‍‌ പരിരക്ഷണം</translation>
+<translation id="2199298570273670671">പിശക്</translation>
 <translation id="2200356397587687044">Chrome-ന് തുടരാൻ അനുമതി ആവശ്യമാണ്</translation>
 <translation id="220138918934036434">മറയ്ക്കല്‍ ബട്ടണ്‍</translation>
 <translation id="2202898655984161076">പ്രിന്‍ററുകള്‍ ലിസ്റ്റുചെയ്യുന്നതില്‍ പ്രശ്നമുണ്ടായിരുന്നു. നിങ്ങളുടെ പ്രിന്‍ററുകളില്‍ ചിലത് <ph name="CLOUD_PRINT_NAME" /> എന്നതില്‍ വിജയകരമായി രജിസ്റ്റര്‍ ചെയ്തിട്ടില്ലായിരിക്കാം.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">പാസ്‌വേഡ് കാണിക്കുക</translation>
 <translation id="2436186046335138073">എല്ലാ <ph name="PROTOCOL" /> ലിങ്കുകളും തുറക്കാൻ <ph name="HANDLER_HOSTNAME" /> എന്നതിനെ അനുവദിക്കണോ?</translation>
 <translation id="2436707352762155834">കുറഞ്ഞത്</translation>
-<translation id="2437139306601019091">ഡാറ്റ ഉപയോഗം കണക്കാക്കുന്നത് അവസാനിച്ചു</translation>
 <translation id="2440604414813129000">ഉറവിടം &amp;കാണുക</translation>
 <translation id="2445081178310039857">വിപുലീകരണ റൂട്ട് ഡയറക്‌ടറി ആവശ്യമാണ്.</translation>
 <translation id="2445484935443597917">പുതിയ പ്രൊഫൈൽ സൃഷ്‌ടിക്കുക</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" />-ന് നിങ്ങളുടെ ഐഡന്റിറ്റി പരിശോധിച്ച് ഉറപ്പിക്കേണ്ടതുണ്ട്</translation>
 <translation id="2448312741937722512">തരം</translation>
 <translation id="2450223707519584812">Google API കീകൾ നഷ്‌ടമായതിനാൽ നിങ്ങൾക്ക് ഉപയോക്താക്കളെ ചേർക്കാനാവില്ല. വിശദാംശങ്ങൾക്ക്, <ph name="DETAILS_URL" /> കാണുക.</translation>
 <translation id="2450310832094867474">സമന്വയം ഓഫാക്കി സൈൻ ഔട്ട് ചെയ്യണോ?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">ഫയൽ ഇതിനകം നിലനിൽക്കുന്നു</translation>
 <translation id="2453860139492968684">പൂര്‍ത്തിയാക്കുക</translation>
 <translation id="2454247629720664989">കീവേഡ്</translation>
+<translation id="245661998428026871">ചിത്രത്തിനുള്ളിലെ ചിത്രം മോഡിൽ വീഡിയോ പ്ലേ ചെയ്യുന്നത് അവസാനിക്കും.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" />, <ph name="VOLUME_NAME" />-ൽ നിന്ന് ഫയലുകൾ പകർത്താൻ താൽപ്പര്യപ്പെടുന്നു</translation>
 <translation id="2462724976360937186">സാക്‍ഷ്യപത്ര അതോറിറ്റി കീ ഐഡി</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ചേർത്തു</translation>
@@ -1359,6 +1362,7 @@
 <translation id="304826556400666995">ടാബുകൾ അൺമ്യൂട്ട് ചെയ്യുക</translation>
 <translation id="3053013834507634016">സര്‍‌ട്ടിഫിക്കറ്റ് കീ ഉപയോഗം</translation>
 <translation id="3057861065630527966">നിങ്ങളുടെ ഫോട്ടോകളും വീഡിയോകളും ബാക്കപ്പുചെയ്യുക</translation>
+<translation id="3059313675706898490">Android മെസേജ്</translation>
 <translation id="3060379269883947824">'വായിച്ചുകേൾക്കാൻ തിരഞ്ഞെടുക്കുക' പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="3061707000357573562">പാച്ച് സേവനം</translation>
 <translation id="3064410671692449875">ഡാറ്റ അപര്യാപ്‌തമാണ്</translation>
@@ -1407,6 +1411,7 @@
 <translation id="313205617302240621">പാസ്‌വേഡ് മറന്നോ?</translation>
 <translation id="3132996321662585180">പ്രതിദിനം പുതുക്കുക</translation>
 <translation id="3135204511829026971">സ്‌ക്രീൻ തിരിക്കുക</translation>
+<translation id="313638818480447860">ഈ ഉപകരണത്തിനായി ഓപ്‌റ്റിമൈസ് ചെയ്‌ത, നിങ്ങളുടെ അക്കൗണ്ടുമായി കണക്‌റ്റ് ചെയ്‌ത <ph name="NUMBER_OF_APPS" /> ആപ്പുകൾ ഞങ്ങൾ കണ്ടെത്തി.</translation>
 <translation id="313963229645891001">ഡൗൺലോഡ് ചെയ്യുന്നു, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">ഡിഫോൾട്ടായ മഞ്ഞ അവതാർ</translation>
 <translation id="3140353188828248647">വിലാസ ബാര്‍ ഫോക്കസ് ചെയ്യുക</translation>
@@ -1437,6 +1442,7 @@
 <translation id="3182749001423093222">അക്ഷരത്തെറ്റ് പരിശോധന</translation>
 <translation id="3183139917765991655">പ്രൊഫൈൽ ഇംപോർട്ടർ</translation>
 <translation id="3184560914950696195">$1 എന്നതിലേക്ക് സംരക്ഷിക്കാൻ കഴിയില്ല. എഡിറ്റുചെയ്‌ത ചിത്രങ്ങൾ ഡൗൺലോഡുകൾ ഫോൾഡറിലേക്ക് സംരക്ഷിക്കപ്പെടും.</translation>
+<translation id="3188257591659621405">എൻ്റെ ഫയലുകൾ</translation>
 <translation id="3188465121994729530">ശരാശരി നീക്കുന്നു</translation>
 <translation id="3190558889382726167">പാസ്‌വേഡ് സംരക്ഷിച്ചു</translation>
 <translation id="3192947282887913208">ഓഡിയോ ഫയലുകള്‍</translation>
@@ -1524,6 +1530,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> zip ചെയ്യുന്നു...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">അപ്ലിക്കേഷൻ വിവരം</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - ചിത്രത്തിനുള്ളിലെ ചിത്രം മോഡിൽ വീഡിയോ പ്ലേ ചെയ്യുന്നു</translation>
 <translation id="3335337277364016868">റെക്കോർഡ് ചെയ്‌ത വർഷം</translation>
 <translation id="3335947283844343239">അടച്ച ടാബ് വീണ്ടും തുറക്കുക</translation>
 <translation id="3336664756920573711">Android ഫോൺ ഉപയോഗിച്ച് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അൺലോക്ക് ചെയ്യുക</translation>
@@ -1543,6 +1550,7 @@
 <translation id="3360297538363969800">പ്രിന്റുചെയ്യൽ പരാജയപ്പെട്ടു. നിങ്ങളുടെ പ്രിന്റർ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="3364721542077212959">സ്റ്റൈലസ് ടൂളുകൾ</translation>
 <translation id="3365598184818502391">Ctrl അല്ലെങ്കിൽ Alt ഉപയോഗിക്കുക</translation>
+<translation id="3367047597842238025">നിങ്ങൾ ആഗ്രഹിക്കുന്നപോലെ <ph name="DEVICE_TYPE" /> സജ്ജീകരിക്കൂ, നിങ്ങളുടെ വിരൽത്തുമ്പിലുള്ള, അതിശയിപ്പിക്കുന്ന എല്ലാ കഴിവുകളും കണ്ടെത്തൂ.</translation>
 <translation id="3368922792935385530">ബന്ധിപ്പിച്ചു</translation>
 <translation id="3369624026883419694">റിസോള്‍വിംഗ് ഹോസ്റ്റ്...</translation>
 <translation id="337286756654493126">നിങ്ങൾ അപ്ലിക്കേഷനിൽ തുറക്കുന്ന ഫോൾഡറുകൾ റീഡുചെയ്യുക</translation>
@@ -1556,6 +1564,7 @@
 <translation id="3389312115541230716">ടാസ്‌ക്‌‌ബാറിലെ <ph name="SMALL_PRODUCT_LOGO" /> ഐക്കണിൽ വലത് ക്ലിക്കുചെയ്യുക</translation>
 <translation id="3391716558283801616">ടാബ് 7</translation>
 <translation id="3396331542604645348">തിരഞ്ഞെടുത്ത പ്രിന്റർ ലഭ്യമല്ല അല്ലെങ്കിൽ ശരിയായി ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല.  നിങ്ങളുടെ പ്രിന്റർ പരിശോധിക്കുകയോ മറ്റൊരു പ്രിന്റർ തിരഞ്ഞെടുക്കാൻ ശ്രമിക്കുകയോ ചെയ്യുക</translation>
+<translation id="3396800784455899911">"അംഗീകരിച്ച് തുടരുക" ബട്ടൺ ക്ലിക്ക് ചെയ്യുക വഴി, ഈ Google സേവനങ്ങൾക്കായി മുകളിൽ വിവരിച്ചിട്ടുള്ള പ്രോസസിംഗിന് നിങ്ങൾ സമ്മതിക്കുകയാണ്.</translation>
 <translation id="3399432415385675819">അറിയിപ്പുകൾ പ്രവർത്തനരഹിതമാകും</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">ഈ സൈറ്റിനായി പാസ്‍വേഡുകളൊന്നും സംരക്ഷിച്ചിട്ടില്ല</translation>
@@ -1784,10 +1793,13 @@
 <translation id="3726463242007121105">ഈ ഉപകരണത്തിന്റെ ഫയൽസിസ്റ്റം പിന്തുണയ്ക്കാത്തതിനാൽ ഇത് തുറക്കാനായില്ല.</translation>
 <translation id="3727148787322499904">ഈ ക്രമീകരണം മാറ്റുന്നത് എല്ലാ പങ്കിട്ട നെറ്റ്‌വർക്കുകളെയും ബാധിക്കാനിടയാക്കും</translation>
 <translation id="3727187387656390258">പോപ്പ്‌അപ്പ് പരിശോധിക്കുക</translation>
+<translation id="3729506734996624908">അനുവദനീയമായ സൈറ്റുകൾ</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" />-മത്തെ വരിയിൽ പിശക്</translation>
 <translation id="3733127536501031542">സ്റ്റെപ്പ്-അപ്പ് ഉള്ള SSL സെര്‍വര്‍ </translation>
+<translation id="3735740477244556633">ഇപ്രകാരം അടുക്കുക</translation>
 <translation id="3737274407993947948">Linux ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിൽ പിശക്...</translation>
 <translation id="3737536731758327622">നിങ്ങളുടെ ഡൗൺലോഡുകൾ ഇവിടെ ദൃശ്യമാകും</translation>
+<translation id="3738671331307774213">ഐഡൻ്റിറ്റി പരിശോധിച്ച് ഉറപ്പിക്കുന്നത് നിങ്ങളുടെ സ്വകാര്യ ഡാറ്റ പരിരക്ഷിക്കാൻ സഹായിക്കുന്നു</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> തുറക്കണോ?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" />, ഇപ്പോൾ അഡ്‌മിൻ കൺസോളിൽ ദൃശ്യമാകും</translation>
@@ -1872,10 +1884,10 @@
 <translation id="3846116211488856547">വെബ്സൈറ്റുകളും Android ആപ്പുകളും മറ്റും വികസിപ്പിച്ചെടുക്കാൻ ടൂളുകൾ നേടുക. Linux ഇൻസ്‌റ്റാൾ ചെയ്യുമ്പോൾ <ph name="DOWNLOAD_SIZE" /> ഡാറ്റ ഡൗൺലോഡ് ചെയ്യപ്പെടും.</translation>
 <translation id="385051799172605136">പിന്നോട്ട്</translation>
 <translation id="3851428669031642514">സുരക്ഷിതമല്ലാത്ത സ്‌ക്രിപ്‌റ്റുകൾ ലോഡുചെയ്യുക</translation>
+<translation id="3854599674806204102">ഒരു ഓപ്‌ഷൻ തിരഞ്ഞെടുക്കൂ</translation>
 <translation id="3855441664322950881">പായ്‌ക്ക് വിപുലീകരണം</translation>
 <translation id="3855676282923585394">ബുക്ക്മാർക്കുകളും ക്രമീകരണവും ഇംപോർട്ട് ചെയ്യുക...</translation>
 <translation id="3856800405688283469">സമയ മേഖല തിരഞ്ഞെടുക്കുക</translation>
-<translation id="3856921555429624101">ഡാറ്റ ഉപയോഗം കണക്കാക്കുന്നത് അവസാനിച്ചു</translation>
 <translation id="3857228364945137633">നിങ്ങളുടെ ഫോൺ സമീപത്തുള്ളപ്പോൾ, പാസ്‌വേഡ് ഇല്ലാതെ <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്യുന്നതിന് Smart Lock പരീക്ഷിക്കുക.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: സമന്വയം താൽക്കാലികമായി നിർത്തി</translation>
@@ -2245,7 +2257,6 @@
 <translation id="4508051413094283164">എല്ലാം അദൃശ്യ വിൻഡോയിൽ തുറക്കുക</translation>
 <translation id="4508265954913339219">സജീവമാക്കല്‍ പരാജയപ്പെട്ടു</translation>
 <translation id="4508765956121923607">ഉറ&amp;വിടം കാണുക</translation>
-<translation id="4509823033118379431">ചിത്രങ്ങൾ നിലവിൽ ലഭ്യമല്ല. ശേഖരണങ്ങൾ കാണാൻ വീണ്ടും കണക്റ്റ് ചെയ്യുക.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> നൽകുന്നത്</translation>
 <translation id="4514542542275172126">സൂപ്പർവൈസു‌ചെയ്‌‌ത ഉപയോക്താവിനെ സജ്ജീകരിക്കുക</translation>
 <translation id="4514610446763173167">പ്ലേ ചെയ്യാനോ നിർത്താനോ വീഡിയോ മാറ്റുക</translation>
@@ -2322,6 +2333,7 @@
 <translation id="4627442949885028695">മറ്റൊരു ഉപകരണത്തിൽ നിന്ന് തുടരുക</translation>
 <translation id="4628314759732363424">മാറ്റുക...</translation>
 <translation id="4628757576491864469">ഉപകരണങ്ങൾ</translation>
+<translation id="4628948037717959914">ഫോട്ടോ</translation>
 <translation id="4630590996962964935">അസാധുവായ പ്രതീകം: $1</translation>
 <translation id="4631887759990505102">ആര്‍ട്ടിസ്റ്റ്</translation>
 <translation id="4632483769545853758">ടാബ് അൺമ്യൂട്ട് ചെയ്യുക</translation>
@@ -2507,7 +2519,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> ബാക്കപ്പ് ചെയ്യാൻ തയ്യാറാണ്</translation>
 <translation id="4907161631261076876">അപകടകരമാകാൻ ഇടയുള്ളതിനാൽ ഈ ഫയൽ സാധാരണ ഡൗൺലോഡ് ചെയ്യാറില്ല.</translation>
 <translation id="4907306957610201395">അനുമതി വിഭാഗം</translation>
-<translation id="4907824805858067479">സംരക്ഷിച്ച കാർഡുകൾ അഡ്‌മിനിസ്‌ട്രേറ്റർ ‌പ്രവർത്തനരഹിതമാക്കി.</translation>
 <translation id="4908811072292128752">ഒരേസമയം രണ്ട് സൈറ്റുകൾ ബ്രൗസുചെയ്യാൻ ഒരു പുതിയ ടാബ് തുറക്കുക</translation>
 <translation id="4909038193460299775"><ph name="DOMAIN" /> ഈ അക്കൗണ്ട് മാനേജുചെയ്യുന്നതിനാൽ നിങ്ങളുടെ ബുക്ക്‌മാർക്കുകൾ, ചരിത്രം, പാസ്‌വേഡുകൾ, മറ്റ് ക്രമീകരണം എന്നിവ ഈ ഉപകരണത്തിൽ നിന്ന്‌ മായ്‌ക്കുന്നതാണ്. എന്നിരുന്നാലും, നിങ്ങളുടെ വിവരങ്ങൾ Google അക്കൗണ്ടിൽ സൂക്ഷിക്കുന്നതും <ph name="BEGIN_LINK" />Google ഡാഷ്‌ബോർഡിൽ<ph name="END_LINK" /> മാനേജുചെയ്യാവുന്നതുമാണ്‌.</translation>
 <translation id="4909359680501173791">നിങ്ങൾ എൻറോൾ ചെയ്‌തു</translation>
@@ -2539,6 +2550,7 @@
 <translation id="4955814292505481804">വാർഷികം</translation>
 <translation id="4957949153200969297"><ph name="IDS_SHORT_PRODUCT_NAME" /> സമന്വയവുമായി ബന്ധപ്പെട്ട ഫീച്ചറുകൾ മാത്രം പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">നിങ്ങളുടെ കാർഡുകൾ ഒരു സ്ഥലത്ത് സൂക്ഷിക്കൂ</translation>
 <translation id="496226124210045887">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഫോൾഡറിൽ സുപ്രധാന ഫയലുകൾ അടങ്ങിയിരിക്കുന്നു. ഈ ഫോൾഡറിലേക്ക് "$1" എന്നതിന് ശാശ്വതമായ റീഡ് ആക്‌സസ്സ് അനുവദിക്കണമെന്ന് നിങ്ങൾക്ക് തീർച്ചയാണോ?</translation>
 <translation id="4964455510556214366">ക്രമീകരണം</translation>
 <translation id="4964673849688379040">പരിശോധിക്കുന്നു...</translation>
@@ -2586,6 +2598,7 @@
 <translation id="5027562294707732951">വിപുലീകരണം ചേർക്കുക</translation>
 <translation id="5029568752722684782">പകർപ്പ് മായ്‌ക്കുക</translation>
 <translation id="5030338702439866405">ഇനിപ്പറയുന്നത് നല്‍‌കിയത്</translation>
+<translation id="503155457707535043">ആപ്പുകൾ ഡൗൺലോഡ് ചെയ്യുന്നു</translation>
 <translation id="503498442187459473">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ഉപയോഗിക്കാൻ <ph name="HOST" /> ആഗ്രഹിക്കുന്നു</translation>
 <translation id="5036662165765606524">ഒന്നിലധികം ഫയലുകൾ സ്വയമേവ ഡൗൺലോഡുചെയ്യുന്നതിന് ഒരു സൈറ്റിനെയും അനുവദിക്കരുത്</translation>
 <translation id="5037676449506322593">എല്ലാം തിരഞ്ഞെടുക്കുക</translation>
@@ -3100,6 +3113,7 @@
 <translation id="57838592816432529">മ്യൂട്ടുചെയ്യുക</translation>
 <translation id="5785583009707899920">Chrome ഫയൽ യൂട്ടിലിറ്റികൾ</translation>
 <translation id="5787146423283493983">കീ കരാര്‍‌</translation>
+<translation id="5788127256798019331">Play ഫയലുകൾ</translation>
 <translation id="5788367137662787332">ക്ഷമിക്കണം, <ph name="DEVICE_LABEL" /> എന്ന ഉപകരണത്തിലെ ഏറ്റവും കുറഞ്ഞത് ഒരു ഭാഗം പോലും മൗണ്ട് ചെയ്യാൻ കഴിഞ്ഞില്ല.</translation>
 <translation id="5794414402486823030">എപ്പോഴും സിസ്‌റ്റം വ്യൂവറിൽ തുറക്കുക</translation>
 <translation id="5794786537412027208">എല്ലാ Chrome അപ്ലിക്കേഷനുകളിൽ നിന്നും പുറത്തുകടക്കുക</translation>
@@ -3227,7 +3241,6 @@
 <translation id="5990386583461751448">വിവർത്തനം ചെയ്‌തു</translation>
 <translation id="5991049340509704927">മാഗ്‌നിഫൈ ചെയ്യുക</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ അപ്ലിക്കേഷൻ നീക്കം ചെയ്യാൻ അഡ്‌മിനിസ്ട്രേറ്ററോട് ആവശ്യപ്പെടുക.}other{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ അപ്ലിക്കേഷനുകൾ നീക്കം ചെയ്യാൻ അഡ്‌മിനിസ്ട്രേറ്ററോട് ആവശ്യപ്പെടുക.}}</translation>
-<translation id="5993332328670040093">നിങ്ങളുടെ ഡാറ്റ ഉപയോഗം ഇനി കണക്കാക്കുന്നതല്ല.</translation>
 <translation id="6002458620803359783">തിരഞ്ഞെടുത്ത ശബ്ദങ്ങൾ</translation>
 <translation id="6005695835120147974">മീഡിയ റൂട്ടർ</translation>
 <translation id="6006484371116297560">ക്ലാസിക്</translation>
@@ -3354,6 +3367,7 @@
 <translation id="6178664161104547336">ഒരു സര്‍ട്ടിഫിക്കറ്റ് തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6181431612547969857">ഡൗൺലോഡ് തടഞ്ഞു</translation>
 <translation id="6185132558746749656">ഉപകരണ ലൊക്കേഷൻ</translation>
+<translation id="6185617499004995178">CUPS IPP വാലിഡേറ്റർ</translation>
 <translation id="6185696379715117369">Page up</translation>
 <translation id="6189273858858366896">നെറ്റ്‌വർക്ക് ഫയൽ പങ്കിടലുകൾ സജ്ജീകരിക്കുക അല്ലെങ്കിൽ നിയന്ത്രിക്കുക.</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> ഉപയോഗിച്ച് തുറക്കുക</translation>
@@ -3386,6 +3400,7 @@
 <translation id="6231881193380278751">പേജ് സ്വയമേ പുതുക്കുന്നതിന് URL-ൽ ചോദ്യ param ചേർക്കുക: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">ബാറ്ററി</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> എന്നതിലേക്കുള്ള കണക്ഷൻ നഷ്‌ടമായി</translation>
+<translation id="6235700927623181151">ഈ ടാബ് നിങ്ങളുടെ ഡെസ്‌ക്‌ടോപ്പ് ഉള്ളടക്കം പങ്കിടുന്നു.</translation>
 <translation id="6237816943013845465">സ്‌ക്രീൻ റെസല്യൂഷൻ ക്രമീകരിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു</translation>
 <translation id="6238923052227198598">ലോക്ക് സ്‌ക്രീനിൽ ഏറ്റവും പുതിയ കുറിപ്പ് സൂക്ഷിക്കുക</translation>
 <translation id="6239558157302047471">റീലോഡും ഫ്രെയിമും</translation>
@@ -3420,7 +3435,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">സാധാരണ <ph name="FILE_NAME" /> ഡൗൺലോഡ് ചെയ്യാറില്ല, അത് അപകടകരമാകാനും ഇടയുണ്ട്.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{നിങ്ങളുടെ നെറ്റ്‌വർക്കിലെ പുതിയ പ്രിന്റർ}other{നിങ്ങളുടെ നെറ്റ്‌വർക്കിലെ പുതിയ പ്രിന്ററുകൾ}}</translation>
-<translation id="6286684120317096255">ഡാറ്റ ഉപയോഗം കണക്കാക്കുന്നു</translation>
 <translation id="6286708577777130801">സംരക്ഷിച്ച പാസ്‌വേഡ് വിശദാംശങ്ങൾ</translation>
 <translation id="6287852322318138013">ഈ ഫയൽ തുറക്കാനായി ഒരു അപ്ലിക്കേഷൻ തിരഞ്ഞെടുക്കുക</translation>
 <translation id="6289452883081499048">Play പോലുള്ള വ്യക്തിഗതമാക്കിയ Google സേവനങ്ങൾ</translation>
@@ -3531,6 +3545,7 @@
 <translation id="6451180435462401570">ക്ലൗഡ് പ്രിന്റ് ഉപകരണങ്ങൾ മാനേജുചെയ്യുക</translation>
 <translation id="6451689256222386810">നിങ്ങൾ പാസ്‌ഫ്രെയ്‌സ് മറന്നുപോയെങ്കിലോ ഈ ക്രമീകരണം മാറ്റണമെങ്കിലോ, <ph name="BEGIN_LINK" />സമന്വയം റീസെറ്റുചെയ്യുക<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">നിരസിക്കുക</translation>
+<translation id="6455264371803474013">നിർദിഷ്‌ട സൈറ്റുകളിൽ</translation>
 <translation id="6455894534188563617">&amp;പുതിയ ഫോള്‍ഡര്‍</translation>
 <translation id="6456394469623773452">മിഴിവുള്ളതാക്കുക</translation>
 <translation id="6456631036739229488">Smart Lock ഫോൺ മാറ്റി. Smart Lock അപ്‌ഡേറ്റുചെയ്യാൻ നിങ്ങളുടെ പാസ്‌വേഡ് നൽകുക. അടുത്ത തവണ, നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> നിങ്ങളുടെ ഫോൺ അൺലോക്കുചെയ്യും. ക്രമീകരണത്തിൽ Smart Lock ഓഫാക്കുക.</translation>
@@ -3609,6 +3624,7 @@
 <translation id="657402800789773160">&amp;ഈ പേജ് വീണ്ടും ലോഡ് ചെയ്യുക</translation>
 <translation id="6577284282025554716">ഡൗൺലോഡ് റദ്ദാക്കി: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">നിങ്ങളുടെ Google ഉപയോക്തൃനാമവും പാസ്‌വേഡും ഉപയോഗിച്ച് സമന്വയിപ്പിച്ച പാസ്‌വേഡുകൾ എൻക്രിപ്‌റ്റുചെയ്യുക</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - ഡെസ്‌ക്‌ടോപ്പ് ഉള്ളടക്കം പങ്കിട്ടു</translation>
 <translation id="6580151766480067746">ARC പതിപ്പ്</translation>
 <translation id="6581162200855843583">Google ഡ്രൈവ് ലിങ്ക്</translation>
 <translation id="6582421931165117398">നിങ്ങളുടെ വ്യക്തിഗത വിവരം സംരക്ഷിക്കാൻ, ഇപ്പോൾ തന്നെ നിങ്ങളുടെ പാസ്‍വേഡ് മാറ്റുക. പാസ്‍വേഡ് മാറ്റുന്നതിന് മുമ്പ്, നിങ്ങളോട് സൈൻ ഇൻ ചെയ്യാൻ ആവശ്യപ്പെടും.</translation>
@@ -4075,6 +4091,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{ശരിയായി പ്രവർത്തിക്കുന്നതിൽ നിന്ന് Chrome-നെ ഈ അപ്ലിക്കേഷൻ തടഞ്ഞേക്കാം.}other{ശരിയായി പ്രവർത്തിക്കുന്നതിൽ നിന്ന് Chrome-നെ ഈ അപ്ലിക്കേഷനുകൾ തടഞ്ഞേക്കാം.}}</translation>
 <translation id="7303900363563182677">ക്ലിപ്പ്‌ബോർഡിലേക്ക് പകർത്തിയ ടെക്‌സ്‌റ്റും ചിത്രങ്ങളും കാണുന്നതിൽ നിന്ന് ഈ സൈറ്റിനെ ബ്ലോക്ക് ചെയ്തു</translation>
 <translation id="730515362922783851">ഏതു ഉപകരണം ഉപയോഗിച്ചും പ്രാദേശിക നെറ്റ്‌വർക്കിലോ ഇന്റർനെറ്റിലോ ഡാറ്റ എക്‌സ്‌ചേഞ്ച് ചെയ്യുക</translation>
+<translation id="7307129035224081534">താൽക്കാലികമായി നിർത്തി</translation>
 <translation id="7308002049209013926">പുതിയ ആപ്പുകളും ആക്റ്റിവിറ്റികളും വേഗത്തിൽ ലഭിക്കാൻ ലോഞ്ചർ ഉപയോഗിക്കുക. കീബോർഡ് ഉപയോഗിച്ച് ഇവിടെ ലഭ്യമാക്കാൻ, Alt + Shift + L അമർത്തുക.</translation>
 <translation id="7309257895202129721">&amp;നിയന്ത്രണങ്ങള്‍‌ കാണിക്കുക</translation>
 <translation id="7310598146671372464">ലോഗിൻ ചെയ്യൽ പരാജയപ്പെട്ടു. വ്യക്തമാക്കിയ Kerberos എൻക്രിപ്ഷൻ തരങ്ങളെ സെർവർ പിന്തുണയ്ക്കുന്നില്ല. നിങ്ങളുടെ അഡ്‌മിനുമായി ബന്ധപ്പെടുക.</translation>
@@ -4132,7 +4149,6 @@
 <translation id="7400839060291901923">നിങ്ങളുടെ <ph name="PHONE_NAME" /> ഫോണിൽ കണക്ഷൻ സജ്ജമാക്കുക</translation>
 <translation id="740624631517654988">പോപ്പ്-അപ്പ് തടഞ്ഞു</translation>
 <translation id="7407430846095439694">ഇമ്പോർട്ടുചെയ്‌ത് യോജിപ്പിക്കുക</translation>
-<translation id="7409233648990234464">വീണ്ടും സമാരംഭിക്കലും പവർവാഷും</translation>
 <translation id="7409836189476010449">Flash റൺ ചെയ്യുക</translation>
 <translation id="7410344089573941623">നിങ്ങളുടെ ക്യാമറയും മൈക്രോഫോണും ആക്‌സസ്സുചെയ്യാൻ <ph name="HOST" /> താൽപ്പര്യപ്പെടുന്നുണ്ടോയെന്ന് ചോദിക്കുക</translation>
 <translation id="741204030948306876">ഞാൻ തയ്യാറാണ്</translation>
@@ -4165,6 +4181,7 @@
 <translation id="7465778193084373987">നെറ്റ്‌സ്‌കേപ്പ് സര്‍‌ട്ടിഫിക്കറ്റ് അസാധുവാക്കല്‍‌ URL</translation>
 <translation id="7469894403370665791">ഈ നെറ്റ്‍വര്‍ക്കിലേക്ക് സ്വപ്രേരിതമായി ബന്ധിപ്പിക്കുന്നു</translation>
 <translation id="747114903913869239">പിശക്: വിപുലീകരണം ഡീകോഡ് ചെയ്യാനാവില്ല</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> നിങ്ങൾക്കായി സജ്ജമാക്കാം</translation>
 <translation id="7473891865547856676">വേണ്ട, നന്ദി</translation>
 <translation id="747459581954555080">എല്ലാം പുനഃസ്ഥാപിക്കുക</translation>
 <translation id="7475671414023905704">നെറ്റ്‌സ്‌കേപ്പ് നഷ്‌ടമായ പാസ്‌വേഡ് URL</translation>
@@ -4289,6 +4306,7 @@
 <translation id="7665369617277396874">അക്കൗണ്ട് ചേർക്കുക</translation>
 <translation id="7671130400130574146">സിസ്റ്റം ശീര്‍ഷക ബാറും ബോര്‍ഡറുകളും ഉപയോഗിക്കുക</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" />-ൽ <ph name="HUNG_IFRAME_URL" />.</translation>
+<translation id="7676867886086876795">ഏതെങ്കിലും ടെക്‌സ്‌റ്റ് ഫീൽഡിലേക്ക് കേട്ടെഴുതുന്നത് അനുവദിക്കാൻ നിങ്ങളുടെ വോയ്‌സ് Google-ലേക്ക് അയയ്‌ക്കുക.</translation>
 <translation id="7681095912841365527">സൈറ്റിന് bluetooth ഉപയോഗിക്കാനാകും</translation>
 <translation id="7683373461016844951">തുടരാൻ, ശരി ക്ലിക്ക് ചെയ്യുക, തുടർന്ന് നിങ്ങളുടെ <ph name="DOMAIN" /> എന്ന ഇമെയിൽ വിലാസത്തിനൊരു പുതിയ പ്രൊഫൈൽ സൃഷ്ടിക്കാൻ, 'ഒരു വ്യക്തിയെ ചേർക്കുക' ക്ലിക്ക് ചെയ്യുക.</translation>
 <translation id="7684212569183643648">നിങ്ങളുടെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാൾ ചെയ്‌തു</translation>
@@ -4330,6 +4348,7 @@
 <translation id="7740996059027112821">സാധാരണം</translation>
 <translation id="7748528009589593815">മുമ്പത്തെ ടാബ്</translation>
 <translation id="7748626145866214022">കൂടുതൽ ഓപ്ഷനുകൾ പ്രവർത്തന ബാറിൽ ലഭ്യമാണ്. പ്രവർത്തന ബാർ ഫോക്കസ് ചെയ്യുന്നതിന് Alt + A അമർത്തുക.</translation>
+<translation id="7750228210027921155">ചിത്രത്തിനുള്ളിലെ ചിത്രം</translation>
 <translation id="7751260505918304024">എല്ലാം കാണിക്കുക</translation>
 <translation id="7754704193130578113">ഡൗൺലോഡ് ചെയ്യുന്നതിനു മുമ്പ് ഓരോ ഫയലും എവിടെ സംരക്ഷിക്കണമെന്ന് ചോദിക്കുക</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4438,6 +4457,7 @@
 <translation id="7857949311770343000">നിങ്ങൾ ഉദ്ദേശിച്ച പുതിയ ടാബ് പേജ് ഇതാണോ?</translation>
 <translation id="786073089922909430">സേവനം: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;ഡൌണ്‍ലോഡുകള്‍</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{ഒരു കുക്കി}other{# കുക്കികൾ}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - ജോടിയാക്കി</translation>
 <translation id="7870730066603611552">സജ്ജീകരണത്തിന് ശേഷം സമന്വയ ഓപ്‌ഷനുകൾ അവലോകനം ചെയ്യുക</translation>
 <translation id="7870790288828963061">ഏറ്റവും പുതിയ പതിപ്പിലുള്ള കിയോസ്‌ക് അപ്ലിക്കേഷനുകളൊന്നുമില്ല. USB സ്‌റ്റിക്ക് നീക്കംചെയ്യുക.</translation>
@@ -4759,6 +4779,7 @@
 <translation id="8373553483208508744">ടാബുകൾ മ്യൂട്ടുചെയ്യുക</translation>
 <translation id="8382913212082956454">ഇമെയില്‍ വിലാസം&amp; പകര്‍ത്തുക</translation>
 <translation id="8386903983509584791">സ്‌കാൻ ചെയ്യുന്നത് പൂർത്തിയായി</translation>
+<translation id="8389492867173948260">സന്ദർശിക്കുന്ന വെബ്‌സൈറ്റുകളിലെ, നിങ്ങളുടെ എല്ലാ ഡാറ്റയും വായിക്കാനും തിരുത്താനും ഈ വിപുലീകരണത്തെ അനുവദിക്കുക:</translation>
 <translation id="8390449457866780408">സെര്‍വര്‍ ലഭ്യമല്ല.</translation>
 <translation id="8391712576156218334">ചിത്രം ലഭ്യമല്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation>
 <translation id="8392234662362215700">കീബോർഡ് ലേഔട്ട് മാറ്റുന്നതിന് Control-Shift-Space അമർത്തുക.</translation>
@@ -4790,6 +4811,7 @@
 <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" />-നുള്ളിൽ നിങ്ങൾ സൈൻ ഔട്ട് ചെയ്യപ്പെടും</translation>
 <translation id="8431909052837336408">സിം പിൻ മാറ്റുക</translation>
 <translation id="8434480141477525001">NaCl ഡീബഗ് പോർട്ട്</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> ഉപയോഗിച്ച് നിങ്ങളുടെ ഐഡന്റിറ്റി പരിശോധിച്ച് ഉറപ്പിക്കുക</translation>
 <translation id="843760761634048214">ക്രെഡിറ്റ് കാർഡ് സംരക്ഷിക്കുക</translation>
 <translation id="8438328416656800239">ഒരു സ്‌മാർട്ട് ബ്രൗസറിലേക്ക് മാറുക</translation>
 <translation id="8438566539970814960">തിരയലുകളും ബ്രൗസിംഗും മികച്ചതാക്കുക</translation>
@@ -4816,6 +4838,7 @@
 <translation id="8465252176946159372">അസാധുവാണ്</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> പ്ലഗിന് പ്രവർത്തിക്കാൻ നിങ്ങളുടെ അനുമതി ആവശ്യമുണ്ട്</translation>
 <translation id="8466234950814670489">Tar ആർക്കൈവ്</translation>
+<translation id="8466417995783206254">ചിത്രത്തിനുള്ളിലെ ചിത്രം മോഡിൽ ഈ ടാബ് ഒരു വീഡിയോ പ്ലേ ചെയ്യുന്നു.</translation>
 <translation id="8468750959626135884">Android ഫോൺ ഉപയോഗിച്ച് നിങ്ങളുടെ <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്യുക.</translation>
 <translation id="8470028084415844044">നിങ്ങളുടെ എല്ലാ ഉപകരണങ്ങളിലും മുഴുവൻ പാസ്‌വേഡുകളും ലഭിക്കാൻ സമന്വയിപ്പിക്കൽ ഓണാക്കുക.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" />-നായി സംരക്ഷിച്ച പാസ്‌വേഡുകൾ</translation>
@@ -4836,6 +4859,7 @@
 <translation id="8496717697661868878">ഈ പ്ലഗിന്‍ പ്രവര്‍ത്തിപ്പിക്കുക</translation>
 <translation id="8497219075884839166">Windows യൂട്ടിലിറ്റികൾ</translation>
 <translation id="8498214519255567734">മങ്ങിയ വെളിച്ചത്തിൽ സ്‌ക്രീൻ നോക്കുന്നതോ വായിക്കുന്നതോ എളുപ്പമാക്കുക</translation>
+<translation id="8498395510292172881">Chrome-ൽ വായന തുടരുക</translation>
 <translation id="8503813439785031346">ഉപയോക്തൃനാമം</translation>
 <translation id="850875081535031620">ദോഷകരമായ സോഫ്‌റ്റ്‌വെയറൊന്നും കണ്ടെത്തിയില്ല</translation>
 <translation id="8509646642152301857">അക്ഷരപ്പിശക് പരിശോധന നിഘണ്ടു ഡൗൺലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു.</translation>
@@ -4986,7 +5010,6 @@
 <translation id="8725066075913043281">വീണ്ടും ശ്രമിക്കുക</translation>
 <translation id="8725178340343806893">പ്രിയങ്കരങ്ങള്‍/ബുക്മാര്‍ക്കുകള്‍</translation>
 <translation id="8726206820263995930">സെർവറിൽ നിന്നും നയ ക്രമീകരണങ്ങൾ ലഭ്യമാക്കുന്നതിൽ പിശക്: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">ഇത് വീണ്ടും കാണിക്കരുത്</translation>
 <translation id="8727344521467137076">നിങ്ങളുടെ കമ്പ്യൂട്ടറിൽ ദോഷകരമായ സോഫ്‌റ്റ്‌വെയറുണ്ട്. നിങ്ങളുടെ ബ്രൗസർ വീണ്ടും സാധാരണ രീതിയിൽ പ്രവർത്തിപ്പിക്കുന്നതിന്, Chrome ഇത് നീക്കം ചെയ്‌ത്, ക്രമീകരണം പുനഃസ്ഥാപിക്കും.</translation>
 <translation id="8730621377337864115">പൂർത്തിയാക്കി</translation>
 <translation id="8732030010853991079">ഈ ഐക്കണിൽ ക്ലിക്കുചെയ്‌ത് ഈ വിപുലീകരണം സജീവമാക്കുക.</translation>
@@ -5177,6 +5200,7 @@
 <translation id="9027459031423301635">ലിങ്ക് പുതിയ &amp;ടാബില്‍ തുറക്കുക</translation>
 <translation id="9030515284705930323">നിങ്ങളുടെ അക്കൗണ്ടിന് വേണ്ടി ഓർഗനൈസേഷൻ, Google Play സ്റ്റോർ പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ല. കൂടുതൽ വിവരങ്ങൾക്ക്, അഡ്‌മിനിസ്‌ട്രേറ്ററെ ബന്ധപ്പെടുക.</translation>
 <translation id="9033857511263905942">&amp;ഒട്ടിക്കുക</translation>
+<translation id="9034924485347205037">Linux ഫയലുകൾ</translation>
 <translation id="9035012421917565900">ഇനങ്ങൾ '<ph name="DESTINATION_NAME" />' എന്നതിലേക്ക് തിരികെ നീക്കാൻ കഴിയാത്തതിനാൽ, ഈ പ്രവൃത്തി നിങ്ങൾക്ക് പഴയപടിയാക്കാനാവില്ല.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">യഥാര്‍ത്ഥമായത് കാണിക്കുക</translation>
@@ -5277,6 +5301,7 @@
 <translation id="9173995187295789444">Bluetooth ഉപകരണങ്ങൾക്കായി സ്‌കാൻ ചെയ്യുന്നു...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth ഉപകരണം കണക്‌റ്റുചെയ്‌തു</translation>
 <translation id="9177499212658576372">നിങ്ങൾ നിലവിൽ <ph name="NETWORK_TYPE" /> നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്‌തിരിക്കുന്നു.</translation>
+<translation id="9179734824669616955">നിങ്ങളുടെ <ph name="DEVICE_TYPE" />-ൽ Linux (ബീറ്റ) സജ്ജീകരിക്കുക</translation>
 <translation id="9180281769944411366">ഈ പ്രക്രിയയ്ക്ക് കുറച്ച് സമയമെടുത്തേക്കാം. Linux കണ്ടെയ്‌നർ പ്രവർത്തനം ആരംഭിക്കുന്നു.</translation>
 <translation id="9180380851667544951">സൈറ്റിന് നിങ്ങളുടെ സ്ക്രീൻ പങ്കിടാനാകും</translation>
 <translation id="9188441292293901223">ഈ <ph name="DEVICE_TYPE" /> അൺലോക്കുചെയ്യാൻ, നിങ്ങളുടെ ഫോൺ ഏറ്റവും പുതിയ Android പതിപ്പിലേക്ക് അപ്‌ഡേറ്റുചെയ്യുക.</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 0e884cf..3a5c8fa 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">प्रवेश करण्यापूर्वी विचारा</translation>
 <translation id="1434696352799406980">हे आपले प्रारंभ पृष्ठ, नवीन टॅब पृष्ठ, शोध इंजिन आणि पिन केलेले टॅब रीसेट करेल. हे सर्व विस्तार अक्षम करेल आणि कुकीज सारखा तात्पुरता डेटा साफ करेल. आपले बुकमार्क, इतिहास आणि सेव्ह केलेले पासवर्ड साफ केले जाणार नाहीत.</translation>
 <translation id="1434886155212424586">होमपेज हे नवीन टॅब पृष्ठ आहे</translation>
+<translation id="1436671784520050284">सेटअप सुरू ठेवा</translation>
 <translation id="1436784010935106834">काढली</translation>
 <translation id="1438632560381091872">टॅब सशब्द करा</translation>
 <translation id="1442392616396121389">मार्ग उपसर्ग</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">पिझ्झा स्लाइस</translation>
 <translation id="1467432559032391204">डावे</translation>
 <translation id="1468571364034902819">ही प्रोफाइल वापरू शकत नाही</translation>
+<translation id="1470533772306424441">आम्ही तुमच्यासाठी ते अॅप्स इंस्टॉल करू. तुम्ही तुमच्या डिव्हाइससाठी Play स्टोअरमध्ये आणखी अॅप्स शोधू शकता.</translation>
 <translation id="1470811252759861213">आपल्या सर्व संगणकांवर आपले विस्तार प्राप्त करण्यासाठी, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" अपलोड केली नाही. आपल्या Google ड्राइव्हमध्ये पर्याप्त स्थान नाही.</translation>
 <translation id="1475502736924165259">आपल्याकडे फाईलवर प्रमाणपत्रे आहेत जी अन्य कोणत्याही श्रेणींसाठी योग्य नाहीत</translation>
@@ -564,7 +566,6 @@
 <translation id="1829192082282182671">झूम &amp;कमी करा</translation>
 <translation id="1830550083491357902">साइन इन केलेले नाही</translation>
 <translation id="1832511806131704864">फोन बदल अपडेट झाला</translation>
-<translation id="1832685970989658809">सेव्ह केलेल्या पेमेंट पद्धती तुमच्या अॅडमिनिस्ट्रेटरने बंद केल्या आहेत</translation>
 <translation id="1834503245783133039">डाउनलोड करता आले नाही: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">शोध साफ करा</translation>
 <translation id="1838709767668011582">Google साइट</translation>
@@ -792,6 +793,7 @@
 <translation id="2192505247865591433">द्वारा:</translation>
 <translation id="2193365732679659387">विश्वासू सेटिंग्ज</translation>
 <translation id="2195729137168608510">ईमेल संरक्षण</translation>
+<translation id="2199298570273670671">एरर</translation>
 <translation id="2200356397587687044">सुरू ठेवण्यासाठी Chrome ला परवानगीची आवश्यकता आहे</translation>
 <translation id="220138918934036434">बटण लपवा</translation>
 <translation id="2202898655984161076">प्रिंटर सूचीबद्ध करताना समस्या आली. आपले काही प्रिंटर <ph name="CLOUD_PRINT_NAME" /> सह यशस्वीरित्या नोंदणीकृत नाहीत.</translation>
@@ -941,10 +943,10 @@
 <translation id="2435457462613246316">पासवर्ड दर्शवा</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ला सर्व <ph name="PROTOCOL" /> दुवे उघडण्याची अनुमती द्यायची?</translation>
 <translation id="2436707352762155834">किमान</translation>
-<translation id="2437139306601019091">डेटा वापर मापन समाप्त झाले</translation>
 <translation id="2440604414813129000">स्त्रो&amp;त पाहा</translation>
 <translation id="2445081178310039857">विस्तार मूळ निर्देशिका आवश्यक आहे.</translation>
 <translation id="2445484935443597917">नवीन प्रोफाइल तयार करा</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> ला तुमची ओळख पडताळयची आहे</translation>
 <translation id="2448312741937722512">प्रकार</translation>
 <translation id="2450223707519584812">Google API की गहाळ असल्याने आपण वापरकर्ते जोडण्‍यात सक्षम असणार नाही. तपशीलांसाठी <ph name="DETAILS_URL" /> पहा.</translation>
 <translation id="2450310832094867474">सिंक बंद करून साइन आउट करायचे?</translation>
@@ -954,6 +956,7 @@
 <translation id="2453576648990281505">फाइल याआधीच विद्यमान आहे</translation>
 <translation id="2453860139492968684">समाप्त</translation>
 <translation id="2454247629720664989">कीवर्ड</translation>
+<translation id="245661998428026871">चित्रात-चित्र मोडमधील व्हिडिओ प्ले होणे थांबेल.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> वरून कॉपी करू इच्छित आहे.</translation>
 <translation id="2462724976360937186">प्रमाणन अधिकृतता की आयडी</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> जोडले</translation>
@@ -1361,6 +1364,7 @@
 <translation id="304826556400666995">टॅब सशब्द करा</translation>
 <translation id="3053013834507634016">प्रमाणपत्र की वापर</translation>
 <translation id="3057861065630527966">आपले फोटो आणि व्हिडिओंचा बॅकअप घ्या</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">बोलण्यासाठी निवडा सुरू करा</translation>
 <translation id="3061707000357573562">पॅच सेवा</translation>
 <translation id="3064410671692449875">अपुरा डेटा</translation>
@@ -1409,6 +1413,7 @@
 <translation id="313205617302240621">पासवर्ड विसरलात?</translation>
 <translation id="3132996321662585180">दररोज रिफ्रेश करा</translation>
 <translation id="3135204511829026971">स्क्रीन फिरवा</translation>
+<translation id="313638818480447860">आम्हाला तुमच्या खात्याशी कनेक्ट केलेले <ph name="NUMBER_OF_APPS" /> अॅप्स सापडले जे या डिव्हाइससाठी ऑप्टिमाइझ केलेले आहेत.</translation>
 <translation id="313963229645891001">डाउनलोड करत आहे, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">डीफॉल्ट पिवळा अवतार</translation>
 <translation id="3140353188828248647">अ‍ॅड्रेस बारवर फोकस करा</translation>
@@ -1439,6 +1444,7 @@
 <translation id="3182749001423093222">शब्दलेखन तपासणी</translation>
 <translation id="3183139917765991655">प्रोफाईल आयातकर्ता</translation>
 <translation id="3184560914950696195">$1 वर सेव्ह करु शकत नाही. संपादित इमेज डाउलोड फोल्‍डरमध्‍ये सेव्ह केल्या जातील.</translation>
+<translation id="3188257591659621405">माझ्या फायली</translation>
 <translation id="3188465121994729530">हलविण्याची सरासरी</translation>
 <translation id="3190558889382726167">पासवर्ड सेव्ह केला</translation>
 <translation id="3192947282887913208">ऑडिओ फायली</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> झिप करत आहे...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">अॅप माहिती</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - चित्रात-चित्र मोडमध्ये व्हिडिओ प्ले करत आहे</translation>
 <translation id="3335337277364016868">रेकॉर्ड केलेले वर्ष</translation>
 <translation id="3335947283844343239">बंद केलेले टॅब पुन्हा उघडा</translation>
 <translation id="3336664756920573711">तुमच्या Android फोनने तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करा</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">प्रिंट अयशस्वी. कृपया आपला प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="3364721542077212959">लेखणी साधने</translation>
 <translation id="3365598184818502391">एकतर Ctrl किंवा Alt वापरा</translation>
+<translation id="3367047597842238025">तुम्हाला जसे हवे तसे तुमचे <ph name="DEVICE_TYPE" /> सेट करा आणि सहजरीत्या सर्व अद्भूत क्षमता शोधा.</translation>
 <translation id="3368922792935385530">कनेक्ट केले</translation>
 <translation id="3369624026883419694">होस्टचे निराकरण करीत आहे...</translation>
 <translation id="337286756654493126">अनुप्रयोगामध्ये आपण उघडता ती फोल्डर वाचा</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">टास्कबार मधील <ph name="SMALL_PRODUCT_LOGO" /> चिन्हावर उजवे क्लिक करा</translation>
 <translation id="3391716558283801616">टॅब 7</translation>
 <translation id="3396331542604645348">निवडलेले प्रिंटर उपलब्ध नाही किंवा योग्यरितीने इंस्टॉल केले नाही. आपला प्रिंटर तपासा किंवा दुसरा प्रिंटर निवडून पहा.</translation>
+<translation id="3396800784455899911">"स्वीकारा आणि सुरू ठेवा" या बटणावर क्लिक करून तुम्ही या Google सेवांसाठी वर वर्णन केलेल्या प्रक्रियांना सहमती दर्शवता.</translation>
 <translation id="3399432415385675819">सूचना बंद केल्या जातील</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">या साइटचे कोणतेही पासवर्ड सेव्ह केलेले नाहीत</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">हे डिव्हाइस उघडले जाऊ शकत नाही कारण त्याचे फाइलसिस्टम समर्थित नाही.</translation>
 <translation id="3727148787322499904">हे सेटिंग बदलल्याने सर्व सामायिक केलेले नेटवर्क प्रभावित होतील</translation>
 <translation id="3727187387656390258">पॉपअपची तपासणी करा</translation>
+<translation id="3729506734996624908">अनुमती असलेल्या साइट</translation>
 <translation id="3732078975418297900">रेषा <ph name="ERROR_LINE" /> वर एरर</translation>
 <translation id="3733127536501031542">स्टेप-अप सह SSL सर्व्हर</translation>
+<translation id="3735740477244556633">यानुसार क्रमाने लावा</translation>
 <translation id="3737274407993947948">Linux इंस्टॉल करताना एरर...</translation>
 <translation id="3737536731758327622">आपले डाउनलोड येथे दिसतील</translation>
+<translation id="3738671331307774213">तुमची ओळख पडताळणी तुमचा खाजगी डेटा संरक्षित करण्यात मदत करेल</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> उघडायचा?</translation>
 <translation id="3741158646617793859">आता <ph name="DEVICE_NAME" /> Admin Console मध्‍ये दिसेल</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">वेबसाइट, Android अॅप्स आणि बरेच काही विकसित करण्यासाठी टूल मिळवा. Linux इंस्टॉल केल्याने <ph name="DOWNLOAD_SIZE" /> डेटा डाउनलोड केला जाईल.</translation>
 <translation id="385051799172605136">मागील</translation>
 <translation id="3851428669031642514">असुरक्षित स्क्रिप्ट लोड करा</translation>
+<translation id="3854599674806204102">पर्याय निवडा</translation>
 <translation id="3855441664322950881">पॅक विस्तार</translation>
 <translation id="3855676282923585394">बुकमार्क आणि सेटिंग्ज आयात करा...</translation>
 <translation id="3856800405688283469">टाइम झोन निवडा</translation>
-<translation id="3856921555429624101">डेटा वापर मापन समाप्त झाले</translation>
 <translation id="3857228364945137633">तुमचा फोन जवळपास असताना पासवर्डशिवाय तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी Smart Lock वापरून पहा.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: सिंक करणे थांबवले</translation>
@@ -2248,7 +2260,6 @@
 <translation id="4508051413094283164">सर्व गुप्त विंडोमध्ये उघडा</translation>
 <translation id="4508265954913339219">सक्रियन अयशस्वी</translation>
 <translation id="4508765956121923607">स्त्रो&amp;त पाहा</translation>
-<translation id="4509823033118379431">इमेज सध्या उपलब्ध नाहीत. संंग्रह पाहण्यासाठी कृपया रिकनेक्ट करा.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" />ने समर्थित करा</translation>
 <translation id="4514542542275172126">नवीन पर्यवेक्षी वापरकर्ता सेट अप करा</translation>
 <translation id="4514610446763173167">प्ले करण्यासाठी किंवा थांबवण्यासाठी व्हिडिओ टॉगल करा</translation>
@@ -2325,6 +2336,7 @@
 <translation id="4627442949885028695">दुसर्‍या डिव्हाइस वरून सुरु ठेवा</translation>
 <translation id="4628314759732363424">बदला...</translation>
 <translation id="4628757576491864469">डिव्हाइसेस</translation>
+<translation id="4628948037717959914">फोटो</translation>
 <translation id="4630590996962964935">अवैध वर्ण: $1</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4632483769545853758">टॅब सशब्द करा</translation>
@@ -2510,7 +2522,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> चा बॅकअप घेण्यास तयार</translation>
 <translation id="4907161631261076876">ही फाईल सामान्यपणे डाउनलोड केली नाही आणि कदाचित धोकादायक असू शकते.</translation>
 <translation id="4907306957610201395">परवानगी वर्गवारी</translation>
-<translation id="4907824805858067479">तुमच्या अॅडमिनिस्ट्रेटरने सेव्ह केलेली कार्डे बंद केली आहेत</translation>
 <translation id="4908811072292128752">एकाच वेळी दोन साइट ब्राउझ करण्यासाठी एक नवीन टॅब उघडा</translation>
 <translation id="4909038193460299775">हे खाते <ph name="DOMAIN" /> ने व्यवस्थापित केले असल्याने, आपले बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज या डिव्हाइस वरून साफ केल्या जातील. तथापि, आपला डेटा आपल्या Google खात्यामध्ये संचयित केलेला असेल आणि <ph name="BEGIN_LINK" />Google डॅशबोर्ड<ph name="END_LINK" /> वर व्यवस्थापित केला जाऊ शकतो.</translation>
 <translation id="4909359680501173791">तुमची यशस्वीरीत्या नोंदणी करण्यात आली</translation>
@@ -2542,6 +2553,7 @@
 <translation id="4955814292505481804">वार्षिक</translation>
 <translation id="4957949153200969297">फक्त <ph name="IDS_SHORT_PRODUCT_NAME" /> सिंकशी संबंधित वैशिष्ट्ये सुरू करा</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">तुमची सर्व कार्डे एकाच ठिकाणी ठेवा</translation>
 <translation id="496226124210045887">आपण निवडलेल्या फोल्डरमध्ये संवेदनशील फायली आहेत. आपल्याला खात्री आहे की या फोल्डरवर आपण "$1" ला कायम वाचण्याचा प्रवेश मंजूर करू इच्छिता?</translation>
 <translation id="4964455510556214366">व्यवस्था</translation>
 <translation id="4964673849688379040">तपासत आहे...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">विस्तार जोडा</translation>
 <translation id="5029568752722684782">कॉपी साफ करा</translation>
 <translation id="5030338702439866405">द्वारा जारी</translation>
+<translation id="503155457707535043">अॅप्स डाउनलोड होत आहेत</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ला तुमचा कॅमेरा आणि मायक्रोफोन वापरायचा आहे</translation>
 <translation id="5036662165765606524">एकाधिक फायली स्वयंचलितपणे डाउनलोड करण्यासाठी कोणत्याही साइटला अनुमती देऊ नका</translation>
 <translation id="5037676449506322593">सर्व निवडा</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">निःशब्द करा</translation>
 <translation id="5785583009707899920">Chrome फाइल सुविधा</translation>
 <translation id="5787146423283493983">की करार</translation>
+<translation id="5788127256798019331">Play फायली</translation>
 <translation id="5788367137662787332">क्षमस्व, <ph name="DEVICE_LABEL" /> डिव्हाइसवरील कमीत कमी एक विभाग बसविला जाऊ शकत नाही.</translation>
 <translation id="5794414402486823030">नेहमी सिस्टम दर्शकासह उघडा</translation>
 <translation id="5794786537412027208">सर्व Chrome Apps मधून बाहेर पडा</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">भाषांतर केले</translation>
 <translation id="5991049340509704927">विशालित करा</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}one{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}}</translation>
-<translation id="5993332328670040093">आपला डेटा वापर यापुढे मोजला जाणार नाही.</translation>
 <translation id="6002458620803359783">प्राधान्य दिलेली व्हॉइस</translation>
 <translation id="6005695835120147974">मीडिया राउटर</translation>
 <translation id="6006484371116297560">क्लासिक</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">एक प्रमाणपत्र निवडा</translation>
 <translation id="6181431612547969857">डाउनलोड अवरोधित केले</translation>
 <translation id="6185132558746749656">डिव्‍हाइस स्‍थान</translation>
+<translation id="6185617499004995178">CUPS IPP व्हॅलिडेटर</translation>
 <translation id="6185696379715117369">पृष्ठ वर</translation>
 <translation id="6189273858858366896">नेटवर्क फाइल शेअर सेट किंवा व्यवस्थापित करा</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> मध्ये उघडा</translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">पृष्ठ स्वयं-रिफ्रेश करण्यासाठी एक क्वेरी परम जोडा: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">बॅटरी</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> वरील कनेक्शन गमावले गेले आहे</translation>
+<translation id="6235700927623181151">हा टॅब तुमचा डेस्कटॉप आशय शेअर करत आहे.</translation>
 <translation id="6237816943013845465">आपले स्क्रीन रिझोल्यूशन समायोजित करण्याची आपल्याला अनुमती देते</translation>
 <translation id="6238923052227198598">लॉक स्क्रीनवर नवीनतम टीप ठेवा</translation>
 <translation id="6239558157302047471">रीलोड आणि फ्रेम करा</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> सामान्यपणे डाउनलोड केले जात नाही आणि ते धोकादायक ठरु शकते.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{आपल्या नेटवर्कवरील नवीन प्रिंटर}one{आपल्या नेटवर्कवरील नवीन प्रिंटर}other{आपल्या नेटवर्कवरील नवीन प्रिंटर}}</translation>
-<translation id="6286684120317096255">डेटा वापर मोजला जात आहे</translation>
 <translation id="6286708577777130801">सेव्ह केलेले पासवर्ड तपशील</translation>
 <translation id="6287852322318138013">ही फाईल उघडण्यासाठी अॅप निवडा</translation>
 <translation id="6289452883081499048">Play सारख्या पर्सनलाइझ Google सेवा</translation>
@@ -3536,6 +3550,7 @@
 <translation id="6451180435462401570">क्लाउड प्रिंट डिव्हाइेेस व्यवस्थापित करा</translation>
 <translation id="6451689256222386810">आपण आपला सांकेतिक वाक्यांश विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, <ph name="BEGIN_LINK" />संकालन रीसेट करा<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">नाकारा</translation>
+<translation id="6455264371803474013">विशिष्ट साइटवर</translation>
 <translation id="6455894534188563617">नवीन फोल्‍डर</translation>
 <translation id="6456394469623773452">फाइन</translation>
 <translation id="6456631036739229488">Smart Lock असलेला फोन बदलला आहे. Smart Lock अपडेट करण्यासाठी तुमचा पासवर्ड टाका. पुढच्या वेळी तुमचा फोन तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करेल. सेटिंग्जमधून Smart Lock बंद करा.</translation>
@@ -3613,6 +3628,7 @@
 <translation id="657402800789773160">हे पृष्ठ &amp;रीलोड करा</translation>
 <translation id="6577284282025554716">डाउनलोड रद्द केले: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">आपल्या Google वापरकर्तानाव आणि पासवर्डासह संंकालित केलेले पासवर्ड कूटबद्ध करा</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - डेस्कटॉप अाशय शेअर केला</translation>
 <translation id="6580151766480067746">ARC आवृत्ती</translation>
 <translation id="6581162200855843583">Google ड्राइव्ह दुवा</translation>
 <translation id="6582421931165117398">तुमची वैयक्तिक माहिती संरक्षित करण्यासाठी, तुमचा पासवर्ड आता बदला. तुम्ही तुमचा पासवर्ड बदलण्यापूर्वी, तुम्हाला साइन इन करायला सांगितले जाईल.</translation>
@@ -4079,6 +4095,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}one{हे अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकते.}other{ही अ‍ॅप्लिकेशन Chrome ला योग्यरीत्या कार्य करण्यापासून रोखू शकतात.}}</translation>
 <translation id="7303900363563182677">या साइटला क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज पाहण्यापासून ब्लॉक केले आहे</translation>
 <translation id="730515362922783851">स्थानिक नेटवर्क किंवा इंटरनेटवरील कोणत्याही डिव्हाइससह डेटा अदलाबदल करा</translation>
+<translation id="7307129035224081534">थांबवले</translation>
 <translation id="7308002049209013926">नवीन अ‍ॅप्स आणि आक्टिव्हीटींवर त्वरित जाण्यासाठी लाँचर वापरा. येथे कीबोर्डने येण्यासाठी, Alt + Shift + L दाबा.</translation>
 <translation id="7309257895202129721">नियंत्रणे &amp;दर्शवा</translation>
 <translation id="7310598146671372464">लॉग इन करता आले नाही. सर्व्हर निर्दिष्ट केलेल्या Kerberos एंक्रिप्शन प्रकारांना सपोर्ट करत नाही. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
@@ -4136,7 +4153,6 @@
 <translation id="7400839060291901923">तुमच्या <ph name="PHONE_NAME" />वर कनेक्शन सेट अप करा</translation>
 <translation id="740624631517654988">पॉप-अप अवरोधित</translation>
 <translation id="7407430846095439694">आयात करा आणि प्रतिबद्ध करा</translation>
-<translation id="7409233648990234464">पुन्हा लाँच करा आणि Powerwash करा</translation>
 <translation id="7409836189476010449">फ्लॅश चालवा</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करू इच्छित असल्यास विचारा</translation>
 <translation id="741204030948306876">होय, मला मान्य आहे</translation>
@@ -4169,6 +4185,7 @@
 <translation id="7465778193084373987">Netscape प्रमाणपत्र निरस्तीकरण URL</translation>
 <translation id="7469894403370665791">या नेटवर्कशी स्वयंचलितपणे कनेक्ट व्हा</translation>
 <translation id="747114903913869239">एरर:  विस्तार डीकोड करण्यात अक्षम</translation>
+<translation id="7473753388963818366">चला तुमच्यासाठी तुमचे <ph name="DEVICE_TYPE" /> तयार करूया</translation>
 <translation id="7473891865547856676">नाही, नको</translation>
 <translation id="747459581954555080">सर्व पुनर्संचयित करा</translation>
 <translation id="7475671414023905704">Netscape पासवर्ड URL गमावली</translation>
@@ -4293,6 +4310,7 @@
 <translation id="7665369617277396874">खाते जोडा</translation>
 <translation id="7671130400130574146">सिस्टम शीर्षक बार आणि किनारी वापरा</translation>
 <translation id="7672520070349703697"><ph name="PAGE_TITLE" /> मध्ये <ph name="HUNG_IFRAME_URL" />.</translation>
+<translation id="7676867886086876795">कोणत्याही मजकूर फील्डमध्ये डिक्टेशनला अनुमती देण्यासाठी Google तुमचा व्हॉइस पाठवा.</translation>
 <translation id="7681095912841365527">साइट ब्लूटूथ वापरू शकते</translation>
 <translation id="7683373461016844951">पुढे सुरू ठेवण्यासाठी, ठीक आहे वर क्लिक करा, नंतर तुमच्या <ph name="DOMAIN" /> ईमेल पत्त्यासाठी नवीन प्रोफाइल तयार करण्याकरता व्यक्तीला जोडावर क्लिक करा.</translation>
 <translation id="7684212569183643648">आपल्‍या प्रशासकाद्वारे इंस्टॉल केले</translation>
@@ -4334,6 +4352,7 @@
 <translation id="7740996059027112821">मानक</translation>
 <translation id="7748528009589593815">मागील टॅब</translation>
 <translation id="7748626145866214022">अॅक्शन बारवर आणखी पर्याय उपलब्ध आहेत. अॅक्शन बारवर फोकस करण्यासाठी Alt + A दाबा.</translation>
+<translation id="7750228210027921155">चित्रात-चित्र</translation>
 <translation id="7751260505918304024">सर्व दर्शवा</translation>
 <translation id="7754704193130578113">डाउनलोड करण्यापूर्वी प्रत्येक फाइल कोठे सेव्ह करावी ते विचारा</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">आपण अपेक्षा करत होता ते हे नवीन पृष्ठ आहे?</translation>
 <translation id="786073089922909430">सेवा: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;डाउनलोड</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{एक कुकी}one{# कुकी}other{# कुकी}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - जोडणी केली</translation>
 <translation id="7870730066603611552">सेटअपनंतर सिंक पर्यायांचे परीक्षण करा</translation>
 <translation id="7870790288828963061">नवीन आवृत्तीसह कोणतेही कियोस्क अॅप्स आढळले नाहीत. काहीही अपडेट करू नका. कृपया USB स्टिक काढा.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">टॅब निःशब्द करा</translation>
 <translation id="8382913212082956454">&amp;ईमेल पत्ता कॉपी करा</translation>
 <translation id="8386903983509584791">स्कॅन पूर्ण झाले</translation>
+<translation id="8389492867173948260">तुम्ही भेट देता त्या वेबसाइटवरील तुमचा सर्व डेटा वाचण्यासाठी आणि बदलण्यासाठी या एक्टेंशनला अनुमती द्या:</translation>
 <translation id="8390449457866780408">सर्व्हर अनुपलब्ध.</translation>
 <translation id="8391712576156218334">इमेज अनुपलब्ध आहे. नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="8392234662362215700">कीबोर्ड लेआउट वरून स्विच करण्यासाठी Control-Shift-Space दाबा.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">तुम्हाला <ph name="LOGOUT_TIME_LEFT" /> मध्ये साइन आउट केले जाईल</translation>
 <translation id="8431909052837336408">सिम पिन बदला</translation>
 <translation id="8434480141477525001">NaCl  डीबग पोर्ट</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> सह तुमची ओळख पडताळा</translation>
 <translation id="843760761634048214">क्रेडिट कार्ड सेव्ह करा</translation>
 <translation id="8438328416656800239">स्मार्ट ब्राउझरवर बदला</translation>
 <translation id="8438566539970814960">शोध आणि ब्राउझ करणे चांगले करा</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">वैध नाही</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ला चालविण्यासाठी तुमची परवानगी आवश्यक आहे.</translation>
 <translation id="8466234950814670489">Tar संग्रहण</translation>
+<translation id="8466417995783206254">हा टॅब चित्रात-चित्र मोडमध्ये व्हिडिओ प्ले करत आहे.</translation>
 <translation id="8468750959626135884">Android फोनसह आपले <ph name="DEVICE_TYPE" /> अनलॉक करा.</translation>
 <translation id="8470028084415844044">तुमच्या सर्व डिव्हाइसवर सर्व पासवर्ड मिळवण्यासाठी, सिंक सुरू करा.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> साठी सेव्ह केलेले पासवर्ड</translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">हे प्लगइन चालवा</translation>
 <translation id="8497219075884839166">Windows सुविधा</translation>
 <translation id="8498214519255567734">तुमच्या स्क्रीनकडे पाहणे किंवा मंद उजेडात वाचणे सोपे करते</translation>
+<translation id="8498395510292172881">Chrome मध्ये वाचन सुरू ठेवा</translation>
 <translation id="8503813439785031346">वापरकर्तानाव</translation>
 <translation id="850875081535031620">कोणतेही हानिकारक सॉफ्टवेअर आढळले नाही</translation>
 <translation id="8509646642152301857">शब्दलेखन तपासणी शब्दकोश डाउनलोड करणे अयशस्वी.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">पुन्हा प्रयत्न करा</translation>
 <translation id="8725178340343806893">मनपसंत/बुकमार्क</translation>
 <translation id="8726206820263995930">सर्व्हरवरून धोरण सेटिंग्ज आणताना एरर: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">हे पुन्हा दर्शवू नका</translation>
 <translation id="8727344521467137076">Chrome ला तुमच्या काँप्युटरवर धोकादायक सॉफ्टवेअर आढळले आहे. Chrome ते काढून टाकेल आणि तुमचा ब्राउझर पुन्हा नीट चालावा यासाठी तुमच्या सेटिंग्ज रिस्टोअर करेल.</translation>
 <translation id="8730621377337864115">पूर्ण झाले</translation>
 <translation id="8732030010853991079">या चिन्हावर क्लिक करुन हा विस्तार वापरा.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">नवीन &amp;टॅबमध्ये दुवा उघडा</translation>
 <translation id="9030515284705930323">आपल्या संस्थेने आपल्या खात्यासाठी Google Play स्टोअर सक्षम केले नाही. अधिक माहितीसाठी आपल्या प्रशासकाशी संपर्क साधा.</translation>
 <translation id="9033857511263905942">&amp;पेस्ट करा</translation>
+<translation id="9034924485347205037">Linux फायली</translation>
 <translation id="9035012421917565900">हे आयटम '<ph name="DESTINATION_NAME" />' मध्ये परत हलवणे शक्य नाही, म्हणून ही क्रिया पूर्ववत केली जाणार नाही.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">मूळ दर्शवा</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">ब्लूटूथ डिव्हाइससाठी स्कॅन करत आहे...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth डिव्हाइस कनेक्ट केले</translation>
 <translation id="9177499212658576372">आपण सध्या <ph name="NETWORK_TYPE" /> नेटवर्कशी कनेक्ट केले आहे.</translation>
+<translation id="9179734824669616955">तुमच्या <ph name="DEVICE_TYPE" /> वर Linux (बीटा) सेट करा</translation>
 <translation id="9180281769944411366">या प्रक्रियेला काही मिनिटे लागू शकतात. Linux कंटेनर सुरू करत आहे.</translation>
 <translation id="9180380851667544951">साइट तुमची स्क्रीन शेअर करू शकते</translation>
 <translation id="9188441292293901223">कृपया हा <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी Android च्या नवीनतम आवृत्तीवर आपला फोन अपडेट करा.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index f3cb00a..2e7fd074 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Tanya sebelum mengakses</translation>
 <translation id="1434696352799406980">Ini akan menetapkan semula halaman permulaan, halaman tab baharu, enjin carian dan tab tersemat anda. Selain itu, semua sambungan akan dilumpuhkan dan data sementara seperti kuki akan dikosongkan. Sejarah penanda halaman anda dan kata laluan yang disimpan tidak akan dikosongkan.</translation>
 <translation id="1434886155212424586">Halaman utama ialah halaman Tab Baharu</translation>
+<translation id="1436671784520050284">Teruskan persediaan</translation>
 <translation id="1436784010935106834">Dibuang</translation>
 <translation id="1438632560381091872">Nyahredam tab</translation>
 <translation id="1442392616396121389">Awalan penghalaan</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Potongan piza</translation>
 <translation id="1467432559032391204">Kiri</translation>
 <translation id="1468571364034902819">Tidak dapat menggunakan profil ini</translation>
+<translation id="1470533772306424441">Kami akan memasang apl tersebut untuk anda. Anda boleh menemui pelbagai lagi apl untuk peranti anda di Gedung Play.</translation>
 <translation id="1470811252759861213">Untuk mendapatkan sambungan pada semua komputer anda, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" tidak dimuat naik. Ruang kosong tidak mencukupi dalam Google Drive anda.</translation>
 <translation id="1475502736924165259">Anda mempunyai sijil pada fail yang tidak sepadan dengan mana-mana kategori lain</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Zum &amp;Keluar</translation>
 <translation id="1830550083491357902">Tidak dilog masuk</translation>
 <translation id="1832511806131704864">Perubahan telefon dikemas kini</translation>
-<translation id="1832685970989658809">Kaedah pembayaran yang disimpan telah dilumpuhkan oleh pentadbir anda</translation>
 <translation id="1834503245783133039">Muat turun tidak berjaya: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Kosongkan carian</translation>
 <translation id="1838709767668011582">Tapak Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Daripada:</translation>
 <translation id="2193365732679659387">Tetapan percaya</translation>
 <translation id="2195729137168608510">Perlindungan E-mel</translation>
+<translation id="2199298570273670671">Ralat</translation>
 <translation id="2200356397587687044">Chrome memerlukan kebenaran untuk meneruskan</translation>
 <translation id="220138918934036434">Sembunyikan butang</translation>
 <translation id="2202898655984161076">Terdapat masalah menyenaraikan pencetak. Beberapa pencetak anda mungkin tidak berjaya didaftarkan dengan <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Paparkan kata laluan</translation>
 <translation id="2436186046335138073">Benarkan <ph name="HANDLER_HOSTNAME" /> untuk membuka semua <ph name="PROTOCOL" /> pautan?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Pengukuran penggunaan data tamat</translation>
 <translation id="2440604414813129000">Lihat s&amp;umber</translation>
 <translation id="2445081178310039857">Direktori akar sambungan adalah diperlukan.</translation>
 <translation id="2445484935443597917">Buat Profil Baharu</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> mahu mengesahkan identiti anda</translation>
 <translation id="2448312741937722512">Jenis</translation>
 <translation id="2450223707519584812">Anda tidak akan dapat menambahkan pengguna kerana kunci API Google tiada. Lihat <ph name="DETAILS_URL" /> untuk mendapatkan butiran.</translation>
 <translation id="2450310832094867474">Matikan penyegerakan dan log keluar?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Fail sudah wujud</translation>
 <translation id="2453860139492968684">Selesai</translation>
 <translation id="2454247629720664989">Kata kunci</translation>
+<translation id="245661998428026871">Video dalam mod gambar dalam gambar akan berhenti dimainkan.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ingin menyalin fail daripada <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID Kekunci Pihak Berkuasa Pensijilan</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> ditambahkan</translation>
@@ -1363,6 +1366,7 @@
 <translation id="304826556400666995">Nyahredam Beberapa Tab</translation>
 <translation id="3053013834507634016">Penggunaan Penting Sijil</translation>
 <translation id="3057861065630527966">Sandarkan foto dan video anda</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Dayakan pilih untuk bercakap</translation>
 <translation id="3061707000357573562">Perkhidmatan Tampung</translation>
 <translation id="3064410671692449875">Data tidak mencukupi</translation>
@@ -1411,6 +1415,7 @@
 <translation id="313205617302240621">Terlupa kata laluan?</translation>
 <translation id="3132996321662585180">Muat semula setiap hari</translation>
 <translation id="3135204511829026971">Putarkan skrin</translation>
+<translation id="313638818480447860">Kami menemui <ph name="NUMBER_OF_APPS" /> apl yang disambungkan ke akaun anda yang dioptimumkan untuk peranti ini.</translation>
 <translation id="313963229645891001">Memuat turun, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar kuning lalai</translation>
 <translation id="3140353188828248647">Tumpukan bar alamat</translation>
@@ -1441,6 +1446,7 @@
 <translation id="3182749001423093222">Semakan ejaan</translation>
 <translation id="3183139917765991655">Pengimport Profil</translation>
 <translation id="3184560914950696195">Tidak boleh disimpan pada $1. Imej yang diedit akan disimpan dalam folder Muat Turun.</translation>
+<translation id="3188257591659621405">Fail saya</translation>
 <translation id="3188465121994729530">Purata Pergerakan</translation>
 <translation id="3190558889382726167">Kata laluan yang disimpan</translation>
 <translation id="3192947282887913208">Fail Audio</translation>
@@ -1528,6 +1534,7 @@
 <translation id="3326821416087822643">Mengezip <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Maklumat apl</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Video dimainkan dalam mod gambar dalam gambar</translation>
 <translation id="3335337277364016868">Tahun dirakam</translation>
 <translation id="3335947283844343239">Buka Semula Tab Yang Ditutup</translation>
 <translation id="3336664756920573711">Buka kunci <ph name="DEVICE_TYPE" /> anda dengan telefon Android anda</translation>
@@ -1547,6 +1554,7 @@
 <translation id="3360297538363969800">Pencetakan gagal. Sila periksa pencetak anda dan cuba lagi.</translation>
 <translation id="3364721542077212959">Alatan stilus</translation>
 <translation id="3365598184818502391">Gunakan sama ada Ctrl atau Alt</translation>
+<translation id="3367047597842238025">Sediakan <ph name="DEVICE_TYPE" /> anda sepertimana yang anda ingini dan temui semua keupayaan yang menakjubkan di hujung jari anda.</translation>
 <translation id="3368922792935385530">Disambungkan</translation>
 <translation id="3369624026883419694">Menyelesaikan hos...</translation>
 <translation id="337286756654493126">Baca folder yang anda buka dalam aplikasi</translation>
@@ -1560,6 +1568,7 @@
 <translation id="3389312115541230716">Klik kanan ikon <ph name="SMALL_PRODUCT_LOGO" /> dalam bar tugas</translation>
 <translation id="3391716558283801616">Tab 7</translation>
 <translation id="3396331542604645348">Pencetak yang dipilih tidak tersedia atau tidak dipasang dengan betul. Periksa pencetak anda atau cuba pilih pencetak lain.</translation>
+<translation id="3396800784455899911">Dengan mengklik butang "Terima dan teruskan", anda bersetuju membenarkan pemprosesan yang dihuraikan di atas untuk perkhidmatan Google ini.</translation>
 <translation id="3399432415385675819">Pemberitahuan akan dilumpuhkan</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Tiada kata laluan disimpan untuk tapak ini</translation>
@@ -1788,10 +1797,13 @@
 <translation id="3726463242007121105">Peranti ini tidak boleh dibuka kerana sistem failnya tidak disokong.</translation>
 <translation id="3727148787322499904">Tindakan menukar tetapan ini akan menjejaskan semua rangkaian yang dikongsi</translation>
 <translation id="3727187387656390258">Periksa pop muncul</translation>
+<translation id="3729506734996624908">Tapak yang dibenarkan</translation>
 <translation id="3732078975418297900">Ralat pada baris <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Pelayan SSL dengan Peningkatan</translation>
+<translation id="3735740477244556633">Isih mengikut</translation>
 <translation id="3737274407993947948">Ralat semasa memasang Linux...</translation>
 <translation id="3737536731758327622">Muat turun anda dipaparkan di sini</translation>
+<translation id="3738671331307774213">Pengesahan identiti anda membantu melindungi data peribadi anda</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Buka <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> kini akan muncul dalam Admin Console</translation>
@@ -1876,10 +1888,10 @@
 <translation id="3846116211488856547">Dapatkan alatan untuk membangunkan tapak web, apl Android dan pelbagai lagi. Pemasangan Linux akan memuat turun <ph name="DOWNLOAD_SIZE" /> data.</translation>
 <translation id="385051799172605136">Kembali</translation>
 <translation id="3851428669031642514">Muatkan skrip yang tidak selamat</translation>
+<translation id="3854599674806204102">Buat pilihan</translation>
 <translation id="3855441664322950881">Sambungan pek</translation>
 <translation id="3855676282923585394">Import Penanda Halaman dan Tetapan...</translation>
 <translation id="3856800405688283469">Pilih zon waktu</translation>
-<translation id="3856921555429624101">Pengukuran penggunaan data telah tamat</translation>
 <translation id="3857228364945137633">Cuba Smart Lock untuk membuka kunci <ph name="DEVICE_TYPE" /> anda tanpa kata laluan semasa telefon ada berdekatan.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elir.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Penyegerakan dijeda</translation>
@@ -2250,7 +2262,6 @@
 <translation id="4508051413094283164">Buka semua dalam tetingkap inkognito</translation>
 <translation id="4508265954913339219">Pengaktifan gagal</translation>
 <translation id="4508765956121923607">Paparkan S&amp;umber</translation>
-<translation id="4509823033118379431">Imej tidak tersedia pada masa ini. Sila sambung semula untuk melihat koleksi.</translation>
 <translation id="451407183922382411">Dikuasakan oleh <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Sediakan pengguna diselia yang baharu</translation>
 <translation id="4514610446763173167">Togol video kepada main atau jeda</translation>
@@ -2327,6 +2338,7 @@
 <translation id="4627442949885028695">Teruskan daripada peranti lain</translation>
 <translation id="4628314759732363424">Tukar...</translation>
 <translation id="4628757576491864469">Peranti</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Aksara tidak sah: $1</translation>
 <translation id="4631887759990505102">Artis</translation>
 <translation id="4632483769545853758">Nyahredam Tab</translation>
@@ -2512,7 +2524,6 @@
 <translation id="4905417359854579806">Sedia untuk menyandarkan <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Fail ini tidak lazim dimuat turun dan mungkin berbahaya.</translation>
 <translation id="4907306957610201395">Kategori Kebenaran</translation>
-<translation id="4907824805858067479">Kad yang disimpan dilumpuhkan oleh pentadbir anda</translation>
 <translation id="4908811072292128752">Buka tab baharu untuk menyemak imbas dua tapak pada masa yang sama</translation>
 <translation id="4909038193460299775">Oleh sebab akaun ini diurus oleh <ph name="DOMAIN" />, penanda halaman, sejarah, kata laluan dan tetapan anda yang lain akan dikosongkan daripada peranti ini. Namun begitu, data anda akan terus disimpan dalam Akaun Google anda dan boleh diurus di <ph name="BEGIN_LINK" />Papan Pemuka Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Anda berjaya didaftarkan</translation>
@@ -2544,6 +2555,7 @@
 <translation id="4955814292505481804">Tahunan</translation>
 <translation id="4957949153200969297">Dayakan ciri yang berkaitan dengan Penyegerakan <ph name="IDS_SHORT_PRODUCT_NAME" /> sahaja</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Dapatkan kad anda di satu tempat</translation>
 <translation id="496226124210045887">Folder yang anda pilih mengandungi fail sensitif. Adakah anda pasti mahu memberikan "$1" akses membaca tetap kepada folder ini?</translation>
 <translation id="4964455510556214366">Susunan</translation>
 <translation id="4964673849688379040">Menyemak...</translation>
@@ -2591,6 +2603,7 @@
 <translation id="5027562294707732951">Tambahkan sambungan</translation>
 <translation id="5029568752722684782">Hapuskan salinan</translation>
 <translation id="5030338702439866405">Dikeluarkan Oleh</translation>
+<translation id="503155457707535043">Apl sedang dimuat turun</translation>
 <translation id="503498442187459473"><ph name="HOST" /> mahu menggunakan kamera dan mikrofon anda</translation>
 <translation id="5036662165765606524">Jangan benarkan mana-mana tapak memuat turun berbilang fail secara automatik</translation>
 <translation id="5037676449506322593">Pilih Semua</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Redam</translation>
 <translation id="5785583009707899920">Utiliti Fail Chrome</translation>
 <translation id="5787146423283493983">Perjanjian Penting</translation>
+<translation id="5788127256798019331">Fail Play</translation>
 <translation id="5788367137662787332">Maaf, sekurang-kurangnya satu pemetakan pada peranti <ph name="DEVICE_LABEL" /> tidak dapat dilekapkan.</translation>
 <translation id="5794414402486823030">Sentiasa buka dengan alat lihat sistem</translation>
 <translation id="5794786537412027208">Hentikan semua Apl Chrome</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Diterjemahkan</translation>
 <translation id="5991049340509704927">Membesarkan</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Untuk memastikan anda boleh terus melayari web, minta pentadbir anda mengalih keluar aplikasi ini.}other{Untuk memastikan anda boleh terus melayari web, minta pentadbir anda mengalih keluar aplikasi ini.}}</translation>
-<translation id="5993332328670040093">Penggunaan data anda tidak lagi akan diukur.</translation>
 <translation id="6002458620803359783">Suara Pilihan</translation>
 <translation id="6005695835120147974">Penghala Media</translation>
 <translation id="6006484371116297560">Klasik</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Pilih sijil</translation>
 <translation id="6181431612547969857">Muat turun disekat</translation>
 <translation id="6185132558746749656">Lokasi Peranti</translation>
+<translation id="6185617499004995178">Pengesah IPP CUPS</translation>
 <translation id="6185696379715117369">Halaman atas</translation>
 <translation id="6189273858858366896">Sediakan atau urus Perkongsian Fail Rangkaian.</translation>
 <translation id="6189412234224385711">Buka dengan <ph name="EXTENSION_NAME" /></translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Tambahkan param pertanyaan dalam URL untuk automuat semula halaman: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Bateri</translation>
 <translation id="6232116551750539448">Sambungan ke <ph name="NAME" /> telah hilang</translation>
+<translation id="6235700927623181151">Tab ini berkongsi kandungan desktop anda.</translation>
 <translation id="6237816943013845465">Membolehkan anda melaraskan peleraian skrin anda</translation>
 <translation id="6238923052227198598">Simpan nota terkini pada skrin kunci</translation>
 <translation id="6239558157302047471">Muat semula &amp;bingkai</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> tidak biasa dimuat turun dan mungkin berbahaya.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Pencetak baharu pada rangkaian anda}other{Pencetak baharu pada rangkaian anda}}</translation>
-<translation id="6286684120317096255">Penggunaan data sedang diukur</translation>
 <translation id="6286708577777130801">Butiran kata laluan yang disimpan</translation>
 <translation id="6287852322318138013">Pilih apl untuk membuka fail ini</translation>
 <translation id="6289452883081499048">Perkhidmatan Google yang diperibadikan seperti Play</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Urus peranti Cetakan Awan</translation>
 <translation id="6451689256222386810">Jika anda terlupa ungkapan laluan atau ingin menukar tetapan ini, <ph name="BEGIN_LINK" />tetapkan semula penyegerakan<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Tolak</translation>
+<translation id="6455264371803474013">Pada tapak web tertentu</translation>
 <translation id="6455894534188563617">&amp;Folder Baharu</translation>
 <translation id="6456394469623773452">Halus</translation>
 <translation id="6456631036739229488">Telefon Smart Lock ditukar. Masukkan kata laluan anda untuk mengemas kini Smart Lock. Selepas ini, telefon anda akan membuka kunci <ph name="DEVICE_TYPE" />. Matikan Smart Lock dalam Tetapan.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">&amp;Muatkan Semula Halaman Ini</translation>
 <translation id="6577284282025554716">Muat turun dibatalkan: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Sulitkan kata laluan yang disegerakkan dengan nama pengguna dan kata laluan Google anda</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Kandungan desktop dikongsi</translation>
 <translation id="6580151766480067746">Versi ARC</translation>
 <translation id="6581162200855843583">Pautan Google Drive</translation>
 <translation id="6582421931165117398">Untuk melindungi maklumat peribadi anda, tukar kata laluan anda sekarang. Sebelum anda boleh menukar kata laluan, anda akan diminta untuk log masuk.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Aplikasi ini boleh menghalang Chrome daripada berfungsi dengan betul.}other{Aplikasi ini boleh menghalang Chrome daripada berfungsi dengan betul.}}</translation>
 <translation id="7303900363563182677">Tapak ini telah disekat daripada melihat teks dan imej yang disalin ke papan keratan</translation>
 <translation id="730515362922783851">Bertukar data dengan mana-mana peranti pada rangkaian tempatan atau internet</translation>
+<translation id="7307129035224081534">Dijeda</translation>
 <translation id="7308002049209013926">Gunakan Pelancar untuk pergi ke apl dan aktiviti baharu dengan cepat. Untuk ke sini menggunakan papan kekunci, tekan Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Paparkan &amp;kawalan</translation>
 <translation id="7310598146671372464">Gagal log masuk. Pelayan tidak menyokong jenis penyulitan Kerberos yang dinyatakan. Sila hubungi pentadbir anda.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">Sediakan sambungan pada <ph name="PHONE_NAME" /> anda</translation>
 <translation id="740624631517654988">Pop muncul disekat</translation>
 <translation id="7407430846095439694">Import dan Ikat</translation>
-<translation id="7409233648990234464">Lancarkan Semula dan Powerwash</translation>
 <translation id="7409836189476010449">Jalankan Flash</translation>
 <translation id="7410344089573941623">Tanya jika <ph name="HOST" /> ingin mengakses kamera dan mikrofon anda</translation>
 <translation id="741204030948306876">Ya, saya setuju</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">URL Pembatalan Sijil Netscape</translation>
 <translation id="7469894403370665791">Menyambung ke rangkaian ini secara automatik</translation>
 <translation id="747114903913869239">Ralat: Tidak dapat menyahkod sambungan</translation>
+<translation id="7473753388963818366">Mari sediakan <ph name="DEVICE_TYPE" /> anda</translation>
 <translation id="7473891865547856676">Tidak, Terima Kasih</translation>
 <translation id="747459581954555080">Pulihkan semua</translation>
 <translation id="7475671414023905704">URL Kata Laluan Hilang Netscape</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Tambah akaun</translation>
 <translation id="7671130400130574146">Gunakan bar dan sempadan tajuk sistem</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, dalam <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Hantar suara anda kepada Google untuk membenarkan pengimlakan dalam mana-mana medan teks.</translation>
 <translation id="7681095912841365527">Tapak boleh menggunakan bluetooth</translation>
 <translation id="7683373461016844951">Klik OK untuk meneruskan, kemudian klik Tambah Orang untuk membuat profil baharu untuk alamat e-mel <ph name="DOMAIN" /> anda.</translation>
 <translation id="7684212569183643648">Dipasang oleh Pentadbir Anda</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Tab sebelumnya</translation>
 <translation id="7748626145866214022">Lagi pilihan tersedia pada bar tindakan. Tekan Alt + A untuk memfokuskan bar tindakan.</translation>
+<translation id="7750228210027921155">Gambar dalam gambar</translation>
 <translation id="7751260505918304024">Paparkan semua</translation>
 <translation id="7754704193130578113">Tanyakan tempat untuk menyimpan setiap fail sebelum memuat turun</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4441,6 +4460,7 @@
 <translation id="7857949311770343000">Adakah ini halaman tab baharu yang anda jangkakan?</translation>
 <translation id="786073089922909430">Perkhidmatan: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Muat turun</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 kuki}other{# kuki}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Digandingkan</translation>
 <translation id="7870730066603611552">Semak pilihan penyegerakan selepas persediaan</translation>
 <translation id="7870790288828963061">Tiada apl Kiosk dengan versi lebih baharu dijumpai. Tiada apa-apa untuk dikemas kini. Sila alih keluar batang USB.</translation>
@@ -4763,6 +4783,7 @@
 <translation id="8373553483208508744">Redam beberapa tab</translation>
 <translation id="8382913212082956454">Salin &amp;alamat e-mel</translation>
 <translation id="8386903983509584791">Pengimbasan selesai</translation>
+<translation id="8389492867173948260">Benarkan sambungan ini membaca dan mengubah semua data anda pada tapak web yang anda lawati:</translation>
 <translation id="8390449457866780408">Pelayan tidak tersedia.</translation>
 <translation id="8391712576156218334">Imej tidak tersedia. Cuba sebentar lagi.</translation>
 <translation id="8392234662362215700">Tekan Control-Shift-Space untuk menukar reka letak papan kekunci.</translation>
@@ -4794,6 +4815,7 @@
 <translation id="84297032718407999">Anda akan dilog keluar dalam masa <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Tukar PIN SIM</translation>
 <translation id="8434480141477525001">Port Nyahpepijat NaCl</translation>
+<translation id="8435395510592618362">Sahkan identiti anda dengan <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Simpan kad kredit</translation>
 <translation id="8438328416656800239">Tukar kepada penyemak imbas pintar</translation>
 <translation id="8438566539970814960">Mempertingkatkan carian dan penyemakan imbas</translation>
@@ -4820,6 +4842,7 @@
 <translation id="8465252176946159372">Tidak sah</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> memerlukan kebenaran anda untuk dijalankan</translation>
 <translation id="8466234950814670489">Arkib Tar</translation>
+<translation id="8466417995783206254">Tab ini memainkan video dalam mod gambar dalam gambar.</translation>
 <translation id="8468750959626135884">Buka kunci <ph name="DEVICE_TYPE" /> anda dengan telefon Android anda.</translation>
 <translation id="8470028084415844044">Hidupkan penyegerakan untuk mendapatkan semua kata laluan anda pada semua peranti anda.</translation>
 <translation id="8470513973197838199">Kata laluan disimpan untuk <ph name="ORIGIN" /></translation>
@@ -4840,6 +4863,7 @@
 <translation id="8496717697661868878">Jalankan Pemalam Ini</translation>
 <translation id="8497219075884839166">Windows Utilities</translation>
 <translation id="8498214519255567734">Memudahkan anda melihat skrin atau membaca dalam cahaya malap</translation>
+<translation id="8498395510292172881">Teruskan membaca dalam Chrome</translation>
 <translation id="8503813439785031346">Nama pengguna</translation>
 <translation id="850875081535031620">Tiada perisian berbahaya ditemui</translation>
 <translation id="8509646642152301857">Muat turun kamus semakan ejaan gagal.</translation>
@@ -4990,7 +5014,6 @@
 <translation id="8725066075913043281">Cuba lagi</translation>
 <translation id="8725178340343806893">Kegemaran/Penanda halaman</translation>
 <translation id="8726206820263995930">Ralat semasa mengambil tetapan dasar dari pelayan: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Jangan tunjukkannya lagi</translation>
 <translation id="8727344521467137076">Terdapat perisian yang berbahaya pada komputer anda. Chrome sedang mengalih keluar perisian tersebut dan akan memulihkan tetapan supaya penyemak imbas anda dapat berfungsi seperti biasa semula.</translation>
 <translation id="8730621377337864115">Selesai</translation>
 <translation id="8732030010853991079">Gunakan sambungan ini dengan mengklik pada ikon ini.</translation>
@@ -5181,6 +5204,7 @@
 <translation id="9027459031423301635">Buka Pautan dalam Tab &amp;Baharu</translation>
 <translation id="9030515284705930323">Organisasi anda belum mendayakan Gedung Google Play untuk akaun anda. Hubungi pentadbir anda untuk mendapatkan maklumat lanjut.</translation>
 <translation id="9033857511263905942">&amp;Tampal</translation>
+<translation id="9034924485347205037">Fail Linux</translation>
 <translation id="9035012421917565900">Items tidak boleh dialihkan kembali ke '<ph name="DESTINATION_NAME" />', oleh itu, anda tidak akan dapat membuat asal tindakan ini.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Tunjukkan Yang Asal</translation>
@@ -5281,6 +5305,7 @@
 <translation id="9173995187295789444">Mengimbas peranti Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Peranti Bluetooth disambungkan</translation>
 <translation id="9177499212658576372">Anda sedang disambungkan ke rangkaian <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Sediakan Linux (Beta) pada <ph name="DEVICE_TYPE" /> anda</translation>
 <translation id="9180281769944411366">Proses ini mungkin mengambil masa beberapa minit. Memulakan bekas Linux.</translation>
 <translation id="9180380851667544951">Tapak boleh berkongsi skrin anda</translation>
 <translation id="9188441292293901223">Sila kemas kini telefon anda kepada versi Android yang lebih baharu untuk membuka kunci <ph name="DEVICE_TYPE" /> ini.</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index 28edcf6..b135c39 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Vragen vóór toegang</translation>
 <translation id="1434696352799406980">Hiermee worden je homepage, nieuwe tabbladpagina, zoekmachine en vastgezette tabbladen opnieuw ingesteld. Ook worden alle extensies uitgeschakeld en tijdelijke gegevens (zoals cookies) gewist. Je bladwijzers, geschiedenis en opgeslagen wachtwoorden worden niet gewist.</translation>
 <translation id="1434886155212424586">Homepage is de nieuwe tabbladpagina</translation>
+<translation id="1436671784520050284">Doorgaan met instellen</translation>
 <translation id="1436784010935106834">Verwijderd</translation>
 <translation id="1438632560381091872">Dempen tabbladen opheffen</translation>
 <translation id="1442392616396121389">Routeringsvoorvoegsel</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzapunt</translation>
 <translation id="1467432559032391204">Links</translation>
 <translation id="1468571364034902819">Dit profiel kan niet worden gebruikt</translation>
+<translation id="1470533772306424441">We installeren deze apps voor je. In de Play Store vind je nog meer apps voor je apparaat.</translation>
 <translation id="1470811252759861213">Als je je extensies wilt gebruiken op al je computers, moet je <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">'<ph name="FILENAME" />' is niet geüpload. Er is onvoldoende ruimte beschikbaar in je Google Drive.</translation>
 <translation id="1475502736924165259">Je hebt certificaten die niet in een van de andere categorieën vallen</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Uitz&amp;oomen</translation>
 <translation id="1830550083491357902">Niet ingelogd</translation>
 <translation id="1832511806131704864">Telefoonwijziging geüpdatet</translation>
-<translation id="1832685970989658809">Opgeslagen betaalmethoden zijn uitgeschakeld door je beheerder</translation>
 <translation id="1834503245783133039">Download niet geslaagd: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Zoekopdracht wissen</translation>
 <translation id="1838709767668011582">Google-site</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Van:</translation>
 <translation id="2193365732679659387">Vertrouwensinstellingen</translation>
 <translation id="2195729137168608510">E-mail beveiligen</translation>
+<translation id="2199298570273670671">Fout</translation>
 <translation id="2200356397587687044">Chrome heeft toestemming nodig om verder te gaan</translation>
 <translation id="220138918934036434">Knop verbergen</translation>
 <translation id="2202898655984161076">Er is een probleem opgetreden met het genereren van het printeroverzicht. Sommige van je printers zijn mogelijk niet geregistreerd voor <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Wachtwoord weergeven</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> toestaan alle links voor <ph name="PROTOCOL" /> te openen?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Bijhouden van dataverbruik beëindigd</translation>
 <translation id="2440604414813129000">Br&amp;on weergeven</translation>
 <translation id="2445081178310039857">Hoofddirectory van extensie is vereist.</translation>
 <translation id="2445484935443597917">Een nieuw profiel maken</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> wil je identiteit verifiëren</translation>
 <translation id="2448312741937722512">Type</translation>
 <translation id="2450223707519584812">Je kunt geen gebruikers toevoegen omdat Google API-sleutels ontbreken. Bekijk <ph name="DETAILS_URL" /> voor details.</translation>
 <translation id="2450310832094867474">Synchronisatie uitschakelen en uitloggen?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Bestand bestaat al</translation>
 <translation id="2453860139492968684">Voltooien</translation>
 <translation id="2454247629720664989">Zoekwoord</translation>
+<translation id="245661998428026871">Het afspelen van de video in de scherm-in-scherm-modus wordt gestopt.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> wil bestanden van <ph name="VOLUME_NAME" /> kopiëren.</translation>
 <translation id="2462724976360937186">Sleutel-ID van certificeringsinstantie</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> toegevoegd</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Dempen tabbladen opheffen</translation>
 <translation id="3053013834507634016">Sleutelgebruik voor certificaat</translation>
 <translation id="3057861065630527966">Een back-up van je foto's en video's maken</translation>
+<translation id="3059313675706898490">Android Berichten</translation>
 <translation id="3060379269883947824">'Selecteer om uitgesproken te worden' inschakelen</translation>
 <translation id="3061707000357573562">Patchservice</translation>
 <translation id="3064410671692449875">Onvoldoende gegevens</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Wachtwoord vergeten?</translation>
 <translation id="3132996321662585180">Dagelijks vernieuwen</translation>
 <translation id="3135204511829026971">Scherm draaien</translation>
+<translation id="313638818480447860">We hebben <ph name="NUMBER_OF_APPS" /> apps gevonden die aan je account zijn gekoppeld en die zijn geoptimaliseerd voor dit apparaat.</translation>
 <translation id="313963229645891001">Downloaden: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Standaard gele avatar</translation>
 <translation id="3140353188828248647">Adresbalk activeren</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Spellingcontrole</translation>
 <translation id="3183139917765991655">Profile Importer</translation>
 <translation id="3184560914950696195">Kan niet opslaan naar $1. Bewerkte afbeeldingen worden opgeslagen in de map 'Downloads'.</translation>
+<translation id="3188257591659621405">Mijn bestanden</translation>
 <translation id="3188465121994729530">Voortschrijdend gemiddelde</translation>
 <translation id="3190558889382726167">Wachtwoord opgeslagen</translation>
 <translation id="3192947282887913208">Audiobestanden</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> inpakken...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">App-informatie</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" />: video wordt afgespeeld in de scherm-in-scherm-modus</translation>
 <translation id="3335337277364016868">Opnamejaar</translation>
 <translation id="3335947283844343239">Open gesloten tabblad opnieuw</translation>
 <translation id="3336664756920573711">Ontgrendel je <ph name="DEVICE_TYPE" /> met je Android-telefoon</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Afdrukken is mislukt. Controleer je printer en probeer het opnieuw.</translation>
 <translation id="3364721542077212959">Stylustools</translation>
 <translation id="3365598184818502391">Gebruik Ctrl of Alt</translation>
+<translation id="3367047597842238025">Stel je <ph name="DEVICE_TYPE" /> naar wens in en ontdek welke mogelijkheden je dan allemaal hebt.</translation>
 <translation id="3368922792935385530">Verbonden</translation>
 <translation id="3369624026883419694">Host vaststellen</translation>
 <translation id="337286756654493126">Mappen lezen die je opent in de app</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Klik met de rechtermuisknop op het pictogram <ph name="SMALL_PRODUCT_LOGO" /> in de taakbalk</translation>
 <translation id="3391716558283801616">Tabblad 7</translation>
 <translation id="3396331542604645348">De geselecteerde printer is niet beschikbaar of niet correct geïnstalleerd. Controleer de printer of probeer een andere printer te selecteren.</translation>
+<translation id="3396800784455899911">Door op de knop 'Accepteren en doorgaan' te klikken, ga je akkoord met de bovengenoemde verwerking voor deze Google-services.</translation>
 <translation id="3399432415385675819">Meldingen worden uitgeschakeld</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Geen wachtwoorden opgeslagen voor deze site</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Dit apparaat kan niet worden geopend omdat het bijbehorende bestandssysteem niet wordt ondersteund.</translation>
 <translation id="3727148787322499904">Het wijzigen van deze instelling is van invloed op alle gedeelde netwerken</translation>
 <translation id="3727187387656390258">Pop-up controleren</translation>
+<translation id="3729506734996624908">Toegestane sites</translation>
 <translation id="3732078975418297900">Fout op regel <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server met step-up</translation>
+<translation id="3735740477244556633">Sorteren op</translation>
 <translation id="3737274407993947948">Fout bij installeren van Linux...</translation>
 <translation id="3737536731758327622">Je downloads worden hier weergegeven</translation>
+<translation id="3738671331307774213">Door je identiteit te verifiëren, blijven je privégegevens beter beschermd</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> openen?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> wordt nu weergegeven in de beheerdersconsole</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Ontvang tools voor het ontwikkelen van websites, Android-apps en meer. Als je Linux installeert, wordt <ph name="DOWNLOAD_SIZE" /> aan data gedownload.</translation>
 <translation id="385051799172605136">Vorige</translation>
 <translation id="3851428669031642514">Onveilige scripts laden</translation>
+<translation id="3854599674806204102">Kies een optie</translation>
 <translation id="3855441664322950881">Extensie inpakken</translation>
 <translation id="3855676282923585394">Bladwijzers en instellingen importeren...</translation>
 <translation id="3856800405688283469">Tijdzone selecteren</translation>
-<translation id="3856921555429624101">Bijhouden van dataverbruik is beëindigd</translation>
 <translation id="3857228364945137633">Probeer Smart Lock om je <ph name="DEVICE_TYPE" /> te ontgrendelen zonder wachtwoord wanneer je telefoon zich in de buurt bevindt.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: synchronisatie gepauzeerd</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Alles openen in incognitovenster</translation>
 <translation id="4508265954913339219">Activering mislukt</translation>
 <translation id="4508765956121923607">Br&amp;on weergeven</translation>
-<translation id="4509823033118379431">De afbeeldingen zijn momenteel niet beschikbaar. Maak opnieuw verbinding om de collecties te bekijken.</translation>
 <translation id="451407183922382411">Mogelijk gemaakt door <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Nieuwe gebruiker met beperkte rechten instellen</translation>
 <translation id="4514610446763173167">Video schakelen tussen afspelen en pauzeren</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Doorgaan vanaf een ander apparaat</translation>
 <translation id="4628314759732363424">Wijzigen...</translation>
 <translation id="4628757576491864469">Apparaten</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Ongeldig teken: $1</translation>
 <translation id="4631887759990505102">Artiest</translation>
 <translation id="4632483769545853758">Dempen tabblad opheffen</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Klaar om back-up van <ph name="FILE_COUNT" /> te maken</translation>
 <translation id="4907161631261076876">Dit bestand wordt niet vaak gedownload en kan gevaarlijk zijn.</translation>
 <translation id="4907306957610201395">Rechtencategorie</translation>
-<translation id="4907824805858067479">Opgeslagen kaarten zijn uitgeschakeld door je beheerder</translation>
 <translation id="4908811072292128752">Een nieuw tabblad openen om op twee sites tegelijk te browsen</translation>
 <translation id="4909038193460299775">Omdat dit account wordt beheerd door <ph name="DOMAIN" />, worden je bladwijzers, geschiedenis, wachtwoorden en andere instellingen gewist van dit apparaat. Je gegevens blijven opgeslagen in je Google-account en kunnen worden beheerd via <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Je bent ingeschreven</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Jaarlijks</translation>
 <translation id="4957949153200969297">Alleen functies inschakelen die zijn gerelateerd aan <ph name="IDS_SHORT_PRODUCT_NAME" />-synchronisatie</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Al je kaarten bij elkaar</translation>
 <translation id="496226124210045887">De map die je hebt geselecteerd, bevat gevoelige bestanden. Weet je zeker dat je '$1' permanente leestoegang wilt geven tot deze map?</translation>
 <translation id="4964455510556214366">Indeling</translation>
 <translation id="4964673849688379040">Controleren…</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Extensie toevoegen</translation>
 <translation id="5029568752722684782">Kopie wissen</translation>
 <translation id="5030338702439866405">Verleend door</translation>
+<translation id="503155457707535043">Apps downloaden</translation>
 <translation id="503498442187459473"><ph name="HOST" /> wil gebruikmaken van je camera en microfoon</translation>
 <translation id="5036662165765606524">Sites niet toestaan automatisch meerdere bestanden te downloaden</translation>
 <translation id="5037676449506322593">Selecteer alles</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Dempen</translation>
 <translation id="5785583009707899920">Chrome-bestandshulpprogramma's</translation>
 <translation id="5787146423283493983">Sleutelovereenkomst</translation>
+<translation id="5788127256798019331">Play-bestanden</translation>
 <translation id="5788367137662787332">Ten minste één partitie op het apparaat <ph name="DEVICE_LABEL" /> kan niet worden gekoppeld.</translation>
 <translation id="5794414402486823030">Altijd openen met systeemviewer</translation>
 <translation id="5794786537412027208">Alle Chrome-apps sluiten</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Vertaald</translation>
 <translation id="5991049340509704927">Vergroten</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Vraag je beheerder deze app te verwijderen om ervoor te zorgen dat je kunt blijven browsen op het web.}other{Vraag je beheerder deze apps te verwijderen om ervoor te zorgen dat je kunt blijven browsen op het web.}}</translation>
-<translation id="5993332328670040093">Je dataverbruik wordt niet langer bijgehouden.</translation>
 <translation id="6002458620803359783">Voorkeursstemmen</translation>
 <translation id="6005695835120147974">Mediarouter</translation>
 <translation id="6006484371116297560">Klassiek</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Een certificaat selecteren</translation>
 <translation id="6181431612547969857">Download geblokkeerd</translation>
 <translation id="6185132558746749656">Apparaatlocatie</translation>
+<translation id="6185617499004995178">CUPS IPP Validator</translation>
 <translation id="6185696379715117369">Page Up</translation>
 <translation id="6189273858858366896">Network File Shares instellen of beheren.</translation>
 <translation id="6189412234224385711">Openen met <ph name="EXTENSION_NAME" /></translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Voeg een queryparameter aan de URL toe om de pagina automatisch te laten vernieuwen: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batterij</translation>
 <translation id="6232116551750539448">Verbinding met <ph name="NAME" /> is verbroken</translation>
+<translation id="6235700927623181151">Dit tabblad deelt de content van je bureaublad.</translation>
 <translation id="6237816943013845465">Hiermee kun je de schermresolutie aanpassen</translation>
 <translation id="6238923052227198598">Laatste notitie op vergrendelingsscherm laten staan</translation>
 <translation id="6239558157302047471">&amp;Frame opnieuw laden</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> wordt niet vaak gedownload en kan gevaarlijk zijn.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nieuwe printer in je netwerk}other{Nieuwe printers in je netwerk}}</translation>
-<translation id="6286684120317096255">Dataverbruik wordt bijgehouden</translation>
 <translation id="6286708577777130801">Details van opgeslagen wachtwoorden</translation>
 <translation id="6287852322318138013">Een app selecteren om dit bestand te openen</translation>
 <translation id="6289452883081499048">Gepersonaliseerde Google-services zoals Play</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Cloudprinter-apparaten beheren</translation>
 <translation id="6451689256222386810">Als je je wachtwoordzin bent vergeten of deze instelling wilt wijzigen, <ph name="BEGIN_LINK" />stel je de synchronisatie opnieuw in<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Weigeren</translation>
+<translation id="6455264371803474013">Op specifieke sites</translation>
 <translation id="6455894534188563617">&amp;Nieuwe map</translation>
 <translation id="6456394469623773452">Goed</translation>
 <translation id="6456631036739229488">Telefoon voor Smart Lock gewijzigd. Geef je wachtwoord op om Smart Lock te updaten. De volgende keer wordt je <ph name="DEVICE_TYPE" /> ontgrendeld met je telefoon. Schakel Smart Lock uit in Instellingen.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">&amp;Laad pagina opnieuw</translation>
 <translation id="6577284282025554716">Download geannuleerd: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Gesynchroniseerde wachtwoorden versleutelen met je Google-gebruikersnaam en -wachtwoord</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" />: content van bureaublad gedeeld</translation>
 <translation id="6580151766480067746">ARC-versie</translation>
 <translation id="6581162200855843583">Google Drive-link</translation>
 <translation id="6582421931165117398">Wijzig je wachtwoord nu om je persoonlijke gegevens te beschermen. Voordat je je wachtwoord kunt wijzigen, wordt je gevraagd in te loggen.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Deze app kan ervoor zorgen dat Chrome niet goed functioneert.}other{Deze apps kunnen ervoor zorgen dat Chrome niet goed functioneert.}}</translation>
 <translation id="7303900363563182677">Deze site kan geen tekst en afbeeldingen bekijken die naar het klembord zijn gekopieerd</translation>
 <translation id="730515362922783851">Gegevens uitwisselen met elk apparaat op het lokale netwerk of internet</translation>
+<translation id="7307129035224081534">Onderbroken</translation>
 <translation id="7308002049209013926">Gebruik de Launcher om snel naar nieuwe apps en activiteiten te gaan. Druk op Alt + Shift + L om via het toetsenbord daarnaartoe te gaan.</translation>
 <translation id="7309257895202129721">Besturingselementen &amp;weergeven</translation>
 <translation id="7310598146671372464">Kan niet inloggen. De server ondersteunt de opgegeven Kerberos-versleutelingstypen niet. Neem contact op met je beheerder.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923">Een verbinding instellen op je <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Pop-up geblokkeerd</translation>
 <translation id="7407430846095439694">Importeren en binden</translation>
-<translation id="7409233648990234464">Opnieuw starten en Powerwash uitvoeren</translation>
 <translation id="7409836189476010449">Flash uitvoeren</translation>
 <translation id="7410344089573941623">Vragen of <ph name="HOST" /> toegang wil tot je camera en microfoon</translation>
 <translation id="741204030948306876">Ja, inschakelen</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">URL voor intrekken van Netscape-certificaat</translation>
 <translation id="7469894403370665791">Automatisch verbinding maken met dit netwerk</translation>
 <translation id="747114903913869239">Fout: kan extensie niet decoderen</translation>
+<translation id="7473753388963818366">Laten we je <ph name="DEVICE_TYPE" /> klaarmaken voor gebruik</translation>
 <translation id="7473891865547856676">Nee, bedankt</translation>
 <translation id="747459581954555080">Alles herstellen</translation>
 <translation id="7475671414023905704">URL van verloren Netscape-wachtwoord</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Account toevoegen</translation>
 <translation id="7671130400130574146">Titelbalk en kaders van systeem gebruiken</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, in <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Verzend je stem naar Google zodat je kunt dicteren in tekstvelden.</translation>
 <translation id="7681095912841365527">Site kan Bluetooth gebruiken</translation>
 <translation id="7683373461016844951">Als je verder wilt gaan, klik je op 'OK' en vervolgens op 'Persoon toevoegen' om een nieuw profiel te maken voor je <ph name="DOMAIN" />-mailadres.</translation>
 <translation id="7684212569183643648">Geïnstalleerd door je beheerder</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Standaard</translation>
 <translation id="7748528009589593815">Vorig tabblad</translation>
 <translation id="7748626145866214022">Meer opties beschikbaar op de actiebalk. Druk op Alt+A om de focus op de actiebalk te plaatsen.</translation>
+<translation id="7750228210027921155">Scherm-in-scherm</translation>
 <translation id="7751260505918304024">Alles weergeven</translation>
 <translation id="7754704193130578113">Voorafgaand aan een download vragen waar een bestand moet worden opgeslagen</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Is dit de nieuwe pagina met tabbladen die je had verwacht?</translation>
 <translation id="786073089922909430">Service: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Downloads</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - gekoppeld</translation>
 <translation id="7870730066603611552">Synchronisatieopties bekijken na de installatie</translation>
 <translation id="7870790288828963061">Er zijn geen Kiosk-apps met een nieuwere versie gevonden. Er is niets om te updaten. Verwijder de USB-stick.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Tabbladen dempen</translation>
 <translation id="8382913212082956454">&amp;E-mailadres kopiëren</translation>
 <translation id="8386903983509584791">Scan voltooid</translation>
+<translation id="8389492867173948260">Hiermee kan deze extensie al je gegevens lezen en wijzigen op de websites die je bezoekt:</translation>
 <translation id="8390449457866780408">Server niet beschikbaar.</translation>
 <translation id="8391712576156218334">De afbeelding is niet beschikbaar. Probeer het later opnieuw.</translation>
 <translation id="8392234662362215700">Druk op Ctrl-Shift-spatiebalk om de toetsenbordindeling te wijzigen.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Je wordt uitgelogd over <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Pincode van simkaart wijzigen</translation>
 <translation id="8434480141477525001">Foutopsporingspoort voor systeemeigen client</translation>
+<translation id="8435395510592618362">Je identiteit verifiëren met <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Creditcard opslaan</translation>
 <translation id="8438328416656800239">Overschakelen naar een slimme browser</translation>
 <translation id="8438566539970814960">Zoekopdrachten en browsefunctionaliteit verbeteren</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Ongeldig</translation>
 <translation id="8465444703385715657">Voor het uitvoeren van <ph name="PLUGIN_NAME" /> is je toestemming nodig</translation>
 <translation id="8466234950814670489">Tar-archief</translation>
+<translation id="8466417995783206254">De video op dit tabblad wordt afgespeeld in de scherm-in-scherm-modus.</translation>
 <translation id="8468750959626135884">Ontgrendel je <ph name="DEVICE_TYPE" /> met je Android-telefoon.</translation>
 <translation id="8470028084415844044">Schakel synchronisatie in om al je wachtwoorden op al je apparaten beschikbaar te maken.</translation>
 <translation id="8470513973197838199">Opgeslagen wachtwoorden voor <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Deze plugin uitvoeren</translation>
 <translation id="8497219075884839166">Windows-hulpprogramma's</translation>
 <translation id="8498214519255567734">Hiermee kun je je scherm beter zien en lezen bij weinig licht</translation>
+<translation id="8498395510292172881">Verder lezen in Chrome</translation>
 <translation id="8503813439785031346">Gebruikersnaam</translation>
 <translation id="850875081535031620">Er is geen schadelijke software gevonden</translation>
 <translation id="8509646642152301857">Downloaden van woordenboek voor spellingcontrole is mislukt.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Opnieuw proberen</translation>
 <translation id="8725178340343806893">Favorieten/bladwijzers</translation>
 <translation id="8726206820263995930">Fout bij het ophalen van beleidsinstellingen van de server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Dit bericht niet meer weergeven</translation>
 <translation id="8727344521467137076">Er staat schadelijke software op je computer. Chrome verwijdert deze software en herstelt je instellingen zodat je browser weer normaal werkt.</translation>
 <translation id="8730621377337864115">Gereed</translation>
 <translation id="8732030010853991079">Gebruik deze extensie door op dit pictogram te klikken.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Link openen op nieuw &amp;tabblad</translation>
 <translation id="9030515284705930323">Je organisatie heeft de Google Play Store niet ingeschakeld voor jouw account. Neem contact op met je beheerder voor meer informatie.</translation>
 <translation id="9033857511263905942">&amp;Plakken</translation>
+<translation id="9034924485347205037">Linux-bestanden</translation>
 <translation id="9035012421917565900">De items kunnen niet worden teruggezet naar '<ph name="DESTINATION_NAME" />', dus je kunt deze actie niet ongedaan maken.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Origineel weergeven</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Scannen naar Bluetooth-apparaten...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" />: Bluetooth-apparaat verbonden</translation>
 <translation id="9177499212658576372">Je bent momenteel verbonden met het netwerk <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Linux (bèta) op je <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Dit proces kan enkele minuten duren. De Linux-container wordt gestart.</translation>
 <translation id="9180380851667544951">Site kan je scherm delen</translation>
 <translation id="9188441292293901223">Werk je telefoon bij naar een nieuwere versie van Android om dit <ph name="DEVICE_TYPE" /> te ontgrendelen.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index ad94b06..03730248 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -562,7 +562,6 @@
 <translation id="1829192082282182671">Zoom &amp;ut</translation>
 <translation id="1830550083491357902">Ikke pålogget</translation>
 <translation id="1832511806131704864">Telefonendring oppdatert</translation>
-<translation id="1832685970989658809">Administratoren din har slått av lagrede betalingsmåter</translation>
 <translation id="1834503245783133039">Nedlasting mislykket: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Fjern søket</translation>
 <translation id="1838709767668011582">Google-nettsted</translation>
@@ -939,7 +938,6 @@
 <translation id="2435457462613246316">Vis passord</translation>
 <translation id="2436186046335138073">Vil du la <ph name="HANDLER_HOSTNAME" /> åpne alle <ph name="PROTOCOL" />-linker?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Målingen av databruk er avsluttet</translation>
 <translation id="2440604414813129000">Vis &amp;kilde</translation>
 <translation id="2445081178310039857">Det kreves en rotkatalog for utvidelsen</translation>
 <translation id="2445484935443597917">Opprett en ny profil</translation>
@@ -971,7 +969,7 @@
 <translation id="248861575772995840">Finner ikke telefonen. Sørg for at Bluetooth er aktivert på <ph name="DEVICE_TYPE" />-enheten. &lt;a&gt;Finn ut mer&lt;/a&gt;</translation>
 <translation id="2489918096470125693">Legg til &amp;mappe</translation>
 <translation id="249113932447298600">Beklager, men enheten <ph name="DEVICE_LABEL" /> støttes foreløpig ikke.</translation>
-<translation id="2492040222276243256">Trykk inn knappen på sikkerhetsnøkkelen din i minst fem sekunder</translation>
+<translation id="2492040222276243256">Trykk inn knappen på sikkerhetsnøkkelen i minst fem sekunder</translation>
 <translation id="2493021387995458222">Velg «ord om gangen»</translation>
 <translation id="249303669840926644">Kunne ikke fullføre registreringen</translation>
 <translation id="2495777824269688114">Oppdag flere funksjoner eller få svar. Velg «?» for å få hjelp.</translation>
@@ -993,14 +991,14 @@
 <translation id="2509495747794740764">Skaleringsverdien må være et tall mellom 10 og 200.</translation>
 <translation id="2509566264613697683">8x</translation>
 <translation id="2512222046227390255">Fyll ut skjemaer automatisk</translation>
-<translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger som er relatert til personvern, sikkerhet og datainnsamling.</translation>
+<translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger knyttet til personvern, sikkerhet og datainnsamling.</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2517472476991765520">Skann</translation>
 <translation id="2518024842978892609">Bruk klientsertifikatene dine</translation>
 <translation id="2520644704042891903">Venter på tilgjengelig socket ...</translation>
 <translation id="252219247728877310">Komponenten er ikke oppdatert</translation>
 <translation id="2522791476825452208">Veldig nær</translation>
-<translation id="2523184218357549926">Sender nettadresser til sidene du besøker i Google</translation>
+<translation id="2523184218357549926">Sender Google nettadressene til sider du besøker</translation>
 <translation id="2525250408503682495">Kryptonitt! Cryptohome for kiosk-appen kunne ikke kobles til.</translation>
 <translation id="2526277209479171883">Installer og fortsett</translation>
 <translation id="2526590354069164005">Skrivebordet</translation>
@@ -1027,7 +1025,7 @@
 <translation id="2562743677925229011">Ikke logget på <ph name="SHORT_PRODUCT_NAME" /></translation>
 <translation id="2563856802393254086">Gratulerer! <ph name="NAME" />-datatjenesten din er aktivert og klar til bruk.</translation>
 <translation id="2564520396658920462">Kjøring av JavaScript gjennom AppleScript er slått av. For å slå det på, gå til menylinjen og velg Vis &gt; Utvikler &gt; Tillat JavaScript fra Apple Events. For mer informasjon, se: https://support.google.com/chrome/?p=applescript</translation>
-<translation id="2564653188463346023">Forbedre stavekontroll</translation>
+<translation id="2564653188463346023">Bedre stavekontroll</translation>
 <translation id="2566124945717127842">Kjør Powerwash for å tilbakestille <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten så den blir som ny.</translation>
 <translation id="2568774940984945469">Beholder for inforad</translation>
 <translation id="2570454805927264159">Få mest mulig ut av assistenten din</translation>
@@ -1075,7 +1073,7 @@
 <translation id="2633199387167390344"><ph name="NAME" /> bruker <ph name="USAGE" /> MB lagringsplass.</translation>
 <translation id="2633212996805280240">Vil du fjerne «<ph name="EXTENSION_NAME" />»?</translation>
 <translation id="263325223718984101"><ph name="PRODUCT_NAME" /> kan ikke fullføre installeringen, men vil fortsette å kjøre fra diskavbildningen.</translation>
-<translation id="2633326789677284179">Finn frem til navnet som er trykt på baksiden av nøkkelen din</translation>
+<translation id="2633326789677284179">Finn navnet som er trykt på baksiden av nøkkelen din</translation>
 <translation id="2635276683026132559">Signering</translation>
 <translation id="2636625531157955190">Chrome kan ikke få tilgang til bildet.</translation>
 <translation id="2638087589890736295">Det kreves en passordfrase for å starte synkroniseringen</translation>
@@ -1386,7 +1384,7 @@
 <translation id="3090819949319990166">Kunne ikke kopiere den eksterne crx-filen til <ph name="TEMP_CRX_FILE" />.</translation>
 <translation id="3090871774332213558">«<ph name="DEVICE_NAME" />» er tilkoblet</translation>
 <translation id="3101709781009526431">Dato og klokkeslett</translation>
-<translation id="3104900172193317662">Tillatt bruk av din sikkerhetsnøkkel</translation>
+<translation id="3104900172193317662">Tillat bruk av sikkerhetsnøkkelen din</translation>
 <translation id="310671807099593501">Nettstedet bruker Bluetooth</translation>
 <translation id="3115128645424181617">Finner ikke telefonen. Sørg for at den er i nærheten, og at Bluetooth er slått på.</translation>
 <translation id="3115147772012638511">Venter på buffer...</translation>
@@ -1867,13 +1865,12 @@
 <translation id="3839516600093027468">Blokkér alltid <ph name="HOST" /> fra å se utklippstavlen</translation>
 <translation id="3840053866656739575">Mistet tilkoblingen til Chromeboxen din. Gå nærmere eller sjekk enheten din mens vi prøver å koble til på nytt.</translation>
 <translation id="3842552989725514455">Med seriffer</translation>
-<translation id="3846116211488856547">Skaff deg verktøy for å utvikle nettsteder, Android-apper med mer. Linux lastes det ned <ph name="DOWNLOAD_SIZE" /> med data.</translation>
+<translation id="3846116211488856547">Skaff deg verktøy for å utvikle nettsteder, Android-apper med mer. Linux laster ned <ph name="DOWNLOAD_SIZE" /> med data.</translation>
 <translation id="385051799172605136">Tilbake</translation>
 <translation id="3851428669031642514">Last inn utrygge skripter</translation>
 <translation id="3855441664322950881">Pakk utvidelsen</translation>
 <translation id="3855676282923585394">Importér bokmerker og innstillinger</translation>
 <translation id="3856800405688283469">Velg tidssone</translation>
-<translation id="3856921555429624101">Målingen av databruk er avsluttet</translation>
 <translation id="3857228364945137633">Prøv Smart Lock for å låse opp <ph name="DEVICE_TYPE" />-enheten uten passord når du har telefonen i nærheten.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Synkronisering er satt på pause</translation>
@@ -2242,7 +2239,6 @@
 <translation id="4508051413094283164">Åpne alt i et inkognitovindu</translation>
 <translation id="4508265954913339219">Aktiveringen mislyktes</translation>
 <translation id="4508765956121923607">Vis &amp;kilde</translation>
-<translation id="4509823033118379431">Bildene er ikke tilgjengelige nå. Koble til på nytt for å se samlingene.</translation>
 <translation id="451407183922382411">Levert av <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Konfigurer en ny administrert bruker</translation>
 <translation id="4514610446763173167">Spill av videoen eller sett den på pause</translation>
@@ -2319,6 +2315,7 @@
 <translation id="4627442949885028695">Fortsett på en annen enhet</translation>
 <translation id="4628314759732363424">Endre</translation>
 <translation id="4628757576491864469">Enheter</translation>
+<translation id="4628948037717959914">Bilde</translation>
 <translation id="4630590996962964935">Ugyldig tegn: $1</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4632483769545853758">Slå på lyden for fanen</translation>
@@ -2479,7 +2476,7 @@
 <translation id="4880827082731008257">Søk i loggen</translation>
 <translation id="4881695831933465202">Åpne</translation>
 <translation id="4882473678324857464">Fokus på bokmerker</translation>
-<translation id="4882831918239250449">Kontrollér hvordan Søk, annonser og mer blir personlig tilpasset din logg</translation>
+<translation id="4882831918239250449">Kontrollér hvordan nettleserloggen din brukes til personlig tilpasning av søk, annonser med mer</translation>
 <translation id="4883178195103750615">Eksportér bokmerker til HTML-fil</translation>
 <translation id="4883436287898674711">Alle <ph name="WEBSITE_1" />-nettsteder</translation>
 <translation id="48838266408104654">&amp;Oppgavebehandling</translation>
@@ -2504,7 +2501,6 @@
 <translation id="4905417359854579806">Klar til å sikkerhetskopiere <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Denne filen lastes sjelden ned, og den kan være farlig.</translation>
 <translation id="4907306957610201395">Tillatelseskategori</translation>
-<translation id="4907824805858067479">Administratoren din har slått av lagrede kort</translation>
 <translation id="4908811072292128752">Åpne en ny fane for å surfe på to nettsteder samtidig</translation>
 <translation id="4909038193460299775">Siden denne kontoen administreres av <ph name="DOMAIN" />, slettes bokmerkene, loggen, passordene og andre innstillinger du har, fra denne enheten. Data du har lagret i Google-kontoen din, blir imidlertid værende og kan administreres ved hjelp av <ph name="BEGIN_LINK" />Google Oversikt<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Registreringen din er fullført</translation>
@@ -3223,7 +3219,6 @@
 <translation id="5990386583461751448">Oversatt</translation>
 <translation id="5991049340509704927">Forstørr</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{For å sikre at du fortsatt kan surfe på nettet, be administratoren din om å fjerne dette programmet.}other{For å sikre at du fortsatt kan surfe på nettet, be administratoren din om å fjerne disse programmene.}}</translation>
-<translation id="5993332328670040093">Databruken din blir ikke lenger målt.</translation>
 <translation id="6002458620803359783">Foretrukne stemmer</translation>
 <translation id="6005695835120147974">Medieruter</translation>
 <translation id="6006484371116297560">Klassisk</translation>
@@ -3415,7 +3410,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> lastes sjelden ned og kan være farlig.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny skriver på nettverket}other{Nye skrivere på nettverket}}</translation>
-<translation id="6286684120317096255">Databruken blir målt</translation>
 <translation id="6286708577777130801">Lagrede passorddetaljer</translation>
 <translation id="6287852322318138013">Velg en app for å åpne denne filen</translation>
 <translation id="6289452883081499048">Google-tjenester med et personlig preg, som for eksempel Play</translation>
@@ -3933,7 +3927,7 @@
 <translation id="7099337801055912064">Kan ikke laste inn stor PPD. Maksimal størrelse er 250 kB.</translation>
 <translation id="7100897339030255923"><ph name="COUNT" /> elementer er valgt</translation>
 <translation id="7102687220333134671">Automatiske oppdateringer er slått på</translation>
-<translation id="7102832101143475489">Forespørselen fikk et tidsavbrudd</translation>
+<translation id="7102832101143475489">Forespørselen ble tidsavbrutt</translation>
 <translation id="7106346894903675391">Kjøp mer lagringsplass</translation>
 <translation id="7108338896283013870">Skjul</translation>
 <translation id="7108634116785509031"><ph name="HOST" /> ber om å bruke kameraet ditt</translation>
@@ -4125,7 +4119,6 @@
 <translation id="7400839060291901923">Konfigurerer tilkoblingen på <ph name="PHONE_NAME" />-enheten din</translation>
 <translation id="740624631517654988">Blokkerte forgrunnsvindu</translation>
 <translation id="7407430846095439694">Importér og bind</translation>
-<translation id="7409233648990234464">Start på nytt og bruk Powerwash</translation>
 <translation id="7409836189476010449">Kjør Flash</translation>
 <translation id="7410344089573941623">Spør om <ph name="HOST" /> ønsker å bruke kameraet og mikrofonen din</translation>
 <translation id="741204030948306876">Ja, jeg er med</translation>
@@ -4641,7 +4634,7 @@
 <translation id="8180786512391440389">«<ph name="EXTENSION" />» kan lese og slette bilder, videofiler og lydfiler i posisjonene det er merket av for.</translation>
 <translation id="8181215761849004992">Kan ikke knytte til domenet. Sjekk kontoen din for å se om du har tilstrekkelige rettigheter til å legge til enheter.</translation>
 <translation id="8182664696082410784"><ph name="REASON" />
-Jeg tror ikke det er nødvendig å blokkere dette nettstedet!</translation>
+Jeg tror ikke det er nødvendig å blokkere dette nettstedet.</translation>
 <translation id="8184288427634747179">Bytt til <ph name="AVATAR_NAME" /></translation>
 <translation id="8184318863960255706">Mer informasjon</translation>
 <translation id="8185331656081929126">Vis varsler når nye skrivere oppdages på nettverket</translation>
@@ -4977,7 +4970,6 @@
 <translation id="8725066075913043281">Prøv igjen</translation>
 <translation id="8725178340343806893">Favoritter/bokmerker</translation>
 <translation id="8726206820263995930">Feil under henting av innstillingsangivelser fra tjeneren: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ikke vis dette igjen</translation>
 <translation id="8727344521467137076">Det finnes skadelig programvare på datamaskinen du bruker. Chrome fjerner den og gjenoppretter innstillingene dine, sånn at nettleseren fungerer normalt igjen.</translation>
 <translation id="8730621377337864115">Ferdig</translation>
 <translation id="8732030010853991079">Bruk denne utvidelsen ved å klikke på dette ikonet.</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index ab884d8..9d3c6d9 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Pytaj przed uzyskaniem dostępu</translation>
 <translation id="1434696352799406980">Spowoduje to zresetowanie Twojej strony początkowej, strony nowej karty, wyszukiwarki i przypiętych kart. Oprócz tego przeglądarka wyłączy wszystkie rozszerzenia i usunie dane tymczasowe takie jak pliki cookie. Twoje zakładki, historia i zapisane hasła nie zostaną usunięte.</translation>
 <translation id="1434886155212424586">Strona główna jest stroną nowej karty</translation>
+<translation id="1436671784520050284">Kontynuuj konfigurację</translation>
 <translation id="1436784010935106834">Usunięto</translation>
 <translation id="1438632560381091872">Wyłącz wyciszenie kart</translation>
 <translation id="1442392616396121389">Prefiks routingu</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Kawałek pizzy</translation>
 <translation id="1467432559032391204">W lewo</translation>
 <translation id="1468571364034902819">Nie można użyć tego profilu</translation>
+<translation id="1470533772306424441">Zainstalujemy te aplikacje. Więcej aplikacji dla swojego urządzenia znajdziesz w Sklepie Play.</translation>
 <translation id="1470811252759861213">Aby korzystać z rozszerzeń na wszystkich swoich komputerach, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Plik „<ph name="FILENAME" />” nie został przesłany. Za mało wolnego miejsca na Dysku Google.</translation>
 <translation id="1475502736924165259">Masz zapisane certyfikaty, które nie pasują do żadnej z pozostałych kategorii</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Po&amp;mniejsz</translation>
 <translation id="1830550083491357902">Niezalogowany</translation>
 <translation id="1832511806131704864">Zmiana telefonu została zapisana</translation>
-<translation id="1832685970989658809">Zapisane formy płatności zostały wyłączone przez administratora</translation>
 <translation id="1834503245783133039">Nie udało się pobrać: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Wyczyść wyszukiwanie</translation>
 <translation id="1838709767668011582">Witryna Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Z:</translation>
 <translation id="2193365732679659387">Ustawienia zaufania</translation>
 <translation id="2195729137168608510">Ochrona poczty e-mail</translation>
+<translation id="2199298570273670671">Błąd</translation>
 <translation id="2200356397587687044">Chrome wymaga pozwolenia na kontynuację</translation>
 <translation id="220138918934036434">Ukryj przycisk</translation>
 <translation id="2202898655984161076">Podczas tworzenia listy drukarek wystąpił problem. Niektóre drukarki mogły nie zostać pomyślnie zarejestrowane w usłudze <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Pokaż hasło</translation>
 <translation id="2436186046335138073">Zezwolić usłudze <ph name="HANDLER_HOSTNAME" /> na otwieranie wszystkich linków <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Zakończono pomiar użycia danych</translation>
 <translation id="2440604414813129000">Wyświetl ź&amp;ródło</translation>
 <translation id="2445081178310039857">Wymagany jest główny katalog rozszerzenia.</translation>
 <translation id="2445484935443597917">Utwórz nowy profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> chce zweryfikować Twoją tożsamość</translation>
 <translation id="2448312741937722512">Typ</translation>
 <translation id="2450223707519584812">Nie będzie można dodawać użytkowników, ponieważ brakuje kluczy Google API. Więcej szczegółów znajdziesz na <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Wyłączyć synchronizację i wylogować?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Plik już istnieje.</translation>
 <translation id="2453860139492968684">Zakończ</translation>
 <translation id="2454247629720664989">Słowo kluczowe</translation>
+<translation id="245661998428026871">Odtwarzanie filmu w trybie obrazu w obrazie zostanie zatrzymane.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> chce skopiować pliki z dysku <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Identyfikator klucza urzędu certyfikacji</translation>
 <translation id="2462752602710430187">Dodano: <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Wyłącz wyciszenie kart</translation>
 <translation id="3053013834507634016">Użycie klucza certyfikatu</translation>
 <translation id="3057861065630527966">Utwórz kopię zapasową zdjęć i filmów</translation>
+<translation id="3059313675706898490">Wiadomości na Androida</translation>
 <translation id="3060379269883947824">Włącz funkcję Przeczytaj na głos</translation>
 <translation id="3061707000357573562">Zastosowanie poprawki do usługi</translation>
 <translation id="3064410671692449875">Niewystarczające dane</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Nie pamiętasz hasła?</translation>
 <translation id="3132996321662585180">Odświeżaj codziennie</translation>
 <translation id="3135204511829026971">Obróć ekran</translation>
+<translation id="313638818480447860">Znaleźliśmy następującą liczbę aplikacji połączonych z Twoim kontem, które są zoptymalizowane dla tego urządzenia <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="313963229645891001">Pobieram, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Domyślny żółty awatar</translation>
 <translation id="3140353188828248647">Zaznacz pasek adresu</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Sprawdzanie pisowni</translation>
 <translation id="3183139917765991655">Importer profilów</translation>
 <translation id="3184560914950696195">Nie można zapisać w katalogu $1. Edytowane obrazy będą zapisywane w folderze Pobrane.</translation>
+<translation id="3188257591659621405">Moje pliki</translation>
 <translation id="3188465121994729530">Średnia krocząca</translation>
 <translation id="3190558889382726167">Hasło zostało zapisane</translation>
 <translation id="3192947282887913208">Pliki dźwiękowe</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Pakuję <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informacje o aplikacji</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – odtwarzanie filmu w trybie obrazu w obrazie</translation>
 <translation id="3335337277364016868">Rok nagrania</translation>
 <translation id="3335947283844343239">Otwórz ponownie zamkniętą kartę</translation>
 <translation id="3336664756920573711">Urządzenie <ph name="DEVICE_TYPE" /> możesz odblokowywać swoim telefonem z Androidem</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Drukowanie nie udało się. Sprawdź swoją drukarkę i spróbuj ponownie.</translation>
 <translation id="3364721542077212959">Narzędzia rysika</translation>
 <translation id="3365598184818502391">Użyj klawisza Ctrl lub Alt</translation>
+<translation id="3367047597842238025"><ph name="DEVICE_TYPE" /> oferuje wiele możliwości. Skonfiguruj go tak jak chcesz i zobacz, co potrafi.</translation>
 <translation id="3368922792935385530">Połączone</translation>
 <translation id="3369624026883419694">Łączę z hostem...</translation>
 <translation id="337286756654493126">Odczytywanie folderów otwieranych w aplikacji</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Kliknij prawym przyciskiem myszy ikonę <ph name="SMALL_PRODUCT_LOGO" /> na pasku zadań</translation>
 <translation id="3391716558283801616">Karta 7</translation>
 <translation id="3396331542604645348">Wybrana drukarka jest niedostępna lub nieprawidłowo zainstalowana. Sprawdź ją lub wybierz inną.</translation>
+<translation id="3396800784455899911">Klikając przycisk „Zaakceptuj i kontynuuj”, wyrażasz zgodę na opisane powyżej przetwarzanie danych w tych usługach Google.</translation>
 <translation id="3399432415385675819">Powiadomienia zostaną wyłączone</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nie zapisano żadnych haseł do tej strony</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Nie można otworzyć urządzenia, ponieważ jego system plików nie jest obsługiwany.</translation>
 <translation id="3727148787322499904">Zmiana tego ustawienia wpłynie na wszystkie sieci współdzielone</translation>
 <translation id="3727187387656390258">Sprawdź wyskakujące okienko</translation>
+<translation id="3729506734996624908">Dozwolone strony</translation>
 <translation id="3732078975418297900">Błąd w wierszu <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Serwer SSL z dostępem</translation>
+<translation id="3735740477244556633">Sortuj według</translation>
 <translation id="3737274407993947948">Błąd podczas instalowania Linuksa…</translation>
 <translation id="3737536731758327622">Tutaj wyświetlają się pobrane pliki</translation>
+<translation id="3738671331307774213">Weryfikacja tożsamości pomaga chronić Twoje prywatne dane</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Otworzyć <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> pojawi się teraz w konsoli administracyjnej</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Pobierz narzędzia do tworzenia stron internetowych, aplikacji na Androida itp. Instalacja Linuksa spowoduje pobranie <ph name="DOWNLOAD_SIZE" /> danych.</translation>
 <translation id="385051799172605136">Wstecz</translation>
 <translation id="3851428669031642514">Wczytaj niezabezpieczone skrypty</translation>
+<translation id="3854599674806204102">Wybierz jedną z opcji</translation>
 <translation id="3855441664322950881">Umieść rozszerzenie w pakiecie</translation>
 <translation id="3855676282923585394">Importuj zakładki i ustawienia...</translation>
 <translation id="3856800405688283469">Wybierz strefę czasową</translation>
-<translation id="3856921555429624101">Zakończono pomiar użycia danych</translation>
 <translation id="3857228364945137633">Użyj funkcji Smart Lock, by odblokować urządzenie <ph name="DEVICE_TYPE" /> bez podawania hasła, gdy masz telefon w pobliżu.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: synchronizacja wstrzymana</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Otwórz wszystkie w oknie incognito</translation>
 <translation id="4508265954913339219">Aktywacja nie powiodła się</translation>
 <translation id="4508765956121923607">Wyświetl ź&amp;ródło</translation>
-<translation id="4509823033118379431">Obrazy są obecnie niedostępne. Ponownie nawiąż połączenie, by wyświetlić kolekcje.</translation>
 <translation id="451407183922382411">Technologia <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Skonfiguruj nowego nadzorowanego użytkownika</translation>
 <translation id="4514610446763173167">Przełącz, by odtworzyć lub wstrzymać wideo</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Kontynuuj z innego urządzenia</translation>
 <translation id="4628314759732363424">Zmień...</translation>
 <translation id="4628757576491864469">Urządzenia</translation>
+<translation id="4628948037717959914">Zdjęcie</translation>
 <translation id="4630590996962964935">Nieprawidłowy znak: $1</translation>
 <translation id="4631887759990505102">Wykonawca</translation>
 <translation id="4632483769545853758">Wyłącz wyciszenie karty</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Wszystko gotowe do utworzenia kopii zapasowych: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Ten plik nie jest często pobierany i może być niebezpieczny.</translation>
 <translation id="4907306957610201395">Kategoria uprawnień</translation>
-<translation id="4907824805858067479">Zapisane karty są wyłączone przez administratora</translation>
 <translation id="4908811072292128752">Otwórz nową kartę, by przeglądać dwie strony naraz</translation>
 <translation id="4909038193460299775">Ponieważ to konto jest zarządzane przez <ph name="DOMAIN" />, Twoje zakładki, historia, hasła i inne ustawienia zostaną usunięte z tego urządzenia. Twoje dane pozostaną zapisane na koncie Google. Możesz nimi zarządzać w <ph name="BEGIN_LINK" />Panelu Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Rejestracja ukończona</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Roczna</translation>
 <translation id="4957949153200969297">Włącz tylko funkcje związane z Synchronizacją <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Trzymaj wszystkie karty w jednym miejscu</translation>
 <translation id="496226124210045887">Wybrany folder zawiera poufne pliki. Czy na pewno chcesz, by aplikacja „$1” miała do niego stały dostęp z uprawnieniami do odczytu?</translation>
 <translation id="4964455510556214366">Układ</translation>
 <translation id="4964673849688379040">Sprawdzam...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Dodaj rozszerzenie</translation>
 <translation id="5029568752722684782">Usuń kopię</translation>
 <translation id="5030338702439866405">Wystawiony przez</translation>
+<translation id="503155457707535043">Pobieram aplikacje</translation>
 <translation id="503498442187459473"><ph name="HOST" /> chce korzystać z kamery i mikrofonu</translation>
 <translation id="5036662165765606524">Nie zezwalaj żadnym witrynom na automatyczne pobieranie wielu plików</translation>
 <translation id="5037676449506322593">Wybierz wszystko</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Wycisz</translation>
 <translation id="5785583009707899920">Narzędzia do plików w Chrome</translation>
 <translation id="5787146423283493983">Uzgadnianie klucza</translation>
+<translation id="5788127256798019331">Pliki Play</translation>
 <translation id="5788367137662787332">Niestety, nie można podłączyć co najmniej jednej partycji na urządzeniu <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Zawsze otwieraj w przeglądarce systemowej</translation>
 <translation id="5794786537412027208">Zamknij wszystkie aplikacje Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Przetłumaczona</translation>
 <translation id="5991049340509704927">Powiększ</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tej aplikacji.}few{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}many{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}other{Aby móc dalej przeglądać internet, poproś administratora o usunięcie tych aplikacji.}}</translation>
-<translation id="5993332328670040093">Pomiar użycia danych został zakończony.</translation>
 <translation id="6002458620803359783">Preferowane głosy</translation>
 <translation id="6005695835120147974">Router multimediów</translation>
 <translation id="6006484371116297560">Klasyczny</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Wybór certyfikatu</translation>
 <translation id="6181431612547969857">Pobieranie zostało zablokowane</translation>
 <translation id="6185132558746749656">Lokalizacja urządzenia</translation>
+<translation id="6185617499004995178">Walidator CUPS IPP</translation>
 <translation id="6185696379715117369">Strona do góry</translation>
 <translation id="6189273858858366896">Skonfiguruj sieciowe udziały plików lub nimi zarządzaj.</translation>
 <translation id="6189412234224385711">Otwórz w rozszerzeniu <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Dodaj parametr zapytania do URL-a, by strona odświeżała się automatycznie: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Bateria</translation>
 <translation id="6232116551750539448">Połączenie z <ph name="NAME" /> zostało utracone</translation>
+<translation id="6235700927623181151">Ta karta udostępnia zawartość Twojego pulpitu.</translation>
 <translation id="6237816943013845465">Pozwala zmienić rozdzielczość ekranu</translation>
 <translation id="6238923052227198598">Wyświetlaj najnowszą notatkę na ekranie blokady</translation>
 <translation id="6239558157302047471">Załaduj ponownie &amp;ramkę</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Plik <ph name="FILE_NAME" /> jest rzadko pobierany i może być niebezpieczny.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nowa drukarka w Twojej sieci}few{Nowe drukarki w Twojej sieci}many{Nowe drukarki w Twojej sieci}other{Nowe drukarki w Twojej sieci}}</translation>
-<translation id="6286684120317096255">Rozpoczęto pomiar użycia danych</translation>
 <translation id="6286708577777130801">Szczegóły zapisanych haseł</translation>
 <translation id="6287852322318138013">Wybierz aplikację, by otworzyć ten plik</translation>
 <translation id="6289452883081499048">Spersonalizowane usługi Google, takie jak Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Zarządzaj urządzeniami Cloud Print</translation>
 <translation id="6451689256222386810">Jeśli nie pamiętasz hasła lub chcesz zmienić to ustawienie, <ph name="BEGIN_LINK" />zresetuj synchronizację<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Odrzuć</translation>
+<translation id="6455264371803474013">Na określonych stronach</translation>
 <translation id="6455894534188563617">&amp;Nowy folder</translation>
 <translation id="6456394469623773452">Dobry</translation>
 <translation id="6456631036739229488">Telefon z funkcją Smart Lock został zmieniony. Wpisz hasło, by zaktualizować Smart Lock. Następnym razem Twój telefon odblokuje urządzenie <ph name="DEVICE_TYPE" />. Funkcję Smart Lock możesz wyłączyć w Ustawieniach.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Załaduj ponownie tę stronę</translation>
 <translation id="6577284282025554716">Anulowano pobieranie: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Szyfruj synchronizowane hasła przy użyciu nazwy użytkownika i hasła Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – udostępnia zawartość pulpitu</translation>
 <translation id="6580151766480067746">Wersja ARC</translation>
 <translation id="6581162200855843583">Link Dysku Google</translation>
 <translation id="6582421931165117398">Aby chronić swoje dane osobowe, zmień teraz hasło. Najpierw zobaczysz prośbę, by się zalogować.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ta aplikacja może uniemożliwiać prawidłowe działanie Chrome.}few{Te aplikacje mogą uniemożliwiać prawidłowe działanie Chrome.}many{Te aplikacje mogą uniemożliwiać prawidłowe działanie Chrome.}other{Te aplikacje mogą uniemożliwiać prawidłowe działanie Chrome.}}</translation>
 <translation id="7303900363563182677">Ta witryna nie ma dostępu do tekstu ani obrazów skopiowanych do schowka</translation>
 <translation id="730515362922783851">Wymiana danych z dowolnym urządzeniem w sieci lokalnej lub internecie</translation>
+<translation id="7307129035224081534">Wstrzymano</translation>
 <translation id="7308002049209013926">Użyj menu z aplikacjami, by szybko otwierać nowe aplikacje i wykonywać inne czynności. Aby otworzyć menu za pomocą klawiatury, naciśnij Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Pokaż elementy sterują&amp;ce</translation>
 <translation id="7310598146671372464">Logowanie nie udało się. Serwer nie obsługuje wybranych typów szyfrowania Kerberos. Skontaktuj się z administratorem.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Skonfiguruj połączenie na telefonie <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Zablokowano wyskakujące okienko</translation>
 <translation id="7407430846095439694">Zaimportuj i powiąż</translation>
-<translation id="7409233648990234464">Uruchom ponownie i wykonaj Powerwash</translation>
 <translation id="7409836189476010449">uruchomić Flasha</translation>
 <translation id="7410344089573941623">Pytaj, gdy witryna <ph name="HOST" /> chce mieć dostęp do kamery i mikrofonu</translation>
 <translation id="741204030948306876">Tak</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Adres URL odwołania certyfikatu firmy Netscape</translation>
 <translation id="7469894403370665791">Automatycznie łącz się z tą siecią</translation>
 <translation id="747114903913869239">Błąd: nie można zdekodować rozszerzenia</translation>
+<translation id="7473753388963818366">Przygotujmy to urządzenie <ph name="DEVICE_TYPE" /> dla Ciebie</translation>
 <translation id="7473891865547856676">Nie, dziękuję</translation>
 <translation id="747459581954555080">Przywróć wszystkie</translation>
 <translation id="7475671414023905704">Adres URL utraconego hasła firmy Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Dodaj konto</translation>
 <translation id="7671130400130574146">Użyj systemowego paska tytułu i ramek</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> na stronie <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Wysyła Twój głos do Google, by umożliwić dyktowanie w dowolnym polu tekstowym.</translation>
 <translation id="7681095912841365527">Strona może używać Bluetootha</translation>
 <translation id="7683373461016844951">Aby kontynuować, kliknij OK, a potem kliknij Dodaj osobę, by utworzyć nowy profil dla swojego adresu e-mail w domenie <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Zainstalowane przez administratora</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standardowa</translation>
 <translation id="7748528009589593815">Poprzednia karta</translation>
 <translation id="7748626145866214022">Na pasku działań jest dostępnych więcej opcji. Aby go zaznaczyć, naciśnij Alt + A.</translation>
+<translation id="7750228210027921155">Obraz w obrazie</translation>
 <translation id="7751260505918304024">Pokaż wszystkie</translation>
 <translation id="7754704193130578113">Pytaj przed pobraniem, gdzie zapisać każdy plik</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Czy to oczekiwana strona nowej karty?</translation>
 <translation id="786073089922909430">Usługa: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Pobrane pliki</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 plik cookie}few{# pliki cookie}many{# plików cookie}other{# pliku cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – sparowano</translation>
 <translation id="7870730066603611552">Sprawdź opcje synchronizowania po konfiguracji</translation>
 <translation id="7870790288828963061">Nie odnaleziono nowszej wersji aplikacji kiosku. Aktualizacja nie jest wymagana. Odłącz pamięć USB.</translation>
@@ -4762,6 +4782,7 @@
 <translation id="8373553483208508744">Wycisz karty</translation>
 <translation id="8382913212082956454">Kopiuj adres &amp;e-mail</translation>
 <translation id="8386903983509584791">Skanowanie ukończone</translation>
+<translation id="8389492867173948260">Zezwól temu rozszerzeniu na odczytywanie i zmienianie wszystkich Twoich danych na stronach, które otwierasz:</translation>
 <translation id="8390449457866780408">Serwer jest niedostępny.</translation>
 <translation id="8391712576156218334">Obraz jest niedostępny. Spróbuj ponownie później.</translation>
 <translation id="8392234662362215700">Naciśnij Control+Shift+spacja, by przełączyć układ klawiatury.</translation>
@@ -4793,6 +4814,7 @@
 <translation id="84297032718407999">Wylogujemy Cię za <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Zmień PIN do karty SIM</translation>
 <translation id="8434480141477525001">Port debugowania NaCl</translation>
+<translation id="8435395510592618362">Weryfikacja tożsamości w aplikacji <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Zapisz kartę kredytową</translation>
 <translation id="8438328416656800239">Przejdź na inteligentną przeglądarkę</translation>
 <translation id="8438566539970814960">Ulepsz wyszukiwanie i przeglądanie</translation>
@@ -4819,6 +4841,7 @@
 <translation id="8465252176946159372">Nieważne</translation>
 <translation id="8465444703385715657">Uruchomienie wtyczki <ph name="PLUGIN_NAME" /> wymaga Twojej zgody</translation>
 <translation id="8466234950814670489">Archiwum Tar</translation>
+<translation id="8466417995783206254">Na tej karcie jest odtwarzany film w trybie obrazu w obrazie.</translation>
 <translation id="8468750959626135884">Urządzenie <ph name="DEVICE_TYPE" /> możesz odblokowywać przy użyciu swojego telefonu z Androidem.</translation>
 <translation id="8470028084415844044">Aby korzystać ze wszystkich swoich haseł na innych urządzeniach, włącz synchronizację.</translation>
 <translation id="8470513973197838199">Zapisane hasła do <ph name="ORIGIN" /></translation>
@@ -4839,6 +4862,7 @@
 <translation id="8496717697661868878">Uruchom wtyczkę</translation>
 <translation id="8497219075884839166">Narzędzia Windows</translation>
 <translation id="8498214519255567734">Dzięki tej funkcji oczy mniej się męczą podczas patrzenia na ekran lub czytania przy słabym oświetleniu</translation>
+<translation id="8498395510292172881">Kontynuuj czytanie w Chrome</translation>
 <translation id="8503813439785031346">Nazwa użytkownika</translation>
 <translation id="850875081535031620">Nie znaleziono szkodliwego oprogramowania</translation>
 <translation id="8509646642152301857">Nie udało się pobrać słownika funkcji sprawdzania pisowni.</translation>
@@ -4989,7 +5013,6 @@
 <translation id="8725066075913043281">Spróbuj ponownie</translation>
 <translation id="8725178340343806893">Ulubione/Zakładki</translation>
 <translation id="8726206820263995930">Podczas pobierania ustawień zasad z serwera wystąpił błąd: <ph name="CLIENT_ERROR" /></translation>
-<translation id="8727142376512517020">Nie pokazuj ponownie</translation>
 <translation id="8727344521467137076">Na Twoim komputerze jest szkodliwe oprogramowanie. Przeglądarka Chrome usuwa je i przywróci ustawienia, by znów mogła działać normalnie.</translation>
 <translation id="8730621377337864115">Gotowe</translation>
 <translation id="8732030010853991079">Aby użyć tego rozszerzenia, kliknij jego ikonę.</translation>
@@ -5180,6 +5203,7 @@
 <translation id="9027459031423301635">Otwórz link w nowej &amp;karcie</translation>
 <translation id="9030515284705930323">Twoja organizacja nie włączyła Sklepu Google Play dla Twojego konta. Aby uzyskać więcej informacji, skontaktuj się z administratorem.</translation>
 <translation id="9033857511263905942">&amp;Wklej</translation>
+<translation id="9034924485347205037">Pliki Linuksa</translation>
 <translation id="9035012421917565900">Nie można przenieść elementów z powrotem do: „<ph name="DESTINATION_NAME" />”, więc tej czynności nie da się cofnąć.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Pokaż tekst oryginalny</translation>
@@ -5280,6 +5304,7 @@
 <translation id="9173995187295789444">Skanuję w poszukiwaniu urządzeń Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – połączono z urządzeniem Bluetooth</translation>
 <translation id="9177499212658576372">Obecnie masz połączenie z siecią: <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Skonfiguruj Linuksa (Beta) na urządzeniu <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Może to potrwać kilka minut. Uruchamiam kontener Linuksa.</translation>
 <translation id="9180380851667544951">Strona może udostępniać ekran</translation>
 <translation id="9188441292293901223">Aby odblokować to urządzenie <ph name="DEVICE_TYPE" />, zaktualizuj Androida na telefonie do nowszej wersji.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index e862b85..6a4b516e 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Perguntar antes de acessar</translation>
 <translation id="1434696352799406980">Esta função irá redefinir sua página de inicialização, a página "Nova guia", o mecanismo de pesquisa e as guias fixadas. Além disso, desativará todas as extensões e limpará dados temporários, como cookies. Seus favoritos, histórico e senhas salvas não serão limpos.</translation>
 <translation id="1434886155212424586">A página inicial é a página "Nova guia"</translation>
+<translation id="1436671784520050284">Continuar a configuração</translation>
 <translation id="1436784010935106834">Removido</translation>
 <translation id="1438632560381091872">Ativar som das guias</translation>
 <translation id="1442392616396121389">Prefixo de roteamento</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Fatia de pizza</translation>
 <translation id="1467432559032391204">Para a esquerda</translation>
 <translation id="1468571364034902819">Não é possível usar esse perfil</translation>
+<translation id="1470533772306424441">Instalaremos os apps para você. Você pode encontrar mais apps para seu dispositivo na Play Store.</translation>
 <translation id="1470811252759861213">Para ter suas extensões em todos os computadores, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Não foi feito o upload de "<ph name="FILENAME" />". Não há espaço livre suficiente no seu Google Drive.</translation>
 <translation id="1475502736924165259">Você tem certificados no arquivo que não correspondem a nenhuma das outras categorias</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Diminuir &amp;zoom</translation>
 <translation id="1830550083491357902">Desconectado</translation>
 <translation id="1832511806131704864">Atualização da alteração do smartphone</translation>
-<translation id="1832685970989658809">As formas de pagamento salvas foram desativadas pelo seu administrador</translation>
 <translation id="1834503245783133039">Falha no download: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Limpar pesquisa</translation>
 <translation id="1838709767668011582">Site Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Configurações de confiança</translation>
 <translation id="2195729137168608510">Proteção de e-mail</translation>
+<translation id="2199298570273670671">Erro</translation>
 <translation id="2200356397587687044">O Chrome precisa de permissão para continuar</translation>
 <translation id="220138918934036434">Ocultar botão</translation>
 <translation id="2202898655984161076">Ocorreu um problema na listagem de impressoras. Algumas impressoras podem não ter sido registradas no <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Mostrar senha</translation>
 <translation id="2436186046335138073">Permitir que <ph name="HANDLER_HOSTNAME" /> abra todos os links de <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínima</translation>
-<translation id="2437139306601019091">A medição de uso de dados terminou</translation>
 <translation id="2440604414813129000">Exibir &amp;código fonte</translation>
 <translation id="2445081178310039857">O diretório raiz da extensão é obrigatório.</translation>
 <translation id="2445484935443597917">Criar um novo perfil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> quer verificar sua identidade</translation>
 <translation id="2448312741937722512">Tipo</translation>
 <translation id="2450223707519584812">Não é possível adicionar usuários, porque as chaves da API do Google estão ausentes. Consulte <ph name="DETAILS_URL" /> para ter mais detalhes.</translation>
 <translation id="2450310832094867474">Desativar sincronização e sair?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">O arquivo já existe</translation>
 <translation id="2453860139492968684">Concluir</translation>
 <translation id="2454247629720664989">Palavra-chave</translation>
+<translation id="245661998428026871">A reprodução do vídeo no modo picture-in-picture será interrompida.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> deseja copiar arquivos de <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID da chave da autoridade de certificação</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> adicionada</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Ativar som das guias</translation>
 <translation id="3053013834507634016">Uso da chave de certificado</translation>
 <translation id="3057861065630527966">Fazer backup de suas fotos e seus vídeos</translation>
+<translation id="3059313675706898490">Android Mensagens</translation>
 <translation id="3060379269883947824">Ativar Selecionar para ouvir</translation>
 <translation id="3061707000357573562">Aplicar patch ao serviço</translation>
 <translation id="3064410671692449875">Dados insuficientes</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Esqueceu a senha?</translation>
 <translation id="3132996321662585180">Atualizar diariamente</translation>
 <translation id="3135204511829026971">Girar tela</translation>
+<translation id="313638818480447860"><ph name="NUMBER_OF_APPS" /> apps conectados à sua conta são otimizados para este dispositivo.</translation>
 <translation id="313963229645891001">Fazendo o download, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar amarelo padrão</translation>
 <translation id="3140353188828248647">Foco na barra de endereço</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Verificação ortográfica</translation>
 <translation id="3183139917765991655">Importador de perfil</translation>
 <translation id="3184560914950696195">Não é possível salvar em $1. As imagens editadas serão salvas na pasta Downloads.</translation>
+<translation id="3188257591659621405">Meus arquivos</translation>
 <translation id="3188465121994729530">Média móvel</translation>
 <translation id="3190558889382726167">Senha salva</translation>
 <translation id="3192947282887913208">Arquivos de áudio</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Compactando <ph name="FILE_NAME" /></translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informações sobre o aplicativo</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Vídeo reproduzido em picture-in-picture</translation>
 <translation id="3335337277364016868">Ano da gravação</translation>
 <translation id="3335947283844343239">Reabrir guia fechada</translation>
 <translation id="3336664756920573711">Desbloqueie seu <ph name="DEVICE_TYPE" /> com o smartphone Android</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Ocorreu uma falha na impressão. Verifique sua impressora e tente novamente.</translation>
 <translation id="3364721542077212959">Ferramentas da stylus</translation>
 <translation id="3365598184818502391">Use Ctrl ou Alt</translation>
+<translation id="3367047597842238025">Configure o <ph name="DEVICE_TYPE" /> como você quiser e descubra todos os recursos incríveis ao seu alcance.</translation>
 <translation id="3368922792935385530">Conectado</translation>
 <translation id="3369624026883419694">Resolvendo host...</translation>
 <translation id="337286756654493126">Permissão de leitura em pastas que você abre no aplicativo</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Clique com o botão direito do mouse no ícone <ph name="SMALL_PRODUCT_LOGO" /> na barra de tarefas</translation>
 <translation id="3391716558283801616">Aba 7</translation>
 <translation id="3396331542604645348">A impressora selecionada não está disponível ou não foi instalada corretamente. Verifique sua impressora ou selecione outra.</translation>
+<translation id="3396800784455899911">Ao clicar no botão "Aceitar e concluir", você aceita o processo descrito acima para esses serviços do Google.</translation>
 <translation id="3399432415385675819">As notificações serão desativadas</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nenhuma senha salva para este site</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Não foi possível abrir este dispositivo porque seu sistema de arquivos não é suportado.</translation>
 <translation id="3727148787322499904">A alteração dessa configuração afetará todas as redes compartilhadas</translation>
 <translation id="3727187387656390258">Inspecionar pop-up</translation>
+<translation id="3729506734996624908">Sites permitidos</translation>
 <translation id="3732078975418297900">Erro na linha <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Servidor SSL com Step-up</translation>
+<translation id="3735740477244556633">Classificar por</translation>
 <translation id="3737274407993947948">Erro ao instalar o Linux…</translation>
 <translation id="3737536731758327622">Seus downloads são exibidos aqui</translation>
+<translation id="3738671331307774213">A verificação da sua identidade ajuda a proteger seus dados particulares</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Abrir <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> agora é exibido no Admin Console</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Tenha ferramentas para desenvolver sites, apps Android e muito mais. A instalação do Linux causará o download de <ph name="DOWNLOAD_SIZE" /> de dados.</translation>
 <translation id="385051799172605136">Voltar</translation>
 <translation id="3851428669031642514">Carregar scripts não seguros</translation>
+<translation id="3854599674806204102">Escolha uma opção</translation>
 <translation id="3855441664322950881">Compactar extensão</translation>
 <translation id="3855676282923585394">Importar favoritos e configurações...</translation>
 <translation id="3856800405688283469">Selecionar fuso horário</translation>
-<translation id="3856921555429624101">A medição de uso de dados terminou</translation>
 <translation id="3857228364945137633">Tente usar o Smart Lock para desbloquear seu <ph name="DEVICE_TYPE" /> sem uma senha quando seu smartphone estiver por perto.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sincronização pausada</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Abrir todos em uma janela anônima</translation>
 <translation id="4508265954913339219">Falha na ativação</translation>
 <translation id="4508765956121923607">Exibir &amp;código fonte</translation>
-<translation id="4509823033118379431">As imagens não estão disponíveis no momento. Reconecte para ver as coleções.</translation>
 <translation id="451407183922382411">Tecnologia da <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurar um novo usuário supervisionado</translation>
 <translation id="4514610446763173167">Alternar vídeo entre reproduzir e pausar</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Continuar de outro dispositivo</translation>
 <translation id="4628314759732363424">Alterar...</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Caractere inválido: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Ativar o som da guia</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Pronto para fazer backup de <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Esse arquivo não é transferido com frequência e pode ser perigoso.</translation>
 <translation id="4907306957610201395">Categoria de permissão</translation>
-<translation id="4907824805858067479">Os cartões salvos foram desativados pelo seu administrador</translation>
 <translation id="4908811072292128752">Abra uma nova guia para navegar em dois sites de uma vez</translation>
 <translation id="4909038193460299775">Como essa conta é gerenciada por <ph name="DOMAIN" />, seus favoritos, histórico, senhas e outras configurações serão excluídos desse dispositivo. No entanto, seus dados permanecerão armazenados na sua Conta do Google e poderão ser gerenciados no <ph name="BEGIN_LINK" />Painel do Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Inscrição concluída</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Anual</translation>
 <translation id="4957949153200969297">Ativa apenas os recursos relacionados à sincronização do <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" />: <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Mantenha seus cartões em um só lugar</translation>
 <translation id="496226124210045887">A pasta selecionada contém arquivos confidenciais. Tem certeza que quer conceder a "$1" acesso permanente de leitura a esta pasta?</translation>
 <translation id="4964455510556214366">Organização</translation>
 <translation id="4964673849688379040">Verificando...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Adicionar extensão</translation>
 <translation id="5029568752722684782">Limpar cópia</translation>
 <translation id="5030338702439866405">Emitido por</translation>
+<translation id="503155457707535043">Fazendo o download dos apps</translation>
 <translation id="503498442187459473"><ph name="HOST" /> quer usar sua câmera e seu microfone</translation>
 <translation id="5036662165765606524">Não permitir que nenhum site faça download de vários arquivos automaticamente</translation>
 <translation id="5037676449506322593">Selecionar tudo</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Desativar som</translation>
 <translation id="5785583009707899920">Utilitários de arquivos do Chrome</translation>
 <translation id="5787146423283493983">Acordo de chave</translation>
+<translation id="5788127256798019331">Arquivos do Google Play</translation>
 <translation id="5788367137662787332">Ao menos uma partição no dispositivo <ph name="DEVICE_LABEL" /> não pôde ser montada.</translation>
 <translation id="5794414402486823030">Sempre abrir com visualizador do sistema</translation>
 <translation id="5794786537412027208">Sair de todos os aplicativos do Google Chrome</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Traduzida</translation>
 <translation id="5991049340509704927">Ampliar</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esse aplicativo.}one{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esse aplicativo.}other{Para que você possa continuar navegando na Web, peça ao seu administrador para remover esses aplicativos.}}</translation>
-<translation id="5993332328670040093">Seu uso de dados não será mais medido.</translation>
 <translation id="6002458620803359783">Vozes preferidas</translation>
 <translation id="6005695835120147974">Roteador de mídia</translation>
 <translation id="6006484371116297560">Clássico</translation>
@@ -3359,6 +3372,7 @@
 <translation id="6178664161104547336">Selecione um certificado</translation>
 <translation id="6181431612547969857">Download bloqueado</translation>
 <translation id="6185132558746749656">Localização do dispositivo</translation>
+<translation id="6185617499004995178">Validador de CUPS IPP</translation>
 <translation id="6185696379715117369">Página para cima</translation>
 <translation id="6189273858858366896">Configurar ou gerenciar compartilhamentos de arquivos de rede.</translation>
 <translation id="6189412234224385711">Abrir com <ph name="EXTENSION_NAME" /></translation>
@@ -3391,6 +3405,7 @@
 <translation id="6231881193380278751">Adicionar um parâmetro de consulta no URL para atualizar automaticamente a página: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Bateria</translation>
 <translation id="6232116551750539448">A conexão com <ph name="NAME" /> foi perdida</translation>
+<translation id="6235700927623181151">Esta guia está compartilhando o conteúdo da sua área de trabalho</translation>
 <translation id="6237816943013845465">Permite ajustar a resolução da tela</translation>
 <translation id="6238923052227198598">Manter a anotação mais recente na tela de bloqueio</translation>
 <translation id="6239558157302047471">Atualizar &amp;frame</translation>
@@ -3425,7 +3440,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">O arquivo <ph name="FILE_NAME" /> não costuma ser transferido por download e pode ser perigoso.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nova impressora na sua rede}one{Novas impressoras na sua rede}other{Novas impressoras na sua rede}}</translation>
-<translation id="6286684120317096255">O uso de dados está sendo medido</translation>
 <translation id="6286708577777130801">Detalhes da senha salva</translation>
 <translation id="6287852322318138013">Selecione um aplicativo para abrir este arquivo</translation>
 <translation id="6289452883081499048">Serviços personalizados do Google, como o Google Play</translation>
@@ -3536,6 +3550,7 @@
 <translation id="6451180435462401570">Gerenciar dispositivos Cloud Print</translation>
 <translation id="6451689256222386810">Se você esqueceu sua senha longa ou deseja alterar essa configuração, <ph name="BEGIN_LINK" />redefina a sincronização<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Rejeitar</translation>
+<translation id="6455264371803474013">Em sites específicos</translation>
 <translation id="6455894534188563617">&amp;Nova pasta</translation>
 <translation id="6456394469623773452">Bom</translation>
 <translation id="6456631036739229488">O smartphone com Smart Lock mudou. Digite sua senha para atualizar o Smart Lock. Na próxima vez, o smartphone desbloqueará seu <ph name="DEVICE_TYPE" />. Desative o Smart Lock nas configurações.</translation>
@@ -3613,6 +3628,7 @@
 <translation id="657402800789773160">&amp;Recarregar esta página</translation>
 <translation id="6577284282025554716">Download cancelado: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Criptografar senhas sincronizadas com seu nome de usuário e senha do Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Conteúdo da área de trabalho compartilhado</translation>
 <translation id="6580151766480067746">Versão de ARC</translation>
 <translation id="6581162200855843583">Link do Google Drive</translation>
 <translation id="6582421931165117398">Para proteger suas informações pessoais, altere sua senha agora. Antes de alterar sua senha, você precisará fazer login.</translation>
@@ -4001,7 +4017,7 @@
 <translation id="7191454237977785534">Salvar arquivo como</translation>
 <translation id="7193374945610105795">Nenhuma senha salva para <ph name="ORIGIN" /></translation>
 <translation id="7196835305346730603">Procurando por Chromeboxes próximas...</translation>
-<translation id="7197160646667308890"><ph name="BEGIN_PARAGRAPH1" />Estas são informações gerais sobre seu dispositivo e como você o utiliza (como nível da bateria, uso de apps e conectividade da rede). Os dados serão usados para aprimorar os produtos e serviços do Google para todos. Algumas informações agregadas também ajudarão parceiros, como desenvolvedores do Android, a fazer apps e produtos melhores.<ph name="END_PARAGRAPH1" />
+<translation id="7197160646667308890"><ph name="BEGIN_PARAGRAPH1" />Estas são informações gerais sobre seu dispositivo e como você o utiliza (como nível da bateria, uso de apps e conectividade da rede). Os dados serão usados para aprimorar os produtos e serviços do Google para todos. Algumas informações agregadas também ajudarão parceiros, como desenvolvedores Android, a fazer apps e produtos melhores.<ph name="END_PARAGRAPH1" />
     <ph name="BEGIN_PARAGRAPH2" />A desativação deste recurso não afetará a capacidade do seu dispositivo de enviar as informações necessárias para serviços essenciais, como atualizações do sistema e segurança.<ph name="END_PARAGRAPH2" />
     <ph name="BEGIN_PARAGRAPH3" />É possível controlar este recurso em Config. &gt; Google. Selecione Uso e diagnóstico no menu.<ph name="END_PARAGRAPH3" /></translation>
 <translation id="7199158086730159431">Conseguir &amp;ajuda</translation>
@@ -4079,6 +4095,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Este aplicativo pode impedir que o Chrome funcione adequadamente.}one{Este aplicativo pode impedir que o Chrome funcione adequadamente.}other{Estes aplicativos podem impedir que o Chrome funcione adequadamente.}}</translation>
 <translation id="7303900363563182677">Este site foi impedido de ver textos e imagens copiados para a área de transferência</translation>
 <translation id="730515362922783851">Trocar dados com qualquer dispositivo da rede local ou Internet</translation>
+<translation id="7307129035224081534">Pausada</translation>
 <translation id="7308002049209013926">Use a tela de início para acessar rapidamente os novos apps e atividades. Para chegar aqui com o teclado, pressione Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Mostrar &amp;controles</translation>
 <translation id="7310598146671372464">Não foi possível fazer login. O servidor não é compatível com os tipos de criptografia do Kerberos especificados. Entre em contato com seu administrador.</translation>
@@ -4136,7 +4153,6 @@
 <translation id="7400839060291901923">Configurar conexão no <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Pop-up bloqueado</translation>
 <translation id="7407430846095439694">Importar e vincular</translation>
-<translation id="7409233648990234464">Reiniciar e executar Powerwash</translation>
 <translation id="7409836189476010449">Executar Flash</translation>
 <translation id="7410344089573941623">Perguntar se <ph name="HOST" /> deseja acessar sua câmera e seu microfone</translation>
 <translation id="741204030948306876">Sim</translation>
@@ -4169,6 +4185,7 @@
 <translation id="7465778193084373987">URL da revogação do certificado do Netscape</translation>
 <translation id="7469894403370665791">Conectar-se automaticamente a esta rede</translation>
 <translation id="747114903913869239">Erro: Não foi possível decodificar a extensão</translation>
+<translation id="7473753388963818366">É hora de preparar seu <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Não, obrigado</translation>
 <translation id="747459581954555080">Restaurar todas</translation>
 <translation id="7475671414023905704">URL da senha perdida do Netscape</translation>
@@ -4293,6 +4310,7 @@
 <translation id="7665369617277396874">Adicionar conta</translation>
 <translation id="7671130400130574146">Usar barra de título e bordas do sistema</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, neste site: <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Envie sua voz para que o Google permita que o ditado seja usado em qualquer campo de texto.</translation>
 <translation id="7681095912841365527">O site pode usar o Bluetooth</translation>
 <translation id="7683373461016844951">Para continuar, clique em OK e depois em Adicionar pessoa para criar um novo perfil para seu endereço de e-mail do <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Instalada pelo administrador</translation>
@@ -4334,6 +4352,7 @@
 <translation id="7740996059027112821">Padrão</translation>
 <translation id="7748528009589593815">Guia anterior</translation>
 <translation id="7748626145866214022">Mais opções disponíveis na barra de ação. Pressione Alt + A para colocar o foco na barra de ação.</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7751260505918304024">Exibir todos</translation>
 <translation id="7754704193130578113">Perguntar onde salvar cada arquivo antes de fazer download</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4442,6 +4461,7 @@
 <translation id="7857949311770343000">Esta é a página "Nova guia" que você esperava?</translation>
 <translation id="786073089922909430">Serviço: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Downloads</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}one{# cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: pareado</translation>
 <translation id="7870730066603611552">Revisar as opções de sincronização após a configuração</translation>
 <translation id="7870790288828963061">Nenhum aplicativo de quiosque com versão mais recente foi encontrado. Não há nada para ser atualizado. Remova o pendrive.</translation>
@@ -4764,6 +4784,7 @@
 <translation id="8373553483208508744">Desativar som das guias</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de e-mail</translation>
 <translation id="8386903983509584791">Verificação concluída</translation>
+<translation id="8389492867173948260">Permitir que a extensão leia e modifique todos os seus dados nos sites que você visitar:</translation>
 <translation id="8390449457866780408">Servidor não disponível.</translation>
 <translation id="8391712576156218334">Imagem indisponível. Tente novamente mais tarde.</translation>
 <translation id="8392234662362215700">Pressione Control-Shift-Barra de espaço para trocar o layout do teclado.</translation>
@@ -4795,6 +4816,7 @@
 <translation id="84297032718407999">Você será desconectado em <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Alterar PIN do SIM</translation>
 <translation id="8434480141477525001">Porta de depuração de Cliente nativo</translation>
+<translation id="8435395510592618362">Verificar sua identidade com <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Salvar cartão de crédito</translation>
 <translation id="8438328416656800239">Mudar para um navegador inteligente</translation>
 <translation id="8438566539970814960">Melhorar pesquisas e navegação</translation>
@@ -4821,6 +4843,7 @@
 <translation id="8465252176946159372">Entrada inválida</translation>
 <translation id="8465444703385715657">O pulg-in <ph name="PLUGIN_NAME" /> precisa da sua permissão para ser executado</translation>
 <translation id="8466234950814670489">Arquivo tar</translation>
+<translation id="8466417995783206254">Esta guia está reproduzindo um vídeo em picture-in-picture.</translation>
 <translation id="8468750959626135884">Desbloquear o <ph name="DEVICE_TYPE" /> com seu smartphone Android.</translation>
 <translation id="8470028084415844044">Para ter todas as suas senhas em todos os seus dispositivos, ative a sincronização.</translation>
 <translation id="8470513973197838199">Senhas salvas para <ph name="ORIGIN" /></translation>
@@ -4841,6 +4864,7 @@
 <translation id="8496717697661868878">Executar este plug-in</translation>
 <translation id="8497219075884839166">Utilitários do Windows</translation>
 <translation id="8498214519255567734">Facilita olhar para a tela ou ler com pouca luz</translation>
+<translation id="8498395510292172881">Continuar lendo no Chrome</translation>
 <translation id="8503813439785031346">Nome de usuário</translation>
 <translation id="850875081535031620">Nenhum software perigoso encontrado</translation>
 <translation id="8509646642152301857">Falha no download do dicionário de correção ortográfica.</translation>
@@ -4991,7 +5015,6 @@
 <translation id="8725066075913043281">Tentar novamente</translation>
 <translation id="8725178340343806893">Favoritos</translation>
 <translation id="8726206820263995930">Erro ao obter as configurações da política a partir do servidor: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Não mostrar isto novamente</translation>
 <translation id="8727344521467137076">Há um software prejudicial no seu computador. O Chrome está removendo esse software e restaurará as configurações para que o navegador volte a funcionar normalmente.</translation>
 <translation id="8730621377337864115">Concluído</translation>
 <translation id="8732030010853991079">Para usar esta extensão, clique neste ícone.</translation>
@@ -5182,6 +5205,7 @@
 <translation id="9027459031423301635">Abrir link em uma nova &amp;guia</translation>
 <translation id="9030515284705930323">Sua organização não ativou a Google Play Store para sua conta. Entre em contato com seu administrador para receber mais informações.</translation>
 <translation id="9033857511263905942">&amp;Colar</translation>
+<translation id="9034924485347205037">Arquivos do Linux</translation>
 <translation id="9035012421917565900">Os itens não poderão retornar para '<ph name="DESTINATION_NAME" />', portanto, você não poderá desfazer esta ação.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Mostrar original</translation>
@@ -5282,6 +5306,7 @@
 <translation id="9173995187295789444">Procurando dispositivos Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Dispositivo Bluetooth conectado</translation>
 <translation id="9177499212658576372">No momento, você está conectado à rede <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configurar o Linux (Beta) no <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">O processo pode levar alguns minutos. Iniciando o contêiner Linux.</translation>
 <translation id="9180380851667544951">O site pode compartilhar sua tela</translation>
 <translation id="9188441292293901223">Atualize o Android do seu smartphone para uma versão mais recente a fim de desbloquear este <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index e98ed78..c339d8a 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Perguntar antes de aceder</translation>
 <translation id="1434696352799406980">Repõe a página inicial, a página novo separador, o motor de pesquisa e os separadores fixos. Também desativa todas as extensões e limpa os dados temporários como os cookies. Os marcadores, o histórico e as palavras-passe guardadas não são limpos.</translation>
 <translation id="1434886155212424586">A Página inicial é a página Novo separador</translation>
+<translation id="1436671784520050284">Continuar configuração</translation>
 <translation id="1436784010935106834">Removido</translation>
 <translation id="1438632560381091872">Reativar som dos separadores</translation>
 <translation id="1442392616396121389">Prefixo de encaminhamento</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Fatia de piza</translation>
 <translation id="1467432559032391204">Esquerda</translation>
 <translation id="1468571364034902819">Não é possível utilizar este perfil</translation>
+<translation id="1470533772306424441">Vamos instalar essas aplicações. Pode encontrar mais aplicações para o seu dispositivo na Play Store.</translation>
 <translation id="1470811252759861213">Para obter as suas extensões em todos os computadores, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" não foi carregado. Não existe espaço livre suficiente no seu Google Drive.</translation>
 <translation id="1475502736924165259">Tem certificados em arquivo que não encaixam em nenhuma das restantes categorias</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Re&amp;duzir</translation>
 <translation id="1830550083491357902">Não tem sessão iniciada</translation>
 <translation id="1832511806131704864">Alteração de telemóvel atualizada</translation>
-<translation id="1832685970989658809">O administrador desativou os métodos de pagamento guardados.</translation>
 <translation id="1834503245783133039">Transferência sem êxito: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Limpar pesquisa</translation>
 <translation id="1838709767668011582">Site Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De:</translation>
 <translation id="2193365732679659387">Definições fidedignas</translation>
 <translation id="2195729137168608510">Protecção de email</translation>
+<translation id="2199298570273670671">Erro</translation>
 <translation id="2200356397587687044">O Chrome necessita de autorização para continuar</translation>
 <translation id="220138918934036434">Ocultar botão</translation>
 <translation id="2202898655984161076">Ocorreu um problema ao listar as impressoras. Algumas impressoras podem não ter sido registadas com êxito no <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Mostrar palavra-passe</translation>
 <translation id="2436186046335138073">Permitir que <ph name="HANDLER_HOSTNAME" /> abra todos os links <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Mínimo</translation>
-<translation id="2437139306601019091">A medição da utilização de dados terminou</translation>
 <translation id="2440604414813129000">Ver fonte</translation>
 <translation id="2445081178310039857">É necessário o directório de raiz da extensão.</translation>
 <translation id="2445484935443597917">Criar um novo perfil</translation>
+<translation id="2446585455334014596">A aplicação <ph name="APP_NAME" /> pretende validar a sua identidade</translation>
 <translation id="2448312741937722512">Tipo</translation>
 <translation id="2450223707519584812">Não pode adicionar utilizadores porque as chaves da API do Google estão em falta. Consulte <ph name="DETAILS_URL" /> para obter detalhes.</translation>
 <translation id="2450310832094867474">Pretende desativar a sincronização e terminar a sessão?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">O ficheiro já existe</translation>
 <translation id="2453860139492968684">Concluir</translation>
 <translation id="2454247629720664989">Palavra-chave:</translation>
+<translation id="245661998428026871">O vídeo no modo ecrã no ecrã vai deixar de ser reproduzido.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> pretende copiar ficheiros de <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID da chave da autoridade de certificação</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> adicionada</translation>
@@ -1363,6 +1366,7 @@
 <translation id="304826556400666995">Reativar Som dos Separadores</translation>
 <translation id="3053013834507634016">Utilização de chave de certificado</translation>
 <translation id="3057861065630527966">Fazer uma cópia de segurança de fotos e vídeos</translation>
+<translation id="3059313675706898490">Mensagens Android</translation>
 <translation id="3060379269883947824">Ativar Selecionar para ativar voz</translation>
 <translation id="3061707000357573562">Serviço de patch</translation>
 <translation id="3064410671692449875">Dados insuficientes</translation>
@@ -1411,6 +1415,7 @@
 <translation id="313205617302240621">Esqueceu-se da palavra-passe?</translation>
 <translation id="3132996321662585180">Atualizar diariamente</translation>
 <translation id="3135204511829026971">Rodar ecrã</translation>
+<translation id="313638818480447860">Encontrámos <ph name="NUMBER_OF_APPS" /> aplicações associadas à sua conta que foram otimizadas para este dispositivo.</translation>
 <translation id="313963229645891001">A transferir… <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar amarelo predefinido</translation>
 <translation id="3140353188828248647">Focar barra de endereço</translation>
@@ -1441,6 +1446,7 @@
 <translation id="3182749001423093222">Verificação ortográfica</translation>
 <translation id="3183139917765991655">Importador de perfis</translation>
 <translation id="3184560914950696195">Não é possível guardar em $1. As imagens editadas serão guardadas na pasta Transferências.</translation>
+<translation id="3188257591659621405">Os meus ficheiros</translation>
 <translation id="3188465121994729530">Média de movimentações</translation>
 <translation id="3190558889382726167">Palavra-passe guardada</translation>
 <translation id="3192947282887913208">Ficheiros de áudio</translation>
@@ -1528,6 +1534,7 @@
 <translation id="3326821416087822643">A criar zip de <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informações da aplicação</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – vídeo em reprodução no modo ecrã no ecrã.</translation>
 <translation id="3335337277364016868">Ano de gravação</translation>
 <translation id="3335947283844343239">Reabrir separador fechado</translation>
 <translation id="3336664756920573711">Desbloqueie o <ph name="DEVICE_TYPE" /> com o telemóvel Android.</translation>
@@ -1547,6 +1554,7 @@
 <translation id="3360297538363969800">Falha ao imprimir. Verifique a impressora e tente novamente.</translation>
 <translation id="3364721542077212959">Ferramentas da caneta stylus</translation>
 <translation id="3365598184818502391">Utilize Ctrl ou Alt.</translation>
+<translation id="3367047597842238025">Configure o <ph name="DEVICE_TYPE" /> ao seu gosto e descubra todas as capacidades fantásticas ao seu alcance.</translation>
 <translation id="3368922792935385530">Ligado</translation>
 <translation id="3369624026883419694">A resolver anfitrião...</translation>
 <translation id="337286756654493126">Ler pastas que são abertas na aplicação</translation>
@@ -1560,6 +1568,7 @@
 <translation id="3389312115541230716">Clique com o botão direito no símbolo <ph name="SMALL_PRODUCT_LOGO" /> na barra de tarefas.</translation>
 <translation id="3391716558283801616">Separador 7</translation>
 <translation id="3396331542604645348">A impressora selecionada não está disponível ou não está instalada corretamente. Verifique a impressora ou tente selecionar outra impressora.</translation>
+<translation id="3396800784455899911">Ao clicar no botão "Aceitar e continuar", está a aceitar o processamento descrito acima para estes serviços Google.</translation>
 <translation id="3399432415385675819">As notificações serão desativadas</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Sem palavras-passe guardadas para este site</translation>
@@ -1788,10 +1797,13 @@
 <translation id="3726463242007121105">Não é possível abrir este aparelho porque o sistema de ficheiros não é suportado.</translation>
 <translation id="3727148787322499904">Alterar esta definição afetará todas as redes partilhadas</translation>
 <translation id="3727187387656390258">Inspeccionar pop-up</translation>
+<translation id="3729506734996624908">Sites permitidos</translation>
 <translation id="3732078975418297900">Erro na linha <ph name="ERROR_LINE" />.</translation>
 <translation id="3733127536501031542">Servidor SSL com "Step-up"</translation>
+<translation id="3735740477244556633">Ordenar por</translation>
 <translation id="3737274407993947948">Ocorreu um erro ao instalar o Linux…</translation>
 <translation id="3737536731758327622">As suas transferências aparecem aqui</translation>
+<translation id="3738671331307774213">A validação da sua identidade ajuda a proteger os seus dados privados.</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Pretende abrir <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> será agora apresentado na Consola do gestor.</translation>
@@ -1876,10 +1888,10 @@
 <translation id="3846116211488856547">Obtenha ferramentas para programar Websites, aplicações Android e muito mais. A instalação do Linux vai transferir <ph name="DOWNLOAD_SIZE" /> de dados.</translation>
 <translation id="385051799172605136">Anterior</translation>
 <translation id="3851428669031642514">Carregar scripts não seguros</translation>
+<translation id="3854599674806204102">Escolha uma opção</translation>
 <translation id="3855441664322950881">Comprimir extensão</translation>
 <translation id="3855676282923585394">Importar marcadores e definições...</translation>
 <translation id="3856800405688283469">Selecionar fuso horário</translation>
-<translation id="3856921555429624101">A medição da utilização de dados terminou</translation>
 <translation id="3857228364945137633">Experimente o Smart Lock para desbloquear o <ph name="DEVICE_TYPE" /> sem palavra-passe quando o seu telemóvel estiver próximo.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sincronização em pausa</translation>
@@ -2250,7 +2262,6 @@
 <translation id="4508051413094283164">Abrir tudo numa janela de navegação anónima</translation>
 <translation id="4508265954913339219">A activação falhou</translation>
 <translation id="4508765956121923607">Ver &amp;Origem</translation>
-<translation id="4509823033118379431">De momento, as imagens não estão disponíveis. Volte a estabelecer ligação para ver as coleções.</translation>
 <translation id="451407183922382411">Com tecnologia da <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurar novo utilizador supervisionado</translation>
 <translation id="4514610446763173167">Ativar/desativar vídeo para reprodução ou pausa.</translation>
@@ -2327,6 +2338,7 @@
 <translation id="4627442949885028695">Continuar a partir de outro dispositivo</translation>
 <translation id="4628314759732363424">Alterar...</translation>
 <translation id="4628757576491864469">Dispositivos</translation>
+<translation id="4628948037717959914">Fotografia</translation>
 <translation id="4630590996962964935">Caráter inválido: $1</translation>
 <translation id="4631887759990505102">Artista</translation>
 <translation id="4632483769545853758">Reativar o Som do Separador</translation>
@@ -2512,7 +2524,6 @@
 <translation id="4905417359854579806">Pronto para fazer uma cópia de segurança de <ph name="FILE_COUNT" />.</translation>
 <translation id="4907161631261076876">Este ficheiro não é habitualmente transferido e pode ser perigoso.</translation>
 <translation id="4907306957610201395">Categoria de autorizações</translation>
-<translation id="4907824805858067479">O administrador desativou os cartões guardados.</translation>
 <translation id="4908811072292128752">Abra um novo separador para navegar em dois sites em simultâneo</translation>
 <translation id="4909038193460299775">Como esta conta é gerida por <ph name="DOMAIN" />, os seus marcadores, histórico, palavras-passe e outras definições serão apagados deste dispositivo. No entanto, os seus dados continuarão armazenados na sua Conta Google e podem ser geridos no <ph name="BEGIN_LINK" />Painel de Controlo Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Foi inscrito com êxito</translation>
@@ -2544,6 +2555,7 @@
 <translation id="4955814292505481804">Anual</translation>
 <translation id="4957949153200969297">Ativa apenas funcionalidades relacionadas com a Sincronização do <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Tenha os seus cartões num único local.</translation>
 <translation id="496226124210045887">A pasta que selecionou contém ficheiros sensíveis. Tem a certeza de que pretende conceder a "$1" o acesso permanente de leitura a esta pasta?</translation>
 <translation id="4964455510556214366">Disposição</translation>
 <translation id="4964673849688379040">A verificar...</translation>
@@ -2591,6 +2603,7 @@
 <translation id="5027562294707732951">Adicionar extensão</translation>
 <translation id="5029568752722684782">Limpar cópia</translation>
 <translation id="5030338702439866405">Emitido por</translation>
+<translation id="503155457707535043">A transferir aplicações…</translation>
 <translation id="503498442187459473"><ph name="HOST" /> pretende utilizar a câmara e o microfone.</translation>
 <translation id="5036662165765606524">Não permitir que os sites transfiram vários ficheiros automaticamente</translation>
 <translation id="5037676449506322593">Selecionar tudo</translation>
@@ -3106,6 +3119,7 @@
 <translation id="57838592816432529">Desativar som</translation>
 <translation id="5785583009707899920">Utilitários de ficheiros do Chrome</translation>
 <translation id="5787146423283493983">Acordo de chaves</translation>
+<translation id="5788127256798019331">Ficheiros do Google Play</translation>
 <translation id="5788367137662787332">Lamentamos, mas não foi possível montar, pelo menos, uma partição no aparelho <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Abrir sempre com o visualizador do sistema</translation>
 <translation id="5794786537412027208">Sair de todas as Aplicações do Chrome</translation>
@@ -3233,7 +3247,6 @@
 <translation id="5990386583461751448">Tradução</translation>
 <translation id="5991049340509704927">Ampliar</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Para garantir que pode continuar a navegar na Web, peça ao administrador para remover esta aplicação.}other{Para garantir que pode continuar a navegar na Web, peça ao administrador para remover estas aplicações.}}</translation>
-<translation id="5993332328670040093">A utilização de dados já não será medida.</translation>
 <translation id="6002458620803359783">Vozes preferidas</translation>
 <translation id="6005695835120147974">Media Router</translation>
 <translation id="6006484371116297560">Clássico</translation>
@@ -3359,6 +3372,7 @@
 <translation id="6178664161104547336">Selecionar um certificado</translation>
 <translation id="6181431612547969857">Transferência bloqueada</translation>
 <translation id="6185132558746749656">Localização do dispositivo</translation>
+<translation id="6185617499004995178">Verificador de IPP do CUPS</translation>
 <translation id="6185696379715117369">Página para cima</translation>
 <translation id="6189273858858366896">Configurar ou gerir Partilhas de ficheiros na rede.</translation>
 <translation id="6189412234224385711">Abrir com <ph name="EXTENSION_NAME" /></translation>
@@ -3391,6 +3405,7 @@
 <translation id="6231881193380278751">Adicione um parâmetro de consulta no URL para atualizar automaticamente a página: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Bateria</translation>
 <translation id="6232116551750539448">Perdeu-se a ligação a <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Este separador está a partilhar o conteúdo do seu ambiente de trabalho.</translation>
 <translation id="6237816943013845465">Permite-lhe ajustar a resolução do ecrã</translation>
 <translation id="6238923052227198598">Manter a nota mais recente no ecrã de bloqueio</translation>
 <translation id="6239558157302047471">Atualizar &amp;frame</translation>
@@ -3425,7 +3440,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> não é habitualmente transferido e pode ser perigoso.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nova impressora na rede}other{Novas impressoras na rede}}</translation>
-<translation id="6286684120317096255">A utilização de dados está a ser medida</translation>
 <translation id="6286708577777130801">Detalhes de palavras-passe guardadas</translation>
 <translation id="6287852322318138013">Selecionar uma aplicação para abrir este ficheiro</translation>
 <translation id="6289452883081499048">Serviços Google personalizados, como o Play.</translation>
@@ -3536,6 +3550,7 @@
 <translation id="6451180435462401570">Gerir dispositivos Cloud Print</translation>
 <translation id="6451689256222386810">Se se esqueceu da frase de acesso ou pretender alterar esta definição, <ph name="BEGIN_LINK" />reponha a sincronização<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Rejeitar</translation>
+<translation id="6455264371803474013">Em sites específicos</translation>
 <translation id="6455894534188563617">&amp;Nova pasta</translation>
 <translation id="6456394469623773452">Boa</translation>
 <translation id="6456631036739229488">O telemóvel com Smart Lock foi alterado. Introduza a palavra-passe para atualizar o Smart Lock. Da próxima vez, o telemóvel irá desbloquear o <ph name="DEVICE_TYPE" />. Desative o Smart Lock nas Definições.</translation>
@@ -3613,6 +3628,7 @@
 <translation id="657402800789773160">&amp;Recarregar esta página</translation>
 <translation id="6577284282025554716">Transferência cancelada: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Encriptar as palavras-passe sincronizadas com o seu nome de utilizador e palavra-passe Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – conteúdo do ambiente de trabalho partilhado.</translation>
 <translation id="6580151766480067746">Versão do ARC</translation>
 <translation id="6581162200855843583">Link do Google Drive</translation>
 <translation id="6582421931165117398">Para proteger as suas informações pessoais, altere a palavra-passe agora. Antes de poder alterar a palavra-passe, é-lhe pedido para iniciar sessão.</translation>
@@ -4079,6 +4095,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Esta aplicação pode impedir o funcionamento correto do Chrome.}other{Estas aplicações podem impedir o funcionamento correto do Chrome.}}</translation>
 <translation id="7303900363563182677">Este site foi impedido de ver o texto e as imagens copiados para a área de transferência.</translation>
 <translation id="730515362922783851">Trocar dados com qualquer dispositivo na rede local ou na Internet</translation>
+<translation id="7307129035224081534">Em pausa</translation>
 <translation id="7308002049209013926">Utilize o Iniciador para aceder rapidamente a novas aplicações e atividades. Para chegar aqui através do teclado, prima Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Mostrar &amp;controlos</translation>
 <translation id="7310598146671372464">Não é possível iniciar sessão. O servidor não suporta os tipos de encriptação Kerberos especificados. Contacte o administrador.</translation>
@@ -4136,7 +4153,6 @@
 <translation id="7400839060291901923">Configurar ligação no <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Janelas de pop-up bloqueadas</translation>
 <translation id="7407430846095439694">Importar e vincular</translation>
-<translation id="7409233648990234464">Reiniciar e Powerwash</translation>
 <translation id="7409836189476010449">Executar o Flash</translation>
 <translation id="7410344089573941623">Perguntar se <ph name="HOST" /> pretende aceder à sua câmara e microfone</translation>
 <translation id="741204030948306876">Sim, aceito</translation>
@@ -4169,6 +4185,7 @@
 <translation id="7465778193084373987">URL de revogação do certificado Netscape</translation>
 <translation id="7469894403370665791">Ligar automaticamente a esta rede</translation>
 <translation id="747114903913869239">Erro: não foi possível descodificar a extensão</translation>
+<translation id="7473753388963818366">Vamos preparar o seu <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Não, obrigado</translation>
 <translation id="747459581954555080">Restaurar tudo</translation>
 <translation id="7475671414023905704">URL de palavra-passe perdida Netscape</translation>
@@ -4293,6 +4310,7 @@
 <translation id="7665369617277396874">Adicionar conta</translation>
 <translation id="7671130400130574146">Utilizar os limites e a barra de título do sistema</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, em <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Envie a sua voz para o Google para permitir a introdução por voz em qualquer campo de texto.</translation>
 <translation id="7681095912841365527">O site pode utilizar o Bluetooth.</translation>
 <translation id="7683373461016844951">Para continuar, clique em OK e, de seguida, clique em Adicionar pessoa para criar um novo perfil para o seu endereço de email de <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Instalada pelo gestor</translation>
@@ -4334,6 +4352,7 @@
 <translation id="7740996059027112821">Padrão</translation>
 <translation id="7748528009589593815">Separador anterior</translation>
 <translation id="7748626145866214022">Há mais opções disponíveis na barra de ação. Prima Alt + A para focar a barra de ação.</translation>
+<translation id="7750228210027921155">Ecrã no ecrã</translation>
 <translation id="7751260505918304024">Mostrar tudo</translation>
 <translation id="7754704193130578113">Perguntar onde guardar cada ficheiro antes da transferência</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4442,6 +4461,7 @@
 <translation id="7857949311770343000">É esta a página novo separador que esperava?</translation>
 <translation id="786073089922909430">Serviço: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Transferências</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – sincronizado</translation>
 <translation id="7870730066603611552">Rever opções de sincronização após a configuração</translation>
 <translation id="7870790288828963061">Nenhuma aplicação do Quiosque encontrada com uma versão mais recente. Nada a atualizar. Remova a pen USB.</translation>
@@ -4763,6 +4783,7 @@
 <translation id="8373553483208508744">Desativar som dos separadores</translation>
 <translation id="8382913212082956454">Copiar &amp;endereço de email</translation>
 <translation id="8386903983509584791">Análise concluída</translation>
+<translation id="8389492867173948260">Permitir que esta extensão leia e altere todos os dados nos Websites que visita:</translation>
 <translation id="8390449457866780408">O servidor não se encontra disponível.</translation>
 <translation id="8391712576156218334">A imagem não está disponível. Tente novamente mais tarde.</translation>
 <translation id="8392234662362215700">Prima Control-Shift-Espaço para mudar o esquema de teclado.</translation>
@@ -4794,6 +4815,7 @@
 <translation id="84297032718407999">A sessão será terminada dentro de <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Alterar o PIN do cartão SIM</translation>
 <translation id="8434480141477525001">Porta de depuração de NaCl</translation>
+<translation id="8435395510592618362">Validar a sua identidade com a aplicação <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Guardar cartão de crédito</translation>
 <translation id="8438328416656800239">Mude para um navegador inteligente</translation>
 <translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
@@ -4820,6 +4842,7 @@
 <translation id="8465252176946159372">Não é válido</translation>
 <translation id="8465444703385715657">O <ph name="PLUGIN_NAME" /> necessita da sua autorização para ser executado</translation>
 <translation id="8466234950814670489">Arquivo tar</translation>
+<translation id="8466417995783206254">Este separador está a reproduzir um vídeo no modo ecrã no ecrã.</translation>
 <translation id="8468750959626135884">Desbloqueie o <ph name="DEVICE_TYPE" /> com o telemóvel Android.</translation>
 <translation id="8470028084415844044">Para obter todas as suas palavras-passe em todos os dispositivos, ative a sincronização.</translation>
 <translation id="8470513973197838199">Palavras-passe guardadas para <ph name="ORIGIN" /></translation>
@@ -4840,6 +4863,7 @@
 <translation id="8496717697661868878">Executar este plug-in</translation>
 <translation id="8497219075884839166">Utilitários do Windows</translation>
 <translation id="8498214519255567734">Torna mais fácil olhar para o ecrã ou ler com pouca luz</translation>
+<translation id="8498395510292172881">Continuar a ler no Chrome</translation>
 <translation id="8503813439785031346">Nome de utilizador</translation>
 <translation id="850875081535031620">Não foi encontrado software prejudicial.</translation>
 <translation id="8509646642152301857">Falha na transferência do dicionário de verificação ortográfica.</translation>
@@ -4990,7 +5014,6 @@
 <translation id="8725066075913043281">Tentar novamente</translation>
 <translation id="8725178340343806893">Favoritos/Marcadores</translation>
 <translation id="8726206820263995930">Erro ao obter as definições da política do servidor: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Não voltar a mostrar</translation>
 <translation id="8727344521467137076">Existe software prejudicial no seu computador. O Chrome está a removê-lo e vai restaurar as suas definições para que o navegador volte a funcionar normalmente.</translation>
 <translation id="8730621377337864115">Concluído</translation>
 <translation id="8732030010853991079">Clique neste ícone para utilizar esta extensão.</translation>
@@ -5181,6 +5204,7 @@
 <translation id="9027459031423301635">Abrir Link num Novo &amp;Separador</translation>
 <translation id="9030515284705930323">A sua entidade não ativou a Google Play Store para a sua conta. Contacte o gestor para obter mais informações.</translation>
 <translation id="9033857511263905942">C&amp;olar</translation>
+<translation id="9034924485347205037">Ficheiros Linux</translation>
 <translation id="9035012421917565900">Não é possível mover os itens novamente para "<ph name="DESTINATION_NAME" />", pelo que não pode anular esta ação.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Mostrar original</translation>
@@ -5281,6 +5305,7 @@
 <translation id="9173995187295789444">A procurar dispositivos Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – dispositivo Bluetooth ligado</translation>
 <translation id="9177499212658576372">Está atualmente ligado à rede <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configurar o Linux (Beta) no <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Este processo pode demorar alguns minutos. A iniciar o contentor do Linux…</translation>
 <translation id="9180380851667544951">O site pode partilhar o ecrã.</translation>
 <translation id="9188441292293901223">Atualize o telemóvel para uma versão mais recente do Android para desbloquear este <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 23d180e6..f9b18652 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Solicită permisiunea înainte de accesare</translation>
 <translation id="1434696352799406980">Astfel, pagina de pornire, pagina Filă nouă, motorul de căutare și filele fixate vor fi resetate. De asemenea, vor fi dezactivate toate extensiile, iar datele temporare vor fi șterse, cum ar fi cookie-urile. Marcajele, istoricul și parolele salvate nu vor fi șterse.</translation>
 <translation id="1434886155212424586">Pagina de pornire este pagina Filă nouă</translation>
+<translation id="1436671784520050284">Continuă configurarea</translation>
 <translation id="1436784010935106834">Eliminat</translation>
 <translation id="1438632560381091872">Activează sunetul filelor</translation>
 <translation id="1442392616396121389">Prefix de redirecționare</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Felie de pizza</translation>
 <translation id="1467432559032391204">Stânga</translation>
 <translation id="1468571364034902819">Nu se poate folosi acest profil</translation>
+<translation id="1470533772306424441">Vom instala aceste aplicații pentru tine. Poți găsi mai multe aplicații pentru dispozitivul tău în Magazinul Play.</translation>
 <translation id="1470811252759861213">Pentru a accesa extensiile pe toate computerele tale, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">„<ph name="FILENAME" />” nu s-a încărcat. Nu există spațiu liber suficient în Google Drive.</translation>
 <translation id="1475502736924165259">Ai stocate certificate care nu se încadrează în niciuna dintre celelalte categorii</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Mi&amp;cșorează</translation>
 <translation id="1830550083491357902">Neconectat</translation>
 <translation id="1832511806131704864">Schimbare a telefonului actualizată</translation>
-<translation id="1832685970989658809">Metodele de plată salvate sunt dezactivate de administrator</translation>
 <translation id="1834503245783133039">Descărcare nereușită: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Șterge căutarea</translation>
 <translation id="1838709767668011582">Site Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">De la:</translation>
 <translation id="2193365732679659387">Setări privind încrederea</translation>
 <translation id="2195729137168608510">Protecție e-mail</translation>
+<translation id="2199298570273670671">Eroare</translation>
 <translation id="2200356397587687044">Chrome are nevoie de permisiune pentru a continua</translation>
 <translation id="220138918934036434">Ascunde butonul</translation>
 <translation id="2202898655984161076">A apărut o problemă la listarea imprimantelor. Este posibil ca unele dintre imprimante să nu fi fost înregistrate la <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Afișați parola</translation>
 <translation id="2436186046335138073">Permiteți ca <ph name="HANDLER_HOSTNAME" /> să deschidă toate linkurile <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Măsurarea utilizării datelor s-a încheiat</translation>
 <translation id="2440604414813129000">Afișează s&amp;ursa</translation>
 <translation id="2445081178310039857">Este necesar directorul rădăcină pentru extensie.</translation>
 <translation id="2445484935443597917">Creează un profil nou</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> dorește să-ți confirme identitatea</translation>
 <translation id="2448312741937722512">Tipul</translation>
 <translation id="2450223707519584812">Nu vei putea adăuga utilizatori, deoarece lipsesc cheile pentru API-ul Google. Pentru detalii, consultă <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Dezactivezi sincronizarea și te deconectezi?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Fișierul există deja</translation>
 <translation id="2453860139492968684">Terminați</translation>
 <translation id="2454247629720664989">Cuvânt cheie</translation>
+<translation id="245661998428026871">Redarea videoclipului în modul picture-in-picture se va opri.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> dorește să copieze fișiere din <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID-ul cheii autorității de certificare</translation>
 <translation id="2462752602710430187">S-a adăugat <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Activează sunetul filelor</translation>
 <translation id="3053013834507634016">Folosirea cheii de certificat</translation>
 <translation id="3057861065630527966">Fă backup pentru fotografii și videoclipuri</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Activează „Selectează și ascultă”</translation>
 <translation id="3061707000357573562">Serviciu de corecție</translation>
 <translation id="3064410671692449875">Date insuficiente</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Ai uitat parola?</translation>
 <translation id="3132996321662585180">Actualizează zilnic</translation>
 <translation id="3135204511829026971">Rotește ecranul</translation>
+<translation id="313638818480447860">Am găsit <ph name="NUMBER_OF_APPS" /> aplicații conectate la contul tău care sunt optimizate pentru acest dispozitiv.</translation>
 <translation id="313963229645891001">Se descarcă, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Avatar galben prestabilit</translation>
 <translation id="3140353188828248647">Focalizează pe bara de adrese</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Verificarea ortografiei</translation>
 <translation id="3183139917765991655">Instrument de import al profilurilor</translation>
 <translation id="3184560914950696195">Fișierele nu pot fi salvate în $1. Imaginile editate vor fi salvate în dosarul Descărcări.</translation>
+<translation id="3188257591659621405">Fișierele mele</translation>
 <translation id="3188465121994729530">Medie mobilă</translation>
 <translation id="3190558889382726167">Parola a fost salvată</translation>
 <translation id="3192947282887913208">Fișiere audio</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Se arhivează <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informații despre aplicație</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – Videoclipul se redă în modul picture-in-picture</translation>
 <translation id="3335337277364016868">Anul înregistrării</translation>
 <translation id="3335947283844343239">Redeschide fila închisă</translation>
 <translation id="3336664756920573711">Deblochează dispozitivul <ph name="DEVICE_TYPE" /> cu telefonul Android</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Printarea a eșuat. Verificați imprimanta și încercați din nou.</translation>
 <translation id="3364721542077212959">Instrumente pentru creion</translation>
 <translation id="3365598184818502391">Folosește Ctrl sau Alt</translation>
+<translation id="3367047597842238025">Configurează-ți dispozitivul <ph name="DEVICE_TYPE" /> așa cum dorești și descoperă toate funcțiile uimitoare pe care le ai la îndemână.</translation>
 <translation id="3368922792935385530">Conectată</translation>
 <translation id="3369624026883419694">Se rezolvă gazda...</translation>
 <translation id="337286756654493126">Citește dosarele pe care le deschideți în aplicație</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Dă clic dreapta pe pictograma <ph name="SMALL_PRODUCT_LOGO" /> din bara de activități</translation>
 <translation id="3391716558283801616">Fila 7</translation>
 <translation id="3396331542604645348">Imprimanta selectată nu este disponibilă sau nu este instalată corect. Verificați imprimanta sau încercați să selectați altă imprimantă.</translation>
+<translation id="3396800784455899911">Dacă dai clic pe butonul „Acceptă și continuă” înseamnă că ești de acord cu procesarea descrisă mai sus pentru aceste servicii Google.</translation>
 <translation id="3399432415385675819">Notificările vor fi dezactivate</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Nu s-au salvat parole pentru acest site</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Acest dispozitiv nu poate fi deschis, deoarece sistemul său de fișiere nu este acceptat.</translation>
 <translation id="3727148787322499904">Modificarea acestei setări se va aplica tuturor rețelelor folosite în comun</translation>
 <translation id="3727187387656390258">Fereastră pop-up de inspectare</translation>
+<translation id="3729506734996624908">Site-uri permise</translation>
 <translation id="3732078975418297900">Eroare pe linia <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL cu Step-Up</translation>
+<translation id="3735740477244556633">Sortează după</translation>
 <translation id="3737274407993947948">A apărut o eroare la instalarea Linux...</translation>
 <translation id="3737536731758327622">Descărcările sunt afișate aici</translation>
+<translation id="3738671331307774213">Confirmarea identității te ajută să-ți protejezi datele private</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Deschizi <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> va apărea în Consola de administrare</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Obține instrumente pentru dezvoltarea site-urilor, aplicații Android și multe altele. Instalarea Linux va descărca <ph name="DOWNLOAD_SIZE" /> de date.</translation>
 <translation id="385051799172605136">Înapoi</translation>
 <translation id="3851428669031642514">Încarcă scripturi nesigure</translation>
+<translation id="3854599674806204102">Alege o opțiune</translation>
 <translation id="3855441664322950881">Împachetează extensia</translation>
 <translation id="3855676282923585394">Importă marcajele și setările...</translation>
 <translation id="3856800405688283469">Selectează fusul orar</translation>
-<translation id="3856921555429624101">Măsurarea utilizării datelor s-a încheiat</translation>
 <translation id="3857228364945137633">Încearcă Smart Lock pentru a debloca dispozitivul <ph name="DEVICE_TYPE" /> fără o parolă când telefonul tău este în apropiere.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sincronizarea a fost întreruptă</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Deschide totul într-o fereastră incognito</translation>
 <translation id="4508265954913339219">Activarea nu a reușit</translation>
 <translation id="4508765956121923607">Afișează s&amp;ursa</translation>
-<translation id="4509823033118379431">Imaginile sunt momentan indisponibile. Conectează-te din nou ca să vezi colecțiile.</translation>
 <translation id="451407183922382411">Cu tehnologia <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Configurați un utilizator monitorizat nou</translation>
 <translation id="4514610446763173167">Redă sau întrerupe videoclipul</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Continuă de pe un alt dispozitiv</translation>
 <translation id="4628314759732363424">Modificați...</translation>
 <translation id="4628757576491864469">Dispozitive</translation>
+<translation id="4628948037717959914">Fotografie</translation>
 <translation id="4630590996962964935">Caracter nevalid: $1</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4632483769545853758">Activează sunetul filei</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Gata de backup pentru <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Acest fișier nu este descărcat de obicei și ar putea fi periculos.</translation>
 <translation id="4907306957610201395">Categoria de permisiuni</translation>
-<translation id="4907824805858067479">Cardurile salvate sunt dezactivate de administrator</translation>
 <translation id="4908811072292128752">Deschide o filă nouă pentru a naviga pe două site-uri simultan</translation>
 <translation id="4909038193460299775">Deoarece acest cont este gestionat de <ph name="DOMAIN" />, vor fi șterse marcajele, istoricul, parolele și alte setări de pe acest dispozitiv. Totuși, datele vor rămâne stocate în Contul Google și pot fi gestionate din <ph name="BEGIN_LINK" />Tabloul de bord Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Te-ai înregistrat</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Anuală</translation>
 <translation id="4957949153200969297">Activează numai funcțiile asociate cu Sincronizare <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Toate cardurile tale într-un singur loc</translation>
 <translation id="496226124210045887">Dosarul pe care l-ați selectat conține fișiere cu informații delicate. Sigur doriți să permiteți accesul de citire permanent pentru „$1” la acest dosar?</translation>
 <translation id="4964455510556214366">Aranjare</translation>
 <translation id="4964673849688379040">Se verifică...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Adaugă extensia</translation>
 <translation id="5029568752722684782">Șterge copia</translation>
 <translation id="5030338702439866405">Emis de</translation>
+<translation id="503155457707535043">Aplicațiile se descarcă</translation>
 <translation id="503498442187459473"><ph name="HOST" /> dorește să utilizeze camera foto și microfonul</translation>
 <translation id="5036662165765606524">Nu permiteți niciunui site să descarce automat mai multe fișiere</translation>
 <translation id="5037676449506322593">Selectează tot</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Dezactivează sunetul</translation>
 <translation id="5785583009707899920">Utilitare de fișiere Chrome</translation>
 <translation id="5787146423283493983">Acord privind cheia</translation>
+<translation id="5788127256798019331">Fișiere Play</translation>
 <translation id="5788367137662787332">Ne pare rău, cel puțin o partiție de pe dispozitivul <ph name="DEVICE_LABEL" /> nu a putut fi montată.</translation>
 <translation id="5794414402486823030">Deschide întotdeauna cu Utilitarul de vizualizare al sistemului</translation>
 <translation id="5794786537412027208">Ieși din toate aplicațiile Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Tradusă</translation>
 <translation id="5991049340509704927">Mărește</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicația.}few{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicațiile.}other{Ca să poți naviga în continuare pe web, trebuie să soliciți administratorului să elimine aplicațiile.}}</translation>
-<translation id="5993332328670040093">Utilizarea datelor nu va mai fi măsurată.</translation>
 <translation id="6002458620803359783">Vocile preferate</translation>
 <translation id="6005695835120147974">Router media</translation>
 <translation id="6006484371116297560">Tema clasică</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Selectează un certificat</translation>
 <translation id="6181431612547969857">Descărcarea a fost blocată</translation>
 <translation id="6185132558746749656">Locația dispozitivului</translation>
+<translation id="6185617499004995178">Validator IPP CUPS</translation>
 <translation id="6185696379715117369">O pagină mai sus</translation>
 <translation id="6189273858858366896">Configurează sau gestionează dispozitive de stocare în rețea.</translation>
 <translation id="6189412234224385711">Deschide cu <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Adaugă un parametru de interogare în adresa URL pentru a actualiza automat pagina: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterie</translation>
 <translation id="6232116551750539448">S-a pierdut conexiunea la <ph name="NAME" /></translation>
+<translation id="6235700927623181151">Această filă permite accesul la conținutul tău desktop.</translation>
 <translation id="6237816943013845465">Cu ajutorul acestei setări, poți să ajustezi rezoluția ecranului</translation>
 <translation id="6238923052227198598">Păstrează cea mai recentă notă pe ecranul de blocare</translation>
 <translation id="6239558157302047471">Reîncarcă &amp;cadrul</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Fișierul <ph name="FILE_NAME" /> nu este descărcat de obicei și ar putea fi periculos.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Imprimantă nouă în rețea}few{Imprimante noi în rețea}other{Imprimante noi în rețea}}</translation>
-<translation id="6286684120317096255">Utilizarea datelor este măsurată</translation>
 <translation id="6286708577777130801">Detalii privind parolele salvate</translation>
 <translation id="6287852322318138013">Selectați o aplicație pentru deschiderea acestui fișier</translation>
 <translation id="6289452883081499048">Servicii Google personalizate, precum Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Gestionează dispozitivele Cloud Print</translation>
 <translation id="6451689256222386810">Dacă ai uitat expresia de acces sau dorești să modifici această setare, <ph name="BEGIN_LINK" />resetează sincronizarea<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Respingeți</translation>
+<translation id="6455264371803474013">Pe anumite site-uri</translation>
 <translation id="6455894534188563617">Dosar &amp;nou</translation>
 <translation id="6456394469623773452">Bun</translation>
 <translation id="6456631036739229488">Telefonul Smart Lock s-a schimbat. Introdu parola pentru a actualiza Smart Lock. Data viitoare, telefonul tău va debloca dispozitivul <ph name="DEVICE_TYPE" />. Dezactivează Smart Lock din Setări.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Reîncarcă această pagină</translation>
 <translation id="6577284282025554716">Descărcare anulată: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Criptează parolele sincronizate folosind numele de utilizator și parola Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – Conținut desktop la care s-a permis accesul</translation>
 <translation id="6580151766480067746">Versiunea ARC</translation>
 <translation id="6581162200855843583">Link Disc Google</translation>
 <translation id="6582421931165117398">Pentru a proteja informațiile personale, schimbă parola acum. Pentru a putea modifica parola, trebuie să te conectezi.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Această aplicație poate împiedica funcționarea corectă a browserului Chrome.}few{Aceste aplicații pot împiedica funcționarea corectă a browserului Chrome.}other{Aceste aplicații pot împiedica funcționarea corectă a browserului Chrome.}}</translation>
 <translation id="7303900363563182677">Accesarea textului și a imaginilor copiate în clipboard de către acest site a fost blocată</translation>
 <translation id="730515362922783851">Fă schimb de date cu orice dispozitiv din rețeaua locală sau de pe internet</translation>
+<translation id="7307129035224081534">Întreruptă</translation>
 <translation id="7308002049209013926">Folosește Lansatorul pentru a accesa rapid noi aplicații și activități. Pentru a le accesa folosind tastatura, apasă Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Afișați &amp;comenzile</translation>
 <translation id="7310598146671372464">Conectarea nu a reușit. Serverul nu acceptă tipurile de criptare Kerberos specificate. Contactează administratorul.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Configurează conexiunea pe <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Fereastră pop-up blocată</translation>
 <translation id="7407430846095439694">Importă și asociază</translation>
-<translation id="7409233648990234464">Relansați și porniți Powerwash</translation>
 <translation id="7409836189476010449">să ruleze Flash</translation>
 <translation id="7410344089573941623">Întreabă dacă <ph name="HOST" /> solicită acces la camera și microfonul meu</translation>
 <translation id="741204030948306876">Da, accept</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Adresă URL de revocare a certificatului Netscape</translation>
 <translation id="7469894403370665791">Conectează-te automat la această rețea</translation>
 <translation id="747114903913869239">Eroare: extensia nu poate fi decodificată</translation>
+<translation id="7473753388963818366">Hai să-ți pregătim dispozitivul <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Nu, mulțumesc</translation>
 <translation id="747459581954555080">Restabilește-le pe toate</translation>
 <translation id="7475671414023905704">Adresă URL pentru parolă pierdută Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Adăugați un cont</translation>
 <translation id="7671130400130574146">Folosește bara de titlu și chenarele definite în sistem</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, în <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Trimite-ți vocea către Google pentru a permite dictarea în orice câmp de text.</translation>
 <translation id="7681095912841365527">Site-ul poate folosi Bluetooth</translation>
 <translation id="7683373461016844951">Pentru a continua, dă clic pe OK, apoi pe Adaugă o persoană pentru a crea un profil nou pentru adresa de e-mail <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Instalată de administrator</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Fila anterioară</translation>
 <translation id="7748626145866214022">Mai multe opțiuni disponibile în bara de acțiuni. Apasă pe Alt + A pentru a focaliza bara de acțiune.</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7751260505918304024">Afișați-le pe toate</translation>
 <translation id="7754704193130578113">Întreabă-mă unde se salvează fiecare fișier înainte de a-l descărca</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Aceasta este pagina Filă nouă pe care o așteptați?</translation>
 <translation id="786073089922909430">Serviciu: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Descărcări</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{un cookie}few{# cookie-uri}other{# de cookie-uri}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – asociat</translation>
 <translation id="7870730066603611552">Examinează opțiunile de sincronizare după configurare</translation>
 <translation id="7870790288828963061">Nu s-a găsit nicio aplicație de tip chioșc cu o versiune mai recentă. Nimic de actualizat. Scoate stickul USB.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Dezactivează sunetul filelor</translation>
 <translation id="8382913212082956454">Copiază adresa de &amp;e-mail</translation>
 <translation id="8386903983509584791">Scanarea s-a finalizat</translation>
+<translation id="8389492867173948260">Permite ca această extensie să citească și să modifice toate datele de pe site-urile pe care le accesezi:</translation>
 <translation id="8390449457866780408">Server indisponibil.</translation>
 <translation id="8391712576156218334">Imaginea nu este disponibilă. Încearcă din nou mai târziu.</translation>
 <translation id="8392234662362215700">Apasă tastele Control-Shift-Spațiu pentru a comuta aranjamentul tastaturii.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Vei fi deconectat(ă) peste <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Schimbă codul PIN pentru SIM</translation>
 <translation id="8434480141477525001">Port remediere NaCl</translation>
+<translation id="8435395510592618362">Confirmă-ți identitatea cu <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Salvează cardul de credit</translation>
 <translation id="8438328416656800239">Comută la un browser inteligent</translation>
 <translation id="8438566539970814960">Îmbunătățește căutările și navigarea</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Nevalid</translation>
 <translation id="8465444703385715657">Pluginul <ph name="PLUGIN_NAME" /> are nevoie de permisiunea ta pentru a rula</translation>
 <translation id="8466234950814670489">Arhivă .tar</translation>
+<translation id="8466417995783206254">Această filă redă un videoclip în modul picture-in-picture.</translation>
 <translation id="8468750959626135884">Deblochează dispozitivul <ph name="DEVICE_TYPE" /> folosind telefonul Android.</translation>
 <translation id="8470028084415844044">Pentru a accesa toate parolele pe toate dispozitivele, activează sincronizarea.</translation>
 <translation id="8470513973197838199">Parole salvate pentru <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Rulează acest plugin</translation>
 <translation id="8497219075884839166">Utilitare Windows</translation>
 <translation id="8498214519255567734">Mai multă comoditate când privești ecranul sau citești într-o lumină slabă</translation>
+<translation id="8498395510292172881">Continuă să citești în Chrome</translation>
 <translation id="8503813439785031346">Nume utilizator</translation>
 <translation id="850875081535031620">Nu s-a găsit software dăunător</translation>
 <translation id="8509646642152301857">Descărcarea dicționarului de verificare ortografică nu a reușit.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Încearcă din nou</translation>
 <translation id="8725178340343806893">Preferințe/Marcaje</translation>
 <translation id="8726206820263995930">Eroare la preluarea setărilor politicii de pe server: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Nu mai afișa acest mesaj</translation>
 <translation id="8727344521467137076">Ai software dăunător pe computer. Chrome îl elimină și îți va restabili setările pentru ca browserul să funcționeze normal din nou.</translation>
 <translation id="8730621377337864115">Terminat</translation>
 <translation id="8732030010853991079">Utilizați extensia dând clic pe această pictogramă.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Deschide linkul într-o filă &amp;nouă</translation>
 <translation id="9030515284705930323">Organizația nu a activat Magazinul Google Play pentru contul tău. Contactează administratorul pentru mai multe informații.</translation>
 <translation id="9033857511263905942">&amp;Inserați</translation>
+<translation id="9034924485347205037">Fișiere Linux</translation>
 <translation id="9035012421917565900">Articolele nu pot fi mutate înapoi în „<ph name="DESTINATION_NAME" />”, prin urmare, nu vei putea să anulezi această acțiune.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Afișează versiunea originală</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Se caută dispozitive Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – dispozitivul Bluetooth a fost conectat</translation>
 <translation id="9177499212658576372">În prezent, sunteți conectat la rețeaua <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Configurează Linux (Beta) pe dispozitivul <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Poate dura câteva minute. Se pornește containerul Linux.</translation>
 <translation id="9180380851667544951">Site-ul poate permite accesul la ecranul tău</translation>
 <translation id="9188441292293901223">Pentru a debloca acest dispozitiv <ph name="DEVICE_TYPE" />, actualizează-ți telefonul la o versiune Android mai nouă.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index c85e048..bc42461 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -564,7 +564,6 @@
 <translation id="1829192082282182671">&amp;Уменьшить</translation>
 <translation id="1830550083491357902">Вход не выполнен</translation>
 <translation id="1832511806131704864">Сведения о телефоне обновлены</translation>
-<translation id="1832685970989658809">Администратор отключил автозаполнение способов оплаты.</translation>
 <translation id="1834503245783133039">Не удалось скачать файл <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Удалить условия поиска</translation>
 <translation id="1838709767668011582">Сайт Google</translation>
@@ -941,7 +940,6 @@
 <translation id="2435457462613246316">Показать пароль</translation>
 <translation id="2436186046335138073">Использовать <ph name="HANDLER_HOSTNAME" /> для обработки ссылок типа "<ph name="PROTOCOL" />"?</translation>
 <translation id="2436707352762155834">Минимальные</translation>
-<translation id="2437139306601019091">Отслеживание расхода трафика прекращено</translation>
 <translation id="2440604414813129000">Просмотреть и&amp;сходный код</translation>
 <translation id="2445081178310039857">Требуется корневой каталог расширения.</translation>
 <translation id="2445484935443597917">Создать профиль</translation>
@@ -1879,7 +1877,6 @@
 <translation id="3855441664322950881">Упаковать расширение</translation>
 <translation id="3855676282923585394">Импорт закладок и настроек...</translation>
 <translation id="3856800405688283469">Выберите часовой пояс</translation>
-<translation id="3856921555429624101">Отслеживание расхода трафика прекращено</translation>
 <translation id="3857228364945137633">Благодаря Smart Lock вам не придется вводить пароль. Снимайте блокировку устройства <ph name="DEVICE_TYPE" /> с помощью телефона.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: синхронизация приостановлена</translation>
@@ -2250,7 +2247,6 @@
 <translation id="4508051413094283164">Открыть все в режиме инкогнито</translation>
 <translation id="4508265954913339219">Активация завершилась со сбоем</translation>
 <translation id="4508765956121923607">Исходный код страницы</translation>
-<translation id="4509823033118379431">Эти изображения сейчас недоступны. Чтобы посмотреть коллекции, подключитесь повторно.</translation>
 <translation id="451407183922382411">Технологии <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Создать контролируемый профиль.</translation>
 <translation id="4514610446763173167">Запустить или приостановить видео</translation>
@@ -2327,6 +2323,7 @@
 <translation id="4627442949885028695">Продолжить на другом устройстве</translation>
 <translation id="4628314759732363424">Изменить</translation>
 <translation id="4628757576491864469">Устройства</translation>
+<translation id="4628948037717959914">Фото</translation>
 <translation id="4630590996962964935">Недопустимый символ: $1</translation>
 <translation id="4631887759990505102">Исполнитель</translation>
 <translation id="4632483769545853758">Включить звук на вкладке</translation>
@@ -2512,7 +2509,6 @@
 <translation id="4905417359854579806">Файлы (<ph name="FILE_COUNT" />) готовы к сохранению</translation>
 <translation id="4907161631261076876">Этот файл скачивают редко. Возможно, он вредоносный.</translation>
 <translation id="4907306957610201395">Категория разрешения</translation>
-<translation id="4907824805858067479">Администратор отключил автозаполнение для карт</translation>
 <translation id="4908811072292128752">Откройте новую вкладку, чтобы перейти на другой сайт, не закрывая предыдущий</translation>
 <translation id="4909038193460299775">Ваш аккаунт управляется доменом <ph name="DOMAIN" />. Все закладки, история, пароли и настройки будут удалены с устройства, однако данные в аккаунте Google сохранятся. Вы можете просмотреть и изменить их в <ph name="BEGIN_LINK" />Личном кабинете Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Регистрация завершена</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5990386583461751448">Перевод</translation>
 <translation id="5991049340509704927">Увеличение</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить это приложение.}one{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}few{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}many{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}other{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}}</translation>
-<translation id="5993332328670040093">Расход трафика больше не отслеживается.</translation>
 <translation id="6002458620803359783">Голоса по умолчанию</translation>
 <translation id="6005695835120147974">Медиамаршрутизатор</translation>
 <translation id="6006484371116297560">Классическая</translation>
@@ -3424,7 +3419,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Файл <ph name="FILE_NAME" /> скачивают редко. Возможно, он вредоносный.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Новый принтер в сети}one{Новые принтеры в сети}few{Новые принтеры в сети}many{Новые принтеры в сети}other{Новые принтеры в сети}}</translation>
-<translation id="6286684120317096255">Расход трафика отслеживается</translation>
 <translation id="6286708577777130801">Данные сохраненного пароля</translation>
 <translation id="6287852322318138013">Выберите программу, в которой необходимо открыть этот файл</translation>
 <translation id="6289452883081499048">Вам доступна персонализация сервисов Google (например, Google Play).</translation>
@@ -4135,7 +4129,6 @@
 <translation id="7400839060291901923">Настройте соединение на устройстве <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Всплывающее окно заблокировано</translation>
 <translation id="7407430846095439694">Импортировать и подключить</translation>
-<translation id="7409233648990234464">Перезапустить и включить Powerwash</translation>
 <translation id="7409836189476010449">Запустить Flash</translation>
 <translation id="7410344089573941623">Запрашивать разрешение на доступ к камере и микрофону для сайта <ph name="HOST" /></translation>
 <translation id="741204030948306876">ОК</translation>
@@ -4989,7 +4982,6 @@
 <translation id="8725066075913043281">Повторить попытку</translation>
 <translation id="8725178340343806893">Избранное/Закладки</translation>
 <translation id="8726206820263995930">Ошибка при получении настроек политики с сервера: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Больше не показывать</translation>
 <translation id="8727344521467137076">На компьютере обнаружено вредоносное ПО. Chrome удалит его и восстановит настройки, чтобы вернуть браузер в обычное состояние.</translation>
 <translation id="8730621377337864115">Готово</translation>
 <translation id="8732030010853991079">Активируйте расширение, нажав на этот значок.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index 24aac5c..9a677a0c 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Spýtať sa pred pristupovaním</translation>
 <translation id="1434696352799406980">Týmto sa obnoví vaša stránka pri spustení, stránka na novej karte, vyhľadávač a pripnuté karty. Zakážu sa aj všetky rozšírenia a vymažú dočasné dáta, ako napríklad súbory cookie. Záložky, história a uložené heslá sa nevymažú.</translation>
 <translation id="1434886155212424586">Domovská stránka je stránka na novej karte</translation>
+<translation id="1436671784520050284">Pokračovať v nastavení</translation>
 <translation id="1436784010935106834">Odstránené</translation>
 <translation id="1438632560381091872">Obnoviť zvuk kariet</translation>
 <translation id="1442392616396121389">Predpona smerovania</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Kúsok pizzy</translation>
 <translation id="1467432559032391204">Doľava</translation>
 <translation id="1468571364034902819">Tento profil sa nedá použiť</translation>
+<translation id="1470533772306424441">Tieto aplikácie vám nainštalujeme. Ďalšie aplikácie pre svoje zariadenie nájdete v Obchode Play.</translation>
 <translation id="1470811252759861213">Ak chcete získať záložky na všetkých počítačoch, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Súbor <ph name="FILENAME" /> nebol nahraný. Na Disku Google nemáte dostatok voľného miesta.</translation>
 <translation id="1475502736924165259">V súbore máte certifikáty, ktoré sa nedajú zaradiť do žiadnej z iných kategórií:</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">&amp;Oddialiť</translation>
 <translation id="1830550083491357902">Neprihlásený/-á</translation>
 <translation id="1832511806131704864">Zmena telefónu bola aktualizovaná</translation>
-<translation id="1832685970989658809">Uložené spôsoby platby zakázal váš správca</translation>
 <translation id="1834503245783133039">Sťahovanie sa nepodarilo: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Vymazať vyhľadávanie</translation>
 <translation id="1838709767668011582">Web Google</translation>
@@ -794,6 +795,7 @@
 <translation id="2192505247865591433">Zdroj:</translation>
 <translation id="2193365732679659387">Nastavenie dôveryhodnosti</translation>
 <translation id="2195729137168608510">Ochrana e-mailu</translation>
+<translation id="2199298570273670671">Chyba</translation>
 <translation id="2200356397587687044">Chrome potrebuje na pokračovanie povolenie</translation>
 <translation id="220138918934036434">Skryť tlačidlo</translation>
 <translation id="2202898655984161076">Pri vytváraní zoznamu tlačiarní sa vyskytol problém. Niektoré z vašich tlačiarní možno nie sú v službe <ph name="CLOUD_PRINT_NAME" /> registrované.</translation>
@@ -943,10 +945,10 @@
 <translation id="2435457462613246316">Zobraziť heslo</translation>
 <translation id="2436186046335138073">Chcete povoliť obslužnému programu <ph name="HANDLER_HOSTNAME" /> otvárať všetky odkazy protokolu <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Minimálne</translation>
-<translation id="2437139306601019091">Meranie využitia dát bolo dokončené</translation>
 <translation id="2440604414813129000">&amp;Zobraziť zdrojový kód</translation>
 <translation id="2445081178310039857">Požaduje sa koreňový adresár rozšírenia.</translation>
 <translation id="2445484935443597917">Vytvoriť nový profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> chce overiť vašu totožnosť</translation>
 <translation id="2448312741937722512">Typ</translation>
 <translation id="2450223707519584812">Nebudete môcť pridať používateľov, pretože chýbajú kľúče rozhrania Google API. Podrobnosti si môžete prečítať na adrese <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Chcete vypnúť synchronizáciu a odhlásiť sa?</translation>
@@ -956,6 +958,7 @@
 <translation id="2453576648990281505">Súbor už existuje</translation>
 <translation id="2453860139492968684">Dokončiť</translation>
 <translation id="2454247629720664989">Kľúčové slovo</translation>
+<translation id="245661998428026871">Video v režime obraz v obraze sa prestane prehrávať.</translation>
 <translation id="2457246892030921239">Aplikácia <ph name="APP_NAME" /> chce kopírovať súbory z média <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID kľúča certifikačnej autority</translation>
 <translation id="2462752602710430187">Bolo pridané zariadenie: <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Obnoviť zvuk kariet</translation>
 <translation id="3053013834507634016">Použitie kľúča certifikátu</translation>
 <translation id="3057861065630527966">Zálohovať fotky a videá</translation>
+<translation id="3059313675706898490">Správy pre Android</translation>
 <translation id="3060379269883947824">Povoliť počúvanie vybraného textu</translation>
 <translation id="3061707000357573562">Služba opráv</translation>
 <translation id="3064410671692449875">Nedostatok dát</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Zabudli ste heslo?</translation>
 <translation id="3132996321662585180">Obnovovať denne</translation>
 <translation id="3135204511829026971">Otočiť obrazovku</translation>
+<translation id="313638818480447860">Našli sme niekoľko aplikácií (<ph name="NUMBER_OF_APPS" />) pripojených k vášmu účtu, ktoré sú optimalizované pre toto zariadenie.</translation>
 <translation id="313963229645891001">Sťahuje sa: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Predvolený žltý avatar</translation>
 <translation id="3140353188828248647">Zamerať na panel s adresou</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Kontrola pravopisu</translation>
 <translation id="3183139917765991655">Profile Importer</translation>
 <translation id="3184560914950696195">Do priečinka $1 nie je možné ukladať. Upravené obrázky sa uložia do priečinka Stiahnuté súbory</translation>
+<translation id="3188257591659621405">Moje súbory</translation>
 <translation id="3188465121994729530">Kĺzavý priemer</translation>
 <translation id="3190558889382726167">Heslo bolo uložené</translation>
 <translation id="3192947282887913208">Zvukové súbory</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Prebieha komprimovanie súboru <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Informácie o aplikácii</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – video sa prehráva v režime obraz v obraze</translation>
 <translation id="3335337277364016868">Rok nahrávky</translation>
 <translation id="3335947283844343239">Znova otvoriť zatvorenú kartu</translation>
 <translation id="3336664756920573711">Odomknite zariadenie <ph name="DEVICE_TYPE" /> pomocou telefónu s Androidom</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Tlač zlyhala. Skontrolujte tlačiareň a skúste to znova.</translation>
 <translation id="3364721542077212959">Nástroje pre dotykové pero</translation>
 <translation id="3365598184818502391">Použite Ctrl alebo Alt</translation>
+<translation id="3367047597842238025">Nastavte si zariadenie <ph name="DEVICE_TYPE" /> podľa svojich predstáv a objavte všetky úžasné možnosti, ktoré vám prináša.</translation>
 <translation id="3368922792935385530">Pripojené</translation>
 <translation id="3369624026883419694">Rozpoznávanie hostiteľa...</translation>
 <translation id="337286756654493126">Čítať priečinky, ktoré v aplikácii otvoríte</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Kliknite pravým tlačidlom myši na ikonu <ph name="SMALL_PRODUCT_LOGO" /> na paneli úloh</translation>
 <translation id="3391716558283801616">Karta 7</translation>
 <translation id="3396331542604645348">Vybratá tlačiareň nie je k dispozícii alebo nie je správne nainštalovaná. Skontrolujte ju alebo vyberte inú.</translation>
+<translation id="3396800784455899911">Kliknutím na tlačidlo „Súhlasím, pokračovať“ vyjadrujete súhlas so spracovaním uvedeným vyššie v rámci týchto služieb Googlu.</translation>
 <translation id="3399432415385675819">Upozornenia budú zakázané</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Pre tento web neboli uložené žiadne heslá</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Toto zariadenie nie je možné otvoriť, pretože jeho systém súborov nie je podporovaný.</translation>
 <translation id="3727148787322499904">Zmena tohto nastavenia ovplyvní všetky zdieľané siete</translation>
 <translation id="3727187387656390258">Kontrola kontextovej ponuky</translation>
+<translation id="3729506734996624908">Povolené weby</translation>
 <translation id="3732078975418297900">Chyba v riadku <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Server SSL s prestupom na vyššiu edíciu</translation>
+<translation id="3735740477244556633">Zoradiť podľa</translation>
 <translation id="3737274407993947948">Chyba pri inštalovaní systému Linux…</translation>
 <translation id="3737536731758327622">Tu sa zobrazia stiahnuté súbory</translation>
+<translation id="3738671331307774213">Overenie totožnosti pomáha chrániť vaše súkromné dáta</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Otvoriť <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Zariadenie <ph name="DEVICE_NAME" /> sa teraz zobrazí v Správcovskej konzole</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Získajte nástroje na vývoj webov, aplikácií pre Android atď. Inštaláciou systému Linux stiahnete <ph name="DOWNLOAD_SIZE" /> dát.</translation>
 <translation id="385051799172605136">Naspäť</translation>
 <translation id="3851428669031642514">Načítať nebezpečné skripty</translation>
+<translation id="3854599674806204102">Vyberte požadovanú možnosť</translation>
 <translation id="3855441664322950881">Zbaliť rozšírenie</translation>
 <translation id="3855676282923585394">Importovať záložky a nastavenia...</translation>
 <translation id="3856800405688283469">Výber časového pásma</translation>
-<translation id="3856921555429624101">Meranie využitia dát bolo dokončené</translation>
 <translation id="3857228364945137633">Skúste pomocou funkcie Smart Lock odomknúť svoje zariadenie <ph name="DEVICE_TYPE" /> bez hesla, keď máte telefón v blízkosti.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: synchronizácia je pozastavená</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Otvoriť všetky v okne inkognito</translation>
 <translation id="4508265954913339219">Aktivácia zlyhala</translation>
 <translation id="4508765956121923607">&amp;Zobraziť zdrojový kód</translation>
-<translation id="4509823033118379431">Obrázky sú momentálne nedostupné. Ak si chcete zobraziť zbierky, znova sa pripojte.</translation>
 <translation id="451407183922382411">Používa technológiu <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Nastavenie nového kontrolovaného používateľa</translation>
 <translation id="4514610446763173167">Prepnutím prehráte alebo pozastavíte video</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Pokračovať na inom zariadení</translation>
 <translation id="4628314759732363424">Zmeniť...</translation>
 <translation id="4628757576491864469">Zariadenia</translation>
+<translation id="4628948037717959914">Fotografia</translation>
 <translation id="4630590996962964935">Neplatný znak: $1</translation>
 <translation id="4631887759990505102">Interpret</translation>
 <translation id="4632483769545853758">Obnoviť zvuk karty</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Môžete začať zálohovať (počet: <ph name="FILE_COUNT" />)</translation>
 <translation id="4907161631261076876">Tento súbor sa bežne nesťahuje a môže byť nebezpečný.</translation>
 <translation id="4907306957610201395">Kategória povolení</translation>
-<translation id="4907824805858067479">Uložené karty zakázal váš správca</translation>
 <translation id="4908811072292128752">Otvorte novú kartu a prehliadajte dva weby súčasne</translation>
 <translation id="4909038193460299775">Keďže tento účet spravuje doména <ph name="DOMAIN" />, budú z tohto zariadenia vymazané vaše záložky, história, heslá a ďalšie nastavenia. Vaše údaje však zostanú uložené v účte Google a môžete ich spravovať pomocou panela <ph name="BEGIN_LINK" />Google Dashboard<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Vaša registrácia bola úspešná</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Ročná</translation>
 <translation id="4957949153200969297">Povolenie iba tých funkcií, ktoré súvisia so synchronizáciou prehliadača <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Všetky karty na jednom mieste</translation>
 <translation id="496226124210045887">Vybratý priečinok obsahuje citlivé súbory. Naozaj chcete aplikácii $1 povoliť trvalý prístup na čítanie pre tento priečinok?</translation>
 <translation id="4964455510556214366">Usporiadanie</translation>
 <translation id="4964673849688379040">Prebieha kontrola...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Pridať rozšírenie</translation>
 <translation id="5029568752722684782">Vymazať kópiu</translation>
 <translation id="5030338702439866405">Vydavateľ</translation>
+<translation id="503155457707535043">Sťahujú sa aplikácie</translation>
 <translation id="503498442187459473"><ph name="HOST" /> chce použiť váš fotoaparát a mikrofón</translation>
 <translation id="5036662165765606524">Nepovoliť žiadnym stránkam automaticky sťahovať viacero súborov súčasne</translation>
 <translation id="5037676449506322593">Vybrať všetko</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Vypnúť zvuk</translation>
 <translation id="5785583009707899920">Nástroje pre súbor Chromu</translation>
 <translation id="5787146423283493983">Odsúhlasenie kľúča</translation>
+<translation id="5788127256798019331">Súbory Play</translation>
 <translation id="5788367137662787332">Je nám ľúto, ale nepodarilo sa pripojiť minimálne jeden oddiel zariadenia <ph name="DEVICE_LABEL" />.</translation>
 <translation id="5794414402486823030">Vždy otvárať pomocou systémového zobrazovača</translation>
 <translation id="5794786537412027208">Ukončiť všetky aplikácie Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Preložené</translation>
 <translation id="5991049340509704927">Zväčšenie</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie tejto aplikácie.}few{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}many{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}other{Ak chcete zaistiť, že aj naďalej budete môcť prehliadať internet, požiadajte správcu o odstránenie týchto aplikácií.}}</translation>
-<translation id="5993332328670040093">Vaše využitie údajov sa už nebude ďalej merať.</translation>
 <translation id="6002458620803359783">Preferované hlasy</translation>
 <translation id="6005695835120147974">Smerovač médií</translation>
 <translation id="6006484371116297560">Klasický</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Vybrať certifikát</translation>
 <translation id="6181431612547969857">Stiahnutie bolo zablokované</translation>
 <translation id="6185132558746749656">Poloha zariadenia</translation>
+<translation id="6185617499004995178">Nástroj na overenie CUPS IPP</translation>
 <translation id="6185696379715117369">Posunúť o stránku nahor</translation>
 <translation id="6189273858858366896">Nastaviť alebo spravovať zdieľanie súborov v sieti</translation>
 <translation id="6189412234224385711">Otvoriť pomocou rozšírenia <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Pridajte do webovej adresy parameter dopytu na automatickú aktualizáciu stránky: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batéria</translation>
 <translation id="6232116551750539448">Pripojenie k sieti <ph name="NAME" /> bolo prerušené</translation>
+<translation id="6235700927623181151">Táto karta zdieľa obsah vašej pracovnej plochy.</translation>
 <translation id="6237816943013845465">Umožňuje nastaviť rozlíšenie obrazovky</translation>
 <translation id="6238923052227198598">Zobrazovať poslednú poznámku na uzamknutej obrazovke</translation>
 <translation id="6239558157302047471">Znova načítať prvok &amp;frame</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Súbor <ph name="FILE_NAME" /> sa bežne nesťahuje a môže byť nebezpečný.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nová tlačiareň v sieti}few{Nové tlačiarne v sieti}many{Nové tlačiarne v sieti}other{Nové tlačiarne v sieti}}</translation>
-<translation id="6286684120317096255">Meria sa využitie údajov</translation>
 <translation id="6286708577777130801">Podrobnosti uloženého hesla</translation>
 <translation id="6287852322318138013">Vyberte aplikáciu na otvorenie tohto súboru</translation>
 <translation id="6289452883081499048">Prispôsobené služby Googlu ako Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Spravovať zariadenia služby Cloud Print</translation>
 <translation id="6451689256222386810">Ak ste zabudli prístupovú frázu alebo chcete toto nastavenie zmeniť, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Odmietnuť</translation>
+<translation id="6455264371803474013">Na konkrétnych weboch</translation>
 <translation id="6455894534188563617">&amp;Nový priečinok</translation>
 <translation id="6456394469623773452">Dobré</translation>
 <translation id="6456631036739229488">Zmenil sa telefón priradený k funkcii Smart Lock. Ak chcete Smart Lock aktualizovať, zadajte heslo. Zariadenie <ph name="DEVICE_TYPE" /> nabudúce odomknete telefónom. Smart Lock môžete vypnúť v Nastaveniach.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Obnoviť túto stránku</translation>
 <translation id="6577284282025554716">Sťahovanie bolo zrušené: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifrovať synchronizované heslá pomocou používateľského mena a hesla Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – bol zdieľaný obsah pracovnej plochy</translation>
 <translation id="6580151766480067746">Verzia ARC</translation>
 <translation id="6581162200855843583">Odkaz na službu Disk Google</translation>
 <translation id="6582421931165117398">Zmeňte si ihneď heslo a ochráňte tak svoje osobné informácie. Skôr ako ho budete môcť zmeniť, zobrazí sa výzva na prihlásenie.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Táto aplikácia môže brániť Chromu v správnom fungovaní.}few{Tieto aplikácie môžu brániť Chromu v správnom fungovaní.}many{Tieto aplikácie môžu brániť Chromu v správnom fungovaní.}other{Tieto aplikácie môžu brániť Chromu v správnom fungovaní.}}</translation>
 <translation id="7303900363563182677">Tomuto webu bolo zablokované zobrazenie textu a obrázkov skopírovaných do schránky</translation>
 <translation id="730515362922783851">Vymieňať údaje s ktorýmkoľvek zariadením v miestnej sieti alebo na internete</translation>
+<translation id="7307129035224081534">Pozastavená</translation>
 <translation id="7308002049209013926">Pomocou spúšťača sa rýchlo dostanete k novým aplikáciám a činnostiam. Ak sem chcete prejsť pomocou klávesnice, stlačte klávesy Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Zobraziť &amp;ovládacie prvky</translation>
 <translation id="7310598146671372464">Nepodarilo sa prihlásiť. Server nepodporuje stanovené typy šifrovania Kerberos. Kontaktujte správcu.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Nastavenie pripojenia v telefóne <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Kontextové okno bolo zablokované</translation>
 <translation id="7407430846095439694">Importovať a spojiť</translation>
-<translation id="7409233648990234464">Znova spustiť a použiť funkciu Powerwash</translation>
 <translation id="7409836189476010449">spustiť obsah vo formáte Flash</translation>
 <translation id="7410344089573941623">Opýtať sa, ak stránky <ph name="HOST" /> chcú pristupovať ku kamere a mikrofónu</translation>
 <translation id="741204030948306876">Áno, súhlasím</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Netscape – webová adresa pre zrušenie certifikátu</translation>
 <translation id="7469894403370665791">Automaticky sa pripojiť k tejto sieti</translation>
 <translation id="747114903913869239">Chyba: Nepodarilo sa dekódovať rozšírenie</translation>
+<translation id="7473753388963818366">Príprava zariadenia <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Nie, ďakujem</translation>
 <translation id="747459581954555080">Obnoviť všetko</translation>
 <translation id="7475671414023905704">Netscape – webová adresa pre zabudnuté heslo</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Pridať účet</translation>
 <translation id="7671130400130574146">Použiť záhlavie a orámovanie okna systému</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> na stránke <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Odošlite svoj hlas do Googlu a umožnite tak diktovanie do všetkých textových polí.</translation>
 <translation id="7681095912841365527">Web môže používať Bluetooth</translation>
 <translation id="7683373461016844951">Ak chcete pokračovať, kliknite na OK a potom kliknutím na možnosť Pridať osobu vytvorte nový profil pre svoju e-mailovú adresu v doméne <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Nainštalované vaším správcom</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Štandardne</translation>
 <translation id="7748528009589593815">Predchádzajúca karta</translation>
 <translation id="7748626145866214022">Ďalšie možnosti sú k dispozícii na paneli akcií. Prejdete na neho stlačením klávesov Alt + A.</translation>
+<translation id="7750228210027921155">Obraz v obraze</translation>
 <translation id="7751260505918304024">Zobraziť všetky</translation>
 <translation id="7754704193130578113">Pred každým sťahovaním sa spýtať, kam uložiť súbor</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Je toto stránka na novej karte, ktorú ste čakali?</translation>
 <translation id="786073089922909430">Služba: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Stiahnuté</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 súbor cookie}few{# súbory cookie}many{# cookies}other{# súborov cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – spárované</translation>
 <translation id="7870730066603611552">Po nastavení prezrieť možnosti synchronizácie</translation>
 <translation id="7870790288828963061">Nenašli sa žiadne aplikácie Kiosku s novšou verziou. Nie je čo aktualizovať. Odoberte kľúč USB.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Stlmiť karty</translation>
 <translation id="8382913212082956454">Kopírovať &amp;e-mailovú adresu</translation>
 <translation id="8386903983509584791">Vyhľadávanie bolo dokončené</translation>
+<translation id="8389492867173948260">Umožniť tomuto rozšíreniu čítať a meniť všetky dáta na navštevovaných weboch:</translation>
 <translation id="8390449457866780408">Server je nedostupný.</translation>
 <translation id="8391712576156218334">Obrázok nie je k dispozícii. Skúste to znova neskôr.</translation>
 <translation id="8392234662362215700">Rozloženie klávesnice zmeníte stlačením klávesov Ctrl + Shift + medzerník.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Odhlásenie prebehne o <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Zmena kódu PIN pre SIM kartu</translation>
 <translation id="8434480141477525001">Port ladenia klienta NaCl</translation>
+<translation id="8435395510592618362">Overenie totožnosti pomocou aplikácie <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Uloženie kreditnej karty</translation>
 <translation id="8438328416656800239">Prepnite na inteligentný prehliadač</translation>
 <translation id="8438566539970814960">Zlepšovať vyhľadávania a prehliadanie</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Neplatné</translation>
 <translation id="8465444703385715657">Doplnok <ph name="PLUGIN_NAME" /> potrebuje na spustenie vaše povolenie</translation>
 <translation id="8466234950814670489">Archív vo formáte Tar</translation>
+<translation id="8466417995783206254">Táto karta prehráva video v režime obraz v obraze.</translation>
 <translation id="8468750959626135884">Odomknite zariadenie <ph name="DEVICE_TYPE" /> pomocou telefónu s Androidom.</translation>
 <translation id="8470028084415844044">Ak chcete získať svoje heslá vo všetkých zariadeniach, zapnite synchronizáciu.</translation>
 <translation id="8470513973197838199">Uložené heslá pre <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Spustenie tohto doplnku</translation>
 <translation id="8497219075884839166">Nástroje systému Windows</translation>
 <translation id="8498214519255567734">Obrazovka bude pri tlmenom osvetlení menej rušivá aj čitateľnejšia</translation>
+<translation id="8498395510292172881">Pokračovať v čítaní v Chrome</translation>
 <translation id="8503813439785031346">Meno používateľa</translation>
 <translation id="850875081535031620">Nenašiel sa žiadny škodlivý softvér</translation>
 <translation id="8509646642152301857">Sťahovanie slovníka na kontrolu pravopisu zlyhalo.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Skúsiť znova</translation>
 <translation id="8725178340343806893">Obľúbené položky či záložky</translation>
 <translation id="8726206820263995930">Pri načítavaní nastavení pravidla zo servera sa vyskytla chyba: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Viac nezobrazovať</translation>
 <translation id="8727344521467137076">V počítači máte škodlivý softvér. Chrome ho odstraňuje. Vaše nastavenia uloží, aby prehliadač znova normálne fungoval.</translation>
 <translation id="8730621377337864115">Hotovo</translation>
 <translation id="8732030010853991079">Toto rozšírenie použijete kliknutím na túto ikonu.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Otvoriť odkaz na novej &amp;karte</translation>
 <translation id="9030515284705930323">Vaša organizácia nepovoľuje vo vašom účte Obchod Google Play. Ak chcete získať ďalšie informácie, kontaktujte svojho správcu.</translation>
 <translation id="9033857511263905942">&amp;Prilepiť</translation>
+<translation id="9034924485347205037">Súbory systému Linux</translation>
 <translation id="9035012421917565900">Položky sa nedajú presunúť späť do cieľa <ph name="DESTINATION_NAME" />, takže túto akciu nebude možné vrátiť späť.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Zobraziť originál</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Vyhľadávajú sa zariadenia Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bolo pripojené zariadenie Bluetooth</translation>
 <translation id="9177499212658576372">Momentálne ste pripojený/-á k sieti <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Nastavenie systému Linux (Beta) v zariadení <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Tento proces môže trvať niekoľko minút. Spúšťa sa kontajner systému Linux.</translation>
 <translation id="9180380851667544951">Web môže zdieľať vašu obrazovku</translation>
 <translation id="9188441292293901223">Ak chcete odomknúť toto zariadenie <ph name="DEVICE_TYPE" />, aktualizujte svoj telefón na novšiu verziu Androidu.</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index d1b4601..9c0ae49 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Vprašaj pred dostopom</translation>
 <translation id="1434696352799406980">S tem bodo ponastavljeni začetna stran, stran »Nov zavihek«, iskalnik in pripeti zavihki. Prav tako bodo onemogočene vse razširitve in izbrisani bodo začasni podatki, kot so piškotki. Zaznamki, zgodovina in shranjena gesla ne bodo izbrisani.</translation>
 <translation id="1434886155212424586">Domača stran je nov zavihek s povezavami</translation>
+<translation id="1436671784520050284">Nadaljuj nastavitev</translation>
 <translation id="1436784010935106834">Odstranjeno</translation>
 <translation id="1438632560381091872">Vklop zvoka zavihkov</translation>
 <translation id="1442392616396121389">Predpona za usmerjanje</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Rezina pice</translation>
 <translation id="1467432559032391204">V levo</translation>
 <translation id="1468571364034902819">Tega profila ni mogoče uporabiti</translation>
+<translation id="1470533772306424441">Namestili bomo te aplikacije. Več aplikacij za napravo je na voljo v Trgovini Play.</translation>
 <translation id="1470811252759861213">Če želite dostopati do razširitev v vseh računalnikih, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Datoteka »<ph name="FILENAME" />« ni bila naložena. V Googlu Drive nimate dovolj razpoložljivega prostora.</translation>
 <translation id="1475502736924165259">V dokumentu so potrdila, ki ne sodijo v nobeno od drugih kategorij</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Poma&amp;njšaj</translation>
 <translation id="1830550083491357902">Niste prijavljeni</translation>
 <translation id="1832511806131704864">Sprememba telefona posodobljena</translation>
-<translation id="1832685970989658809">Skrbnik je onemogočil shranjena plačilna sredstva</translation>
 <translation id="1834503245783133039">Prenos ni uspel: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Čiščenje iskanja</translation>
 <translation id="1838709767668011582">Googlovo spletno mesto</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Iz:</translation>
 <translation id="2193365732679659387">Nastavitve zaupanja</translation>
 <translation id="2195729137168608510">E-poštna zaščita</translation>
+<translation id="2199298570273670671">Napaka</translation>
 <translation id="2200356397587687044">Chrome potrebuje dovoljenje za nadaljevanje</translation>
 <translation id="220138918934036434">Skrij gumb</translation>
 <translation id="2202898655984161076">Težava pri prikazu tiskalnikov. Nekateri od vaših tiskalnikov morda niso uspešno registrirani v storitvi <ph name="CLOUD_PRINT_NAME" /></translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Pokaži geslo</translation>
 <translation id="2436186046335138073">Dovoli gostitelju <ph name="HANDLER_HOSTNAME" /> odpreti vse povezave za <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Najmanj</translation>
-<translation id="2437139306601019091">Merjenje porabe podatkov je končano</translation>
 <translation id="2440604414813129000">Ogled v&amp;ira</translation>
 <translation id="2445081178310039857">Potreben je korenski imenik razširitve.</translation>
 <translation id="2445484935443597917">Ustvari nov profil</translation>
+<translation id="2446585455334014596">Aplikacija <ph name="APP_NAME" /> želi preveriti vašo identiteto</translation>
 <translation id="2448312741937722512">Vrsta</translation>
 <translation id="2450223707519584812">Uporabnikov ne boste mogli dodati, ker manjkajo ključi Googlovega API-ja. Za podrobnosti obiščite <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Želite izklopiti sinhronizacijo in se odjaviti?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Datoteka že obstaja</translation>
 <translation id="2453860139492968684">Dokončaj</translation>
 <translation id="2454247629720664989">Ključna beseda</translation>
+<translation id="245661998428026871">Videoposnetek v načinu slike v sliki se bo nehal predvajati.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> želi kopirati datoteke z nosilca <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ID ključa overitelja potrdil</translation>
 <translation id="2462752602710430187">Dodano: <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Vklop zvoka zavihkov</translation>
 <translation id="3053013834507634016">Raba ključa potrdila</translation>
 <translation id="3057861065630527966">Varnostno kopiranje fotografij videoposnetkov</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Omogoči storitev Izberite in poslušajte</translation>
 <translation id="3061707000357573562">Storitev za popravke</translation>
 <translation id="3064410671692449875">Nezadostni podatki</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Ste pozabili geslo?</translation>
 <translation id="3132996321662585180">Dnevno osveževanje</translation>
 <translation id="3135204511829026971">Zasuk zaslona</translation>
+<translation id="313638818480447860">Odkrili smo toliko aplikacij, povezanih z računom, ki so optimizirane za to napravo: <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="313963229645891001">Prenašanje, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Privzeti rumeni avatar</translation>
 <translation id="3140353188828248647">Preklopi na naslovno vrstico</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Preverjanje črkovanja</translation>
 <translation id="3183139917765991655">Uvoznik profilov</translation>
 <translation id="3184560914950696195">V $1 ni mogoče shranjevati. Spremenjene slike bodo shranjene v mapo »Prenosi«.</translation>
+<translation id="3188257591659621405">Moje datoteke</translation>
 <translation id="3188465121994729530">Drseče povprečje</translation>
 <translation id="3190558889382726167">Geslo je shranjeno</translation>
 <translation id="3192947282887913208">Zvočne datoteke</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Stiskanje datoteke <ph name="FILE_NAME" /> ...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Podatki o aplikaciji</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – videoposnetek se predvaja v načinu slike v sliki</translation>
 <translation id="3335337277364016868">Leto snemanja</translation>
 <translation id="3335947283844343239">Znova odpri zaprt zavihek</translation>
 <translation id="3336664756920573711">Odklenite napravo <ph name="DEVICE_TYPE" /> s telefonom Android.</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Tiskanje ni uspelo. Preverite tiskalnik in poskusite znova.</translation>
 <translation id="3364721542077212959">Orodja pisala</translation>
 <translation id="3365598184818502391">Uporabite Ctrl ali Alt</translation>
+<translation id="3367047597842238025">Nastavite napravo <ph name="DEVICE_TYPE" /> po željah in odkrijte izjemne zmogljivosti na dosegu prstov.</translation>
 <translation id="3368922792935385530">Povezano</translation>
 <translation id="3369624026883419694">Razrešujem gostitelja ...</translation>
 <translation id="337286756654493126">Branje map, ki jih odprete v aplikaciji</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Z desnim miškinim gumbom kliknite ikono za <ph name="SMALL_PRODUCT_LOGO" /> v opravilni vrstici</translation>
 <translation id="3391716558283801616">Zavihek 7</translation>
 <translation id="3396331542604645348">Izbrani tiskalnik ni na voljo ali ni pravilno nameščen. Preverite tiskalnik ali izberite drugega.</translation>
+<translation id="3396800784455899911">Če kliknete gumb »Sprejmi in nadaljuj«, se strinjate z obdelavo, ki je opisana zgoraj za te Googlove storitve.</translation>
 <translation id="3399432415385675819">Obvestila bodo onemogočena</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Za to spletno mesto ni shranjenih gesel</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Naprave ni mogoče odpreti, ker njen datotečni sistem ni podprt.</translation>
 <translation id="3727148787322499904">Sprememba te nastavitve vpliva na vsa omrežja v skupni rabi</translation>
 <translation id="3727187387656390258">Preglej pojavno okno</translation>
+<translation id="3729506734996624908">Dovoljena spletna mesta</translation>
 <translation id="3732078975418297900">Napaka v vrstici <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Strežnik SSL z nadgradnjo</translation>
+<translation id="3735740477244556633">Razvrsti po</translation>
 <translation id="3737274407993947948">Napaka pri nameščanju Linuxa …</translation>
 <translation id="3737536731758327622">Tu so prikazani prenosi</translation>
+<translation id="3738671331307774213">Če preverite identiteto, bodo vaši zasebni podatki na varnem</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Želite odpreti aplikacijo <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Naprava <ph name="DEVICE_NAME" /> bo zdaj vidna v skrbniški konzoli</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Prenesite orodja za razvoj spletnih mest, aplikacij za Android in drugega. Ob namestitvi Linuxa bo prenesenih <ph name="DOWNLOAD_SIZE" /> podatkov.</translation>
 <translation id="385051799172605136">Nazaj</translation>
 <translation id="3851428669031642514">Naloži skripte, ki niso varni</translation>
+<translation id="3854599674806204102">Izberite možnost</translation>
 <translation id="3855441664322950881">Zapakiraj razširitev</translation>
 <translation id="3855676282923585394">Uvoz zaznamkov in nastavitev ...</translation>
 <translation id="3856800405688283469">Izbira časovnega pasu</translation>
-<translation id="3856921555429624101">Merjenje porabe podatkov je končano</translation>
 <translation id="3857228364945137633">Preskusite Smart Lock za odklepanje naprave <ph name="DEVICE_TYPE" /> brez gesla, ko je telefon v bližini.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: sinhronizacija je zaustavljena</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Odpiranje vseh v oknu brez beleženja zgodovine</translation>
 <translation id="4508265954913339219">Aktiviranje ni uspelo</translation>
 <translation id="4508765956121923607">Prikaz &amp;izvorne kode</translation>
-<translation id="4509823033118379431">Slike trenutno niso na voljo. Znova vzpostavite povezavo, če si želite ogledati zbirke.</translation>
 <translation id="451407183922382411">Uporablja tehnologijo <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Nastavi novega zaščitenega uporabnika</translation>
 <translation id="4514610446763173167">Preklop med predvajanjem in zaustavitvijo videa</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Nadaljevanje iz druge naprave</translation>
 <translation id="4628314759732363424">Spremeni ...</translation>
 <translation id="4628757576491864469">Naprave</translation>
+<translation id="4628948037717959914">Fotografija</translation>
 <translation id="4630590996962964935">Neveljaven znak: $1</translation>
 <translation id="4631887759990505102">Izvajalec</translation>
 <translation id="4632483769545853758">Vklop zvoka zavihka</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Pripravljeno za varnostno kopiranje: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Datoteka ni pogosto prenesena in je lahko nevarna.</translation>
 <translation id="4907306957610201395">Kategorija dovoljenj</translation>
-<translation id="4907824805858067479">Skrbnik je onemogočil shranjene kartice</translation>
 <translation id="4908811072292128752">Odprite nov zavihek, če želite brskati na dveh spletnih mestih hkrati</translation>
 <translation id="4909038193460299775">Ta račun upravlja domena <ph name="DOMAIN" />, zato bodo vaši zaznamki, zgodovina, gesla in druge nastavitve izbrisani iz te naprave. Vaši podatki bodo kljub temu še naprej shranjeni v Google Računu in jih bo mogoče upravljati na <ph name="BEGIN_LINK" />Google Nadzorni plošči<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Uspešno ste včlanjeni</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Letna</translation>
 <translation id="4957949153200969297">Omogočite samo funkcije, ki so povezane s Sinhronizacijo za <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Vse kartice na enem mestu</translation>
 <translation id="496226124210045887">V mapi, ki ste jo izbrali, so občutljive datoteke. Ali ste prepričani, da želite »$1« podeliti trajen dostop za branje za to mapo?</translation>
 <translation id="4964455510556214366">Razvrstitev</translation>
 <translation id="4964673849688379040">Preverjanje ...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Dodaj razširitev</translation>
 <translation id="5029568752722684782">Počisti kopijo</translation>
 <translation id="5030338702439866405">Izdajatelj</translation>
+<translation id="503155457707535043">Prenašanje aplikacij</translation>
 <translation id="503498442187459473"><ph name="HOST" /> želi uporabiti kamero in mikrofon</translation>
 <translation id="5036662165765606524">Nobenemu spletnemu mestu ne dovoli samodejnega prenosa več datotek</translation>
 <translation id="5037676449506322593">Izberi vse</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Izklopi zvok</translation>
 <translation id="5785583009707899920">Chromova orodja za datoteke</translation>
 <translation id="5787146423283493983">Pogodba o ključu</translation>
+<translation id="5788127256798019331">Datoteke iz Googla Play</translation>
 <translation id="5788367137662787332">Vsaj ene particije v napravi <ph name="DEVICE_LABEL" /> ni bilo mogoče vpeti.</translation>
 <translation id="5794414402486823030">Vedno odpri s sistemskim pregledovalnikom</translation>
 <translation id="5794786537412027208">Zapri vse aplikacije za Chrome</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Prevedeno</translation>
 <translation id="5991049340509704927">Povečava</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani to aplikacijo.}one{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}two{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}few{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}other{Če želite zagotoviti, da boste lahko še naprej brskali po spletu, prosite skrbnika, da odstrani te aplikacije.}}</translation>
-<translation id="5993332328670040093">Poraba podatkov se ne bo več merila.</translation>
 <translation id="6002458620803359783">Prednostni glasovi</translation>
 <translation id="6005695835120147974">Predstavnostni usmerjevalnik</translation>
 <translation id="6006484371116297560">Klasična</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Izberite potrdilo</translation>
 <translation id="6181431612547969857">Prenos je bil blokiran</translation>
 <translation id="6185132558746749656">Lokacija naprave</translation>
+<translation id="6185617499004995178">Orodje CUPS IPP Validator</translation>
 <translation id="6185696379715117369">Stran gor</translation>
 <translation id="6189273858858366896">Nastavitev ali upravljanje omrežnih naprav za skupno rabo datotek.</translation>
 <translation id="6189412234224385711">Odpiranje z: <ph name="EXTENSION_NAME" /></translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Če želite, da se stran samodejno osveži, v URL-ju dodajte parameter iskalne poizvedbe: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Baterija</translation>
 <translation id="6232116551750539448">Povezava z omrežjem <ph name="NAME" /> je prekinjena</translation>
+<translation id="6235700927623181151">Ta zavihek souporablja vsebino namizja.</translation>
 <translation id="6237816943013845465">Omogoča prilagajanje ločljivosti zaslona</translation>
 <translation id="6238923052227198598">Najnovejši zapisek naj bo prikazan na zaklenjenem zaslonu</translation>
 <translation id="6239558157302047471">Znova naloži &amp;okvir</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Datoteka <ph name="FILE_NAME" /> ni pogosto prenesena in je lahko nevarna.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Nov tiskalnik v vašem omrežju}one{Novi tiskalniki v vašem omrežju}two{Novi tiskalniki v vašem omrežju}few{Novi tiskalniki v vašem omrežju}other{Novi tiskalniki v vašem omrežju}}</translation>
-<translation id="6286684120317096255">Poraba podatkov se meri</translation>
 <translation id="6286708577777130801">Podrobnosti shranjenih gesel</translation>
 <translation id="6287852322318138013">Izberite aplikacijo za odpiranje te datoteke</translation>
 <translation id="6289452883081499048">Prilagojene Googlove storitve, kot je Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Upravljanje naprav za Google Tiskanje v oblaku</translation>
 <translation id="6451689256222386810">Če ste pozabili geslo ali želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Zavrni</translation>
+<translation id="6455264371803474013">Na določenih spletnih mestih</translation>
 <translation id="6455894534188563617">&amp;Nova mapa</translation>
 <translation id="6456394469623773452">Dober</translation>
 <translation id="6456631036739229488">Telefon za Smart Lock je spremenjen. Vnesite geslo, če želite posodobiti Smart Lock. Naslednjič bo telefon odklenil napravo <ph name="DEVICE_TYPE" />. Smart Lock lahko izklopite v nastavitvah.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">Znov&amp;a naloži to stran</translation>
 <translation id="6577284282025554716">Prenos preklican: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Šifriraj sinhronizirana gesla z uporabniškim imenom in geslom za Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – vsebina namizja v skupni rabi</translation>
 <translation id="6580151766480067746">Različica ARC</translation>
 <translation id="6581162200855843583">Povezava Google Drive</translation>
 <translation id="6582421931165117398">Zaradi zaščite osebnih podatkov spremenite geslo. Preden lahko spremenite geslo, boste pozvani, da se prijavite.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ta aplikacija bi lahko Chromu preprečila normalno delovanje.}one{Te aplikacije bi lahko Chromu preprečile normalno delovanje.}two{Te aplikacije bi lahko Chromu preprečile normalno delovanje.}few{Te aplikacije bi lahko Chromu preprečile normalno delovanje.}other{Te aplikacije bi lahko Chromu preprečile normalno delovanje.}}</translation>
 <translation id="7303900363563182677">Temu spletnemu mestu je preprečen ogled besedila in slik, shranjenih v odložišče</translation>
 <translation id="730515362922783851">Izmenjava podatkov s poljubno napravo v lokalnem omrežju ali internetu</translation>
+<translation id="7307129035224081534">Zaustavljeno</translation>
 <translation id="7308002049209013926">Zaganjalnik omogoča hiter dostop do novih aplikacij in dejavnosti. Če želite dostopati s tipkovnico, pritisnite Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Pokaži &amp;kontrolnike</translation>
 <translation id="7310598146671372464">Prijava ni uspela. Strežnik ne podpira navedenih vrst šifriranja Kerberos. Obrnite se na skrbnika.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Nastavitev povezave v telefonu <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Pojavno okno je blokirano</translation>
 <translation id="7407430846095439694">Uvoz in vezava</translation>
-<translation id="7409233648990234464">Vnovični zagon in Powerwash</translation>
 <translation id="7409836189476010449">izvajati Flash</translation>
 <translation id="7410344089573941623">Vprašaj, če <ph name="HOST" /> zahteva dostop do kamere in mikrofona</translation>
 <translation id="741204030948306876">Da, sem za</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">Spletni naslov ukinjenega Netscapeovega potrdila</translation>
 <translation id="7469894403370665791">Samodejno vzpostavi povezavo s tem omrežjem</translation>
 <translation id="747114903913869239">Napaka: Razširitve ni bilo mogoče dekodirati</translation>
+<translation id="7473753388963818366">Pripravimo napravo <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Ne, hvala</translation>
 <translation id="747459581954555080">Obnovi vse</translation>
 <translation id="7475671414023905704">Spletni naslov izgubljenega Netscapeovega gesla</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Dodaj račun</translation>
 <translation id="7671130400130574146">Uporabi sistemsko naslovno vrstico in obrobe</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, na strani storitve <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Pošljite glas Googlu, če želite omogočiti narekovanje v poljubno besedilno polje.</translation>
 <translation id="7681095912841365527">Spletno mesto lahko uporablja Bluetooth</translation>
 <translation id="7683373461016844951">Če želite nadaljevati, kliknite »V redu«, nato »Dodaj osebo«, če želite za e-poštni naslov domene <ph name="DOMAIN" /> ustvariti nov profil.</translation>
 <translation id="7684212569183643648">Namestil skrbnik</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Standardno</translation>
 <translation id="7748528009589593815">Prejšnji zavihek</translation>
 <translation id="7748626145866214022">Več možnosti je na voljo v vrstici dejanj. Pritisnite Alt + A za označitev vrstice dejanj.</translation>
+<translation id="7750228210027921155">Slika v sliki</translation>
 <translation id="7751260505918304024">Prikaži vse</translation>
 <translation id="7754704193130578113">Pred prenosom vprašaj, kam želim shraniti vsako datoteko</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Ste pričakovali takšno stran »Nov zavihek«?</translation>
 <translation id="786073089922909430">Storitev: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Prenosi</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 piškotek}one{# piškotek}two{# piškotka}few{# piškotki}other{# piškotkov}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – seznanjeno</translation>
 <translation id="7870730066603611552">Ogled možnosti sinhronizacije po nastavitvi</translation>
 <translation id="7870790288828963061">Ni aplikacij za kiosk z novejšo različico. Ni česa posodobiti. Odstranite ključek USB.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Izklop zvoka zavihkov</translation>
 <translation id="8382913212082956454">Kopiraj &amp;e-poštni naslov</translation>
 <translation id="8386903983509584791">Iskanje je končano</translation>
+<translation id="8389492867173948260">Omogočite to razširitev za branje in spreminjanje vseh podatkov na spletnih mestih, ki jih obiščete:</translation>
 <translation id="8390449457866780408">Strežnik ni na voljo.</translation>
 <translation id="8391712576156218334">Slika ni na voljo. Poskusite znova pozneje.</translation>
 <translation id="8392234662362215700">Pritisnite Control + Shift + preslednico, če želite preklopiti razporeditev tipkovnice.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Odjavljeni boste čez <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Spreminjanje kode PIN kartice SIM</translation>
 <translation id="8434480141477525001">Vrata za odpravljanje napak NaCl</translation>
+<translation id="8435395510592618362">Preverjanje identitete z aplikacijo <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Shrani kreditno kartico</translation>
 <translation id="8438328416656800239">Preklop na pametni brskalnik</translation>
 <translation id="8438566539970814960">Izboljšanje iskanja in brskanja</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Neveljavno</translation>
 <translation id="8465444703385715657">Vtičnik <ph name="PLUGIN_NAME" /> potrebuje vaše dovoljenje za izvajanje</translation>
 <translation id="8466234950814670489">Arhiv Tar</translation>
+<translation id="8466417995783206254">Na tem zavihku se predvaja videoposnetek v načinu slike v sliki.</translation>
 <translation id="8468750959626135884">Odklenite napravo <ph name="DEVICE_TYPE" /> s telefonom Android.</translation>
 <translation id="8470028084415844044">Če želite dostopati do vseh gesel v vseh napravah, vklopite sinhronizacijo.</translation>
 <translation id="8470513973197838199">Shranjena gesla za <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Zaženi ta vtičnik</translation>
 <translation id="8497219075884839166">Orodja sistema Windows</translation>
 <translation id="8498214519255567734">Olajšanje gledanja na zaslon ali branja pri šibki svetlobi</translation>
+<translation id="8498395510292172881">Nadaljevanje branja v Chromu</translation>
 <translation id="8503813439785031346">Uporabniško ime</translation>
 <translation id="850875081535031620">Najdena ni bila nobena škodljiva programska oprema</translation>
 <translation id="8509646642152301857">Prenos slovarja za preverjanje črkovanja ni uspel.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Poskusite znova</translation>
 <translation id="8725178340343806893">Priljubljene/Zaznamki</translation>
 <translation id="8726206820263995930">Napaka pri prenosu nastavitev pravilnika iz strežnika: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Ne prikaži več tega</translation>
 <translation id="8727344521467137076">V računalniku imate škodljivo programsko opremo. Chrome jo bo odstranil in obnovil bo nastavitve, da bo brskalnik znova deloval kot običajno.</translation>
 <translation id="8730621377337864115">Končano</translation>
 <translation id="8732030010853991079">Razširitev uporabite tako, da kliknete to ikono.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Povezavo odpri v novem &amp;zavihku</translation>
 <translation id="9030515284705930323">Organizacija za vaš račun ni omogočila Trgovine Google Play. Če želite več informacij, se obrnite na skrbnika.</translation>
 <translation id="9033857511263905942">&amp;Prilepi</translation>
+<translation id="9034924485347205037">Datoteke za Linux</translation>
 <translation id="9035012421917565900">Elementov ni mogoče premakniti nazaj v »<ph name="DESTINATION_NAME" />«, zato tega dejanja ne bo mogoče razveljaviti.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Pokaži izvirno besedilo</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Iskanje naprav Bluetooth ...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – naprava Bluetooth povezana</translation>
 <translation id="9177499212658576372">Trenutno ste povezani z omrežjem <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Nastavitev Linuxa (beta) v napravi <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">To lahko traja nekaj minut. Zagon vsebnika za Linux.</translation>
 <translation id="9180380851667544951">Spletno mesto lahko souporablja vaš zaslon</translation>
 <translation id="9188441292293901223">Posodobite telefon na novejšo različico Androida, če želite odkleniti to napravo <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 9824c7c..22f06f7 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Питај пре приступа</translation>
 <translation id="1434696352799406980">Ово ће ресетовати почетну страницу, страницу нове картице, претраживач и закачене картице. Такође ће онемогућити све додатке и обрисати привремене податке попут колачића. Обележивачи, историја и сачуване лозинке неће бити обрисани.</translation>
 <translation id="1434886155212424586">Почетна страница је страница Нова картица</translation>
+<translation id="1436671784520050284">Настави са подешавањем</translation>
 <translation id="1436784010935106834">Уклоњено</translation>
 <translation id="1438632560381091872">Укључи звук картица</translation>
 <translation id="1442392616396121389">Префикс за усмеравање</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Парче пице</translation>
 <translation id="1467432559032391204">Улево</translation>
 <translation id="1468571364034902819">Овај профил не може да се користи</translation>
+<translation id="1470533772306424441">Ме ћемо инсталирате те апликације за вас. Још апликација за уређај можете да пронађете у Play продавници.</translation>
 <translation id="1470811252759861213">Да би вам додаци били доступни на свим рачунарима, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Датотека „<ph name="FILENAME" />“ није отпремљена. Није било довољно слободног места на Google диску.</translation>
 <translation id="1475502736924165259">На датотеци има сертификата који се не уклапају ни у једну другу категорију</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out (Умањи)</translation>
 <translation id="1830550083491357902">Нисте пријављени</translation>
 <translation id="1832511806131704864">Промена телефона је ажурирана</translation>
-<translation id="1832685970989658809">Администратор је онемогућио сачуване начине плаћања</translation>
 <translation id="1834503245783133039">Преузимање није успело: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Обришите претрагу</translation>
 <translation id="1838709767668011582">Google сајт</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">Од:</translation>
 <translation id="2193365732679659387">Подешавања поузданости</translation>
 <translation id="2195729137168608510">Заштита е-поште</translation>
+<translation id="2199298570273670671">Грешка</translation>
 <translation id="2200356397587687044">Chrome тражи дозволу да настави</translation>
 <translation id="220138918934036434">Сакриј дугме</translation>
 <translation id="2202898655984161076">Дошло је до проблема приликом пописа штампача. Неки од штампача можда нису регистровани са <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">Прикажи лозинку</translation>
 <translation id="2436186046335138073">Желите ли да дозволите да <ph name="HANDLER_HOSTNAME" /> отвара све <ph name="PROTOCOL" /> линкове?</translation>
 <translation id="2436707352762155834">Минимално</translation>
-<translation id="2437139306601019091">Мерење коришћења података је завршено</translation>
 <translation id="2440604414813129000">Прикажи и&amp;звор</translation>
 <translation id="2445081178310039857">Основни директоријум додатка је обавезан.</translation>
 <translation id="2445484935443597917">Направи нов профил</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> жели да потврди ваш идентитет</translation>
 <translation id="2448312741937722512">Тип</translation>
 <translation id="2450223707519584812">Нећете моћи да додајете кориснике зато што недостају шифре за Google API. Потражите детаље на <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Желите ли да искључите синхронизацију и да се одјавите?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">Датотека већ постоји</translation>
 <translation id="2453860139492968684">Заврши</translation>
 <translation id="2454247629720664989">Кључна реч</translation>
+<translation id="245661998428026871">Престаће да се пушта видео у режиму слика у слици.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> жели да копира датотеке са <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">ИД кључа ауторитета за издавање сертификата</translation>
 <translation id="2462752602710430187">Додато је: <ph name="PRINTER_NAME" /></translation>
@@ -1358,6 +1361,7 @@
 <translation id="304826556400666995">Укључи звук картица</translation>
 <translation id="3053013834507634016">Употреба кључа сертификата</translation>
 <translation id="3057861065630527966">Направите резервне копије слика и видео снимака</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Омогући услугу Изаберите за говор</translation>
 <translation id="3061707000357573562">Услуга крпљења</translation>
 <translation id="3064410671692449875">Недовољно података</translation>
@@ -1406,6 +1410,7 @@
 <translation id="313205617302240621">Заборавили сте лозинку?</translation>
 <translation id="3132996321662585180">Освежавај дневно</translation>
 <translation id="3135204511829026971">Ротирање екрана</translation>
+<translation id="313638818480447860">Пронашли смо неколико апликација (<ph name="NUMBER_OF_APPS" />) које су повезане са налогом и оптимизоване за овај уређај.</translation>
 <translation id="313963229645891001">Преузима се, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Подразумевани жути аватар</translation>
 <translation id="3140353188828248647">Фокусирање траке за адресу</translation>
@@ -1436,6 +1441,7 @@
 <translation id="3182749001423093222">Провера правописа</translation>
 <translation id="3183139917765991655">Увоз профила</translation>
 <translation id="3184560914950696195">Чување у директоријум $1 није могуће. Измењене слике ће бити сачуване у директоријуму Преузимања.</translation>
+<translation id="3188257591659621405">Моје датотеке</translation>
 <translation id="3188465121994729530">Покретни просек</translation>
 <translation id="3190558889382726167">Лозинка је сачувана</translation>
 <translation id="3192947282887913208">Аудио датотеке</translation>
@@ -1523,6 +1529,7 @@
 <translation id="3326821416087822643">Додавање датотеке <ph name="FILE_NAME" /> у zip датотеку...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Информације о апликацији</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – видео се репродукује у режиму слике у слици</translation>
 <translation id="3335337277364016868">Година снимања</translation>
 <translation id="3335947283844343239">Поново отвори затворену картицу</translation>
 <translation id="3336664756920573711">Откључајте <ph name="DEVICE_TYPE" /> помоћу Android телефона</translation>
@@ -1542,6 +1549,7 @@
 <translation id="3360297538363969800">Штампање није успело. Проверите штампач и покушајте поново.</translation>
 <translation id="3364721542077212959">Алатке за писаљку</translation>
 <translation id="3365598184818502391">Користите Ctrl или Alt</translation>
+<translation id="3367047597842238025">Подесите <ph name="DEVICE_TYPE" /> онако како ви то желите и откријте све доступне сјајне могућности.</translation>
 <translation id="3368922792935385530">Повезан</translation>
 <translation id="3369624026883419694">Одређује се хост...</translation>
 <translation id="337286756654493126">Читање директоријума које отворите у апликацији</translation>
@@ -1555,6 +1563,7 @@
 <translation id="3389312115541230716">Кликните десним тастером на икону <ph name="SMALL_PRODUCT_LOGO" /> на траци задатака</translation>
 <translation id="3391716558283801616">7. картица</translation>
 <translation id="3396331542604645348">Изабрани штампач није доступан или није правилно инсталиран. Проверите штампач или покушајте да изаберете неки други.</translation>
+<translation id="3396800784455899911">Ако кликнете на дугме „Прихвати и настави“, прихватате горенаведену обраду за ове Google услуге.</translation>
 <translation id="3399432415385675819">Обавештења ће бити онемогућена</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Ниједна лозинка није сачувана за овај сајт</translation>
@@ -1783,10 +1792,13 @@
 <translation id="3726463242007121105">Овај уређај не може да се отвори јер његов систем датотека није подржан.</translation>
 <translation id="3727148787322499904">Ако промените ово подешавање, то ће утицати на све дељене мреже</translation>
 <translation id="3727187387656390258">Испитај искачући прозор</translation>
+<translation id="3729506734996624908">Дозвољени сајтови</translation>
 <translation id="3732078975418297900">Грешка у <ph name="ERROR_LINE" />. реду</translation>
 <translation id="3733127536501031542">SSL сервер са могућношћу преласка на новију верзију</translation>
+<translation id="3735740477244556633">Сортирај према</translation>
 <translation id="3737274407993947948">Грешка при инсталирању Linux-а...</translation>
 <translation id="3737536731758327622">Преузимања ће се приказивати овде</translation>
+<translation id="3738671331307774213">Потврда идентитета помаже у заштити приватних података</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Желите ли да отворите <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> ће се сада приказивати у Admin Console</translation>
@@ -1871,10 +1883,10 @@
 <translation id="3846116211488856547">Пронађите алатке за програмирање веб-сајтова, Android апликација и још много тога. Инсталирање Linux-а ће преузети податке (<ph name="DOWNLOAD_SIZE" />).</translation>
 <translation id="385051799172605136">Назад</translation>
 <translation id="3851428669031642514">Учитавај небезбедне скрипте</translation>
+<translation id="3854599674806204102">Изаберите опцију</translation>
 <translation id="3855441664322950881">Запакуј додатак</translation>
 <translation id="3855676282923585394">Увоз обележивача и подешавања...</translation>
 <translation id="3856800405688283469">Изаберите временску зону</translation>
-<translation id="3856921555429624101">Мерење коришћења података је завршено</translation>
 <translation id="3857228364945137633">Испробајте Smart Lock да бисте откључавали <ph name="DEVICE_TYPE" /> без лозинке кад вам је телефон у близини.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: синхронизација је паузирана</translation>
@@ -2245,7 +2257,6 @@
 <translation id="4508051413094283164">Отвори све у прозору без архивирања</translation>
 <translation id="4508265954913339219">Активација није успела</translation>
 <translation id="4508765956121923607">Прикажи и&amp;звор</translation>
-<translation id="4509823033118379431">Слике тренутно нису доступне. Поново се повежите да бисте прегледали колекције.</translation>
 <translation id="451407183922382411">Омогућава <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Подесите новог корисника под надзором</translation>
 <translation id="4514610446763173167">Пушта или паузира видео</translation>
@@ -2322,6 +2333,7 @@
 <translation id="4627442949885028695">Наставите на другом уређају</translation>
 <translation id="4628314759732363424">Промени...</translation>
 <translation id="4628757576491864469">Уређаји</translation>
+<translation id="4628948037717959914">Слика</translation>
 <translation id="4630590996962964935">Неважећи знак: $1</translation>
 <translation id="4631887759990505102">Извођач</translation>
 <translation id="4632483769545853758">Укључи звук картице</translation>
@@ -2507,7 +2519,6 @@
 <translation id="4905417359854579806">Све је спремно за прављење резервних копија (<ph name="FILE_COUNT" />)</translation>
 <translation id="4907161631261076876">Ова датотека се не преузима често и може да буде опасна.</translation>
 <translation id="4907306957610201395">Категорија дозволе</translation>
-<translation id="4907824805858067479">Администратор је онемогућио сачуване картице</translation>
 <translation id="4908811072292128752">Отворите нову картицу да бисте прегледали два сајта истовремено</translation>
 <translation id="4909038193460299775">Пошто овим налогом управља <ph name="DOMAIN" />, ваши обележивачи, историја, лозинке и друга подешавања ће бити избрисани са овог уређаја. Међутим, ваши подаци ће се и даље чувати на Google налогу и њима можете да управљате на <ph name="BEGIN_LINK" />Google контролној табли<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Пријављивање је успело</translation>
@@ -2539,6 +2550,7 @@
 <translation id="4955814292505481804">Годишња</translation>
 <translation id="4957949153200969297">Омогућава само функције повезане са <ph name="IDS_SHORT_PRODUCT_NAME" /> синхронизацијом</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Све ваше картице на једном месту</translation>
 <translation id="496226124210045887">Директоријум који сте изабрали садржи осетљиве датотеке. Јесте ли сигурни да желите да одобрите апликацији „$1“ сталан приступ за читање за овај директоријум?</translation>
 <translation id="4964455510556214366">Распоред</translation>
 <translation id="4964673849688379040">Проверава се...</translation>
@@ -2586,6 +2598,7 @@
 <translation id="5027562294707732951">Додај додатак</translation>
 <translation id="5029568752722684782">Обриши копију</translation>
 <translation id="5030338702439866405">Издао/ла</translation>
+<translation id="503155457707535043">Преузимање апликација</translation>
 <translation id="503498442187459473"><ph name="HOST" /> жели да користи камеру и микрофон</translation>
 <translation id="5036662165765606524">Не дозволи ниједном сајту да аутоматски преузима више датотека</translation>
 <translation id="5037676449506322593">Изабери све</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">Искључи звук</translation>
 <translation id="5785583009707899920">Chrome услужни програми за датотеке</translation>
 <translation id="5787146423283493983">Слагање кључа</translation>
+<translation id="5788127256798019331">Play датотеке</translation>
 <translation id="5788367137662787332">Жао нам је, најмање једну партицију на уређају <ph name="DEVICE_LABEL" /> није било могуће укључити.</translation>
 <translation id="5794414402486823030">Увек отварај помоћу системског приказивача</translation>
 <translation id="5794786537412027208">Изађи из свих Chrome апликација</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">Преведено</translation>
 <translation id="5991049340509704927">Увећање приказа</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ову апликацију.}one{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}few{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}other{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}}</translation>
-<translation id="5993332328670040093">Коришћење података се више неће мерити.</translation>
 <translation id="6002458620803359783">Жељени гласови</translation>
 <translation id="6005695835120147974">Рутер за медије</translation>
 <translation id="6006484371116297560">Класична</translation>
@@ -3355,6 +3368,7 @@
 <translation id="6178664161104547336">Избор сертификата</translation>
 <translation id="6181431612547969857">Преузимање је блокирано</translation>
 <translation id="6185132558746749656">Локација уређаја</translation>
+<translation id="6185617499004995178">CUPS IPP валидатор</translation>
 <translation id="6185696379715117369">Страница нагоре</translation>
 <translation id="6189273858858366896">Подесите дељења датотека на мрежи или управљајте њима.</translation>
 <translation id="6189412234224385711">Отвори помоћу додатка <ph name="EXTENSION_NAME" /></translation>
@@ -3387,6 +3401,7 @@
 <translation id="6231881193380278751">Додајте параметар упита у URL да бисте аутоматски освежили страницу: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Батерија</translation>
 <translation id="6232116551750539448">Веза са мрежом <ph name="NAME" /> је прекинута</translation>
+<translation id="6235700927623181151">Ова картица дели садржај екрана.</translation>
 <translation id="6237816943013845465">Омогућавају вам да прилагодите резолуцију екрана</translation>
 <translation id="6238923052227198598">Задржи најновију белешку на закључаном екрану</translation>
 <translation id="6239558157302047471">Поново учитај &amp;оквир</translation>
@@ -3421,7 +3436,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Датотека <ph name="FILE_NAME" /> се обично не преузима и може да буде опасна.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Нов штампач на мрежи}one{Нови штампачи на мрежи}few{Нови штампачи на мрежи}other{Нови штампачи на мрежи}}</translation>
-<translation id="6286684120317096255">Коришћење података се мери</translation>
 <translation id="6286708577777130801">Детаљи сачуваних лозинки</translation>
 <translation id="6287852322318138013">Изаберите апликацију за отварање ове датотеке</translation>
 <translation id="6289452883081499048">Персонализоване Google услуге, као што је Play</translation>
@@ -3531,6 +3545,7 @@
 <translation id="6451180435462401570">Управљање уређајима за штампање у клауду</translation>
 <translation id="6451689256222386810">Ако сте заборавили приступну фразу или желите да промените ово подешавање, <ph name="BEGIN_LINK" />ресетујте синхронизацију<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Одбиј</translation>
+<translation id="6455264371803474013">На одређеним сајтовима</translation>
 <translation id="6455894534188563617">&amp;Нови директоријум</translation>
 <translation id="6456394469623773452">Добар</translation>
 <translation id="6456631036739229488">Smart Lock телефон је промењен. Унесите лозинку да бисте ажурирали Smart Lock. Следећи пут ће телефон откључати <ph name="DEVICE_TYPE" />. Искључите Smart Lock у подешавањима.</translation>
@@ -3608,6 +3623,7 @@
 <translation id="657402800789773160">&amp;Reload This Page (Поново учитај ову страницу)</translation>
 <translation id="6577284282025554716">Преузимање је отказано: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Шифруј синхронизоване лозинке помоћу Google корисничког имена и лозинке</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – дели се садржај екрана</translation>
 <translation id="6580151766480067746">Верзија ARC.</translation>
 <translation id="6581162200855843583">Веза Google диска</translation>
 <translation id="6582421931165117398">Промените лозинку да бисте заштитили личне податке. Мораћете да се пријавите да бисте могли да промените лозинку.</translation>
@@ -4074,6 +4090,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Ова апликација би могла да омета правилно функционисање Chrome-а.}one{Ове апликације би могле да ометају правилно функционисање Chrome-а.}few{Ове апликације би могле да ометају правилно функционисање Chrome-а.}other{Ове апликације би могле да ометају правилно функционисање Chrome-а.}}</translation>
 <translation id="7303900363563182677">Овом сајту је блокиран увид у текст и слике који су копирани у привремену меморију</translation>
 <translation id="730515362922783851">Размена података са било којим уређајем на локалној мрежи или интернету</translation>
+<translation id="7307129035224081534">Паузирано</translation>
 <translation id="7308002049209013926">Користите Покретач да бисте брзо приступали новим апликацијама и активностима. Да бисте дошли овде помоћу тастатуре, притисните Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Прикажи &amp;контроле</translation>
 <translation id="7310598146671372464">Пријављивање није успело. Сервер не подржава наведене Kerberos типове шифровања. Контактирајте администратора.</translation>
@@ -4131,7 +4148,6 @@
 <translation id="7400839060291901923">Подесите везу на телефону <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Искачући прозори су блокирани</translation>
 <translation id="7407430846095439694">Увези и обавежи се</translation>
-<translation id="7409233648990234464">Поново покрени и обави Powerwash</translation>
 <translation id="7409836189476010449">Покрене Flash</translation>
 <translation id="7410344089573941623">Питај да ли <ph name="HOST" /> жели да приступи камери и микрофону</translation>
 <translation id="741204030948306876">Да, омогући</translation>
@@ -4164,6 +4180,7 @@
 <translation id="7465778193084373987">URL за опозив Netscape сертификата</translation>
 <translation id="7469894403370665791">Аутоматски се повезуј са овом мрежом</translation>
 <translation id="747114903913869239">Грешка: Није могуће дешифровати додатак</translation>
+<translation id="7473753388963818366">Хајде да подесимо <ph name="DEVICE_TYPE" /> за вас</translation>
 <translation id="7473891865547856676">Не, хвала</translation>
 <translation id="747459581954555080">Врати све</translation>
 <translation id="7475671414023905704">Netscape URL адреса за изгубљену лозинку</translation>
@@ -4288,6 +4305,7 @@
 <translation id="7665369617277396874">Додајте налог</translation>
 <translation id="7671130400130574146">Користи системску траку наслова и ивице</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, на страници <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Шаљите податке о гласу Google-у да би се омогућило диктирање у свим пољима за текст.</translation>
 <translation id="7681095912841365527">Сајт може да користи Bluetooth</translation>
 <translation id="7683373461016844951">Да бисте наставили, кликните на Потврди, па на Додај особу да бисте отворили нови профил за имејл адресу за <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Инсталирао је администратор</translation>
@@ -4329,6 +4347,7 @@
 <translation id="7740996059027112821">Стандардно</translation>
 <translation id="7748528009589593815">Претходна картица</translation>
 <translation id="7748626145866214022">Још опција је доступно на траци са радњама. Притисните Alt+A да бисте фокусирали траку са радњама.</translation>
+<translation id="7750228210027921155">Слика у слици</translation>
 <translation id="7751260505918304024">Прикажи све</translation>
 <translation id="7754704193130578113">Питај где треба сачувати сваку датотеку пре преузимања</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4437,6 +4456,7 @@
 <translation id="7857949311770343000">Да ли је ово страница нове картице коју сте очекивали?</translation>
 <translation id="786073089922909430">Услуга: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Преузимања</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 колачић}one{# колачић}few{# колачића}other{# колачића}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – Упарен је</translation>
 <translation id="7870730066603611552">Прегледа опције синхронизације после подешавања</translation>
 <translation id="7870790288828963061">Није пронађена ниједна киоск апликација са новијом верзијом. Нема шта да се ажурира. Уклоните USB меморију.</translation>
@@ -4758,6 +4778,7 @@
 <translation id="8373553483208508744">Искључи звук картица</translation>
 <translation id="8382913212082956454">Копирај &amp;е-адресу</translation>
 <translation id="8386903983509584791">Скенирање је завршено</translation>
+<translation id="8389492867173948260">Дозволите да овај додатак чита и мења све податке на веб-сајтовима које посећујете:</translation>
 <translation id="8390449457866780408">Сервер је недоступан.</translation>
 <translation id="8391712576156218334">Слика је недоступна. Пробајте поново касније.</translation>
 <translation id="8392234662362215700">Притисните тастере Control-Shift-Space да бисте променили распоред тастатуре.</translation>
@@ -4789,6 +4810,7 @@
 <translation id="84297032718407999">Одјавићете се за <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Промените PIN SIM картице</translation>
 <translation id="8434480141477525001">NaCl порт за отклањање грешака</translation>
+<translation id="8435395510592618362">Потврдите идентитет помоћу <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Сачувајте кредитну картицу</translation>
 <translation id="8438328416656800239">Пређите на паметан прегледач</translation>
 <translation id="8438566539970814960">Побољшај претраге и прегледање</translation>
@@ -4815,6 +4837,7 @@
 <translation id="8465252176946159372">Није важећи</translation>
 <translation id="8465444703385715657">Потребна је ваша дозвола да би се додатна компонента <ph name="PLUGIN_NAME" /> покренула</translation>
 <translation id="8466234950814670489">Tar архива</translation>
+<translation id="8466417995783206254">Ова картица репродукује видео у режиму слике у слици.</translation>
 <translation id="8468750959626135884">Откључајте <ph name="DEVICE_TYPE" /> помоћу Android телефона.</translation>
 <translation id="8470028084415844044">Да би вам све лозинке били доступне на свим уређајима, укључите синхронизацију.</translation>
 <translation id="8470513973197838199">Сачуване лозинке за <ph name="ORIGIN" /></translation>
@@ -4835,6 +4858,7 @@
 <translation id="8496717697661868878">Покрени овај додатак</translation>
 <translation id="8497219075884839166">Windows услужни програми</translation>
 <translation id="8498214519255567734">Омогућава да лакше прегледате садржај екрана или да читате при пригушеном светлу</translation>
+<translation id="8498395510292172881">Наставите да читате у Chrome-у</translation>
 <translation id="8503813439785031346">Корисничко име</translation>
 <translation id="850875081535031620">Није пронађен никакав штетан софтвер</translation>
 <translation id="8509646642152301857">Преузимање речника за проверу правописа није успело.</translation>
@@ -4985,7 +5009,6 @@
 <translation id="8725066075913043281">Пробајте поново</translation>
 <translation id="8725178340343806893">Омиљено/Обележивачи</translation>
 <translation id="8726206820263995930">Грешка при преузимању подешавања смерница са сервера: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Не приказуј ово поново</translation>
 <translation id="8727344521467137076">Имате штетан софтвер на рачунару. Chrome га уклања и вратиће подешавања да би прегледач поново функционисао као и обично.</translation>
 <translation id="8730621377337864115">Готово</translation>
 <translation id="8732030010853991079">Користите овај додатак кликом на ову икону.</translation>
@@ -5176,6 +5199,7 @@
 <translation id="9027459031423301635">Отвори везу у новој &amp;картици</translation>
 <translation id="9030515284705930323">Организација није омогућила Google Play продавницу за налог. Контактирајте администратора за више информација.</translation>
 <translation id="9033857511263905942">&amp;Налепи</translation>
+<translation id="9034924485347205037">Linux датотеке</translation>
 <translation id="9035012421917565900">Ставке не могу да се врате у „<ph name="DESTINATION_NAME" />“, па нећете моћи да опозовете ову радњу.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Прикажи оригинал</translation>
@@ -5276,6 +5300,7 @@
 <translation id="9173995187295789444">Траже се Bluetooth уређаји...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth уређаје је повезан</translation>
 <translation id="9177499212658576372">Тренутно сте повезани са <ph name="NETWORK_TYPE" /> мрежом.</translation>
+<translation id="9179734824669616955">Подесите Linux (бета) на <ph name="DEVICE_TYPE" />-у</translation>
 <translation id="9180281769944411366">Ово може да потраје неколико минута. Покреће се Linux контејнер.</translation>
 <translation id="9180380851667544951">Сајт може да дели екран</translation>
 <translation id="9188441292293901223">Ажурирајте телефон на новију верзију Android-а да бисте откључали овај <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index 4695a68..50eb712e 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Fråga innan informationen används</translation>
 <translation id="1434696352799406980">Den här funktionen återställer startfliken, sidan Ny flik, sökmotorn och de fästa flikarna. Den inaktiverar också alla tillägg och rensar tillfälliga uppgifter som cookies. Bokmärken, historik och sparade lösenord rensas inte.</translation>
 <translation id="1434886155212424586">Startsidan är sidan Ny flik</translation>
+<translation id="1436671784520050284">Fortsätt med konfigurationen</translation>
 <translation id="1436784010935106834">Borttagna</translation>
 <translation id="1438632560381091872">Slå på ljud från flikar</translation>
 <translation id="1442392616396121389">Dirigeringsprefix</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizzabit</translation>
 <translation id="1467432559032391204">Vänster</translation>
 <translation id="1468571364034902819">Profilen kan inte användas</translation>
+<translation id="1470533772306424441">Vi installerar apparna åt dig. Du hittar fler appar för din enhet i Play Butik.</translation>
 <translation id="1470811252759861213"><ph name="SIGN_IN_LINK" /> om du vill få tillgång till samma tillägg på alla dina datorer.</translation>
 <translation id="1474339897586437869"><ph name="FILENAME" /> laddades inte upp. Det fanns inte tillräckligt mycket ledigt utrymme på Google Drive.</translation>
 <translation id="1475502736924165259">Du har certifikat i din dator som inte passar i några av de andra kategorierna</translation>
@@ -564,7 +566,6 @@
 <translation id="1829192082282182671">Zooma ut</translation>
 <translation id="1830550083491357902">Inte inloggad</translation>
 <translation id="1832511806131704864">Mobiländringen har uppdaterats</translation>
-<translation id="1832685970989658809">Administratören har inaktiverat sparade betalningsmetoder</translation>
 <translation id="1834503245783133039">Nedladdningen misslyckades: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Rensa sökning</translation>
 <translation id="1838709767668011582">Google-webbplats</translation>
@@ -792,6 +793,7 @@
 <translation id="2192505247865591433">Från:</translation>
 <translation id="2193365732679659387">Inställningar för tillförlitlighet</translation>
 <translation id="2195729137168608510">E-postskydd</translation>
+<translation id="2199298570273670671">Fel</translation>
 <translation id="2200356397587687044">Du måste ge Chrome behörighet att fortsätta</translation>
 <translation id="220138918934036434">Dölj knapp</translation>
 <translation id="2202898655984161076">Ett problem uppstod när skrivare skulle listas. Vissa av dina skrivare kanske inte har registrerats med <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -941,10 +943,10 @@
 <translation id="2435457462613246316">Visa lösenord</translation>
 <translation id="2436186046335138073">Vill du tillåta att <ph name="HANDLER_HOSTNAME" /> öppnar alla <ph name="PROTOCOL" />-länkar?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Mätningen av dataanvändning avslutades</translation>
 <translation id="2440604414813129000">Visa &amp;källa</translation>
 <translation id="2445081178310039857">Tilläggets rotkatalog måste anges.</translation>
 <translation id="2445484935443597917">Skapa en ny profil</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> vill verifiera din identitet</translation>
 <translation id="2448312741937722512">Typ</translation>
 <translation id="2450223707519584812">Du kan inte lägga till användare eftersom Googles API-nycklar saknas. Du hittar mer information på <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Vill du inaktivera synkronisering och logga ut?</translation>
@@ -954,6 +956,7 @@
 <translation id="2453576648990281505">Filen finns redan</translation>
 <translation id="2453860139492968684">Slutför</translation>
 <translation id="2454247629720664989">Sökord</translation>
+<translation id="245661998428026871">Videouppspelningen i bild-i-bild-läge stoppas.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> vill kopiera filer från <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Nyckel-ID för certifikatutfärdare</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> har lagts till</translation>
@@ -1361,6 +1364,7 @@
 <translation id="304826556400666995">Slå på ljud från flikar</translation>
 <translation id="3053013834507634016">Certifikatnyckelanvändning</translation>
 <translation id="3057861065630527966">Säkerhetskopiera foton och videor</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">Aktivera Textuppläsning</translation>
 <translation id="3061707000357573562">Tjänst för programkorrigering</translation>
 <translation id="3064410671692449875">Otillräckligt med data</translation>
@@ -1409,6 +1413,7 @@
 <translation id="313205617302240621">Glömt lösenordet?</translation>
 <translation id="3132996321662585180">Uppdatera dagligen</translation>
 <translation id="3135204511829026971">Rotera skärmen</translation>
+<translation id="313638818480447860">Vi har hittat <ph name="NUMBER_OF_APPS" /> appar kopplade till ditt konto som är optimerade för den här enheten.</translation>
 <translation id="313963229645891001">Laddar ned, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Gul standardavatar</translation>
 <translation id="3140353188828248647">Fokusera på adressfältet</translation>
@@ -1439,6 +1444,7 @@
 <translation id="3182749001423093222">Stavningskontroll</translation>
 <translation id="3183139917765991655">Profilimportör</translation>
 <translation id="3184560914950696195">Det går inte att spara i $1. Redigerade bilder sparas i mappen Nedladdningar.</translation>
+<translation id="3188257591659621405">Mina filer</translation>
 <translation id="3188465121994729530">Glidande medelvärde</translation>
 <translation id="3190558889382726167">Lösenordet sparades</translation>
 <translation id="3192947282887913208">Ljudfiler</translation>
@@ -1526,6 +1532,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> komprimeras ...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Appinformation</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> – video spelas upp bild-i-bild-läge</translation>
 <translation id="3335337277364016868">Inspelningsår</translation>
 <translation id="3335947283844343239">Öppna stängd flik igen</translation>
 <translation id="3336664756920573711">Lås upp <ph name="DEVICE_TYPE" /> med Android-mobilen</translation>
@@ -1545,6 +1552,7 @@
 <translation id="3360297538363969800">Utskriften misslyckades. Kontrollera skrivaren och försök igen.</translation>
 <translation id="3364721542077212959">Verktyg för e-penna</translation>
 <translation id="3365598184818502391">Använd Ctrl eller Alt</translation>
+<translation id="3367047597842238025">Konfigurera din <ph name="DEVICE_TYPE" /> precis som du vill ha den och upptäck alla fantastiska funktioner som du alltid har till hands.</translation>
 <translation id="3368922792935385530">Ansluten</translation>
 <translation id="3369624026883419694">Tolkar värden...</translation>
 <translation id="337286756654493126">Läsa mappar som du öppnar i appen</translation>
@@ -1558,6 +1566,7 @@
 <translation id="3389312115541230716">Högerklicka på ikonen för <ph name="SMALL_PRODUCT_LOGO" /> i aktivitetsfältet</translation>
 <translation id="3391716558283801616">Flik 7</translation>
 <translation id="3396331542604645348">Den valda skrivaren är inte tillgänglig eller har inte installerats korrekt. Kontrollera skrivaren eller välj en annan.</translation>
+<translation id="3396800784455899911">När du klickar på Godkänn och fortsätt samtycker du till att dessa tjänster från Google får bearbeta data enligt beskrivningen ovan.</translation>
 <translation id="3399432415385675819">Aviseringar inaktiveras</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Inga lösenord har sparats för den här webbplatsen</translation>
@@ -1786,10 +1795,13 @@
 <translation id="3726463242007121105">Enheten kan inte öppnas eftersom dess filsystem inte stöds.</translation>
 <translation id="3727148787322499904">Om du ändrar denna inställning påverkas alla delade nätverk</translation>
 <translation id="3727187387656390258">Kontrollera popup</translation>
+<translation id="3729506734996624908">Tillåtna webbplatser</translation>
 <translation id="3732078975418297900">Fel på rad <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-server med uppgradering</translation>
+<translation id="3735740477244556633">Sortera efter</translation>
 <translation id="3737274407993947948">Det gick inte att installera Linux …</translation>
 <translation id="3737536731758327622">Det du laddar ned visas här</translation>
+<translation id="3738671331307774213">Skydda privata uppgifter genom att verifiera din identitet</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Vill du öppna <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> visas nu i administratörskonsolen</translation>
@@ -1874,10 +1886,10 @@
 <translation id="3846116211488856547">Skaffa verktyg för att utveckla webbplatser, Android-appar och mycket annat. <ph name="DOWNLOAD_SIZE" /> data laddas ned när Linux installeras.</translation>
 <translation id="385051799172605136">Bakåt</translation>
 <translation id="3851428669031642514">Läsa in osäkra skript</translation>
+<translation id="3854599674806204102">Välj ett alternativ</translation>
 <translation id="3855441664322950881">Paketera tillägg</translation>
 <translation id="3855676282923585394">Importera bokmärken och inställningar...</translation>
 <translation id="3856800405688283469">Välj tidszon</translation>
-<translation id="3856921555429624101">Mätningen av dataanvändningen har avslutats</translation>
 <translation id="3857228364945137633">Testa att låsa upp din <ph name="DEVICE_TYPE" /> utan lösenord när mobilen finns i närheten med Smart Lock.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Synkroniseringen har pausats</translation>
@@ -2248,7 +2260,6 @@
 <translation id="4508051413094283164">Öppna alla i ett inkognitofönster</translation>
 <translation id="4508265954913339219">Aktiveringen misslyckades</translation>
 <translation id="4508765956121923607">Visa &amp;källa</translation>
-<translation id="4509823033118379431">Bilderna är inte tillgängliga för närvarande. Samlingarna visas när du har återfått anslutningen.</translation>
 <translation id="451407183922382411">Tekniken kommer från <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Skapa ny kontrollerad användare</translation>
 <translation id="4514610446763173167">Växla mellan att spela upp och pausa video</translation>
@@ -2325,6 +2336,7 @@
 <translation id="4627442949885028695">Fortsätta på en annan enhet</translation>
 <translation id="4628314759732363424">Ändra ...</translation>
 <translation id="4628757576491864469">Enheter</translation>
+<translation id="4628948037717959914">Foto</translation>
 <translation id="4630590996962964935">Ogiltigt tecken: $1</translation>
 <translation id="4631887759990505102">Artist</translation>
 <translation id="4632483769545853758">Slå på ljud från flik</translation>
@@ -2510,7 +2522,6 @@
 <translation id="4905417359854579806">Klar att säkerhetskopiera <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Den här filen brukar inte laddas ned. Den kan vara skadlig.</translation>
 <translation id="4907306957610201395">Behörighetskategori</translation>
-<translation id="4907824805858067479">Administratören har inaktiverat sparade kort</translation>
 <translation id="4908811072292128752">Öppna en ny flik om du vill surfa på två webbplatser samtidigt</translation>
 <translation id="4909038193460299775">Eftersom kontot hanteras av <ph name="DOMAIN" /> raderas bokmärken, historik, lösenord och andra inställningar från enheten. Däremot finns uppgifterna kvar i Google-kontot och kan hanteras via <ph name="BEGIN_LINK" />Google Översikt<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Registreringen är klar</translation>
@@ -2542,6 +2553,7 @@
 <translation id="4955814292505481804">Årslicens</translation>
 <translation id="4957949153200969297">Aktivera enbart funktioner som har att göra med synkronisering i <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Alla kort på ett ställe</translation>
 <translation id="496226124210045887">Mappen som du valde innehåller känsliga filer. Är du säker på att du vill bevilja $1 permanent läsåtkomst till mappen?</translation>
 <translation id="4964455510556214366">Ordning</translation>
 <translation id="4964673849688379040">Kontrollerar …</translation>
@@ -2589,6 +2601,7 @@
 <translation id="5027562294707732951">Lägg till tillägg</translation>
 <translation id="5029568752722684782">Ta bort kopia</translation>
 <translation id="5030338702439866405">Utfärdat av</translation>
+<translation id="503155457707535043">Appar laddas ned</translation>
 <translation id="503498442187459473"><ph name="HOST" /> vill använda kameran och mikrofonen</translation>
 <translation id="5036662165765606524">Tillåt inte att någon webbplats laddar ned flera filer automatiskt</translation>
 <translation id="5037676449506322593">Markera alla</translation>
@@ -3103,6 +3116,7 @@
 <translation id="57838592816432529">Stäng av ljudet</translation>
 <translation id="5785583009707899920">Chromes filverktyg</translation>
 <translation id="5787146423283493983">Nyckelavtal</translation>
+<translation id="5788127256798019331">Play-filer</translation>
 <translation id="5788367137662787332">Minst en partition på enheten <ph name="DEVICE_LABEL" /> kunde inte monteras.</translation>
 <translation id="5794414402486823030">Öppna alltid med systemets visningsprogram</translation>
 <translation id="5794786537412027208">Stäng alla Chrome-appar</translation>
@@ -3230,7 +3244,6 @@
 <translation id="5990386583461751448">Översatt</translation>
 <translation id="5991049340509704927">Förstora</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Be administratören att ta bort den här appen så att du kan fortsätta att surfa på internet.}other{Be administratören att ta bort de här apparna så att du kan fortsätta att surfa på internet.}}</translation>
-<translation id="5993332328670040093">Dataanvändningen mäts inte längre.</translation>
 <translation id="6002458620803359783">Önskade röster</translation>
 <translation id="6005695835120147974">Medierouter</translation>
 <translation id="6006484371116297560">Klassiskt</translation>
@@ -3356,6 +3369,7 @@
 <translation id="6178664161104547336">Välj ett certifikat</translation>
 <translation id="6181431612547969857">Nedladdningen blockerades</translation>
 <translation id="6185132558746749656">Enhetsplats</translation>
+<translation id="6185617499004995178">CUPS IPP-validerare</translation>
 <translation id="6185696379715117369">Uppåt en sida</translation>
 <translation id="6189273858858366896">Konfigurera eller hantera Network File Share.</translation>
 <translation id="6189412234224385711">Öppna med <ph name="EXTENSION_NAME" /></translation>
@@ -3388,6 +3402,7 @@
 <translation id="6231881193380278751">Lägg till en frågeparameter i webbadressen för att automatiskt uppdatera sidan: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Batteri</translation>
 <translation id="6232116551750539448">Anslutningen till <ph name="NAME" /> har brutits</translation>
+<translation id="6235700927623181151">Ditt skrivbord delas på den här fliken.</translation>
 <translation id="6237816943013845465">Ger möjlighet att ändra skärmupplösningen</translation>
 <translation id="6238923052227198598">Behåll den senaste anteckningen på låsskärmen</translation>
 <translation id="6239558157302047471">Läs in &amp;ram igen</translation>
@@ -3422,7 +3437,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> brukar inte laddas ned och kan vara skadlig.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ny skrivare i nätverket}other{Nya skrivare i nätverket}}</translation>
-<translation id="6286684120317096255">Dataanvändningen mäts</translation>
 <translation id="6286708577777130801">Sparad lösenordsinformation</translation>
 <translation id="6287852322318138013">Välj en app om du vill öppna filen</translation>
 <translation id="6289452883081499048">Anpassade tjänster från Google, som Play</translation>
@@ -3533,6 +3547,7 @@
 <translation id="6451180435462401570">Hantera enheter för molnutskrift</translation>
 <translation id="6451689256222386810">Om du har glömt lösenfrasen eller vill ändra inställningen <ph name="BEGIN_LINK" />återställer du synkroniseringen<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Avvisa</translation>
+<translation id="6455264371803474013">På valda webbplatser</translation>
 <translation id="6455894534188563617">&amp;Ny mapp</translation>
 <translation id="6456394469623773452">Okej</translation>
 <translation id="6456631036739229488">Smart Lock används med en annan mobil än tidigare. Ange lösenordet och uppdatera Smart Lock. Nästa gång låser mobilen upp denna <ph name="DEVICE_TYPE" />. Du kan inaktivera Smart Lock i inställningarna.</translation>
@@ -3610,6 +3625,7 @@
 <translation id="657402800789773160">&amp;Hämta sidan igen</translation>
 <translation id="6577284282025554716">Nedladdningen avbröts: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Kryptera synkroniserade lösenord med ditt användarnamn och lösenord på Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – skrivbordet delas</translation>
 <translation id="6580151766480067746">ARC-version</translation>
 <translation id="6581162200855843583">Google Drive-länk</translation>
 <translation id="6582421931165117398">Ändra lösenordet nu så att dina personliga uppgifter skyddas. Du måste logga in innan du kan ändra lösenordet.</translation>
@@ -4076,6 +4092,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Den här appen kan göra så att Chrome inte fungerar korrekt.}other{De här apparna kan göra så att Chrome inte fungerar korrekt.}}</translation>
 <translation id="7303900363563182677">Tillgången till text och bilder som kopierats till Urklipp har blockerats för den här webbplatsen.</translation>
 <translation id="730515362922783851">Utväxla data med enheter i det lokala nätverket eller via internet</translation>
+<translation id="7307129035224081534">Pausad</translation>
 <translation id="7308002049209013926">Öppna nya appar och aktiviteter snabbt med översikten. Tryck på Alt + Skift + L om du vill öppna översikten.</translation>
 <translation id="7309257895202129721">Visa &amp;kontroller</translation>
 <translation id="7310598146671372464">Det gick inte att logga in. Servern har inte stöd för de angivna typerna av Kerberos-kryptering. Kontakta administratören.</translation>
@@ -4133,7 +4150,6 @@
 <translation id="7400839060291901923">Konfigurera anslutningen på din <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Blockering av popup-fönster</translation>
 <translation id="7407430846095439694">Importera och bind</translation>
-<translation id="7409233648990234464">Starta om och använd Powerwash</translation>
 <translation id="7409836189476010449">Kör Flash</translation>
 <translation id="7410344089573941623">Fråga om <ph name="HOST" /> vill använda kameran och mikrofonen</translation>
 <translation id="741204030948306876">Ja</translation>
@@ -4166,6 +4182,7 @@
 <translation id="7465778193084373987">Återkallandeadress för Netscape-certifikat</translation>
 <translation id="7469894403370665791">Anslut automatiskt till det här nätverket.</translation>
 <translation id="747114903913869239">Fel: det går inte att avkoda tillägget</translation>
+<translation id="7473753388963818366">Nu gör vi din <ph name="DEVICE_TYPE" /> körklar</translation>
 <translation id="7473891865547856676">Nej tack</translation>
 <translation id="747459581954555080">Återställ alla</translation>
 <translation id="7475671414023905704">Netscapes webbadress för förlorat lösenord</translation>
@@ -4290,6 +4307,7 @@
 <translation id="7665369617277396874">Lägg till konto</translation>
 <translation id="7671130400130574146">Använd systemets inställningar för namnlist och ramar</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> på <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Skicka det du säger till Google så att du kan tala in text i vilket textfält som helst.</translation>
 <translation id="7681095912841365527">Webbplatsen har åtkomst till Bluetooth</translation>
 <translation id="7683373461016844951">Fortsätt genom att klicka på OK. Skapa sedan en ny profil för e-postadressen på <ph name="DOMAIN" /> genom att klicka på Lägg till person.</translation>
 <translation id="7684212569183643648">Har installerats av administratören</translation>
@@ -4331,6 +4349,7 @@
 <translation id="7740996059027112821">Standard</translation>
 <translation id="7748528009589593815">Föregående flik</translation>
 <translation id="7748626145866214022">I åtgärdsfältet finns fler alternativ. Du flyttar fokus till åtgärdsfältet med Alt + A.</translation>
+<translation id="7750228210027921155">Bild-i-bild</translation>
 <translation id="7751260505918304024">Visa alla</translation>
 <translation id="7754704193130578113">Fråga var filerna ska sparas före nedladdning</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4439,6 +4458,7 @@
 <translation id="7857949311770343000">Var det den här nya fliksidan du väntade dig?</translation>
 <translation id="786073089922909430">Tjänst: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Nedladdade filer</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 cookie}other{# cookies}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> – kopplad</translation>
 <translation id="7870730066603611552">Granska synkroniseringsalternativen efter konfigureringen</translation>
 <translation id="7870790288828963061">Inga kioskappar med nyare version hittades. Det finns inget att uppdatera. Ta bort USB-minnet.</translation>
@@ -4760,6 +4780,7 @@
 <translation id="8373553483208508744">Stäng av ljud från flikar</translation>
 <translation id="8382913212082956454">Kopiera &amp;e-postadress</translation>
 <translation id="8386903983509584791">Sökningen har slutförts</translation>
+<translation id="8389492867173948260">Tillåt det här tillägget att läsa och ändra all din data på webbplatser du besöker</translation>
 <translation id="8390449457866780408">Servern är inte tillgänglig.</translation>
 <translation id="8391712576156218334">Bilden är inte tillgänglig. Försök igen senare.</translation>
 <translation id="8392234662362215700">Tryck på Ctrl + Skift + blanksteg om du vill byta tangentbordslayout.</translation>
@@ -4791,6 +4812,7 @@
 <translation id="84297032718407999">Du loggas ut om <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Ändra SIM-kortets pinkod</translation>
 <translation id="8434480141477525001">Felsökningsport för Native Client</translation>
+<translation id="8435395510592618362">Verifiera din identitet med <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Spara kreditkort</translation>
 <translation id="8438328416656800239">Byt till en smart webbläsare</translation>
 <translation id="8438566539970814960">Förbättra sökningar och surfandet</translation>
@@ -4817,6 +4839,7 @@
 <translation id="8465252176946159372">Inte giltig</translation>
 <translation id="8465444703385715657">Du måste godkänna att <ph name="PLUGIN_NAME" /> körs</translation>
 <translation id="8466234950814670489">Tar-arkiv</translation>
+<translation id="8466417995783206254">På den här fliken spelas en video upp i bild-i-bild-läge.</translation>
 <translation id="8468750959626135884">Lås upp <ph name="DEVICE_TYPE" /> med Android-mobilen.</translation>
 <translation id="8470028084415844044">Aktivera synkronisering om du vill ha tillgång till alla lösenord oavsett vilken enhet du använder.</translation>
 <translation id="8470513973197838199">Sparade lösenord för <ph name="ORIGIN" /></translation>
@@ -4837,6 +4860,7 @@
 <translation id="8496717697661868878">Kör det här plugin-programmet</translation>
 <translation id="8497219075884839166">Fönsterverktyg</translation>
 <translation id="8498214519255567734">Gör det behagligare för ögonen att titta på skärmen eller läsa i svag belysning</translation>
+<translation id="8498395510292172881">Fortsätt läsa i Chrome</translation>
 <translation id="8503813439785031346">Användarnamn</translation>
 <translation id="850875081535031620">Ingen skadlig programvara hittades</translation>
 <translation id="8509646642152301857">Det gick inte att ladda ned ordlistan för stavningskontrollen.</translation>
@@ -4987,7 +5011,6 @@
 <translation id="8725066075913043281">Försök igen</translation>
 <translation id="8725178340343806893">Favoriter/bokmärken</translation>
 <translation id="8726206820263995930">Det uppstod ett fel när policyinställningarna hämtades från servern: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Visa inte det här igen</translation>
 <translation id="8727344521467137076">Det finns skadlig programvara på datorn. Chrome tar bort den och återställer inställningarna så att webbläsaren fungerar som den ska igen.</translation>
 <translation id="8730621377337864115">Klart</translation>
 <translation id="8732030010853991079">Använd tillägget genom att klicka på den här ikonen.</translation>
@@ -5178,6 +5201,7 @@
 <translation id="9027459031423301635">Öppna länk i ny &amp;flik</translation>
 <translation id="9030515284705930323">Organisationen har inte aktiverat Google Play Butik för ditt konto. Kontakta administratören om du vill veta mer.</translation>
 <translation id="9033857511263905942">K&amp;listra in</translation>
+<translation id="9034924485347205037">Linux-filer</translation>
 <translation id="9035012421917565900">Eftersom det inte går att flytta tillbaka objekten till <ph name="DESTINATION_NAME" /> går det inte att ångra åtgärden.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Visa original</translation>
@@ -5278,6 +5302,7 @@
 <translation id="9173995187295789444">Söker efter Bluetooth-enheter …</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – Bluetooth-enhet ansluten</translation>
 <translation id="9177499212658576372">Du är ansluten till nätverket <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Konfigurera Linux (beta) på <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Detta kan ta några minuter. Linux-containern startas.</translation>
 <translation id="9180380851667544951">Webbplatsen kan dela din skärm</translation>
 <translation id="9188441292293901223">Uppdatera mobilen till en nyare version av Android om du vill låsa upp denna <ph name="DEVICE_TYPE" />.</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index dfdc9183..bf5299e 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Uliza idhini kabla ya kufikia</translation>
 <translation id="1434696352799406980">Hatua hii itaweka upya ukurasa wako unaoanza, ukurasa wa kichupo kipya, mtambo wa kutafuta na vichupo vilivyobandikwa. Pia itazima viendelezi na kufuta data ya muda kama vile vidakuzi. Alamisho, historia na manenosiri yako yaliyohifadhiwa hayatafutwa.</translation>
 <translation id="1434886155212424586">Ukurasa wa Mwanzo ndio ukurasa wa kichupo kipya</translation>
+<translation id="1436671784520050284">Endelea kuweka mipangilio</translation>
 <translation id="1436784010935106834">Zimeondolewa</translation>
 <translation id="1438632560381091872">Rejesha sauti ya vichupo</translation>
 <translation id="1442392616396121389">Kiambishi awali cha ruta</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Kipande cha piza</translation>
 <translation id="1467432559032391204">Kushoto</translation>
 <translation id="1468571364034902819">Haiwezi kutumia wasifu huu</translation>
+<translation id="1470533772306424441">Tutasakinisha programu hizo kwa niaba yako. Unaweza kupata programu zingine kwa ajili ya kifaa chako katika Duka la Google Play.</translation>
 <translation id="1470811252759861213">Ili upate viendelezi vyako kwenye kompyuta zako zote, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" haikupakiwa. Hakuna nafasi ya kutosha katika Hifadhi yako ya Google.</translation>
 <translation id="1475502736924165259">Una vyeti kwenye faili ambavyo havilangani na aina nyingine yoyote</translation>
@@ -562,7 +564,6 @@
 <translation id="1829192082282182671">Fif&amp;iza</translation>
 <translation id="1830550083491357902">Haijaingiwa</translation>
 <translation id="1832511806131704864">Mabadiliko ya simu yamesasishwa</translation>
-<translation id="1832685970989658809">Msimamizi wako amezima njia za kulipa zilizohifadhiwa</translation>
 <translation id="1834503245783133039">Imeshindwa kupakua: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Futa utafutaji</translation>
 <translation id="1838709767668011582">Tovuti ya Google</translation>
@@ -790,6 +791,7 @@
 <translation id="2192505247865591433">Kutoka:</translation>
 <translation id="2193365732679659387">Mipangilio ya kuamini</translation>
 <translation id="2195729137168608510">Ulinzi wa Barua Pepe</translation>
+<translation id="2199298570273670671">Hitilafu</translation>
 <translation id="2200356397587687044">Chrome inahitaji ruhusa ili iendelee</translation>
 <translation id="220138918934036434">Ficha kitufe</translation>
 <translation id="2202898655984161076">Kulikuwa na tatizo wakati wa kuongeza printa. Huenda baadhi ya printa zako hazikuweza kusajili kwenye <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -939,10 +941,10 @@
 <translation id="2435457462613246316">Onyesha nenosiri</translation>
 <translation id="2436186046335138073">Ungependa kuruhusu <ph name="HANDLER_HOSTNAME" /> kufungua viungo vyote vya <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Kiwango cha chini</translation>
-<translation id="2437139306601019091">Upimaji wa matumizi ya data umekamilika</translation>
 <translation id="2440604414813129000">Tazama &amp;asili</translation>
 <translation id="2445081178310039857">Saraka la shina la kiendelezi linahitajika.</translation>
 <translation id="2445484935443597917">Unda Wasifu Mpya</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> inataka kuthibitisha utambulisho wako</translation>
 <translation id="2448312741937722512">Aina</translation>
 <translation id="2450223707519584812">Hutaweza kuwaongeza watumiaji kwa sababu funguo za API ya Google hazipo. Angalia <ph name="DETAILS_URL" /> kwa maelezo.</translation>
 <translation id="2450310832094867474">Ungependa kuzima kipengele cha usawazishaji na uondoke kwenye akaunti?</translation>
@@ -952,6 +954,7 @@
 <translation id="2453576648990281505">Faili tayari ipo</translation>
 <translation id="2453860139492968684">Maliza</translation>
 <translation id="2454247629720664989">Neno muhimu</translation>
+<translation id="245661998428026871">Video iliyo katika hali ya picha ndani ya picha itaacha kucheza.</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> inataka kunakili faili kutoka <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Kitambulisho cha Kitufe cha Mamlaka ya Uthibitishaji</translation>
 <translation id="2462752602710430187">Imeongeza <ph name="PRINTER_NAME" /></translation>
@@ -1358,6 +1361,7 @@
 <translation id="304826556400666995">Rejesha sauti ya Vichupo</translation>
 <translation id="3053013834507634016">Matumizi ya Ufunguo wa Cheti</translation>
 <translation id="3057861065630527966">Weka hifadhi rudufu ya picha na video zako</translation>
+<translation id="3059313675706898490">Programu ya Android Messages</translation>
 <translation id="3060379269883947824">Washa kipengele cha chagua ili izungumze</translation>
 <translation id="3061707000357573562">Huduma ya Kurekebisha</translation>
 <translation id="3064410671692449875">Data haitoshi</translation>
@@ -1406,6 +1410,7 @@
 <translation id="313205617302240621">Je, umesahau nenosiri lako?</translation>
 <translation id="3132996321662585180">Onyesha upya kila siku</translation>
 <translation id="3135204511829026971">Zungusha skrini</translation>
+<translation id="313638818480447860">Tumepata programu <ph name="NUMBER_OF_APPS" /> zilizounganishwa kwenye akaunti yako, ambazo zimeboreshwa kwa ajili ya kifaa hiki.</translation>
 <translation id="313963229645891001">Inapakua, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Ishara chaguomsingi manjano</translation>
 <translation id="3140353188828248647">Lenga upau anwani</translation>
@@ -1436,6 +1441,7 @@
 <translation id="3182749001423093222">Kikagua maendelezo</translation>
 <translation id="3183139917765991655">Kiletaji cha Wasifu</translation>
 <translation id="3184560914950696195">Haiwezi kuhifadhi kwenye $1. Picha zilizohaririwa zitahifadhiwa katika folda ya Vipakuliwa.</translation>
+<translation id="3188257591659621405">Faili zangu</translation>
 <translation id="3188465121994729530">Wastani Unaosonga</translation>
 <translation id="3190558889382726167">Nenosiri limehifadhiwa</translation>
 <translation id="3192947282887913208">Faili za Sauti</translation>
@@ -1520,6 +1526,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> inabanwa...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Maelezo ya programu</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Video inacheza katika hali ya picha ndani ya picha</translation>
 <translation id="3335337277364016868">Mwaka iliporekodiwa</translation>
 <translation id="3335947283844343239">Fungua Tena Kichupo Kilichofugwa</translation>
 <translation id="3336664756920573711">Fungua kifaa chako cha <ph name="DEVICE_TYPE" /> kwa kutumia simu yako ya Android</translation>
@@ -1539,6 +1546,7 @@
 <translation id="3360297538363969800">Uchapishaji umeshindwa. Tafadhali angalia printa yako na ujaribu tena.</translation>
 <translation id="3364721542077212959">Zana za stylus</translation>
 <translation id="3365598184818502391">Tumia Ctrl au Alt</translation>
+<translation id="3367047597842238025">Weka mipangilio ya <ph name="DEVICE_TYPE" /> yako jinsi utakavyo na ugundue uwezo wake wote kwa urahisi.</translation>
 <translation id="3368922792935385530">Umeunganishwa</translation>
 <translation id="3369624026883419694">Inatafuta seva pangishi...</translation>
 <translation id="337286756654493126">Soma folda unazofungua katika programu</translation>
@@ -1552,6 +1560,7 @@
 <translation id="3389312115541230716">Bofya kitufe cha kulia cha kipanya chako katika aikoni ya <ph name="SMALL_PRODUCT_LOGO" /> kilicho kwenye upau wakazi</translation>
 <translation id="3391716558283801616">Kichupo cha 7</translation>
 <translation id="3396331542604645348">Printa iliyochaguliwa haipatikani au haijasakinishwa vizuri. Angalia printa yako au ujaribu kuchagua printa nyingine.</translation>
+<translation id="3396800784455899911">Kwa kubofya kitufe cha "Kubali na uendelee", unakubali uchakataji uliobainishwa hapo juu katika huduma hizi za Google.</translation>
 <translation id="3399432415385675819">Arifa zitazimwa</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Hakuna manenosiri ya tovuti hii yaliyohifadhiwa</translation>
@@ -1780,10 +1789,13 @@
 <translation id="3726463242007121105">Kifaa hakiwezi kufunguliwa kwa sababu mfumo wake wa faili hauhimiliwi.</translation>
 <translation id="3727148787322499904">Kubadilisha mipangilio hii kutaathiri mitandao yote inayoshirikiwa</translation>
 <translation id="3727187387656390258">Kagua dirisha ibukizi</translation>
+<translation id="3729506734996624908">Tovuti zinazoruhusiwa</translation>
 <translation id="3732078975418297900">Hililafu kwenye mstari wa <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">Seva ya SSL iliyo na Upandishaji</translation>
+<translation id="3735740477244556633">Panga kwa</translation>
 <translation id="3737274407993947948">Hitilafu imetokea wakati wa kusakinisha Linux...</translation>
 <translation id="3737536731758327622">Vipakuliwa vyako vitaonekana hapa</translation>
+<translation id="3738671331307774213">Hatua ya kuthibitisha utambulisho wako inasaidia kulinda data yako ya faragha</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Ungependa kufungua <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859">Sasa <ph name="DEVICE_NAME" /> itaonekana katika Admin Console</translation>
@@ -1868,10 +1880,10 @@
 <translation id="3846116211488856547">Pata zana za kutengeneza tovuti, programu za Android, na zaidi. Kusakinisha Linux kutapakua data ya <ph name="DOWNLOAD_SIZE" />.</translation>
 <translation id="385051799172605136">Nyuma</translation>
 <translation id="3851428669031642514">Pakia hati zisizo salama</translation>
+<translation id="3854599674806204102">Teua chaguo</translation>
 <translation id="3855441664322950881">Fungasha kiendelezi</translation>
 <translation id="3855676282923585394">Leta Alamisho na Mipangilio...</translation>
 <translation id="3856800405688283469">Chagua saa za eneo</translation>
-<translation id="3856921555429624101">Upimaji wa matumizi ya data umekamilika</translation>
 <translation id="3857228364945137633">Jaribu kutumia Smart Lock kukifungua kifa chako cha <ph name="DEVICE_TYPE" /> bila kutumia nenosiri, simu yako ikiwa karibu.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Umesitisha usawazishaji</translation>
@@ -2240,7 +2252,6 @@
 <translation id="4508051413094283164">Fungua url zote katika dirisha fiche</translation>
 <translation id="4508265954913339219">Uamilisho umeshindikana</translation>
 <translation id="4508765956121923607">Tazama &amp;Asili</translation>
-<translation id="4509823033118379431">Picha haipatikani kwa sasa. Tafadhali unganisha tena ili uangalie mikusanyiko.</translation>
 <translation id="451407183922382411">Inaendeshwa na <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Sanidi mtumiaji mpya anayesimamiwa</translation>
 <translation id="4514610446763173167">Geuza video ili ucheze au usimamishe</translation>
@@ -2317,6 +2328,7 @@
 <translation id="4627442949885028695">Endelea kutoka kwenye kifaa kingine</translation>
 <translation id="4628314759732363424">Badilisha...</translation>
 <translation id="4628757576491864469">Vifaa</translation>
+<translation id="4628948037717959914">Picha</translation>
 <translation id="4630590996962964935">Kibambo batili: $1</translation>
 <translation id="4631887759990505102">Msanii</translation>
 <translation id="4632483769545853758">Rejesha  sauti ya Kichupo</translation>
@@ -2502,7 +2514,6 @@
 <translation id="4905417359854579806">Iko tayari kuhifadhi nakala ya <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Faili hii haipakuliwi kwa kawaida na huenda ikawa hatari.</translation>
 <translation id="4907306957610201395">Aina ya Ruhusa</translation>
-<translation id="4907824805858067479">Kadi zilizohifadhiwa zitazimwa na msimamizi wako</translation>
 <translation id="4908811072292128752">Fungua kichupo kipya ili uvinjari tovuti mbili kwa wakati mmoja</translation>
 <translation id="4909038193460299775">Kwa sababu akaunti hii inadhibitiwa na <ph name="DOMAIN" />, alamisho, historia, manenosiri, na mipangilio yako mingine itafutwa kwenye kifaa hiki. Hata hivyo, data yako itaendelea kuhifadhiwa katika Akaunti yako ya Google na inaweza kudhibitiwa kwenye <ph name="BEGIN_LINK" />Dashibodi ya Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Umejisajili</translation>
@@ -2534,6 +2545,7 @@
 <translation id="4955814292505481804">Kila mwaka</translation>
 <translation id="4957949153200969297">Washa tu vipengele vinavyohusiana na Usawazishaji wa <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Pata kadi zako zote katika sehemu moja</translation>
 <translation id="496226124210045887">Folda uliyochagua ina faili nyeti. Je, una uhakika unataka kutoa uwezo wa kudumu wa kufikia kuandika folda hii kwa "$1"?</translation>
 <translation id="4964455510556214366">Mpangilio</translation>
 <translation id="4964673849688379040">Inakagua...</translation>
@@ -2581,6 +2593,7 @@
 <translation id="5027562294707732951">Ongeza kiendelezi</translation>
 <translation id="5029568752722684782">Futa nakala</translation>
 <translation id="5030338702439866405">Kimetolewa Na</translation>
+<translation id="503155457707535043">Inapakua programu</translation>
 <translation id="503498442187459473"><ph name="HOST" /> inataka kutumia kamera na maikrofoni yako</translation>
 <translation id="5036662165765606524">Usiruhusu tovuti yoyote kupakua faili nyingi kiotomatiki</translation>
 <translation id="5037676449506322593">Chagua Zote</translation>
@@ -3095,6 +3108,7 @@
 <translation id="57838592816432529">Zima sauti</translation>
 <translation id="5785583009707899920">Huduma za Faili za Chrome</translation>
 <translation id="5787146423283493983">Makubaliano ya Funguo</translation>
+<translation id="5788127256798019331">Faili za Google Play</translation>
 <translation id="5788367137662787332">Samahani, angalau sehemu moja kwenye kifaa <ph name="DEVICE_LABEL" /> haingeweza kuangikwa.</translation>
 <translation id="5794414402486823030">Fungua ukitumia kitazamaji cha mfumo wakati wowote</translation>
 <translation id="5794786537412027208">Ondoka kwenye Programu zote za Chrome</translation>
@@ -3222,7 +3236,6 @@
 <translation id="5990386583461751448">Imetafsiriwa</translation>
 <translation id="5991049340509704927">Zidisha</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Ili uhakikishe kuwa unaendelea kuvinjari wavuti, mwombe msimamizi wako aondoe programu hii.}other{Ili uhakikishe kuwa unaendelea kuvinjari wavuti, mwombe msimamizi wako aondoe programu hii.}}</translation>
-<translation id="5993332328670040093">Matumizi yako ya data hayatapimwa tena.</translation>
 <translation id="6002458620803359783">Sauti Zinazopendelewa</translation>
 <translation id="6005695835120147974">Ruta ya Maudhui</translation>
 <translation id="6006484371116297560">Kawaida</translation>
@@ -3348,6 +3361,7 @@
 <translation id="6178664161104547336">Chagua cheti</translation>
 <translation id="6181431612547969857">Upakuaji umezuiwa</translation>
 <translation id="6185132558746749656">Mahali Kifaa Kilipo</translation>
+<translation id="6185617499004995178">Kithibitishaji cha IPP ya CUPS</translation>
 <translation id="6185696379715117369">Ukurasa mmoja juu</translation>
 <translation id="6189273858858366896">Dhibiti au uweke mipangilio ya Faili Zinazoshirikiwa katika Mitandao.</translation>
 <translation id="6189412234224385711">Fungua ukitumia <ph name="EXTENSION_NAME" /></translation>
@@ -3380,6 +3394,7 @@
 <translation id="6231881193380278751">Ongeza hoja katika URL ili kuonyesha upya ukurasa kiotomatiki: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Betri</translation>
 <translation id="6232116551750539448">Muunganisho kwenye <ph name="NAME" /> umepotea</translation>
+<translation id="6235700927623181151">Kichupo hiki kinashiriki maudhui yako yaliyo kwenye eneo-kazi.</translation>
 <translation id="6237816943013845465">Hukuruhusu kurekebisha ubora wa skrini yako</translation>
 <translation id="6238923052227198598">Kiweke kidokezo cha hivi punde kwenye skrini iliyofungwa</translation>
 <translation id="6239558157302047471">Pakia fremu upya</translation>
@@ -3414,7 +3429,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> haipakuliwi kwa kawaida na huenda ikawa hatari.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Printa mpya kwenye mtandao wako}other{Printa mpya kwenye mtandao wako}}</translation>
-<translation id="6286684120317096255">Matumizi ya data yanapimwa</translation>
 <translation id="6286708577777130801">Maelezo ya nenosiri lililohifadhiwa</translation>
 <translation id="6287852322318138013">Chagua programu ili ufungue faili hii</translation>
 <translation id="6289452883081499048">Huduma za Google zilizo mahususi kwako kama vile Google Play</translation>
@@ -3525,6 +3539,7 @@
 <translation id="6451180435462401570">Dhibiti vifaa vya Google Cloud Print</translation>
 <translation id="6451689256222386810">Ikiwa umesahau kauli yako ya siri au ungependa kubadilisha mipangilio hii, <ph name="BEGIN_LINK" />fanya usawazishaji upya<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Kataa</translation>
+<translation id="6455264371803474013">Kwenye tovuti mahususi</translation>
 <translation id="6455894534188563617">Na Folda Mpya</translation>
 <translation id="6456394469623773452">Bora</translation>
 <translation id="6456631036739229488">Simu ya Smart Lock imebadilishwa. Andika nenosiri lako ili usasishe Smart Lock. Utakapoitumia tena, simu yako itafungua <ph name="DEVICE_TYPE" /> yako. Zima Smart Lock katika Mipangilio.</translation>
@@ -3602,6 +3617,7 @@
 <translation id="657402800789773160">&amp;Pakia Ukurasa Huu Upya</translation>
 <translation id="6577284282025554716">Imeghairi kupakua: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Simba kwa njia fiche manenosiri yaliyosawazishwa kwa jina la mtumiaji na nenosiri lako la Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Imeshiriki maudhui yaliyo kwenye eneo kazi</translation>
 <translation id="6580151766480067746">Toleo la ARC</translation>
 <translation id="6581162200855843583">Kiungo cha Hifadhi ya Google</translation>
 <translation id="6582421931165117398">Ili ulinde maelezo yako ya kibinafsi, badilisha nenosiri lako sasa. Kabla ya kubadilisha nenosiri lako, utaombwa uingie katika akaunti.</translation>
@@ -4068,6 +4084,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Huenda programu hii ikazuia Chrome isifanye kazi inavyostahili.}other{Huenda programu hizi zikazuia Chrome isifanye kazi inavyostahili.}}</translation>
 <translation id="7303900363563182677">Tovuti hii imezuiwa isione maandishi na picha zilizonakiliwa kwenye ubao wa kunakili</translation>
 <translation id="730515362922783851">Badilisha data kwa kifaa chochote kwenye mtandao au intaneti ya karibu</translation>
+<translation id="7307129035224081534">Umesitishwa</translation>
 <translation id="7308002049209013926">Kitumie Kifungua Programu ili uzifikie programu na shughuli mpya haraka. Ili kuzifikia kwa kutumia kibodi, bonyeza Alt + Shift + L.</translation>
 <translation id="7309257895202129721">Onyesha &amp;vidhibiti</translation>
 <translation id="7310598146671372464">Imeshindwa kuingia katika akaunti. Seva haitumii aina zilizobainishwa za usimbaji fiche wa Kerberos. Tafadhali wasiliana na msimamizi wako.</translation>
@@ -4125,7 +4142,6 @@
 <translation id="7400839060291901923">Weka mipangilio ya muunganisho kwenye <ph name="PHONE_NAME" /> yako</translation>
 <translation id="740624631517654988">Kidirisha ibukizi kimezuiwa</translation>
 <translation id="7407430846095439694">Leta na Ufunge</translation>
-<translation id="7409233648990234464">Zindua tena na Powerwash</translation>
 <translation id="7409836189476010449">Tumia Flash</translation>
 <translation id="7410344089573941623">Uliza iwapo <ph name="HOST" /> inataka kufikia kamera na maikrofoni yako</translation>
 <translation id="741204030948306876">Ndiyo, ninakubali</translation>
@@ -4158,6 +4174,7 @@
 <translation id="7465778193084373987">URL ya Kughairi Cheti cha Netscape</translation>
 <translation id="7469894403370665791">Unganisha otomatiki kwenye mtandao huu</translation>
 <translation id="747114903913869239">Hitilafu: Haikuweza kufumbua kiendelezi</translation>
+<translation id="7473753388963818366">Turuhusu tuweke mipangilio ya <ph name="DEVICE_TYPE" /> yako</translation>
 <translation id="7473891865547856676">La Asante</translation>
 <translation id="747459581954555080">Rejesha zote</translation>
 <translation id="7475671414023905704">URL ya Nenosiri la Netscape Lililopotea</translation>
@@ -4281,6 +4298,7 @@
 <translation id="7665369617277396874">Ongeza akaunti</translation>
 <translation id="7671130400130574146">Tumia upau jina na mipaka ya mfumo</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, katika <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Tuma sauti yako kwa Google ili uruhusu kuandika kwa kutamka katika sehemu ya maandishi.</translation>
 <translation id="7681095912841365527">Tovuti inaweza kutumia bluetooth</translation>
 <translation id="7683373461016844951">Ili uendelee, bofya SAWA, kisha ubofye Ongeza Mtu ili uunde wasifu mpya unaotumia anwani ya barua pepe ya <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Kiendelezi kimesakinishwa na Msimamizi Wako</translation>
@@ -4322,6 +4340,7 @@
 <translation id="7740996059027112821">Wastani</translation>
 <translation id="7748528009589593815">Kichupo kilichotangulia</translation>
 <translation id="7748626145866214022">Chaguo zaidi zinapatikana kwenye upau wa shughuli. Bonyeza Alt + A ili uangazie upau wa shughuli.</translation>
+<translation id="7750228210027921155">Picha ndani ya picha</translation>
 <translation id="7751260505918304024">Onyesha zote</translation>
 <translation id="7754704193130578113">Uliza mahali pa kuhifadhi kila faili kabla ya kuipakua.</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4432,6 +4451,7 @@
 <translation id="7857949311770343000">Je, huu ndio ukurasa wa kichupo kipya uliokuwa ukiutarajia?</translation>
 <translation id="786073089922909430">Huduma: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Vipakuzi</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{Kidakuzi 1}other{Vidakuzi #}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Imeoanishwa</translation>
 <translation id="7870730066603611552">Kagua chaguo za usawazishaji baada ya kuweka mipangilio</translation>
 <translation id="7870790288828963061">Hamna programu za Skrini Nzima zilizo na toleo jipya zaidi zimepatikana. Hakuna cha kusasisha. Tafadhali ondoa hifadhi ya USB.</translation>
@@ -4754,6 +4774,7 @@
 <translation id="8373553483208508744">Zima vichupo</translation>
 <translation id="8382913212082956454">Nakili barua p&amp;epe</translation>
 <translation id="8386903983509584791">Imemaliza kutafuta</translation>
+<translation id="8389492867173948260">Ruhusu kiendelezi hiki kisome na kubadilisha data yako yote iliyo kwenye tovuti unazotembelea:</translation>
 <translation id="8390449457866780408">Seva haipatikani.</translation>
 <translation id="8391712576156218334">Picha haipatikani. Jaribu tena baadaye.</translation>
 <translation id="8392234662362215700">Gusa Control-Shift-Space ili ubadilishe muundo wa kibodi.</translation>
@@ -4785,6 +4806,7 @@
 <translation id="84297032718407999">Utaondolewa kwenye akaunti baada ya <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Badilisha PIN ya SIM</translation>
 <translation id="8434480141477525001">Lango la Kutatua la NaCl</translation>
+<translation id="8435395510592618362">Thibitisha utambulisho wako ukitumia <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Hifadhi kadi ya mikopo</translation>
 <translation id="8438328416656800239">Badilisha ili utumie kivinjari mahiri</translation>
 <translation id="8438566539970814960">Boresha utafutaji na kuvinjari</translation>
@@ -4811,6 +4833,7 @@
 <translation id="8465252176946159372">Si sahihi</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> inahitaji ruhusa yako ili kutumia</translation>
 <translation id="8466234950814670489">Kumbukumbu ya Tar</translation>
+<translation id="8466417995783206254">Kichupo hiki kinacheza video katika hali ya picha ndani ya picha.</translation>
 <translation id="8468750959626135884">Fungua kifaa chako cha <ph name="DEVICE_TYPE" /> kwa kutumia simu yako ya Android.</translation>
 <translation id="8470028084415844044">Ili upate manenosiri yako yote kwenye vifaa vyako vyote, washa usawazishaji.</translation>
 <translation id="8470513973197838199">Manenosiri yaliyohifadhiwa ya <ph name="ORIGIN" /></translation>
@@ -4831,6 +4854,7 @@
 <translation id="8496717697661868878">Tekeleza Programu-jalizi Hii</translation>
 <translation id="8497219075884839166">Huduma za Windows</translation>
 <translation id="8498214519255567734">Rahisisha kuangalia skrini yako au kusoma katika mwangaza hafifu</translation>
+<translation id="8498395510292172881">Endelea kusoma katika Chrome</translation>
 <translation id="8503813439785031346">Jina la mtumiaji</translation>
 <translation id="850875081535031620">Hakuna programu hasidi iliyopatikana</translation>
 <translation id="8509646642152301857">Upakuaji wa kamusi ya kukagua hijai umeshindwa.</translation>
@@ -4981,7 +5005,6 @@
 <translation id="8725066075913043281">Jaribu tena</translation>
 <translation id="8725178340343806893">Vipendwa/Alamisho</translation>
 <translation id="8726206820263995930">Hitilafu wakati wa kupata mipangilio ya sera kutoka kwenye seva: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Usionyeshe hii tena</translation>
 <translation id="8727344521467137076">Kuna programu hatari kwenye kompyuta yako. Chrome inaiondoa na itarejesha mipangilio yako ili kuwezesha kivinjari chako kifanye kazi tena kama kawaida.</translation>
 <translation id="8730621377337864115">Nimemaliza</translation>
 <translation id="8732030010853991079">Tumia kiendelezi hiki kwa kubofya aikoni hii.</translation>
@@ -5172,6 +5195,7 @@
 <translation id="9027459031423301635">Fungua Kiungo katika Kichupo &amp;Kipya</translation>
 <translation id="9030515284705930323">Shirika lako halijaruhusu Duka la Google Play kwa akaunti yako. Wasiliana na msimamizi wako kwa maelezo zaidi.</translation>
 <translation id="9033857511263905942">&amp;Bandika</translation>
+<translation id="9034924485347205037">Faili za Linux</translation>
 <translation id="9035012421917565900">Hutaweza kuvirudisha vipengee kwenye '<ph name="DESTINATION_NAME" />', hivyo hutaweza kutendua hatua hii.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Onyesha Asili</translation>
@@ -5272,6 +5296,7 @@
 <translation id="9173995187295789444">Inatafuta vifaa vya Bluetooth...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Kifaa cha Bluetooth kimeunganishwa</translation>
 <translation id="9177499212658576372">Umeunganishwa kwa mtandao <ph name="NETWORK_TYPE" /> kwa sasa.</translation>
+<translation id="9179734824669616955">Weka mipangilio ya Linux (Beta) kwenye <ph name="DEVICE_TYPE" /> yako</translation>
 <translation id="9180281769944411366">Huenda mchakato huu ukachukua dakika kadhaa. Inaanzisha metadata ya Linux.</translation>
 <translation id="9180380851667544951">Tovuti inaweza kushiriki skrini yako</translation>
 <translation id="9188441292293901223">Tafadhali pata toleo jipya zaidi la simu yako ya Android ili ufungue <ph name="DEVICE_TYPE" /> hii.</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 42dbea6..5e35a56 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -565,7 +565,6 @@
 <translation id="1829192082282182671">Zoom &amp;Out</translation>
 <translation id="1830550083491357902">உள்நுழைந்திருக்கவில்லை</translation>
 <translation id="1832511806131704864">ஃபோன் மாற்றம் புதுப்பிக்கப்பட்டது</translation>
-<translation id="1832685970989658809">சேமிக்கப்பட்ட பேமெண்ட் முறைகளை உங்கள் நிர்வாகி முடக்கியுள்ளார்</translation>
 <translation id="1834503245783133039">பதிவிறக்க முடியவில்லை: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">தேடலை அழி</translation>
 <translation id="1838709767668011582">Google தளம்</translation>
@@ -942,7 +941,6 @@
 <translation id="2435457462613246316">கடவுச்சொல்லைக் காண்பி</translation>
 <translation id="2436186046335138073">எல்லா <ph name="PROTOCOL" /> இணைப்புகளையும் திறக்க, <ph name="HANDLER_HOSTNAME" /> ஐ அனுமதிக்கவா?</translation>
 <translation id="2436707352762155834">குறைந்தபட்சம்</translation>
-<translation id="2437139306601019091">தரவுப் பயன்பாட்டை அளவிடுதல் முடிந்தது</translation>
 <translation id="2440604414813129000">ஆ&amp;தாரத்தைக் காண்பி</translation>
 <translation id="2445081178310039857">நீட்டிப்பு மூல கோப்பகம் தேவை.</translation>
 <translation id="2445484935443597917">ஒரு புதிய சுயவிவரத்தை உருவாக்கு</translation>
@@ -1878,7 +1876,6 @@
 <translation id="3855441664322950881">நீட்டிப்பைத் தொகுப்பாக்கு</translation>
 <translation id="3855676282923585394">புக்மார்க்ஸ் மற்றும் அமைப்புகளை இறக்குமதி செய்க...</translation>
 <translation id="3856800405688283469">நேரமண்டலத்தைத் தேர்ந்தெடுக்கவும்</translation>
-<translation id="3856921555429624101">தரவுப் பயன்பாட்டை அளவிடுதல் முடிந்தது</translation>
 <translation id="3857228364945137633">உங்கள் மொபைல் அருகில் இருக்கும் போது, கடவுச்சொல்லை உள்ளிடாமல் <ph name="DEVICE_TYPE" /> சாதனத்தைத் திறக்க, Smart Lockஐப் பயன்படுத்திப் பார்க்கவும்.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: ஒத்திசைவு இடைநிறுத்தப்பட்டுள்ளது</translation>
@@ -2249,7 +2246,6 @@
 <translation id="4508051413094283164">அனைத்தையும் மறைநிலைச் சாளரத்தில் திறக்கும்</translation>
 <translation id="4508265954913339219">செயலாக்கம் தோல்வியுற்றது</translation>
 <translation id="4508765956121923607">ஆ&amp;தாரத்தைக் காண்பி</translation>
-<translation id="4509823033118379431">தற்போது படங்கள் கிடைக்கவில்லை. தொகுப்புகளைப் பார்க்க, மீண்டும் இணைக்கவும்.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> வழங்குவது</translation>
 <translation id="4514542542275172126">புதிய கண்காணிக்கப்படும் பயனரை அமை</translation>
 <translation id="4514610446763173167">இயக்க அல்லது இடைநிறுத்த, வீடியோவை நிலைமாற்றவும்</translation>
@@ -2326,6 +2322,7 @@
 <translation id="4627442949885028695">மற்றொரு சாதனத்திலிருந்து பார்த்தவை</translation>
 <translation id="4628314759732363424">மாற்று...</translation>
 <translation id="4628757576491864469">சாதனங்கள்</translation>
+<translation id="4628948037717959914">படம்</translation>
 <translation id="4630590996962964935">தவறான எழுத்து: $1</translation>
 <translation id="4631887759990505102">கலைஞர்</translation>
 <translation id="4632483769545853758">ஒலி இயக்கு</translation>
@@ -2511,7 +2508,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> கோப்புகளைக் காப்புப் பிரதி எடுக்கத் தயாராக உள்ளது</translation>
 <translation id="4907161631261076876">பொதுவாக இந்தக் கோப்புப் பதிவிறக்கப்படுவதில்லை, மேலும் ஆபத்தானதாக இருக்கக்கூடும்.</translation>
 <translation id="4907306957610201395">அனுமதி வகை</translation>
-<translation id="4907824805858067479">சேமித்த கார்டுகளை உங்கள் நிர்வாகி முடக்கியுள்ளார்</translation>
 <translation id="4908811072292128752">ஒரே நேரத்தில் இரண்டு தளங்களைப் பார்வையிட, புதிய தாவலைத் திறக்கவும்</translation>
 <translation id="4909038193460299775">இந்தக் கணக்கை <ph name="DOMAIN" /> நிர்வகிப்பதால், இந்தச் சாதனத்திலிருந்து உங்கள் புத்தகக்குறிகள், வரலாறு, கடவுச்சொற்கள் மற்றும் பிற அமைப்புகள் அழிக்கப்படும். இருப்பினும், உங்கள் தரவு தொடர்ந்து Google கணக்கில் சேமிக்கப்படும். அவற்றை <ph name="BEGIN_LINK" />Google டாஷ்போர்டில்<ph name="END_LINK" /> நிர்வகிக்கலாம்.</translation>
 <translation id="4909359680501173791">பதிவுசெய்துவிட்டீர்கள்</translation>
@@ -3232,7 +3228,6 @@
 <translation id="5990386583461751448">மொழிபெயர்க்கப்பட்டது</translation>
 <translation id="5991049340509704927">பெரிதாக்கலாம்</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்தப் பயன்பாட்டை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}other{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்தப் பயன்பாடுகளை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}}</translation>
-<translation id="5993332328670040093">உங்கள் தரவுப் பயன்பாடு இனி அளவிடப்படாது.</translation>
 <translation id="6002458620803359783">விருப்பமான குரல்கள்</translation>
 <translation id="6005695835120147974">மீடியா ரூட்டர்</translation>
 <translation id="6006484371116297560">கிளாசிக்</translation>
@@ -3424,7 +3419,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">பொதுவாக <ph name="FILE_NAME" /> பதிவிறக்கப்படாது, அத்துடன் இது ஆபத்துக்குரியதாக இருக்கலாம்.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{உங்கள் நெட்வொர்க்கில் புதிய பிரிண்டர் உள்ளது}other{உங்கள் நெட்வொர்க்கில் புதிய பிரிண்டர்கள் உள்ளன}}</translation>
-<translation id="6286684120317096255">தரவுப் பயன்பாடு அளவிடப்படுகிறது</translation>
 <translation id="6286708577777130801">சேமித்த கடவுச்சொல் விவரங்கள்</translation>
 <translation id="6287852322318138013">இந்தக் கோப்பை திறக்க பயன்பாட்டைத் தேர்ந்தெடுக்கவும்</translation>
 <translation id="6289452883081499048">Play போன்ற தனிப்பயனாக்கிய Google சேவைகள்</translation>
@@ -4135,7 +4129,6 @@
 <translation id="7400839060291901923"><ph name="PHONE_NAME" /> இல் இணைப்பை அமைக்கவும்</translation>
 <translation id="740624631517654988">மேல்-விரி தடுக்கப்பட்டது</translation>
 <translation id="7407430846095439694">இறக்கி, பிணை</translation>
-<translation id="7409233648990234464">மீண்டும் தொடங்கி, பவர்வாஷ் செய்க</translation>
 <translation id="7409836189476010449">ஃபிளாஷை இயக்க</translation>
 <translation id="7410344089573941623">உங்கள் கேமராவையும் மைக்ரோஃபோனையும் <ph name="HOST" /> அணுக வேண்டுமெனில் கேட்கவும்</translation>
 <translation id="741204030948306876">ஏற்கிறேன்</translation>
@@ -4987,7 +4980,6 @@
 <translation id="8725066075913043281">மீண்டும் முயற்சிக்கவும்</translation>
 <translation id="8725178340343806893">விருப்பங்கள்/புக்மார்க்ஸ்</translation>
 <translation id="8726206820263995930">சேவையகத்திலிருந்து கொள்கை அமைப்புகளைப் பெறுவதில் பிழை: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">இதை மீண்டும் காட்டாதே</translation>
 <translation id="8727344521467137076">உங்கள் கணினியில் தீங்கிழைக்கும் மென்பொருள் உள்ளது. Chrome அதை அகற்றுகிறது. உங்கள் உலாவியை வழக்கம் போல் மீண்டும் செயல்படுத்துவதற்கு, உங்கள் அமைப்புகளை Chrome மீட்டமைக்கும்.</translation>
 <translation id="8730621377337864115">முடிந்தது</translation>
 <translation id="8732030010853991079">இந்த ஐகானில் கிளிக் செய்து இந்த நீட்டிப்பைப் பயன்படுத்துக.</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index bc10a738..a6505f9 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -563,7 +563,6 @@
 <translation id="1829192082282182671">&amp;దూరంగా జూమ్ చెయ్యి</translation>
 <translation id="1830550083491357902">సైన్ ఇన్ చేయలేదు</translation>
 <translation id="1832511806131704864">ఫోన్ మార్పు నవీకరించబడింది</translation>
-<translation id="1832685970989658809">సేవ్ చేయబడిన చెల్లింపు పద్ధతులు మీ నిర్వాహకుడి ద్వారా నిలిపివేయబడ్డాయి</translation>
 <translation id="1834503245783133039">డౌన్‌లోడ్ విజయవంతం కాలేదు: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">శోధనను తీసివేయి</translation>
 <translation id="1838709767668011582">Google సైట్</translation>
@@ -936,7 +935,6 @@
 <translation id="2435457462613246316">పాస్‌వర్డ్‌ను చూపించు</translation>
 <translation id="2436186046335138073">అన్ని <ph name="PROTOCOL" /> లింక్‌లను తెరవడానికి <ph name="HANDLER_HOSTNAME" />ను అనుమతించాలా?</translation>
 <translation id="2436707352762155834">కనిష్టం</translation>
-<translation id="2437139306601019091">డేటా వినియోగాన్ని గణించడం ముగిసింది</translation>
 <translation id="2440604414813129000">&amp;సోర్స్‌ను చూడండి</translation>
 <translation id="2445081178310039857">పొడిగింపు మూలం డైరెక్టరీ అవసరం.</translation>
 <translation id="2445484935443597917">కొత్త ప్రొఫైల్‌ని సృష్టించు</translation>
@@ -1865,7 +1863,6 @@
 <translation id="3855441664322950881">ప్యాక్ పొడిగింపు</translation>
 <translation id="3855676282923585394">బుక్‌మార్క్‌లు మరియు సెట్టింగ్‌లను దిగుమతి చెయ్యి...</translation>
 <translation id="3856800405688283469">సమయ మండలిని ఎంచుకోండి</translation>
-<translation id="3856921555429624101">డేటా వినియోగాన్ని గణించడం ముగిసింది</translation>
 <translation id="3857228364945137633">మీ ఫోన్ సమీపంలో ఉన్నప్పుడు మీ <ph name="DEVICE_TYPE" />ని పాస్‌వర్డ్‌ లేకుండా అన్‌లాక్ చేయడానికి Smart Lockను ప్రయత్నించండి.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: సమకాలీకరణ పాజ్ అయింది</translation>
@@ -2235,7 +2232,6 @@
 <translation id="4508051413094283164">అన్ని అజ్ఞాత విండోలో తెరవండి</translation>
 <translation id="4508265954913339219">సక్రియం  చేయడం విఫలమైంది</translation>
 <translation id="4508765956121923607">&amp;మూలాన్ని చూడండి</translation>
-<translation id="4509823033118379431">చిత్రాలు ప్రస్తుతం అందుబాటులో లేవు. సేకరణలను చూడటానికి, దయచేసి మళ్లీ కనెక్ట్ చేయండి.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> అందిస్తోంది</translation>
 <translation id="4514542542275172126">కొత్త పర్యవేక్షించబడే వినియోగదారుని సెటప్ చేయండి</translation>
 <translation id="4514610446763173167">ప్లే లేదా పాజ్ చేయడానికి వీడియోని టోగుల్ చేయండి</translation>
@@ -2312,6 +2308,7 @@
 <translation id="4627442949885028695">మరో పరికరం నుండి కొనసాగించండి</translation>
 <translation id="4628314759732363424">మార్చు...</translation>
 <translation id="4628757576491864469">పరికరాలు</translation>
+<translation id="4628948037717959914">ఫోటో</translation>
 <translation id="4630590996962964935">చెల్లని అక్షరం: $1</translation>
 <translation id="4631887759990505102">చిత్రకారుడు</translation>
 <translation id="4632483769545853758">ట్యాబ్‌ని అన్‌మ్యూట్ చేయండి</translation>
@@ -2495,7 +2492,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> వాటిని బ్యాకప్ చేయడానికి సిద్ధంగా ఉంది</translation>
 <translation id="4907161631261076876">ఈ ఫైల్ సాధారణ పద్ధతిలో డౌన్‌లోడ్ కాలేదు, ఇది అపాయకరమైనది కావచ్చు.</translation>
 <translation id="4907306957610201395">అనుమతి వర్గం</translation>
-<translation id="4907824805858067479">సేవ్ చేయబడిన కార్డ్‌లు మీ నిర్వాహకుడు ద్వారా నిలిపివేయబడ్డాయి</translation>
 <translation id="4908811072292128752">ఒకేసారి రెండు సైట్‌లను బ్రౌజ్ చేయడానికి కొత్త ట్యాబ్‌ను తెరవండి</translation>
 <translation id="4909038193460299775">ఈ ఖాతా <ph name="DOMAIN" /> నిర్వహణలో ఉన్నందున, మీ బుక్‌మార్క్‌లు, చరిత్ర, పాస్‌వర్డ్‌లు మరియు ఇతర సెట్టింగ్‌లు ఈ పరికరం నుండి తీసివేయబడతాయి. అయితే, మీ డేటా మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది మరియు <ph name="BEGIN_LINK" />Google డాష్‌బోర్డ్<ph name="END_LINK" />లో నిర్వహించవచ్చు.</translation>
 <translation id="4909359680501173791">మీరు విజయవంతంగా నమోదు చేసుకున్నారు</translation>
@@ -3210,7 +3206,6 @@
 <translation id="5990386583461751448">అనువదించబడింది</translation>
 <translation id="5991049340509704927">పెద్దదిగా చేయండి</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{వెబ్‌ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్‌న్ని తీసివేయమని కోరండి.}other{వెబ్‌ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్‌లను తీసివేయమని కోరండి.}}</translation>
-<translation id="5993332328670040093">మీ డేటా వినియోగం ఇకపై గణించబడదు.</translation>
 <translation id="6002458620803359783">ప్రాధాన్య వాయిస్‌లు</translation>
 <translation id="6005695835120147974">మీడియా రూటర్</translation>
 <translation id="6006484371116297560">క్లాసిక్</translation>
@@ -3401,7 +3396,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> సాధారణంగా డౌన్‌లోడ్ చేయబడలేదు మరియు ప్రమాదకరమైనది కావచ్చు.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{మీ నెట్‌వర్క్‌లో కొత్త ప్రింటర్}other{మీ నెట్‌వర్క్‌లో కొత్త ప్రింటర్‌లు}}</translation>
-<translation id="6286684120317096255">డేటా వినియోగం గణించబడుతోంది</translation>
 <translation id="6286708577777130801">సేవ్ చేసిన పాస్‌వర్డ్ వివరాలు</translation>
 <translation id="6287852322318138013">ఈ ఫైల్‌ను తెరవడానికి అనువర్తనాన్ని ఎంచుకోండి</translation>
 <translation id="6289452883081499048">వ్యక్తిగతీకరించిన Google సేవలు, ఉదా., Play వంటివి</translation>
@@ -4110,7 +4104,6 @@
 <translation id="7400839060291901923">మీ <ph name="PHONE_NAME" />లో కనెక్షన్‌ని సెటప్ చేయండి</translation>
 <translation id="740624631517654988">పాప్-అప్ నిరోధించబడింది</translation>
 <translation id="7407430846095439694">దిగుమతి చేసి, అనుబంధించు</translation>
-<translation id="7409233648990234464">తిరిగి ప్రారంభించి, పవర్‌వాష్ చేయి</translation>
 <translation id="7409836189476010449">Flash అమలు చేయాలనుకుంటోంది</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> మీ కెమెరా మరియు మైక్రోఫోన్‌ను ప్రాప్యత చేయాలని అనుకుంటే నాకు తెలియజేయి</translation>
 <translation id="741204030948306876">సరే, సమ్మతమే</translation>
@@ -4956,7 +4949,6 @@
 <translation id="8725066075913043281">మళ్ళీ ప్రయత్నించండి</translation>
 <translation id="8725178340343806893">ఇష్టమైనవి/బుక్‌మార్క్‌లు</translation>
 <translation id="8726206820263995930">విధాన సెట్టింగ్‌లను సర్వర్ నుండి పొందుతున్నప్పుడు లోపం: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">దీన్ని మళ్లీ చూపవద్దు</translation>
 <translation id="8727344521467137076">మీ కంప్యూటర్‌లో హానికరమైన సాఫ్ట్‌వేర్ ఉంది. Chrome దానిని తీసివేస్తోంది మరియు మీ బ్రౌజర్ మళ్లీ సాధారణంగా పని చేసేలా చేయడం కోసం మీ సెట్టింగ్‌లను పునరుద్ధరిస్తుంది.</translation>
 <translation id="8730621377337864115">పూర్తయింది</translation>
 <translation id="8732030010853991079">ఈ చిహ్నంపై క్లిక్ చేయడం ద్వారా ఈ పొడిగింపును ఉపయోగించండి.</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 7d0a2ac8..4dbbfca8 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">ถามก่อนที่จะเข้าถึง</translation>
 <translation id="1434696352799406980">การดำเนินการนี้จะรีเซ็ตหน้าเริ่มต้นใช้งาน หน้าแท็บใหม่ เครื่องมือค้นหา แท็บที่ถูกตรึง และยังปิดใช้ส่วนขยายทั้งหมด ตลอดจนล้างข้อมูลชั่วคราว เช่น คุกกี้ โดยจะไม่ล้างบุ๊กมาร์ก ประวัติ และรหัสผ่านที่บันทึกไว้</translation>
 <translation id="1434886155212424586">หน้าแรกคือหน้าแท็บใหม่</translation>
+<translation id="1436671784520050284">ตั้งค่าต่อ</translation>
 <translation id="1436784010935106834">ลบออกแล้ว</translation>
 <translation id="1438632560381091872">เปิดเสียงแท็บ</translation>
 <translation id="1442392616396121389">ส่วนหน้าของการกำหนดเส้นทาง</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">พิซซ่า 1 ชิ้น</translation>
 <translation id="1467432559032391204">ซ้าย</translation>
 <translation id="1468571364034902819">ใช้โปรไฟล์นี้ไม่ได้</translation>
+<translation id="1470533772306424441">เราจะติดตั้งแอปเหล่านั้นให้คุณ หาแอปเพิ่มเติมสำหรับอุปกรณ์ได้ใน Play Store</translation>
 <translation id="1470811252759861213">หากต้องการรับส่วนขยายในคอมพิวเตอร์ทุกเครื่องของคุณ ให้<ph name="SIGN_IN_LINK" /></translation>
 <translation id="1474339897586437869">ไม่ได้อัปโหลด "<ph name="FILENAME" />" มีพื้นที่ว่างไม่เพียงพอใน Google ไดรฟ์ของคุณ</translation>
 <translation id="1475502736924165259">คุณมีใบรับรองของไฟล์ที่ไม่เข้ากับหมวดหมู่อื่นๆ</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">ย่อ</translation>
 <translation id="1830550083491357902">ไม่ได้ลงชื่อเข้าใช้</translation>
 <translation id="1832511806131704864">อัปเดตการเปลี่ยนแปลงของโทรศัพท์แล้ว</translation>
-<translation id="1832685970989658809">ผู้ดูแลระบบปิดใช้วิธีการชำระเงินที่บันทึกไว้</translation>
 <translation id="1834503245783133039">ดาวน์โหลดไม่สำเร็จ: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">ล้างการค้นหา</translation>
 <translation id="1838709767668011582">เว็บไซต์ Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">จาก:</translation>
 <translation id="2193365732679659387">การตั้งค่าความเชื่อถือ</translation>
 <translation id="2195729137168608510">การป้องกันอีเมล </translation>
+<translation id="2199298570273670671">ข้อผิดพลาด</translation>
 <translation id="2200356397587687044">Chrome ต้องการสิทธิ์ในการดำเนินการต่อ</translation>
 <translation id="220138918934036434">ปุ่มซ่อน</translation>
 <translation id="2202898655984161076">เกิดปัญหาในการแสดงรายการเครื่องพิมพ์ คุณอาจยังลงทะเบียนเครื่องพิมพ์บางเครื่องกับ <ph name="CLOUD_PRINT_NAME" /> ไม่เรียบร้อย</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">แสดงรหัสผ่าน</translation>
 <translation id="2436186046335138073">อนุญาตให้ <ph name="HANDLER_HOSTNAME" /> เปิดลิงก์ <ph name="PROTOCOL" /> ทั้งหมดไหม</translation>
 <translation id="2436707352762155834">ขั้นต่ำ</translation>
-<translation id="2437139306601019091">สิ้นสุดการวัดการใช้อินเทอร์เน็ต</translation>
 <translation id="2440604414813129000">ดูโ&amp;ค้ดต้นฉบับ</translation>
 <translation id="2445081178310039857">จำเป็นต้องระบุไดเรกทอรีหลักของส่วนขยาย</translation>
 <translation id="2445484935443597917">สร้างโปรไฟล์ใหม่</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> ต้องการยืนยันตัวตนของคุณ</translation>
 <translation id="2448312741937722512">ประเภท</translation>
 <translation id="2450223707519584812">คุณจะไม่สามารถเพิ่มผู้ใช้เนื่องจากไม่มีคีย์ของ Google API ดูรายละเอียดได้ที่ <ph name="DETAILS_URL" /></translation>
 <translation id="2450310832094867474">ปิดการซิงค์และออกจากระบบไหม</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">มีไฟล์นี้อยู่แล้ว</translation>
 <translation id="2453860139492968684">เสร็จสิ้น</translation>
 <translation id="2454247629720664989">คีย์เวิร์ด</translation>
+<translation id="245661998428026871">วิดีโอในโหมดการแสดงภาพซ้อนภาพจะหยุดเล่น</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" /> ต้องการคัดลอกไฟล์จาก <ph name="VOLUME_NAME" /></translation>
 <translation id="2462724976360937186">รหัสคีย์ผู้ออกใบรับรอง</translation>
 <translation id="2462752602710430187">เพิ่ม <ph name="PRINTER_NAME" /> แล้ว</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">เปิดเสียงแท็บ</translation>
 <translation id="3053013834507634016">การใช้คีย์ใบรับรอง </translation>
 <translation id="3057861065630527966">สำรองรูปภาพและวิดีโอ</translation>
+<translation id="3059313675706898490">Android Messages</translation>
 <translation id="3060379269883947824">เปิดใช้การเลือกเพื่อให้อ่าน</translation>
 <translation id="3061707000357573562">แพตช์บริการ</translation>
 <translation id="3064410671692449875">ข้อมูลไม่เพียงพอ</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">ลืมรหัสผ่าน</translation>
 <translation id="3132996321662585180">รีเฟรชทุกวัน</translation>
 <translation id="3135204511829026971">หมุนหน้าจอ</translation>
+<translation id="313638818480447860">เราพบแอป <ph name="NUMBER_OF_APPS" /> แอปที่เชื่อมต่ออยู่กับบัญชีของคุณซึ่งได้รับการปรับให้เหมาะกับอุปกรณ์นี้</translation>
 <translation id="313963229645891001">กำลังดาวน์โหลด <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">รูปโปรไฟล์เริ่มต้นสีเหลือง</translation>
 <translation id="3140353188828248647">โฟกัสแถบที่อยู่</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">ตรวจตัวสะกด</translation>
 <translation id="3183139917765991655">ตัวนำเข้าโปรไฟล์</translation>
 <translation id="3184560914950696195">ไม่สามารถบันทึกลงใน $1 ภาพที่แก้ไขจะถูกบันทึกไว้ในโฟลเดอร์ "ดาวน์โหลด"</translation>
+<translation id="3188257591659621405">ไฟล์ของฉัน</translation>
 <translation id="3188465121994729530">ค่าเฉลี่ยเคลื่อนที่</translation>
 <translation id="3190558889382726167">บันทึกรหัสผ่านแล้ว</translation>
 <translation id="3192947282887913208">ไฟล์เสียง</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">กำลังซิป <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">ข้อมูลแอป</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - วิดีโอกำลังเล่นในโหมดการแสดงภาพซ้อนภาพ</translation>
 <translation id="3335337277364016868">ปีที่บันทึก</translation>
 <translation id="3335947283844343239">เปิดแท็บที่ปิดไปแล้วขึ้นใหม่</translation>
 <translation id="3336664756920573711">ปลดล็อก <ph name="DEVICE_TYPE" /> ด้วยโทรศัพท์ Android ของคุณ</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">การพิมพ์ล้มเหลว โปรดตรวจสอบเครื่องพิมพ์และลองอีกครั้ง</translation>
 <translation id="3364721542077212959">เครื่องมือสไตลัส</translation>
 <translation id="3365598184818502391">ใช้ Ctrl หรือ Alt อย่างใดอย่างหนึ่ง</translation>
+<translation id="3367047597842238025">ตั้งค่า <ph name="DEVICE_TYPE" /> ได้ตามต้องการและสำรวจความสามารถอันน่าทึ่งทั้งหมดได้ง่ายๆ</translation>
 <translation id="3368922792935385530">เชื่อมต่อแล้ว</translation>
 <translation id="3369624026883419694">กำลังแปลงโฮสต์...</translation>
 <translation id="337286756654493126">อ่านโฟลเดอร์ที่คุณเปิดในแอปพลิเคชัน</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">คลิกขวาที่ไอคอน <ph name="SMALL_PRODUCT_LOGO" /> ในแถบงาน</translation>
 <translation id="3391716558283801616">แท็บ 7</translation>
 <translation id="3396331542604645348">เครื่องพิมพ์ที่เลือกไว้ไม่สามารถใช้ได้หรือไม่ได้รับการติดตั้งอย่างถูกต้อง โปรดตรวจสอบเครื่องพิมพ์ของคุณหรือลองเลือกเครื่องพิมพ์อื่น</translation>
+<translation id="3396800784455899911">การคลิกปุ่ม "ยอมรับและดำเนินการต่อ" แสดงว่าคุณยอมรับการดำเนินการของบริการต่างๆ ของ Google ตามที่ชี้แจ้งไว้ด้านบน</translation>
 <translation id="3399432415385675819">ระบบจะปิดใช้การแจ้งเตือน</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">ไม่มีรหัสผ่านบันทึกไว้สำหรับเว็บไซต์นี้</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">ไม่สามารถเปิดอุปกรณ์นี้ได้ เนื่องจากไม่สนับสนุนระบบไฟล์ของอุปกรณ์นี้</translation>
 <translation id="3727148787322499904">การเปลี่ยนการตั้งค่านี้จะส่งผลกับเครือข่ายที่แชร์ทั้งหมด</translation>
 <translation id="3727187387656390258">ตรวจสอบป๊อปอัป</translation>
+<translation id="3729506734996624908">เว็บไซต์ที่อนุญาต</translation>
 <translation id="3732078975418297900">เกิดข้อผิดพลาดในบรรทัดที่ <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">เซิร์ฟเวอร์ SSL ที่มีการยกระดับความปลอดภัย</translation>
+<translation id="3735740477244556633">จัดเรียงตาม</translation>
 <translation id="3737274407993947948">เกิดข้อผิดพลาดขณะติดตั้ง Linux...</translation>
 <translation id="3737536731758327622">การดาวน์โหลดของคุณจะปรากฏที่นี่</translation>
+<translation id="3738671331307774213">การยืนยันตัวตนจะช่วยปกป้องข้อมูลส่วนตัวของคุณ</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">เปิด <ph name="APPLICATION" /> ไหม</translation>
 <translation id="3741158646617793859">ตอนนี้ <ph name="DEVICE_NAME" /> จะปรากฏในคอนโซลผู้ดูแลระบบ</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">รับเครื่องมือสำหรับพัฒนาเว็บไซต์, แอป Android และอื่นๆ การติดตั้ง Linux จะดาวน์โหลดข้อมูลขนาด <ph name="DOWNLOAD_SIZE" /></translation>
 <translation id="385051799172605136">กลับ</translation>
 <translation id="3851428669031642514">โหลดสคริปต์ที่ไม่ปลอดภัย</translation>
+<translation id="3854599674806204102">เลือกตัวเลือก</translation>
 <translation id="3855441664322950881">แพคส่วนขยาย</translation>
 <translation id="3855676282923585394">นำเข้าบุ๊กมาร์กและการตั้งค่า...</translation>
 <translation id="3856800405688283469">เลือกเขตเวลา</translation>
-<translation id="3856921555429624101">สิ้นสุดการวัดการใช้อินเทอร์เน็ตแล้ว</translation>
 <translation id="3857228364945137633">ลองใช้ Smart Lock เพื่อปลดล็อก <ph name="DEVICE_TYPE" /> โดยไม่ต้องใช้รหัสผ่านเมื่อมีโทรศัพท์อยู่ใกล้ๆ</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: การซิงค์หยุดชั่วคราว</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">เปิดทั้งหมดในหน้าต่างที่ไม่ระบุตัวตน</translation>
 <translation id="4508265954913339219">การเปิดใช้งานล้มเหลว</translation>
 <translation id="4508765956121923607">ดู&amp;ต้นฉบับ</translation>
-<translation id="4509823033118379431">ขณะนี้รูปภาพยังไม่พร้อมใช้งาน โปรดเชื่อมต่ออีกครั้งเพื่อดูคอลเล็กชัน</translation>
 <translation id="451407183922382411">ขับเคลื่อนโดย <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">ตั้งค่าผู้ใช้ภายใต้การดูแลใหม่</translation>
 <translation id="4514610446763173167">สลับปุ่มควบคุมวิดีโอเพื่อเล่นหรือหยุดชั่วคราว</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">ดำเนินการต่อจากอุปกรณ์อื่น</translation>
 <translation id="4628314759732363424">เปลี่ยน...</translation>
 <translation id="4628757576491864469">อุปกรณ์</translation>
+<translation id="4628948037717959914">รูปภาพ</translation>
 <translation id="4630590996962964935">อักขระไม่ถูกต้อง: $1</translation>
 <translation id="4631887759990505102">ศิลปิน</translation>
 <translation id="4632483769545853758">เปิดเสียงแท็บ</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">พร้อมสำรอง <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">ไฟล์นี้ไม่ได้มีการดาวน์โหลดเป็นที่แพร่หลายและอาจเป็นอันตราย</translation>
 <translation id="4907306957610201395">หมวดหมู่สิทธิ์</translation>
-<translation id="4907824805858067479">ผู้ดูแลระบบปิดใช้การ์ดที่บันทึกไว้</translation>
 <translation id="4908811072292128752">เปิดแท็บใหม่เพื่อเรียกดูไซต์ 2 ไซต์พร้อมกัน</translation>
 <translation id="4909038193460299775">เนื่องจากบัญชีนี้มีการจัดการโดย <ph name="DOMAIN" /> บุ๊กมาร์ก ประวัติการเข้าชม รหัสผ่าน และการตั้งค่าอื่นๆ จะถูกล้างออกจากอุปกรณ์เครื่องนี้ แต่ข้อมูลจะยังจัดเก็บอยู่ในบัญชี Google และสามารถจัดการได้ใน<ph name="BEGIN_LINK" />แดชบอร์ด Google<ph name="END_LINK" /></translation>
 <translation id="4909359680501173791">ลงทะเบียนสำเร็จแล้ว</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">รายปี</translation>
 <translation id="4957949153200969297">เปิดใช้เฉพาะฟีเจอร์ที่เกี่ยวข้องกับการซิงค์ของ <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">เก็บบัตรทั้งหมดไว้ในที่เดียว</translation>
 <translation id="496226124210045887">โฟลเดอร์ที่คุณเลือกมีไฟล์ที่ละเอียดอ่อน คุณต้องการให้สิทธิ์การเข้าถึงในการอ่านโฟลเดอร์นี้อย่างถาวรแก่ "$1" ไหม</translation>
 <translation id="4964455510556214366">การจัดเรียง</translation>
 <translation id="4964673849688379040">กำลังตรวจสอบ...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">เพิ่มส่วนขยาย</translation>
 <translation id="5029568752722684782">ล้างสำเนา</translation>
 <translation id="5030338702439866405">ออกโดย</translation>
+<translation id="503155457707535043">กำลังดาวน์โหลดแอป</translation>
 <translation id="503498442187459473"><ph name="HOST" /> ต้องการใช้กล้องถ่ายรูปและไมโครโฟนของคุณ</translation>
 <translation id="5036662165765606524">ไม่อนุญาตให้ไซต์ใดๆ ทำการดาวน์โหลดไฟล์หลายๆ ไฟล์โดยอัตโนมัติ</translation>
 <translation id="5037676449506322593">เลือก&amp;ทั้งหมด</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">ปิดเสียง</translation>
 <translation id="5785583009707899920">ยูทิลิตีไฟล์ของ Chrome</translation>
 <translation id="5787146423283493983">ข้อตกลงเกี่ยวกับคีย์</translation>
+<translation id="5788127256798019331">ไฟล์ Play</translation>
 <translation id="5788367137662787332">ขออภัย ไม่สามารถติดตั้งอย่างน้อยหนึ่งพาร์ทิชันลงในอุปกรณ์ <ph name="DEVICE_LABEL" /> ได้</translation>
 <translation id="5794414402486823030">เปิดด้วยโปรแกรมดูของระบบทุกครั้ง</translation>
 <translation id="5794786537412027208">ปิดแอป Chrome ทั้งหมด</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">แปลแล้ว</translation>
 <translation id="5991049340509704927">ขยาย</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}other{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}}</translation>
-<translation id="5993332328670040093">ระบบจะไม่วัดการใช้อินเทอร์เน็ตของคุณอีกต่อไป</translation>
 <translation id="6002458620803359783">เสียงที่ต้องการ</translation>
 <translation id="6005695835120147974">เราเตอร์สื่อ</translation>
 <translation id="6006484371116297560">คลาสสิก</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">เลือกใบรับรอง</translation>
 <translation id="6181431612547969857">การดาวน์โหลดถูกบล็อก</translation>
 <translation id="6185132558746749656">ตำแหน่งของอุปกรณ์</translation>
+<translation id="6185617499004995178">โปรแกรมตรวจสอบ CUPS IPP</translation>
 <translation id="6185696379715117369">เลื่อนหน้าขึ้น</translation>
 <translation id="6189273858858366896">ตั้งค่าหรือจัดการการแชร์ไฟล์เครือข่าย</translation>
 <translation id="6189412234224385711">เปิดด้วย <ph name="EXTENSION_NAME" /></translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">เพิ่มพารามิเตอร์ข้อความค้นหาใน URL เพื่อรีเฟรชหน้าโดยอัตโนมัติ: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">แบตเตอรี่</translation>
 <translation id="6232116551750539448">ขาดการเชื่อมต่อกับ <ph name="NAME" /></translation>
+<translation id="6235700927623181151">แท็บนี้กำลังแชร์เนื้อหาบนเดสก์ท็อป</translation>
 <translation id="6237816943013845465">ให้คุณปรับเปลี่ยนความละเอียดของหน้าจอ</translation>
 <translation id="6238923052227198598">เก็บโน้ตล่าสุดไว้ในหน้าจอล็อก</translation>
 <translation id="6239558157302047471">โหลดเ&amp;ฟรมซ้ำ</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> ไม่ได้ถูกดาวน์โหลดตามปกติและอาจเป็นอันตราย</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{เครื่องพิมพ์ใหม่บนเครือข่ายของคุณ}other{เครื่องพิมพ์ใหม่บนเครือข่ายของคุณ}}</translation>
-<translation id="6286684120317096255">กำลังวัดการใช้อินเทอร์เน็ต</translation>
 <translation id="6286708577777130801">รายละเอียดรหัสผ่านที่บันทึกไว้</translation>
 <translation id="6287852322318138013">เลือกแอปที่จะเปิดไฟล์นี้</translation>
 <translation id="6289452883081499048">บริการของ Google อย่างเช่น Play ที่ปรับเปลี่ยนในแบบของคุณ</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">จัดการอุปกรณ์ Cloud Print</translation>
 <translation id="6451689256222386810">หากคุณลืมรหัสผ่านหรือต้องการเปลี่ยนการตั้งค่านี้ ให้<ph name="BEGIN_LINK" />รีเซ็ตการซิงค์<ph name="END_LINK" /></translation>
 <translation id="6452181791372256707">ปฏิเสธ</translation>
+<translation id="6455264371803474013">ในบางเว็บไซต์</translation>
 <translation id="6455894534188563617">และโฟลเดอร์ใหม่</translation>
 <translation id="6456394469623773452">ดี</translation>
 <translation id="6456631036739229488">เปลี่ยนโทรศัพท์ที่เปิด Smart Lock แล้ว โปรดป้อนรหัสผ่านเพื่ออัปเดต Smart Lock โทรศัพท์จะปลดล็อก <ph name="DEVICE_TYPE" /> ของคุณในครั้งถัดไป คุณสามารถปิด Smart Lock ได้ใน "การตั้งค่า"</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;โหลดหน้านี้ใหม่</translation>
 <translation id="6577284282025554716">ยกเลิกการดาวน์โหลดแล้ว: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">เข้ารหัสลับรหัสผ่านที่ซิงค์ด้วยชื่อผู้ใช้และรหัสผ่าน Google ของคุณ</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - แชร์เนื้อหาบนเดสก์ท็อปอยู่</translation>
 <translation id="6580151766480067746">เวอร์ชัน ARC</translation>
 <translation id="6581162200855843583">ลิงก์ Google ไดรฟ์</translation>
 <translation id="6582421931165117398">เปลี่ยนรหัสผ่านตอนนี้เลยเพื่อปกป้องข้อมูลส่วนบุคคล ระบบจะขอให้คุณลงชื่อเข้าใช้ก่อนเปลี่ยนรหัสผ่าน</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{แอปพลิเคชันนี้อาจทำให้ Chrome ทำงานไม่ถูกต้อง}other{แอปพลิเคชันเหล่านี้อาจทำให้ Chrome ทำงานไม่ถูกต้อง}}</translation>
 <translation id="7303900363563182677">เว็บไซต์นี้ถูกบล็อกไม่ให้ดูข้อความและรูปภาพที่คัดลอกไปยังคลิปบอร์ด</translation>
 <translation id="730515362922783851">แลกเปลี่ยนข้อมูลกับอุปกรณ์ที่อยู่ในเครือข่ายเฉพาะที่หรืออินเทอร์เน็ต</translation>
+<translation id="7307129035224081534">หยุดชั่วคราว</translation>
 <translation id="7308002049209013926">ใช้ Launcher เพื่อเข้าถึงแอปและกิจกรรมใหม่ๆ อย่างรวดเร็ว หากต้องการมาที่นี่โดยใช้แป้นพิมพ์ ให้กด Alt + Shift + L</translation>
 <translation id="7309257895202129721">แสดงปุ่ม&amp;ควบคุม</translation>
 <translation id="7310598146671372464">เข้าสู่ระบบไม่สำเร็จ เซิร์ฟเวอร์ไม่รองรับประเภทการเข้ารหัส Kerberos ที่ระบุ โปรดติดต่อผู้ดูแลระบบ</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">ตั้งค่าการเชื่อมต่อใน <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">ปิดกั้นป๊อปอัป</translation>
 <translation id="7407430846095439694">นำเข้าและเชื่อมโยง</translation>
-<translation id="7409233648990234464">เรียกใช้งานอีกครั้งและ Powerwash</translation>
 <translation id="7409836189476010449">เรียกใช้ Flash</translation>
 <translation id="7410344089573941623">ถามว่า <ph name="HOST" /> ต้องการเข้าถึงกล้องและไมโครโฟนของคุณหรือไม่</translation>
 <translation id="741204030948306876">ได้สิ ตกลง</translation>
@@ -4153,7 +4169,7 @@
 <translation id="7434509671034404296">นักพัฒนา</translation>
 <translation id="7436921188514130341">แย่จัง! เกิดข้อผิดพลาดในระหว่างการตั้งชื่อ</translation>
 <translation id="7441830548568730290">ผู้ใช้รายอื่น</translation>
-<translation id="7442465037756169001">พร้อมตั้งค่า Hangouts Meet hardware แล้ว</translation>
+<translation id="7442465037756169001">พร้อมตั้งค่าชุดฮาร์ดแวร์ Hangouts Meet แล้ว</translation>
 <translation id="744341768939279100">สร้างโปรไฟล์ใหม่</translation>
 <translation id="7444726222535375658">ดำเนินการต่อไปยังการประชุม Hangouts </translation>
 <translation id="7444983668544353857">ปิดการใช้งาน<ph name="NETWORKDEVICE" /></translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">URL การเพิกถอนใบรับรองของ Netscape</translation>
 <translation id="7469894403370665791">เชื่อมต่อกับเครือข่ายนี้อัตโนมัติ</translation>
 <translation id="747114903913869239">ข้อผิดพลาด: ไม่สามารถถอดรหัสส่วนขยาย</translation>
+<translation id="7473753388963818366">มาเตรียม <ph name="DEVICE_TYPE" /> ให้คุณพร้อมใช้งานกัน</translation>
 <translation id="7473891865547856676">ไม่ ขอบคุณ</translation>
 <translation id="747459581954555080">คืนค่าทั้งหมด</translation>
 <translation id="7475671414023905704">URL รหัสผ่านสูญหายของ Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">เพิ่มบัญชี</translation>
 <translation id="7671130400130574146">ใช้แถบชื่อและเส้นขอบของระบบ</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> ใน <ph name="PAGE_TITLE" /></translation>
+<translation id="7676867886086876795">ส่งเสียงของคุณไปยัง Google เพื่อให้พิมพ์ตามคำบอกได้ในช่องข้อความทั้งหมด</translation>
 <translation id="7681095912841365527">เว็บไซต์ใช้บลูทูธได้</translation>
 <translation id="7683373461016844951">หากต้องการดำเนินการต่อ ให้คลิก "ตกลง" จากนั้นคลิก "เพิ่มบุคคล" เพื่อสร้างโปรไฟล์ใหม่สำหรับที่อยู่อีเมล <ph name="DOMAIN" /></translation>
 <translation id="7684212569183643648">ติดตั้งโดยผู้ดูแลระบบ</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">มาตรฐาน</translation>
 <translation id="7748528009589593815">แท็บก่อนหน้า</translation>
 <translation id="7748626145866214022">มีตัวเลือกเพิ่มเติมในแถบการทำงาน กด Alt + A เพื่อโฟกัสแถบการทำงาน</translation>
+<translation id="7750228210027921155">การแสดงภาพซ้อนภาพ</translation>
 <translation id="7751260505918304024">แสดงทั้งหมด</translation>
 <translation id="7754704193130578113">สอบถามที่เก็บไฟล์ก่อนดาวน์โหลด</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">นี่คือหน้าแท็บใหม่ที่คุณคาดไว้ใช่ไหม</translation>
 <translation id="786073089922909430">บริการ: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;ดาวน์โหลด</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{คุกกี้ 1 รายการ}other{คุกกี้ # รายการ}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - จับคู่แล้ว</translation>
 <translation id="7870730066603611552">ตรวจสอบตัวเลือกการซิงค์หลังการตั้งค่า</translation>
 <translation id="7870790288828963061">ไม่พบแอปคีออสก์เวอร์ชันใหม่กว่า ไม่มีรายการที่จะอัปเดต โปรดนำ USB สติ๊กออก</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">ปิดเสียงแท็บ</translation>
 <translation id="8382913212082956454">คัดลอก&amp;ที่อยู่อีเมล</translation>
 <translation id="8386903983509584791">สแกนเสร็จแล้ว</translation>
+<translation id="8389492867173948260">อนุญาตให้ส่วนขยายนี้อ่านและเปลี่ยนแปลงข้อมูลทั้งหมดในเว็บไซต์ที่คุณเข้าชม</translation>
 <translation id="8390449457866780408">เซิร์ฟเวอร์ไม่พร้อมใช้งาน</translation>
 <translation id="8391712576156218334">รูปภาพไม่พร้อมใช้งาน โปรดลองอีกครั้งภายหลัง</translation>
 <translation id="8392234662362215700">กด Control-Shift-Space เพื่อสลับรูปแบบแป้นพิมพ์</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">คุณจะออกจากระบบใน <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">เปลี่ยน PIN ของซิม</translation>
 <translation id="8434480141477525001">พอร์ตแก้ปัญหา NaCl</translation>
+<translation id="8435395510592618362">ยืนยันตัวตนของคุณกับ <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">บันทึกบัตรเครดิต</translation>
 <translation id="8438328416656800239">เปลี่ยนเป็นเบราว์เซอร์ที่มีประสิทธิภาพ</translation>
 <translation id="8438566539970814960">ปรับปรุงการค้นหาและการท่องเว็บให้ดียิ่งขึ้น</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">ไม่ถูกต้อง</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> ต้องได้รับอนุญาตจากคุณก่อนจึงจะทำงานได้</translation>
 <translation id="8466234950814670489">ไฟล์ Tar</translation>
+<translation id="8466417995783206254">แท็บนี้กำลังเล่นวิดีโอในโหมดการแสดงภาพซ้อนภาพ</translation>
 <translation id="8468750959626135884">ปลดล็อก <ph name="DEVICE_TYPE" /> ด้วยโทรศัพท์ Android ของคุณ</translation>
 <translation id="8470028084415844044">เปิดการซิงค์เพื่อรับรหัสผ่านทั้งหมดในอุปกรณ์ทุกเครื่องของคุณ</translation>
 <translation id="8470513973197838199">รหัสผ่านที่บันทึกไว้สำหรับ <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">เรียกใช้ปลั๊กอินนี้</translation>
 <translation id="8497219075884839166">ยูทิลิตีของ Windows</translation>
 <translation id="8498214519255567734">ช่วยให้มองหรืออ่านหน้าจอในแสงสลัวได้ดีขึ้น</translation>
+<translation id="8498395510292172881">อ่านต่อใน Chrome</translation>
 <translation id="8503813439785031346">ชื่อผู้ใช้</translation>
 <translation id="850875081535031620">ไม่พบซอฟต์แวร์ที่เป็นอันตราย</translation>
 <translation id="8509646642152301857">การดาวน์โหลดพจนานุกรมตรวจสอบการสะกดล้มเหลว</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">ลองอีกครั้ง</translation>
 <translation id="8725178340343806893">รายการโปรด/บุ๊กมาร์ก</translation>
 <translation id="8726206820263995930">เกิดข้อผิดพลาดขณะดึงข้อมูลการตั้งค่านโยบายจากเซิร์ฟเวอร์: <ph name="CLIENT_ERROR" /></translation>
-<translation id="8727142376512517020">ไม่ต้องแสดงข้อความนี้อีก</translation>
 <translation id="8727344521467137076">พบซอฟต์แวร์อันตรายในคอมพิวเตอร์ของคุณ Chrome กำลังนำซอฟต์แวร์ดังกล่าวออกและคืนการตั้งค่าเดิมเพื่อให้เบราว์เซอร์ทำงานเป็นปกติอีกครั้ง</translation>
 <translation id="8730621377337864115">เสร็จสิ้น</translation>
 <translation id="8732030010853991079">ใช้ส่วนขยายนี้โดยคลิกที่ไอคอนนี้</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">เปิดลิงก์ในแ&amp;ท็บใหม่</translation>
 <translation id="9030515284705930323">องค์กรของคุณยังไม่ได้เปิดใช้ Google Play Store สำหรับบัญชีของคุณ โปรดสอบถามข้อมูลเพิ่มเติมจากผู้ดูแลระบบ</translation>
 <translation id="9033857511263905942">&amp;วาง</translation>
+<translation id="9034924485347205037">ไฟล์ Linux</translation>
 <translation id="9035012421917565900">ไม่สามารถย้ายรายการกลับไปที่ "<ph name="DESTINATION_NAME" />" คุณจึงไม่สามารถเลิกทำการดำเนินการนี้</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">แสดงหน้าเว็บเดิม</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">กำลังสแกนหาอุปกรณ์บลูทูธ...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - เชื่อมต่ออุปกรณ์บลูทูธแล้ว</translation>
 <translation id="9177499212658576372">ขณะนี้คุณเชื่อมต่อกับเครือข่าย <ph name="NETWORK_TYPE" /></translation>
+<translation id="9179734824669616955">ตั้งค่า Linux (เบต้า) ใน <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">ขั้นตอนนี้อาจใช้เวลาสักครู่ กำลังเริ่มคอนเทนเนอร์ Linux</translation>
 <translation id="9180380851667544951">เว็บไซต์แชร์หน้าจอของคุณได้</translation>
 <translation id="9188441292293901223">โปรดอัปเดตโทรศัพท์เป็น Android เวอร์ชันใหม่กว่าเพื่อปลดล็อก <ph name="DEVICE_TYPE" /> นี้</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index a391d9b..37472203 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Erişmeden önce sor</translation>
 <translation id="1434696352799406980">Bu işlem, başlangıç sayfanızı, yeni sekme sayfanızı, arama motorunuzu ve sabit sekmelerinizi sıfırlar. Ayrıca, tüm uzantılar devre dışı bırakılır ve çerezler gibi geçici veriler temizlenir. Yer işaretleriniz, geçmişiniz ve kayıtlı şifreleriniz temizlenmez.</translation>
 <translation id="1434886155212424586">Ana sayfa Yeni Sekme sayfasıdır</translation>
+<translation id="1436671784520050284">Kuruluma devam et</translation>
 <translation id="1436784010935106834">Kaldırıldı</translation>
 <translation id="1438632560381091872">Sekmelerin sesini aç</translation>
 <translation id="1442392616396121389">Yönlendirme öneki</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Pizza dilimi</translation>
 <translation id="1467432559032391204">Sola</translation>
 <translation id="1468571364034902819">Bu profil kullanılamaz</translation>
+<translation id="1470533772306424441">Bu uygulamaları sizin için yükleyeceğiz. Play Store'da cihazınız için daha fazla uygulama bulabilirsiniz.</translation>
 <translation id="1470811252759861213">Uzantılarınızı tüm bilgisayarlarınızda kullanmak için <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">"<ph name="FILENAME" />" yüklenmedi. Google Drive'ınızda yeterli boş alan yok.</translation>
 <translation id="1475502736924165259">Dosyanızda diğer kategorilerin hiçbirine uymayan sertifikalar var</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">U&amp;zaklaştır</translation>
 <translation id="1830550083491357902">Oturum açılmadı</translation>
 <translation id="1832511806131704864">Telefon değişikliği güncellendi</translation>
-<translation id="1832685970989658809">Kaydedilen ödeme yöntemleri, yöneticiniz tarafından devre dışı bırakıldı</translation>
 <translation id="1834503245783133039">İndirme işlemi başarısız oldu: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Aramayı temizle</translation>
 <translation id="1838709767668011582">Google sitesi</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Nereden:</translation>
 <translation id="2193365732679659387">Güven ayarları</translation>
 <translation id="2195729137168608510">E-posta Koruması</translation>
+<translation id="2199298570273670671">Hata</translation>
 <translation id="2200356397587687044">Chrome'un devam edebilmesi için izin gerekiyor</translation>
 <translation id="220138918934036434">Düğmeyi gizle</translation>
 <translation id="2202898655984161076">Yazıcılar listelenirken sorun oluştu. Yazıcılarınızın bazıları <ph name="CLOUD_PRINT_NAME" /> üzerinde başarılı olarak kayıt edilmemiş olabilir.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Şifreyi göster</translation>
 <translation id="2436186046335138073"><ph name="HANDLER_HOSTNAME" /> ana makinesinin tüm <ph name="PROTOCOL" /> bağlantılarını açmasına izin verilsin mi?</translation>
 <translation id="2436707352762155834">Minimum</translation>
-<translation id="2437139306601019091">Veri kullanım ölçümü sona erdi</translation>
 <translation id="2440604414813129000">Ka&amp;ynağı görüntüle</translation>
 <translation id="2445081178310039857">Uzantı kök dizini gerekiyor.</translation>
 <translation id="2445484935443597917">Yeni Profil Oluştur</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> kimliğinizi doğrulamak istiyor</translation>
 <translation id="2448312741937722512">Tür</translation>
 <translation id="2450223707519584812">Google API anahtarları eksik olduğundan kullanıcı ekleyemezsiniz. Ayrıntılar için <ph name="DETAILS_URL" /> sayfasına bakın.</translation>
 <translation id="2450310832094867474">Senkronizasyon ve oturum kapatılsın mı?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Dosya zaten var</translation>
 <translation id="2453860139492968684">Tamamlandı</translation>
 <translation id="2454247629720664989">Anahtar kelime</translation>
+<translation id="245661998428026871">Videonun pencere içinde pencere modunda oynatılması durdurulacak</translation>
 <translation id="2457246892030921239"><ph name="APP_NAME" />, <ph name="VOLUME_NAME" /> birimindeki dosyaları kopyalamak istiyor.</translation>
 <translation id="2462724976360937186">Sertifika Yetkilisi Anahtar Kimliği</translation>
 <translation id="2462752602710430187"><ph name="PRINTER_NAME" /> eklendi</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Sekmelerin Sesini Aç</translation>
 <translation id="3053013834507634016">Sertifika Anahtarı Kullanımı</translation>
 <translation id="3057861065630527966">Fotoğraflarınızı ve videolarınızı yedekleyin</translation>
+<translation id="3059313675706898490">Android Mesajlar</translation>
 <translation id="3060379269883947824">Seç ve Dinle'yi etkinleştir</translation>
 <translation id="3061707000357573562">Yama Hizmeti</translation>
 <translation id="3064410671692449875">Yetersiz veri</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Şifrenizi mi unuttunuz?</translation>
 <translation id="3132996321662585180">Günlük olarak yenile</translation>
 <translation id="3135204511829026971">Ekranı döndür</translation>
+<translation id="313638818480447860">Hesabınıza bağlı, bu cihaz için optimize edilmiş <ph name="NUMBER_OF_APPS" /> uygulama bulduk.</translation>
 <translation id="313963229645891001">İndiriliyor, <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Varsayılan sarı avatar</translation>
 <translation id="3140353188828248647">Adres çubuğuna odaklan</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Yazım denetimi</translation>
 <translation id="3183139917765991655">Profil İçe Aktarıcısı</translation>
 <translation id="3184560914950696195">$1 konumuna kaydedilemiyor. Düzenlenen resimler İndirilenler klasörüne kaydedilecek.</translation>
+<translation id="3188257591659621405">Dosyalarım</translation>
 <translation id="3188465121994729530">Hareketli Ortalama</translation>
 <translation id="3190558889382726167">Şifre kaydedildi</translation>
 <translation id="3192947282887913208">Ses Dosyaları</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643"><ph name="FILE_NAME" /> sıkıştırılıyor...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Uygulama bilgisi</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - Video pencere içinde pencere modunda oynatılıyor</translation>
 <translation id="3335337277364016868">Kaydedildiği yıl</translation>
 <translation id="3335947283844343239">Kapatılan Sekmeyi Tekrar Aç</translation>
 <translation id="3336664756920573711"><ph name="DEVICE_TYPE" /> cihazınızın kilidini Android telefonunuzla açın.</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Yazdırma işlemi başarısız oldu. Lütfen yazıcınızı kontrol edin ve tekrar deneyin.</translation>
 <translation id="3364721542077212959">Ekran kalemi araçları</translation>
 <translation id="3365598184818502391">Ctrl veya Alt tuşlarından birini kullanın</translation>
+<translation id="3367047597842238025"><ph name="DEVICE_TYPE" /> cihazınızı istediğiniz gibi kurun ve parmaklarınızın ucundaki harika yeteneklerin tamamını keşfedin.</translation>
 <translation id="3368922792935385530">Bağlı</translation>
 <translation id="3369624026883419694">Ana bilgisayar çözümleniyor...</translation>
 <translation id="337286756654493126">Uygulamada açtığınız klasörleri okuma</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Görev çubuğunda <ph name="SMALL_PRODUCT_LOGO" /> simgesini sağ tıklayın</translation>
 <translation id="3391716558283801616">Sekme 7</translation>
 <translation id="3396331542604645348">Seçilen yazıcı kullanılamıyor veya doğru yüklenmemiş. Yazıcınızı kontrol edin veya başka yazıcı seçmeyi deneyin.</translation>
+<translation id="3396800784455899911">"Kabul et ve devam et" düğmesini tıklayarak bu Google hizmetleri ile ilgili yukarıda açıklanan işlemleri kabul etmiş olursunuz.</translation>
 <translation id="3399432415385675819">Bildirimler devre dışı bırakılacak</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Bu site için hiç şifre kaydedilmedi</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Bu cihaz, dosya sistemi desteklenmediğinden açılamıyor.</translation>
 <translation id="3727148787322499904">Bu ayarı değiştirmek tüm paylaşılan ağları etkiler</translation>
 <translation id="3727187387656390258">Pop-up'ı incele</translation>
+<translation id="3729506734996624908">İzin verilen siteler</translation>
 <translation id="3732078975418297900"><ph name="ERROR_LINE" />. satırda hata</translation>
 <translation id="3733127536501031542">İlerlemeli SSL Sunucusu</translation>
+<translation id="3735740477244556633">Sıralama ölçütü</translation>
 <translation id="3737274407993947948">Linux yüklenirken hata oluştu...</translation>
 <translation id="3737536731758327622">İndirdikleriniz burada görünür</translation>
+<translation id="3738671331307774213">Kimliğinizin doğrulanması gizli verilerinizin korunmasına yardımcı olur</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094"><ph name="APPLICATION" /> açılsın mı?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> şimdi Yönetici Konsolu'nda görünecek</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Web siteleri, Android uygulamaları ve diğer içerikleri geliştirmek için araçlar edinin. Linux'ı yüklediğinizde <ph name="DOWNLOAD_SIZE" /> veri indirilecektir.</translation>
 <translation id="385051799172605136">Geri</translation>
 <translation id="3851428669031642514">Güvenli olmayan komut dosyalarını yükle</translation>
+<translation id="3854599674806204102">Bir seçenek belirleyin</translation>
 <translation id="3855441664322950881">Paket uzantısı</translation>
 <translation id="3855676282923585394">Yer İşaretlerini ve Ayarları İçe Aktar...</translation>
 <translation id="3856800405688283469">Saat dilimi seçin</translation>
-<translation id="3856921555429624101">Veri kullanım ölçümü sona erdi</translation>
 <translation id="3857228364945137633">Telefonunuz yakındayken şifre girmeden <ph name="DEVICE_TYPE" /> cihazınızın kilidini açmak için Smart Lock'u deneyin.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Senkronizasyon duraklatıldı</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Tümünü gizli pencerede aç</translation>
 <translation id="4508265954913339219">Etkinleştirme başarısız oldu</translation>
 <translation id="4508765956121923607">Ka&amp;ynağı Görüntüle</translation>
-<translation id="4509823033118379431">Görseller şu anda kullanılamıyor. Koleksiyonları görüntülemek için lütfen yeniden bağlanın.</translation>
 <translation id="451407183922382411"><ph name="COMPANY_NAME" /> tarafından destekleniyor</translation>
 <translation id="4514542542275172126">Denetlenen yeni kullanıcı oluşturun</translation>
 <translation id="4514610446763173167">Oynatmak veya duraklatmak için videoyu aç/kapat</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Başka bir cihazdan devam edin</translation>
 <translation id="4628314759732363424">Değiştir...</translation>
 <translation id="4628757576491864469">Cihazlar</translation>
+<translation id="4628948037717959914">Fotoğraf</translation>
 <translation id="4630590996962964935">Geçersiz karakter: $1</translation>
 <translation id="4631887759990505102">Sanatçı</translation>
 <translation id="4632483769545853758">Sekmenin Sesini Aç</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806"><ph name="FILE_COUNT" /> yedeklenmeye hazır</translation>
 <translation id="4907161631261076876">Bu uygulama çok indirilen bir uygulama değil ve tehlikeli olabilir.</translation>
 <translation id="4907306957610201395">İzin Kategorisi</translation>
-<translation id="4907824805858067479">Kaydedilen kartlar yöneticiniz tarafından devre dışı bırakıldı</translation>
 <translation id="4908811072292128752">İki siteye aynı anda göz atmak için yeni bir sekme açın</translation>
 <translation id="4909038193460299775">Bu hesap <ph name="DOMAIN" /> tarafından yönetildiğinden, yer işaretleri, geçmişi, şifreler ve diğer ayarlarınız bu cihazdan silinir. Ancak verileriniz Google Hesabınızda kalmaya devam eder ve <ph name="BEGIN_LINK" />Google Hesap Özeti<ph name="END_LINK" />'nde yönetilebilir.</translation>
 <translation id="4909359680501173791">Başarıyla kaydoldunuz</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Yıllık</translation>
 <translation id="4957949153200969297">Yalnızca <ph name="IDS_SHORT_PRODUCT_NAME" /> Senkronizasyonu ile ilişkili özellikleri etkinleştirin</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Kartlarınız tek bir yerde tutun</translation>
 <translation id="496226124210045887">Seçtiğiniz klasör hassas dosyalar içeriyor. "$1" için bu klasöre kalıcı okuma erişimi vermek istediğinizden emin misiniz?</translation>
 <translation id="4964455510556214366">Düzenleme</translation>
 <translation id="4964673849688379040">Denetleniyor...</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Uzantı ekle</translation>
 <translation id="5029568752722684782">Kopyayı temizle</translation>
 <translation id="5030338702439866405">Veren:</translation>
+<translation id="503155457707535043">Uygulamalar indiriliyor</translation>
 <translation id="503498442187459473"><ph name="HOST" /> kameranızı ve mikrofonunuzu kullanmak istiyor</translation>
 <translation id="5036662165765606524">Hiçbir sitenin otomatik olarak birden fazla dosya indirmesine izin verme</translation>
 <translation id="5037676449506322593">Tümünü Seç</translation>
@@ -3105,6 +3118,7 @@
 <translation id="57838592816432529">Sesi kapat</translation>
 <translation id="5785583009707899920">Chrome Dosya Yardımcı Programları</translation>
 <translation id="5787146423283493983">Anahtar Anlaşması</translation>
+<translation id="5788127256798019331">Play dosyaları</translation>
 <translation id="5788367137662787332">Maalesef, <ph name="DEVICE_LABEL" /> cihazındaki en az bir bölüm eklenemedi.</translation>
 <translation id="5794414402486823030">Daima sistem görüntüleyici ile açın</translation>
 <translation id="5794786537412027208">Tüm Chrome Uygulamalarından Çık</translation>
@@ -3232,7 +3246,6 @@
 <translation id="5990386583461751448">Çevrildi</translation>
 <translation id="5991049340509704927">Büyüt</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Web'e göz atmaya devam edebildiğinizden emin olmak için yöneticinizden bu uygulamayı kaldırmasını isteyin.}other{Web'e göz atmaya devam edebildiğinizden emin olmak için yöneticinizden bu uygulamaları kaldırmasını isteyin.}}</translation>
-<translation id="5993332328670040093">Veri kullanımınız artık ölçülmeyecek.</translation>
 <translation id="6002458620803359783">Tercih Edilen Sesler</translation>
 <translation id="6005695835120147974">Medya Yönlendiricisi</translation>
 <translation id="6006484371116297560">Klasik</translation>
@@ -3358,6 +3371,7 @@
 <translation id="6178664161104547336">Sertifika seç</translation>
 <translation id="6181431612547969857">İndirme engellendi</translation>
 <translation id="6185132558746749656">Cihaz Konumu</translation>
+<translation id="6185617499004995178">CUPS IPP Doğrulayıcı</translation>
 <translation id="6185696379715117369">Bir sayfa yukarı</translation>
 <translation id="6189273858858366896">Ağ Dosya Paylaşımlarını kurun veya yönetin.</translation>
 <translation id="6189412234224385711"><ph name="EXTENSION_NAME" /> ile aç</translation>
@@ -3390,6 +3404,7 @@
 <translation id="6231881193380278751">Sayfayı otomatik yenilemek için URL'ye bir sorgu parametresi ekleyin: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Pil</translation>
 <translation id="6232116551750539448"><ph name="NAME" /> bağlantısı kaybedildi</translation>
+<translation id="6235700927623181151">Bu sekme masaüstü içeriğinizi paylaşıyor.</translation>
 <translation id="6237816943013845465">Ekran çözünürlüğünü ayarlamanıza olanak tanır</translation>
 <translation id="6238923052227198598">En son notu kilit ekranında tut</translation>
 <translation id="6239558157302047471">Ç&amp;erçeveyi yeniden yükle</translation>
@@ -3424,7 +3439,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> yaygın indirilen bir öğe değil, tehlikeli olabilir.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Ağınızda yeni yazıcı}other{Ağınızda yeni yazıcılar}}</translation>
-<translation id="6286684120317096255">Veri kullanımı ölçülüyor</translation>
 <translation id="6286708577777130801">Kayıtlı şifre ayrıntıları</translation>
 <translation id="6287852322318138013">Bu dosyayı açmak için bir uygulama seçin</translation>
 <translation id="6289452883081499048">Play gibi kişiselleştirilmiş Google hizmetleri</translation>
@@ -3535,6 +3549,7 @@
 <translation id="6451180435462401570">Cloud Print cihazlarını yönet</translation>
 <translation id="6451689256222386810">Parolanızı unuttuysanız veya bu ayarı değiştirmek istiyorsanız <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Reddet</translation>
+<translation id="6455264371803474013">Belirli sitelerde</translation>
 <translation id="6455894534188563617">&amp;Yeni Klasör</translation>
 <translation id="6456394469623773452">İyi</translation>
 <translation id="6456631036739229488">Smart Lock telefonu değişti. Smart Lock'u güncellemek için şifrenizi girin. Böylece, bir dahaki sefere telefonunuzu kullanarak <ph name="DEVICE_TYPE" /> cihazınızın kilidini açabilirsiniz. Ayarlar'dan Smart Lock'u kapatın.</translation>
@@ -3612,6 +3627,7 @@
 <translation id="657402800789773160">Bu &amp;Sayfayı Tekrar Yükle</translation>
 <translation id="6577284282025554716">İndirme işlemi iptal edildi: <ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">Senkronize edilen şifreleri Google kullanıcı adınız ve şifrenizle şifreleyin</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - Masaüstü içeriği paylaşıldı</translation>
 <translation id="6580151766480067746">ARC Sürümü</translation>
 <translation id="6581162200855843583">Google Drive bağlantısı</translation>
 <translation id="6582421931165117398">Kişisel bilgilerinizi korumak için şifrenizi hemen değiştirin. Şifrenizi değiştirebilmek için önce oturum açmanız gerekir.</translation>
@@ -4078,6 +4094,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Bu uygulama Chrome'un düzgün çalışmasını engelleyebilir.}other{Bu uygulamalar Chrome'un düzgün çalışmasını engelleyebilir.}}</translation>
 <translation id="7303900363563182677">Bu sitenin panoya kopyalanan metin ve resimleri görmesi engellendi</translation>
 <translation id="730515362922783851">Yerel ağ veya İnternet üzerindeki herhangi bir cihazla veri alışverişi</translation>
+<translation id="7307129035224081534">Duraklatıldı</translation>
 <translation id="7308002049209013926">Yeni uygulamalara ve etkinliklere hızlıca ulaşmak için Launcher'ı kullanın. Klavyeyle buraya ulaşmak için Alt + Üst Karakter + L tuşlarına basın.</translation>
 <translation id="7309257895202129721">Denetimleri &amp;göster</translation>
 <translation id="7310598146671372464">Giriş yapılamadı. Sunucu belirtilen Kerberos şifreleme türlerini desteklemiyor. Lütfen yöneticinizle iletişim kurun.</translation>
@@ -4135,7 +4152,6 @@
 <translation id="7400839060291901923"><ph name="PHONE_NAME" /> telefonunuzda bağlantıyı yapılandırın</translation>
 <translation id="740624631517654988">Pop-up engellendi</translation>
 <translation id="7407430846095439694">İçe Aktar ve Bağla</translation>
-<translation id="7409233648990234464">Yeniden başlat ve Powerwash işlemi yap</translation>
 <translation id="7409836189476010449">Flash öğesi çalıştırmak</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> sitesi kamerama ve mikrofonuma erişmek isterse sor</translation>
 <translation id="741204030948306876">Evet, istiyorum</translation>
@@ -4168,6 +4184,7 @@
 <translation id="7465778193084373987">Netscape Sertifika İptali URL'si</translation>
 <translation id="7469894403370665791">Bu ağa otomatik olarak bağlan</translation>
 <translation id="747114903913869239">Hata: Uzantının kodu çözülemiyor</translation>
+<translation id="7473753388963818366"><ph name="DEVICE_TYPE" /> cihazınızı sizin için hazırlayalım</translation>
 <translation id="7473891865547856676">Hayır, Teşekkürler</translation>
 <translation id="747459581954555080">Tümünü geri yükle</translation>
 <translation id="7475671414023905704">Netscape Kayıp Şifre URL'si</translation>
@@ -4292,6 +4309,7 @@
 <translation id="7665369617277396874">Hesap ekle</translation>
 <translation id="7671130400130574146">Sistemin başlık çubuğunu ve kenarlıklarını kullan</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, <ph name="PAGE_TITLE" /> sayfasında.</translation>
+<translation id="7676867886086876795">Dikte özelliğiyle metin alanına herhangi bir şey yazabilmek için sesinizi Google'a gönderin.</translation>
 <translation id="7681095912841365527">Site, Bluetooth'u kullanabilir</translation>
 <translation id="7683373461016844951">Devam etmek için Tamam'ı tıklayın, ardından <ph name="DOMAIN" /> e-posta adresiniz için yeni profil oluşturmak üzere Kişi Ekle'yi tıklayın.</translation>
 <translation id="7684212569183643648">Yöneticiniz Tarafından Yüklendi</translation>
@@ -4333,6 +4351,7 @@
 <translation id="7740996059027112821">Standart</translation>
 <translation id="7748528009589593815">Önceki sekme</translation>
 <translation id="7748626145866214022">İşlem çubuğunda daha fazla seçenek var. İşlem çubuğuna odaklanmak için Alt + A tuşlarına basın.</translation>
+<translation id="7750228210027921155">Pencere içinde pencere</translation>
 <translation id="7751260505918304024">Tümünü göster</translation>
 <translation id="7754704193130578113">İndirmeden önce her dosyanın nereye kaydedileceğini sor</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Bu, beklediğiniz yeni sekme sayfası mı?</translation>
 <translation id="786073089922909430">Hizmet: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;İndirilenler</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 çerez}other{# çerezler}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - Eşlendi</translation>
 <translation id="7870730066603611552">Kurulumdan sonra senkronizasyon seçeneklerini inceleyin</translation>
 <translation id="7870790288828963061">Daha yeni bir sürüme sahip herhangi bir Kiosk uygulaması bulunamadı. Güncellenecek hiçbir şey yok. Lütfen USB çubuğunu çıkarın.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Sekmelerin sesini kapat</translation>
 <translation id="8382913212082956454">E-posta &amp;adresini kopyala</translation>
 <translation id="8386903983509584791">Tarama tamamlandı</translation>
+<translation id="8389492867173948260">Bu uzantının ziyaret ettiğiniz web sitelerindeki tüm verilerinizi okuması ve değiştirmesine izin verin:</translation>
 <translation id="8390449457866780408">Sunucu kullanılamıyor.</translation>
 <translation id="8391712576156218334">Görüntü kullanılamıyor. Daha sonra tekrar deneyin.</translation>
 <translation id="8392234662362215700">Klavye düzenini değiştirmek için Control-Üst Karakter-Boşluk tuşlarına basın.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999"><ph name="LOGOUT_TIME_LEFT" /> içinde çıkış yapacaksınız</translation>
 <translation id="8431909052837336408">SIM PIN Kodunu Değiştir</translation>
 <translation id="8434480141477525001">NaCl Hata Ayıklama Bağlantı Noktası</translation>
+<translation id="8435395510592618362"><ph name="APP_NAME" /> ile kimliğinizi doğrulayın</translation>
 <translation id="843760761634048214">Kredi kartını kaydedin</translation>
 <translation id="8438328416656800239">Akıllı bir tarayıcıya geç</translation>
 <translation id="8438566539970814960">Aramaları ve göz atmayı daha iyi yap</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Geçerli değil</translation>
 <translation id="8465444703385715657"><ph name="PLUGIN_NAME" /> eklentisinin çalışması için izniniz gerekiyor</translation>
 <translation id="8466234950814670489">Tar arşivi</translation>
+<translation id="8466417995783206254">Bu sekmede bir video pencere içinde pencere modunda oynatılıyor.</translation>
 <translation id="8468750959626135884"><ph name="DEVICE_TYPE" /> cihazınızın kilidini Android telefonunuzla açın.</translation>
 <translation id="8470028084415844044">Tüm şifrelerinize tüm cihazlarınızda ulaşmak için senkronizasyonu açın.</translation>
 <translation id="8470513973197838199"><ph name="ORIGIN" /> için kaydedilmiş şifreler</translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Bu Eklentiyi Çalıştır</translation>
 <translation id="8497219075884839166">Windows Yardımcı Programları</translation>
 <translation id="8498214519255567734">Loş ışıkta ekranınıza bakmayı veya okumayı kolaylaştır</translation>
+<translation id="8498395510292172881">Chrome'da okumaya devam et</translation>
 <translation id="8503813439785031346">Kullanıcı adı</translation>
 <translation id="850875081535031620">Zararlı yazılım bulunmadı</translation>
 <translation id="8509646642152301857">Yazım denetimi sözlüğü indirilemedi.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Yeniden dene</translation>
 <translation id="8725178340343806893">Sık Kullanılanlar/Yer İşaretleri</translation>
 <translation id="8726206820263995930">Sunucudan politika ayarları alınırken hata oluştu: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Bu iletiyi tekrar gösterme</translation>
 <translation id="8727344521467137076">Bilgisayarınızda zararlı yazılım var. Chrome bunu kaldırıyor ve tarayıcınızın tekrar normal şekilde çalışması için ayarlarınızı geri yükleyecek.</translation>
 <translation id="8730621377337864115">Bitti</translation>
 <translation id="8732030010853991079">Bu simgeyi tıklayarak bu uzantıyı kullanın.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Bağlantıyı Yeni &amp;Sekmede Aç</translation>
 <translation id="9030515284705930323">Kuruluşunuz, hesabınız için Google Play Store'u etkinleştirmedi. Daha fazla bilgi için yöneticinize başvurun.</translation>
 <translation id="9033857511263905942">&amp;Yapıştır</translation>
+<translation id="9034924485347205037">Linux dosyaları</translation>
 <translation id="9035012421917565900">Öğeler "<ph name="DESTINATION_NAME" />" hedefine geri taşınamaz. Bu nedenle bu işlemi geri alamazsınız.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Orijinali Göster</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Bluetooth cihazları taranıyor...</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - Bluetooth cihaz bağlı</translation>
 <translation id="9177499212658576372">Şu an <ph name="NETWORK_TYPE" /> ağına bağlısınız.</translation>
+<translation id="9179734824669616955"><ph name="DEVICE_TYPE" /> cihazınızda Linux (Beta) kurulumu yapın</translation>
 <translation id="9180281769944411366">Bu işlem birkaç dakika sürebilir. Linux kapsayıcısı başlatılıyor.</translation>
 <translation id="9180380851667544951">Site, ekranınızı paylaşabilir</translation>
 <translation id="9188441292293901223">Bu <ph name="DEVICE_TYPE" /> cihazın kilidini açmak için lütfen telefonunuzu daha yeni bir Android sürümüne güncelleyin.</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 4e5357a..ea2332e 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">Запитувати дозвіл, перш ніж надавати доступ</translation>
 <translation id="1434696352799406980">Стартову сторінку, сторінку нової вкладки, пошукову систему та закріплені вкладки буде скинуто. Також буде вимкнено всі розширення та видалено тимчасові дані, як-от файли cookie. Історія закладок і збережені паролі не видалятимуться.</translation>
 <translation id="1434886155212424586">Домашня сторінка – це сторінка нової вкладки</translation>
+<translation id="1436671784520050284">Продовжити налаштування</translation>
 <translation id="1436784010935106834">Видалено</translation>
 <translation id="1438632560381091872">Увімкнути звук на вкладках</translation>
 <translation id="1442392616396121389">Префікс маршрутизації</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">Шматок піци</translation>
 <translation id="1467432559032391204">Ліворуч</translation>
 <translation id="1468571364034902819">Цей профіль вимкнено</translation>
+<translation id="1470533772306424441">Ці додатки буде встановлено. Більше додатків для вашого пристрою можна знайти в Play Маркеті.</translation>
 <translation id="1470811252759861213">Щоб користуватися розширеннями на всіх своїх комп’ютерах, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="1474339897586437869">Файл "<ph name="FILENAME" />" не додано. Замало вільного місця на Google Диску.</translation>
 <translation id="1475502736924165259">У вас є сертифікати, які не відповідають іншим категоріям</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">Зменшити &amp;масштаб</translation>
 <translation id="1830550083491357902">Користувач не ввійшов</translation>
 <translation id="1832511806131704864">Телефон змінено</translation>
-<translation id="1832685970989658809">Адміністратор вимкнув функцію збережених способів оплати</translation>
 <translation id="1834503245783133039">Не вдалося завантажити файл "<ph name="FILE_NAME" />"</translation>
 <translation id="1838374766361614909">Очистити поле пошуку</translation>
 <translation id="1838709767668011582">Сайт Google</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">Від:</translation>
 <translation id="2193365732679659387">Налаштування довіри</translation>
 <translation id="2195729137168608510">Захист електронної пошти</translation>
+<translation id="2199298570273670671">Помилка</translation>
 <translation id="2200356397587687044">Chrome потрібен дозвіл, щоб продовжити</translation>
 <translation id="220138918934036434">Сховати кнопку</translation>
 <translation id="2202898655984161076">Виникала проблема зі складенням списку принтерів. Можливо, деякі з ваших принтерів не зареєстровано в <ph name="CLOUD_PRINT_NAME" />.</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">Показати пароль</translation>
 <translation id="2436186046335138073">Дозволити обробнику <ph name="HANDLER_HOSTNAME" /> відкривати всі посилання протоколу <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Мінімальні</translation>
-<translation id="2437139306601019091">Використання трафіку більше не відстежується</translation>
 <translation id="2440604414813129000">Див. д&amp;жерело</translation>
 <translation id="2445081178310039857">Потрібен кореневий каталог розширення.</translation>
 <translation id="2445484935443597917">Створити новий профіль</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> хоче підтвердити вашу особу</translation>
 <translation id="2448312741937722512">Тип</translation>
 <translation id="2450223707519584812">Ви не зможете додавати користувачів, оскільки немає ключів API Google. Докладніше на сторінці <ph name="DETAILS_URL" />.</translation>
 <translation id="2450310832094867474">Вимкнути синхронізацію та вийти?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">Файл уже існує</translation>
 <translation id="2453860139492968684">Готово</translation>
 <translation id="2454247629720664989">Ключове слово</translation>
+<translation id="245661998428026871">Відео в режимі "картинка в картинці" зупиниться.</translation>
 <translation id="2457246892030921239">Додатку <ph name="APP_NAME" /> потрібен дозвіл копіювати файли з тому <ph name="VOLUME_NAME" />.</translation>
 <translation id="2462724976360937186">Ідентифікатор ключа центру сертифікації</translation>
 <translation id="2462752602710430187">Додано принтер <ph name="PRINTER_NAME" /></translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">Увімкнути звук на вкладках</translation>
 <translation id="3053013834507634016">Використання ключа сертифіката</translation>
 <translation id="3057861065630527966">Створити резервні копії фотографій і відео</translation>
+<translation id="3059313675706898490">Android Повідомлення</translation>
 <translation id="3060379269883947824">Увімкнути службу Читання з екрана</translation>
 <translation id="3061707000357573562">Служба виправлень</translation>
 <translation id="3064410671692449875">Недостатньо даних</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">Забули пароль?</translation>
 <translation id="3132996321662585180">Оновлювати щодня</translation>
 <translation id="3135204511829026971">Обертати екран</translation>
+<translation id="313638818480447860">Ми знайшли стільки зв’язаних з обліковим записом додатків, які оптимізовано для цього пристрою: <ph name="NUMBER_OF_APPS" />.</translation>
 <translation id="313963229645891001">Завантаження: <ph name="STATUS" /></translation>
 <translation id="3139925690611372679">Стандартний жовтий аватар</translation>
 <translation id="3140353188828248647">Активувати адресний рядок</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">Перевірка правопису</translation>
 <translation id="3183139917765991655">Засіб імпортування профілів</translation>
 <translation id="3184560914950696195">Неможливо зберегти в $1. Редаговані зображення буде збережено в папці "Завантаження".</translation>
+<translation id="3188257591659621405">Мої файли</translation>
 <translation id="3188465121994729530">Середня швидкість переміщення курсора</translation>
 <translation id="3190558889382726167">Пароль збережено</translation>
 <translation id="3192947282887913208">Аудіофайли</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">Архівування файлу <ph name="FILE_NAME" />…</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">Про додаток</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" />: відео відтворюється в режимі "картинка в картинці"</translation>
 <translation id="3335337277364016868">Рік запису</translation>
 <translation id="3335947283844343239">Знову відкрити закриту вкладку</translation>
 <translation id="3336664756920573711">Розблоковуйте пристрій <ph name="DEVICE_TYPE" /> за допомогою телефона Android</translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">Помилка друку. Перевірте принтер і повторіть спробу.</translation>
 <translation id="3364721542077212959">Інструменти стилуса</translation>
 <translation id="3365598184818502391">Використовуйте Ctrl або Alt</translation>
+<translation id="3367047597842238025">Налаштуйте <ph name="DEVICE_TYPE" /> на свій смак і відкривайте всі дивовижні можливості у вас під рукою.</translation>
 <translation id="3368922792935385530">Підключено</translation>
 <translation id="3369624026883419694">-...</translation>
 <translation id="337286756654493126">Читати з папок, які ви відкриваєте в програмі</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">Натисніть правою кнопкою миші значок <ph name="SMALL_PRODUCT_LOGO" /> на панелі завдань</translation>
 <translation id="3391716558283801616">Вкладка 7</translation>
 <translation id="3396331542604645348">Вибраний принтер недоступний або його неправильно встановлено. Перевірте принтер або спробуйте вибрати інший.</translation>
+<translation id="3396800784455899911">Натиснувши кнопку "Прийняти та продовжити", ви дозволяєте цим сервісам Google обробляти ваші дані, як описано вище.</translation>
 <translation id="3399432415385675819">Сповіщення будуть вимкнені</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />, <ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">Немає збережених паролів для цього сайту</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">Не вдається відкрити пристрій, оскільки його файлова система не підтримується.</translation>
 <translation id="3727148787322499904">Зміна цього налаштування вплине на всі спільні мережі</translation>
 <translation id="3727187387656390258">Перевірити спливаюче вікно</translation>
+<translation id="3729506734996624908">Дозволені сайти</translation>
 <translation id="3732078975418297900">Помилка в рядку <ph name="ERROR_LINE" /></translation>
 <translation id="3733127536501031542">SSL-сервер із підвищенням</translation>
+<translation id="3735740477244556633">Параметри сортування</translation>
 <translation id="3737274407993947948">Не вдалося встановити Linux…</translation>
 <translation id="3737536731758327622">Тут відображатимуться ваші завантаження</translation>
+<translation id="3738671331307774213">Підтвердження особи допомагає захистити особисті дані</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">Відкрити додаток <ph name="APPLICATION" />?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> тепер відображатиметься в Консолі адміністратора</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">Отримайте інструменти для розробки веб-сайтів, додатків Android тощо. Під час встановлення Linux завантажиться <ph name="DOWNLOAD_SIZE" /> даних.</translation>
 <translation id="385051799172605136">Назад</translation>
 <translation id="3851428669031642514">Завантажити небезпечні сценарії</translation>
+<translation id="3854599674806204102">Виберіть варіант</translation>
 <translation id="3855441664322950881">Запакувати розширення</translation>
 <translation id="3855676282923585394">Імпорт закладок і налаштувань...</translation>
 <translation id="3856800405688283469">Виберіть часовий пояс</translation>
-<translation id="3856921555429624101">Використання трафіку більше не відстежується</translation>
 <translation id="3857228364945137633">Спробуйте розблокувати пристрій <ph name="DEVICE_TYPE" /> за допомогою Smart Lock, не вводячи пароль, коли телефон поблизу.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: синхронізацію призупинено</translation>
@@ -2249,7 +2261,6 @@
 <translation id="4508051413094283164">Відкривати все у вікні в режимі анонімного перегляду</translation>
 <translation id="4508265954913339219">Помилка активації</translation>
 <translation id="4508765956121923607">Переглянути д&amp;жерело</translation>
-<translation id="4509823033118379431">Зображення наразі недоступні. Щоб переглянути колекції, підключіться знову.</translation>
 <translation id="451407183922382411">Технологія <ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">Створити нового контрольованого користувача</translation>
 <translation id="4514610446763173167">Відтворити або призупинити відео</translation>
@@ -2326,6 +2337,7 @@
 <translation id="4627442949885028695">Продовжити на іншому пристрої</translation>
 <translation id="4628314759732363424">Змінити…</translation>
 <translation id="4628757576491864469">Пристрої</translation>
+<translation id="4628948037717959914">Фотографія</translation>
 <translation id="4630590996962964935">Недійсний символ: $1</translation>
 <translation id="4631887759990505102">Виконавець</translation>
 <translation id="4632483769545853758">Увімкнути звук на вкладці</translation>
@@ -2511,7 +2523,6 @@
 <translation id="4905417359854579806">Готово до резервного копіювання: <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Цей файл рідко завантажують. Він може бути небезпечним.</translation>
 <translation id="4907306957610201395">Категорія дозволу</translation>
-<translation id="4907824805858067479">Адміністратор вимкнув функцію збережених карток</translation>
 <translation id="4908811072292128752">Щоб одночасно переглядати два сайти, відкрийте нову вкладку</translation>
 <translation id="4909038193460299775">Оскільки цей обліковий запис зареєстровано в домені <ph name="DOMAIN" />, з цього пристрою буде видалено ваші закладки, історію, паролі й інші налаштування. Однак вони й надалі зберігатимуться в обліковому записі Google. Ними можна керувати на <ph name="BEGIN_LINK" />Інформаційній панелі Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Реєстрація пройшла успішно</translation>
@@ -2543,6 +2554,7 @@
 <translation id="4955814292505481804">Річна ліцензія</translation>
 <translation id="4957949153200969297">Вмикає лише функції, пов’язані із синхронізацією <ph name="IDS_SHORT_PRODUCT_NAME" /></translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> – <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">Ваші картки в одному додатку</translation>
 <translation id="496226124210045887">У вибраній папці містяться файли з приватною інформацією. Справді надати програмі "$1" постійний доступ для читання з цієї папки?</translation>
 <translation id="4964455510556214366">Упорядкування</translation>
 <translation id="4964673849688379040">Перевірка…</translation>
@@ -2590,6 +2602,7 @@
 <translation id="5027562294707732951">Додати розширення</translation>
 <translation id="5029568752722684782">Видалити копію</translation>
 <translation id="5030338702439866405">Ким видано:</translation>
+<translation id="503155457707535043">Завантаження додатків</translation>
 <translation id="503498442187459473">Сайт <ph name="HOST" /> хоче отримати доступ до ваших камери й мікрофона</translation>
 <translation id="5036662165765606524">Заборонити всім сайтам автоматично завантажувати декілька файлів</translation>
 <translation id="5037676449506322593">Вибрати всі</translation>
@@ -3104,6 +3117,7 @@
 <translation id="57838592816432529">Вимкнути звук</translation>
 <translation id="5785583009707899920">Обробники файлів Chrome</translation>
 <translation id="5787146423283493983">Угода щодо ключів</translation>
+<translation id="5788127256798019331">Файли Play</translation>
 <translation id="5788367137662787332">На жаль, підключити принаймні один розділ пристрою <ph name="DEVICE_LABEL" /> неможливо.</translation>
 <translation id="5794414402486823030">Завжди відкривати за допомогою системного переглядача</translation>
 <translation id="5794786537412027208">Вийти з усіх додатків Chrome</translation>
@@ -3231,7 +3245,6 @@
 <translation id="5990386583461751448">Перекладено</translation>
 <translation id="5991049340509704927">Збільшити</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити цей додаток.}one{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}few{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}many{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}other{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}}</translation>
-<translation id="5993332328670040093">Використання трафіку більше не відстежуватиметься.</translation>
 <translation id="6002458620803359783">Рекомендовані голоси</translation>
 <translation id="6005695835120147974">Маршрутизатор медіавмісту</translation>
 <translation id="6006484371116297560">Класична</translation>
@@ -3357,6 +3370,7 @@
 <translation id="6178664161104547336">Вибір сертифіката</translation>
 <translation id="6181431612547969857">Завантаження заблоковано</translation>
 <translation id="6185132558746749656">Місцезнаходження пристрою</translation>
+<translation id="6185617499004995178">Засіб перевірки CUPS IPP</translation>
 <translation id="6185696379715117369">Сторінка вгору</translation>
 <translation id="6189273858858366896">Налаштувати або керувати спільними мережевими файлами.</translation>
 <translation id="6189412234224385711">Відкрити за допомогою розширення "<ph name="EXTENSION_NAME" />"</translation>
@@ -3389,6 +3403,7 @@
 <translation id="6231881193380278751">Додайте в URL-адресу параметр запиту для автоматичного оновлення сторінки: chrome://device-log/?refresh=&lt;sec&gt;</translation>
 <translation id="6232017090690406397">Акумулятор</translation>
 <translation id="6232116551750539448">З’єднання з мережею "<ph name="NAME" />" утрачено</translation>
+<translation id="6235700927623181151">Ця вкладка має доступ до вмісту на робочому столі.</translation>
 <translation id="6237816943013845465">Дає змогу налаштувати роздільну здатність екрана</translation>
 <translation id="6238923052227198598">Показувати останню нотатку на заблокованому екрані</translation>
 <translation id="6239558157302047471">Перезавантажити фрейм</translation>
@@ -3423,7 +3438,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">Файл <ph name="FILE_NAME" /> рідко завантажують. Він може бути небезпечним.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Новий принтер у вашій мережі}one{Нові принтери у вашій мережі}few{Нові принтери у вашій мережі}many{Нові принтери у вашій мережі}other{Нові принтери у вашій мережі}}</translation>
-<translation id="6286684120317096255">Відстежується використання трафіку</translation>
 <translation id="6286708577777130801">Інформація про збережені паролі</translation>
 <translation id="6287852322318138013">Вибрати програму, щоб відкрити цей файл</translation>
 <translation id="6289452883081499048">Персоналізовані сервіси Google, як-от Play</translation>
@@ -3534,6 +3548,7 @@
 <translation id="6451180435462401570">Керувати пристроями Google Cloud Print</translation>
 <translation id="6451689256222386810">Якщо ви забули парольну фразу або хочете змінити це налаштування, <ph name="BEGIN_LINK" />скиньте синхронізацію<ph name="END_LINK" />.</translation>
 <translation id="6452181791372256707">Відхилити</translation>
+<translation id="6455264371803474013">На певних сайтах</translation>
 <translation id="6455894534188563617">&amp;Нова папка</translation>
 <translation id="6456394469623773452">Оптимальний</translation>
 <translation id="6456631036739229488">Змінено телефон із Smart Lock. Щоб оновити Smart Lock, введіть пароль. Наступного разу ви зможете розблокувати пристрій <ph name="DEVICE_TYPE" /> за допомогою свого телефона. Smart Lock можна вимкнути в налаштуваннях.</translation>
@@ -3611,6 +3626,7 @@
 <translation id="657402800789773160">&amp;Перезавантажити цю сторінку</translation>
 <translation id="6577284282025554716">Завантаження файлу "<ph name="FILE_NAME" />" скасовано</translation>
 <translation id="6578664922716508575">Шифрувати синхронізовані паролі з іменем користувача та паролем Google</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> – надано доступ до вмісту на робочому столі</translation>
 <translation id="6580151766480067746">Версія ARC</translation>
 <translation id="6581162200855843583">Посилання Google Диска</translation>
 <translation id="6582421931165117398">Змініть зараз, щоб захистити особисту інформацію. Перш ніж ви зможете змінити пароль, вам буде запропоновано ввійти в обліковий запис.</translation>
@@ -4077,6 +4093,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{Цей додаток може перешкоджати нормальній роботі Chrome.}one{Ці додатки можуть перешкоджати нормальній роботі Chrome.}few{Ці додатки можуть перешкоджати нормальній роботі Chrome.}many{Ці додатки можуть перешкоджати нормальній роботі Chrome.}other{Ці додатки можуть перешкоджати нормальній роботі Chrome.}}</translation>
 <translation id="7303900363563182677">Цьому сайту заборонено переглядати тексти й зображення в буфері обміну</translation>
 <translation id="730515362922783851">Обмінюватися даними з будь-яким пристроєм у локальній мережі чи Інтернеті</translation>
+<translation id="7307129035224081534">Призупинено</translation>
 <translation id="7308002049209013926">Швидко переходьте до нових додатків і дій за допомогою панелі запуску. Щоб відкрити панель запуску з клавіатури, натисніть Alt+Shift+L.</translation>
 <translation id="7309257895202129721">Показати &amp;елементи керування</translation>
 <translation id="7310598146671372464">Не вдалося ввійти. Сервер не підтримує вказані типи шифрування Kerberos. Зв’яжіться з адміністратором.</translation>
@@ -4134,7 +4151,6 @@
 <translation id="7400839060291901923">Налаштуйте з’єднання на пристрої <ph name="PHONE_NAME" /></translation>
 <translation id="740624631517654988">Спливаюче вікно заблоковано</translation>
 <translation id="7407430846095439694">Імпортувати та зв’язати</translation>
-<translation id="7409233648990234464">Перезапустити й виконати Powerwash</translation>
 <translation id="7409836189476010449">Запускати Flash</translation>
 <translation id="7410344089573941623">Запитувати, якщо хост <ph name="HOST" /> хоче отримати доступ до ваших камери та мікрофона</translation>
 <translation id="741204030948306876">Увімкнути</translation>
@@ -4167,6 +4183,7 @@
 <translation id="7465778193084373987">URL-адреса відкликання сертифіката Netscape</translation>
 <translation id="7469894403370665791">Автоматично з'єднувати з цією мережею</translation>
 <translation id="747114903913869239">Помилка: не вдається розшифрувати розширення</translation>
+<translation id="7473753388963818366">Налаштуйте свій <ph name="DEVICE_TYPE" /></translation>
 <translation id="7473891865547856676">Ні, дякую</translation>
 <translation id="747459581954555080">Відновити все</translation>
 <translation id="7475671414023905704">URL-адреса втраченого пароля Netscape</translation>
@@ -4291,6 +4308,7 @@
 <translation id="7665369617277396874">Додати обліковий запис</translation>
 <translation id="7671130400130574146">Використовувати системні границі та рядок заголовка</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" />, на сторінці <ph name="PAGE_TITLE" />.</translation>
+<translation id="7676867886086876795">Надішліть зразок свого голосу в Google, щоб дозволити диктування в будь-якому текстовому полі.</translation>
 <translation id="7681095912841365527">Сайт може використовувати Bluetooth</translation>
 <translation id="7683373461016844951">Натисніть OK і виберіть "Додати користувача", щоб створити новий профіль для своєї електронної адреси <ph name="DOMAIN" />.</translation>
 <translation id="7684212569183643648">Установив адміністратор</translation>
@@ -4332,6 +4350,7 @@
 <translation id="7740996059027112821">Стандартно</translation>
 <translation id="7748528009589593815">Попередня вкладка</translation>
 <translation id="7748626145866214022">На панелі дій доступно більше параметрів. Натисніть Alt + A, щоб відкрити її.</translation>
+<translation id="7750228210027921155">Картинка в картинці</translation>
 <translation id="7751260505918304024">Показати все</translation>
 <translation id="7754704193130578113">Запитувати, де зберігати кожен файл перед завантаженням</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4440,6 +4459,7 @@
 <translation id="7857949311770343000">Це сторінка нової вкладки, яку ви очікували?</translation>
 <translation id="786073089922909430">Сервіс: <ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">&amp;Завантаження</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 файл cookie}one{# файл cookie}few{# файли cookie}many{# файлів cookie}other{# файлу cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" />: підключено</translation>
 <translation id="7870730066603611552">Після налаштування перевірте параметри синхронізації</translation>
 <translation id="7870790288828963061">Новіші версії додатків-терміналів не знайдено. Помилка оновлення. Витягніть носій USB.</translation>
@@ -4761,6 +4781,7 @@
 <translation id="8373553483208508744">Вимкнути звук на вкладках</translation>
 <translation id="8382913212082956454">Копіювати &amp;адресу електронної пошти</translation>
 <translation id="8386903983509584791">Сканування завершено</translation>
+<translation id="8389492867173948260">Дозвольте цьому розширенню переглядати й змінювати всі ваші дані на веб-сайтах, які ви відвідуєте.</translation>
 <translation id="8390449457866780408">Сервер не доступний.</translation>
 <translation id="8391712576156218334">Зображення недоступне. Повторіть спробу пізніше.</translation>
 <translation id="8392234662362215700">Натисніть комбінацію клавіш Control-Shift-Space, щоб змінити розкладку клавіатури.</translation>
@@ -4792,6 +4813,7 @@
 <translation id="84297032718407999">Ви вийдете через <ph name="LOGOUT_TIME_LEFT" /></translation>
 <translation id="8431909052837336408">Змінити PIN-код SIM-карти</translation>
 <translation id="8434480141477525001">Порт налагодження NaCl</translation>
+<translation id="8435395510592618362">Підтвердьте свою особу за допомогою додатка <ph name="APP_NAME" /></translation>
 <translation id="843760761634048214">Зберегти дані кредитної картки</translation>
 <translation id="8438328416656800239">Виберіть розумний веб-переглядач</translation>
 <translation id="8438566539970814960">Покращувати пошук і веб-перегляд</translation>
@@ -4818,6 +4840,7 @@
 <translation id="8465252176946159372">Недійсний</translation>
 <translation id="8465444703385715657">Щоб запустити плагін <ph name="PLUGIN_NAME" />, потрібен ваш дозвіл</translation>
 <translation id="8466234950814670489">Архів у форматі TAR</translation>
+<translation id="8466417995783206254">На цій вкладці відтворюється відео в режимі "картинка в картинці".</translation>
 <translation id="8468750959626135884">Розблоковуйте пристрій <ph name="DEVICE_TYPE" /> за допомогою телефона Android.</translation>
 <translation id="8470028084415844044">Щоб мати доступ до паролів на всіх своїх пристроях, увімкніть синхронізацію.</translation>
 <translation id="8470513973197838199">Збережені паролі для <ph name="ORIGIN" /></translation>
@@ -4838,6 +4861,7 @@
 <translation id="8496717697661868878">Запустити цей плагін</translation>
 <translation id="8497219075884839166">Службові програми Windows</translation>
 <translation id="8498214519255567734">У цьому режимі зручніше переглядати або читати вміст на екрані в умовах тьмяного освітлення</translation>
+<translation id="8498395510292172881">Продовжити читати в Chrome</translation>
 <translation id="8503813439785031346">Ім’я користувача</translation>
 <translation id="850875081535031620">Шкідливих програм не виявлено</translation>
 <translation id="8509646642152301857">Помилка завантаження словника перевірки орфографії.</translation>
@@ -4988,7 +5012,6 @@
 <translation id="8725066075913043281">Повторити спробу</translation>
 <translation id="8725178340343806893">Улюблені/Закладки</translation>
 <translation id="8726206820263995930">Помилка під час отримання налаштувань політики із сервера: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Більше не показувати</translation>
 <translation id="8727344521467137076">На вашому комп’ютері виявлено зловмисне програмне забезпечення. Chrome видалить його та відновить налаштування для роботи веб-переглядача у звичайному режимі.</translation>
 <translation id="8730621377337864115">Готово</translation>
 <translation id="8732030010853991079">Запустіть розширення, натиснувши цей значок.</translation>
@@ -5179,6 +5202,7 @@
 <translation id="9027459031423301635">Відкрити посилання в новій &amp;вкладці</translation>
 <translation id="9030515284705930323">У вашій організації не ввімкнено магазин Google Play для вашого облікового запису. Зв’яжіться з адміністратором, щоб дізнатися більше.</translation>
 <translation id="9033857511263905942">&amp;Вставити</translation>
+<translation id="9034924485347205037">Файли Linux</translation>
 <translation id="9035012421917565900">Елементи не можна перенести назад у розташування "<ph name="DESTINATION_NAME" />", тож ви не зможете відмінити цю дію.</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">Показати оригінал</translation>
@@ -5279,6 +5303,7 @@
 <translation id="9173995187295789444">Пошук пристроїв Bluetooth…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> – під’єднано пристрій Bluetooth</translation>
 <translation id="9177499212658576372">Зараз ви під’єднані до такої мережі: <ph name="NETWORK_TYPE" />.</translation>
+<translation id="9179734824669616955">Налаштування Linux (бета-версія) на вашому <ph name="DEVICE_TYPE" /></translation>
 <translation id="9180281769944411366">Це може тривати кілька хвилин. Запускається контейнер Linux.</translation>
 <translation id="9180380851667544951">Сайт може показувати ваш екран</translation>
 <translation id="9188441292293901223">Щоб розблоковувати цей <ph name="DEVICE_TYPE" />, оновіть свій телефон до останньої версії ОС Android.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 44f935f..d50b6ed 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -565,7 +565,6 @@
 <translation id="1829192082282182671">Thu &amp;nhỏ</translation>
 <translation id="1830550083491357902">Chưa đăng nhập</translation>
 <translation id="1832511806131704864">Đã cập nhật thay đổi điện thoại</translation>
-<translation id="1832685970989658809">Quản trị viên của bạn đã vô hiệu hóa các phương thức thanh toán đã lưu</translation>
 <translation id="1834503245783133039">Tải xuống không thành công: <ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">Xóa tìm kiếm</translation>
 <translation id="1838709767668011582">Trang web Google</translation>
@@ -942,7 +941,6 @@
 <translation id="2435457462613246316">Hiển thị mật khẩu</translation>
 <translation id="2436186046335138073">Cho phép <ph name="HANDLER_HOSTNAME" /> mở tất cả liên kết <ph name="PROTOCOL" />?</translation>
 <translation id="2436707352762155834">Tối thiểu</translation>
-<translation id="2437139306601019091">Đã kết thúc đo lường mức sử dụng dữ liệu</translation>
 <translation id="2440604414813129000">Xem &amp;nguồn</translation>
 <translation id="2445081178310039857">Thư mục gốc của tiện ích là bắt buộc.</translation>
 <translation id="2445484935443597917">Tạo hồ sơ mới</translation>
@@ -1878,7 +1876,6 @@
 <translation id="3855441664322950881">Đóng gói tiện ích</translation>
 <translation id="3855676282923585394">Nhập Dấu trang và Cài đặt...</translation>
 <translation id="3856800405688283469">Chọn múi giờ</translation>
-<translation id="3856921555429624101">Đã kết thúc đo lường mức sử dụng dữ liệu</translation>
 <translation id="3857228364945137633">Dùng thử Smart Lock để mở khóa <ph name="DEVICE_TYPE" /> của bạn mà không cần mật khẩu khi điện thoại của bạn ở gần.</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: Đã tạm dừng đồng bộ hóa</translation>
@@ -2249,7 +2246,6 @@
 <translation id="4508051413094283164">Mở tất cả trong cửa sổ ẩn danh</translation>
 <translation id="4508265954913339219">Kích hoạt không thành công</translation>
 <translation id="4508765956121923607">Xem &amp;Nguồn</translation>
-<translation id="4509823033118379431">Hiện không sử dụng được hình ảnh. Vui lòng kết nối lại để xem các bộ sưu tập.</translation>
 <translation id="451407183922382411">Do <ph name="COMPANY_NAME" /> cung cấp</translation>
 <translation id="4514542542275172126">Thiết lập người dùng được giám sát mới</translation>
 <translation id="4514610446763173167">Bật/tắt video để phát hoặc tạm dừng</translation>
@@ -2326,6 +2322,7 @@
 <translation id="4627442949885028695">Tiếp tục từ thiết bị khác</translation>
 <translation id="4628314759732363424">Thay đổi...</translation>
 <translation id="4628757576491864469">Thiết bị</translation>
+<translation id="4628948037717959914">Ảnh</translation>
 <translation id="4630590996962964935">Ký tự không hợp lệ: $1</translation>
 <translation id="4631887759990505102">Nghệ sĩ</translation>
 <translation id="4632483769545853758">Bật âm thanh tab</translation>
@@ -2511,7 +2508,6 @@
 <translation id="4905417359854579806">Đã sẵn sàng sao lưu <ph name="FILE_COUNT" /></translation>
 <translation id="4907161631261076876">Tệp này thường không được tải xuống và có thể nguy hiểm.</translation>
 <translation id="4907306957610201395">Danh mục quyền</translation>
-<translation id="4907824805858067479">Quản trị viên của bạn đã vô hiệu hóa các thẻ được lưu</translation>
 <translation id="4908811072292128752">Mở tab mới để duyệt hai trang web cùng lúc</translation>
 <translation id="4909038193460299775">Vì tài khoản này do <ph name="DOMAIN" /> quản lý nên dấu trang, lịch sử, mật khẩu và các cài đặt khác của bạn sẽ bị xóa khỏi thiết bị này. Tuy nhiên, dữ liệu của bạn sẽ vẫn được lưu trữ trong Tài khoản Google và có thể được quản lý trên <ph name="BEGIN_LINK" />Trang tổng quan Google<ph name="END_LINK" />.</translation>
 <translation id="4909359680501173791">Bạn đã đăng ký thành công</translation>
@@ -3231,7 +3227,6 @@
 <translation id="5990386583461751448">Đã dịch</translation>
 <translation id="5991049340509704927">Phóng to</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Để đảm bảo có thể tiếp tục duyệt web, hãy yêu cầu quản trị viên xóa ứng dụng này.}other{Để đảm bảo có thể tiếp tục duyệt web, hãy yêu cầu quản trị viên xóa những ứng dụng này.}}</translation>
-<translation id="5993332328670040093">Mức sử dụng dữ liệu của bạn sẽ không được đo lường nữa.</translation>
 <translation id="6002458620803359783">Giọng nói ưu tiên</translation>
 <translation id="6005695835120147974">Bộ định tuyến phương tiện</translation>
 <translation id="6006484371116297560">Cổ điển</translation>
@@ -3423,7 +3418,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> thường không được tải xuống và có thể nguy hiểm.</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{Máy in mới trên mạng của bạn}other{Máy in mới trên mạng của bạn}}</translation>
-<translation id="6286684120317096255">Đang đo lường mức sử dụng dữ liệu</translation>
 <translation id="6286708577777130801">Chi tiết mật khẩu đã lưu</translation>
 <translation id="6287852322318138013">Chọn một ứng dụng để mở tệp này</translation>
 <translation id="6289452883081499048">Các dịch vụ cá nhân hóa của Google như Play</translation>
@@ -4134,7 +4128,6 @@
 <translation id="7400839060291901923">Thiết lập kết nối trên <ph name="PHONE_NAME" /> của bạn</translation>
 <translation id="740624631517654988">Đã chặn cửa sổ bật lên</translation>
 <translation id="7407430846095439694">Nhập và liên kết</translation>
-<translation id="7409233648990234464">Chạy lại và Powerwash</translation>
 <translation id="7409836189476010449">Chạy Flash</translation>
 <translation id="7410344089573941623">Hỏi xem <ph name="HOST" /> có muốn truy cập vào máy ảnh và micrô của bạn không</translation>
 <translation id="741204030948306876">Có, tôi đồng ý</translation>
@@ -4988,7 +4981,6 @@
 <translation id="8725066075913043281">Thử lại</translation>
 <translation id="8725178340343806893">Mục ưa thích/Dấu trang</translation>
 <translation id="8726206820263995930">Lỗi khi tìm nạp cài đặt chính sách từ máy chủ: <ph name="CLIENT_ERROR" />.</translation>
-<translation id="8727142376512517020">Không hiển thị lại hộp thoại này</translation>
 <translation id="8727344521467137076">Có phần mềm độc hại trên máy tính của bạn. Chrome sẽ xóa phần mềm này và khôi phục cài đặt của bạn để trình duyệt có thể hoạt động bình thường trở lại.</translation>
 <translation id="8730621377337864115">Hoàn tất</translation>
 <translation id="8732030010853991079">Sử dụng tiện ích này bằng cách nhấp vào biểu tượng này.</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 52d3030..552851c 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -562,7 +562,6 @@
 <translation id="1829192082282182671">缩小(&amp;O)</translation>
 <translation id="1830550083491357902">未登录</translation>
 <translation id="1832511806131704864">配对手机已更新</translation>
-<translation id="1832685970989658809">您的管理员停用了已保存的付款方式</translation>
 <translation id="1834503245783133039">未能成功下载“<ph name="FILE_NAME" />”</translation>
 <translation id="1838374766361614909">清除搜索字词</translation>
 <translation id="1838709767668011582">Google 网站</translation>
@@ -939,7 +938,6 @@
 <translation id="2435457462613246316">显示密码</translation>
 <translation id="2436186046335138073">允许<ph name="HANDLER_HOSTNAME" />打开所有<ph name="PROTOCOL" />链接?</translation>
 <translation id="2436707352762155834">最小值</translation>
-<translation id="2437139306601019091">已停止衡量数据使用情况</translation>
 <translation id="2440604414813129000">查看源代码(&amp;O)</translation>
 <translation id="2445081178310039857">必须指定扩展程序根目录。</translation>
 <translation id="2445484935443597917">创建新的个人资料</translation>
@@ -1872,7 +1870,6 @@
 <translation id="3855441664322950881">打包扩展程序</translation>
 <translation id="3855676282923585394">导入书签和设置...</translation>
 <translation id="3856800405688283469">选择时区</translation>
-<translation id="3856921555429624101">已停止衡量数据使用情况</translation>
 <translation id="3857228364945137633">当您的手机就在附近时,您便可尝试使用 Smart Lock(无需使用密码)来解锁您的 <ph name="DEVICE_TYPE" />。</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />:已暂停同步</translation>
@@ -2242,7 +2239,6 @@
 <translation id="4508051413094283164">在无痕式窗口中打开所有网址</translation>
 <translation id="4508265954913339219">激活失败</translation>
 <translation id="4508765956121923607">显示源代码(&amp;O)</translation>
-<translation id="4509823033118379431">暂时无法提供图片。请重新连接以查看图片集。</translation>
 <translation id="451407183922382411">由 <ph name="COMPANY_NAME" /> 提供技术支持</translation>
 <translation id="4514542542275172126">设置新的受监管用户</translation>
 <translation id="4514610446763173167">在播放视频和暂停视频之间切换</translation>
@@ -2319,6 +2315,7 @@
 <translation id="4627442949885028695">通过其他设备继续浏览</translation>
 <translation id="4628314759732363424">更改…</translation>
 <translation id="4628757576491864469">设备</translation>
+<translation id="4628948037717959914">照片</translation>
 <translation id="4630590996962964935">字符无效:$1</translation>
 <translation id="4631887759990505102">艺术家</translation>
 <translation id="4632483769545853758">将此标签页取消静音</translation>
@@ -2504,7 +2501,6 @@
 <translation id="4905417359854579806">可以开始备份 <ph name="FILE_COUNT" />了</translation>
 <translation id="4907161631261076876">此文件属于不常下载的内容,可能存在危险。</translation>
 <translation id="4907306957610201395">权限类别</translation>
-<translation id="4907824805858067479">您的管理员已停用自动填入已保存信用卡信息的功能</translation>
 <translation id="4908811072292128752">只需打开一个新标签页,即可同时浏览两个网站</translation>
 <translation id="4909038193460299775">由于此帐号是由 <ph name="DOMAIN" /> 管理,因此系统将会从该设备中清除您的书签、历史记录、密码及其他设置。但是,您的数据依然会存储在您的 Google 帐号中,而且您可以通过 <ph name="BEGIN_LINK" />Google 信息中心<ph name="END_LINK" />管理这些数据。</translation>
 <translation id="4909359680501173791">您已成功注册</translation>
@@ -3218,7 +3214,6 @@
 <translation id="5990386583461751448">已翻译</translation>
 <translation id="5991049340509704927">放大</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{为确保您能够继续浏览网页,请让您的管理员卸载这款应用。}other{为确保您能够继续浏览网页,请让您的管理员卸载这些应用。}}</translation>
-<translation id="5993332328670040093">系统将不再衡量您的数据使用情况。</translation>
 <translation id="6002458620803359783">首选语音</translation>
 <translation id="6005695835120147974">媒体路由器</translation>
 <translation id="6006484371116297560">经典</translation>
@@ -3410,7 +3405,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413"><ph name="FILE_NAME" /> 的下载方式实属异常,因此它可能存在危险。</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{您的网络中有 1 台新打印机}other{您的网络中有多台新打印机}}</translation>
-<translation id="6286684120317096255">正在衡量数据使用情况</translation>
 <translation id="6286708577777130801">保存的密码详细信息</translation>
 <translation id="6287852322318138013">选择用于打开此文件的应用</translation>
 <translation id="6289452883081499048">体验个性化的 Google 服务(例如 Play)</translation>
@@ -4120,7 +4114,6 @@
 <translation id="7400839060291901923">请在您的 <ph name="PHONE_NAME" /> 设备上设置连接</translation>
 <translation id="740624631517654988">已拦截弹出式窗口</translation>
 <translation id="7407430846095439694">导入并绑定</translation>
-<translation id="7409233648990234464">重新启动并执行 Powerwash</translation>
 <translation id="7409836189476010449">运行 Flash</translation>
 <translation id="7410344089573941623"><ph name="HOST" /> 想要使用摄像头和麦克风时询问我是否同意</translation>
 <translation id="741204030948306876">确认</translation>
@@ -4972,7 +4965,6 @@
 <translation id="8725066075913043281">重试</translation>
 <translation id="8725178340343806893">收藏夹/书签</translation>
 <translation id="8726206820263995930">从服务器抓取策略设置时出错:<ph name="CLIENT_ERROR" />。</translation>
-<translation id="8727142376512517020">不要再显示此对话框</translation>
 <translation id="8727344521467137076">我们在您的计算机上发现了有害软件。Chrome 正在移除该软件并将恢复您的设置,以确保您的浏览器能够重新正常运行。</translation>
 <translation id="8730621377337864115">完成</translation>
 <translation id="8732030010853991079">点击该图标,即可使用此扩展程序。</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index a37a78a..2e1af0b8 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -299,6 +299,7 @@
 <translation id="1433811987160647649">存取前詢問我</translation>
 <translation id="1434696352799406980">這項功能會重設您的起始網頁、新分頁、搜尋引擎和固定分頁,同時停用所有擴充功能並清除 Cookie 等暫存資料,但不會清除您的書籤、歷史記錄和已儲存的密碼。</translation>
 <translation id="1434886155212424586">首頁是新分頁</translation>
+<translation id="1436671784520050284">繼續設定</translation>
 <translation id="1436784010935106834">已移除</translation>
 <translation id="1438632560381091872">開啟多個分頁音訊</translation>
 <translation id="1442392616396121389">路徑前置字元</translation>
@@ -318,6 +319,7 @@
 <translation id="1465827627707997754">披薩切片</translation>
 <translation id="1467432559032391204">向左</translation>
 <translation id="1468571364034902819">無法使用這個設定檔</translation>
+<translation id="1470533772306424441">系統將為你安裝這些應用程式。你可以在 Play 商店中尋找其他適合在自己裝置上使用的應用程式。</translation>
 <translation id="1470811252759861213">如要在所有電腦上使用您的擴充功能,請<ph name="SIGN_IN_LINK" />。</translation>
 <translation id="1474339897586437869">您的 Google 雲端硬碟的可用空間不足,因此無法上傳「<ph name="FILENAME" />」。</translation>
 <translation id="1475502736924165259">您儲存的這些憑證不屬於任何其他類別</translation>
@@ -565,7 +567,6 @@
 <translation id="1829192082282182671">縮小(&amp;O)</translation>
 <translation id="1830550083491357902">未登入</translation>
 <translation id="1832511806131704864">手機變更已更新</translation>
-<translation id="1832685970989658809">你的管理員停用了付款方式資訊自動填入功能</translation>
 <translation id="1834503245783133039">下載失敗:<ph name="FILE_NAME" /></translation>
 <translation id="1838374766361614909">清除搜尋</translation>
 <translation id="1838709767668011582">Google 網站</translation>
@@ -793,6 +794,7 @@
 <translation id="2192505247865591433">來源:</translation>
 <translation id="2193365732679659387">信任設定</translation>
 <translation id="2195729137168608510">電子郵件保護</translation>
+<translation id="2199298570273670671">錯誤</translation>
 <translation id="2200356397587687044">Chrome 需要權限才能繼續執行</translation>
 <translation id="220138918934036434">隱藏按鈕</translation>
 <translation id="2202898655984161076">列出印表機清單時發生問題,你的部分印表機尚未使用 <ph name="CLOUD_PRINT_NAME" /> 完成註冊。</translation>
@@ -942,10 +944,10 @@
 <translation id="2435457462613246316">顯示密碼</translation>
 <translation id="2436186046335138073">要允許 <ph name="HANDLER_HOSTNAME" /> 開啟所有<ph name="PROTOCOL" />連結嗎?</translation>
 <translation id="2436707352762155834">最小值</translation>
-<translation id="2437139306601019091">已停止監測數據用量</translation>
 <translation id="2440604414813129000">檢視原始碼(&amp;O)</translation>
 <translation id="2445081178310039857">請指定擴充功能根目錄。</translation>
 <translation id="2445484935443597917">建立新的個人資料</translation>
+<translation id="2446585455334014596"><ph name="APP_NAME" /> 想驗證你的身分</translation>
 <translation id="2448312741937722512">類型</translation>
 <translation id="2450223707519584812">找不到 Google API 金鑰,因此您無法新增使用者。詳情請參閱 <ph name="DETAILS_URL" />。</translation>
 <translation id="2450310832094867474">要關閉同步處理功能並登出嗎?</translation>
@@ -955,6 +957,7 @@
 <translation id="2453576648990281505">檔案已存在</translation>
 <translation id="2453860139492968684">結束</translation>
 <translation id="2454247629720664989">關鍵字</translation>
+<translation id="245661998428026871">子母畫面模式中的影片將停止播放。</translation>
 <translation id="2457246892030921239">「<ph name="APP_NAME" />」要求複製 <ph name="VOLUME_NAME" /> 中的檔案。</translation>
 <translation id="2462724976360937186">憑證授權單位金鑰識別碼</translation>
 <translation id="2462752602710430187">已新增「<ph name="PRINTER_NAME" />」</translation>
@@ -1362,6 +1365,7 @@
 <translation id="304826556400666995">開啟多個分頁音訊</translation>
 <translation id="3053013834507634016">憑證金鑰用途</translation>
 <translation id="3057861065630527966">備份您的相片和影片</translation>
+<translation id="3059313675706898490">Android 訊息</translation>
 <translation id="3060379269883947824">啟用隨選朗讀功能</translation>
 <translation id="3061707000357573562">修補服務</translation>
 <translation id="3064410671692449875">資料不足</translation>
@@ -1410,6 +1414,7 @@
 <translation id="313205617302240621">忘記密碼了嗎?</translation>
 <translation id="3132996321662585180">每天重新整理</translation>
 <translation id="3135204511829026971">旋轉螢幕</translation>
+<translation id="313638818480447860">有 <ph name="NUMBER_OF_APPS" /> 個針對這個裝置經過最佳化處理的應用程式與你的帳戶連結。</translation>
 <translation id="313963229645891001">下載中,<ph name="STATUS" /></translation>
 <translation id="3139925690611372679">預設的黃色顯示圖片</translation>
 <translation id="3140353188828248647">將焦點移至網址列</translation>
@@ -1440,6 +1445,7 @@
 <translation id="3182749001423093222">拼字檢查</translation>
 <translation id="3183139917765991655">設定檔匯入工具</translation>
 <translation id="3184560914950696195">無法儲存到 $1,系統會將編輯過的圖片儲存在「下載」資料夾。</translation>
+<translation id="3188257591659621405">我的檔案</translation>
 <translation id="3188465121994729530">移動平均</translation>
 <translation id="3190558889382726167">密碼已儲存</translation>
 <translation id="3192947282887913208">音訊檔</translation>
@@ -1527,6 +1533,7 @@
 <translation id="3326821416087822643">正在壓縮 <ph name="FILE_NAME" />...</translation>
 <translation id="3331321258768829690">(<ph name="UTCOFFSET" />) <ph name="LONGTZNAME" /> (<ph name="EXEMPLARCITY" />)</translation>
 <translation id="3331974543021145906">應用程式資訊</translation>
+<translation id="3334632933872291866"><ph name="WINDOW_TITLE" /> - 正在使用子母畫面模式播放影片</translation>
 <translation id="3335337277364016868">錄音年份</translation>
 <translation id="3335947283844343239">重新開啟先前關閉的分頁</translation>
 <translation id="3336664756920573711">使用 Android 手機解鎖你的 <ph name="DEVICE_TYPE" /></translation>
@@ -1546,6 +1553,7 @@
 <translation id="3360297538363969800">列印失敗。請檢查你的印表機,然後再試一次。</translation>
 <translation id="3364721542077212959">觸控筆工具</translation>
 <translation id="3365598184818502391">請擇一使用 Ctrl 或 Alt 鍵</translation>
+<translation id="3367047597842238025">依你的需求設定 <ph name="DEVICE_TYPE" />;只要動動手指即可探索各種實用功能。</translation>
 <translation id="3368922792935385530">已連線</translation>
 <translation id="3369624026883419694">正在解析主機...</translation>
 <translation id="337286756654493126">讀取你在應用程式中開啟的資料夾</translation>
@@ -1559,6 +1567,7 @@
 <translation id="3389312115541230716">以滑鼠右鍵按一下工作列中的 <ph name="SMALL_PRODUCT_LOGO" /> 圖示</translation>
 <translation id="3391716558283801616">分頁 7</translation>
 <translation id="3396331542604645348">選取的印表機無法使用或未正確安裝。請檢查你的印表機,或改選其他印表機。</translation>
+<translation id="3396800784455899911">點選 [接受並繼續] 按鈕即表示您同意上述的 Google 服務處理程序。</translation>
 <translation id="3399432415385675819">通知功能會遭到停用</translation>
 <translation id="340282674066624"><ph name="DOWNLOAD_RECEIVED" />,<ph name="TIME_LEFT" /></translation>
 <translation id="3404065873681873169">系統沒有儲存這個網站的密碼</translation>
@@ -1787,10 +1796,13 @@
 <translation id="3726463242007121105">這個裝置所用的檔案系統不受支援,因此系統無法開啟這個裝置。</translation>
 <translation id="3727148787322499904">變更這項設定會影響所有共用網路</translation>
 <translation id="3727187387656390258">檢查彈出式視窗</translation>
+<translation id="3729506734996624908">允許的網站</translation>
 <translation id="3732078975418297900">第 <ph name="ERROR_LINE" /> 行有錯誤</translation>
 <translation id="3733127536501031542">具有 Step-Up 功能的 SSL 伺服器</translation>
+<translation id="3735740477244556633">排序依據</translation>
 <translation id="3737274407993947948">安裝 Linux 時發生錯誤...</translation>
 <translation id="3737536731758327622">你的下載內容會顯示在這裡</translation>
+<translation id="3738671331307774213">驗證你的身分有助於確保私人資料安全無虞</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
 <translation id="3739254215541673094">要開啟「<ph name="APPLICATION" />」嗎?</translation>
 <translation id="3741158646617793859"><ph name="DEVICE_NAME" /> 會顯示在管理員控制台中</translation>
@@ -1875,10 +1887,10 @@
 <translation id="3846116211488856547">取得網站開發工具、Android 應用程式等等。安裝 Linux 將下載 <ph name="DOWNLOAD_SIZE" /> 的資料。</translation>
 <translation id="385051799172605136">返回</translation>
 <translation id="3851428669031642514">載入不安全的指令碼</translation>
+<translation id="3854599674806204102">選擇所需選項</translation>
 <translation id="3855441664322950881">封裝擴充功能</translation>
 <translation id="3855676282923585394">匯入書籤和設定...</translation>
 <translation id="3856800405688283469">選取時區</translation>
-<translation id="3856921555429624101">已停止監測數據用量</translation>
 <translation id="3857228364945137633">當手機在適當距離範圍內時,不需密碼即可使用 Smart Lock 為你的 <ph name="DEVICE_TYPE" /> 解鎖。</translation>
 <translation id="3857773447683694438">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</translation>
 <translation id="3860104611854310167"><ph name="PROFILE_NAME" />:已暫停同步處理</translation>
@@ -2248,7 +2260,6 @@
 <translation id="4508051413094283164">在無痕式視窗中開啟所有書籤</translation>
 <translation id="4508265954913339219">啟用失敗</translation>
 <translation id="4508765956121923607">檢視原始碼(&amp;O)</translation>
-<translation id="4509823033118379431">目前無法提供圖片。請重新連線以查看圖片集。</translation>
 <translation id="451407183922382411">技術提供:<ph name="COMPANY_NAME" /></translation>
 <translation id="4514542542275172126">設定新的受監管使用者</translation>
 <translation id="4514610446763173167">在播放和暫停影片之間切換</translation>
@@ -2325,6 +2336,7 @@
 <translation id="4627442949885028695">透過其他裝置繼續瀏覽</translation>
 <translation id="4628314759732363424">變更...</translation>
 <translation id="4628757576491864469">裝置</translation>
+<translation id="4628948037717959914">相片</translation>
 <translation id="4630590996962964935">無效的字元:「$1」</translation>
 <translation id="4631887759990505102">演出者</translation>
 <translation id="4632483769545853758">開啟分頁音訊</translation>
@@ -2510,7 +2522,6 @@
 <translation id="4905417359854579806">現在可以備份 <ph name="FILE_COUNT" />了</translation>
 <translation id="4907161631261076876">一般使用者不常下載這個檔案,代表這個檔案可能不安全。</translation>
 <translation id="4907306957610201395">權限類別</translation>
-<translation id="4907824805858067479">你的管理員停用了信用卡資訊自動填入功能</translation>
 <translation id="4908811072292128752">開啟新分頁即可一次瀏覽兩個網站</translation>
 <translation id="4909038193460299775">這個帳戶是由 <ph name="DOMAIN" /> 所管理,因此系統會將你的書籤、歷史記錄、密碼和其他設定從這個裝置上清除。不過,你的資料仍會儲存在你的 Google 帳戶中,並可透過 <ph name="BEGIN_LINK" />Google 資訊主頁<ph name="END_LINK" />管理。</translation>
 <translation id="4909359680501173791">你已成功註冊</translation>
@@ -2542,6 +2553,7 @@
 <translation id="4955814292505481804">年約</translation>
 <translation id="4957949153200969297">僅啟用與 <ph name="IDS_SHORT_PRODUCT_NAME" /> 同步相關的功能</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
+<translation id="4961000125720751066">集中管理所有卡片</translation>
 <translation id="496226124210045887">你選取的資料夾包含敏感檔案。你確定要將這個資料夾的讀取權限永久授予「$1」嗎?</translation>
 <translation id="4964455510556214366">排列</translation>
 <translation id="4964673849688379040">檢查中...</translation>
@@ -2588,6 +2600,7 @@
 <translation id="5027562294707732951">新增擴充功能</translation>
 <translation id="5029568752722684782">清除複本</translation>
 <translation id="5030338702439866405">發行者</translation>
+<translation id="503155457707535043">正在下載應用程式</translation>
 <translation id="503498442187459473"><ph name="HOST" /> 要求使用攝影機和麥克風</translation>
 <translation id="5036662165765606524">禁止任何網站自動下載多個檔案</translation>
 <translation id="5037676449506322593">全選</translation>
@@ -3102,6 +3115,7 @@
 <translation id="57838592816432529">靜音</translation>
 <translation id="5785583009707899920">Chrome 檔案公用程式</translation>
 <translation id="5787146423283493983">金鑰協議</translation>
+<translation id="5788127256798019331">Play 檔案</translation>
 <translation id="5788367137662787332">很抱歉,<ph name="DEVICE_LABEL" /> 裝置上至少有一個分割區無法掛載。</translation>
 <translation id="5794414402486823030">一律使用系統檢視器開啟</translation>
 <translation id="5794786537412027208">結束所有 Chrome 應用程式</translation>
@@ -3229,7 +3243,6 @@
 <translation id="5990386583461751448">已翻譯</translation>
 <translation id="5991049340509704927">放大</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{為確保你可以持續瀏覽網路,請要求你的管理員移除這個應用程式。}other{為確保你可以持續瀏覽網路,請要求你的管理員移除這些應用程式。}}</translation>
-<translation id="5993332328670040093">系統不會再監測您的數據用量。</translation>
 <translation id="6002458620803359783">聲音偏好</translation>
 <translation id="6005695835120147974">媒體路由器</translation>
 <translation id="6006484371116297560">傳統版</translation>
@@ -3355,6 +3368,7 @@
 <translation id="6178664161104547336">選取憑證</translation>
 <translation id="6181431612547969857">下載遭封鎖</translation>
 <translation id="6185132558746749656">裝置位置</translation>
+<translation id="6185617499004995178">CUPS IPP 驗證工具</translation>
 <translation id="6185696379715117369">Page Up 鍵</translation>
 <translation id="6189273858858366896">設定或管理網路檔案共用。</translation>
 <translation id="6189412234224385711">使用「<ph name="EXTENSION_NAME" />」開啟</translation>
@@ -3387,6 +3401,7 @@
 <translation id="6231881193380278751">在網址中加入查詢間距的參數,設定自動重新整理網頁的時間:chrome://device-log/?refresh=&lt;秒數&gt;</translation>
 <translation id="6232017090690406397">電池</translation>
 <translation id="6232116551750539448">「<ph name="NAME" />」的連線已中斷</translation>
+<translation id="6235700927623181151">這個分頁正在分享你的桌面內容。</translation>
 <translation id="6237816943013845465">讓你調整螢幕解析度</translation>
 <translation id="6238923052227198598">在鎖定畫面上顯示最新記事</translation>
 <translation id="6239558157302047471">重新載入頁框(&amp;F)</translation>
@@ -3421,7 +3436,6 @@
 <translation id="6280912520669706465">ARC</translation>
 <translation id="6285120108426285413">一般使用者不常下載 <ph name="FILE_NAME" />,代表這個檔案可能不安全。</translation>
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{您的網路上有一台新印表機}other{您的網路上有多台新印表機}}</translation>
-<translation id="6286684120317096255">正在監測數據用量</translation>
 <translation id="6286708577777130801">已儲存的密碼詳細資料</translation>
 <translation id="6287852322318138013">選取要用來開啟這個檔案的應用程式</translation>
 <translation id="6289452883081499048">享有個人化的 Google 服務,例如 Play</translation>
@@ -3531,6 +3545,7 @@
 <translation id="6451180435462401570">管理雲端列印裝置</translation>
 <translation id="6451689256222386810">如果你忘記通關密語,或是要變更這項設定,請<ph name="BEGIN_LINK" />重設同步處理功能<ph name="END_LINK" />。</translation>
 <translation id="6452181791372256707">拒絕</translation>
+<translation id="6455264371803474013">在特定網站上</translation>
 <translation id="6455894534188563617">新增資料夾(&amp;N)</translation>
 <translation id="6456394469623773452">良好</translation>
 <translation id="6456631036739229488">Smart Lock 手機已變更,請輸入你的密碼以更新 Smart Lock。下次手機就會為你的 <ph name="DEVICE_TYPE" /> 解鎖。你可以在「設定」中停用 Smart Lock。</translation>
@@ -3608,6 +3623,7 @@
 <translation id="657402800789773160">重新載入這個網頁(&amp;R)</translation>
 <translation id="6577284282025554716">已取消下載:<ph name="FILE_NAME" /></translation>
 <translation id="6578664922716508575">使用你的 Google 使用者名稱與密碼將經過同步處理的密碼加密</translation>
+<translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - 已分享桌面內容</translation>
 <translation id="6580151766480067746">ARC 版本</translation>
 <translation id="6581162200855843583">Google 雲端硬碟連結</translation>
 <translation id="6582421931165117398">為維護你的個人資訊安全,請立即變更密碼。系統會要求你先登入帳戶,才能變更密碼。</translation>
@@ -4074,6 +4090,7 @@
 <translation id="730289542559375723">{NUM_APPLICATIONS,plural, =1{這個應用程式可能會造成 Chrome 無法正常運作。}other{這些應用程式可能會造成 Chrome 無法正常運作。}}</translation>
 <translation id="7303900363563182677">這個網站無法讀取已複製到剪貼簿的文字和圖片</translation>
 <translation id="730515362922783851">與區域網路或網際網路中的任何裝置交換資料</translation>
+<translation id="7307129035224081534">已暫停</translation>
 <translation id="7308002049209013926">使用啟動器快速存取新的應用程式和活動。如要使用鍵盤開啟這個畫面,請按下 Alt + Shift + L 鍵。</translation>
 <translation id="7309257895202129721">顯示控制介面(&amp;C)</translation>
 <translation id="7310598146671372464">無法登入,伺服器不支援指定的 Kerberos 加密類型。請與你的管理員聯絡。</translation>
@@ -4131,7 +4148,6 @@
 <translation id="7400839060291901923">在 <ph name="PHONE_NAME" /> 上設定連線</translation>
 <translation id="740624631517654988">已封鎖彈出式視窗</translation>
 <translation id="7407430846095439694">匯入和繫結</translation>
-<translation id="7409233648990234464">重新啟動並執行 Powerwash</translation>
 <translation id="7409836189476010449">執行 Flash</translation>
 <translation id="7410344089573941623">當 <ph name="HOST" /> 要求存取攝影機和麥克風時詢問我。</translation>
 <translation id="741204030948306876">是,我要啟用</translation>
@@ -4164,6 +4180,7 @@
 <translation id="7465778193084373987">Netscape 憑證撤銷網址</translation>
 <translation id="7469894403370665791">自動連線至這個網路</translation>
 <translation id="747114903913869239">錯誤:無法為擴充功能解碼</translation>
+<translation id="7473753388963818366">讓我們開始設定你的 <ph name="DEVICE_TYPE" /> 吧!</translation>
 <translation id="7473891865547856676">不用了,謝謝</translation>
 <translation id="747459581954555080">全部還原</translation>
 <translation id="7475671414023905704">Netscape 遺失密碼網址</translation>
@@ -4287,6 +4304,7 @@
 <translation id="7665369617277396874">新增帳戶</translation>
 <translation id="7671130400130574146">使用系統標題列及邊界</translation>
 <translation id="7672520070349703697"><ph name="HUNG_IFRAME_URL" /> (在「<ph name="PAGE_TITLE" />」中)。</translation>
+<translation id="7676867886086876795">將你的語音資料傳送給 Google,讓你在任何文字欄位中使用語音輸入功能。</translation>
 <translation id="7681095912841365527">網站可以使用藍牙</translation>
 <translation id="7683373461016844951">如要繼續操作,請依序點選 [確定] 和 [新增使用者],為你的 <ph name="DOMAIN" /> 電子郵件地址建立新的設定檔。</translation>
 <translation id="7684212569183643648">由您的管理員安裝</translation>
@@ -4328,6 +4346,7 @@
 <translation id="7740996059027112821">標準</translation>
 <translation id="7748528009589593815">上一個分頁</translation>
 <translation id="7748626145866214022">動作列中有更多可用的選項。按下 Alt+A 即可將焦點移到動作列。</translation>
+<translation id="7750228210027921155">子母畫面</translation>
 <translation id="7751260505918304024">全部顯示</translation>
 <translation id="7754704193130578113">下載每個檔案前先詢問儲存位置</translation>
 <translation id="7758143121000533418">Family Link</translation>
@@ -4436,6 +4455,7 @@
 <translation id="7857949311770343000">這是你想要的新分頁嗎?</translation>
 <translation id="786073089922909430">服務:<ph name="ARC_PROCESS_NAME" /></translation>
 <translation id="7861215335140947162">下載(&amp;D)</translation>
+<translation id="7868378670806575181">{NUM_COOKIES,plural, =1{1 個 Cookie}other{# 個 Cookie}}</translation>
 <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - 已配對</translation>
 <translation id="7870730066603611552">設定後查看同步處理選項</translation>
 <translation id="7870790288828963061">找不到新版 Kiosk 應用程式,沒有可更新的內容。請移除 USB 隨身碟。</translation>
@@ -4757,6 +4777,7 @@
 <translation id="8373553483208508744">關閉多個分頁音訊</translation>
 <translation id="8382913212082956454">複製電子郵件地址(&amp;E)</translation>
 <translation id="8386903983509584791">掃描完成</translation>
+<translation id="8389492867173948260">允許這個擴充功能讀取及變更你在造訪過的網站留下的所有資料:</translation>
 <translation id="8390449457866780408">無法與伺服器連線。</translation>
 <translation id="8391712576156218334">目前無法存取圖片,請稍後再試。</translation>
 <translation id="8392234662362215700">按下 Ctrl + Shift + 空格鍵可切換鍵盤配置。</translation>
@@ -4788,6 +4809,7 @@
 <translation id="84297032718407999">你將於 <ph name="LOGOUT_TIME_LEFT" />後登出</translation>
 <translation id="8431909052837336408">變更 SIM 卡的 PIN 碼</translation>
 <translation id="8434480141477525001">NaCl 偵錯通訊埠</translation>
+<translation id="8435395510592618362">向 <ph name="APP_NAME" /> 驗證你的身分</translation>
 <translation id="843760761634048214">儲存信用卡</translation>
 <translation id="8438328416656800239">改用智慧瀏覽器</translation>
 <translation id="8438566539970814960">改善搜尋和瀏覽體驗</translation>
@@ -4814,6 +4836,7 @@
 <translation id="8465252176946159372">無效</translation>
 <translation id="8465444703385715657">需要你的授權才能執行「<ph name="PLUGIN_NAME" />」</translation>
 <translation id="8466234950814670489">Tar 封存</translation>
+<translation id="8466417995783206254">這個分頁正在使用子母畫面模式播放影片。</translation>
 <translation id="8468750959626135884">使用 Android 手機解鎖您的 <ph name="DEVICE_TYPE" />。</translation>
 <translation id="8470028084415844044">如要將密碼同步到所有裝置,請開啟同步處理功能。</translation>
 <translation id="8470513973197838199">已儲存 <ph name="ORIGIN" /> 的密碼</translation>
@@ -4834,6 +4857,7 @@
 <translation id="8496717697661868878">執行這個外掛程式</translation>
 <translation id="8497219075884839166">Windows 公用程式</translation>
 <translation id="8498214519255567734">讓你在光線昏暗的環境下更容易看清畫面內容或閱讀文字</translation>
+<translation id="8498395510292172881">在 Chrome 中繼續閱讀</translation>
 <translation id="8503813439785031346">使用者名稱</translation>
 <translation id="850875081535031620">未發現有害軟體</translation>
 <translation id="8509646642152301857">拼字檢查字典下載失敗。</translation>
@@ -4984,7 +5008,6 @@
 <translation id="8725066075913043281">再試一次</translation>
 <translation id="8725178340343806893">我的收藏/書籤</translation>
 <translation id="8726206820263995930">從伺服器擷取政策設定時發生錯誤:<ph name="CLIENT_ERROR" />。</translation>
-<translation id="8727142376512517020">不要再顯示這個對話方塊</translation>
 <translation id="8727344521467137076">在你的電腦上發現有害軟體。Chrome 正在進行移除,並且會還原相關設定,讓你的瀏覽器恢復正常運作。</translation>
 <translation id="8730621377337864115">完成</translation>
 <translation id="8732030010853991079">按一下這個圖示,即可使用這項擴充功能。</translation>
@@ -5175,6 +5198,7 @@
 <translation id="9027459031423301635">在新分頁中開啟連結(T)</translation>
 <translation id="9030515284705930323">貴機構尚未為您的帳戶啟用 Google Play 商店。如需瞭解詳情,請與您的管理員聯絡。</translation>
 <translation id="9033857511263905942">貼上(&amp;P)</translation>
+<translation id="9034924485347205037">Linux 檔案</translation>
 <translation id="9035012421917565900">這些項目無法移回「<ph name="DESTINATION_NAME" />」,因此無法復原這項操作。</translation>
 <translation id="9037008143807155145">https://www.google.com/calendar/render?cid=%s</translation>
 <translation id="9037965129289936994">顯示原文</translation>
@@ -5275,6 +5299,7 @@
 <translation id="9173995187295789444">正在掃描藍牙裝置…</translation>
 <translation id="9176611096776448349"><ph name="WINDOW_TITLE" /> - 已連上藍牙裝置</translation>
 <translation id="9177499212658576372">你目前已連線至<ph name="NETWORK_TYPE" />網路。</translation>
+<translation id="9179734824669616955">在 <ph name="DEVICE_TYPE" /> 上設定 Linux (測試版)</translation>
 <translation id="9180281769944411366">正在啟動 Linux 容器,過程可能需要幾分鐘。</translation>
 <translation id="9180380851667544951">網站可以分享你的螢幕畫面</translation>
 <translation id="9188441292293901223">你必須將手機更新至較新的 Android 版本,才能為這台 <ph name="DEVICE_TYPE" /> 解鎖。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb
index 5c7d0b8..d3963e7 100644
--- a/chrome/app/resources/google_chrome_strings_am.xtb
+++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome ድር ላይ ያለ ስልክ ቁጥር ጠቅ እንዲያደርጉት እና በSkype እንዲደውሉለት ያስችልዎታል!</translation>
 <translation id="4567424176335768812">እንደ <ph name="USER_EMAIL_ADDRESS" /> ሆነው ገብተዋል። አሁን የእርስዎን ዕልባቶች፣ ታሪክ እና ሌሎች ቅንብሮች በመለያ በገቡ ሁሉም መሣሪያዎችዎ ላይ መድረስ ይችላሉ።</translation>
 <translation id="4571503333518166079">ወደ Chrome ማሳወቂያ ቅንብሮች ይሂዱ</translation>
+<translation id="459622048091363950">አንዴ Chrome መዳረሻ ከኖረው በኋላ ድር ጣቢያዎች እርስዎን መዳረሻ መጠየቅ ይችላሉ።</translation>
 <translation id="4600710005438004015">Chrome ወደ የቅርብ ጊዜው ስሪት ሊዘመን አልቻለም፣ ስለዚህ አዲስ ባህሪያት እና የደህንነት ማስተካከያዎች እያመለጠዎት ነው።</translation>
 <translation id="4631713731678262610">በChrome ምናሌ ውስጥ ደብቅ</translation>
 <translation id="4633000520311261472">Chrome ይበልጥ ደህንነቱ የተጠበቀ እንዲሆን ለማድረግ፣ በ<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ውስጥ ያልተጠቀሱ እና እርስዎ ሳያውቋቸው የታከሉ ሊሆኑ የሚችሉ የተወሰኑ ዝርዝሮችን አሰናክለናል።</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb
index c6af8710..b09182f 100644
--- a/chrome/app/resources/google_chrome_strings_bg.xtb
+++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Google Chrome ви позволява да кликнете върху телефонен номер в мрежата и да се обадите до него със Skype!</translation>
 <translation id="4567424176335768812">Влезли сте като <ph name="USER_EMAIL_ADDRESS" />. Сега имате достъп до отметките, историята и другите си настройки на всички устройства, на които сте влезли.</translation>
 <translation id="4571503333518166079">Към настройките за известия в Chrome</translation>
+<translation id="459622048091363950">След като Chrome получи достъп, уебсайтовете ще могат да искат достъп от вас.</translation>
 <translation id="4600710005438004015">Chrome не можа да се актуализира до най-новата версия. Това означава, че пропускате нови функции и корекции за сигурност.</translation>
 <translation id="4631713731678262610">Скриване в менюто на Chrome</translation>
 <translation id="4633000520311261472">За да направим Chrome по-безопасен, деактивирахме някои разширения, които не са посочени в <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и може да са били добавени без ваше знание.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb
index f75af9f..83c2dc7 100644
--- a/chrome/app/resources/google_chrome_strings_ca.xtb
+++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome us permet fer clic en un número de telèfon al web i trucar-hi amb Skype!</translation>
 <translation id="4567424176335768812">Heu iniciat la sessió com a <ph name="USER_EMAIL_ADDRESS" />. Ja podeu accedir a les vostres adreces d'interès, al vostre historial i a altres paràmetres en tots els dispositius en què hàgiu iniciat la sessió.</translation>
 <translation id="4571503333518166079">Ves a la configuració de notificacions de Chrome</translation>
+<translation id="459622048091363950">Un cop Chrome tingui accés, els llocs web et podran demanar accés.</translation>
 <translation id="4600710005438004015">Chrome no s'ha pogut actualitzar a la darrera versió, així que no pots gaudir de les funcions noves ni de les correccions de seguretat.</translation>
 <translation id="4631713731678262610">Amaga al menú de Chrome</translation>
 <translation id="4633000520311261472">Perquè Chrome sigui més segur, hem desactivat algunes de les extensions que no apareixen a <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i que és possible que s'hagin afegit sense que ho sapigueu.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb
index 3313ef71..590d179 100644
--- a/chrome/app/resources/google_chrome_strings_cs.xtb
+++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome umožňuje kliknout na telefonní číslo na webu a volat na něj prostřednictvím aplikace Skype.</translation>
 <translation id="4567424176335768812">Jste přihlášeni pomocí účtu <ph name="USER_EMAIL_ADDRESS" />. Nyní můžete přistupovat ke všem svým záložkám, historii a dalším nastavením ve všech přihlášených zařízeních.</translation>
 <translation id="4571503333518166079">Přejít na nastavení oznámení prohlížeče Chrome</translation>
+<translation id="459622048091363950">Až bude mít Chrome přístup, budou vás weby moci požádat o přístup.</translation>
 <translation id="4600710005438004015">Chrome nebylo možné aktualizovat na nejnovější verzi. Nemáte proto k dispozici nové funkce a opravy zabezpečení.</translation>
 <translation id="4631713731678262610">Skrýt v nabídce Chrome</translation>
 <translation id="4633000520311261472">Aby byl Chrome bezpečnější, deaktivovali jsme některá rozšíření, která nejsou uvedena na webu <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohla být přidána bez vašeho vědomí.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb
index 03ed5722..52e66d7 100644
--- a/chrome/app/resources/google_chrome_strings_da.xtb
+++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Med Google Chrome kan du klikke på et telefonnummer på nettet og ringe op til det via Skype!</translation>
 <translation id="4567424176335768812">Du er logget ind som <ph name="USER_EMAIL_ADDRESS" />. Nu kan du få adgang til dine bogmærker, din historik og andre indstillinger på alle de enheder, hvor du er logget ind.</translation>
 <translation id="4571503333518166079">Gå til indstillinger for Chrome-underretninger</translation>
+<translation id="459622048091363950">Når Chrome har adgang, kan websites bede dig om adgang.</translation>
 <translation id="4600710005438004015">Chrome kunne ikke opdateres til den nyeste version, så du går glip af nye funktioner og sikkerhedsrettelser.</translation>
 <translation id="4631713731678262610">Skjul i Chrome-menuen</translation>
 <translation id="4633000520311261472">For at gøre Chrome sikrere har vi slået nogle udvidelser fra, som ikke er anført i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> og muligvis er blevet tilføjet, uden at du vidste det.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb
index 600845c9..da8be3f 100644
--- a/chrome/app/resources/google_chrome_strings_de.xtb
+++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">In Google Chrome können Sie auf eine Telefonnummer im Web klicken und diese mit Skype anrufen.</translation>
 <translation id="4567424176335768812">Sie sind als <ph name="USER_EMAIL_ADDRESS" /> angemeldet. Auf allen Geräten, auf denen Sie angemeldet sind, sind nun Ihre Lesezeichen, Ihr Verlauf und andere Einstellungen verfügbar.</translation>
 <translation id="4571503333518166079">Chrome-Benachrichtigungseinstellungen aufrufen</translation>
+<translation id="459622048091363950">Sobald Chrome Zugriff hat, können Websites Sie um Zugriff bitten.</translation>
 <translation id="4600710005438004015">Chrome konnte nicht auf die neueste Version aktualisiert werden. In Ihrer Version fehlen daher einige neue Funktionen und Sicherheitspatches.</translation>
 <translation id="4631713731678262610">Ins Chrome-Menü verschieben</translation>
 <translation id="4633000520311261472">Um Chrome sicherer zu machen, haben wir einige Erweiterungen deaktiviert, die nicht im <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> aufgeführt sind und möglicherweise ohne Ihr Wissen hinzugefügt wurden.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb
index c29ee57..7f66b827 100644
--- a/chrome/app/resources/google_chrome_strings_el.xtb
+++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Το Google Chrome σάς επιτρέπει να κάνετε κλικ σε έναν τηλεφωνικό αριθμό στον ιστό και να τον καλέσετε με το Skype!</translation>
 <translation id="4567424176335768812">Έχετε συνδεθεί ως <ph name="USER_EMAIL_ADDRESS" />. Τώρα μπορείτε να αποκτήσετε πρόσβαση στους σελιδοδείκτες, το ιστορικό και σε άλλες ρυθμίσεις από όλες τις συσκευές στις οποίες έχετε συνδεθεί.</translation>
 <translation id="4571503333518166079">Μετάβαση στις ρυθμίσεις ειδοποιήσεων του Chrome</translation>
+<translation id="459622048091363950">Όταν το Chrome αποκτήσει πρόσβαση, οι ιστότοποι θα μπορούν να σας ζητήσουν πρόσβαση.</translation>
 <translation id="4600710005438004015">Δεν ήταν δυνατή η ενημέρωση του Chrome στην πιο πρόσφατη έκδοση και έτσι δεν θα έχετε πρόσβαση στις νέες λειτουργίες και στις επιδιορθώσεις ασφαλείας.</translation>
 <translation id="4631713731678262610">Απόκρυψη από το μενού του Chrome</translation>
 <translation id="4633000520311261472">Για να κάνουμε το Chrome πιο ασφαλές, απενεργοποιήσαμε ορισμένες επεκτάσεις που δεν αναφέρονται στο <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> και ενδέχεται να έχουν προστεθεί εν αγνοία σας.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb
index ea6be7a0..3cf03ce 100644
--- a/chrome/app/resources/google_chrome_strings_es.xtb
+++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome te permite hacer clic en un número de teléfono en la Web y llamar mediante Skype.</translation>
 <translation id="4567424176335768812">Has iniciado sesión como <ph name="USER_EMAIL_ADDRESS" />. Ahora puedes acceder a tus marcadores, a tu historial y a otras opciones en todos los dispositivos en los que hayas iniciado sesión.</translation>
 <translation id="4571503333518166079">Ir a los ajustes de notificaciones de Chrome</translation>
+<translation id="459622048091363950">Una vez que Chrome tenga acceso, los sitios web podrán solicitarlo también.</translation>
 <translation id="4600710005438004015">No se ha podido actualizar Chrome a la versión más reciente, por lo que no disfrutas de las últimas funciones y correcciones de seguridad.</translation>
 <translation id="4631713731678262610">Ocultar en el menú de Chrome</translation>
 <translation id="4633000520311261472">Para aumentar la seguridad de Chrome, hemos inhabilitado algunas extensiones que no figuran en <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> y que podrían haberse añadido sin tu conocimiento.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb
index 2499312..7c58b50 100644
--- a/chrome/app/resources/google_chrome_strings_et.xtb
+++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Google Chrome võimaldab teil veebis telefoninumbril klõpsata ja sellele Skype'i abil helistada!</translation>
 <translation id="4567424176335768812">Olete sisse logitud aadressiga <ph name="USER_EMAIL_ADDRESS" />. Nüüd on teil juurdepääs oma järjehoidjatele, ajaloole ja muudele seadetele kõigis seadmetes, kuhu olete sisse logitud.</translation>
 <translation id="4571503333518166079">Ava Chrome'i märguandeseaded</translation>
+<translation id="459622048091363950">Kui annate Chrome'ile juurdepääsu, saavad veebisaidid küsida teilt juurdepääsuluba.</translation>
 <translation id="4600710005438004015">Chrome'i ei saanud uusimale versioonile värskendada, mistõttu jääte ilma uutest funktsioonidest ja turvaparandustest.</translation>
 <translation id="4631713731678262610">Chrome'i menüüs peitmine</translation>
 <translation id="4633000520311261472">Chrome'i turvalisemaks muutmiseks keelasime mõned laiendused, mida ei leidu veebipoes <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja mille lisamisest te ei pruugi teadlik olla.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb
index ad926b29..abf70c4 100644
--- a/chrome/app/resources/google_chrome_strings_fa.xtb
+++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">‏Google Chrome به شما اجازه می‌دهد بر روی شماره تلفن روی وب کلیک کرده و از طریق Skype تماس بگیرید!</translation>
 <translation id="4567424176335768812">با حساب <ph name="USER_EMAIL_ADDRESS" /> وارد سیستم شده‌اید. اکنون در همه دستگاه‌هایی که با آنها به سیستم وارد شده‌اید می‌توانید به نشانک‌ها، سابقه و دیگر تنظیماتتان دسترسی داشته باشید.</translation>
 <translation id="4571503333518166079">‏رفتن به تنظیمات اعلان Chrome</translation>
+<translation id="459622048091363950">‏وقتی Chrome دسترسی داشته باشد، وب‌سایت‌ها می‌توانند مجوز دسترسی درخواست کنند.</translation>
 <translation id="4600710005438004015">‏Chrome به جدیدترین نسخه به‌روزرسانی نشد، بنابراین قابلیت‌های جدید و رفع اشکال‌های امنیتی را ندارید.</translation>
 <translation id="4631713731678262610">‏پنهان در منوی Chrome</translation>
 <translation id="4633000520311261472">‏برای ایمن‌تر کردن Chrome، برخی از افزونه‌هایی را که در<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> فهرست نشده‌اند و ممکن است بدون اطلاع شما اضافه شده باشند، غیرفعال کردیم.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb
index 79db8c0..86f373f 100644
--- a/chrome/app/resources/google_chrome_strings_fi.xtb
+++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">Google Chromen avulla voit klikata puhelinnumeroa verkossa ja soittaa siihen Skypellä!</translation>
 <translation id="4567424176335768812">Olet kirjautunut Chromeen tilillä <ph name="USER_EMAIL_ADDRESS" />. Nyt voit käyttää kirjanmerkkejäsi, historiaa ja muita asetuksia kaikilla laitteilla, joihin olet kirjautunut.</translation>
 <translation id="4571503333518166079">Siirry Chromen ilmoitusasetuksiin</translation>
+<translation id="459622048091363950">Kun Chromella on käyttöoikeus, sivustot voivat pyytää sitä sinulta.</translation>
 <translation id="4600710005438004015">Chromea ei voitu päivittää uusimpaan versioon, joten sinulta puuttuu joitakin uusia ominaisuuksia ja tietoturvakorjauksia.</translation>
 <translation id="4631713731678262610">Piilota Chrome-valikossa</translation>
 <translation id="4633000520311261472">Paransimme Chromen turvallisuutta poistamalla käytöstä sovelluksia, joita ei löydy kohteesta <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ja jotka on voitu lisätä ilman lupaasi.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb
index 066ccf88..9dd1349 100644
--- a/chrome/app/resources/google_chrome_strings_fil.xtb
+++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Pinapayagan ka ng Google Chrome na mag-click sa isang numero ng telepono sa web at tawagan ito gamit ang Skype!</translation>
 <translation id="4567424176335768812">Naka-sign in ka bilang <ph name="USER_EMAIL_ADDRESS" />. Maaari mo na ngayong i-access ang iyong mga bookmark, kasaysayan, at iba pang setting sa lahat ng iyong device na naka-sign in.</translation>
 <translation id="4571503333518166079">Pumunta sa mga setting ng notification ng Chrome</translation>
+<translation id="459622048091363950">Kapag mayroon nang access ang Chrome, makakahingi na ang mga website ng access sa iyo.</translation>
 <translation id="4600710005438004015">Hindi ma-update ang Chrome sa pinakabagong bersyon, kaya hindi mo magagamit ang mga bagong feature at pag-aayos sa seguridad.</translation>
 <translation id="4631713731678262610">Itago sa menu ng Chrome</translation>
 <translation id="4633000520311261472">Upang gawing mas ligtas ang Chrome, nag-disable kami ng ilang extension na hindi nakalista sa <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> at maaaring naidagdag nang hindi mo nalalaman.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb
index 7af9ed1..6b9312f 100644
--- a/chrome/app/resources/google_chrome_strings_fr.xtb
+++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Avec Google Chrome, cliquez sur un numéro de téléphone sur le Web et appelez-le dans Skype !</translation>
 <translation id="4567424176335768812">Vous êtes connecté avec l'adresse e-mail <ph name="USER_EMAIL_ADDRESS" />. Vous pouvez maintenant accéder à vos favoris, à l'historique et aux autres paramètres sur tous les appareils sur lesquels vous êtes connecté.</translation>
 <translation id="4571503333518166079">Accéder aux paramètres de notification de Chrome</translation>
+<translation id="459622048091363950">Une fois l'accès à une ressource accordé à Chrome, les sites Web sont également en mesure de vous demander l'accès.</translation>
 <translation id="4600710005438004015">Échec de l'installation de la dernière version de Chrome. Vous ne disposez donc pas des nouvelles fonctionnalités, ni des correctifs de sécurité.</translation>
 <translation id="4631713731678262610">Masquer dans le menu Chrome</translation>
 <translation id="4633000520311261472">Afin de rendre Chrome plus sûr, nous avons désactivé certaines extensions qui ne sont pas répertoriées sur le <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> et qui ont pu être ajoutées à votre insu.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb
index 6bfa092..efe401f 100644
--- a/chrome/app/resources/google_chrome_strings_gu.xtb
+++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome થી તમે વેબ પર એક ફોન નંબર પર ક્લિક કરી શકો છો અને તેને Skype થી કૉલ કરી શકો છો!</translation>
 <translation id="4567424176335768812">તમે <ph name="USER_EMAIL_ADDRESS" /> તરીકે સાઇન ઇન છો. હવે તમે તમારા બધા સાઇન ઇન કરેલા ઉપકરણો પર તમારા બુકમાર્ક્સ, ઇતિહાસ અને અન્ય સેટિંગ્સને ઍક્સેસ કરી શકો છો.</translation>
 <translation id="4571503333518166079">Chromeની નોટિફિકેશનની સેટિંગ પર જાઓ</translation>
+<translation id="459622048091363950">એકવાર Chromeને ઍક્સેસ મળે, તે પછી વેબસાઇટ તમારી પાસે ઍક્સેસ માગી શકશે.</translation>
 <translation id="4600710005438004015">Chrome નવીનતમ વર્ઝન પર અપડેટ ન થઈ શક્યું, તેથી તમે નવી સુવિધાઓ અને સુરક્ષાના સુધારા ચૂકી રહ્યા છો.</translation>
 <translation id="4631713731678262610">Chrome મેનૂમાં છુપાવો</translation>
 <translation id="4633000520311261472">Chrome ને સુરક્ષિત બનાવવા માટે, અમે <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> માં સૂચિબદ્ધ નથી અને તમારી જાણ વિના ઉમેરવામાં આવ્યાં હોઈ શકે છે તેવા કેટલાક એક્સ્ટેન્શન્સને અક્ષમ કર્યા છે.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb
index 534c9b70..b144f81b 100644
--- a/chrome/app/resources/google_chrome_strings_hi.xtb
+++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome आपको वेब पर फ़ोन नंबर क्लिक करने और उसे Skype से कॉल करने की सुविधा देता है!</translation>
 <translation id="4567424176335768812">आपने <ph name="USER_EMAIL_ADDRESS" /> के रूप में प्रवेश किया हुआ है. अब आप अपने सभी प्रवेश किए हुए डिवाइस पर अपने बुकमार्क, इतिहास, और अन्य सेटिंग की एक्सेस कर सकेंगे.</translation>
 <translation id="4571503333518166079">Chrome की सूचना सेटिंग पर जाएं</translation>
+<translation id="459622048091363950">Chrome को एक्सेस मिलने के बाद, वेबसाइटें आपसे एक्सेस मांग सकेंगी.</translation>
 <translation id="4600710005438004015">Chrome सबसे नए वर्शन में अपडेट नहीं कर सका, इसलिए आपको नई सुविधाएं और सुरक्षा सुधार नहीं मिल रहे हैं.</translation>
 <translation id="4631713731678262610">Chrome मेनू में छिपाएं</translation>
 <translation id="4633000520311261472">Chrome को अधिक सुरक्षित बनाने के लिए, हमने ऐसे कुछ एक्सटेंशन अक्षम कर दिए हैं जो <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> में सूचीबद्ध नहीं हैं और आपकी जानकारी के बिना जोड़े गए हो सकते हैं.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb
index 3e52d78c..9de18fa 100644
--- a/chrome/app/resources/google_chrome_strings_hr.xtb
+++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome omogućuje da kliknete telefonski broj na webu i nazovete ga koristeći se Skypeom!</translation>
 <translation id="4567424176335768812">Prijavljeni ste kao <ph name="USER_EMAIL_ADDRESS" />. Sada možete pristupiti svojim oznakama, povijesti i drugim postavkama na svim uređajima na kojima se prijavljujete.</translation>
 <translation id="4571503333518166079">Otvori postavke obavijesti za Chrome</translation>
+<translation id="459622048091363950">Kada Chrome dobije pristup, web-lokacije će vas moći tražiti pristup.</translation>
 <translation id="4600710005438004015">Chrome se nije mogao ažurirati na najnoviju verziju, tako da nemate nove značajke i sigurnosne popravke.</translation>
 <translation id="4631713731678262610">Sakrij u izborniku Chromea</translation>
 <translation id="4633000520311261472">Kako bismo Chrome učinili sigurnijim, onemogućili smo neka proširenja koja nisu navedena u trgovini <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> i možda su dodana bez vašeg znanja.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb
index b18c2c2..dfd478f 100644
--- a/chrome/app/resources/google_chrome_strings_hu.xtb
+++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">A Google Chrome egyetlen kattintással lehetővé teszi a weboldalakon található telefonszámok felhívását Skype-pal!</translation>
 <translation id="4567424176335768812">A(z) <ph name="USER_EMAIL_ADDRESS" /> címmel van bejelentkezve. Elérheti könyvjelzőit, előzményeit és más beállításait minden olyan eszközön, amelyen bejelentkezett.</translation>
 <translation id="4571503333518166079">A Chrome értesítési beállításainak megnyitása</translation>
+<translation id="459622048091363950">Miután hozzáférést biztosított a Chrome-nak, a webhelyek is hozzáférést kérhetnek.</translation>
 <translation id="4600710005438004015">Nem sikerült a Chrome frissítése a legújabb verzióra, így Ön lemarad az új funkciókról és biztonsági javításokról.</translation>
 <translation id="4631713731678262610">Elrejtés a Chrome-menüben</translation>
 <translation id="4633000520311261472">A Chrome biztonságosabbá tétele érdekében kikapcsoltunk néhány bővítményt, amelyek nem a(z) <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> szolgáltatásból származnak, és előfordulhat, hogy az Ön tudta nélkül lettek telepítve.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb
index 2cbbc00..a0b8cb8 100644
--- a/chrome/app/resources/google_chrome_strings_id.xtb
+++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome memungkinkan Anda mengeklik nomor telepon pada web dan menghubunginya melalui Skype!</translation>
 <translation id="4567424176335768812">Anda masuk sebagai <ph name="USER_EMAIL_ADDRESS" />. Kini Anda dapat mengakses bookmark, histori, dan setelan lainnya pada seluruh perangkat yang Anda masuki.</translation>
 <translation id="4571503333518166079">Buka setelan notifikasi Chrome</translation>
+<translation id="459622048091363950">Setelah Chrome memiliki akses, situs dapat meminta akses dari Anda.</translation>
 <translation id="4600710005438004015">Chrome tidak dapat diupdate ke versi terbaru, sehingga Anda tidak mendapatkan perbaikan keamanan dan fitur baru.</translation>
 <translation id="4631713731678262610">Sembunyikan di menu Chrome</translation>
 <translation id="4633000520311261472">Agar Chrome lebih aman, kami menonaktifkan beberapa ekstensi yang tidak tercantum pada <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa sepengetahuan Anda.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb
index 85cd7e6..c016fac4 100644
--- a/chrome/app/resources/google_chrome_strings_it.xtb
+++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">Google Chrome ti permette di scegliere un numero di telefono sul Web e di chiamarlo con Skype.</translation>
 <translation id="4567424176335768812">Hai eseguito l'accesso come <ph name="USER_EMAIL_ADDRESS" />. Ora puoi accedere ai tuoi Preferiti, alla tua cronologia e ad altre impostazioni su tutti i tuoi dispositivi su cui esegui l'accesso.</translation>
 <translation id="4571503333518166079">Vai alle impostazioni di notifica di Chrome</translation>
+<translation id="459622048091363950">Dopo che Chrome avrà ottenuto l'accesso, i siti web potranno chiederti l'accesso.</translation>
 <translation id="4600710005438004015">Non è stato possibile aggiornare Chrome alla versione più recente, quindi non potrai utilizzare le nuove funzioni e gli aggiornamenti di sicurezza.</translation>
 <translation id="4631713731678262610">Nascondi in menu Chrome</translation>
 <translation id="4633000520311261472">Per rendere Chrome più sicuro, abbiamo disattivato alcune estensioni che non sono elencate nel <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e potrebbero essere state aggiunte a tua insaputa.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb
index 9fa596f..7db24e5 100644
--- a/chrome/app/resources/google_chrome_strings_iw.xtb
+++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">‏Google Chrome מאפשר לך ללחוץ על מספר טלפון באינטרנט ולהתקשר אליו באמצעות Skype!</translation>
 <translation id="4567424176335768812">נכנסת למערכת בתור <ph name="USER_EMAIL_ADDRESS" />. כעת אתה יכול לגשת אל הסימניות, ההיסטוריה והגדרות אחרות שלך בכל המכשירים שבהם אתה מחובר לחשבון.</translation>
 <translation id="4571503333518166079">‏מעבר אל הגדרות של הודעות ב-Chrome</translation>
+<translation id="459622048091363950">‏אחרי מתן גישה ל-Chrome, אתרים יוכלו לבקש ממך גישה.</translation>
 <translation id="4600710005438004015">‏עדכון Chrome לגירסה האחרונה לא הצליח, ולכן אין לך גישה אל תכונות חדשות ותיקוני אבטחה.</translation>
 <translation id="4631713731678262610">‏הסתר בתפריט Chrome</translation>
 <translation id="4633000520311261472">‏כדי לשפר את האבטחה של Chrome, השבתנו חלק מהתוספים שלא רשומים ב<ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> וייתכן שנוספו ללא ידיעתך.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb
index 1d5dab3..9ac7a54 100644
--- a/chrome/app/resources/google_chrome_strings_ja.xtb
+++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome では、ウェブサイト上の電話番号をクリックするだけで Skype で通話を発信できます。</translation>
 <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> としてログインしています。ログインしているすべてのデバイスで、ブックマーク、履歴、その他の設定にアクセスできます。</translation>
 <translation id="4571503333518166079">Chrome の通知設定に移動</translation>
+<translation id="459622048091363950">Chrome にアクセスを許可すると、ウェブサイトからアクセスをリクエストできるようになります。</translation>
 <translation id="4600710005438004015">Chrome を最新版に更新できませんでした。新しい機能とセキュリティ修正は適用されていません。</translation>
 <translation id="4631713731678262610">Chrome メニューで非表示</translation>
 <translation id="4633000520311261472">Chrome をより安全にご利用いただくため、<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />で提供していない一部の拡張機能を無効にしました。これらは知らないうちに追加された可能性があります。</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb
index f83ec36..2774a238 100644
--- a/chrome/app/resources/google_chrome_strings_kn.xtb
+++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Google Chrome ನೀವು ವೆಬ್‌ನಲ್ಲಿ ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಲು ಅವಕಾಶ ಮಾಡುತ್ತದೆ ಮತ್ತು Skype ನೊಂದಿಗೆ ಕರೆ ಮಾಡುತ್ತದೆ!</translation>
 <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> ನಂತೆ ಸೈನ್ ಇನ್ ಮಾಡಿರುವಿರಿ. ನೀವು ಇದೀಗ ನಿಮ್ಮ ಎಲ್ಲಾ ಸೈನ್ ಇನ್ ಮಾಡಿರುವ ಸಾಧನಗಳಲ್ಲಿ ನಿಮ್ಮ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು, ಇತಿಹಾಸ ಮತ್ತು ಇತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಬಹುದು.</translation>
 <translation id="4571503333518166079">Chrome ಅಧಿಸೂಚನೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ಹೋಗಿ</translation>
+<translation id="459622048091363950">Chrome ಒಮ್ಮೆ ಪ್ರವೇಶವನ್ನು ಪಡೆದ ಬಳಿಕ, ವೆಬ್‌ಸೈಟ್‌ಗಳು ಪ್ರವೇಶಕ್ಕಾಗಿ ನಿಮ್ಮನ್ನು ಕೇಳಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="4600710005438004015">Chrome ಗೆ ಇತ್ತೀಚಿನ ಆವೃತ್ತಿಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ, ಆದ್ದರಿಂದಾಗಿ ನೀವು ಹೊಸ ವೈಶಿಷ್ಟ್ಯಗಳು ಮತ್ತು ಭದ್ರತೆ ಸರಿಪಡಿಸುವಿಕೆಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತಿರಬಹುದು.</translation>
 <translation id="4631713731678262610">Chrome ಮೆನುವಿನಲ್ಲಿ ಮರೆಮಾಡು</translation>
 <translation id="4633000520311261472">Chrome ಸುರಕ್ಷಿತವಾಗಿರಿಸುವಂತೆ ಮಾಡಲು, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> ನಲ್ಲಿ ಪಟ್ಟಿ ಮಾಡಲಾದ ಕೆಲವು ವಿಸ್ತರಣೆಗಳನ್ನು ನಾವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದೇವೆ ಮತ್ತು ಅವುಗಳನ್ನು ನಿಮ್ಮ ಅರಿವಿಲ್ಲದೆ ಸೇರಿಸಿರಬಹುದು.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb
index b6799b1..a32862a 100644
--- a/chrome/app/resources/google_chrome_strings_lt.xtb
+++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -137,6 +137,7 @@
 <translation id="4561051373932531560">Naudodami „Google Chrome“ galite spustelėti telefono numerį žiniatinklyje ir skambinti juo naudodami „Skype“!</translation>
 <translation id="4567424176335768812">Esate prisijungę kaip <ph name="USER_EMAIL_ADDRESS" />. Dabar galite pasiekti savo žymes, istoriją ir kitus nustatymus visuose įrenginiuose, kuriuose esate prisijungę.</translation>
 <translation id="4571503333518166079">Eiti į „Chrome“ pranešimų nustatymus</translation>
+<translation id="459622048091363950">Kai „Chrome“ galės pasiekti duomenis, svetainės taip pat galės prašyti suteikti leidimą juos pasiekti.</translation>
 <translation id="4600710005438004015">Nepavyko atnaujinti „Chrome“ į naujausią versiją, todėl nebus pasiekiamos naujos funkcijos ir saugos pataisos.</translation>
 <translation id="4631713731678262610">Paslėpti „Chrome“ meniu elementą</translation>
 <translation id="4633000520311261472">Kad „Chrome“ padarytume saugesnę, išjungėme kai kuriuos plėtinius, kurių nėra „<ph name="IDS_EXTENSION_WEB_STORE_TITLE" />“ sąraše ir kurie galėjo būti pridėti be jūsų žinios.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb
index 9f26c259..5b2ccbe 100644
--- a/chrome/app/resources/google_chrome_strings_lv.xtb
+++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Google Chrome ļauj jums noklikšķināt uz tālruņa numura un zvanīt ar to pakalpojumā Skype!</translation>
 <translation id="4567424176335768812">Jūs esat pierakstījies kā <ph name="USER_EMAIL_ADDRESS" />. Tagad varat piekļūt savām grāmatzīmēm, vēsturei un citiem iestatījumiem visās ierīcēs, kurās esat pierakstījies.</translation>
 <translation id="4571503333518166079">Pāriet uz Chrome paziņojumu iestatījumiem</translation>
+<translation id="459622048091363950">Tiklīdz pārlūkam Chrome tiks sniegta piekļuve, vietnes varēs lūgt jums piekļuvi.</translation>
 <translation id="4600710005438004015">Nevarēja atjaunināt uz jaunāko Chrome versiju, tādēļ jūs nevarēsiet piekļūt jaunākajām funkcijām un drošības labojumiem.</translation>
 <translation id="4631713731678262610">Paslēpt Chrome izvēlnē</translation>
 <translation id="4633000520311261472">Lai uzlabotu Chrome drošību, mēs atspējojām dažus paplašinājumus, kas nav norādīti vietnē <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> un, iespējams, tika pievienoti, jums nezinot.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb
index e4e5ce1..358679be 100644
--- a/chrome/app/resources/google_chrome_strings_ml.xtb
+++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">വെബ്ബിലുള്ള ഒരു ഫോണ്‍ നമ്പരില്‍ ക്ലിക്കുചെയ്യുവാനും Skype ഉപയോഗിച്ച് വിളിക്കുവാനും Google Chrome നിങ്ങളെ അനുവദിക്കുന്നു!</translation>
 <translation id="4567424176335768812">നിങ്ങൾ <ph name="USER_EMAIL_ADDRESS" /> ആയി സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്നു. സൈൻ ഇൻ ചെയ്‌തിരിക്കുന്ന എല്ലാ ഉപകരണങ്ങളിലും ബുക്ക്‌മാർക്കുകളും ചരിത്രവും മറ്റ് ക്രമീകരണങ്ങളും ആക്‌സസ്സുചെയ്യാൻ ഇപ്പോൾ നിങ്ങൾക്കാകും.</translation>
 <translation id="4571503333518166079">Chrome അറിയിപ്പ് ക്രമീകരണത്തിലേക്ക് പോവുക</translation>
+<translation id="459622048091363950">Chrome-ന് ആക്‌സസ് ലഭിച്ചുകഴിഞ്ഞാൽ, വെബ്‌സൈറ്റുകൾക്ക് നിങ്ങളോട് ആക്‌സസ് ചോദിക്കാനാകും.</translation>
 <translation id="4600710005438004015">ഏറ്റവും പുതിയ പതിപ്പിലേക്ക് Chrome അപ്‌ഡേറ്റ് ചെയ്യാനായില്ല, അതിനാൽ പുതിയ ഫീച്ചറുകളും സുരക്ഷാ പരിഹാരങ്ങളും നിങ്ങൾക്ക് ലഭിക്കുന്നില്ല.</translation>
 <translation id="4631713731678262610">Chrome മെനുവിൽ മറയ്‌ക്കുക</translation>
 <translation id="4633000520311261472">Chrome സുരക്ഷിതമാക്കുന്നതിന്, <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> എന്നതിൽ ലിസ്റ്റുചെയ്യാത്ത ചില വിപുലീകരണങ്ങൾ ഞങ്ങൾ പ്രവർത്തനരഹിതമാക്കി, അവ നിങ്ങളുടെ അറിവില്ലാതെ ചേർത്തിരിക്കാനിടയുണ്ട്.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb
index 56aeb3f..0ee00a7 100644
--- a/chrome/app/resources/google_chrome_strings_mr.xtb
+++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Google Chrome आपल्याला वेबवरील फोन नंबर क्लिक करू देते आणि त्या नंबरवर Skype द्वारा कॉल करू देते!</translation>
 <translation id="4567424176335768812">आपण <ph name="USER_EMAIL_ADDRESS" /> म्हणून साइन इन केले आहे. आता आपण आपल्या सर्व साइन इन केलेल्या डिव्हाइसेसवरील आपल्या बुकमार्क, इतिहास आणि अन्य सेटिंग्जवर प्रवेश करू शकता.</translation>
 <translation id="4571503333518166079">Chrome सूचना सेटिंग्जवर जा</translation>
+<translation id="459622048091363950">एकदा का Chrome ला अॅक्सेस मिळाला की, वेबसाइट तुम्हाला अॅक्सेससाठी विचारतील.</translation>
 <translation id="4600710005438004015">Chrome नवीनतम आवृत्तीवर अपडेट होऊ शकले नाही, त्यामुळे तुम्ही नवीन वैशिष्ट्ये आणि सुरक्षितता निराकरणे गमावत आहात.</translation>
 <translation id="4631713731678262610">Chrome मेनूमध्‍ये लपवा</translation>
 <translation id="4633000520311261472">Chrome ला अधिक सुरक्षित करण्यासाठी, आम्ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्ये सूचीबद्ध नसलेले काही विस्तार अक्षम केले आणि ते कदाचित आपल्या माहिती शिवाय जोडले गेले असावेत.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb
index 6b0b28fa..65e59ec 100644
--- a/chrome/app/resources/google_chrome_strings_ms.xtb
+++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome membolehkan anda mengklik nombor telefon pada web dan menghubunginya dengan Skype!</translation>
 <translation id="4567424176335768812">Anda telah log masuk sebagai <ph name="USER_EMAIL_ADDRESS" />. Sekarang anda boleh mengakses penanda halaman, sejarah dan tetapan anda yang lain pada semua peranti yang anda gunakan untuk log masuk.</translation>
 <translation id="4571503333518166079">Pergi ke tetapan pemberitahuan Chrome</translation>
+<translation id="459622048091363950">Sebaik sahaja Chrome mempunyai akses, tapak web akan dapat meminta akses daripada anda.</translation>
 <translation id="4600710005438004015">Chrome tidak dapat dikemas kini kepada versi terkini, maka anda terlepas ciri baharu dan penyelesaian keselamatan.</translation>
 <translation id="4631713731678262610">Sembunyikan dalam menu Chrome</translation>
 <translation id="4633000520311261472">Untuk menjadikan Chrome lebih selamat, kami melumpuhkan beberapa sambungan yang tidak disenaraikan dalam <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> dan mungkin telah ditambahkan tanpa pengetahuan anda.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb
index e58ef22..3977c81e7 100644
--- a/chrome/app/resources/google_chrome_strings_nl.xtb
+++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Met Google Chrome kun je klikken op een telefoonnummer op internet om dit via Skype te bellen!</translation>
 <translation id="4567424176335768812">Je bent ingelogd als <ph name="USER_EMAIL_ADDRESS" />. Je hebt nu toegang tot je bladwijzers, geschiedenis en andere instellingen op al je apparaten waarop je bent ingelogd.</translation>
 <translation id="4571503333518166079">Ga naar instellingen voor Chrome-meldingen</translation>
+<translation id="459622048091363950">Zodra Chrome toegang heeft, kunnen websites je om toegang vragen.</translation>
 <translation id="4600710005438004015">Chrome kan niet worden geüpdatet naar de nieuwste versie, dus je loopt nieuwe functies en beveiligingsoplossingen mis.</translation>
 <translation id="4631713731678262610">Verbergen in Chrome-menu</translation>
 <translation id="4633000520311261472">Om Chrome veiliger te maken, hebben we een aantal extensies uitgeschakeld die niet worden vermeld in de <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> en mogelijk zonder je medeweten zijn geïnstalleerd.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb
index 3467ae1..f893246 100644
--- a/chrome/app/resources/google_chrome_strings_no.xtb
+++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -243,7 +243,7 @@
 <translation id="8286862437124483331">Google Chrome forsøker å vise passord. Skriv inn Windows-passordet ditt for å tillate dette.</translation>
 <translation id="8290100596633877290">Google Chrome har fått et programstopp. Vil du starte på nytt nå?</translation>
 <translation id="8342675569599923794">Denne filen er farlig, så Chrome har blokkert den.</translation>
-<translation id="8380166467911888159">For å rette opp i skrivefeil, Chrome sender teksten du skriver i tekstfeltet til Google</translation>
+<translation id="8380166467911888159">For å rette opp i skrivefeil sender Chrome sender tekst du skriver i tekstfelt, til Google</translation>
 <translation id="840084489713044809">Google Chrome forsøker å eksportere passordene dine.</translation>
 <translation id="8406086379114794905">Bidra til å gjøre Chrome bedre</translation>
 <translation id="8455999171311319804">Valgfritt: Bidra til å gjøre Chrome OS bedre ved å sende diagnostikk og brukerdata automatisk til Google.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb
index 89bd9d2..c130bb31 100644
--- a/chrome/app/resources/google_chrome_strings_pl.xtb
+++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">W przeglądarce Google Chrome możesz kliknąć numer telefonu zamieszczony w sieci i zadzwonić na niego za pośrednictwem usługi Skype!</translation>
 <translation id="4567424176335768812">Jesteś zalogowany jako <ph name="USER_EMAIL_ADDRESS" />. Teraz możesz korzystać ze swoich zakładek, historii i innych ustawień na wszystkich zalogowanych urządzeniach.</translation>
 <translation id="4571503333518166079">Otwórz ustawienia powiadomień Chrome</translation>
+<translation id="459622048091363950">Gdy Chrome będzie mieć dostęp, strony będą mogły prosić Cię o dostęp.</translation>
 <translation id="4600710005438004015">Aktualizacja Chrome do najnowszej wersji nie udała się, więc nie masz dostępu do najnowszych funkcji i poprawek zabezpieczeń.</translation>
 <translation id="4631713731678262610">Ukryj w menu Chrome</translation>
 <translation id="4633000520311261472">Aby poprawić bezpieczeństwo Chrome, wyłączyliśmy niektóre rozszerzenia niedostępne w <ph name="IDS_EXTENSION_WEB_STORE_TITLE" />, które mogły zostać dodane bez Twojej wiedzy.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
index 720cc75..018b1e8 100644
--- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">O Google Chrome permite que você clique em um número de telefone na web e ligue para ele com o Skype!</translation>
 <translation id="4567424176335768812">Você está conectado como <ph name="USER_EMAIL_ADDRESS" />. Agora você pode acessar seus favoritos, histórico e outras configurações em todos os seus dispositivos conectados.</translation>
 <translation id="4571503333518166079">Acessar as configurações de notificação do Chrome</translation>
+<translation id="459622048091363950">Assim que o Chrome tiver acesso, os sites poderão solicitar acesso.</translation>
 <translation id="4600710005438004015">Não foi possível atualizar o Chrome para a versão mais recente. Com isso, você está perdendo novos recursos e correções de segurança.</translation>
 <translation id="4631713731678262610">Esconder no menu do Google Chrome</translation>
 <translation id="4633000520311261472">Para tornar o Google Chrome mais seguro, desativamos algumas extensões que não estão listadas na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e podem ser sido adicionadas sem seu conhecimento.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
index e387e5c0..4e90046 100644
--- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb
+++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">O Google Chrome permite-lhe clicar num número de telefone na Web e fazer a chamada com o Skype!</translation>
 <translation id="4567424176335768812">Tem sessão iniciada como <ph name="USER_EMAIL_ADDRESS" />. Agora, pode aceder aos seus marcadores, ao histórico e a outras definições em todos os dispositivos com sessão iniciada.</translation>
 <translation id="4571503333518166079">Aceder às definições de notificação do Chrome</translation>
+<translation id="459622048091363950">Assim que o Chrome tiver acesso, os Websites poderão solicitar-lhe o acesso.</translation>
 <translation id="4600710005438004015">Não foi possível atualizar o Chrome para a versão mais recente, pelo que não está a beneficiar das novas funcionalidades e correções de segurança.</translation>
 <translation id="4631713731678262610">Ocultar no menu do Chrome</translation>
 <translation id="4633000520311261472">Para tornar o Chrome mais seguro, desativámos algumas extensões que não estão listadas na <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> e é possível que tenham sido adicionadas sem o seu conhecimento.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb
index 99e672d..e56f4318 100644
--- a/chrome/app/resources/google_chrome_strings_ro.xtb
+++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Cu Google Chrome, poți să dai clic pe un număr de telefon de pe web pentru a-l apela cu Skype!</translation>
 <translation id="4567424176335768812">V-ați conectat ca <ph name="USER_EMAIL_ADDRESS" />. Acum vă puteți accesa marcajele, istoricul și alte setări de pe toate dispozitivele pe care v-ați conectat.</translation>
 <translation id="4571503333518166079">Accesează setările pentru notificări Chrome</translation>
+<translation id="459622048091363950">Odată ce Chrome are acces, site-urile web îți vor putea solicita accesul.</translation>
 <translation id="4600710005438004015">Chrome nu s-a putut actualiza la cea mai recentă versiune. Astfel, pierzi noi funcții și remedieri de securitate.</translation>
 <translation id="4631713731678262610">Ascunde în meniul Chrome</translation>
 <translation id="4633000520311261472">Pentru ca browserul Chrome să fie mai sigur, am dezactivat câteva extensii care nu sunt incluse în <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> și care este posibil să fi fost adăugate fără știrea dvs.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb
index d20a0df..e232acf 100644
--- a/chrome/app/resources/google_chrome_strings_sk.xtb
+++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -134,6 +134,7 @@
 <translation id="4561051373932531560">Prehliadač Google Chrome vám umožňuje vybrať telefónne číslo na webe a zavolať naň pomocou aplikácie Skype.</translation>
 <translation id="4567424176335768812">Ste prihlásený/-á ako <ph name="USER_EMAIL_ADDRESS" />. Teraz môžete na všetkých zariadeniach, kde ste prihlásený/-á, pristupovať k svojim záložkám, histórii a ďalším nastaveniam.</translation>
 <translation id="4571503333518166079">Prejsť do nastavení upozornení Chromu</translation>
+<translation id="459622048091363950">Keď Chrome získa prístup, weby vás budú môcť žiadať o prístup.</translation>
 <translation id="4600710005438004015">Chrome sa nepodarilo aktualizovať na najnovšiu verziu. K dispozícii tak nie sú niektoré nové funkcie a bezpečnostné opravy.</translation>
 <translation id="4631713731678262610">Skryť v Ponuke Chrome</translation>
 <translation id="4633000520311261472">Z dôvodu vyššej bezpečnosti prehliadača Chrome sme zakázali niektoré rozšírenia, ktoré nedodáva <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> a mohli byť pridané bez vášho vedomia.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb
index fb5aa8a..e952d96 100644
--- a/chrome/app/resources/google_chrome_strings_sl.xtb
+++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome vam omogoča, da na spletu kliknete telefonsko številko in jo pokličete prek Skypa.</translation>
 <translation id="4567424176335768812">Prijavljeni ste kot <ph name="USER_EMAIL_ADDRESS" />. Zdaj imate dostop do zaznamkov, zgodovine in drugih nastavitev v vseh napravah, v katerih ste prijavljeni.</translation>
 <translation id="4571503333518166079">Odpri nastavitve obvestil v Chromu</translation>
+<translation id="459622048091363950">Ko bo imel Chrome dostop, vas bodo spletna mesta lahko pozvala k omogočanju dostopa.</translation>
 <translation id="4600710005438004015">Chroma ni bilo mogoče posodobiti na najnovejšo različico, zato nimate novih funkcij in popravkov varnosti.</translation>
 <translation id="4631713731678262610">Skrij v meniju Chroma</translation>
 <translation id="4633000520311261472">Zaradi večje varnosti smo v Chromu onemogočili nekatere razširitve, ki niso navedene v storitvi <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> in so bile morda dodane brez vaše vednosti.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb
index 6dd70dc..c27ef79 100644
--- a/chrome/app/resources/google_chrome_strings_sr.xtb
+++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome вам омогућава да кликнете на број телефона на вебу и да га позовете помоћу Skype-а!</translation>
 <translation id="4567424176335768812">Пријављени сте као <ph name="USER_EMAIL_ADDRESS" />. Сада можете да приступате обележивачима, историји и другим подешавањима на свим уређајима на којима сте пријављени.</translation>
 <translation id="4571503333518166079">Иди на подешавања обавештења за Chrome</translation>
+<translation id="459622048091363950">Када Chrome добије приступ, веб-сајтови ће моћи да затраже приступ.</translation>
 <translation id="4600710005438004015">Chrome није успео да се ажурира на најновију верзију, па пропуштате нове функције и безбедносне исправке.</translation>
 <translation id="4631713731678262610">Сакриј у Chrome менију</translation>
 <translation id="4633000520311261472">Да бисмо учинили Chrome безбеднијим, онемогућили смо неке додатке које не наводи <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> и који су можда додати без вашег знања.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb
index 854bb27..924c633 100644
--- a/chrome/app/resources/google_chrome_strings_sv.xtb
+++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">I Google Chrome kan du klicka på ett telefonnummer på nätet och ringa det med Skype!</translation>
 <translation id="4567424176335768812">Du är inloggad som <ph name="USER_EMAIL_ADDRESS" />. Nu kan du komma åt dina bokmärken, historik och andra inställningar på alla enheter som du är inloggad på.</translation>
 <translation id="4571503333518166079">Öppna aviseringsinställningarna för Chrome</translation>
+<translation id="459622048091363950">När du har gett Chrome åtkomst kan webbplatser begära att få åtkomst.</translation>
 <translation id="4600710005438004015">Det gick inte att uppdatera Chrome till den senaste versionen. Därför går du miste om nya funktioner och säkerhetskorrigeringar.</translation>
 <translation id="4631713731678262610">Dölj i Chrome-menyn</translation>
 <translation id="4633000520311261472">Vi har gjort Chrome säkrare genom att inaktivera vissa tillägg som inte finns i <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> och som kan ha lagts till utan att du vet om det.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb
index b0ef415..7acdaec 100644
--- a/chrome/app/resources/google_chrome_strings_sw.xtb
+++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -136,6 +136,7 @@
 <translation id="4561051373932531560">Google Chrome inakuwezesha kubofya nambari ya simu kwenye wavuti na kuipigia simu kwa Skype!</translation>
 <translation id="4567424176335768812">Umeingia katika akaunti kama <ph name="USER_EMAIL_ADDRESS" />. Sasa unaweza kupata alamisho, historia, na mipangilio yako mingine kwenye vifaa vyako vyote vilivyoingia katika akaunti.</translation>
 <translation id="4571503333518166079">Nenda kwenye mipangilio ya arifa za Chrome</translation>
+<translation id="459622048091363950">Chrome itakapopata idhini, tovuti zitaweza kukuomba idhini ya kufikia.</translation>
 <translation id="4600710005438004015">Imeshindwa kupata toleo jipya la Chrome, kwa hivyo hutapata masasisho ya usalama na vipengele vipya.</translation>
 <translation id="4631713731678262610">Ficha katika menyu ya Chrome</translation>
 <translation id="4633000520311261472">Ili kufanya Chrome salama zaidi, tumezima baadhi ya viendelezi ambavyo havijaorodheshwa katika <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> na ambavyo huendwa viliongezwa pasipo ridhaa yako.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb
index 9bf874b..e359188f 100644
--- a/chrome/app/resources/google_chrome_strings_th.xtb
+++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">Google Chrome ทำให้คุณสามารถคลิกที่หมายเลขโทรศัพท์บนเว็บแล้วโทรหาด้วย Skype!</translation>
 <translation id="4567424176335768812">คุณกำลังลงชื่อเข้าใช้เป็น <ph name="USER_EMAIL_ADDRESS" /> ตอนนี้คุณสามารถเข้าถึงบุ๊กมาร์ก ประวัติการเข้าชม และการตั้งค่าอื่นๆ บนอุปกรณ์ทั้งหมดที่ลงชื่อเข้าใช้</translation>
 <translation id="4571503333518166079">ไปที่การตั้งค่าการแจ้งเตือน Chrome</translation>
+<translation id="459622048091363950">เมื่อ Chrome มีสิทธิ์การเข้าถึงแล้ว เว็บไซต์จะขอสิทธิ์การเข้าถึงจากคุณได้</translation>
 <translation id="4600710005438004015">Chrome อัปเดตเป็นเวอร์ชันล่าสุดไม่ได้ คุณจึงไม่ได้รับฟีเจอร์ใหม่และการแก้ไขด้านความปลอดภัย</translation>
 <translation id="4631713731678262610">ซ่อนในเมนู Chrome</translation>
 <translation id="4633000520311261472">เพื่อให้ Chrome ปลอดภัยขึ้น เราปิดส่วนขยายบางรายการที่ไม่ได้ระบุไว้ใน <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> และอาจถูกเพิ่มเข้ามาโดยที่คุณไม่รู้ตัว</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb
index 0207f5d..771f416f5f 100644
--- a/chrome/app/resources/google_chrome_strings_tr.xtb
+++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -133,6 +133,7 @@
 <translation id="4561051373932531560">Google Chrome web'de bir telefon numarasını tıklayarak Skype ile aramanıza olanak sağlar!</translation>
 <translation id="4567424176335768812"><ph name="USER_EMAIL_ADDRESS" /> olarak oturum açtınız. Şimdi oturum açtığınız tüm cihazlarda yer işaretlerinize, geçmişinize ve diğer ayarlarınıza erişebilirsiniz.</translation>
 <translation id="4571503333518166079">Chrome bildirim ayarlarına git</translation>
+<translation id="459622048091363950">Chrome erişim izni aldıktan sonra, web siteleri de erişim için sizden izin isteyebilecek.</translation>
 <translation id="4600710005438004015">Chrome en son sürüme güncellenemediği için yeni özellikler ve güvenlik düzeltmeleri cihazınızda bulunmuyor.</translation>
 <translation id="4631713731678262610">Chrome menüsünde gizle</translation>
 <translation id="4633000520311261472">Chrome'u daha güvenli bir hale getirmek için <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> altında listelenmeyen ve bilginiz dışında eklenmiş olabilecek bazı uzantıları devre dışı bıraktık.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb
index 9ea6f04..aad4ac6 100644
--- a/chrome/app/resources/google_chrome_strings_uk.xtb
+++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome дозволяє натиснути номер телефону в Інтернеті та здійснити виклик через Skype.</translation>
 <translation id="4567424176335768812">Ви ввійшли як <ph name="USER_EMAIL_ADDRESS" />. Ваші закладки, історія й інші налаштування будуть доступні на всіх пристроях, на яких ви ввійдете в цей обліковий запис.</translation>
 <translation id="4571503333518166079">Перейти до налаштувань сповіщень Chrome</translation>
+<translation id="459622048091363950">Коли Chrome отримає доступ, веб-сайти зможуть надсилати вам запити на доступ.</translation>
 <translation id="4600710005438004015">Не вдалось оновити Chrome до останньої версії. Ви не зможете скористатися новими функціями та застосувати виправлення системи безпеки.</translation>
 <translation id="4631713731678262610">Сховати в меню Chrome</translation>
 <translation id="4633000520311261472">Щоб зробити Chrome безпечнішим, ми вимкнули деякі розширення, установлені не із сайту <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> і, можливо, додані без вашого відома.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-TW.xtb b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
index 9780940..c5be6a7 100644
--- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb
+++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -132,6 +132,7 @@
 <translation id="4561051373932531560">Google Chrome 可讓你按一下網頁上的電話號碼,隨即透過 Skype 撥打電話!</translation>
 <translation id="4567424176335768812">你已使用 <ph name="USER_EMAIL_ADDRESS" /> 的身分登入,可以在所有登入的裝置上使用你的書籤、記錄和其他設定。</translation>
 <translation id="4571503333518166079">前往 Chrome 通知設定</translation>
+<translation id="459622048091363950">Chrome 取得存取權後,網站將可要求你授予存取權。</translation>
 <translation id="4600710005438004015">Chrome 無法更新至最新版本,因此你並未取得最新功能和安全性問題修正。</translation>
 <translation id="4631713731678262610">在 Chrome 選單中隱藏</translation>
 <translation id="4633000520311261472">為了讓 Chrome 的安全性更有保障,我們已將部分未列在 <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> 中的擴充功能停用,它們可能在你不知情的情況下加入瀏覽器。</translation>
diff --git a/chrome/app/vector_icons/BUILD.gn b/chrome/app/vector_icons/BUILD.gn
index 974a79f..5520177f 100644
--- a/chrome/app/vector_icons/BUILD.gn
+++ b/chrome/app/vector_icons/BUILD.gn
@@ -105,9 +105,7 @@
     "tab_audio_muting_rounded.icon",
     "tab_audio_rounded.icon",
     "tab_bluetooth_connected.icon",
-    "tab_close_button_highlight.icon",
     "tab_close_button_touch.icon",
-    "tab_close_button_touch_highlight.icon",
     "tab_close_normal.icon",
     "tab_media_capturing.icon",
     "tab_media_capturing_with_arrow.icon",
diff --git a/chrome/app/vector_icons/tab_close_button_highlight.icon b/chrome/app/vector_icons/tab_close_button_highlight.icon
deleted file mode 100644
index b6d4633..0000000
--- a/chrome/app/vector_icons/tab_close_button_highlight.icon
+++ /dev/null
@@ -1,7 +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.
-
-// The highlight circle around the close "X" for a tab when hovered/pressed.
-CANVAS_DIMENSIONS, 16,
-CIRCLE, 8, 8, 8,
diff --git a/chrome/app/vector_icons/tab_close_button_touch_highlight.icon b/chrome/app/vector_icons/tab_close_button_touch_highlight.icon
deleted file mode 100644
index 6d27fa7..0000000
--- a/chrome/app/vector_icons/tab_close_button_touch_highlight.icon
+++ /dev/null
@@ -1,6 +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.
-
-CANVAS_DIMENSIONS, 24,
-CIRCLE, 12, 12, 12,
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 2c01bbb9..a824921 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -82,6 +82,8 @@
     "about_flags.h",
     "accessibility/accessibility_permission_context.cc",
     "accessibility/accessibility_permission_context.h",
+    "accessibility/accessibility_ui.cc",
+    "accessibility/accessibility_ui.h",
     "after_startup_task_utils.cc",
     "after_startup_task_utils.h",
     "app_controller_mac.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 86941fd..ddb5ad4b 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4124,12 +4124,31 @@
     {"enable-continue-reading", flag_descriptions::kEnableContinueReadingName,
      flag_descriptions::kEnableContinueReadingDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(app_list::features::kEnableContinueReading)},
+    {"enable-zero-state-suggestions",
+     flag_descriptions::kEnableZeroStateSuggestionsName,
+     flag_descriptions::kEnableZeroStateSuggestionsDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(app_list::features::kEnableZeroStateSuggestions)},
 #endif  // OS_CHROMEOS
 
     {"enable-bloated-renderer-detection",
      flag_descriptions::kEnableBloatedRendererDetectionName,
      flag_descriptions::kEnableBloatedRendererDetectionDescription, kOsAll,
      FEATURE_VALUE_TYPE(features::kBloatedRendererDetection)},
+    {"enable-sync-uss-bookmarks",
+     flag_descriptions::kEnableSyncUSSBookmarksName,
+     flag_descriptions::kEnableSyncUSSBookmarksDescription, kOsAll,
+     FEATURE_VALUE_TYPE(switches::kSyncUSSBookmarks)},
+
+#if defined(OS_ANDROID)
+    {"incognito-strings", flag_descriptions::kIncognitoStringsName,
+     flag_descriptions::kIncognitoStringsDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(chrome::android::kIncognitoStrings)},
+#endif
+
+    {"enable-idn-navigation-suggestions",
+     flag_descriptions::kIdnNavigationSuggestionsName,
+     flag_descriptions::kIdnNavigationSuggestionsDescription, kOsDesktop,
+     FEATURE_VALUE_TYPE(features::kIdnNavigationSuggestions)},
 
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
diff --git a/content/browser/accessibility/accessibility_ui.cc b/chrome/browser/accessibility/accessibility_ui.cc
similarity index 73%
rename from content/browser/accessibility/accessibility_ui.cc
rename to chrome/browser/accessibility/accessibility_ui.cc
index 4dada73..9bb7d361 100644
--- a/content/browser/accessibility/accessibility_ui.cc
+++ b/chrome/browser/accessibility/accessibility_ui.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 "content/browser/accessibility/accessibility_ui.h"
+#include "chrome/browser/accessibility/accessibility_ui.h"
 
 #include <memory>
 #include <utility>
@@ -14,18 +14,13 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/values.h"
-#include "content/browser/accessibility/accessibility_tree_formatter.h"
-#include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
-#include "content/browser/accessibility/browser_accessibility_manager.h"
-#include "content/browser/accessibility/browser_accessibility_state_impl.h"
-#include "content/browser/renderer_host/render_view_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_impl.h"
-#include "content/browser/renderer_host/render_widget_host_view_base.h"
-#include "content/browser/web_contents/web_contents_impl.h"
-#include "content/browser/web_contents/web_contents_view.h"
-#include "content/browser/webui/web_ui_data_source_impl.h"
-#include "content/common/view_message_enums.h"
-#include "content/grit/content_resources.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/common/webui_url_constants.h"
+#include "chrome/grit/browser_resources.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/prefs/pref_service.h"
+#include "content/public/browser/browser_accessibility_state.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/favicon_status.h"
 #include "content/public/browser/navigation_entry.h"
@@ -34,21 +29,21 @@
 #include "content/public/browser/render_widget_host.h"
 #include "content/public/browser/render_widget_host_iterator.h"
 #include "content/public/browser/web_contents.h"
+#include "content/public/browser/web_contents_delegate.h"
 #include "content/public/browser/web_ui_data_source.h"
-#include "content/public/common/content_switches.h"
-#include "content/public/common/url_constants.h"
 #include "net/base/escape.h"
 #include "ui/accessibility/platform/ax_platform_node.h"
+#include "ui/accessibility/platform/ax_platform_node_delegate.h"
 #include "ui/base/webui/web_ui_util.h"
 
 static const char kTargetsDataFile[] = "targets-data.json";
 
-static const char kProcessIdField[]  = "processId";
-static const char kRouteIdField[]  = "routeId";
-static const char kUrlField[]  = "url";
-static const char kNameField[]  = "name";
+static const char kProcessIdField[] = "processId";
+static const char kRouteIdField[] = "routeId";
+static const char kUrlField[] = "url";
+static const char kNameField[] = "name";
 static const char kFaviconUrlField[] = "favicon_url";
-static const char kPidField[]  = "pid";
+static const char kPidField[] = "pid";
 static const char kAccessibilityModeField[] = "a11y_mode";
 
 // Global flags
@@ -60,16 +55,12 @@
 static const char kHTML[] = "html";
 
 // Possible global flag values
-static const char kOff[]= "off";
+static const char kOff[] = "off";
 static const char kOn[] = "on";
 static const char kDisabled[] = "disabled";
 
-namespace content {
-
 namespace {
 
-bool g_show_internal_accessibility_tree = false;
-
 std::unique_ptr<base::DictionaryValue> BuildTargetDescriptor(
     const GURL& url,
     const std::string& name,
@@ -91,9 +82,9 @@
 }
 
 std::unique_ptr<base::DictionaryValue> BuildTargetDescriptor(
-    RenderViewHost* rvh) {
-  WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
-      WebContents::FromRenderViewHost(rvh));
+    content::RenderViewHost* rvh) {
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderViewHost(rvh);
   ui::AXMode accessibility_mode;
 
   std::string title;
@@ -104,8 +95,8 @@
     // across the URL, title, and favicon.
     url = web_contents->GetURL();
     title = base::UTF16ToUTF8(web_contents->GetTitle());
-    NavigationController& controller = web_contents->GetController();
-    NavigationEntry* entry = controller.GetVisibleEntry();
+    content::NavigationController& controller = web_contents->GetController();
+    content::NavigationEntry* entry = controller.GetVisibleEntry();
     if (entry != nullptr && entry->GetURL().is_valid()) {
       gfx::Image favicon_image = entry->GetFavicon().image;
       if (!favicon_image.IsEmpty()) {
@@ -116,36 +107,35 @@
     accessibility_mode = web_contents->GetAccessibilityMode();
   }
 
-  return BuildTargetDescriptor(url,
-                               title,
-                               favicon_url,
-                               rvh->GetProcess()->GetID(),
-                               rvh->GetRoutingID(),
+  return BuildTargetDescriptor(url, title, favicon_url,
+                               rvh->GetProcess()->GetID(), rvh->GetRoutingID(),
                                accessibility_mode);
 }
 
 bool HandleAccessibilityRequestCallback(
-    BrowserContext* current_context,
+    content::BrowserContext* current_context,
     const std::string& path,
-    const WebUIDataSource::GotDataCallback& callback) {
+    const content::WebUIDataSource::GotDataCallback& callback) {
   if (path != kTargetsDataFile)
     return false;
   std::unique_ptr<base::ListValue> rvh_list(new base::ListValue());
 
-  std::unique_ptr<RenderWidgetHostIterator> widgets(
-      RenderWidgetHost::GetRenderWidgetHosts());
+  std::unique_ptr<content::RenderWidgetHostIterator> widgets(
+      content::RenderWidgetHost::GetRenderWidgetHosts());
 
-  while (RenderWidgetHost* widget = widgets->GetNextHost()) {
+  while (content::RenderWidgetHost* widget = widgets->GetNextHost()) {
     // Ignore processes that don't have a connection, such as crashed tabs.
     if (!widget->GetProcess()->IsInitializedAndNotDead())
       continue;
-    RenderViewHost* rvh = RenderViewHost::From(widget);
+    content::RenderViewHost* rvh = content::RenderViewHost::From(widget);
     if (!rvh)
       continue;
     // Ignore views that are never visible, like background pages.
-    if (static_cast<RenderViewHostImpl*>(rvh)->GetDelegate()->IsNeverVisible())
+    content::WebContents* web_contents =
+        content::WebContents::FromRenderViewHost(rvh);
+    if (web_contents->GetDelegate()->IsNeverVisible(web_contents))
       continue;
-    BrowserContext* context = rvh->GetProcess()->GetBrowserContext();
+    content::BrowserContext* context = rvh->GetProcess()->GetBrowserContext();
     if (context != current_context)
       continue;
 
@@ -155,9 +145,9 @@
   base::DictionaryValue data;
   data.Set("list", std::move(rvh_list));
   ui::AXMode mode =
-      BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode();
-  bool disabled = base::CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableRendererAccessibility);
+      content::BrowserAccessibilityState::GetInstance()->GetAccessibilityMode();
+  bool disabled = !content::BrowserAccessibilityState::GetInstance()
+                       ->IsRendererAccessibilityEnabled();
   bool native = mode.has_mode(ui::AXMode::kNativeAPIs);
   bool web = mode.has_mode(ui::AXMode::kWebContents);
   bool text = mode.has_mode(ui::AXMode::kInlineTextBoxes);
@@ -175,8 +165,9 @@
   data.SetString(kScreenReader, web ? (screenreader ? kOn : kOff) : kDisabled);
   data.SetString(kHTML, web ? (html ? kOn : kOff) : kDisabled);
 
-  data.SetString(kInternal,
-                 g_show_internal_accessibility_tree ? kOn : kOff);
+  PrefService* pref = Profile::FromBrowserContext(current_context)->GetPrefs();
+  bool show_internal = pref->GetBoolean(prefs::kShowInternalAccessibilityTree);
+  data.SetString(kInternal, show_internal ? kOn : kOff);
 
   std::string json_string;
   base::JSONWriter::Write(data, &json_string);
@@ -201,10 +192,11 @@
 
 }  // namespace
 
-AccessibilityUI::AccessibilityUI(WebUI* web_ui) : WebUIController(web_ui) {
+AccessibilityUI::AccessibilityUI(content::WebUI* web_ui)
+    : WebUIController(web_ui) {
   // Set up the chrome://accessibility source.
-  WebUIDataSourceImpl* html_source = static_cast<WebUIDataSourceImpl*>(
-      WebUIDataSource::Create(kChromeUIAccessibilityHost));
+  content::WebUIDataSource* html_source =
+      content::WebUIDataSource::Create(chrome::kChromeUIAccessibilityHost);
 
   // Add required resources.
   html_source->SetJsonPath("strings.js");
@@ -217,9 +209,9 @@
 
   html_source->UseGzip({kTargetsDataFile});
 
-  BrowserContext* browser_context =
+  content::BrowserContext* browser_context =
       web_ui->GetWebContents()->GetBrowserContext();
-  WebUIDataSource::Add(browser_context, html_source);
+  content::WebUIDataSource::Add(browser_context, html_source);
 
   web_ui->AddMessageHandler(std::make_unique<AccessibilityUIMessageHandler>());
 }
@@ -268,11 +260,12 @@
   CHECK(base::StringToInt(route_id_str, &route_id));
 
   AllowJavascript();
-  RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id);
+  content::RenderViewHost* rvh =
+      content::RenderViewHost::FromID(process_id, route_id);
   if (!rvh)
     return;
-  auto* web_contents =
-      static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh));
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderViewHost(rvh);
   ui::AXMode current_mode = web_contents->GetAccessibilityMode();
 
   if (mode & ui::AXMode::kNativeAPIs)
@@ -302,8 +295,8 @@
 
   AllowJavascript();
   if (flag_name_str == kInternal) {
-    g_show_internal_accessibility_tree = enabled;
-    LOG(ERROR) << "INTERNAL: " << g_show_internal_accessibility_tree;
+    PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs();
+    pref->SetBoolean(prefs::kShowInternalAccessibilityTree, enabled);
     return;
   }
 
@@ -339,8 +332,8 @@
     new_mode.set_mode(ui::AXMode::kHTML, true);
   }
 
-  BrowserAccessibilityStateImpl* state =
-      BrowserAccessibilityStateImpl::GetInstance();
+  content::BrowserAccessibilityState* state =
+      content::BrowserAccessibilityState::GetInstance();
   if (enabled)
     state->AddAccessibilityModeFlags(new_mode);
   else
@@ -360,7 +353,8 @@
   CHECK(base::StringToInt(route_id_str, &route_id));
 
   AllowJavascript();
-  RenderViewHost* rvh = RenderViewHost::FromID(process_id, route_id);
+  content::RenderViewHost* rvh =
+      content::RenderViewHost::FromID(process_id, route_id);
   if (!rvh) {
     std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue());
     result->SetInteger(kProcessIdField, process_id);
@@ -371,28 +365,17 @@
   }
 
   std::unique_ptr<base::DictionaryValue> result(BuildTargetDescriptor(rvh));
-  auto* web_contents =
-      static_cast<WebContentsImpl*>(WebContents::FromRenderViewHost(rvh));
+  content::WebContents* web_contents =
+      content::WebContents::FromRenderViewHost(rvh);
   // No matter the state of the current web_contents, we want to force the mode
   // because we are about to show the accessibility tree
   web_contents->SetAccessibilityMode(
       ui::AXMode(ui::AXMode::kNativeAPIs | ui::AXMode::kWebContents));
 
-  std::unique_ptr<AccessibilityTreeFormatter> formatter;
-  if (g_show_internal_accessibility_tree)
-    formatter.reset(new AccessibilityTreeFormatterBlink());
-  else
-    formatter.reset(AccessibilityTreeFormatter::Create());
-  base::string16 accessibility_contents_utf16;
-  std::vector<AccessibilityTreeFormatter::Filter> filters;
-  filters.push_back(AccessibilityTreeFormatter::Filter(
-      base::ASCIIToUTF16("*"),
-      AccessibilityTreeFormatter::Filter::ALLOW));
-  formatter->SetFilters(filters);
-  auto* ax_mgr = web_contents->GetOrCreateRootBrowserAccessibilityManager();
-  DCHECK(ax_mgr);
-  formatter->FormatAccessibilityTree(ax_mgr->GetRoot(),
-                                     &accessibility_contents_utf16);
+  PrefService* pref = Profile::FromWebUI(web_ui())->GetPrefs();
+  bool internal = pref->GetBoolean(prefs::kShowInternalAccessibilityTree);
+  base::string16 accessibility_contents_utf16 =
+      web_contents->DumpAccessibilityTree(internal);
   result->SetString("tree", base::UTF16ToUTF8(accessibility_contents_utf16));
   CallJavascriptFunction("accessibility.showTree", *(result.get()));
 }
@@ -400,10 +383,8 @@
 void AccessibilityUIMessageHandler::RequestNativeUITree(
     const base::ListValue* args) {
   AllowJavascript();
-  WebContentsImpl* web_contents =
-      static_cast<WebContentsImpl*>(web_ui()->GetWebContents());
-  gfx::NativeWindow native_window =
-      web_contents->GetView()->GetTopLevelNativeWindow();
+  content::WebContents* web_contents = web_ui()->GetWebContents();
+  gfx::NativeWindow native_window = web_contents->GetTopLevelNativeWindow();
   ui::AXPlatformNode* node =
       ui::AXPlatformNode::FromNativeWindow(native_window);
   std::string str = RecursiveDumpAXPlatformNodeAsString(node, 0);
@@ -413,4 +394,8 @@
   CallJavascriptFunction("accessibility.showNativeUITree", *(result.get()));
 }
 
-}  // namespace content
+// static
+void AccessibilityUIMessageHandler::RegisterProfilePrefs(
+    user_prefs::PrefRegistrySyncable* registry) {
+  registry->RegisterBooleanPref(prefs::kShowInternalAccessibilityTree, false);
+}
diff --git a/content/browser/accessibility/accessibility_ui.h b/chrome/browser/accessibility/accessibility_ui.h
similarity index 67%
rename from content/browser/accessibility/accessibility_ui.h
rename to chrome/browser/accessibility/accessibility_ui.h
index a54f23d3..8a2f32e 100644
--- a/content/browser/accessibility/accessibility_ui.h
+++ b/chrome/browser/accessibility/accessibility_ui.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 CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
-#define CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
+#ifndef CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
+#define CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
 
 #include "base/macros.h"
 #include "content/public/browser/web_ui_controller.h"
@@ -11,14 +11,16 @@
 #include "content/public/browser/web_ui_message_handler.h"
 
 namespace base {
-  class ListValue;
+class ListValue;
 }  // namespace base
 
-namespace content {
+namespace user_prefs {
+class PrefRegistrySyncable;
+}  // namespace user_prefs
 
-class AccessibilityUI : public WebUIController {
+class AccessibilityUI : public content::WebUIController {
  public:
-  explicit AccessibilityUI(WebUI* web_ui);
+  explicit AccessibilityUI(content::WebUI* web_ui);
   ~AccessibilityUI() override;
 };
 
@@ -29,6 +31,8 @@
 
   void RegisterMessages() override;
 
+  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
  private:
   void ToggleAccessibility(const base::ListValue* args);
   void SetGlobalFlag(const base::ListValue* args);
@@ -38,6 +42,4 @@
   DISALLOW_COPY_AND_ASSIGN(AccessibilityUIMessageHandler);
 };
 
-}  // namespace content
-
-#endif  // CONTENT_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
+#endif  // CHROME_BROWSER_ACCESSIBILITY_ACCESSIBILITY_UI_H_
diff --git a/chrome/browser/android/chrome_feature_list.cc b/chrome/browser/android/chrome_feature_list.cc
index 31baeca..38fb4676 100644
--- a/chrome/browser/android/chrome_feature_list.cc
+++ b/chrome/browser/android/chrome_feature_list.cc
@@ -107,6 +107,7 @@
     &kHomepageTile,
     &kHorizontalTabSwitcherAndroid,
     &kImprovedA2HS,
+    &kIncognitoStrings,
     &kLanguagesPreference,
     &kModalPermissionDialogView,
     &kNewContactsPicker,
@@ -302,6 +303,9 @@
 const base::Feature kImprovedA2HS{"ImprovedA2HS",
                                   base::FEATURE_ENABLED_BY_DEFAULT};
 
+const base::Feature kIncognitoStrings{"IncognitoStrings",
+                                      base::FEATURE_DISABLED_BY_DEFAULT};
+
 const base::Feature kLanguagesPreference{"LanguagesPreference",
                                          base::FEATURE_ENABLED_BY_DEFAULT};
 
diff --git a/chrome/browser/android/chrome_feature_list.h b/chrome/browser/android/chrome_feature_list.h
index 825bc4dd..6d6b4dd 100644
--- a/chrome/browser/android/chrome_feature_list.h
+++ b/chrome/browser/android/chrome_feature_list.h
@@ -53,6 +53,7 @@
 extern const base::Feature kHomepageTile;
 extern const base::Feature kHorizontalTabSwitcherAndroid;
 extern const base::Feature kImprovedA2HS;
+extern const base::Feature kIncognitoStrings;
 extern const base::Feature kLanguagesPreference;
 extern const base::Feature kModalPermissionDialogView;
 extern const base::Feature kSearchEnginePromoExistingDevice;
diff --git a/chrome/browser/android/vr/BUILD.gn b/chrome/browser/android/vr/BUILD.gn
index d2c2b2fe..5017a17 100644
--- a/chrome/browser/android/vr/BUILD.gn
+++ b/chrome/browser/android/vr/BUILD.gn
@@ -53,6 +53,8 @@
     sources += [
       "arcore_device/ar_image_transport.cc",
       "arcore_device/ar_image_transport.h",
+      "arcore_device/ar_renderer.cc",
+      "arcore_device/ar_renderer.h",
       "arcore_device/arcore.h",
       "arcore_device/arcore_device.cc",
       "arcore_device/arcore_device.h",
@@ -77,7 +79,7 @@
     ":vr_jni_headers",
     "//base",
     "//cc",
-    "//chrome/browser/vr:vr_common",
+    "//chrome/browser/vr:vr_gl_utils",
     "//components/omnibox/browser",
     "//components/rappor",
     "//content/public/browser",
diff --git a/chrome/browser/android/vr/arcore_device/ar_image_transport.cc b/chrome/browser/android/vr/arcore_device/ar_image_transport.cc
index a951fc6..6f3db79 100644
--- a/chrome/browser/android/vr/arcore_device/ar_image_transport.cc
+++ b/chrome/browser/android/vr/arcore_device/ar_image_transport.cc
@@ -75,8 +75,7 @@
 
   glDisable(GL_DEPTH_TEST);
   glDepthMask(GL_FALSE);
-  web_vr_renderer_ = std::make_unique<vr::WebVrRenderer>();
-  vr::BaseQuadRenderer::CreateBuffers();
+  ar_renderer_ = std::make_unique<ArRenderer>();
   glGenTextures(1, &camera_texture_id_arcore_);
 
   SetupHardwareBuffers();
@@ -192,7 +191,7 @@
 
   // Don't need face culling, depth testing, blending, etc. Turn it all off.
   // TODO(klausw): see if we can do this one time on initialization. That would
-  // be a tiny bit more efficient, but is only safe if ARCore and WebVrRenderer
+  // be a tiny bit more efficient, but is only safe if ARCore and ArRenderer
   // don't modify these states.
   glDisable(GL_CULL_FACE);
   glDisable(GL_SCISSOR_TEST);
@@ -203,7 +202,7 @@
   // Draw the ARCore texture!
   float uv_transform_floats[16];
   uv_transform.matrix().asColMajorf(uv_transform_floats);
-  web_vr_renderer_->Draw(camera_texture_id_arcore_, uv_transform_floats, 0, 0);
+  ar_renderer_->Draw(camera_texture_id_arcore_, uv_transform_floats, 0, 0);
 
   glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER, 0);
 
diff --git a/chrome/browser/android/vr/arcore_device/ar_image_transport.h b/chrome/browser/android/vr/arcore_device/ar_image_transport.h
index ebb10e3a..e080a66 100644
--- a/chrome/browser/android/vr/arcore_device/ar_image_transport.h
+++ b/chrome/browser/android/vr/arcore_device/ar_image_transport.h
@@ -8,7 +8,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/single_thread_task_runner.h"
-#include "chrome/browser/vr/renderers/web_vr_renderer.h"
+#include "chrome/browser/android/vr/arcore_device/ar_renderer.h"
 #include "device/vr/public/mojom/vr_service.mojom.h"
 #include "ui/gfx/geometry/size_f.h"
 
@@ -48,8 +48,7 @@
   void SetupHardwareBuffers();
   void ResizeSharedBuffer(const gfx::Size& size, SharedFrameBuffer* buffer);
   bool IsOnGlThread() const;
-  // TODO(https://crbug.com/838013): rename WebVRRenderer.
-  std::unique_ptr<vr::WebVrRenderer> web_vr_renderer_;
+  std::unique_ptr<ArRenderer> ar_renderer_;
   // samplerExternalOES texture data for WebXR content image.
   GLuint camera_texture_id_arcore_ = 0;
   GLuint camera_fbo_ = 0;
diff --git a/chrome/browser/android/vr/arcore_device/ar_renderer.cc b/chrome/browser/android/vr/arcore_device/ar_renderer.cc
new file mode 100644
index 0000000..660538b7
--- /dev/null
+++ b/chrome/browser/android/vr/arcore_device/ar_renderer.cc
@@ -0,0 +1,138 @@
+// 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.
+
+#include "chrome/browser/android/vr/arcore_device/ar_renderer.h"
+
+#include "base/stl_util.h"
+#include "chrome/browser/vr/vr_gl_util.h"
+
+namespace device {
+
+namespace {
+
+static constexpr float kQuadVertices[8] = {
+    -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, -0.5f,
+};
+static constexpr GLushort kQuadIndices[6] = {0, 1, 2, 1, 3, 2};
+
+// clang-format off
+static constexpr char const* kVertexShader = SHADER(
+  precision mediump float;
+  uniform mat4 u_UvTransform;
+  attribute vec4 a_Position;
+  varying vec2 v_TexCoordinate;
+  uniform float u_XBorder;
+  uniform float u_YBorder;
+
+  void main() {
+    // The quad vertex coordinate range is [-0.5, 0.5]. Transform to [0, 1],
+    // scale to cause the borders to wrap the texture, then apply the supplied
+    // affine transform matrix to get the final UV.
+    float xposition = a_Position[0] + 0.5;
+    xposition = xposition * (2.0 * u_XBorder + 1.0) - u_XBorder;
+    float yposition = a_Position[1] + 0.5;
+    yposition = yposition * (2.0 * u_YBorder + 1.0) - u_YBorder;
+    vec4 uv_in = vec4(xposition, yposition, 0.0, 1.0);
+    vec4 uv_out = u_UvTransform * uv_in;
+    v_TexCoordinate = vec2(uv_out.x, uv_out.y);
+    gl_Position = vec4(a_Position.xyz * 2.0, 1.0);
+  }
+);
+
+static constexpr char const* kFragmentShader = OEIE_SHADER(
+  precision highp float;
+  uniform samplerExternalOES u_Texture;
+  varying vec2 v_TexCoordinate;
+
+  void main() {
+    gl_FragColor = texture2D(u_Texture, v_TexCoordinate);
+  }
+);
+// clang-format on
+
+}  // namespace
+
+ArRenderer::ArRenderer() {
+  std::string error;
+  GLuint vertex_shader_handle =
+      vr::CompileShader(GL_VERTEX_SHADER, kVertexShader, error);
+  // TODO(crbug.com/866593): fail gracefully if shaders don't compile.
+  CHECK(vertex_shader_handle) << error << "\nvertex_src\n" << kVertexShader;
+
+  GLuint fragment_shader_handle =
+      vr::CompileShader(GL_FRAGMENT_SHADER, kFragmentShader, error);
+  CHECK(fragment_shader_handle) << error << "\nfragment_src\n"
+                                << kFragmentShader;
+
+  program_handle_ = vr::CreateAndLinkProgram(vertex_shader_handle,
+                                             fragment_shader_handle, error);
+  CHECK(program_handle_) << error;
+
+  // Once the program is linked the shader objects are no longer needed
+  glDeleteShader(vertex_shader_handle);
+  glDeleteShader(fragment_shader_handle);
+
+  position_handle_ = glGetAttribLocation(program_handle_, "a_Position");
+  clip_rect_handle_ = glGetUniformLocation(program_handle_, "u_ClipRect");
+  texture_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
+  uv_transform_ = glGetUniformLocation(program_handle_, "u_UvTransform");
+  x_border_handle_ = glGetUniformLocation(program_handle_, "u_XBorder");
+  y_border_handle_ = glGetUniformLocation(program_handle_, "u_YBorder");
+}
+
+void ArRenderer::Draw(int texture_handle,
+                      const float (&uv_transform)[16],
+                      float xborder,
+                      float yborder) {
+  if (!vertex_buffer_ || !index_buffer_) {
+    GLuint buffers[2];
+    glGenBuffersARB(2, buffers);
+    vertex_buffer_ = buffers[0];
+    index_buffer_ = buffers[1];
+
+    glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
+    glBufferData(GL_ARRAY_BUFFER, base::size(kQuadVertices) * sizeof(float),
+                 kQuadVertices, GL_STATIC_DRAW);
+
+    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer_);
+    glBufferData(GL_ELEMENT_ARRAY_BUFFER,
+                 base::size(kQuadIndices) * sizeof(GLushort), kQuadIndices,
+                 GL_STATIC_DRAW);
+  }
+
+  glUseProgram(program_handle_);
+
+  // Bind vertex attributes
+  glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
+
+  // Set up position attribute.
+  glVertexAttribPointer(position_handle_, 2, GL_FLOAT, false, 0, 0);
+  glEnableVertexAttribArray(position_handle_);
+
+  // Bind texture. This is a 1:1 pixel copy since the source surface
+  // and renderbuffer destination size are resized to match, so use
+  // GL_NEAREST.
+  glActiveTexture(GL_TEXTURE0);
+  glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_handle);
+  vr::SetTexParameters(GL_TEXTURE_EXTERNAL_OES);
+  glUniform1i(texture_handle_, 0);
+
+  glUniform1f(x_border_handle_, xborder);
+  glUniform1f(y_border_handle_, yborder);
+
+  glUniformMatrix4fv(uv_transform_, 1, GL_FALSE, &uv_transform[0]);
+
+  // Blit texture to buffer
+  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer_);
+  glDrawElements(GL_TRIANGLES, base::size(kQuadIndices), GL_UNSIGNED_SHORT, 0);
+
+  glDisableVertexAttribArray(position_handle_);
+}
+
+// Note that we don't explicitly delete gl objects here, they're deleted
+// automatically when we call ShutdownGL, and deleting them here leads to
+// segfaults.
+ArRenderer::~ArRenderer() = default;
+
+}  // namespace device
diff --git a/chrome/browser/android/vr/arcore_device/ar_renderer.h b/chrome/browser/android/vr/arcore_device/ar_renderer.h
new file mode 100644
index 0000000..153eaea8
--- /dev/null
+++ b/chrome/browser/android/vr/arcore_device/ar_renderer.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_AR_RENDERER_H_
+#define CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_AR_RENDERER_H_
+
+#include "base/macros.h"
+#include "ui/gl/gl_bindings.h"
+
+namespace device {
+
+// Issues GL for rendering a texture for AR.
+// TODO(crbug.com/838013): Share code with WebVrRenderer.
+class ArRenderer {
+ public:
+  ArRenderer();
+  ~ArRenderer();
+
+  void Draw(int texture_handle,
+            const float (&uv_transform)[16],
+            float xborder,
+            float yborder);
+
+ private:
+  GLuint program_handle_ = 0;
+  GLuint position_handle_ = 0;
+  GLuint clip_rect_handle_ = 0;
+  GLuint texture_handle_ = 0;
+  GLuint uv_transform_ = 0;
+  GLuint x_border_handle_ = 0;
+  GLuint y_border_handle_ = 0;
+  GLuint vertex_buffer_ = 0;
+  GLuint index_buffer_ = 0;
+
+  DISALLOW_COPY_AND_ASSIGN(ArRenderer);
+};
+
+}  // namespace device
+
+#endif  // CHROME_BROWSER_ANDROID_VR_ARCORE_DEVICE_AR_RENDERER_H_
diff --git a/chrome/browser/android/vr/arcore_device/arcore_shim.cc b/chrome/browser/android/vr/arcore_device/arcore_shim.cc
index 7d29eb6a..4330eb8 100644
--- a/chrome/browser/android/vr/arcore_device/arcore_shim.cc
+++ b/chrome/browser/android/vr/arcore_device/arcore_shim.cc
@@ -72,8 +72,12 @@
 
   sdk_handle = dlopen("libarcore_sdk_c_minimal.so", RTLD_GLOBAL | RTLD_NOW);
   if (!sdk_handle) {
-    DLOG(ERROR) << "could not open libarcore_sdk_c_minimal.so";
+    char* error_string = nullptr;
+    error_string = dlerror();
+    LOG(ERROR) << "Could not open libarcore_sdk_c_minimal.so: " << error_string;
     return false;
+  } else {
+    VLOG(2) << "Opened shim shared library.";
   }
 
   // TODO(vollick): check SDK version.
diff --git a/chrome/browser/android/vr/vr_controller.cc b/chrome/browser/android/vr/vr_controller.cc
index 60e73ed3..e9a739c 100644
--- a/chrome/browser/android/vr/vr_controller.cc
+++ b/chrome/browser/android/vr/vr_controller.cc
@@ -343,9 +343,9 @@
       gvr::GvrApi::GetTimePointNow().monotonic_system_time_nanos;
 }
 
-std::unique_ptr<InputEventList> VrController::DetectGestures() {
+InputEventList VrController::DetectGestures() {
   if (controller_state_->GetConnectionState() != gvr::kControllerConnected) {
-    return std::make_unique<InputEventList>();
+    return {};
   }
 
   return gesture_detector_->DetectGestures(*this, base::TimeTicks::Now());
diff --git a/chrome/browser/android/vr/vr_controller.h b/chrome/browser/android/vr/vr_controller.h
index d58cb04..b77a778 100644
--- a/chrome/browser/android/vr/vr_controller.h
+++ b/chrome/browser/android/vr/vr_controller.h
@@ -53,7 +53,7 @@
   // Called once per frame to update controller state.
   void UpdateState(const gfx::Transform& head_pose);
 
-  std::unique_ptr<InputEventList> DetectGestures();
+  InputEventList DetectGestures();
 
   gfx::Quaternion Orientation() const;
   gfx::Point3F Position() const;
diff --git a/chrome/browser/android/vr/vr_shell_gl.cc b/chrome/browser/android/vr/vr_shell_gl.cc
index d48b17e..9a1d110 100644
--- a/chrome/browser/android/vr/vr_shell_gl.cc
+++ b/chrome/browser/android/vr/vr_shell_gl.cc
@@ -42,6 +42,7 @@
 #include "chrome/browser/vr/ui_interface.h"
 #include "chrome/browser/vr/ui_scene.h"
 #include "chrome/browser/vr/ui_test_input.h"
+#include "chrome/browser/vr/vr_geometry_util.h"
 #include "chrome/browser/vr/vr_gl_util.h"
 #include "chrome/common/chrome_features.h"
 #include "content/public/common/content_features.h"
@@ -96,15 +97,6 @@
 // as used for estimating prediction times.
 constexpr unsigned kWebVRSlidingAverageSize = 5;
 
-// Criteria for considering holding the app button in combination with
-// controller movement as a gesture.
-constexpr float kMinAppButtonGestureAngleRad = 0.25;
-
-// Exceeding pressing the appbutton for longer than this threshold will result
-// in a long press.
-constexpr base::TimeDelta kLongPressThreshold =
-    base::TimeDelta::FromMilliseconds(900);
-
 // Timeout for checking for the WebVR rendering GL fence. If the timeout is
 // reached, yield to let other tasks execute before rechecking.
 constexpr base::TimeDelta kWebVRFenceCheckTimeout =
@@ -1240,7 +1232,12 @@
     controller_data.connected = false;
   browser_->UpdateGamepadData(controller_data);
 
-  HandleControllerInput(laser_origin, render_info, current_time);
+  if (ShouldDrawWebVr()) {
+    auto gestures = controller_->DetectGestures();
+    ui_->HandleMenuButtonEvents(&gestures);
+  } else {
+    HandleControllerInput(laser_origin, render_info, current_time);
+  }
 }
 
 void VrShellGl::HandleControllerInput(const gfx::Point3F& laser_origin,
@@ -1270,16 +1267,9 @@
   gfx::Vector3dF controller_direction = ergo_neutral_pose;
   mat.TransformVector(&controller_direction);
 
-  HandleControllerAppButtonActivity(controller_direction);
-
-  if (ShouldDrawWebVr() && !ShouldSendGesturesToWebVr()) {
-    return;
-  }
-
   ControllerModel controller_model;
   controller_->GetTransform(&controller_model.transform);
-  std::unique_ptr<InputEventList> input_event_list =
-      controller_->DetectGestures();
+  auto input_event_list = controller_->DetectGestures();
   controller_model.touchpad_button_state = UiInputManager::ButtonState::UP;
   DCHECK(!(controller_->ButtonUpHappened(gvr::kControllerButtonClick) &&
            controller_->ButtonDownHappened(gvr::kControllerButtonClick)))
@@ -1303,7 +1293,6 @@
   controller_model.touching_touchpad = controller_->IsTouchingTrackpad();
   controller_model.touchpad_touch_position =
       controller_->GetPositionInTrackpad();
-  controller_model.app_button_long_pressed = app_button_long_pressed_;
   controller_model.last_orientation_timestamp =
       controller_->GetLastOrientationTimestamp();
   controller_model.last_touch_timestamp = controller_->GetLastTouchTimestamp();
@@ -1330,7 +1319,7 @@
 
   ReticleModel reticle_model;
   ui_->HandleInput(current_time, render_info, controller_model, &reticle_model,
-                   input_event_list.get());
+                   &input_event_list);
   ui_->OnControllerUpdated(controller_model, reticle_model);
 }
 
@@ -1347,61 +1336,6 @@
   }
 }
 
-void VrShellGl::HandleControllerAppButtonActivity(
-    const gfx::Vector3dF& controller_direction) {
-  // Note that button up/down state is transient, so ButtonDownHappened only
-  // returns true for a single frame (and we're guaranteed not to miss it).
-  if (controller_->ButtonDownHappened(
-          gvr::ControllerButton::GVR_CONTROLLER_BUTTON_APP)) {
-    controller_start_direction_ = controller_direction;
-    app_button_down_time_ = base::TimeTicks::Now();
-    app_button_long_pressed_ = false;
-  }
-
-  if (controller_->ButtonUpHappened(
-          gvr::ControllerButton::GVR_CONTROLLER_BUTTON_APP)) {
-    // A gesture is a movement of the controller while holding the App button.
-    // If the angle of the movement is within a threshold, the action is
-    // considered a regular click
-    // TODO(asimjour1): We need to refactor the gesture recognition outside of
-    // VrShellGl.
-    PlatformController::SwipeDirection direction =
-        PlatformController::kSwipeDirectionNone;
-    gfx::Vector3dF a = controller_start_direction_;
-    gfx::Vector3dF b = controller_direction;
-    a.set_y(0);
-    b.set_y(0);
-    if (a.LengthSquared() * b.LengthSquared() > 0.0) {
-      float gesture_xz_angle =
-          acos(gfx::DotProduct(a, b) / a.Length() / b.Length());
-      if (fabs(gesture_xz_angle) > kMinAppButtonGestureAngleRad) {
-        direction = gesture_xz_angle < 0
-                        ? PlatformController::kSwipeDirectionLeft
-                        : PlatformController::kSwipeDirectionRight;
-        // Post a task, rather than calling the UI directly, so as not to modify
-        // UI state in the midst of frame rendering.
-        base::ThreadTaskRunnerHandle::Get()->PostTask(
-            FROM_HERE,
-            base::BindRepeating(&UiInterface::OnAppButtonSwipePerformed,
-                                base::Unretained(ui_.get()), direction));
-      }
-    }
-    if (direction == PlatformController::kSwipeDirectionNone &&
-        !app_button_long_pressed_) {
-      base::ThreadTaskRunnerHandle::Get()->PostTask(
-          FROM_HERE, base::BindRepeating(&UiInterface::OnAppButtonClicked,
-                                         base::Unretained(ui_.get())));
-    }
-  }
-
-  if (!app_button_long_pressed_ &&
-      controller_->ButtonState(
-          gvr::ControllerButton::GVR_CONTROLLER_BUTTON_APP) &&
-      (base::TimeTicks::Now() - app_button_down_time_) > kLongPressThreshold) {
-    app_button_long_pressed_ = true;
-  }
-}
-
 bool VrShellGl::ResizeForWebVR(int16_t frame_index) {
   // Process all pending_bounds_ changes targeted for before this frame, being
   // careful of wrapping frame indices.
@@ -1479,7 +1413,7 @@
     eye_info.view_matrix = eye_matrix * head_pose;
 
     const gfx::RectF& rect = GfxRectFromUV(vp.GetSourceUv());
-    eye_info.viewport = ui_->CalculatePixelSpaceRect(render_size, rect);
+    eye_info.viewport = vr::CalculatePixelSpaceRect(render_size, rect);
 
     eye_info.proj_matrix =
         PerspectiveMatrixFromView(vp.GetSourceFov(), kZNear, kZFar);
@@ -2019,10 +1953,6 @@
   return web_vr_mode_ && ui_->ShouldRenderWebVr() && webvr_frames_received_ > 0;
 }
 
-bool VrShellGl::ShouldSendGesturesToWebVr() {
-  return ui_->IsAppButtonLongPressed() != app_button_long_pressed_;
-}
-
 void VrShellGl::DrawWebVr() {
   TRACE_EVENT0("gpu", "VrShellGl::DrawWebVr");
   // Don't need face culling, depth testing, blending, etc. Turn it all off.
diff --git a/chrome/browser/android/vr/vr_shell_gl.h b/chrome/browser/android/vr/vr_shell_gl.h
index 70ef5a5..e227dcd 100644
--- a/chrome/browser/android/vr/vr_shell_gl.h
+++ b/chrome/browser/android/vr/vr_shell_gl.h
@@ -357,7 +357,6 @@
   bool ShouldDrawWebVr();
   void DrawWebVr();
   void DrawContentQuad(bool draw_overlay_texture);
-  bool ShouldSendGesturesToWebVr();
   bool WebVrPoseByteIsValid(int pose_index_byte);
 
   void UpdateController(const RenderInfo& render_info,
@@ -561,11 +560,6 @@
 
   uint64_t webvr_frames_received_ = 0;
 
-  // Attributes for gesture detection while holding app button.
-  gfx::Vector3dF controller_start_direction_;
-  base::TimeTicks app_button_down_time_;
-  bool app_button_long_pressed_ = false;
-
   FPSMeter vr_ui_fps_meter_;
   FPSMeter webvr_fps_meter_;
 
diff --git a/chrome/browser/browser_resources.grd b/chrome/browser/browser_resources.grd
index a4511969..b0625b33 100644
--- a/chrome/browser/browser_resources.grd
+++ b/chrome/browser/browser_resources.grd
@@ -92,6 +92,9 @@
       <if expr="not is_android">
         <include name="IDR_ABOUT_SYS_HTML" file="resources\about_sys\about_sys.html" flattenhtml="true" type="BINDATA" />
       </if>
+      <include name="IDR_ACCESSIBILITY_HTML" file="resources\accessibility\accessibility.html" flattenhtml="true" allowexternalscript="true" compress="gzip" type="BINDATA" />
+      <include name="IDR_ACCESSIBILITY_CSS" file="resources\accessibility\accessibility.css" compress="gzip" type="BINDATA" />
+      <include name="IDR_ACCESSIBILITY_JS" file="resources\accessibility\accessibility.js" flattenhtml="true" compress="gzip" type="BINDATA" />
       <include name="IDR_AD_NETWORK_HASHES" file="resources\ad_networks.dat" type="BINDATA" />
       <include name="IDR_BLUETOOTH_ADAPTER_MOJO_JS" file="${root_gen_dir}\device\bluetooth\public\mojom\adapter.mojom.js" use_base_dir="false" type="BINDATA" compress="gzip" />
       <include name="IDR_BLUETOOTH_DEVICE_MOJO_JS" file="${root_gen_dir}\device\bluetooth\public\mojom\device.mojom.js" use_base_dir="false" type="BINDATA" compress="gzip" />
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 1be17fd8..8dbeb5a2 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2052,9 +2052,11 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
       extensions::switches::kAllowHTTPBackgroundPage,
       extensions::switches::kAllowLegacyExtensionManifests,
+      extensions::switches::kDisableExtensionsHttpThrottling,
       extensions::switches::kEnableEmbeddedExtensionOptions,
       extensions::switches::kEnableExperimentalExtensionApis,
       extensions::switches::kExtensionsOnChromeURLs,
+      extensions::switches::kSetExtensionThrottleTestParams,  // For tests only.
       extensions::switches::kWhitelistedExtensionID,
 #endif
       switches::kAllowInsecureLocalhost,
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
index 598afce..3bfe11e 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -116,35 +116,36 @@
 
 }  // namespace
 
-class ChromeVoxPanelWidgetObserver : public views::WidgetObserver {
+class AccessibilityPanelWidgetObserver : public views::WidgetObserver {
  public:
-  ChromeVoxPanelWidgetObserver(views::Widget* widget,
-                               AccessibilityManager* manager)
-      : widget_(widget), manager_(manager) {
+  AccessibilityPanelWidgetObserver(views::Widget* widget,
+                                   base::OnceCallback<void()> on_destroying)
+      : widget_(widget), on_destroying_(std::move(on_destroying)) {
     widget_->AddObserver(this);
   }
 
-  ~ChromeVoxPanelWidgetObserver() override = default;
+  ~AccessibilityPanelWidgetObserver() override = default;
 
   void OnWidgetClosing(views::Widget* widget) override {
     CHECK_EQ(widget_, widget);
     widget->RemoveObserver(this);
-    manager_->OnChromeVoxPanelClosing();
-    // |this| is deleted.
+    std::move(on_destroying_).Run();
+    // |this| should be deleted.
   }
 
   void OnWidgetDestroying(views::Widget* widget) override {
     CHECK_EQ(widget_, widget);
     widget->RemoveObserver(this);
-    manager_->OnChromeVoxPanelDestroying();
-    // |this| is deleted.
+    std::move(on_destroying_).Run();
+    // |this| should be deleted.
   }
 
  private:
   views::Widget* widget_;
-  AccessibilityManager* manager_;
 
-  DISALLOW_COPY_AND_ASSIGN(ChromeVoxPanelWidgetObserver);
+  base::OnceCallback<void()> on_destroying_;
+
+  DISALLOW_COPY_AND_ASSIGN(AccessibilityPanelWidgetObserver);
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1192,8 +1193,10 @@
 
   if (!chromevox_panel_) {
     chromevox_panel_ = new ChromeVoxPanel(profile_);
-    chromevox_panel_widget_observer_.reset(
-        new ChromeVoxPanelWidgetObserver(chromevox_panel_->GetWidget(), this));
+    chromevox_panel_widget_observer_.reset(new AccessibilityPanelWidgetObserver(
+        chromevox_panel_->GetWidget(),
+        base::BindOnce(&AccessibilityManager::OnChromeVoxPanelDestroying,
+                       base::Unretained(this))));
   }
 
   if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -1230,13 +1233,10 @@
     chromevox_panel_ = nullptr;
   }
   chromevox_panel_ = new ChromeVoxPanel(profile_);
-  chromevox_panel_widget_observer_.reset(
-      new ChromeVoxPanelWidgetObserver(chromevox_panel_->GetWidget(), this));
-}
-
-void AccessibilityManager::OnChromeVoxPanelClosing() {
-  chromevox_panel_widget_observer_.reset();
-  chromevox_panel_ = nullptr;
+  chromevox_panel_widget_observer_.reset(new AccessibilityPanelWidgetObserver(
+      chromevox_panel_->GetWidget(),
+      base::BindOnce(&AccessibilityManager::OnChromeVoxPanelDestroying,
+                     base::Unretained(this))));
 }
 
 void AccessibilityManager::OnChromeVoxPanelDestroying() {
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.h b/chrome/browser/chromeos/accessibility/accessibility_manager.h
index 716001db..b67dbba4 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.h
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.h
@@ -77,7 +77,7 @@
 typedef AccessibilityStatusCallbackList::Subscription
     AccessibilityStatusSubscription;
 
-class ChromeVoxPanelWidgetObserver;
+class AccessibilityPanelWidgetObserver;
 
 enum class PlaySoundOption {
   // The sound is always played.
@@ -391,7 +391,7 @@
   bool braille_ime_current_;
 
   ChromeVoxPanel* chromevox_panel_;
-  std::unique_ptr<ChromeVoxPanelWidgetObserver>
+  std::unique_ptr<AccessibilityPanelWidgetObserver>
       chromevox_panel_widget_observer_;
 
   std::string keyboard_listener_extension_id_;
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc b/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc
index 5bb023d..cccb1f4 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager_browsertest.cc
@@ -15,6 +15,7 @@
 #include "chrome/browser/prefs/pref_service_syncable_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/extensions/extension_constants.h"
 #include "chrome/test/base/in_process_browser_test.h"
@@ -651,7 +652,15 @@
           user_manager::GuestAccountId().GetUserEmail());
     } else if (GetParam() ==
                AccountId::FromUserEmail(kTestSupervisedUserName)) {
-      command_line->AppendSwitchASCII(::switches::kSupervisedUserId, "asdf");
+      command_line->AppendSwitchASCII(::switches::kSupervisedUserId,
+                                      supervised_users::kChildAccountSUID);
+#if defined(OS_CHROMEOS)
+      command_line->AppendSwitchASCII(
+          chromeos::switches::kLoginUser,
+          "supervised_user@locally-managed.localhost");
+      command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile,
+                                      "hash");
+#endif
     }
     AccessibilityManager::SetBrailleControllerForTest(&braille_controller_);
   }
diff --git a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
index 4943b69..0803e12 100644
--- a/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/spoken_feedback_browsertest.cc
@@ -29,6 +29,7 @@
 #include "chrome/browser/extensions/api/braille_display_private/stub_braille_controller.h"
 #include "chrome/browser/speech/tts_controller.h"
 #include "chrome/browser/speech/tts_platform.h"
+#include "chrome/browser/ui/ash/ksv/keyboard_shortcut_viewer_util.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_commands.h"
 #include "chrome/browser/ui/browser_window.h"
@@ -243,6 +244,17 @@
   EXPECT_EQ("Not pressed", speech_monitor_.GetNextUtterance());
 }
 
+// Tests the keyboard shortcut viewer, which is an out-of-process mojo app.
+IN_PROC_BROWSER_TEST_F(LoggedInSpokenFeedbackTest, KeyboardShortcutViewer) {
+  EnableChromeVox();
+  keyboard_shortcut_viewer_util::ShowKeyboardShortcutViewer();
+
+  // Focus should move to the search field and ChromeVox should speak it.
+  while ("Search for keyboard shortcuts" !=
+         speech_monitor_.GetNextUtterance()) {
+  }
+}
+
 //
 // Spoken feedback tests in both a logged in browser window and guest mode.
 //
@@ -325,11 +337,9 @@
   EXPECT_TRUE(base::MatchPattern(speech_monitor_.GetNextUtterance(), "Button"));
 }
 
-IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, NavigateAppLauncher) {
-  // TODO(newcomer): reimplement this test once the AppListFocus changes are
-  // complete (http://crbug.com/784942).
-  return;
-
+// TODO(newcomer): reimplement this test once the AppListFocus changes are
+// complete (http://crbug.com/784942).
+IN_PROC_BROWSER_TEST_P(SpokenFeedbackTest, DISABLED_NavigateAppLauncher) {
   EnableChromeVox();
 
   EXPECT_TRUE(PerformAcceleratorAction(ash::FOCUS_SHELF));
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc
index 562dd6fb..261820e 100644
--- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc
+++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.cc
@@ -58,8 +58,10 @@
   PreconditionsChanged();
 }
 
-void ArcKioskAppService::OnAppReadyChanged(const std::string& id, bool ready) {
-  if (!app_id_.empty() && id != app_id_)
+void ArcKioskAppService::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (!app_id_.empty() && app_id != app_id_)
     return;
   PreconditionsChanged();
 }
diff --git a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h
index 80b15f3..2586309 100644
--- a/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h
+++ b/chrome/browser/chromeos/app_mode/arc/arc_kiosk_app_service.h
@@ -65,7 +65,8 @@
   // ArcAppListPrefs::Observer overrides
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
-  void OnAppReadyChanged(const std::string& id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
   void OnTaskCreated(int32_t task_id,
                      const std::string& package_name,
                      const std::string& activity,
diff --git a/chrome/browser/chromeos/device_sync/BUILD.gn b/chrome/browser/chromeos/device_sync/BUILD.gn
deleted file mode 100644
index e2ac34af..0000000
--- a/chrome/browser/chromeos/device_sync/BUILD.gn
+++ /dev/null
@@ -1,14 +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.
-
-static_library("device_sync") {
-  sources = [
-    "device_sync_client_factory.cc",
-    "device_sync_client_factory.h",
-  ]
-
-  deps = [
-    "//chromeos/services/device_sync/public/cpp/",
-  ]
-}
diff --git a/chrome/browser/chromeos/extensions/accessibility_features_apitest.cc b/chrome/browser/chromeos/extensions/accessibility_features_apitest.cc
index 0664cdc..3a456314 100644
--- a/chrome/browser/chromeos/extensions/accessibility_features_apitest.cc
+++ b/chrome/browser/chromeos/extensions/accessibility_features_apitest.cc
@@ -194,6 +194,36 @@
       << message_;
 }
 
+IN_PROC_BROWSER_TEST_P(AccessibilityFeaturesApiTest, PRE_Get_ComponentApp) {
+  EXPECT_FALSE(RunPlatformAppTestWithFlags(GetTestExtensionPath(), "{}",
+                                           kFlagLoadAsComponent))
+      << message_;
+}
+
+// A regression test for https://crbug.com/454513. Ensure that loading a
+// component extension with the same version as has previously loaded, correctly
+// sets up access to accessibility prefs. Otherwise,this is the same as the
+// |Get| test.
+IN_PROC_BROWSER_TEST_P(AccessibilityFeaturesApiTest, Get_ComponentApp) {
+  // WARNING: Make sure that spoken feedback is not among enabled_features
+  // (see |AccessibilityFeaturesApiTest.Set| test for the reason).
+  std::vector<std::string> enabled_features = {"largeCursor", "stickyKeys",
+                                               "highContrast"};
+
+  std::vector<std::string> disabled_features = {
+      "spokenFeedback", "screenMagnifier", "autoclick", "virtualKeyboard"};
+
+  ASSERT_TRUE(
+      InitPrefServiceForTest(GetPrefs(), enabled_features, disabled_features));
+
+  std::string test_arg;
+  ASSERT_TRUE(GenerateTestArg("getterTest", enabled_features, disabled_features,
+                              &test_arg));
+  EXPECT_TRUE(RunPlatformAppTestWithFlags(
+      GetTestExtensionPath(), test_arg.c_str(), kFlagLoadAsComponent))
+      << message_;
+}
+
 // Tests that an extension with modify permission can modify accessibility
 // features, while an extension that doesn't have the permission can't.
 IN_PROC_BROWSER_TEST_P(AccessibilityFeaturesApiTest, Set) {
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
index cbb6012..26dcc772 100644
--- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
+++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -544,9 +544,9 @@
 };
 
 // Test fixture class for testing multi-profile features.
-class MultiProfileFileManagerBrowserTest : public FileManagerBrowserTestBase {
+class MultiProfileFilesAppBrowserTest : public FileManagerBrowserTestBase {
  public:
-  MultiProfileFileManagerBrowserTest() = default;
+  MultiProfileFilesAppBrowserTest() = default;
 
  protected:
   // Enables multi-profiles.
@@ -637,25 +637,25 @@
  private:
   std::string test_case_name_;
 
-  DISALLOW_COPY_AND_ASSIGN(MultiProfileFileManagerBrowserTest);
+  DISALLOW_COPY_AND_ASSIGN(MultiProfileFilesAppBrowserTest);
 };
 
-IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest, PRE_BasicDownloads) {
+IN_PROC_BROWSER_TEST_F(MultiProfileFilesAppBrowserTest, PRE_BasicDownloads) {
   AddAllUsers();
 }
 
-IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest, BasicDownloads) {
+IN_PROC_BROWSER_TEST_F(MultiProfileFilesAppBrowserTest, BasicDownloads) {
   AddAllUsers();
   // Sanity check that normal operations work in multi-profile.
   set_test_case_name("keyboardCopyDownloads");
   StartTest();
 }
 
-IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest, PRE_BasicDrive) {
+IN_PROC_BROWSER_TEST_F(MultiProfileFilesAppBrowserTest, PRE_BasicDrive) {
   AddAllUsers();
 }
 
-IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest, BasicDrive) {
+IN_PROC_BROWSER_TEST_F(MultiProfileFilesAppBrowserTest, BasicDrive) {
   AddAllUsers();
   // Sanity check that normal operations work in multi-profile.
   set_test_case_name("keyboardCopyDrive");
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
index ce16101cd..a43a666c 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_mojo.cc
@@ -259,8 +259,18 @@
       GetOobeUI()->GetGaiaScreenView()->ShowGaiaAsync(prefilled_account);
     LoadWallpaper(*prefilled_account);
   } else {
-    if (GetOobeUI()->current_screen() != OobeScreen::SCREEN_GAIA_SIGNIN)
+    // Two criteria here:
+    // 1) If we have started a wizard other than Gaia signin (signified by the
+    // current_screen() changing), we need to reload the Gaia screen, otherwise
+    // dialog_->Show() will show the wrong screen. 2) While login is being
+    // loaded in, the current_screen is UNKNOWN. During this time, the
+    // GaiaScreenView is initialized, after which ShowGaiaAsync() is called to
+    // load up the Gaia screen. If we try to ShowGaiaAsync() before this
+    // initialization is complete, the Gaia screen UI can crash and get stuck.
+    if (GetOobeUI()->current_screen() != OobeScreen::SCREEN_GAIA_SIGNIN &&
+        GetOobeUI()->current_screen() != OobeScreen::SCREEN_UNKNOWN) {
       GetOobeUI()->GetGaiaScreenView()->ShowGaiaAsync(base::nullopt);
+    }
     LoadSigninWallpaper();
   }
 
@@ -327,6 +337,19 @@
   user_context.SetIsUsingPin(authenticated_by_pin);
   user_context.SetKey(
       Key(chromeos::Key::KEY_TYPE_PASSWORD_PLAIN, "" /*salt*/, password));
+  // Save the user's plaintext password for possible authentication to a
+  // network. If the user's OpenNetworkConfiguration policy contains a
+  // ${PASSWORD} variable, then the user's password will be used to authenticate
+  // to the specified network.
+  //
+  // The user's password needs to be saved in memory until the policy can be
+  // examined. When the policy comes in, if it does not contain the ${PASSWORD}
+  // variable, the user's password will be discarded. If it contains the
+  // password, it will be sent to the session manager, which will then save it
+  // in a keyring so it can be retrieved for authenticating to the network.
+  //
+  // More details can be found in https://crbug.com/386606
+  user_context.SetPasswordKey(Key(password));
   if (account_id.GetAccountType() == AccountType::ACTIVE_DIRECTORY &&
       (user_context.GetUserType() !=
        user_manager::UserType::USER_TYPE_ACTIVE_DIRECTORY)) {
diff --git a/chrome/browser/chromeos/multidevice_setup/BUILD.gn b/chrome/browser/chromeos/multidevice_setup/BUILD.gn
deleted file mode 100644
index 5f3ac25..0000000
--- a/chrome/browser/chromeos/multidevice_setup/BUILD.gn
+++ /dev/null
@@ -1,14 +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.
-
-component("multidevice_setup") {
-  sources = [
-    "multidevice_setup_client_factory.cc",
-    "multidevice_setup_client_factory.h",
-  ]
-
-  deps = [
-    "//chromeos/services/multidevice_setup/public/cpp",
-  ]
-}
diff --git a/chrome/browser/conflicts/module_blacklist_cache_util_win.cc b/chrome/browser/conflicts/module_blacklist_cache_util_win.cc
index 8bb5b6e..07042d4f 100644
--- a/chrome/browser/conflicts/module_blacklist_cache_util_win.cc
+++ b/chrome/browser/conflicts/module_blacklist_cache_util_win.cc
@@ -268,10 +268,10 @@
         return module_list_filter.IsWhitelisted(
             base::StringPiece(
                 reinterpret_cast<const char*>(&module.basename_hash[0]),
-                sizeof(module.basename_hash)),
+                base::size(module.basename_hash)),
             base::StringPiece(
                 reinterpret_cast<const char*>(&module.code_id_hash[0]),
-                sizeof(module.code_id_hash)));
+                base::size(module.code_id_hash)));
       });
 }
 
diff --git a/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc b/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc
index 1d01be0..e29df43 100644
--- a/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc
+++ b/chrome/browser/conflicts/module_blacklist_cache_util_win_unittest.cc
@@ -186,8 +186,10 @@
 
   void AddWhitelistedModule(const third_party_dlls::PackedListModule& module) {
     whitelisted_modules_.emplace(
-        reinterpret_cast<const char*>(module.basename_hash),
-        reinterpret_cast<const char*>(module.code_id_hash));
+        base::StringPiece(reinterpret_cast<const char*>(module.basename_hash),
+                          base::size(module.basename_hash)),
+        base::StringPiece(reinterpret_cast<const char*>(module.code_id_hash),
+                          base::size(module.basename_hash)));
   }
 
   // ModuleListFilter:
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index 6763b22..b586a01 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -903,6 +903,7 @@
     "//third_party/leveldatabase",
     "//third_party/libaddressinput:util",
     "//third_party/re2",
+    "//third_party/sqlite",
     "//third_party/zlib/google:zip",
     "//ui/accessibility:ax_enums_mojo",
     "//ui/base",
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
index 4819cef5..f59c8a2 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_apitest.cc
@@ -351,24 +351,6 @@
 }
 
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
-
-class ExtensionWebstorePrivateApiTestSupervised
-    : public ExtensionWebstorePrivateApiTest {
- public:
-  void SetUpCommandLine(base::CommandLine* command_line) override {
-    ExtensionWebstorePrivateApiTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitchASCII(switches::kSupervisedUserId, "not_empty");
-  }
-};
-
-// Tests that extension installation is blocked for supervised users.
-// Note: This will have to be updated if we enable SU-initiated installs.
-IN_PROC_BROWSER_TEST_F(ExtensionWebstorePrivateApiTestSupervised,
-                       InstallBlocked) {
-  ASSERT_TRUE(
-      RunInstallTest("begin_install_fail_supervised.html", "extension.crx"));
-}
-
 class ExtensionWebstorePrivateApiTestChild
     : public ExtensionWebstorePrivateApiTest {
  public:
diff --git a/chrome/browser/extensions/extension_action_runner.h b/chrome/browser/extensions/extension_action_runner.h
index a183e50..9ede1c3 100644
--- a/chrome/browser/extensions/extension_action_runner.h
+++ b/chrome/browser/extensions/extension_action_runner.h
@@ -101,6 +101,9 @@
                                         const base::Closure& callback) {
     return RequestScriptInjection(extension, run_location, callback);
   }
+  void ClearInjectionsForTesting(const Extension& extension) {
+    pending_scripts_.erase(extension.id());
+  }
 #endif  // defined(UNIT_TEST)
 
  private:
diff --git a/chrome/browser/extensions/extension_prefs_unittest.cc b/chrome/browser/extensions/extension_prefs_unittest.cc
index c614a09e..a2216ece 100644
--- a/chrome/browser/extensions/extension_prefs_unittest.cc
+++ b/chrome/browser/extensions/extension_prefs_unittest.cc
@@ -993,6 +993,13 @@
     EXPECT_FALSE(prefs()->ReadPrefAsURLPatternSet(no_component_extension_->id(),
                                                   pref_key, &scriptable_hosts,
                                                   valid_schemes));
+
+    // Both extensions should be registered with the ExtensionPrefValueMap.
+    // See https://crbug.com/454513.
+    EXPECT_TRUE(prefs_.extension_pref_value_map()->CanExtensionControlPref(
+        component_extension_->id(), "a_pref", false));
+    EXPECT_TRUE(prefs_.extension_pref_value_map()->CanExtensionControlPref(
+        no_component_extension_->id(), "a_pref", false));
   }
 
  private:
diff --git a/chrome/browser/extensions/extension_request_limiting_throttle_browsertest.cc b/chrome/browser/extensions/extension_url_loader_throttle_browsertest.cc
similarity index 65%
rename from chrome/browser/extensions/extension_request_limiting_throttle_browsertest.cc
rename to chrome/browser/extensions/extension_url_loader_throttle_browsertest.cc
index f7d004f..ca80f5ca 100644
--- a/chrome/browser/extensions/extension_request_limiting_throttle_browsertest.cc
+++ b/chrome/browser/extensions/extension_url_loader_throttle_browsertest.cc
@@ -10,9 +10,9 @@
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/extensions/extension_browsertest.h"
 #include "chrome/browser/profiles/profile_io_data.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/ui_test_utils.h"
-#include "extensions/browser/extension_throttle_manager.h"
+#include "content/public/common/content_switches.h"
+#include "extensions/common/switches.h"
 #include "extensions/test/result_catcher.h"
 #include "net/base/backoff_entry.h"
 #include "net/base/url_util.h"
@@ -60,51 +60,16 @@
 
 }  // namespace
 
-class ExtensionRequestLimitingThrottleBrowserTest
-    : public ExtensionBrowserTest {
+class ExtensionURLLoaderThrottleBrowserTest : public ExtensionBrowserTest {
  public:
+  void SetUpCommandLine(base::CommandLine* command_line) override {
+    ExtensionBrowserTest::SetUpCommandLine(command_line);
+    command_line->AppendSwitch(
+        extensions::switches::kSetExtensionThrottleTestParams);
+  }
+
   void SetUpOnMainThread() override {
     ExtensionBrowserTest::SetUpOnMainThread();
-    ProfileIOData* io_data =
-        ProfileIOData::FromResourceContext(profile()->GetResourceContext());
-    ExtensionThrottleManager* manager = io_data->GetExtensionThrottleManager();
-    if (manager) {
-      // Requests issued within within |kUserGestureWindowMs| of a user gesture
-      // are also considered as user gestures (see
-      // resource_dispatcher_host_impl.cc), so these tests need to bypass the
-      // checking of the net::LOAD_MAYBE_USER_GESTURE load flag in the manager
-      // in order to test the throttling logic.
-      manager->SetIgnoreUserGestureLoadFlagForTests(true);
-      std::unique_ptr<net::BackoffEntry::Policy> policy(
-          new net::BackoffEntry::Policy{
-              // Number of initial errors (in sequence) to ignore before
-              // applying
-              // exponential back-off rules.
-              1,
-
-              // Initial delay for exponential back-off in ms.
-              10 * 60 * 1000,
-
-              // Factor by which the waiting time will be multiplied.
-              10,
-
-              // Fuzzing percentage. ex: 10% will spread requests randomly
-              // between 90%-100% of the calculated time.
-              0.1,
-
-              // Maximum amount of time we are willing to delay our request in
-              // ms.
-              15 * 60 * 1000,
-
-              // Time to keep an entry from being discarded even when it
-              // has no significant state, -1 to never discard.
-              -1,
-
-              // Don't use initial delay unless the last request was an error.
-              false,
-          });
-      manager->SetBackoffPolicyForTests(std::move(policy));
-    }
     // Requests to 127.0.0.1 bypass throttling, so set up a host resolver rule
     // to use a fake domain.
     host_resolver()->AddRule("www.example.com", "127.0.0.1");
@@ -113,10 +78,18 @@
     ASSERT_TRUE(extension_);
   }
 
-  void RunTest(const std::string& file_path, const std::string& request_url) {
+  void RunTest(const std::string& file_path,
+               const std::string& request_url,
+               const std::string& expected_throttled_request_num) {
     ResultCatcher catcher;
-    GURL test_url = net::AppendQueryParameter(
+    const GURL unthrottled_test_url = net::AppendQueryParameter(
         extension_->GetResourceURL(file_path), "url", request_url);
+    const GURL test_url =
+        expected_throttled_request_num.empty()
+            ? unthrottled_test_url
+            : net::AppendQueryParameter(unthrottled_test_url,
+                                        "expectedFailRequestNum",
+                                        expected_throttled_request_num);
     ui_test_utils::NavigateToURL(browser(), test_url);
     ASSERT_TRUE(catcher.GetNextResult());
   }
@@ -125,139 +98,136 @@
   const Extension* extension_;
 };
 
-class ExtensionRequestLimitingThrottleCommandLineBrowserTest
-    : public ExtensionRequestLimitingThrottleBrowserTest {
+class ExtensionURLLoaderThrottleCommandLineBrowserTest
+    : public ExtensionURLLoaderThrottleBrowserTest {
  public:
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    ExtensionRequestLimitingThrottleBrowserTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitch(switches::kDisableExtensionsHttpThrottling);
+    ExtensionURLLoaderThrottleBrowserTest::SetUpCommandLine(command_line);
+    command_line->AppendSwitch(
+        extensions::switches::kDisableExtensionsHttpThrottling);
   }
 };
 
 // Tests that if the same URL is requested repeatedly by an extension, it will
 // eventually be throttled.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
-                       ThrottleRequest) {
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest, ThrottleRequest) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, false, false));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_eventually_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              "3"));
 }
 
 // Tests that if the same URL is repeatedly requested by an extension, and the
 // response is served from the cache, it will not be throttled.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest,
                        DoNotThrottleCachedResponse) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, false, true));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_not_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              ""));
 }
 
-#if defined(OS_CHROMEOS)
-// Flaky: https://crbug.com/836188.
-#define MAYBE_ThrottleRequest_Redirect DISABLED_ThrottleRequest_Redirect
-#else
-#define MAYBE_ThrottleRequest_Redirect ThrottleRequest_Redirect
-#endif
 // Tests that the redirected request is also being throttled.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
-                       MAYBE_ThrottleRequest_Redirect) {
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest,
+                       ThrottleRequest_Redirect) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, false, false));
   ASSERT_TRUE(embedded_test_server()->Start());
   // Issue a bunch of requests to a url which gets redirected to a new url that
   // generates 503.
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_eventually_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/redirect",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              "3"));
 
   // Now requests to both URLs should be throttled. Explicitly validate that the
   // second URL is throttled.
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_throttled_on_first_try.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              "1"));
 }
 
 // Tests that if both redirect (302) and non-redirect (503) responses are
 // served from cache, the extension throttle does not throttle the request.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest,
                        DoNotThrottleCachedResponse_Redirect) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, true, true));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_not_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/redirect",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              ""));
 }
 
-#if defined(OS_CHROMEOS)
-// Flaky: https://crbug.com/836188.
-#define MAYBE_ThrottleRequest_RedirectCached \
-  DISABLED_ThrottleRequest_RedirectCached
-#else
-#define MAYBE_ThrottleRequest_RedirectCached ThrottleRequest_RedirectCached
-#endif
 // Tests that if the redirect (302) is served from cache, but the non-redirect
 // (503) is not, the extension throttle throttles the requests for the second
 // url.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
-                       MAYBE_ThrottleRequest_RedirectCached) {
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest,
+                       ThrottleRequest_RedirectCached) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, true, false));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_eventually_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/redirect",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              "3"));
 
   // Explicitly validate that the second URL is throttled.
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_throttled_on_first_try.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              "1"));
 }
 
 // Tests that if the redirect (302) is not served from cache, but the
 // non-redirect (503) is, the extension throttle only throttles requests to the
 // redirect URL.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleBrowserTest,
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleBrowserTest,
                        DoNotThrottleCachedResponse_NonRedirectCached) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, false, true));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_not_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/redirect",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              ""));
 
   // Explicitly validate that the second URL is not throttled.
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_not_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              ""));
 }
 
 // Tests that if switches::kDisableExtensionsHttpThrottling is set on the
 // command line, throttling is disabled.
-IN_PROC_BROWSER_TEST_F(ExtensionRequestLimitingThrottleCommandLineBrowserTest,
+IN_PROC_BROWSER_TEST_F(ExtensionURLLoaderThrottleCommandLineBrowserTest,
                        ThrottleRequestDisabled) {
   embedded_test_server()->RegisterRequestHandler(
       base::BindRepeating(&HandleRequest, false, false));
   ASSERT_TRUE(embedded_test_server()->Start());
   ASSERT_NO_FATAL_FAILURE(
-      RunTest("test_request_not_throttled.html",
+      RunTest("test_request_throttle.html",
               base::StringPrintf("http://www.example.com:%d/test_throttle",
-                                 embedded_test_server()->port())));
+                                 embedded_test_server()->port()),
+              ""));
 }
 
 }  // namespace extensions
diff --git a/chrome/browser/extensions/webstore_startup_installer_browsertest.cc b/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
index 2682fff..498ab5c 100644
--- a/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
+++ b/chrome/browser/extensions/webstore_startup_installer_browsertest.cc
@@ -28,6 +28,14 @@
 #include "net/dns/mock_host_resolver.h"
 #include "url/gurl.h"
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
+#endif
+
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_switches.h"
+#endif
+
 using content::WebContents;
 using extensions::DictionaryBuilder;
 using extensions::Extension;
@@ -174,13 +182,21 @@
   EXPECT_TRUE(registry->enabled_extensions().GetByID(kTestExtensionId));
 }
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
 class WebstoreStartupInstallerSupervisedUsersTest
     : public WebstoreStartupInstallerTest {
  public:
   // InProcessBrowserTest overrides:
   void SetUpCommandLine(base::CommandLine* command_line) override {
     WebstoreStartupInstallerTest::SetUpCommandLine(command_line);
-    command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
+    command_line->AppendSwitchASCII(switches::kSupervisedUserId,
+                                    supervised_users::kChildAccountSUID);
+#if defined(OS_CHROMEOS)
+    command_line->AppendSwitchASCII(
+        chromeos::switches::kLoginUser,
+        "supervised_user@locally-managed.localhost");
+    command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "hash");
+#endif
   }
 };
 
@@ -198,6 +214,7 @@
   InfoBarService* infobar_service = InfoBarService::FromWebContents(contents);
   EXPECT_EQ(0u, infobar_service->infobar_count());
 }
+#endif  // BUILDFLAG(ENABLE_SUPERVISED_USERS)
 
 // The unpack failure test needs to use a different install .crx, which is
 // specified via a command-line flag, so it needs its own test subclass.
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 53b77a42..b47f739 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -731,6 +731,10 @@
 extern const char kEnableSyncUserConsentSeparateTypeDescription[] =
     "Emit user consents as a separate sync type instead of user events.";
 
+const char kEnableSyncUSSBookmarksName[] = "Enable USS for bookmarks sync";
+const char kEnableSyncUSSBookmarksDescription[] =
+    "Enables the new, experimental implementation of bookmark sync";
+
 const char kEnableSyncUSSSessionsName[] = "Enable USS for sessions sync";
 const char kEnableSyncUSSSessionsDescription[] =
     "Enables the new, experimental implementation of session sync (aka tab "
@@ -1005,6 +1009,12 @@
 const char kIconNtpDescription[] =
     "Enable the experimental New Tab page using large icons.";
 
+const char kIdnNavigationSuggestionsName[] =
+    "Navigation suggestions for internationalized domain names";
+const char kIdnNavigationSuggestionsDescription[] =
+    "Enable navigation suggestions for internationalized domain names that are "
+    "visually similar to popular domains.";
+
 const char kIgnoreGpuBlacklistName[] = "Override software rendering list";
 const char kIgnoreGpuBlacklistDescription[] =
     "Overrides the built-in software rendering list and enables "
@@ -2391,6 +2401,10 @@
     "When NTPButton is enabled, the first tile of the Suggested Tiles will be "
     "used for homepage. It will not have an effect when NTPButton is disabled.";
 
+const char kIncognitoStringsName[] = "Alternate incognito strings";
+const char kIncognitoStringsDescription[] =
+    "Show alternate incognito strings if enabled.";
+
 const char kInterestFeedContentSuggestionsDescription[] =
     "Use the interest feed to render content suggestions. Currently "
     "content "
@@ -3412,6 +3426,12 @@
     "seamlessly continue reading a web page when they switch devices from "
     "phones or tablets to Chromebooks.";
 
+extern const char kEnableZeroStateSuggestionsName[] =
+    "Enable Zero State Suggetions";
+extern const char kEnableZeroStateSuggestionsDescription[] =
+    "Enable Zero State Suggestions feature in Launcher, which will show "
+    "suggetions when launcher search box is active with an empty query";
+
 #endif  // defined(OS_CHROMEOS)
 
 // Random platform combinations -----------------------------------------------
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 6e32a64..7562c26 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -459,6 +459,9 @@
 extern const char kEnableSyncUserConsentSeparateTypeName[];
 extern const char kEnableSyncUserConsentSeparateTypeDescription[];
 
+extern const char kEnableSyncUSSBookmarksName[];
+extern const char kEnableSyncUSSBookmarksDescription[];
+
 extern const char kEnableSyncUSSSessionsName[];
 extern const char kEnableSyncUSSSessionsDescription[];
 
@@ -627,6 +630,9 @@
 extern const char kIconNtpName[];
 extern const char kIconNtpDescription[];
 
+extern const char kIdnNavigationSuggestionsName[];
+extern const char kIdnNavigationSuggestionsDescription[];
+
 extern const char kIgnoreGpuBlacklistName[];
 extern const char kIgnoreGpuBlacklistDescription[];
 
@@ -1448,6 +1454,9 @@
 extern const char kHomepageTileName[];
 extern const char kHomepageTileDescription[];
 
+extern const char kIncognitoStringsName[];
+extern const char kIncognitoStringsDescription[];
+
 extern const char kInterestFeedContentSuggestionsName[];
 extern const char kInterestFeedContentSuggestionsDescription[];
 
@@ -2086,6 +2095,9 @@
 extern const char kEnableContinueReadingName[];
 extern const char kEnableContinueReadingDescription[];
 
+extern const char kEnableZeroStateSuggestionsName[];
+extern const char kEnableZeroStateSuggestionsDescription[];
+
 #endif  // #if defined(OS_CHROMEOS)
 
 // Random platform combinations -----------------------------------------------
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc
index 8230f02..ef581fdf 100644
--- a/chrome/browser/infobars/infobars_browsertest.cc
+++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -349,8 +349,9 @@
     case IBD::ALTERNATE_NAV_INFOBAR_DELEGATE: {
       AutocompleteMatch match;
       match.destination_url = GURL("http://intranetsite/");
-      AlternateNavInfoBarDelegate::Create(GetWebContents(), base::string16(),
-                                          match, GURL("http://example.com/"));
+      AlternateNavInfoBarDelegate::CreateForOmniboxNavigation(
+          GetWebContents(), base::string16(), match,
+          GURL("http://example.com/"));
       break;
     }
 
diff --git a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
index 7fd7036..f77c238 100644
--- a/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
+++ b/chrome/browser/loader/chrome_resource_dispatcher_host_delegate.cc
@@ -97,8 +97,6 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 #include "chrome/browser/extensions/api/streams_private/streams_private_api.h"
 #include "chrome/browser/extensions/user_script_listener.h"
-#include "chrome/browser/renderer_host/chrome_navigation_ui_data.h"
-#include "extensions/browser/extension_throttle_manager.h"
 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
 #include "extensions/common/extension_urls.h"
 #include "extensions/common/user_script.h"
@@ -519,15 +517,6 @@
                                                     resource_type);
   if (wait_for_extensions_init_throttle)
     throttles->push_back(base::WrapUnique(wait_for_extensions_init_throttle));
-
-  extensions::ExtensionThrottleManager* extension_throttle_manager =
-      io_data->GetExtensionThrottleManager();
-  if (extension_throttle_manager) {
-    std::unique_ptr<content::ResourceThrottle> extension_throttle =
-        extension_throttle_manager->MaybeCreateThrottle(request);
-    if (extension_throttle)
-      throttles->push_back(std::move(extension_throttle));
-  }
 #endif
 
   const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
diff --git a/chrome/browser/media/webrtc/webrtc_browsertest_base.cc b/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
index d8d8e73..14d0a36 100644
--- a/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
+++ b/chrome/browser/media/webrtc/webrtc_browsertest_base.cc
@@ -528,7 +528,8 @@
 
 void WebRtcTestBase::VerifyStatsGeneratedCallback(
     content::WebContents* tab) const {
-  EXPECT_EQ("ok-got-stats", ExecuteJavascript("verifyStatsGenerated()", tab));
+  EXPECT_EQ("ok-got-stats",
+            ExecuteJavascript("verifyLegacyStatsGenerated()", tab));
 }
 
 std::vector<std::string> WebRtcTestBase::VerifyStatsGeneratedPromise(
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
index d29f390..87fb685 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.cc
@@ -7,12 +7,19 @@
 #include "base/optional.h"
 #include "base/time/time.h"
 #include "chrome/browser/loader/chrome_navigation_data.h"
+#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
+#include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_factory.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_observer.h"
 #include "chrome/browser/page_load_metrics/page_load_metrics_util.h"
 #include "chrome/common/page_load_metrics/page_load_timing.h"
 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_data.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_service.h"
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h"
 #include "components/previews/content/previews_content_util.h"
 #include "components/previews/core/previews_experiments.h"
+#include "components/previews/core/previews_user_data.h"
+#include "content/public/browser/navigation_handle.h"
+#include "content/public/browser/web_contents.h"
 
 namespace previews {
 
@@ -70,10 +77,15 @@
 
   previews::PreviewsType preview_type =
       previews::GetMainFramePreviewsType(nav_data->previews_state());
-  if (preview_type == previews::PreviewsType::NOSCRIPT)
-    return CONTINUE_OBSERVING;
+  if (preview_type != previews::PreviewsType::NOSCRIPT)
+    return STOP_OBSERVING;
 
-  return STOP_OBSERVING;
+  data_savings_inflation_percent_ =
+      nav_data->previews_user_data()->data_savings_inflation_percent();
+
+  browser_context_ = navigation_handle->GetWebContents()->GetBrowserContext();
+
+  return CONTINUE_OBSERVING;
 }
 
 page_load_metrics::PageLoadMetricsObserver::ObservePolicy
@@ -91,6 +103,27 @@
   return STOP_OBSERVING;
 }
 
+void NoScriptPreviewPageLoadMetricsObserver::OnLoadEventStart(
+    const page_load_metrics::mojom::PageLoadTiming& timing,
+    const page_load_metrics::PageLoadExtraInfo& info) {
+  // TODO(dougarnett): Determine if a different event makes more sense.
+  // https://crbug.com/864720
+  int64_t inflation_bytes = 0;
+  if (data_savings_inflation_percent_ == 0) {
+    data_savings_inflation_percent_ =
+        previews::params::NoScriptPreviewsInflationPercent();
+    inflation_bytes = previews::params::NoScriptPreviewsInflationBytes();
+  }
+
+  int64_t total_saved_bytes =
+      (total_network_bytes_ * data_savings_inflation_percent_) / 100 +
+      inflation_bytes;
+
+  DCHECK(info.url.SchemeIs(url::kHttpsScheme));
+
+  WriteToSavings(info.url, total_saved_bytes);
+}
+
 void NoScriptPreviewPageLoadMetricsObserver::OnLoadedResource(
     const page_load_metrics::ExtraRequestCompleteInfo&
         extra_request_complete_info) {
@@ -145,4 +178,32 @@
   }
 }
 
+void NoScriptPreviewPageLoadMetricsObserver::OnDataUseObserved(
+    int64_t received_data_length,
+    int64_t data_reduction_proxy_bytes_saved) {
+  total_network_bytes_ += received_data_length;
+}
+
+void NoScriptPreviewPageLoadMetricsObserver::WriteToSavings(
+    const GURL& url,
+    int64_t bytes_saved) {
+  DCHECK(url.SchemeIs(url::kHttpsScheme));
+
+  data_reduction_proxy::DataReductionProxySettings*
+      data_reduction_proxy_settings =
+          DataReductionProxyChromeSettingsFactory::GetForBrowserContext(
+              browser_context_);
+
+  bool data_saver_enabled =
+      data_reduction_proxy_settings->IsDataReductionProxyEnabled();
+
+  data_reduction_proxy_settings->data_reduction_proxy_service()
+      ->UpdateContentLengths(0, bytes_saved, data_saver_enabled,
+                             data_reduction_proxy::HTTPS, "text/html", true,
+                             data_use_measurement::DataUseUserData::OTHER, 0);
+
+  data_reduction_proxy_settings->data_reduction_proxy_service()
+      ->UpdateDataUseForHost(0, bytes_saved, url.HostNoBrackets());
+}
+
 }  // namespace previews
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
index 4a47c0f..dfca652 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h
@@ -50,6 +50,15 @@
                             extra_request_complete_info) override;
   void OnComplete(const page_load_metrics::mojom::PageLoadTiming& timing,
                   const page_load_metrics::PageLoadExtraInfo& info) override;
+  void OnLoadEventStart(
+      const page_load_metrics::mojom::PageLoadTiming& timing,
+      const page_load_metrics::PageLoadExtraInfo& info) override;
+  void OnDataUseObserved(int64_t received_data_length,
+                         int64_t data_reduction_proxy_bytes_saved) override;
+
+ protected:
+  // Virtual for testing. Writes the savings to the data saver feature.
+  virtual void WriteToSavings(const GURL& url, int64_t byte_savings);
 
  private:
   void RecordTimingMetrics(
@@ -59,6 +68,16 @@
   // Records UMA of page size when the observer is about to be deleted.
   void RecordPageSizeUMA() const;
 
+  content::BrowserContext* browser_context_;
+
+  // The total number of bytes from OnDataUseObserved().
+  int64_t total_network_bytes_ = 0;
+
+  // The percent of bytes used by load event that should be considered savings.
+  // This is often larger than 100 as it corresponds to bytes that were not
+  // downloaded.
+  int data_savings_inflation_percent_ = 0;
+
   int64_t num_network_resources_ = 0;
   int64_t network_bytes_ = 0;
 
diff --git a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
index 2b04cc50..eaaa6ce 100644
--- a/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
+++ b/chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer_unittest.cc
@@ -5,7 +5,9 @@
 #include "chrome/browser/page_load_metrics/observers/noscript_preview_page_load_metrics_observer.h"
 
 #include <stdint.h>
+#include <map>
 #include <memory>
+#include <string>
 #include <utility>
 
 #include "base/macros.h"
@@ -19,6 +21,7 @@
 #include "chrome/common/page_load_metrics/page_load_timing.h"
 #include "chrome/common/page_load_metrics/test/page_load_metrics_test_util.h"
 #include "components/previews/core/previews_features.h"
+#include "components/previews/core/previews_user_data.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/previews_state.h"
 #include "content/public/test/navigation_simulator.h"
@@ -30,6 +33,22 @@
 
 const char kDefaultTestUrl[] = "https://www.google.com";
 
+class TestNoScriptPreviewPageLoadMetricsObserver
+    : public NoScriptPreviewPageLoadMetricsObserver {
+ public:
+  TestNoScriptPreviewPageLoadMetricsObserver(
+      base::OnceCallback<void(const GURL&, int64_t)> bytes_callback)
+      : bytes_callback_(std::move(bytes_callback)) {}
+  ~TestNoScriptPreviewPageLoadMetricsObserver() override {}
+
+  void WriteToSavings(const GURL& url, int64_t bytes_savings) override {
+    std::move(bytes_callback_).Run(url, bytes_savings);
+  }
+
+ private:
+  base::OnceCallback<void(const GURL&, int64_t)> bytes_callback_;
+};
+
 class NoScriptPreviewPageLoadMetricsObserverTest
     : public page_load_metrics::PageLoadMetricsObserverTestHarness {
  public:
@@ -64,6 +83,10 @@
     navigation_simulator->Start();
     auto chrome_navigation_data = std::make_unique<ChromeNavigationData>();
     chrome_navigation_data->set_previews_state(previews_state);
+
+    auto data = std::make_unique<previews::PreviewsUserData>(1);
+    chrome_navigation_data->set_previews_user_data(std::move(data));
+
     content::WebContentsTester::For(web_contents())
         ->SetNavigationData(navigation_simulator->GetNavigationHandle(),
                             std::move(chrome_navigation_data));
@@ -124,14 +147,25 @@
     }
   }
 
+  void WriteToSavings(const GURL& url, int64_t bytes_savings) {
+    savings_url_ = url;
+    bytes_savings_ = bytes_savings;
+  }
+
  protected:
   void RegisterObservers(page_load_metrics::PageLoadTracker* tracker) override {
     tracker->AddObserver(
-        std::make_unique<NoScriptPreviewPageLoadMetricsObserver>());
+        std::make_unique<TestNoScriptPreviewPageLoadMetricsObserver>(
+            base::BindOnce(
+                &NoScriptPreviewPageLoadMetricsObserverTest::WriteToSavings,
+                base::Unretained(this))));
   }
 
   page_load_metrics::mojom::PageLoadTiming timing_;
 
+  GURL savings_url_;
+  int64_t bytes_savings_ = 0;
+
  private:
   DISALLOW_COPY_AND_ASSIGN(NoScriptPreviewPageLoadMetricsObserverTest);
 };
@@ -214,6 +248,35 @@
                          25 * 1024 /* network_bytes */);
 }
 
+TEST_F(NoScriptPreviewPageLoadMetricsObserverTest, DataSavings) {
+  int inflation = 50;
+  int constant_savings = 120;
+  base::test::ScopedFeatureList scoped_feature_list;
+
+  std::map<std::string, std::string> parameters = {
+      {"NoScriptInflationPercent", base::IntToString(inflation)},
+      {"NoScriptInflationBytes", base::IntToString(constant_savings)}};
+  scoped_feature_list.InitAndEnableFeatureWithParameters(
+      previews::features::kNoScriptPreviews, parameters);
+
+  ResetTest();
+
+  int64_t data_use = 0;
+  NavigateAndCommitWithPreviewsState(content::NOSCRIPT_ON);
+  SimulatePageLoadDataUseUpdate({5 * 1024, 0});
+  data_use += (5 * 1024);
+
+  SimulatePageLoadDataUseUpdate({20 * 1024, 13});
+  data_use += (20 * 1024);
+
+  SimulateTimingUpdate(timing_);
+
+  int64_t expected_savings = (data_use * inflation) / 100 + constant_savings;
+
+  EXPECT_EQ(GURL(kDefaultTestUrl), savings_url_);
+  EXPECT_EQ(expected_savings, bytes_savings_);
+}
+
 }  // namespace
 
 }  //  namespace previews
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
index c46273e..c07e6c2 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.cc
@@ -59,6 +59,11 @@
   tester_->SimulateTimingAndMetadataUpdate(timing, metadata);
 }
 
+void PageLoadMetricsObserverTestHarness::SimulatePageLoadDataUseUpdate(
+    const mojom::PageLoadDataUse& data_use) {
+  tester_->SimulatePageLoadDataUseUpdate(data_use);
+}
+
 void PageLoadMetricsObserverTestHarness::SimulateFeaturesUpdate(
     const mojom::PageLoadFeatures& new_features) {
   tester_->SimulateFeaturesUpdate(new_features);
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
index 12bb635..50e016e 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_test_harness.h
@@ -83,6 +83,7 @@
       const mojom::PageLoadTiming& timing,
       const mojom::PageLoadMetadata& metadata,
       const mojom::PageLoadFeatures& new_features);
+  void SimulatePageLoadDataUseUpdate(const mojom::PageLoadDataUse& data_use);
 
   // Simulates a loaded resource. Main frame resources must specify a
   // GlobalRequestID, using the SimulateLoadedResource() method that takes a
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
index c50e5203a..641e4d27 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.cc
@@ -97,6 +97,13 @@
     mock_timer->Fire();
 }
 
+void PageLoadMetricsObserverTester::SimulatePageLoadDataUseUpdate(
+    const mojom::PageLoadDataUse& data_use) {
+  observer_->OnTimingUpdated(web_contents()->GetMainFrame(),
+                             mojom::PageLoadTiming(), mojom::PageLoadMetadata(),
+                             mojom::PageLoadFeatures(), data_use);
+}
+
 void PageLoadMetricsObserverTester::SimulateLoadedResource(
     const ExtraRequestCompleteInfo& info) {
   SimulateLoadedResource(info, content::GlobalRequestID());
diff --git a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
index 1c36bdca..1c7ce82 100644
--- a/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
+++ b/chrome/browser/page_load_metrics/observers/page_load_metrics_observer_tester.h
@@ -54,6 +54,7 @@
       const mojom::PageLoadTiming& timing,
       const mojom::PageLoadMetadata& metadata,
       const mojom::PageLoadFeatures& new_features);
+  void SimulatePageLoadDataUseUpdate(const mojom::PageLoadDataUse& data_use);
 
   // Simulates a loaded resource. Main frame resources must specify a
   // GlobalRequestID, using the SimulateLoadedResource() method that takes a
diff --git a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
index 7389407..91be0e2 100644
--- a/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
+++ b/chrome/browser/page_load_metrics/page_load_metrics_update_dispatcher.cc
@@ -439,6 +439,9 @@
     return;
   }
 
+  // Report data usage before new timing and metadata for messages that have
+  // both updates.
+  client_->UpdateDataUse(new_data_use);
   if (render_frame_host->GetParent() == nullptr) {
     UpdateMainFrameMetadata(new_metadata);
     UpdateMainFrameTiming(new_timing);
@@ -447,7 +450,6 @@
     UpdateSubFrameTiming(render_frame_host, new_timing);
   }
   client_->UpdateFeaturesUsage(new_features);
-  client_->UpdateDataUse(new_data_use);
 }
 
 void PageLoadMetricsUpdateDispatcher::UpdateFeatures(
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc
index 69adad3..842daa0 100644
--- a/chrome/browser/policy/policy_browsertest.cc
+++ b/chrome/browser/policy/policy_browsertest.cc
@@ -5933,16 +5933,24 @@
 
   void CreatedBrowserMainParts(
       content::BrowserMainParts* browser_main_parts) override {
+    // Set policies before the browser starts up.
+    PolicyMap policies;
+
+    // Suppress the first-run dialog by disabling metrics reporting.
+    policies.Set(key::kMetricsReportingEnabled, POLICY_LEVEL_MANDATORY,
+                 POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
+                 std::make_unique<base::Value>(false), nullptr);
+
+    // Apply the policy setting under test.
     if (GetParam() != BooleanPolicy::kNotConfigured) {
-      // Set the policy now before the browser starts up.
-      PolicyMap policies;
       policies.Set(
           key::kPromotionalTabsEnabled, POLICY_LEVEL_MANDATORY,
           POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD,
           std::make_unique<base::Value>(GetParam() == BooleanPolicy::kTrue),
           nullptr);
-      UpdateProviderPolicy(policies);
     }
+
+    UpdateProviderPolicy(policies);
     PolicyTest::CreatedBrowserMainParts(browser_main_parts);
   }
 
@@ -5950,13 +5958,7 @@
   DISALLOW_COPY_AND_ASSIGN(PromotionalTabsEnabledPolicyTest);
 };
 
-#if defined(OS_LINUX) && defined(GOOGLE_CHROME_BUILD)
-// Passes then times out on official Linux builds; https://crbug.com/856995.
-#define MAYBE_RunTest DISABLED_RunTest
-#else
-#define MAYBE_RunTest RunTest
-#endif
-IN_PROC_BROWSER_TEST_P(PromotionalTabsEnabledPolicyTest, MAYBE_RunTest) {
+IN_PROC_BROWSER_TEST_P(PromotionalTabsEnabledPolicyTest, RunTest) {
   TabStripModel* tab_strip = browser()->tab_strip_model();
   ASSERT_GE(tab_strip->count(), 1);
   const auto& url = tab_strip->GetWebContentsAt(0)->GetURL();
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index b0d4eb0e..083de60 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -10,6 +10,7 @@
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "chrome/browser/about_flags.h"
+#include "chrome/browser/accessibility/accessibility_ui.h"
 #include "chrome/browser/accessibility/invert_bubble_prefs.h"
 #include "chrome/browser/browser_process_impl.h"
 #include "chrome/browser/chrome_content_browser_client.h"
@@ -512,6 +513,7 @@
   TRACE_EVENT0("browser", "chrome::RegisterProfilePrefs");
   SCOPED_UMA_HISTOGRAM_TIMER("Settings.RegisterProfilePrefsTime");
   // User prefs. Please keep this list alphabetized.
+  AccessibilityUIMessageHandler::RegisterProfilePrefs(registry);
   autofill::AutofillManager::RegisterProfilePrefs(registry);
   browsing_data::prefs::RegisterBrowserUserPrefs(registry);
   certificate_transparency::prefs::RegisterPrefs(registry);
diff --git a/chrome/browser/printing/cloud_print/privet_notifications.cc b/chrome/browser/printing/cloud_print/privet_notifications.cc
index f962f23..0a63a3d 100644
--- a/chrome/browser/printing/cloud_print/privet_notifications.cc
+++ b/chrome/browser/printing/cloud_print/privet_notifications.cc
@@ -209,8 +209,8 @@
 }
 
 PrivetNotificationService::~PrivetNotificationService() {
-#if BUILDFLAG(ENABLE_MDNS)
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+#if BUILDFLAG(ENABLE_MDNS)
   if (traffic_detector_)
     traffic_detector_->Stop();
 #endif
@@ -329,17 +329,20 @@
 
 void PrivetNotificationService::OnNotificationsEnabledChanged() {
 #if BUILDFLAG(ENABLE_MDNS)
+  if (traffic_detector_)
+    traffic_detector_->Stop();
+  traffic_detector_ = nullptr;
+
   if (IsForced()) {
     StartLister();
   } else if (*enable_privet_notification_member_) {
     ReportPrivetUmaEvent(PRIVET_SERVICE_STARTED);
-    traffic_detector_ =
-        new PrivetTrafficDetector(
-            net::ADDRESS_FAMILY_IPV4,
-            base::Bind(&PrivetNotificationService::StartLister, AsWeakPtr()));
+    traffic_detector_ = base::MakeRefCounted<PrivetTrafficDetector>(
+        net::ADDRESS_FAMILY_IPV4, profile_,
+        base::BindRepeating(&PrivetNotificationService::StartLister,
+                            AsWeakPtr()));
     traffic_detector_->Start();
   } else {
-    traffic_detector_ = nullptr;
     device_lister_.reset();
     service_discovery_client_ = nullptr;
     privet_notifications_listener_.reset();
@@ -357,9 +360,6 @@
 
 void PrivetNotificationService::StartLister() {
   ReportPrivetUmaEvent(PRIVET_LISTER_STARTED);
-#if BUILDFLAG(ENABLE_MDNS)
-  traffic_detector_ = nullptr;
-#endif  // ENABLE_MDNS
   service_discovery_client_ =
       local_discovery::ServiceDiscoverySharedClient::GetInstance();
   device_lister_.reset(
diff --git a/chrome/browser/printing/cloud_print/privet_notifications.h b/chrome/browser/printing/cloud_print/privet_notifications.h
index d94cf49..986245c7 100644
--- a/chrome/browser/printing/cloud_print/privet_notifications.h
+++ b/chrome/browser/printing/cloud_print/privet_notifications.h
@@ -7,6 +7,7 @@
 
 #include <map>
 #include <memory>
+#include <set>
 #include <string>
 
 #include "chrome/browser/printing/cloud_print/privet_device_lister.h"
@@ -36,7 +37,7 @@
 
 #if BUILDFLAG(ENABLE_MDNS)
 class PrivetTrafficDetector;
-#endif  // ENABLE_MDNS
+#endif
 
 // Contains logic related to notifications not tied actually displaying them.
 class PrivetNotificationsListener  {
@@ -140,7 +141,7 @@
 
 #if BUILDFLAG(ENABLE_MDNS)
   scoped_refptr<PrivetTrafficDetector> traffic_detector_;
-#endif  // ENABLE_MDNS
+#endif
 };
 
 class PrivetNotificationDelegate : public message_center::NotificationDelegate {
diff --git a/chrome/browser/printing/cloud_print/privet_traffic_detector.cc b/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
index fe574f3..18b6994 100644
--- a/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
+++ b/chrome/browser/printing/cloud_print/privet_traffic_detector.cc
@@ -15,16 +15,13 @@
 #include "base/threading/thread_restrictions.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "chrome/browser/browser_process.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/storage_partition.h"
 #include "net/base/ip_address.h"
 #include "net/base/net_errors.h"
-#include "net/base/network_change_notifier.h"
 #include "net/base/network_interfaces.h"
 #include "net/dns/dns_protocol.h"
-#include "net/dns/dns_response.h"
 #include "net/dns/mdns_client.h"
-#include "net/log/net_log_source.h"
-#include "net/socket/datagram_server_socket.h"
-#include "net/socket/udp_server_socket.h"
 
 namespace {
 
@@ -67,13 +64,14 @@
 
 PrivetTrafficDetector::PrivetTrafficDetector(
     net::AddressFamily address_family,
+    content::BrowserContext* profile,
     const base::Closure& on_traffic_detected)
     : on_traffic_detected_(on_traffic_detected),
       callback_runner_(base::ThreadTaskRunnerHandle::Get()),
       address_family_(address_family),
-      io_buffer_(
-          new net::IOBufferWithSize(net::dns_protocol::kMaxMulticastSize)),
       restart_attempts_(kMaxRestartAttempts),
+      receiver_binding_(this),
+      profile_(profile),
       weak_ptr_factory_(this) {}
 
 PrivetTrafficDetector::~PrivetTrafficDetector() {
@@ -96,15 +94,6 @@
       ->RemoveNetworkConnectionObserver(this);
 }
 
-void PrivetTrafficDetector::OnConnectionChanged(
-    network::mojom::ConnectionType type) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  content::BrowserThread::PostTask(
-      content::BrowserThread::IO, FROM_HERE,
-      base::BindOnce(&PrivetTrafficDetector::HandleConnectionChanged,
-                     weak_ptr_factory_.GetWeakPtr(), type));
-}
-
 void PrivetTrafficDetector::HandleConnectionChanged(
     network::mojom::ConnectionType type) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
@@ -116,7 +105,7 @@
 
 void PrivetTrafficDetector::ScheduleRestart() {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  socket_.reset();
+  ResetConnection();
   weak_ptr_factory_.InvalidateWeakPtrs();
   base::PostDelayedTaskWithTraits(
       FROM_HERE, {base::TaskPriority::BACKGROUND, base::MayBlock()},
@@ -129,33 +118,64 @@
 void PrivetTrafficDetector::Restart(const net::NetworkInterfaceList& networks) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   networks_ = networks;
-  if (Bind() < net::OK || DoLoop(0) < net::OK) {
-    if ((restart_attempts_--) > 0)
-      ScheduleRestart();
-  } else {
-    // Reset on success.
-    restart_attempts_ = kMaxRestartAttempts;
-  }
+  Bind();
 }
 
-int PrivetTrafficDetector::Bind() {
+void PrivetTrafficDetector::Bind() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
   if (!start_time_.is_null()) {
     base::TimeDelta time_delta = base::Time::Now() - start_time_;
     UMA_HISTOGRAM_LONG_TIMES("LocalDiscovery.DetectorRestartTime", time_delta);
   }
   start_time_ = base::Time::Now();
-  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  socket_.reset(new net::UDPServerSocket(NULL, net::NetLogSource()));
+
+  network::mojom::UDPSocketReceiverPtr receiver_ptr;
+  network::mojom::UDPSocketReceiverRequest receiver_request =
+      mojo::MakeRequest(&receiver_ptr);
+  receiver_binding_.Bind(std::move(receiver_request));
+  content::BrowserThread::PostTask(
+      content::BrowserThread::UI, FROM_HERE,
+      base::BindOnce(&PrivetTrafficDetector::CreateUDPSocketOnUIThread, this,
+                     mojo::MakeRequest(&socket_), std::move(receiver_ptr)));
+
   net::IPEndPoint multicast_addr = net::GetMDnsIPEndPoint(address_family_);
   net::IPEndPoint bind_endpoint(
       net::IPAddress::AllZeros(multicast_addr.address().size()),
       multicast_addr.port());
-  socket_->AllowAddressReuse();
-  int rv = socket_->Listen(bind_endpoint);
-  if (rv < net::OK)
-    return rv;
-  socket_->SetMulticastLoopbackMode(false);
-  return socket_->JoinGroup(multicast_addr.address());
+
+  network::mojom::UDPSocketOptionsPtr socket_options =
+      network::mojom::UDPSocketOptions::New();
+  socket_options->allow_address_reuse = true;
+  socket_options->multicast_loopback_mode = false;
+
+  socket_->Bind(bind_endpoint, std::move(socket_options),
+                base::BindOnce(&PrivetTrafficDetector::OnBindComplete, this,
+                               multicast_addr));
+}
+
+void PrivetTrafficDetector::CreateUDPSocketOnUIThread(
+    network::mojom::UDPSocketRequest request,
+    network::mojom::UDPSocketReceiverPtr receiver_ptr) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  network::mojom::NetworkContext* network_context =
+      content::BrowserContext::GetDefaultStoragePartition(profile_)
+          ->GetNetworkContext();
+  network_context->CreateUDPSocket(std::move(request), std::move(receiver_ptr));
+}
+
+void PrivetTrafficDetector::OnBindComplete(
+    net::IPEndPoint multicast_addr,
+    int rv,
+    const base::Optional<net::IPEndPoint>& ip_endpoint) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+  if (rv != net::OK) {
+    if ((restart_attempts_--) > 0)
+      ScheduleRestart();
+  } else {
+    socket_->JoinGroup(
+        multicast_addr.address(),
+        base::BindOnce(&PrivetTrafficDetector::OnJoinGroupComplete, this));
+  }
 }
 
 bool PrivetTrafficDetector::IsSourceAcceptable() const {
@@ -168,14 +188,15 @@
   return false;
 }
 
-bool PrivetTrafficDetector::IsPrivetPacket(int rv) const {
-  if (rv <= static_cast<int>(sizeof(net::dns_protocol::Header)) ||
+bool PrivetTrafficDetector::IsPrivetPacket(
+    base::span<const uint8_t> data) const {
+  if (data.size() <= sizeof(net::dns_protocol::Header) ||
       !IsSourceAcceptable()) {
     return false;
   }
 
-  const char* buffer_begin = io_buffer_->data();
-  const char* buffer_end = buffer_begin + rv;
+  const char* buffer_begin = reinterpret_cast<const char*>(data.data());
+  const char* buffer_end = buffer_begin + data.size();
   const net::dns_protocol::Header* header =
       reinterpret_cast<const net::dns_protocol::Header*>(buffer_begin);
   // Check if response packet.
@@ -189,30 +210,52 @@
                      substring_end) != buffer_end;
 }
 
-int PrivetTrafficDetector::DoLoop(int rv) {
+void PrivetTrafficDetector::OnJoinGroupComplete(int rv) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
-  do {
-    if (IsPrivetPacket(rv)) {
-      socket_.reset();
-      callback_runner_->PostTask(FROM_HERE, on_traffic_detected_);
-      base::TimeDelta time_delta = base::Time::Now() - start_time_;
-      UMA_HISTOGRAM_LONG_TIMES("LocalDiscovery.DetectorTriggerTime",
-                               time_delta);
-      return net::OK;
-    }
+  if (rv != net::OK) {
+    if ((restart_attempts_--) > 0)
+      ScheduleRestart();
+  } else {
+    // Reset on success.
+    restart_attempts_ = kMaxRestartAttempts;
+    socket_->ReceiveMoreWithBufferSize(1, net::dns_protocol::kMaxMulticastSize);
+  }
+}
 
-    rv = socket_->RecvFrom(
-        io_buffer_.get(),
-        io_buffer_->size(),
-        &recv_addr_,
-        base::Bind(base::IgnoreResult(&PrivetTrafficDetector::DoLoop),
-                   base::Unretained(this)));
-  } while (rv > 0);
+void PrivetTrafficDetector::ResetConnection() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+  socket_.reset();
+  receiver_binding_.Close();
+}
 
-  if (rv != net::ERR_IO_PENDING)
-    return rv;
+void PrivetTrafficDetector::OnConnectionChanged(
+    network::mojom::ConnectionType type) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::BindOnce(&PrivetTrafficDetector::HandleConnectionChanged,
+                     weak_ptr_factory_.GetWeakPtr(), type));
+}
 
-  return net::OK;
+void PrivetTrafficDetector::OnReceived(
+    int32_t result,
+    const base::Optional<net::IPEndPoint>& src_addr,
+    base::Optional<base::span<const uint8_t>> data) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+  if (result != net::OK)
+    return;
+
+  // |data| and |src_addr| are guaranteed to be non-null when |result| is
+  // net::OK
+  recv_addr_ = src_addr.value();
+  if (IsPrivetPacket(data.value())) {
+    ResetConnection();
+    callback_runner_->PostTask(FROM_HERE, on_traffic_detected_);
+    base::TimeDelta time_delta = base::Time::Now() - start_time_;
+    UMA_HISTOGRAM_LONG_TIMES("LocalDiscovery.DetectorTriggerTime", time_delta);
+  } else {
+    socket_->ReceiveMoreWithBufferSize(1, net::dns_protocol::kMaxMulticastSize);
+  }
 }
 
 }  // namespace cloud_print
diff --git a/chrome/browser/printing/cloud_print/privet_traffic_detector.h b/chrome/browser/printing/cloud_print/privet_traffic_detector.h
index 395742c4..2d7e1e0 100644
--- a/chrome/browser/printing/cloud_print/privet_traffic_detector.h
+++ b/chrome/browser/printing/cloud_print/privet_traffic_detector.h
@@ -12,12 +12,13 @@
 #include "base/macros.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/network_connection_tracker.h"
+#include "mojo/public/cpp/bindings/binding.h"
 #include "net/base/address_family.h"
 #include "net/base/ip_endpoint.h"
+#include "services/network/public/mojom/udp_socket.mojom.h"
 
-namespace net {
-class DatagramServerSocket;
-class IOBufferWithSize;
+namespace content {
+class BrowserContext;
 }
 
 namespace cloud_print {
@@ -30,9 +31,11 @@
     : public base::RefCountedThreadSafe<
           PrivetTrafficDetector,
           content::BrowserThread::DeleteOnIOThread>,
-      private content::NetworkConnectionTracker::NetworkConnectionObserver {
+      private content::NetworkConnectionTracker::NetworkConnectionObserver,
+      public network::mojom::UDPSocketReceiver {
  public:
   PrivetTrafficDetector(net::AddressFamily address_family,
+                        content::BrowserContext* profile,
                         const base::Closure& on_traffic_detected);
 
   void Start();
@@ -44,27 +47,49 @@
   friend class base::DeleteHelper<PrivetTrafficDetector>;
   ~PrivetTrafficDetector() override;
 
+  void HandleConnectionChanged(network::mojom::ConnectionType type);
+
+  void StartOnIOThread();
+  void ScheduleRestart();
+  void Restart(const net::NetworkInterfaceList& networks);
+  void Bind();
+  void CreateUDPSocketOnUIThread(
+      network::mojom::UDPSocketRequest request,
+      network::mojom::UDPSocketReceiverPtr receiver_ptr);
+  void OnBindComplete(net::IPEndPoint multicast_addr,
+                      int rv,
+                      const base::Optional<net::IPEndPoint>& ip_address);
+  bool IsSourceAcceptable() const;
+  bool IsPrivetPacket(base::span<const uint8_t> data) const;
+  void OnJoinGroupComplete(int rv);
+  void ResetConnection();
+
   // content::NetworkConnectionTracker::NetworkConnectionObserver:
   void OnConnectionChanged(network::mojom::ConnectionType type) override;
 
-  void HandleConnectionChanged(network::mojom::ConnectionType type);
-  void ScheduleRestart();
-  void Restart(const net::NetworkInterfaceList& networks);
-  int Bind();
-  bool IsSourceAcceptable() const;
-  bool IsPrivetPacket(int rv) const;
-  int DoLoop(int rv);
+  // network::mojom::UDPSocketReceiver implementation
+  void OnReceived(int32_t result,
+                  const base::Optional<net::IPEndPoint>& src_addr,
+                  base::Optional<base::span<const uint8_t>> data) override;
 
   base::Closure on_traffic_detected_;
   scoped_refptr<base::TaskRunner> callback_runner_;
   net::NetworkInterfaceList networks_;
   net::AddressFamily address_family_;
   net::IPEndPoint recv_addr_;
-  std::unique_ptr<net::DatagramServerSocket> socket_;
-  scoped_refptr<net::IOBufferWithSize> io_buffer_;
   base::Time start_time_;
   int restart_attempts_;
 
+  // Only accessed on the IO thread
+
+  network::mojom::UDPSocketPtr socket_;
+  // Implementation of socket receiver callback
+  mojo::Binding<network::mojom::UDPSocketReceiver> receiver_binding_;
+
+  // Only accessed on the UI thread
+
+  content::BrowserContext* const profile_;
+
   base::WeakPtrFactory<PrivetTrafficDetector> weak_ptr_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(PrivetTrafficDetector);
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 9bab63f6..08aa42ac 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -339,7 +339,14 @@
     NOTREACHED();
   }
 
-  return new ProfileImpl(path, delegate, create_mode, io_task_runner);
+  auto profile = base::WrapUnique(
+      new ProfileImpl(path, delegate, create_mode, io_task_runner));
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS) && !defined(OS_ANDROID) && \
+    !defined(OS_CHROMEOS)
+  if (create_mode == CREATE_MODE_SYNCHRONOUS && profile->IsLegacySupervised())
+    return nullptr;
+#endif
+  return profile.release();
 }
 
 // static
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc
index 6818f2a7..8337e17 100644
--- a/chrome/browser/profiles/profile_info_cache.cc
+++ b/chrome/browser/profiles/profile_info_cache.cc
@@ -76,6 +76,16 @@
        !it.IsAtEnd(); it.Advance()) {
     base::DictionaryValue* info = NULL;
     cache->GetDictionaryWithoutPathExpansion(it.key(), &info);
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS) && !defined(OS_ANDROID) && \
+    !defined(OS_CHROMEOS)
+    std::string supervised_user_id;
+    info->GetString(kSupervisedUserId, &supervised_user_id);
+    // Silently ignore legacy supervised user profiles.
+    if (!supervised_user_id.empty() &&
+        supervised_user_id != supervised_users::kChildAccountSUID) {
+      continue;
+    }
+#endif
     base::string16 name;
     info->GetString(kNameKey, &name);
     sorted_keys_.insert(FindPositionForProfile(it.key(), name), it.key());
@@ -115,6 +125,14 @@
                                          size_t icon_index,
                                          const std::string& supervised_user_id,
                                          const AccountId& account_id) {
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS) && !defined(OS_ANDROID) && \
+    !defined(OS_CHROMEOS)
+  // Silently ignore legacy supervised user profiles.
+  if (!supervised_user_id.empty() &&
+      supervised_user_id != supervised_users::kChildAccountSUID) {
+    return;
+  }
+#endif
   std::string key = CacheKeyFromProfilePath(profile_path);
   DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache);
   base::DictionaryValue* cache = update.Get();
diff --git a/chrome/browser/profiles/profile_info_cache_unittest.cc b/chrome/browser/profiles/profile_info_cache_unittest.cc
index e41aeef..c15139c 100644
--- a/chrome/browser/profiles/profile_info_cache_unittest.cc
+++ b/chrome/browser/profiles/profile_info_cache_unittest.cc
@@ -36,6 +36,10 @@
 #include "ui/gfx/image/image.h"
 #include "ui/gfx/image/image_unittest_util.h"
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
+#endif
+
 using base::ASCIIToUTF16;
 using base::UTF8ToUTF16;
 using content::BrowserThread;
@@ -137,7 +141,11 @@
     const SkBitmap* icon = rb.GetImageNamed(
         profiles::GetDefaultAvatarIconResourceIDAtIndex(
             i)).ToSkBitmap();
-    std::string supervised_user_id = i == 3 ? "TEST_ID" : "";
+    std::string supervised_user_id = "";
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+    if (i == 3)
+      supervised_user_id = supervised_users::kChildAccountSUID;
+#endif
 
     GetCache()->AddProfileToCache(profile_path, profile_name, std::string(),
                                   base::string16(), i, supervised_user_id,
@@ -438,15 +446,18 @@
     gaia_image, *GetCache()->GetGAIAPictureOfProfileAtIndex(0)));
 }
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
 TEST_F(ProfileInfoCacheTest, SetSupervisedUserId) {
   GetCache()->AddProfileToCache(GetProfilePath("test"), ASCIIToUTF16("Test"),
                                 std::string(), base::string16(), 0,
                                 std::string(), EmptyAccountId());
   EXPECT_FALSE(GetCache()->ProfileIsSupervisedAtIndex(0));
 
-  GetCache()->SetSupervisedUserIdOfProfileAtIndex(0, "TEST_ID");
+  GetCache()->SetSupervisedUserIdOfProfileAtIndex(
+      0, supervised_users::kChildAccountSUID);
   EXPECT_TRUE(GetCache()->ProfileIsSupervisedAtIndex(0));
-  EXPECT_EQ("TEST_ID", GetCache()->GetSupervisedUserIdOfProfileAtIndex(0));
+  EXPECT_EQ(supervised_users::kChildAccountSUID,
+            GetCache()->GetSupervisedUserIdOfProfileAtIndex(0));
 
   ResetCache();
   EXPECT_TRUE(GetCache()->ProfileIsSupervisedAtIndex(0));
@@ -455,6 +466,7 @@
   EXPECT_FALSE(GetCache()->ProfileIsSupervisedAtIndex(0));
   EXPECT_EQ("", GetCache()->GetSupervisedUserIdOfProfileAtIndex(0));
 }
+#endif  // BUILDFLAG(ENABLE_SUPERVISED_USERS)
 
 TEST_F(ProfileInfoCacheTest, EmptyGAIAInfo) {
   base::string16 profile_name = ASCIIToUTF16("name_1");
@@ -477,17 +489,20 @@
       profile_image, GetCache()->GetAvatarIconOfProfileAtIndex(0)));
 }
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
 TEST_F(ProfileInfoCacheTest, CreateSupervisedTestingProfile) {
   testing_profile_manager_.CreateTestingProfile("default");
   base::string16 supervised_user_name = ASCIIToUTF16("Supervised User");
   testing_profile_manager_.CreateTestingProfile(
       "test1", std::unique_ptr<sync_preferences::PrefServiceSyncable>(),
-      supervised_user_name, 0, "TEST_ID", TestingProfile::TestingFactories());
+      supervised_user_name, 0, supervised_users::kChildAccountSUID,
+      TestingProfile::TestingFactories());
   for (size_t i = 0; i < GetCache()->GetNumberOfProfiles(); i++) {
     bool is_supervised =
         GetCache()->GetNameOfProfileAtIndex(i) == supervised_user_name;
     EXPECT_EQ(is_supervised, GetCache()->ProfileIsSupervisedAtIndex(i));
-    std::string supervised_user_id = is_supervised ? "TEST_ID" : "";
+    std::string supervised_user_id =
+        is_supervised ? supervised_users::kChildAccountSUID : "";
     EXPECT_EQ(supervised_user_id,
               GetCache()->GetSupervisedUserIdOfProfileAtIndex(i));
   }
@@ -497,6 +512,7 @@
   // we still have a FILE thread.
   TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL);
 }
+#endif
 
 TEST_F(ProfileInfoCacheTest, AddStubProfile) {
   EXPECT_EQ(0u, GetCache()->GetNumberOfProfiles());
diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc
index b9e2b3e1..e251a7f 100644
--- a/chrome/browser/profiles/profile_io_data.cc
+++ b/chrome/browser/profiles/profile_io_data.cc
@@ -113,7 +113,6 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
 #include "extensions/browser/extension_protocols.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/browser/extension_throttle_manager.h"
 #include "extensions/browser/info_map.h"
 #include "extensions/common/constants.h"
 #endif  // BUILDFLAG(ENABLE_EXTENSIONS)
@@ -869,16 +868,6 @@
 #endif
 }
 
-extensions::ExtensionThrottleManager*
-ProfileIOData::GetExtensionThrottleManager() const {
-  DCHECK(initialized_) << "ExtensionSystem not initialized";
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-  return extension_throttle_manager_.get();
-#else
-  return nullptr;
-#endif
-}
-
 content_settings::CookieSettings* ProfileIOData::GetCookieSettings() const {
   // Allow either Init() or SetCookieSettingsForTesting() to initialize.
   DCHECK(initialized_ || cookie_settings_.get());
@@ -1065,11 +1054,6 @@
 #if BUILDFLAG(ENABLE_EXTENSIONS)
       chrome_network_delegate->set_extension_info_map(
           profile_params_->extension_info_map.get());
-      if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
-              switches::kDisableExtensionsHttpThrottling)) {
-        extension_throttle_manager_.reset(
-            new extensions::ExtensionThrottleManager());
-      }
 #endif
 
       chrome_network_delegate->set_profile(profile_params_->profile);
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h
index 25fb658d..9bc4061 100644
--- a/chrome/browser/profiles/profile_io_data.h
+++ b/chrome/browser/profiles/profile_io_data.h
@@ -28,7 +28,6 @@
 #include "components/signin/core/browser/profile_management_switches.h"
 #include "content/public/browser/content_browser_client.h"
 #include "content/public/browser/resource_context.h"
-#include "extensions/buildflags/buildflags.h"
 #include "net/http/http_cache.h"
 #include "net/http/http_network_session.h"
 #include "net/net_buildflags.h"
@@ -61,7 +60,6 @@
 }
 
 namespace extensions {
-class ExtensionThrottleManager;
 class InfoMap;
 }
 
@@ -155,7 +153,6 @@
   // with a content::ResourceContext, and they want access to Chrome data for
   // that profile.
   extensions::InfoMap* GetExtensionInfoMap() const;
-  extensions::ExtensionThrottleManager* GetExtensionThrottleManager() const;
   content_settings::CookieSettings* GetCookieSettings() const;
   HostContentSettingsMap* GetHostContentSettingsMap() const;
 
@@ -613,12 +610,6 @@
 
   mutable scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
 
-#if BUILDFLAG(ENABLE_EXTENSIONS)
-  // Is NULL if switches::kDisableExtensionsHttpThrottling is on.
-  mutable std::unique_ptr<extensions::ExtensionThrottleManager>
-      extension_throttle_manager_;
-#endif
-
   // Owned by the ChromeNetworkDelegate, which is owned (possibly with one or
   // more layers of LayeredNetworkDelegate) by the URLRequestContext, which is
   // owned by main_network_context_.
diff --git a/chrome/browser/profiles/profile_list_desktop_unittest.cc b/chrome/browser/profiles/profile_list_desktop_unittest.cc
index d224d8d1..d06142c 100644
--- a/chrome/browser/profiles/profile_list_desktop_unittest.cc
+++ b/chrome/browser/profiles/profile_list_desktop_unittest.cc
@@ -262,36 +262,4 @@
   EXPECT_EQ(ASCIIToUTF16("Test 3"), item3.name);
 }
 
-TEST_F(ProfileListDesktopTest, SyncState) {
-  // If multiprofile mode is not enabled then the menu is never shown.
-  if (!profiles::IsMultipleProfilesEnabled())
-    return;
-
-  manager()->CreateTestingProfile("Test 1");
-
-  // Add a managed user profile.
-  ProfileAttributesStorage* storage = manager()->profile_attributes_storage();
-  base::FilePath path = manager()->profiles_dir().AppendASCII("p2");
-  storage->AddProfile(path, ASCIIToUTF16("Test 2"), std::string(),
-                      base::string16(), 0u, "TEST_ID", EmptyAccountId());
-
-  ProfileAttributesEntry* entry;
-  ASSERT_TRUE(storage->GetProfileAttributesWithPath(path, &entry));
-  entry->SetIsOmitted(false);
-
-  AvatarMenu* menu = GetAvatarMenu();
-  menu->RebuildMenu();
-  EXPECT_EQ(2u, menu->GetNumberOfItems());
-
-  // Now check that the username of a supervised user shows the supervised
-  // user avatar label instead.
-  base::string16 supervised_user_label =
-      l10n_util::GetStringUTF16(IDS_LEGACY_SUPERVISED_USER_AVATAR_LABEL);
-  const AvatarMenu::Item& item1 = menu->GetItemAt(0u);
-  EXPECT_NE(item1.username, supervised_user_label);
-
-  const AvatarMenu::Item& item2 = menu->GetItemAt(1u);
-  EXPECT_EQ(item2.username, supervised_user_label);
-}
-
 }  // namespace
diff --git a/chrome/browser/profiles/profile_manager_unittest.cc b/chrome/browser/profiles/profile_manager_unittest.cc
index 7b7b123..f752528 100644
--- a/chrome/browser/profiles/profile_manager_unittest.cc
+++ b/chrome/browser/profiles/profile_manager_unittest.cc
@@ -66,6 +66,10 @@
 #include "extensions/common/features/feature_session_type.h"
 #endif  // defined(OS_CHROMEOS)
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
+#endif
+
 using base::ASCIIToUTF16;
 
 namespace {
@@ -173,12 +177,19 @@
                           const std::string& name,
                           bool is_supervised,
                           MockObserver* mock_observer) {
+    std::string supervised_user_id;
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+    if (is_supervised)
+      supervised_user_id = supervised_users::kChildAccountSUID;
+#else
+    DCHECK(!is_supervised);
+#endif
     manager->CreateProfileAsync(temp_dir_.GetPath().AppendASCII(name),
                                 base::Bind(&MockObserver::OnProfileCreated,
                                            base::Unretained(mock_observer)),
                                 base::UTF8ToUTF16(name),
                                 profiles::GetDefaultAvatarIconUrl(0),
-                                is_supervised ? "Dummy ID" : std::string());
+                                supervised_user_id);
   }
 
   // Helper function to add a profile with |profile_name| to |profile_manager|'s
@@ -510,31 +521,37 @@
 }
 
 TEST_F(ProfileManagerTest, CreateProfileAsyncCheckOmitted) {
-  std::string name = "0 Supervised Profile";
-
   MockObserver mock_observer;
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
   EXPECT_CALL(mock_observer, OnProfileCreated(
       testing::NotNull(), NotFail())).Times(testing::AtLeast(2));
+#else
+  EXPECT_CALL(mock_observer, OnProfileCreated(testing::NotNull(), NotFail()))
+      .Times(testing::AtLeast(1));
+#endif
 
   ProfileManager* profile_manager = g_browser_process->profile_manager();
   ProfileAttributesStorage& storage =
       profile_manager->GetProfileAttributesStorage();
   EXPECT_EQ(0u, storage.GetNumberOfProfiles());
 
-  CreateProfileAsync(profile_manager, name, true, &mock_observer);
-  content::RunAllTasksUntilIdle();
-
-  ASSERT_EQ(1u, storage.GetNumberOfProfiles());
-  // Supervised profiles should start out omitted from the profile list.
-  EXPECT_TRUE(storage.GetAllProfilesAttributesSortedByName()[0]->IsOmitted());
-
-  name = "1 Regular Profile";
+  std::string name = "0 Regular Profile";
   CreateProfileAsync(profile_manager, name, false, &mock_observer);
   content::RunAllTasksUntilIdle();
 
-  ASSERT_EQ(2u, storage.GetNumberOfProfiles());
+  ASSERT_EQ(1u, storage.GetNumberOfProfiles());
   // Non-supervised profiles should be included in the profile list.
-  EXPECT_FALSE(storage.GetAllProfilesAttributesSortedByName()[1]->IsOmitted());
+  EXPECT_FALSE(storage.GetAllProfilesAttributesSortedByName()[0]->IsOmitted());
+
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+  name = "1 Supervised Profile";
+  CreateProfileAsync(profile_manager, name, true, &mock_observer);
+  content::RunAllTasksUntilIdle();
+
+  ASSERT_EQ(2u, storage.GetNumberOfProfiles());
+  // Supervised profiles should start out omitted from the profile list.
+  EXPECT_TRUE(storage.GetAllProfilesAttributesSortedByName()[1]->IsOmitted());
+#endif
 }
 
 TEST_F(ProfileManagerTest, AddProfileToStorageCheckOmitted) {
@@ -543,16 +560,19 @@
       profile_manager->GetProfileAttributesStorage();
   EXPECT_EQ(0u, storage.GetNumberOfProfiles());
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
   const base::FilePath supervised_path =
       temp_dir_.GetPath().AppendASCII("Supervised");
   TestingProfile* supervised_profile =
       new TestingProfile(supervised_path, nullptr);
-  supervised_profile->GetPrefs()->SetString(prefs::kSupervisedUserId, "An ID");
+  supervised_profile->GetPrefs()->SetString(
+      prefs::kSupervisedUserId, supervised_users::kChildAccountSUID);
 
   // RegisterTestingProfile adds the profile to the cache and takes ownership.
   profile_manager->RegisterTestingProfile(supervised_profile, true, false);
   ASSERT_EQ(1u, storage.GetNumberOfProfiles());
   EXPECT_TRUE(storage.GetAllProfilesAttributesSortedByName()[0]->IsOmitted());
+#endif
 
   const base::FilePath nonsupervised_path =
       temp_dir_.GetPath().AppendASCII("Non-Supervised");
@@ -560,10 +580,16 @@
       new TestingProfile(nonsupervised_path, nullptr);
   profile_manager->RegisterTestingProfile(nonsupervised_profile, true, false);
 
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
   EXPECT_EQ(2u, storage.GetNumberOfProfiles());
+#else
+  EXPECT_EQ(1u, storage.GetNumberOfProfiles());
+#endif
   ProfileAttributesEntry* entry;
+#if BUILDFLAG(ENABLE_SUPERVISED_USERS)
   ASSERT_TRUE(storage.GetProfileAttributesWithPath(supervised_path, &entry));
   EXPECT_TRUE(entry->IsOmitted());
+#endif
 
   ASSERT_TRUE(storage.GetProfileAttributesWithPath(nonsupervised_path, &entry));
   EXPECT_FALSE(entry->IsOmitted());
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_database_browsertest.cc b/chrome/browser/resource_coordinator/local_site_characteristics_database_browsertest.cc
index 3e025f5..aeff47b3 100644
--- a/chrome/browser/resource_coordinator/local_site_characteristics_database_browsertest.cc
+++ b/chrome/browser/resource_coordinator/local_site_characteristics_database_browsertest.cc
@@ -61,6 +61,14 @@
                    params.notifications_usage_observation_window});
 }
 
+// Returns the longest grace period.
+base::TimeDelta GetLongestGracePeriod() {
+  const SiteCharacteristicsDatabaseParams& params =
+      GetStaticSiteCharacteristicsDatabaseParams();
+  return std::max({params.title_or_favicon_change_grace_period,
+                   params.audio_usage_grace_period});
+}
+
 // Returns the SiteCharacteristicsProto that backs |reader|.
 const SiteCharacteristicsProto* GetSiteCharacteristicsProtoFromReader(
     SiteCharacteristicsDataReader* reader) {
@@ -209,6 +217,8 @@
     // Background the tab and reload it so the audio will stop playing if it's
     // still playing.
     GetActiveWebContents()->WasHidden();
+    test_clock_.Advance(
+        GetStaticSiteCharacteristicsDatabaseParams().audio_usage_grace_period);
   }
 
   // Ensure that the current tab is allowed to display non-persistent
@@ -222,6 +232,11 @@
     ExecuteScriptInMainFrame("RequestNotificationsPermission();");
   }
 
+  void ExpireTitleOrFaviconGracePeriod() {
+    test_clock_.Advance(GetStaticSiteCharacteristicsDatabaseParams()
+                            .title_or_favicon_change_grace_period);
+  }
+
   base::SimpleTestTickClock& test_clock() { return test_clock_; }
   net::test_server::EmbeddedTestServer& test_server() { return test_server_; }
 
@@ -410,7 +425,10 @@
       &SiteCharacteristicsDataReader::UpdatesTitleInBackground,
       base::BindRepeating(
           &LocalSiteCharacteristicsDatabaseTest::ChangeTitleOfActiveWebContents,
-          base::Unretained(this)));
+          base::Unretained(this)),
+      base::BindRepeating(&LocalSiteCharacteristicsDatabaseTest::
+                              ExpireTitleOrFaviconGracePeriod,
+                          base::Unretained(this)));
 }
 
 // Test that the favicon update feature usage in background gets detected
@@ -421,6 +439,9 @@
       &SiteCharacteristicsDataReader::UpdatesFaviconInBackground,
       base::BindRepeating(&LocalSiteCharacteristicsDatabaseTest::
                               ChangeFaviconOfActiveWebContents,
+                          base::Unretained(this)),
+      base::BindRepeating(&LocalSiteCharacteristicsDatabaseTest::
+                              ExpireTitleOrFaviconGracePeriod,
                           base::Unretained(this)));
 }
 
@@ -497,6 +518,8 @@
   WaitForTransitionToLoaded(GetActiveWebContents());
   GetActiveWebContents()->WasHidden();
 
+  test_clock().Advance(GetLongestGracePeriod());
+
   // Cause the "title update in background" feature to be used.
   ChangeTitleOfActiveWebContents();
 
@@ -536,6 +559,8 @@
   WaitForTransitionToLoaded(GetActiveWebContents());
   GetActiveWebContents()->WasHidden();
 
+  test_clock().Advance(GetLongestGracePeriod());
+
   // Cause the "title update in background" feature to be used.
   ChangeTitleOfActiveWebContents();
 
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.cc b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.cc
index 8cc0a8a..c5098ef 100644
--- a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.cc
+++ b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.cc
@@ -6,6 +6,7 @@
 
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h"
+#include "chrome/browser/resource_coordinator/time.h"
 #include "chrome/browser/resource_coordinator/utils.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
@@ -60,6 +61,7 @@
     return;
 
   auto rc_visibility = ContentVisibilityToRCVisibility(visibility);
+  UpdateBackgroundedTime(rc_visibility);
   writer_->NotifySiteVisibilityChanged(rc_visibility);
 }
 
@@ -109,14 +111,15 @@
   SiteCharacteristicsDataStore* data_store =
       LocalSiteCharacteristicsDataStoreFactory::GetForProfile(profile);
   DCHECK(data_store);
-  writer_ = data_store->GetWriterForOrigin(
-      new_origin,
-      ContentVisibilityToRCVisibility(web_contents()->GetVisibility()));
+  auto rc_visibility =
+      ContentVisibilityToRCVisibility(web_contents()->GetVisibility());
+  writer_ = data_store->GetWriterForOrigin(new_origin, rc_visibility);
+  UpdateBackgroundedTime(rc_visibility);
 
   // The writer is initially in an unloaded state, load it if necessary.
   if (TabLoadTracker::Get()->GetLoadingState(web_contents()) ==
       LoadingState::LOADED) {
-    writer_->NotifySiteLoaded();
+    OnSiteLoaded();
   }
 
   writer_origin_ = new_origin;
@@ -134,7 +137,8 @@
   }
 
   MaybeNotifyBackgroundFeatureUsage(
-      &SiteCharacteristicsDataWriter::NotifyUpdatesTitleInBackground);
+      &SiteCharacteristicsDataWriter::NotifyUpdatesTitleInBackground,
+      FeatureType::kTitleChange);
 }
 
 void LocalSiteCharacteristicsWebContentsObserver::DidUpdateFaviconURL(
@@ -147,7 +151,8 @@
   }
 
   MaybeNotifyBackgroundFeatureUsage(
-      &SiteCharacteristicsDataWriter::NotifyUpdatesFaviconInBackground);
+      &SiteCharacteristicsDataWriter::NotifyUpdatesFaviconInBackground,
+      FeatureType::kFaviconChange);
 }
 
 void LocalSiteCharacteristicsWebContentsObserver::OnAudioStateChanged(
@@ -158,7 +163,8 @@
     return;
 
   MaybeNotifyBackgroundFeatureUsage(
-      &SiteCharacteristicsDataWriter::NotifyUsesAudioInBackground);
+      &SiteCharacteristicsDataWriter::NotifyUsesAudioInBackground,
+      FeatureType::kAudioUsage);
 }
 
 void LocalSiteCharacteristicsWebContentsObserver::OnLoadingStateChange(
@@ -174,9 +180,10 @@
 
   // Ignore the transitions from/to an UNLOADED state.
   if (new_loading_state == LoadingState::LOADED) {
-    writer_->NotifySiteLoaded();
+    OnSiteLoaded();
   } else if (old_loading_state == LoadingState::LOADED) {
     writer_->NotifySiteUnloaded();
+    loaded_time_ = base::TimeTicks();
   }
 }
 
@@ -197,38 +204,73 @@
       url::Origin::Create(GURL(page_navigation_id.url))
           .IsSameOriginWith(writer_origin_)) {
     MaybeNotifyBackgroundFeatureUsage(
-        &SiteCharacteristicsDataWriter::NotifyUsesNotificationsInBackground);
+        &SiteCharacteristicsDataWriter::NotifyUsesNotificationsInBackground,
+        FeatureType::kNotificationUsage);
   }
 }
 
-bool LocalSiteCharacteristicsWebContentsObserver::
-    ShouldIgnoreFeatureUsageEvent() {
+bool LocalSiteCharacteristicsWebContentsObserver::ShouldIgnoreFeatureUsageEvent(
+    FeatureType feature_type) {
   // The feature usage should be ignored if there's no writer for this tab.
   if (!writer_)
     return true;
 
-  // Features happening before the site gets loaded are also ignored.
-  // TODO(sebmarchand): Consider recording audio/notification usage before the
-  // site gets fully loaded.
-  if (TabLoadTracker::Get()->GetLoadingState(web_contents()) !=
-      LoadingState::LOADED) {
+  // Ignore all features happening before the website gets fully loaded except
+  // for the non-persistent notifications.
+  if (feature_type != FeatureType::kNotificationUsage &&
+      TabLoadTracker::Get()->GetLoadingState(web_contents()) !=
+          LoadingState::LOADED) {
     return true;
   }
 
+  // Ignore events if the tab is not in background.
+  if (ContentVisibilityToRCVisibility(web_contents()->GetVisibility()) !=
+      TabVisibility::kBackground) {
+    return true;
+  }
+
+  if (feature_type == FeatureType::kTitleChange ||
+      feature_type == FeatureType::kFaviconChange) {
+    DCHECK(!loaded_time_.is_null());
+    if (NowTicks() - loaded_time_ < GetStaticSiteCharacteristicsDatabaseParams()
+                                        .title_or_favicon_change_grace_period) {
+      return true;
+    }
+  } else if (feature_type == FeatureType::kAudioUsage) {
+    DCHECK(!backgrounded_time_.is_null());
+    if (NowTicks() - backgrounded_time_ <
+        GetStaticSiteCharacteristicsDatabaseParams().audio_usage_grace_period) {
+      return true;
+    }
+  }
+
   return false;
 }
 
 void LocalSiteCharacteristicsWebContentsObserver::
     MaybeNotifyBackgroundFeatureUsage(
-        void (SiteCharacteristicsDataWriter::*method)()) {
+        void (SiteCharacteristicsDataWriter::*method)(),
+        FeatureType feature_type) {
   DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
 
-  if (ShouldIgnoreFeatureUsageEvent())
+  if (ShouldIgnoreFeatureUsageEvent(feature_type))
     return;
 
-  if (ContentVisibilityToRCVisibility(web_contents()->GetVisibility()) ==
-      TabVisibility::kBackground) {
     (writer_.get()->*method)();
+}
+
+void LocalSiteCharacteristicsWebContentsObserver::OnSiteLoaded() {
+  DCHECK(writer_);
+  writer_->NotifySiteLoaded();
+  loaded_time_ = NowTicks();
+}
+
+void LocalSiteCharacteristicsWebContentsObserver::UpdateBackgroundedTime(
+    TabVisibility visibility) {
+  if (visibility == TabVisibility::kBackground) {
+    backgrounded_time_ = NowTicks();
+  } else {
+    backgrounded_time_ = base::TimeTicks();
   }
 }
 
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h
index 434f730..d9897494 100644
--- a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h
+++ b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h
@@ -7,6 +7,7 @@
 
 #include "base/macros.h"
 #include "base/sequence_checker.h"
+#include "base/time/time.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_writer.h"
 #include "chrome/browser/resource_coordinator/page_signal_receiver.h"
 #include "chrome/browser/resource_coordinator/tab_load_tracker.h"
@@ -68,15 +69,28 @@
   }
 
  private:
+  enum class FeatureType {
+    kTitleChange,
+    kFaviconChange,
+    kAudioUsage,
+    kNotificationUsage,
+  };
+
   // Indicates if the feature usage event just received should be ignored.
-  bool ShouldIgnoreFeatureUsageEvent();
+  bool ShouldIgnoreFeatureUsageEvent(FeatureType feature_type);
 
   // Helper function to maybe notify |writer_| that a feature event has been
-  // received while in background. Doen't do anything if
-  // ShouldIgnoreFeatureUsageEvent returns true or if the tab isn't
-  // backgrounded.
+  // received while in background. Doesn't do anything if
+  // ShouldIgnoreFeatureUsageEvent returns true.
   void MaybeNotifyBackgroundFeatureUsage(
-      void (SiteCharacteristicsDataWriter::*method)());
+      void (SiteCharacteristicsDataWriter::*method)(),
+      FeatureType feature_type);
+
+  // Function to call when the site switch to the loaded state.
+  void OnSiteLoaded();
+
+  // Updates |backgrounded_time_| based on |visibility|.
+  void UpdateBackgroundedTime(TabVisibility visibility);
 
   // The writer that processes the event received by this class.
   std::unique_ptr<SiteCharacteristicsDataWriter> writer_;
@@ -94,6 +108,14 @@
   // The PageSignalReceiver observed by this instance.
   PageSignalReceiver* page_signal_receiver_ = nullptr;
 
+  // The time at which this tab switched to the loaded state, null if this tab
+  // is not currently loaded.
+  base::TimeTicks loaded_time_;
+
+  // The time at which this tab has been backgrounded, null if this tab is
+  // currently visible.
+  base::TimeTicks backgrounded_time_;
+
   SEQUENCE_CHECKER(sequence_checker_);
 
   DISALLOW_COPY_AND_ASSIGN(LocalSiteCharacteristicsWebContentsObserver);
diff --git a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer_unittest.cc b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer_unittest.cc
index f01de11..4bdea4c 100644
--- a/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer_unittest.cc
+++ b/chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer_unittest.cc
@@ -5,11 +5,13 @@
 #include "chrome/browser/resource_coordinator/local_site_characteristics_webcontents_observer.h"
 
 #include "base/macros.h"
+#include "base/test/simple_test_tick_clock.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_store_factory.h"
 #include "chrome/browser/resource_coordinator/local_site_characteristics_data_unittest_utils.h"
 #include "chrome/browser/resource_coordinator/page_signal_receiver.h"
 #include "chrome/browser/resource_coordinator/site_characteristics_data_store.h"
 #include "chrome/browser/resource_coordinator/tab_manager_features.h"
+#include "chrome/browser/resource_coordinator/time.h"
 #include "content/public/browser/navigation_handle.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/favicon_url.h"
@@ -77,12 +79,14 @@
 class LocalSiteCharacteristicsWebContentsObserverTest
     : public testing::ChromeTestHarnessWithLocalDB {
  protected:
-  LocalSiteCharacteristicsWebContentsObserverTest() = default;
+  LocalSiteCharacteristicsWebContentsObserverTest()
+      : scoped_set_tick_clock_for_testing_(&test_clock_) {}
   ~LocalSiteCharacteristicsWebContentsObserverTest() override = default;
 
   void SetUp() override {
     testing::ChromeTestHarnessWithLocalDB::SetUp();
 
+    test_clock().Advance(base::TimeDelta::FromSeconds(1));
     // Set the testing factory for the test browser context.
     LocalSiteCharacteristicsDataStoreFactory::GetInstance()->SetTestingFactory(
         browser_context(), &BuildMockDataStoreForContext);
@@ -122,9 +126,13 @@
             receiver_.GetNavigationIDForWebContents(web_contents()), ""};
   }
 
+  base::SimpleTestTickClock& test_clock() { return test_clock_; }
+
  private:
   std::unique_ptr<LocalSiteCharacteristicsWebContentsObserver> observer_;
   PageSignalReceiver receiver_;
+  base::SimpleTestTickClock test_clock_;
+  ScopedSetTickClockForTesting scoped_set_tick_clock_for_testing_;
 
   DISALLOW_COPY_AND_ASSIGN(LocalSiteCharacteristicsWebContentsObserverTest);
 };
@@ -169,6 +177,8 @@
   EXPECT_CALL(*mock_writer, OnDestroy());
 }
 
+// Test that the feature usage events get forwarded to the writer when the tab
+// is in background.
 TEST_F(LocalSiteCharacteristicsWebContentsObserverTest,
        FeatureEventsGetForwardedWhenInBackground) {
   MockDataWriter* mock_writer = NavigateAndReturnMockWriter(kTestUrl1);
@@ -180,14 +190,16 @@
 
   TabLoadTracker::Get()->TransitionStateForTesting(web_contents(),
                                                    LoadingState::LOADED);
-
   EXPECT_CALL(*mock_writer,
               NotifySiteVisibilityChanged(TabVisibility::kForeground));
+  EXPECT_CALL(*mock_writer, NotifySiteLoaded());
   web_contents()->WasShown();
+  observer()->OnLoadingStateChange(web_contents(),
+                                   TabLoadTracker::LoadingState::LOADING,
+                                   TabLoadTracker::LoadingState::LOADED);
   ::testing::Mock::VerifyAndClear(mock_writer);
 
-  // Test that the feature usage events get forwarded to the writer when the
-  // tab is in background.
+  // Ensure that no event gets forwarded if the tab is not in background.
   observer()->DidUpdateFaviconURL({});
   ::testing::Mock::VerifyAndClear(mock_writer);
   observer()->TitleWasSet(nullptr);
@@ -203,18 +215,44 @@
   web_contents()->WasHidden();
   ::testing::Mock::VerifyAndClear(mock_writer);
 
+  // Notification usage events always get forwarded.
+  EXPECT_CALL(*mock_writer, NotifyUsesNotificationsInBackground());
+  observer()->OnNonPersistentNotificationCreated(web_contents(),
+                                                 GetNavIdForWebContents());
+  ::testing::Mock::VerifyAndClear(mock_writer);
+
+  auto params = GetStaticSiteCharacteristicsDatabaseParams();
+  // Title and Favicon should be ignored during the post-loading grace period.
+  observer()->DidUpdateFaviconURL({});
+  observer()->TitleWasSet(nullptr);
+  ::testing::Mock::VerifyAndClear(mock_writer);
+
+  test_clock().Advance(params.title_or_favicon_change_grace_period);
+
   EXPECT_CALL(*mock_writer, NotifyUpdatesFaviconInBackground());
   observer()->DidUpdateFaviconURL({});
   ::testing::Mock::VerifyAndClear(mock_writer);
   EXPECT_CALL(*mock_writer, NotifyUpdatesTitleInBackground());
   observer()->TitleWasSet(nullptr);
   ::testing::Mock::VerifyAndClear(mock_writer);
-  EXPECT_CALL(*mock_writer, NotifyUsesAudioInBackground());
+
+  // Brievly switch the tab to foreground to reset the last backgrounded time.
+  EXPECT_CALL(*mock_writer,
+              NotifySiteVisibilityChanged(TabVisibility::kForeground));
+  EXPECT_CALL(*mock_writer,
+              NotifySiteVisibilityChanged(TabVisibility::kBackground));
+  web_contents()->WasShown();
+  web_contents()->WasHidden();
+  ::testing::Mock::VerifyAndClear(mock_writer);
+
+  // Audio usage events should be ignored during the post-background grace
+  // period.
   observer()->OnAudioStateChanged(true);
   ::testing::Mock::VerifyAndClear(mock_writer);
-  EXPECT_CALL(*mock_writer, NotifyUsesNotificationsInBackground());
-  observer()->OnNonPersistentNotificationCreated(web_contents(),
-                                                 GetNavIdForWebContents());
+
+  test_clock().Advance(params.audio_usage_grace_period);
+  EXPECT_CALL(*mock_writer, NotifyUsesAudioInBackground());
+  observer()->OnAudioStateChanged(true);
   ::testing::Mock::VerifyAndClear(mock_writer);
 
   EXPECT_CALL(*mock_writer, OnDestroy());
@@ -243,6 +281,23 @@
   ::testing::Mock::VerifyAndClear(mock_writer);
   observer()->OnAudioStateChanged(true);
   ::testing::Mock::VerifyAndClear(mock_writer);
+
+  EXPECT_CALL(*mock_writer, OnDestroy());
+}
+
+TEST_F(LocalSiteCharacteristicsWebContentsObserverTest,
+       NotificationEventsWhenLoadingInBackground) {
+  MockDataWriter* mock_writer = NavigateAndReturnMockWriter(kTestUrl1);
+
+  TabLoadTracker::Get()->TransitionStateForTesting(web_contents(),
+                                                   LoadingState::LOADING);
+
+  EXPECT_CALL(*mock_writer,
+              NotifySiteVisibilityChanged(TabVisibility::kBackground));
+  web_contents()->WasHidden();
+  ::testing::Mock::VerifyAndClear(mock_writer);
+
+  EXPECT_CALL(*mock_writer, NotifyUsesNotificationsInBackground());
   observer()->OnNonPersistentNotificationCreated(web_contents(),
                                                  GetNavIdForWebContents());
   ::testing::Mock::VerifyAndClear(mock_writer);
diff --git a/chrome/browser/resource_coordinator/tab_manager_features.cc b/chrome/browser/resource_coordinator/tab_manager_features.cc
index e1d93ac..7d18d8a96 100644
--- a/chrome/browser/resource_coordinator/tab_manager_features.cc
+++ b/chrome/browser/resource_coordinator/tab_manager_features.cc
@@ -125,6 +125,10 @@
     "AudioUsageObservationWindow";
 const char kSiteCharacteristicsDb_NotificationsUsageObservationWindow[] =
     "NotificationsUsageObservationWindow";
+const char kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod[] =
+    "TitleOrFaviconChangeGracePeriod";
+const char kSiteCharacteristicsDb_AudioUsageGracePeriod[] =
+    "AudioUsageGracePeriod";
 
 const char kInfiniteSessionRestore_MinSimultaneousTabLoads[] =
     "MinSimultaneousTabLoads";
@@ -204,6 +208,14 @@
     kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default =
         base::TimeDelta::FromHours(2);
 
+// TODO(sebmarchand): Get some real-world data and choose an appropriate value
+// here.
+const base::TimeDelta
+    kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default =
+        base::TimeDelta::FromSeconds(20);
+const base::TimeDelta kSiteCharacteristicsDb_AudioUsageGracePeriod_Default =
+    base::TimeDelta::FromSeconds(10);
+
 // Default values for infinite session restore feature. Many of these are taken
 // from thin air, but others are motivated by existing metrics.
 const uint32_t kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault = 1;
@@ -367,6 +379,19 @@
           kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default
               .InSeconds()));
 
+  params.title_or_favicon_change_grace_period =
+      base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
+          features::kSiteCharacteristicsDatabase,
+          kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod,
+          kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default
+              .InSeconds()));
+
+  params.audio_usage_grace_period =
+      base::TimeDelta::FromSeconds(base::GetFieldTrialParamByFeatureAsInt(
+          features::kSiteCharacteristicsDatabase,
+          kSiteCharacteristicsDb_AudioUsageGracePeriod,
+          kSiteCharacteristicsDb_AudioUsageGracePeriod_Default.InSeconds()));
+
   return params;
 }
 
diff --git a/chrome/browser/resource_coordinator/tab_manager_features.h b/chrome/browser/resource_coordinator/tab_manager_features.h
index f9309288a..415be41 100644
--- a/chrome/browser/resource_coordinator/tab_manager_features.h
+++ b/chrome/browser/resource_coordinator/tab_manager_features.h
@@ -54,6 +54,8 @@
 extern const char kSiteCharacteristicsDb_TitleUpdateObservationWindow[];
 extern const char kSiteCharacteristicsDb_AudioUsageObservationWindow[];
 extern const char kSiteCharacteristicsDb_NotificationsUsageObservationWindow[];
+extern const char kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod[];
+extern const char kSiteCharacteristicsDb_AudioUsageGracePeriod[];
 
 // Variation parameter names related to infinite session restore.
 extern const char kInfiniteSessionRestore_MinSimultaneousTabLoads[];
@@ -99,6 +101,10 @@
     kSiteCharacteristicsDb_AudioUsageObservationWindow_Default;
 extern const base::TimeDelta
     kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default;
+extern const base::TimeDelta
+    kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default;
+extern const base::TimeDelta
+    kSiteCharacteristicsDb_AudioUsageGracePeriod_Default;
 
 // Default values for infinite session restore feature.
 extern const uint32_t kInfiniteSessionRestore_MinSimultaneousTabLoadsDefault;
@@ -220,6 +226,16 @@
   // Minimum observation window before considering that this website doesn't
   // use notifications while in background.
   base::TimeDelta notifications_usage_observation_window;
+  // The period of time after loading during which we ignore title/favicon
+  // change events. It's possible for some site that are loaded in background to
+  // use some of these features without this being an attempt to communicate
+  // with the user (e.g. the tab is just really finishing to load).
+  base::TimeDelta title_or_favicon_change_grace_period;
+  // The period of time during which we ignore audio usage gets ignored after a
+  // tab gets backgrounded. It's necessary because there might be a delay
+  // between a media request gets initiated and the time the audio actually
+  // starts.
+  base::TimeDelta audio_usage_grace_period;
 };
 
 // Parameters used by the infinite session restore feature.
diff --git a/chrome/browser/resource_coordinator/tab_manager_features_unittest.cc b/chrome/browser/resource_coordinator/tab_manager_features_unittest.cc
index 97dea9a..c41dcf04 100644
--- a/chrome/browser/resource_coordinator/tab_manager_features_unittest.cc
+++ b/chrome/browser/resource_coordinator/tab_manager_features_unittest.cc
@@ -91,7 +91,9 @@
       base::TimeDelta favicon_update_observation_window,
       base::TimeDelta title_update_observation_window,
       base::TimeDelta audio_usage_observation_window,
-      base::TimeDelta notifications_usage_observation_window) {
+      base::TimeDelta notifications_usage_observation_window,
+      base::TimeDelta title_or_favicon_change_grace_period,
+      base::TimeDelta audio_usage_grace_period) {
     SiteCharacteristicsDatabaseParams params =
         GetSiteCharacteristicsDatabaseParams();
 
@@ -103,6 +105,9 @@
               params.audio_usage_observation_window);
     EXPECT_EQ(notifications_usage_observation_window,
               params.notifications_usage_observation_window);
+    EXPECT_EQ(title_or_favicon_change_grace_period,
+              params.title_or_favicon_change_grace_period);
+    EXPECT_EQ(audio_usage_grace_period, params.audio_usage_grace_period);
   }
 
   void ExpectInfiniteSessionRestoreParams(
@@ -152,7 +157,9 @@
         kSiteCharacteristicsDb_FaviconUpdateObservationWindow_Default,
         kSiteCharacteristicsDb_TitleUpdateObservationWindow_Default,
         kSiteCharacteristicsDb_AudioUsageObservationWindow_Default,
-        kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default);
+        kSiteCharacteristicsDb_NotificationsUsageObservationWindow_Default,
+        kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod_Default,
+        kSiteCharacteristicsDb_AudioUsageGracePeriod_Default);
   }
 
   void ExpectDefaultInfiniteSessionRestoreParams() {
@@ -274,6 +281,8 @@
   SetParam(kSiteCharacteristicsDb_TitleUpdateObservationWindow, "foo");
   SetParam(kSiteCharacteristicsDb_AudioUsageObservationWindow, ".");
   SetParam(kSiteCharacteristicsDb_NotificationsUsageObservationWindow, "abc");
+  SetParam(kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod, "bleh");
+  SetParam(kSiteCharacteristicsDb_AudioUsageGracePeriod, "!!!");
   EnableSiteCharacteristicsDatabase();
   ExpectDefaultSiteCharacteristicsDatabaseParams();
 }
@@ -284,13 +293,16 @@
   SetParam(kSiteCharacteristicsDb_AudioUsageObservationWindow, "360000");
   SetParam(kSiteCharacteristicsDb_NotificationsUsageObservationWindow,
            "3600000");
+  SetParam(kSiteCharacteristicsDb_TitleOrFaviconChangeGracePeriod, "42");
+  SetParam(kSiteCharacteristicsDb_AudioUsageGracePeriod, "43");
 
   EnableSiteCharacteristicsDatabase();
 
   ExpectSiteCharacteristicsDatabaseParams(
       base::TimeDelta::FromSeconds(3600), base::TimeDelta::FromSeconds(36000),
       base::TimeDelta::FromSeconds(360000),
-      base::TimeDelta::FromSeconds(3600000));
+      base::TimeDelta::FromSeconds(3600000), base::TimeDelta::FromSeconds(42),
+      base::TimeDelta::FromSeconds(43));
 }
 
 TEST_F(TabManagerFeaturesTest,
diff --git a/content/browser/resources/accessibility/OWNERS b/chrome/browser/resources/accessibility/OWNERS
similarity index 100%
rename from content/browser/resources/accessibility/OWNERS
rename to chrome/browser/resources/accessibility/OWNERS
diff --git a/content/browser/resources/accessibility/accessibility.css b/chrome/browser/resources/accessibility/accessibility.css
similarity index 92%
rename from content/browser/resources/accessibility/accessibility.css
rename to chrome/browser/resources/accessibility/accessibility.css
index 45ade4f..440ebefd8 100644
--- a/content/browser/resources/accessibility/accessibility.css
+++ b/chrome/browser/resources/accessibility/accessibility.css
@@ -40,21 +40,21 @@
   flex-basis: 50%;
 }
 
-.checkbox_row {
-  display: flex;
+.checkbox-row {
   align-items: center;
+  display: flex;
 }
 
-.checkbox_wrapper {
-  width: 32px;
+.checkbox-wrapper {
+  flex-grow: 0;
   margin: 0 0 2px 0;
   padding: 0;
-  flex-grow: 0;
+  width: 32px;
 }
 
 .secondary {
-  margin: 0 0 12px 32px;
   color: #696969;
+  margin: 0 0 12px 32px;
 }
 
 a {
@@ -62,15 +62,15 @@
 }
 
 label {
+  flex-grow: 1;
   margin: 0 0 2px 0;
   padding: 0;
-  flex-grow: 1;
 }
 
 label.disabled {
   color: #696969;
 }
 
-label input[type="checkbox"] {
+label input[type='checkbox'] {
   margin-right: 6px;
 }
diff --git a/content/browser/resources/accessibility/accessibility.html b/chrome/browser/resources/accessibility/accessibility.html
similarity index 83%
rename from content/browser/resources/accessibility/accessibility.html
rename to chrome/browser/resources/accessibility/accessibility.html
index 80e7b7a..551ac063 100644
--- a/content/browser/resources/accessibility/accessibility.html
+++ b/chrome/browser/resources/accessibility/accessibility.html
@@ -24,8 +24,8 @@
     <div class="column">
       <h2>Global accessibility mode:</h2>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="native"
                  aria-describedby="native_secondary">
         </span>
@@ -38,8 +38,8 @@
         specific to this platform.
       </div>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="web"
                  aria-describedby="web_secondary">
         </span>
@@ -51,8 +51,8 @@
         Accessibility support is enabled for web content.
       </div>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="text"
                  aria-describedby="text_secondary">
         </span>
@@ -65,8 +65,8 @@
         box of arbitrary character ranges.
       </div>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="screenreader"
                  aria-describedby="screenreader_secondary">
         </span>
@@ -79,8 +79,8 @@
         screen readers.
       </div>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="html"
                  aria-describedby="html_secondary">
         </span>
@@ -94,8 +94,8 @@
 
       <h2>Options:</h2>
 
-      <div class="checkbox_row">
-        <span class="checkbox_wrapper">
+      <div class="checkbox-row">
+        <span class="checkbox-wrapper">
           <input type="checkbox" id="internal"
                  aria-describedby="internal_secondary">
         </span>
@@ -128,16 +128,21 @@
 
   <!--
   <div id="global" class="row">Global accessibility mode:
-    <a is="action-link" role="button" id="toggle_global" aria-labelledby="global"></a>
+    <a is="action-link" role="button" id="toggle_global"
+       aria-labelledby="global"></a>
   </div>
 
-  <div id="internal" class="row">Show internal accessibility tree instead of native:
-    <a is="action-link" role="button" id="toggle_internal" aria-labelledby="internal"></a>
+  <div id="internal" class="row">
+    Show internal accessibility tree instead of native:
+    <a is="action-link" role="button" id="toggle_internal"
+       aria-labelledby="internal"></a>
   </div>
 -->
   <h2>Chrome Native UI:</h2>
   <div id="native_ui">
-    <a is="action-link" tabindex="0" role="button" id="showNativeUI">show accessibility tree</a>
+    <a is="action-link" tabindex="0" role="button" id="showNativeUI">
+      show accessibility tree
+    </a>
   </div>
 
   <h2>Pages:</h2>
diff --git a/content/browser/resources/accessibility/accessibility.js b/chrome/browser/resources/accessibility/accessibility.js
similarity index 78%
rename from content/browser/resources/accessibility/accessibility.js
rename to chrome/browser/resources/accessibility/accessibility.js
index 979aa311..0df9bc0d 100644
--- a/content/browser/resources/accessibility/accessibility.js
+++ b/chrome/browser/resources/accessibility/accessibility.js
@@ -15,15 +15,13 @@
     kHTML: 1 << 4,
 
     get kAXModeWebContentsOnly() {
-      return AXMode.kWebContents |
-        AXMode.kInlineTextBoxes | AXMode.kScreenReader |
-        AXMode.kHTML;
+      return AXMode.kWebContents | AXMode.kInlineTextBoxes |
+          AXMode.kScreenReader | AXMode.kHTML;
     },
 
     get kAXModeComplete() {
       return AXMode.kNativeAPIs | AXMode.kWebContents |
-        AXMode.kInlineTextBoxes | AXMode.kScreenReader |
-        AXMode.kHTML;
+          AXMode.kInlineTextBoxes | AXMode.kScreenReader | AXMode.kHTML;
     }
   };
 
@@ -39,14 +37,16 @@
   }
 
   function toggleAccessibility(data, element, mode) {
-    chrome.send('toggleAccessibility',
-                [String(data.processId), String(data.routeId), mode]);
+    chrome.send(
+        'toggleAccessibility',
+        [String(data.processId), String(data.routeId), mode]);
     document.location.reload();
   }
 
   function requestWebContentsTree(data, element) {
-    chrome.send('requestWebContentsTree',
-                [String(data.processId), String(data.routeId)]);
+    chrome.send(
+        'requestWebContentsTree',
+        [String(data.processId), String(data.routeId)]);
   }
 
   function initialize() {
@@ -69,7 +69,7 @@
 
     var showNativeUI = $('showNativeUI');
     showNativeUI.addEventListener('click', function() {
-      chrome.send('requestNativeUITree', []);
+      chrome.send('requestNativeUITree');
     });
   }
 
@@ -115,12 +115,11 @@
       siteInfo.appendChild(formatValue(data, properties[j]));
     row.appendChild(siteInfo);
 
-    row.appendChild(createModeElement(AXMode.kNativeAPIs, data))
-    row.appendChild(createModeElement(AXMode.kWebContents, data))
-    row.appendChild(createModeElement(AXMode.kInlineTextBoxes,
-      data))
-    row.appendChild(createModeElement(AXMode.kScreenReader, data))
-    row.appendChild(createModeElement(AXMode.kHTML, data))
+    row.appendChild(createModeElement(AXMode.kNativeAPIs, data));
+    row.appendChild(createModeElement(AXMode.kWebContents, data));
+    row.appendChild(createModeElement(AXMode.kInlineTextBoxes, data));
+    row.appendChild(createModeElement(AXMode.kScreenReader, data));
+    row.appendChild(createModeElement(AXMode.kHTML, data));
 
     row.appendChild(document.createTextNode(' | '));
 
@@ -128,8 +127,7 @@
       row.appendChild(createShowAccessibilityTreeElement(data, row, true));
       row.appendChild(createHideAccessibilityTreeElement(row.id));
       row.appendChild(createAccessibilityTreeElement(data));
-    }
-    else {
+    } else {
       row.appendChild(createShowAccessibilityTreeElement(data, row, false));
       if ('error' in data)
         row.appendChild(createErrorMessageElement(data, row));
@@ -143,7 +141,7 @@
       var faviconElement = document.createElement('img');
       if (value)
         faviconElement.src = value;
-      faviconElement.alt = "";
+      faviconElement.alt = '';
       return faviconElement;
     }
 
@@ -160,17 +158,17 @@
   function getNameForAccessibilityMode(mode) {
     switch (mode) {
       case AXMode.kNativeAPIs:
-        return "native"
+        return 'native';
       case AXMode.kWebContents:
-        return "web"
+        return 'web';
       case AXMode.kInlineTextBoxes:
-        return "inline text"
+        return 'inline text';
       case AXMode.kScreenReader:
-        return "screen reader"
+        return 'screen reader';
       case AXMode.kHTML:
-        return "html"
+        return 'html';
     }
-    return "unknown"
+    return 'unknown';
   }
 
   function createModeElement(mode, data) {
@@ -179,10 +177,10 @@
     link.setAttribute('role', 'button');
 
     var stateText = ((currentMode & mode) != 0) ? 'true' : 'false';
-    link.textContent = getNameForAccessibilityMode(mode) + ": " + stateText;
+    link.textContent = getNameForAccessibilityMode(mode) + ': ' + stateText;
     link.setAttribute('aria-pressed', stateText);
-    link.addEventListener('click',
-                          toggleAccessibility.bind(this, data, link, mode));
+    link.addEventListener(
+        'click', toggleAccessibility.bind(this, data, link, mode));
     return link;
   }
 
@@ -194,8 +192,8 @@
     else
       link.textContent = 'show accessibility tree';
     link.id = row.id + ':showTree';
-    link.addEventListener('click',
-                          requestWebContentsTree.bind(this, data, link));
+    link.addEventListener(
+        'click', requestWebContentsTree.bind(this, data, link));
     return link;
   }
 
@@ -203,15 +201,14 @@
     var link = document.createElement('a', 'action-link');
     link.setAttribute('role', 'button');
     link.textContent = 'hide accessibility tree';
-    link.addEventListener('click',
-                          function() {
-        $(id + ':showTree').textContent = 'show accessibility tree';
-        var existingTreeElements = $(id).getElementsByTagName('pre');
-        for (var i = 0; i < existingTreeElements.length; i++)
-          $(id).removeChild(existingTreeElements[i]);
-        var row = $(id);
-        while (row.lastChild != $(id + ':showTree'))
-          row.removeChild(row.lastChild);
+    link.addEventListener('click', function() {
+      $(id + ':showTree').textContent = 'show accessibility tree';
+      var existingTreeElements = $(id).getElementsByTagName('pre');
+      for (var i = 0; i < existingTreeElements.length; i++)
+        $(id).removeChild(existingTreeElements[i]);
+      var row = $(id);
+      while (row.lastChild != $(id + ':showTree'))
+        row.removeChild(row.lastChild);
     });
     return link;
   }
@@ -221,13 +218,13 @@
     var errorMessage = data.error;
     errorMessageElement.innerHTML = errorMessage + '&nbsp;';
     var closeLink = document.createElement('a');
-    closeLink.href='#';
+    closeLink.href = '#';
     closeLink.textContent = '[close]';
     closeLink.addEventListener('click', function() {
-        var parentElement = errorMessageElement.parentElement;
-        parentElement.removeChild(errorMessageElement);
-        if (parentElement.childElementCount == 0)
-          parentElement.parentElement.removeChild(parentElement);
+      var parentElement = errorMessageElement.parentElement;
+      parentElement.removeChild(errorMessageElement);
+      if (parentElement.childElementCount == 0)
+        parentElement.parentElement.removeChild(parentElement);
     });
     errorMessageElement.appendChild(closeLink);
     return errorMessageElement;
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_confirm_reject.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_confirm_reject.html
index 1d7db47..3bd0ce6 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_confirm_reject.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_confirm_reject.html
@@ -3,6 +3,7 @@
      found in the LICENSE file. -->
 
 <link rel="import" href="chrome://resources/cr_elements/cr_radio_button/cr_radio_button.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-radio-group/paper-radio-group.html">
 <dom-module id="assistant-confirm-reject">
   <template>
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
index 500b0970..90240b06 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_get_more.html
@@ -2,6 +2,7 @@
      Use of this source code is governed by a BSD-style license that can be
      found in the LICENSE file. -->
 
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <dom-module id="assistant-get-more">
   <template>
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
index bbf5305..e4432b5 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_loading.html
@@ -4,6 +4,8 @@
 
 <link rel="import" href="chrome://resources/cr_elements/cr_expand_button/cr_expand_button.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html">
 <dom-module id="assistant-loading">
   <template>
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_optin.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_optin.html
index 4b143ce..8b3b8f92 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_optin.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_optin.html
@@ -12,8 +12,6 @@
 <link rel="import" href="chrome://oobe/custom_elements.html">
 <link rel="import" href="chrome://resources/html/i18n_behavior.html">
 <link rel="import" href="chrome://resources/html/util.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/iron-icons/iron-icons.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/paper-progress/paper-progress.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
 <link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_ready.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_ready.html
index 2a75389e..4199344 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_ready.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_ready.html
@@ -2,6 +2,7 @@
      Use of this source code is governed by a BSD-style license that can be
      found in the LICENSE file. -->
 
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <dom-module id="assistant-ready">
   <template>
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html b/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
index d3799938..ad3b409 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/assistant_third_party.html
@@ -2,6 +2,7 @@
      Use of this source code is governed by a BSD-style license that can be
      found in the LICENSE file. -->
 
+<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <dom-module id="assistant-third-party">
   <template>
     <link rel="stylesheet" href="../login/oobe_flex_layout.css">
diff --git a/chrome/browser/resources/chromeos/assistant_optin/setting_zippy.html b/chrome/browser/resources/chromeos/assistant_optin/setting_zippy.html
index 3ecb6f5..da9a52d4 100644
--- a/chrome/browser/resources/chromeos/assistant_optin/setting_zippy.html
+++ b/chrome/browser/resources/chromeos/assistant_optin/setting_zippy.html
@@ -5,7 +5,6 @@
 <link rel="import" href="chrome://resources/cr_elements/cr_expand_button/cr_expand_button.html">
 <link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/iron-icons/iron-icons.html">
 <dom-module id="setting-zippy">
   <template>
     <link rel="stylesheet" href="setting_zippy.css">
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
index d570e19e..962b7c07 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_ca.xtb
@@ -679,7 +679,7 @@
 <translation id="6561818612645211875">Ves al principi de la fila actual</translation>
 <translation id="6587021927234520429">No hi ha cap capçalera més del nivell 4.</translation>
 <translation id="6601344353291556895">Activa les descripcions detallades</translation>
-<translation id="6615602925644411249">Cerqueu a la pàgina.</translation>
+<translation id="6615602925644411249">Cerca a la pàgina.</translation>
 <translation id="6628427060004938651">Part</translation>
 <translation id="6633350132811819843">No hi ha cap taula més.</translation>
 <translation id="6637586476836377253">registre</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
index 687fe510..e075b1a 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_fa.xtb
@@ -566,7 +566,7 @@
 <translation id="5562645715554321347">hdnggrp</translation>
 <translation id="5574412348552378458">‏حالت یادگیری ChromeVox</translation>
 <translation id="5583640892426849032">Backspace</translation>
-<translation id="5585044216466955529">ویرایش نوشتار، ورودی رایانامه</translation>
+<translation id="5585044216466955529">ویرایش نوشتار، ورودی ایمیل</translation>
 <translation id="5597170376237141345">کادر انتخاب بعدی</translation>
 <translation id="5597933780944041114">عنوان نوشتار موجود نیست.</translation>
 <translation id="5598905979683743333"><ph name="NAME" />، دکمه رادیویی انتخاب نشد</translation>
diff --git a/chrome/browser/resources/local_ntp/custom_backgrounds.js b/chrome/browser/resources/local_ntp/custom_backgrounds.js
index 52082bcf..747b276 100644
--- a/chrome/browser/resources/local_ntp/custom_backgrounds.js
+++ b/chrome/browser/resources/local_ntp/custom_backgrounds.js
@@ -327,16 +327,23 @@
                photos[0].photoContainerId == tile.dataset.photoContainerId);
         }
 
-        // Dependent upon the succces of the load, populate the image selection
+        // Dependent upon the success of the load, populate the image selection
         // dialog or close the current dialog.
-        customBackgrounds.resetSelectionDialog();
         if (imageDataLoaded) {
+          customBackgrounds.resetSelectionDialog();
           customBackgrounds.showImageSelectionDialog(tile.dataset.name);
         } else {
-          let source = customBackgrounds.dialogCollectionsSource;
-          customBackgrounds.closeCollectionDialog(menu);
-
-          let errors = source ? coll_img_errors : photos_errors;
+          let errors =
+              (collectionsSource ==
+                       customBackgrounds.SOURCES.CHROME_BACKGROUNDS ?
+                   coll_img_errors :
+                   photos_errors);
+          // If an auth error occurs leave the dialog open and redirect the
+          // user to sign-in again. Then they can return to the same place in
+          // the customization flow.
+          if (!errors.auth_error) {
+            customBackgrounds.closeCollectionDialog(menu);
+          }
           customBackgrounds.handleError(errors);
         }
       };
@@ -493,7 +500,7 @@
  * variable name "coll" which is a dict of background collections data.
  * @private
  */
-customBackgrounds.loadCollections = function() {
+customBackgrounds.loadChromeBackgrounds = function() {
   var collElement = $('ntp-collection-loader');
   if (collElement) {
     collElement.parentNode.removeChild(collElement);
@@ -503,7 +510,14 @@
   collScript.src = 'chrome-search://local-ntp/ntp-background-collections.js?' +
       'collection_type=background';
   document.body.appendChild(collScript);
+};
 
+/**
+ * Load the NTPGooglePhotoAlbums script. It'll create a global
+ * variable name "albums" which is a dict of album data.
+ * @private
+ */
+customBackgrounds.loadGooglePhotosAlbums = function() {
   var albumElement = $('ntp-album-loader');
   if (albumElement) {
     albumElement.parentNode.removeChild(albumElement);
@@ -580,7 +594,6 @@
 
   // Edit gear icon interaction events.
   var editBackgroundInteraction = function(event) {
-    customBackgrounds.loadCollections();
     editDialog.showModal();
   };
   $(customBackgrounds.IDS.EDIT_BG).onclick = function(event) {
@@ -623,13 +636,16 @@
 
   // Interactions with the "Chrome backgrounds" option.
   var defaultWallpapersInteraction = function(event) {
-    editDialog.close();
-    if (typeof coll != 'undefined' && coll.length > 0) {
-      customBackgrounds.showCollectionSelectionDialog(
-          customBackgrounds.SOURCES.CHROME_BACKGROUNDS);
-    } else {
-      customBackgrounds.handleError(coll_errors);
-    }
+    customBackgrounds.loadChromeBackgrounds();
+    $('ntp-collection-loader').onload = function() {
+      editDialog.close();
+      if (typeof coll != 'undefined' && coll.length > 0) {
+        customBackgrounds.showCollectionSelectionDialog(
+            customBackgrounds.SOURCES.CHROME_BACKGROUNDS);
+      } else {
+        customBackgrounds.handleError(coll_errors);
+      }
+    };
   };
   $(customBackgrounds.IDS.DEFAULT_WALLPAPERS).onclick =
       defaultWallpapersInteraction;
@@ -641,14 +657,24 @@
 
   // Interactions with the Google Photos option.
   var googlePhotosInteraction = function(event) {
-    editDialog.close();
-    if (typeof albums != 'undefined' && !albums_errors.auth_error &&
-        !albums.net_error && !albums.service_error) {
-      customBackgrounds.showCollectionSelectionDialog(
-          customBackgrounds.SOURCES.GOOGLE_PHOTOS);
-    } else {
-      customBackgrounds.handleError(albums_errors);
-    }
+    customBackgrounds.loadGooglePhotosAlbums();
+    $('ntp-album-loader').onload = function() {
+      if (typeof albums != 'undefined' && !albums_errors.auth_error &&
+          !albums.net_error && !albums.service_error) {
+        editDialog.close();
+        customBackgrounds.showCollectionSelectionDialog(
+            customBackgrounds.SOURCES.GOOGLE_PHOTOS);
+      } else {
+        // If an auth error occurs leave the dialog open and redirect the
+        // user to sign-in again. Then they can return to the same place in
+        // the customization flow.
+        if (!albums_errors.auth_error) {
+          editDialog.close();
+        }
+
+        customBackgrounds.handleError(albums_errors);
+      }
+    };
   };
   $(customBackgrounds.IDS.CONNECT_GOOGLE_PHOTOS).onclick =
       googlePhotosInteraction;
diff --git a/chrome/browser/resources/md_extensions/BUILD.gn b/chrome/browser/resources/md_extensions/BUILD.gn
index d0eab5f..19a4c5d 100644
--- a/chrome/browser/resources/md_extensions/BUILD.gn
+++ b/chrome/browser/resources/md_extensions/BUILD.gn
@@ -68,6 +68,7 @@
     ":options_dialog",
     ":pack_dialog",
     ":pack_dialog_alert",
+    ":runtime_host_permissions",
     ":runtime_hosts_dialog",
     ":service",
     ":shortcut_input",
@@ -280,6 +281,14 @@
   externs_list = [ "$externs_path/developer_private.js" ]
 }
 
+js_library("runtime_host_permissions") {
+  deps = [
+    ":item",
+    ":runtime_hosts_dialog",
+  ]
+  externs_list = [ "$externs_path/developer_private.js" ]
+}
+
 js_library("runtime_hosts_dialog") {
   deps = [
     "//ui/webui/resources/cr_elements/cr_dialog:cr_dialog",
diff --git a/chrome/browser/resources/md_extensions/detail_view.html b/chrome/browser/resources/md_extensions/detail_view.html
index c4070c3..1110282 100644
--- a/chrome/browser/resources/md_extensions/detail_view.html
+++ b/chrome/browser/resources/md_extensions/detail_view.html
@@ -13,22 +13,21 @@
 <link rel="import" href="chrome://resources/html/action_link_css.html">
 <link rel="import" href="chrome://resources/html/cr.html">
 <link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html">
-<link rel="import" href="chrome://resources/html/md_select_css.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="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
-<link rel="import" href="runtime_hosts_dialog.html">
 <link rel="import" href="item_behavior.html">
 <link rel="import" href="item_util.html">
 <link rel="import" href="navigation_helper.html">
+<link rel="import" href="runtime_host_permissions.html">
 <link rel="import" href="strings.html">
 <link rel="import" href="toggle_row.html">
 
 <dom-module id="extensions-detail-view">
   <template>
-    <style include="iron-flex cr-shared-style cr-icons action-link md-select paper-button-style">
+    <style include="iron-flex cr-shared-style cr-icons action-link paper-button-style">
       :host {
         --iron-icon-fill-color: var(--google-grey-refresh-700);
         display: block;
@@ -125,18 +124,6 @@
         color: var(--cr-secondary-text-color);
       }
 
-      #add-runtime-hosts-section {
-        align-items: center;
-        display: flex;
-        justify-content: space-between;
-        margin-top: 10px;
-      }
-
-      .mid-section-header {
-        color: var(--cr-primary-text-color);
-        margin-top: 12px;
-      }
-
       .actionable {
         cursor: pointer;
       }
@@ -174,12 +161,6 @@
         margin: 0;
       }
 
-      #runtime-host-permissions-mode {
-        align-items: center;
-        display: flex;
-        justify-content: space-between;
-      }
-
       #options-section .control-line:first-child {
         border-top: var(--cr-separator-line);
       }
@@ -348,43 +329,11 @@
               </template>
             </ul>
             <template is="dom-if" if="[[showRuntimeHostPermissions_(data.*)]]">
-              <div id="runtime-host-permissions">
-                <div id="runtime-host-permissions-mode">
-                  <div class="mid-section-header">
-                    $i18n{itemHostPermissionsHeading}
-                  </div>
-                  <select id="host-access" class="md-select"
-                      value="[[data.permissions.hostAccess]]"
-                      on-change="onHostAccessChanged_">
-                    <option value$="[[HostAccess_.ON_CLICK]]">
-                      $i18n{itemHostAccessOnClick}
-                    </option>
-                    <option value$="[[HostAccess_.ON_SPECIFIC_SITES]]">
-                      $i18n{itemHostAccessOnSpecificSites}
-                    </option>
-                    <option value$="[[HostAccess_.ON_ALL_SITES]]">
-                      $i18n{itemHostAccessOnAllSites}
-                    </option>
-                  </select>
-                </div>
-                <template is="dom-if" if="[[showSpecificSites_(data.*)]]">
-                  <div id="add-runtime-hosts-section">
-                    <div class="mid-section-header">
-                      $i18n{itemAllowedHosts}
-                    </div>
-                    <paper-button id="add-runtime-host"
-                        on-click="onAddRuntimeHostClick_">
-                      $i18n{add}
-                    </paper-button>
-                  </div>
-                  <ul id="runtime-hosts">
-                    <template is="dom-repeat"
-                        items="[[data.permissions.runtimeHostPermissions]]">
-                      <li>[[item]]</li>
-                    </template>
-                  </ul>
-                </template>
-              </div>
+              <extensions-runtime-host-permissions
+                  permissions="[[data.permissions]]"
+                  delegate="[[delegate]]"
+                  item-id="[[data.id]]">
+              </extensions-runtime-host-permissions>
             </template>
           </div>
         </div>
@@ -465,12 +414,6 @@
         </cr-link-row>
       </div>
     </div>
-    <template is="dom-if" if="[[showRuntimeHostsDialog_]]" restamp>
-      <extensions-runtime-hosts-dialog
-          delegate="[[delegate]]" item-id="[[data.id]]"
-          on-close="onRuntimeHostsDialogClosed_">
-      </extensions-runtime-hosts-dialog>
-    </template>
   </template>
   <script src="detail_view.js"></script>
 </dom-module>
diff --git a/chrome/browser/resources/md_extensions/detail_view.js b/chrome/browser/resources/md_extensions/detail_view.js
index d69e4ec..f290ea3 100644
--- a/chrome/browser/resources/md_extensions/detail_view.js
+++ b/chrome/browser/resources/md_extensions/detail_view.js
@@ -31,21 +31,6 @@
 
       /** Whether "allow in incognito" option should be shown. */
       incognitoAvailable: Boolean,
-
-      /**
-       * Whether the dialog to add a new host permission is shown.
-       * @private
-       */
-      showRuntimeHostsDialog_: Boolean,
-
-      /**
-       * Proxying the enum to be used easily by the html template.
-       * @private
-       */
-      HostAccess_: {
-        type: Object,
-        value: chrome.developerPrivate.HostAccess,
-      },
     },
 
     observers: [
@@ -91,22 +76,6 @@
     },
 
     /**
-     * @param {!Event} event
-     * @private
-     */
-    onHostAccessChanged_: function(event) {
-      const select = /** @type {!HTMLSelectElement} */ (event.target);
-      const access =
-          /** @type {chrome.developerPrivate.HostAccess} */ (select.value);
-      this.delegate.setItemHostAccess(this.data.id, access);
-      // Force the UI to update (in order to potentially hide or show the
-      // specific runtime hosts).
-      // TODO(devlin): Perhaps this should be handled by the backend updating
-      // and sending an onItemStateChanged event?
-      this.set('data.permissions.hostAccess', access);
-    },
-
-    /**
      * @return {boolean}
      * @private
      */
@@ -324,27 +293,6 @@
     showRuntimeHostPermissions_: function() {
       return !!this.data.permissions.hostAccess;
     },
-
-    /**
-     * @return {boolean}
-     * @private
-     */
-    showSpecificSites_: function() {
-      return this.data.permissions &&
-          this.data.permissions.hostAccess ==
-          chrome.developerPrivate.HostAccess.ON_SPECIFIC_SITES;
-    },
-
-    /** @private */
-    onAddRuntimeHostClick_: function() {
-      this.showRuntimeHostsDialog_ = true;
-    },
-
-    /** @private */
-    onRuntimeHostsDialogClosed_: function() {
-      this.showRuntimeHostsDialog_ = false;
-      cr.ui.focusWithoutInk(assert(this.$$('#add-runtime-host')));
-    },
   });
 
   return {DetailView: DetailView};
diff --git a/chrome/browser/resources/md_extensions/extensions_resources.grd b/chrome/browser/resources/md_extensions/extensions_resources.grd
index c5279e2..43672211 100644
--- a/chrome/browser/resources/md_extensions/extensions_resources.grd
+++ b/chrome/browser/resources/md_extensions/extensions_resources.grd
@@ -141,6 +141,12 @@
       <structure name="IDR_MD_EXTENSIONS_PACK_DIALOG_ALERT_JS"
                  file="pack_dialog_alert.js"
                  type="chrome_html" />
+      <structure name="IDR_MD_EXTENSIONS_RUNTIME_HOST_PERMISSIONS_HMTL"
+                 file="runtime_host_permissions.html"
+                 type="chrome_html" />
+      <structure name="IDR_MD_EXTENSIONS_RUNTIME_HOST_PERMISSIONS_JS"
+                 file="runtime_host_permissions.js"
+                 type="chrome_html" />
       <structure name="IDR_MD_EXTENSIONS_RUNTIME_HOSTS_DIALOG_HTML"
                  file="runtime_hosts_dialog.html"
                  type="chrome_html" />
diff --git a/chrome/browser/resources/md_extensions/runtime_host_permissions.html b/chrome/browser/resources/md_extensions/runtime_host_permissions.html
new file mode 100644
index 0000000..8c2ca89
--- /dev/null
+++ b/chrome/browser/resources/md_extensions/runtime_host_permissions.html
@@ -0,0 +1,76 @@
+<link rel="import" href="chrome://resources/html/polymer.html">
+
+<link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.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/cr.html">
+<link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html">
+<link rel="import" href="chrome://resources/html/md_select_css.html">
+<link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
+<link rel="import" href="runtime_hosts_dialog.html">
+<link rel="import" href="strings.html">
+
+<dom-module id="extensions-runtime-host-permissions">
+  <template>
+    <style include="cr-shared-style md-select paper-button-style">
+      #add-hosts-section {
+        align-items: center;
+        display: flex;
+        justify-content: space-between;
+        margin-top: 10px;
+      }
+
+      .mid-section-header {
+        color: var(--cr-primary-text-color);
+        margin-top: 12px;
+      }
+
+      #permissions-mode {
+        align-items: center;
+        display: flex;
+        justify-content: space-between;
+      }
+    </style>
+    <div id="permissions-mode">
+      <div class="mid-section-header">
+        $i18n{hostPermissionsHeading}
+      </div>
+      <select id="host-access" class="md-select"
+          value="[[permissions.hostAccess]]"
+          on-change="onHostAccessChange_">
+        <option value$="[[HostAccess_.ON_CLICK]]">
+          $i18n{hostAccessOnClick}
+        </option>
+        <option value$="[[HostAccess_.ON_SPECIFIC_SITES]]">
+          $i18n{hostAccessOnSpecificSites}
+        </option>
+        <option value$="[[HostAccess_.ON_ALL_SITES]]">
+          $i18n{hostAccessOnAllSites}
+        </option>
+      </select>
+    </div>
+    <template is="dom-if" if="[[showSpecificSites_(permissions.*)]]">
+      <div id="add-hosts-section">
+        <div class="mid-section-header">
+          $i18n{hostAllowedHosts}
+        </div>
+        <paper-button id="add-host" on-click="onAddHostClick_">
+          $i18n{add}
+        </paper-button>
+      </div>
+      <ul id="hosts">
+        <template is="dom-repeat"
+            items="[[permissions.runtimeHostPermissions]]">
+          <li>[[item]]</li>
+        </template>
+      </ul>
+    </template>
+    <template is="dom-if" if="[[showHostsDialog_]]" restamp>
+      <extensions-runtime-hosts-dialog
+          delegate="[[delegate]]" item-id="[[itemId]]"
+          on-close="onHostsDialogClosed_">
+      </extensions-runtime-hosts-dialog>
+    </template>
+  </template>
+  <script src="runtime_host_permissions.js"></script>
+</dom-module>
diff --git a/chrome/browser/resources/md_extensions/runtime_host_permissions.js b/chrome/browser/resources/md_extensions/runtime_host_permissions.js
new file mode 100644
index 0000000..c78a8b76
--- /dev/null
+++ b/chrome/browser/resources/md_extensions/runtime_host_permissions.js
@@ -0,0 +1,79 @@
+// 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.
+
+cr.define('extensions', function() {
+  'use strict';
+
+  const RuntimeHostPermissions = Polymer({
+    is: 'extensions-runtime-host-permissions',
+
+    properties: {
+      /**
+       * The underlying permissions data.
+       * @type {chrome.developerPrivate.Permissions}
+       */
+      permissions: Object,
+
+      /** @private */
+      itemId: String,
+
+      /** @type {!extensions.ItemDelegate} */
+      delegate: Object,
+
+      /**
+       * Whether the dialog to add a new host permission is shown.
+       * @private
+       */
+      showHostsDialog_: Boolean,
+
+      /**
+       * Proxying the enum to be used easily by the html template.
+       * @private
+       */
+      HostAccess_: {
+        type: Object,
+        value: chrome.developerPrivate.HostAccess,
+      },
+    },
+
+    /**
+     * @param {!Event} event
+     * @private
+     */
+    onHostAccessChange_: function(event) {
+      const select = /** @type {!HTMLSelectElement} */ (event.target);
+      const access =
+          /** @type {chrome.developerPrivate.HostAccess} */ (select.value);
+      this.delegate.setItemHostAccess(this.itemId, access);
+      // Force the UI to update (in order to potentially hide or show the
+      // specific runtime hosts).
+      // TODO(devlin): Perhaps this should be handled by the backend updating
+      // and sending an onItemStateChanged event?
+      this.set('permissions.hostAccess', access);
+    },
+
+    /**
+     * @return {boolean}
+     * @private
+     */
+    showSpecificSites_: function() {
+      return this.permissions &&
+          this.permissions.hostAccess ==
+          chrome.developerPrivate.HostAccess.ON_SPECIFIC_SITES;
+    },
+
+    /** @private */
+    onAddHostClick_: function() {
+      this.showHostsDialog_ = true;
+    },
+
+    /** @private */
+    onHostsDialogClosed_: function() {
+      this.showHostsDialog_ = false;
+      cr.ui.focusWithoutInk(assert(this.$$('#add-host')));
+    },
+  });
+
+  return {RuntimeHostPermissions: RuntimeHostPermissions};
+});
diff --git a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
index 22fcd22..4511cab2 100644
--- a/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
+++ b/chrome/browser/resources/media_router/elements/media_router_container/media_router_container.css
@@ -240,12 +240,13 @@
   }
   --cr-input-error-display: none;
   --cr-input-input: {
-    -webkit-padding-start: 0;
     background-color: white;
     border-bottom: 1px solid var(--paper-grey-800);
-    padding-bottom: 2px;
-    padding-top: 2px;
   }
+  --cr-input-padding-end: 0;
+  --cr-input-padding-start: 0;
+  --cr-input-padding-bottom: 2px;
+  --cr-input-padding-top: 2px;
   -webkit-margin-end: 31px;
   align-self: center;
   flex-grow: 1;
diff --git a/chrome/browser/resources/pdf/elements/viewer-page-selector/viewer-page-selector.html b/chrome/browser/resources/pdf/elements/viewer-page-selector/viewer-page-selector.html
index 632001d..f794546 100644
--- a/chrome/browser/resources/pdf/elements/viewer-page-selector/viewer-page-selector.html
+++ b/chrome/browser/resources/pdf/elements/viewer-page-selector/viewer-page-selector.html
@@ -24,15 +24,15 @@
         --cr-input-color: white;
         --cr-input-input: {
           -webkit-margin-start: -3px;
-          -webkit-padding-end: 3px;
-          -webkit-padding-start: 3px;
-          padding-bottom: 0;
-          padding-top: 0;
           text-align: end;
           caret-color: #fff;
           border-radius: 2px;
           box-sizing: content-box;
         }
+        --cr-input-padding-end: 3px;
+        --cr-input-padding-start: 3px;
+        --cr-input-padding-bottom: 0;
+        --cr-input-padding-top: 0;
         -webkit-margin-start: -3px;
         height: 100%;
         width: 1ch;
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
index 2a309a7a..dbab0d85 100644
--- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
+++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.html
@@ -1,11 +1,9 @@
 <link rel="import" href="chrome://resources/html/polymer.html">
 
 <link rel="import" href="chrome://resources/cr_elements/cr_expand_button/cr_expand_button.html">
-<link rel="import" href="chrome://resources/cr_elements/icons.html">
 <link rel="import" href="chrome://resources/cr_elements/policy/cr_policy_pref_indicator.html">
 <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/iron-collapse/iron-collapse.html">
-<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
@@ -13,7 +11,6 @@
 <link rel="import" href="chrome://resources/html/web_ui_listener_behavior.html">
 <link rel="import" href="../controls/controlled_button.html">
 <link rel="import" href="../controls/settings_toggle_button.html">
-<link rel="import" href="../icons.html">
 <link rel="import" href="../settings_shared_css.html">
 <link rel="import" href="chrome_cleanup_proxy.html">
 <link rel="import" href="items_to_remove_list.html">
@@ -22,6 +19,7 @@
   <template>
     <style include="settings-shared">
       #waiting-spinner {
+        flex-shrink: 0;
         height: 20px;
         width: 20px;
       }
@@ -43,28 +41,6 @@
         height: 22px;
       }
 
-      #status-icon {
-        height: 20px;
-        vertical-align: top;
-        width: 20px;
-      }
-
-      .status-icon-container {
-        -webkit-padding-end: var(--settings-box-row-padding);
-      }
-
-      .status-icon-remove {
-        --iron-icon-fill-color: var(--google-grey-refresh-700);
-      }
-
-      .status-icon-done {
-        --iron-icon-fill-color: var(--google-blue-500);
-      }
-
-      .status-icon-warning {
-        --iron-icon-fill-color: var(--google-red-700);
-      }
-
       .top-aligned-settings-box {
         align-items: center;
         /* override settings-box min-height since we use vertical padding */
@@ -74,14 +50,6 @@
     </style>
     <div class$="settings-box first
                  [[getTopSettingsBoxClass_(showExplanation_)]]">
-      <div class="status-icon-container">
-        <paper-spinner-lite id="waiting-spinner"
-            hidden="[[!isWaitingForResult_]]" active="[[isWaitingForResult_]]">
-        </paper-spinner-lite>
-        <iron-icon id="status-icon" hidden="[[isWaitingForResult_]]"
-            icon="[[statusIcon_]]" class$="[[statusIconClassName_]]">
-        </iron-icon>
-      </div>
       <div class="start">
         <div id="status-title" role="status" inner-h-t-m-l="[[title_]]"></div>
         <div hidden="[[!showExplanation_]]">
@@ -91,6 +59,9 @@
       <cr-policy-pref-indicator
           pref="[[prefs.software_reporter.enabled]]">
       </cr-policy-pref-indicator>
+      <paper-spinner-lite id="waiting-spinner"
+          hidden="[[!isWaitingForResult_]]" active="[[isWaitingForResult_]]">
+      </paper-spinner-lite>
       <template is="dom-if" if="[[showActionButton_]]">
         <div class="separator"></div>
         <paper-button id="action-button" class="action-button"
diff --git a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js
index 8c632925..e61a4d7a 100644
--- a/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js
+++ b/chrome/browser/resources/settings/chrome_cleanup_page/chrome_cleanup_page.js
@@ -60,14 +60,6 @@
 
 /**
  * @typedef {{
- *   statusIcon: string,
- *   statusIconClassName: string,
- * }}
- */
-settings.ChromeCleanupCardIcon;
-
-/**
- * @typedef {{
  *   label: string,
  *   doAction: !function(),
  * }}
@@ -78,7 +70,6 @@
  * @typedef {{
  *   title: ?string,
  *   explanation: ?string,
- *   icon: ?settings.ChromeCleanupCardIcon,
  *   actionButton: ?settings.ChromeCleanupCardActionButton,
  *   flags: number,
  * }}
@@ -214,18 +205,6 @@
       computed: 'computeHasExtensionsToShow_(scannerResults_)',
     },
 
-    /** @private */
-    statusIcon_: {
-      type: String,
-      value: '',
-    },
-
-    /** @private */
-    statusIconClassName_: {
-      type: String,
-      value: '',
-    },
-
     /** @private {chrome.settingsPrivate.PrefObject} */
     logsUploadPref_: {
       type: Object,
@@ -521,28 +500,11 @@
 
     this.title_ = components.title || '';
     this.explanation_ = components.explanation || '';
-    this.updateIcon_(components.icon);
     this.updateActionButton_(components.actionButton);
     this.updateCardFlags_(components.flags);
   },
 
   /**
-   * Updates the icon on the cleanup card to show the current state.
-   * @param {?settings.ChromeCleanupCardIcon} icon The icon to
-   *     render, or null if no icon should be shown.
-   * @private
-   */
-  updateIcon_: function(icon) {
-    if (!icon) {
-      this.statusIcon_ = '';
-      this.statusIconClassName_ = '';
-    } else {
-      this.statusIcon_ = icon.statusIcon;
-      this.statusIconClassName_ = icon.statusIconClassName;
-    }
-  },
-
-  /**
    * Updates the action button on the cleanup card as the action expected for
    * the current state.
    * @param {?settings.ChromeCleanupCardActionButton} actionButton
@@ -663,30 +625,6 @@
    */
   buildCardStateToComponentsMap_: function() {
     /**
-     * The icons to show on the card.
-     * @enum {settings.ChromeCleanupCardIcon}
-     */
-    const icons = {
-      // Card's icon indicates a cleanup offer.
-      SYSTEM: {
-        statusIcon: 'cr:security',
-        statusIconClassName: 'status-icon-remove',
-      },
-
-      // Card's icon indicates a warning (in case of failure).
-      WARNING: {
-        statusIcon: 'cr:error',
-        statusIconClassName: 'status-icon-warning',
-      },
-
-      // Card's icon indicates completion or reboot required.
-      DONE: {
-        statusIcon: 'settings:check-circle',
-        statusIconClassName: 'status-icon-done',
-      },
-    };
-
-    /**
      * The action buttons to show on the card.
      * @enum {settings.ChromeCleanupCardActionButton}
      */
@@ -719,7 +657,6 @@
         settings.ChromeCleanerCardState.CLEANUP_OFFERED, {
           title: this.i18n('chromeCleanupTitleRemove'),
           explanation: this.i18n('chromeCleanupExplanationRemove'),
-          icon: icons.SYSTEM,
           actionButton: actionButtons.REMOVE,
           flags: settings.ChromeCleanupCardFlags.SHOW_LOGS_PERMISSIONS |
               settings.ChromeCleanupCardFlags.SHOW_ITEMS_TO_REMOVE,
@@ -729,7 +666,6 @@
         settings.ChromeCleanerCardState.CLEANING, {
           title: this.i18n('chromeCleanupTitleRemoving'),
           explanation: this.i18n('chromeCleanupExplanationRemoving'),
-          icon: null,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.WAITING_FOR_RESULT |
               settings.ChromeCleanupCardFlags.SHOW_ITEMS_TO_REMOVE,
@@ -739,7 +675,6 @@
         settings.ChromeCleanerCardState.REBOOT_REQUIRED, {
           title: this.i18n('chromeCleanupTitleRestart'),
           explanation: null,
-          icon: icons.DONE,
           actionButton: actionButtons.RESTART_COMPUTER,
           flags: settings.ChromeCleanupCardFlags.NONE,
         }
@@ -748,7 +683,6 @@
         settings.ChromeCleanerCardState.CLEANUP_SUCCEEDED, {
           title: this.i18nAdvanced('chromeCleanupTitleRemoved', {tags: ['a']}),
           explanation: null,
-          icon: icons.DONE,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.NONE,
         }
@@ -757,7 +691,6 @@
         settings.ChromeCleanerCardState.CLEANING_FAILED, {
           title: this.i18n('chromeCleanupTitleErrorCantRemove'),
           explanation: this.i18n('chromeCleanupExplanationCleanupError'),
-          icon: icons.WARNING,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.NONE,
         }
@@ -766,7 +699,6 @@
         settings.ChromeCleanerCardState.SCANNING_OFFERED, {
           title: this.i18n('chromeCleanupTitleFindAndRemove'),
           explanation: this.i18n('chromeCleanupExplanationFindAndRemove'),
-          icon: icons.SYSTEM,
           actionButton: actionButtons.FIND,
           flags: settings.ChromeCleanupCardFlags.SHOW_LOGS_PERMISSIONS,
         }
@@ -775,7 +707,6 @@
         settings.ChromeCleanerCardState.SCANNING, {
           title: this.i18n('chromeCleanupTitleScanning'),
           explanation: null,
-          icon: null,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.WAITING_FOR_RESULT,
         }
@@ -785,7 +716,6 @@
         settings.ChromeCleanerCardState.SCANNING_FOUND_NOTHING, {
           title: this.i18n('chromeCleanupTitleNothingFound'),
           explanation: null,
-          icon: icons.DONE,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.NONE,
         }
@@ -794,7 +724,6 @@
         settings.ChromeCleanerCardState.SCANNING_FAILED, {
           title: this.i18n('chromeCleanupTitleScanningFailed'),
           explanation: this.i18n('chromeCleanupExplanationScanError'),
-          icon: icons.WARNING,
           actionButton: null,
           flags: settings.ChromeCleanupCardFlags.NONE,
         }
@@ -806,7 +735,6 @@
           // connectivity and cleanups being disabled by the server.
           title: this.i18n('chromeCleanupTitleCleanupUnavailable'),
           explanation: this.i18n('chromeCleanupExplanationCleanupUnavailable'),
-          icon: icons.WARNING,
           actionButton: actionButtons.TRY_SCAN_AGAIN,
           flags: settings.ChromeCleanupCardFlags.NONE,
         },
diff --git a/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html b/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html
index d8957326..cef2743 100644
--- a/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html
+++ b/chrome/browser/resources/settings/languages_page/edit_dictionary_page.html
@@ -37,7 +37,8 @@
           invalid="[[isWordInvalid_(newWordValue_)]]"
           error-message="[[isWordInvalid_(newWordValue_,
               '$i18nPolymer{addDictionaryWordDuplicateError}',
-              '$i18nPolymer{addDictionaryWordLengthError}')]]">
+              '$i18nPolymer{addDictionaryWordLengthError}')]]"
+          spellcheck="false">
         <paper-button class="secondary-button" on-click="onAddWordTap_"
             disabled="[[disableAddButton_(newWordValue_)]]" id="addWord"
             slot="suffix">
diff --git a/chrome/browser/resources/settings/settings_page/settings_subpage_search.html b/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
index bad6b43e..cb9b3fd 100644
--- a/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
+++ b/chrome/browser/resources/settings/settings_page/settings_subpage_search.html
@@ -29,29 +29,19 @@
         --cr-input-error-display: none;
         --cr-input-input: {
           background-color: white;
-          -webkit-padding-end: 0;
-          -webkit-padding-start: 0;
-          padding-bottom: 2px;
-          padding-top: 2px;
           border-bottom: 1px solid var(--google-grey-900);
         }
+        --cr-input-padding-end: 0;
+        --cr-input-padding-start: 0;
+        --cr-input-padding-bottom: 2px;
+        --cr-input-padding-top: 2px;
         display: inline-block;
         vertical-align: middle;
         width: 160px;  /* Special width for search input. */
       }
 
       :host([has-search-text]) cr-input {
-        /* Unfortunately we have to duplicate most of this mixin, due to how
-           redeclaration overrides the entire mixin, but the only value that
-           changes is padding-end. */
-        --cr-input-input: {
-          background-color: white;
-          -webkit-padding-end: 20px;
-          -webkit-padding-start: 0;
-          padding-bottom: 2px;
-          padding-top: 2px;
-          border-bottom: 1px solid var(--google-grey-900);
-        }
+        --cr-input-padding-end: 20px;
       }
 
       #searchInput {
diff --git a/chrome/browser/search/ntp_icon_source.cc b/chrome/browser/search/ntp_icon_source.cc
index 4a51fe5..e013f4f 100644
--- a/chrome/browser/search/ntp_icon_source.cc
+++ b/chrome/browser/search/ntp_icon_source.cc
@@ -10,6 +10,7 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted_memory.h"
+#include "base/sha1.h"
 #include "base/strings/string_number_conversions.h"
 #include "cc/paint/skia_paint_canvas.h"
 #include "chrome/browser/favicon/favicon_service_factory.h"
@@ -36,6 +37,7 @@
 #include "ui/base/webui/web_ui_util.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/color_utils.h"
 #include "ui/gfx/favicon_size.h"
 #include "ui/gfx/font_list.h"
 #include "ui/gfx/geometry/rect.h"
@@ -162,6 +164,18 @@
                        x_origin, y_origin);
 }
 
+// Returns a color that based on the hash of |icon_url|'s origin.
+SkColor GetBackgroundColorForUrl(const GURL& icon_url) {
+  if (!icon_url.is_valid())
+    return SK_ColorGRAY;
+
+  unsigned char hash[20];
+  const std::string origin = icon_url.GetOrigin().spec();
+  base::SHA1HashBytes(reinterpret_cast<const unsigned char*>(origin.c_str()),
+                      origin.size(), hash);
+  return SkColorSetRGB(hash[0], hash[1], hash[2]);
+}
+
 // For the given |icon_url|, will render a fallback icon with an appropriate
 // letter in a circle.
 std::vector<unsigned char> RenderIconBitmap(const GURL& icon_url,
@@ -177,8 +191,14 @@
     DrawCircleInCanvas(&canvas, size, /*background_color=*/kFaviconBackground);
     DrawFavicon(favicon, &canvas, size);
   } else {
-    // TODO(crbug.com/853780): Set the appropriate fallback background color.
-    DrawCircleInCanvas(&canvas, size, /*background_color=*/SK_ColorGRAY);
+    SkColor background_color = GetBackgroundColorForUrl(icon_url);
+    // If luminance is too high, the white text will become unreadable. Invert
+    // the background color to achieve better constrast. The constant comes
+    // W3C Accessibility standards.
+    if (color_utils::GetRelativeLuminance(background_color) > 0.179)
+      background_color = color_utils::InvertColor(background_color);
+
+    DrawCircleInCanvas(&canvas, size, background_color);
     DrawFallbackIconLetter(icon_url, size, &canvas);
   }
   std::vector<unsigned char> bitmap_data;
diff --git a/chrome/browser/supervised_user/supervised_user_browsertest.cc b/chrome/browser/supervised_user/supervised_user_browsertest.cc
index 42417fe..74e1fc7 100644
--- a/chrome/browser/supervised_user/supervised_user_browsertest.cc
+++ b/chrome/browser/supervised_user/supervised_user_browsertest.cc
@@ -47,6 +47,10 @@
 #include "services/network/public/cpp/network_switches.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_switches.h"
+#endif
+
 using content::InterstitialPage;
 using content::NavigationController;
 using content::NavigationEntry;
@@ -186,7 +190,14 @@
                                         "MAP *.new-example.com " + host_port +
                                         "," + "MAP *.a.com " + host_port);
 
-    command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
+    command_line->AppendSwitchASCII(switches::kSupervisedUserId,
+                                    supervised_users::kChildAccountSUID);
+#if defined(OS_CHROMEOS)
+    command_line->AppendSwitchASCII(
+        chromeos::switches::kLoginUser,
+        "supervised_user@locally-managed.localhost");
+    command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "hash");
+#endif
   }
 
   // Acts like a synchronous call to history's QueryHistory. Modified from
diff --git a/chrome/browser/supervised_user/supervised_user_interstitial.cc b/chrome/browser/supervised_user/supervised_user_interstitial.cc
index 4d88524..b1e3e6d 100644
--- a/chrome/browser/supervised_user/supervised_user_interstitial.cc
+++ b/chrome/browser/supervised_user/supervised_user_interstitial.cc
@@ -352,8 +352,10 @@
           << (success ? " successfully" : " unsuccessfully");
   std::string jsFunc =
       base::StringPrintf("setRequestStatus(%s);", success ? "true" : "false");
-  interstitial_page_->GetMainFrame()->ExecuteJavaScript(
-      base::ASCIIToUTF16(jsFunc));
+  if (interstitial_page_->GetMainFrame()) {
+    interstitial_page_->GetMainFrame()->ExecuteJavaScript(
+        base::ASCIIToUTF16(jsFunc));
+  }
 }
 
 bool SupervisedUserInterstitial::ShouldProceed() {
diff --git a/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc b/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
index 98dceac..119a2647 100644
--- a/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
+++ b/chrome/browser/supervised_user/supervised_user_navigation_throttle_browsertest.cc
@@ -32,6 +32,10 @@
 #include "net/dns/mock_host_resolver.h"
 #include "net/test/embedded_test_server/embedded_test_server.h"
 
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_switches.h"
+#endif
+
 using content::NavigationController;
 using content::WebContents;
 
@@ -107,7 +111,13 @@
 
 void SupervisedUserNavigationThrottleTest::SetUpCommandLine(
     base::CommandLine* command_line) {
-  command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
+  command_line->AppendSwitchASCII(switches::kSupervisedUserId,
+                                  supervised_users::kChildAccountSUID);
+#if defined(OS_CHROMEOS)
+  command_line->AppendSwitchASCII(chromeos::switches::kLoginUser,
+                                  "supervised_user@locally-managed.localhost");
+  command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "hash");
+#endif
 }
 
 INSTANTIATE_TEST_CASE_P(,
diff --git a/chrome/browser/supervised_user/supervised_user_service_browsertest.cc b/chrome/browser/supervised_user/supervised_user_service_browsertest.cc
index 4023a26..f64e2403 100644
--- a/chrome/browser/supervised_user/supervised_user_service_browsertest.cc
+++ b/chrome/browser/supervised_user/supervised_user_service_browsertest.cc
@@ -27,13 +27,24 @@
 #include "content/public/test/test_utils.h"
 #include "google_apis/gaia/google_service_auth_error.h"
 
+#if defined(OS_CHROMEOS)
+#include "chromeos/chromeos_switches.h"
+#endif
+
 namespace {
 
 class SupervisedUserServiceTestSupervised : public InProcessBrowserTest {
  public:
   // content::BrowserTestBase:
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
+    command_line->AppendSwitchASCII(switches::kSupervisedUserId,
+                                    supervised_users::kChildAccountSUID);
+#if defined(OS_CHROMEOS)
+    command_line->AppendSwitchASCII(
+        chromeos::switches::kLoginUser,
+        "supervised_user@locally-managed.localhost");
+    command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "hash");
+#endif
   }
 };
 
@@ -67,9 +78,9 @@
 IN_PROC_BROWSER_TEST_F(SupervisedUserServiceTestSupervised, LocalPolicies) {
   Profile* profile = browser()->profile();
   PrefService* prefs = profile->GetPrefs();
-  EXPECT_TRUE(prefs->GetBoolean(prefs::kForceGoogleSafeSearch));
+  EXPECT_FALSE(prefs->GetBoolean(prefs::kForceGoogleSafeSearch));
   EXPECT_EQ(prefs->GetInteger(prefs::kForceYouTubeRestrict),
-            safe_search_util::YOUTUBE_RESTRICT_MODERATE);
+            safe_search_util::YOUTUBE_RESTRICT_OFF);
   EXPECT_FALSE(
       prefs->IsUserModifiablePreference(prefs::kForceGoogleSafeSearch));
   EXPECT_FALSE(prefs->IsUserModifiablePreference(prefs::kForceYouTubeRestrict));
diff --git a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
index 471a48bf..1abcc44c 100644
--- a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
+++ b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
@@ -11,6 +11,7 @@
 #include "base/rand_util.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/test/scoped_feature_list.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/policy/profile_policy_connector_factory.h"
@@ -26,10 +27,12 @@
 #include "components/policy/core/common/policy_map.h"
 #include "components/policy/core/common/policy_types.h"
 #include "components/policy/policy_constants.h"
+#include "components/sync/driver/sync_driver_switches.h"
 #include "components/sync/driver/sync_service.h"
 #include "components/sync/engine/cycle/sync_cycle_snapshot.h"
 #include "components/sync/engine_impl/loopback_server/persistent_permanent_entity.h"
 #include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/layout.h"
 
 namespace {
@@ -75,6 +78,22 @@
 const char kGenericSubfolderName[] = "Subfolder Name";
 const char kValidPassphrase[] = "passphrase!";
 
+// Class that enables or disables USS based on test parameter. Must be the first
+// base class of the test fixture.
+class UssSwitchToggler : public testing::WithParamInterface<bool> {
+ public:
+  UssSwitchToggler() {
+    if (GetParam()) {
+      override_features_.InitAndEnableFeature(switches::kSyncUSSBookmarks);
+    } else {
+      override_features_.InitAndDisableFeature(switches::kSyncUSSBookmarks);
+    }
+  }
+
+ private:
+  base::test::ScopedFeatureList override_features_;
+};
+
 class TwoClientBookmarksSyncTest : public SyncTest {
  public:
   TwoClientBookmarksSyncTest() : SyncTest(TWO_CLIENT) {}
@@ -93,6 +112,19 @@
   DISALLOW_COPY_AND_ASSIGN(TwoClientBookmarksSyncTest);
 };
 
+// TODO(crbug.com/516866): Merge the two fixtures into one when all tests are
+// passing for USS.
+class TwoClientBookmarksSyncTestIncludingUssTests
+    : public UssSwitchToggler,
+      public TwoClientBookmarksSyncTest {
+ public:
+  TwoClientBookmarksSyncTestIncludingUssTests(){};
+  ~TwoClientBookmarksSyncTestIncludingUssTests() override {}
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(TwoClientBookmarksSyncTestIncludingUssTests);
+};
+
 IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, Sanity) {
   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
   ASSERT_TRUE(AllModelsMatchVerifier());
@@ -144,7 +176,8 @@
   ASSERT_TRUE(BookmarksMatchChecker().Wait());
 }
 
-IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SC_AddFirstFolder) {
+IN_PROC_BROWSER_TEST_P(TwoClientBookmarksSyncTestIncludingUssTests,
+                       SC_AddFirstFolder) {
   ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
   ASSERT_TRUE(AllModelsMatchVerifier());
 
@@ -2172,4 +2205,8 @@
   ASSERT_EQ(initial_count + 2, CountAllBookmarks(1));
 }
 
+INSTANTIATE_TEST_CASE_P(USS,
+                        TwoClientBookmarksSyncTestIncludingUssTests,
+                        ::testing::Values(false, true));
+
 }  // namespace
diff --git a/chrome/browser/themes/theme_properties.cc b/chrome/browser/themes/theme_properties.cc
index 1bd40e3..d984088 100644
--- a/chrome/browser/themes/theme_properties.cc
+++ b/chrome/browser/themes/theme_properties.cc
@@ -338,6 +338,10 @@
       return kDefaultColorTabAlertRecordingIcon;
     case COLOR_TAB_ALERT_CAPTURING:
       return kDefaultColorTabAlertCapturingIcon;
+    case COLOR_TAB_CLOSE_BUTTON_BACKGROUND_HOVER:
+      return SkColorSetRGB(0xDB, 0x44, 0x37);
+    case COLOR_TAB_CLOSE_BUTTON_BACKGROUND_PRESSED:
+      return SkColorSetRGB(0xA8, 0x35, 0x2A);
 #if defined(OS_MACOSX)
     case COLOR_FRAME_VIBRANCY_OVERLAY:
       return incognito ? kDefaultColorFrameVibrancyOverlayIncognito
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index 7338d95..1af09eba 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -5,6 +5,7 @@
 import("//build/config/compiler/compiler.gni")
 import("//build/config/crypto.gni")
 import("//build/config/features.gni")
+import("//build/config/jumbo.gni")
 import("//build/config/ui.gni")
 import("//build/split_static_library.gni")
 import("//chrome/common/features.gni")
@@ -28,7 +29,7 @@
 
 # Use a static library here because many test binaries depend on this but don't
 # require many files from it. This makes linking more efficient.
-split_static_library("ui") {
+jumbo_split_static_library("ui") {
   # Split into multiple static libraries on Windows builds. We have hit size
   # limits on Windows official builds and on goma builds when symbol_level = 2
   # is selected. Always splitting on Windows builds is simpler than trying to
@@ -1430,6 +1431,8 @@
       "omnibox/chrome_omnibox_navigation_observer.h",
       "omnibox/clipboard_utils.cc",
       "omnibox/clipboard_utils.h",
+      "omnibox/idn_navigation_observer.cc",
+      "omnibox/idn_navigation_observer.h",
       "omnibox/omnibox_theme.cc",
       "omnibox/omnibox_theme.h",
       "page_action/page_action_icon_container.h",
@@ -1788,6 +1791,7 @@
   if (is_chromeos) {
     assert(enable_extensions)
     assert(toolkit_views)
+    never_build_jumbo = true
     sources += [
       "app_list/app_sync_ui_state.cc",
       "app_list/app_sync_ui_state.h",
@@ -3502,6 +3506,8 @@
       ]
       if (is_mac) {
         sources += [
+          "views/policy/enterprise_startup_dialog_mac_util.h",
+          "views/policy/enterprise_startup_dialog_mac_util.mm",
           "views/relaunch_notification/get_app_menu_anchor_point.h",
           "views/relaunch_notification/get_app_menu_anchor_point.mm",
         ]
diff --git a/chrome/browser/ui/app_list/app_context_menu_unittest.cc b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
index 9554cfe4..a7e0052 100644
--- a/chrome/browser/ui/app_list/app_context_menu_unittest.cc
+++ b/chrome/browser/ui/app_list/app_context_menu_unittest.cc
@@ -645,6 +645,47 @@
   }
 }
 
+// In suspended state app does not have launch item.
+TEST_P(AppContextMenuTest, ArcMenuSuspendedItem) {
+  ArcAppTest arc_test;
+  arc_test.SetUp(profile());
+
+  arc::mojom::AppInfo app = arc_test.fake_apps()[0];
+  app.suspended = true;
+
+  arc_test.app_instance()->RefreshAppList();
+  arc_test.app_instance()->SendRefreshAppList({app});
+
+  const std::string app_id = ArcAppTest::GetAppId(app);
+  controller()->SetAppPinnable(app_id, AppListControllerDelegate::PIN_EDITABLE);
+  ArcAppItem item(profile(), nullptr, nullptr, app_id, std::string());
+  std::unique_ptr<ui::MenuModel> menu = GetContextMenuModel(&item);
+  ASSERT_NE(nullptr, menu);
+
+  // Separators are not added to touchable app context menus. For touchable
+  // app context menus, arc app has double separator, three more app shortcuts
+  // provided by arc::FakeAppInstance and two separators between shortcuts.
+  int expected_items = features::IsTouchableAppContextMenuEnabled() ? 8 : 3;
+  ASSERT_EQ(expected_items, menu->GetItemCount());
+  int index = 0;
+  ValidateItemState(menu.get(), index++, MenuState(ash::TOGGLE_PIN));
+  if (!features::IsTouchableAppContextMenuEnabled())
+    ValidateItemState(menu.get(), index++, MenuState());  // separator
+  ValidateItemState(menu.get(), index++, MenuState(ash::SHOW_APP_INFO));
+
+  // Test that arc app shortcuts provided by arc::FakeAppInstance have a
+  // separator between each app shortcut.
+  if (features::IsTouchableAppContextMenuEnabled()) {
+    EXPECT_EQ(ui::DOUBLE_SEPARATOR, menu->GetSeparatorTypeAt(index++));
+    for (int shortcut_index = 0; index < menu->GetItemCount(); ++index) {
+      EXPECT_EQ(base::StringPrintf("ShortLabel %d", shortcut_index++),
+                base::UTF16ToUTF8(menu->GetLabelAt(index++)));
+      if (index < menu->GetItemCount())
+        EXPECT_EQ(ui::PADDED_SEPARATOR, menu->GetSeparatorTypeAt(index));
+    }
+  }
+}
+
 TEST_F(AppContextMenuTest, CommandIdsMatchEnumsForHistograms) {
   // Tests that CommandId enums are not changed as the values are used in
   // histograms.
diff --git a/chrome/browser/ui/app_list/app_list_model_builder.h b/chrome/browser/ui/app_list/app_list_model_builder.h
index 25bf047..d0bec8d 100644
--- a/chrome/browser/ui/app_list/app_list_model_builder.h
+++ b/chrome/browser/ui/app_list/app_list_model_builder.h
@@ -44,11 +44,11 @@
   AppListModelUpdater* model_updater() { return model_updater_; }
 
   // Inserts an app based on app ordinal prefs.
-  void InsertApp(std::unique_ptr<ChromeAppListItem> app);
+  virtual void InsertApp(std::unique_ptr<ChromeAppListItem> app);
 
   // Removes an app based on app id. If |unsynced_change| is set to true then
   // app is removed only from model and sync service is not used.
-  void RemoveApp(const std::string& id, bool unsynced_change);
+  virtual void RemoveApp(const std::string& id, bool unsynced_change);
 
   const app_list::AppListSyncableService::SyncItem* GetSyncItem(
       const std::string& id);
diff --git a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
index 3b6c8be7..7913c32c 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_context_menu.cc
@@ -46,7 +46,7 @@
     return;
   }
 
-  if (!controller()->IsAppOpen(app_id())) {
+  if (!controller()->IsAppOpen(app_id()) && !app_info->suspended) {
     AddContextMenuOption(menu_model, ash::LAUNCH_NEW,
                          IDS_APP_CONTEXT_MENU_ACTIVATE_ARC);
     if (!features::IsTouchableAppContextMenuEnabled())
@@ -57,12 +57,13 @@
 
   if (!features::IsTouchableAppContextMenuEnabled())
     menu_model->AddSeparator(ui::NORMAL_SEPARATOR);
-  if (arc_prefs->IsShortcut(app_id()))
+  if (arc_prefs->IsShortcut(app_id())) {
     AddContextMenuOption(menu_model, ash::UNINSTALL,
                          IDS_APP_LIST_REMOVE_SHORTCUT);
-  else if (!app_info->sticky)
+  } else if (!app_info->sticky) {
     AddContextMenuOption(menu_model, ash::UNINSTALL,
                          IDS_APP_LIST_UNINSTALL_ITEM);
+  }
 
   // App Info item.
   AddContextMenuOption(menu_model, ash::SHOW_APP_INFO,
@@ -77,9 +78,8 @@
 
   switch (command_id) {
     case ash::UNINSTALL:
-      return app_info &&
-          !app_info->sticky &&
-          (app_info->ready || app_info->shortcut);
+      return app_info && !app_info->sticky &&
+             (app_info->ready || app_info->shortcut);
     case ash::SHOW_APP_INFO:
       return app_info && app_info->ready;
     default:
diff --git a/chrome/browser/ui/app_list/arc/arc_app_icon_loader.cc b/chrome/browser/ui/app_list/arc/arc_app_icon_loader.cc
index 7c607ef..e33d661 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_icon_loader.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_icon_loader.cc
@@ -8,6 +8,7 @@
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
+#include "ui/gfx/image/image_skia_operations.h"
 
 ArcAppIconLoader::ArcAppIconLoader(Profile* profile,
                                    int icon_size,
@@ -36,7 +37,7 @@
   // differs from this size, re-scale is required.
   std::unique_ptr<ArcAppIcon> icon(new ArcAppIcon(
       profile(), app_id,
-      app_list::AppListConfig::instance().grid_icon_dimension(), this));
+      app_list::AppListConfig::instance().arc_icon_dimension(), this));
   icon->image_skia().EnsureRepsForSupportedScales();
   icon_map_[app_id] = std::move(icon);
   UpdateImage(app_id);
@@ -51,15 +52,24 @@
   if (it == icon_map_.end())
     return;
 
-  delegate()->OnAppImageUpdated(app_id, it->second->image_skia());
+  gfx::ImageSkia image = it->second->image_skia();
+  std::unique_ptr<ArcAppListPrefs::AppInfo> app_info =
+      arc_prefs_->GetApp(app_id);
+  if (app_info && app_info->suspended) {
+    image =
+        gfx::ImageSkiaOperations::CreateHSLShiftedImage(image, {-1, 0, 0.75});
+  }
+
+  delegate()->OnAppImageUpdated(app_id, image);
 }
 
 void ArcAppIconLoader::OnIconUpdated(ArcAppIcon* icon) {
   UpdateImage(icon->app_id());
 }
 
-void ArcAppIconLoader::OnAppReadyChanged(const std::string& app_id,
-                                         bool ready) {
+void ArcAppIconLoader::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
   AppIDToIconMap::const_iterator it = icon_map_.find(app_id);
   if (it == icon_map_.end())
     return;
diff --git a/chrome/browser/ui/app_list/arc/arc_app_icon_loader.h b/chrome/browser/ui/app_list/arc/arc_app_icon_loader.h
index 9176a1f9..fbcc1233 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_icon_loader.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_icon_loader.h
@@ -16,6 +16,8 @@
 
 class Profile;
 
+// ARC++ icon provider for the apps. It can support multiple ARC++ apps. This
+// observes apps changes and updates icons accordingly.
 class ArcAppIconLoader : public AppIconLoader,
                          public ArcAppListPrefs::Observer,
                          public ArcAppIcon::Observer {
@@ -32,7 +34,8 @@
   void UpdateImage(const std::string& id) override;
 
   // Overrides ArcAppListPrefs::Observer:
-  void OnAppReadyChanged(const std::string& id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
   void OnAppIconUpdated(const std::string& id,
                         ui::ScaleFactor scale_factor) override;
 
diff --git a/chrome/browser/ui/app_list/arc/arc_app_item.cc b/chrome/browser/ui/app_list/arc/arc_app_item.cc
index 15db38cb..637b4c6 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_item.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_item.cc
@@ -4,14 +4,10 @@
 
 #include "chrome/browser/ui/app_list/arc/arc_app_item.h"
 
-#include "ash/public/cpp/app_list/app_list_config.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/app_list_controller_delegate.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_context_menu.h"
-#include "components/arc/arc_bridge_service.h"
 #include "content/public/browser/browser_thread.h"
-#include "extensions/browser/app_sorting.h"
-#include "ui/gfx/image/image_skia.h"
 
 // static
 const char ArcAppItem::kItemType[] = "ArcAppItem";
@@ -25,12 +21,8 @@
     : ChromeAppListItem(profile, id) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
-  arc_app_icon_.reset(new ArcAppIcon(
-      profile, id, app_list::AppListConfig::instance().grid_icon_dimension(),
-      this));
-
   SetName(name);
-  UpdateIcon();
+
   if (sync_item && sync_item->item_ordinal.IsValid())
     UpdateFromSync(sync_item);
   else
@@ -60,15 +52,6 @@
   SetNameAndShortName(name, name);
 }
 
-void ArcAppItem::UpdateIcon() {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  SetIcon(arc_app_icon_->image_skia());
-}
-
-void ArcAppItem::OnIconUpdated(ArcAppIcon* icon) {
-  UpdateIcon();
-}
-
 void ArcAppItem::GetContextMenuModel(GetMenuModelCallback callback) {
   context_menu_ = std::make_unique<ArcAppContextMenu>(this, profile(), id(),
                                                       GetController());
diff --git a/chrome/browser/ui/app_list/arc/arc_app_item.h b/chrome/browser/ui/app_list/arc/arc_app_item.h
index f25b1abd..b724dc4 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_item.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_item.h
@@ -10,7 +10,6 @@
 
 #include "base/macros.h"
 #include "chrome/browser/ui/app_list/app_context_menu_delegate.h"
-#include "chrome/browser/ui/app_list/arc/arc_app_icon.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_utils.h"
 #include "chrome/browser/ui/app_list/chrome_app_list_item.h"
 
@@ -19,7 +18,6 @@
 
 // ArcAppItem represents an ARC app in app list.
 class ArcAppItem : public ChromeAppListItem,
-                   public ArcAppIcon::Observer,
                    public app_list::AppContextMenuDelegate {
  public:
   static const char kItemType[];
@@ -41,21 +39,12 @@
   // app_list::AppContextMenuDelegate overrides:
   void ExecuteLaunchCommand(int event_flags) override;
 
-  ArcAppIcon* arc_app_icon() { return arc_app_icon_.get(); }
-
-  // ArcAppIcon::Observer
-  void OnIconUpdated(ArcAppIcon* icon) override;
-
  private:
-  // Updates the app item's icon, if necessary making it gray.
-  void UpdateIcon();
-
   // ChromeAppListItem overrides:
   app_list::AppContextMenu* GetAppContextMenu() override;
 
   void Launch(int event_flags, arc::UserInteractionType interaction);
 
-  std::unique_ptr<ArcAppIcon> arc_app_icon_;
   std::unique_ptr<ArcAppContextMenu> context_menu_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcAppItem);
diff --git a/chrome/browser/ui/app_list/arc/arc_app_launcher.cc b/chrome/browser/ui/app_list/arc/arc_app_launcher.cc
index 6366281..b7245a4 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_launcher.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_launcher.cc
@@ -24,9 +24,7 @@
   DCHECK(prefs);
 
   std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(app_id_);
-  if (app_info && (app_info->ready || deferred_launch_allowed_))
-    LaunchApp();
-  else
+  if (!app_info || !MaybeLaunchApp(app_id, *app_info))
     prefs->AddObserver(this);
 }
 
@@ -42,18 +40,24 @@
 void ArcAppLauncher::OnAppRegistered(
     const std::string& app_id,
     const ArcAppListPrefs::AppInfo& app_info) {
-  if (app_id == app_id_ && (app_info.ready || deferred_launch_allowed_))
-    LaunchApp();
+  MaybeLaunchApp(app_id, app_info);
 }
 
-void ArcAppLauncher::OnAppReadyChanged(const std::string& app_id, bool ready) {
-  if (app_id == app_id_ && (ready || deferred_launch_allowed_))
-    LaunchApp();
+void ArcAppLauncher::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  MaybeLaunchApp(app_id, app_info);
 }
 
-void ArcAppLauncher::LaunchApp() {
+bool ArcAppLauncher::MaybeLaunchApp(const std::string& app_id,
+                                    const ArcAppListPrefs::AppInfo& app_info) {
   DCHECK(!app_launched_);
 
+  if (app_id != app_id_ || (!app_info.ready && !deferred_launch_allowed_) ||
+      app_info.suspended) {
+    return false;
+  }
+
   ArcAppListPrefs* prefs = ArcAppListPrefs::Get(context_);
   DCHECK(prefs && prefs->GetApp(app_id_));
   prefs->RemoveObserver(this);
@@ -64,4 +68,5 @@
   }
 
   app_launched_ = true;
+  return true;
 }
diff --git a/chrome/browser/ui/app_list/arc/arc_app_launcher.h b/chrome/browser/ui/app_list/arc/arc_app_launcher.h
index 03d36138..7ec2ffb 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_launcher.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_launcher.h
@@ -35,14 +35,16 @@
   // ArcAppListPrefs::Observer:
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
-  void OnAppReadyChanged(const std::string& app_id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
 
   // Launches the app if ready to launch, recording the input user interaction.
   // If not ready to launch,
   void LaunchAppIfReady(arc::UserInteractionType interaction);
 
  private:
-  void LaunchApp();
+  bool MaybeLaunchApp(const std::string& app_id,
+                      const ArcAppListPrefs::AppInfo& app_info);
 
   // Unowned pointer.
   content::BrowserContext* context_;
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
index cf5ca73..f7e59b9 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.cc
@@ -54,6 +54,7 @@
 constexpr char kSticky[] = "sticky";
 constexpr char kShortcut[] = "shortcut";
 constexpr char kShouldSync[] = "should_sync";
+constexpr char kSuspended[] = "suspended";
 constexpr char kSystem[] = "system";
 constexpr char kUninstalled[] = "uninstalled";
 constexpr char kVPNProvider[] = "vpnprovider";
@@ -212,6 +213,17 @@
   }
 }
 
+// Returns true if one of state of |info1| does not match the same state in
+// |info2|.
+bool AreAppStatesChanged(const ArcAppListPrefs::AppInfo& info1,
+                         const ArcAppListPrefs::AppInfo& info2) {
+  return info1.sticky != info2.sticky ||
+         info1.notifications_enabled != info2.notifications_enabled ||
+         info1.ready != info2.ready || info1.suspended != info2.suspended ||
+         info1.show_in_launcher != info2.show_in_launcher ||
+         info1.launchable != info2.launchable;
+}
+
 }  // namespace
 
 // static
@@ -583,6 +595,7 @@
   std::string activity;
   std::string intent_uri;
   std::string icon_resource_id;
+  bool suspended = false;
   bool sticky = false;
   bool notifications_enabled = true;
   bool shortcut = false;
@@ -592,6 +605,7 @@
   app->GetString(kActivity, &activity);
   app->GetString(kIntentUri, &intent_uri);
   app->GetString(kIconResourceId, &icon_resource_id);
+  app->GetBoolean(kSuspended, &suspended);
   app->GetBoolean(kSticky, &sticky);
   app->GetBoolean(kNotificationsEnabled, &notifications_enabled);
   app->GetBoolean(kShortcut, &shortcut);
@@ -614,7 +628,7 @@
   return std::make_unique<AppInfo>(
       name, package_name, activity, intent_uri, icon_resource_id,
       last_launch_time, GetInstallTime(app_id), sticky, notifications_enabled,
-      ready_apps_.count(app_id) > 0,
+      ready_apps_.count(app_id) > 0 /* ready */, suspended,
       launchable && arc::ShouldShowInLauncher(app_id), shortcut, launchable);
 }
 
@@ -685,7 +699,7 @@
   std::unordered_set<std::string> old_ready_apps;
   old_ready_apps.swap(ready_apps_);
   for (auto& app_id : old_ready_apps)
-    NotifyAppReadyChanged(app_id, false);
+    NotifyAppStatesChanged(app_id);
 }
 
 void ArcAppListPrefs::NotifyRegisteredApps() {
@@ -719,7 +733,7 @@
     } else {
       if (ready_apps_.count(app_id)) {
         ready_apps_.erase(app_id);
-        NotifyAppReadyChanged(app_id, false);
+        NotifyAppStatesChanged(app_id);
       }
     }
   }
@@ -817,11 +831,11 @@
     }
 
     const ArcDefaultAppList::AppInfo& app_info = *default_app.second.get();
-    AddAppAndShortcut(false /* app_ready */, app_info.name,
-                      app_info.package_name, app_info.activity,
+    AddAppAndShortcut(app_info.name, app_info.package_name, app_info.activity,
                       std::string() /* intent_uri */,
                       std::string() /* icon_resource_id */, false /* sticky */,
-                      false /* notifications_enabled */, false /* shortcut */,
+                      false /* notifications_enabled */, false /* app_ready */,
+                      false /* suspended */, false /* shortcut */,
                       true /* launchable */);
   }
 }
@@ -899,22 +913,24 @@
     // Create runtime app entry that is valid for the current user session. This
     // entry is not shown in App Launcher and only required for shelf
     // integration.
-    AddAppAndShortcut(true /* app_ready */, name.has_value() ? *name : "",
-                      package_name, activity, std::string() /* intent_uri */,
+    AddAppAndShortcut(name.value_or(std::string()), package_name, activity,
+                      std::string() /* intent_uri */,
                       std::string() /* icon_resource_id */, false /* sticky */,
-                      false /* notifications_enabled */, false /* shortcut */,
+                      false /* notifications_enabled */, true /* app_ready */,
+                      false /* suspended */, false /* shortcut */,
                       false /* launchable */);
   }
 }
 
-void ArcAppListPrefs::AddAppAndShortcut(bool app_ready,
-                                        const std::string& name,
+void ArcAppListPrefs::AddAppAndShortcut(const std::string& name,
                                         const std::string& package_name,
                                         const std::string& activity,
                                         const std::string& intent_uri,
                                         const std::string& icon_resource_id,
                                         const bool sticky,
                                         const bool notifications_enabled,
+                                        const bool app_ready,
+                                        const bool suspended,
                                         const bool shortcut,
                                         const bool launchable) {
   const std::string app_id = shortcut ? GetAppId(package_name, intent_uri)
@@ -930,8 +946,9 @@
     updated_name = l10n_util::GetStringUTF8(IDS_ARC_PLAYSTORE_ICON_TITLE_BETA);
 
   const bool was_tracked = tracked_apps_.count(app_id);
+  std::unique_ptr<ArcAppListPrefs::AppInfo> app_old_info;
   if (was_tracked) {
-    std::unique_ptr<ArcAppListPrefs::AppInfo> app_old_info = GetApp(app_id);
+    app_old_info = GetApp(app_id);
     DCHECK(app_old_info);
     DCHECK(launchable);
     if (updated_name != app_old_info->name) {
@@ -947,6 +964,7 @@
   app_dict->SetString(kActivity, activity);
   app_dict->SetString(kIntentUri, intent_uri);
   app_dict->SetString(kIconResourceId, icon_resource_id);
+  app_dict->SetBoolean(kSuspended, suspended);
   app_dict->SetBoolean(kSticky, sticky);
   app_dict->SetBoolean(kNotificationsEnabled, notifications_enabled);
   app_dict->SetBoolean(kShortcut, shortcut);
@@ -965,15 +983,18 @@
   if (was_disabled && app_ready)
     ready_apps_.insert(app_id);
 
+  AppInfo app_info(updated_name, package_name, activity, intent_uri,
+                   icon_resource_id, base::Time(), GetInstallTime(app_id),
+                   sticky, notifications_enabled, app_ready, suspended,
+                   launchable && arc::ShouldShowInLauncher(app_id), shortcut,
+                   launchable);
+
   if (was_tracked) {
-    if (was_disabled && app_ready)
-      NotifyAppReadyChanged(app_id, true);
+    if (AreAppStatesChanged(*app_old_info, app_info)) {
+      for (auto& observer : observer_list_)
+        observer.OnAppStatesChanged(app_id, app_info);
+    }
   } else {
-    AppInfo app_info(updated_name, package_name, activity, intent_uri,
-                     icon_resource_id, base::Time(), GetInstallTime(app_id),
-                     sticky, notifications_enabled, app_ready,
-                     launchable && arc::ShouldShowInLauncher(app_id), shortcut,
-                     launchable);
     for (auto& observer : observer_list_)
       observer.OnAppRegistered(app_id, app_info);
     tracked_apps_.insert(app_id);
@@ -1101,11 +1122,11 @@
 
   ready_apps_.clear();
   for (const auto& app : apps) {
-    AddAppAndShortcut(true /* app_ready */, app->name, app->package_name,
-                      app->activity, std::string() /* intent_uri */,
-                      std::string() /* icon_resource_id */, app->sticky,
-                      app->notifications_enabled, false /* shortcut */,
-                      true /* launchable */);
+    AddAppAndShortcut(
+        app->name, app->package_name, app->activity,
+        std::string() /* intent_uri */, std::string() /* icon_resource_id */,
+        app->sticky, app->notifications_enabled, true /* app_ready */,
+        app->suspended, false /* shortcut */, true /* launchable */);
   }
 
   // Detect removed ARC apps after current refresh.
@@ -1116,7 +1137,7 @@
     if (IsShortcut(app_id)) {
       // If this is a shortcut, we just mark it as ready.
       ready_apps_.insert(app_id);
-      NotifyAppReadyChanged(app_id, true);
+      NotifyAppStatesChanged(app_id);
     } else {
       // Default apps may not be installed yet at this moment.
       if (!default_apps_.HasApp(app_id))
@@ -1169,11 +1190,11 @@
     return;
   }
 
-  AddAppAndShortcut(true /* app_ready */, app_info.name, app_info.package_name,
-                    app_info.activity, std::string() /* intent_uri */,
-                    std::string() /* icon_resource_id */, app_info.sticky,
-                    app_info.notifications_enabled, false /* shortcut */,
-                    true /* launchable */);
+  AddAppAndShortcut(
+      app_info.name, app_info.package_name, app_info.activity,
+      std::string() /* intent_uri */, std::string() /* icon_resource_id */,
+      app_info.sticky, app_info.notifications_enabled, true /* app_ready */,
+      app_info.suspended, false /* shortcut */, true /* launchable */);
 }
 
 void ArcAppListPrefs::OnAppAddedDeprecated(arc::mojom::AppInfoPtr app) {
@@ -1251,11 +1272,11 @@
     return;
   }
 
-  AddAppAndShortcut(true /* app_ready */, shortcut->name,
-                    shortcut->package_name, std::string() /* activity */,
-                    shortcut->intent_uri, shortcut->icon_resource_id,
-                    false /* sticky */, false /* notifications_enabled */,
-                    true /* shortcut */, true /* launchable */);
+  AddAppAndShortcut(
+      shortcut->name, shortcut->package_name, std::string() /* activity */,
+      shortcut->intent_uri, shortcut->icon_resource_id, false /* sticky */,
+      false /* notifications_enabled */, true /* app_ready */,
+      false /* suspended */, true /* shortcut */, true /* launchable */);
 }
 
 void ArcAppListPrefs::OnUninstallShortcut(const std::string& package_name,
@@ -1597,10 +1618,11 @@
   --installing_packages_count_;
 }
 
-void ArcAppListPrefs::NotifyAppReadyChanged(const std::string& app_id,
-                                            bool ready) {
+void ArcAppListPrefs::NotifyAppStatesChanged(const std::string& app_id) {
+  std::unique_ptr<AppInfo> app_info = GetApp(app_id);
+  DCHECK(app_info);
   for (auto& observer : observer_list_)
-    observer.OnAppReadyChanged(app_id, ready);
+    observer.OnAppStatesChanged(app_id, *app_info);
 }
 
 ArcAppListPrefs::AppInfo::AppInfo(const std::string& name,
@@ -1613,7 +1635,8 @@
                                   bool sticky,
                                   bool notifications_enabled,
                                   bool ready,
-                                  bool showInLauncher,
+                                  bool suspended,
+                                  bool show_in_launcher,
                                   bool shortcut,
                                   bool launchable)
     : name(name),
@@ -1626,9 +1649,13 @@
       sticky(sticky),
       notifications_enabled(notifications_enabled),
       ready(ready),
-      showInLauncher(showInLauncher),
+      suspended(suspended),
+      show_in_launcher(show_in_launcher),
       shortcut(shortcut),
-      launchable(launchable) {}
+      launchable(launchable) {
+  // If app is not launchable it also does not show in launcher.
+  DCHECK(launchable || !show_in_launcher);
+}
 
 // Need to add explicit destructor for chromium style checker error:
 // Complex class/struct needs an explicit out-of-line destructor
diff --git a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
index d478927..f227ab1 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_list_prefs.h
@@ -69,7 +69,8 @@
             bool sticky,
             bool notifications_enabled,
             bool ready,
-            bool showInLauncher,
+            bool suspended,
+            bool show_in_launcher,
             bool shortcut,
             bool launchable);
     ~AppInfo();
@@ -81,11 +82,21 @@
     std::string icon_resource_id;
     base::Time last_launch_time;
     base::Time install_time;
+    // Whether app could not be uninstalled.
     bool sticky;
+    // Whether notifications are enabled for the app.
     bool notifications_enabled;
+    // Whether app is ready.
     bool ready;
-    bool showInLauncher;
+    // Whether app was suspended by policy. It may have or may not have ready
+    // state.
+    bool suspended;
+    // Whether app needs to be shown in launcher.
+    bool show_in_launcher;
+    // Whether app represents a shortcut.
     bool shortcut;
+    // Whether app can be launched. In some case we cannot launch an app because
+    // it requires parameters we might not provide.
     bool launchable;
   };
 
@@ -112,8 +123,9 @@
     // Notifies an observer that new app is registered.
     virtual void OnAppRegistered(const std::string& app_id,
                                  const AppInfo& app_info) {}
-    // Notifies an observer that app ready state has been changed.
-    virtual void OnAppReadyChanged(const std::string& id, bool ready) {}
+    // Notifies an observer that app states have been changed.
+    virtual void OnAppStatesChanged(const std::string& id,
+                                    const AppInfo& app_info) {}
     // Notifies an observer that app was removed.
     virtual void OnAppRemoved(const std::string& id) {}
     // Notifies an observer that app icon has been installed or updated.
@@ -357,14 +369,15 @@
                                                 bool installed) const;
 
   void AddApp(const arc::mojom::AppInfo& app_info);
-  void AddAppAndShortcut(bool app_ready,
-                         const std::string& name,
+  void AddAppAndShortcut(const std::string& name,
                          const std::string& package_name,
                          const std::string& activity,
                          const std::string& intent_uri,
                          const std::string& icon_resource_id,
                          const bool sticky,
                          const bool notifications_enabled,
+                         const bool app_ready,
+                         const bool suspended,
                          const bool shortcut,
                          const bool launchable);
   // Adds or updates local pref for given package.
@@ -431,8 +444,8 @@
 
   void ClearIconRequestRecord();
 
-  // Dispatches OnAppReadyChanged event to observers.
-  void NotifyAppReadyChanged(const std::string& app_id, bool ready);
+  // Dispatches OnAppStatesChanged event to observers.
+  void NotifyAppStatesChanged(const std::string& app_id);
 
   // Marks app icons as invalidated and request icons updated.
   void InvalidateAppIcons(const std::string& app_id);
diff --git a/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc b/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc
index 74031ad..64663e6 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc
@@ -6,30 +6,47 @@
 
 #include <vector>
 
+#include "ash/public/cpp/app_list/app_list_config.h"
 #include "chrome/browser/chromeos/arc/arc_util.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_item.h"
 
 ArcAppModelBuilder::ArcAppModelBuilder(AppListControllerDelegate* controller)
-    : AppListModelBuilder(controller, ArcAppItem::kItemType) {
-}
+    : AppListModelBuilder(controller, ArcAppItem::kItemType) {}
 
 ArcAppModelBuilder::~ArcAppModelBuilder() {
   prefs_->RemoveObserver(this);
 }
 
+void ArcAppModelBuilder::InsertApp(std::unique_ptr<ChromeAppListItem> app) {
+  const std::string app_id = app->id();
+  AppListModelBuilder::InsertApp(std::move(app));
+  icon_loader_->FetchImage(app_id);
+}
+
+void ArcAppModelBuilder::RemoveApp(const std::string& id,
+                                   bool unsynced_change) {
+  AppListModelBuilder::RemoveApp(id, unsynced_change);
+  icon_loader_->ClearImage(id);
+}
+
 void ArcAppModelBuilder::BuildModel() {
+  icon_loader_ = std::make_unique<ArcAppIconLoader>(
+      profile(), app_list::AppListConfig::instance().arc_icon_dimension(),
+      this);
+
   prefs_ = ArcAppListPrefs::Get(profile());
   DCHECK(prefs_);
 
   std::vector<std::string> app_ids = prefs_->GetAppIds();
   for (auto& app_id : app_ids) {
     std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs_->GetApp(app_id);
-    if (!app_info)
+    if (!app_info) {
+      NOTREACHED() << "App " << app_id << " was not found";
       continue;
+    }
 
-    if (app_info->showInLauncher)
-      InsertApp(CreateApp(app_id, *app_info));
+    OnAppRegistered(app_id, *app_info);
   }
 
   prefs_->AddObserver(this);
@@ -49,7 +66,7 @@
 void ArcAppModelBuilder::OnAppRegistered(
     const std::string& app_id,
     const ArcAppListPrefs::AppInfo& app_info) {
-  if (app_info.showInLauncher)
+  if (app_info.show_in_launcher)
     InsertApp(CreateApp(app_id, app_info));
 }
 
@@ -60,17 +77,15 @@
   RemoveApp(app_id, unsynced_change);
 }
 
-void ArcAppModelBuilder::OnAppIconUpdated(const std::string& app_id,
-                                          ui::ScaleFactor scale_factor) {
+void ArcAppModelBuilder::OnAppImageUpdated(const std::string& app_id,
+                                           const gfx::ImageSkia& image) {
   ArcAppItem* app_item = GetArcAppItem(app_id);
   if (!app_item) {
     VLOG(2) << "Could not update the icon of ARC app(" << app_id
             << ") because it was not found.";
     return;
   }
-
-  // Initiate async icon reloading.
-  app_item->arc_app_icon()->LoadForScaleFactor(scale_factor);
+  app_item->SetIcon(image);
 }
 
 void ArcAppModelBuilder::OnAppNameUpdated(const std::string& app_id,
diff --git a/chrome/browser/ui/app_list/arc/arc_app_model_builder.h b/chrome/browser/ui/app_list/arc/arc_app_model_builder.h
index 3709387..9de016e 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_model_builder.h
+++ b/chrome/browser/ui/app_list/arc/arc_app_model_builder.h
@@ -12,6 +12,7 @@
 
 #include "base/macros.h"
 #include "chrome/browser/ui/app_list/app_list_model_builder.h"
+#include "chrome/browser/ui/app_list/arc/arc_app_icon_loader.h"
 #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
 
 class AppListControllerDelegate;
@@ -19,11 +20,17 @@
 
 // This class populates and maintains ARC apps.
 class ArcAppModelBuilder : public AppListModelBuilder,
-                           public ArcAppListPrefs::Observer {
+                           public ArcAppListPrefs::Observer,
+                           public AppIconLoaderDelegate {
  public:
   explicit ArcAppModelBuilder(AppListControllerDelegate* controller);
   ~ArcAppModelBuilder() override;
 
+ protected:
+  // AppListModelBuilder:
+  void InsertApp(std::unique_ptr<ChromeAppListItem> app) override;
+  void RemoveApp(const std::string& id, bool unsynced_change) override;
+
  private:
   // AppListModelBuilder
   void BuildModel() override;
@@ -32,17 +39,22 @@
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
   void OnAppRemoved(const std::string& id) override;
-  void OnAppIconUpdated(const std::string& app_id,
-                        ui::ScaleFactor scale_factor) override;
   void OnAppNameUpdated(const std::string& app_id,
                         const std::string& name) override;
 
+  // AppIconLoaderDelegate:
+  void OnAppImageUpdated(const std::string& app_id,
+                         const gfx::ImageSkia& image) override;
+
   std::unique_ptr<ArcAppItem> CreateApp(const std::string& app_id,
                                         const ArcAppListPrefs::AppInfo& info);
 
   ArcAppItem* GetArcAppItem(const std::string& app_id);
 
+  // Not owned.
   ArcAppListPrefs* prefs_ = nullptr;
+  // Keeps and updates icons.
+  std::unique_ptr<ArcAppIconLoader> icon_loader_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcAppModelBuilder);
 };
diff --git a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
index 8e1bc7f..c4423a9 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_unittest.cc
@@ -78,8 +78,8 @@
                          const gfx::ImageSkia& image) override {
     app_id_ = app_id;
     image_ = image;
-    ++update_image_cnt_;
-    if (update_image_cnt_ == expected_update_image_cnt_ &&
+    ++update_image_count_;
+    if (update_image_count_ == expected_update_image_count_ &&
         !icon_updated_callback_.is_null()) {
       base::ResetAndReturn(&icon_updated_callback_).Run();
     }
@@ -87,20 +87,20 @@
 
   void WaitForIconUpdates(size_t expected_updates) {
     base::RunLoop run_loop;
-    expected_update_image_cnt_ = expected_updates + update_image_cnt_;
+    expected_update_image_count_ = expected_updates + update_image_count_;
     icon_updated_callback_ = run_loop.QuitClosure();
     run_loop.Run();
   }
 
-  size_t update_image_cnt() const { return update_image_cnt_; }
+  size_t update_image_count() const { return update_image_count_; }
 
   const std::string& app_id() const { return app_id_; }
 
   const gfx::ImageSkia& image() { return image_; }
 
  private:
-  size_t update_image_cnt_ = 0;
-  size_t expected_update_image_cnt_ = 0;
+  size_t update_image_count_ = 0;
+  size_t expected_update_image_count_ = 0;
   std::string app_id_;
   gfx::ImageSkia image_;
   base::OnceClosure icon_updated_callback_;
@@ -410,7 +410,7 @@
   // Validates that provided image is acceptable as ARC app icon.
   void ValidateIcon(const gfx::ImageSkia& image) {
     const int icon_dimension =
-        app_list::AppListConfig::instance().grid_icon_dimension();
+        app_list::AppListConfig::instance().arc_icon_dimension();
     EXPECT_EQ(icon_dimension, image.width());
     EXPECT_EQ(icon_dimension, image.height());
 
@@ -902,36 +902,43 @@
   // Disable attempts to dismiss app launcher view.
   ChromeAppListItem::OverrideAppListControllerDelegateForTesting(controller());
 
+  std::vector<arc::mojom::AppInfo> apps = fake_apps();
+  ASSERT_GE(apps.size(), 3U);
+
+  apps[2].suspended = true;
+
   app_instance()->RefreshAppList();
-  app_instance()->SendRefreshAppList(fake_apps());
+  app_instance()->SendRefreshAppList(apps);
 
   // Simulate item activate.
-  const arc::mojom::AppInfo& app_first = fake_apps()[0];
-  const arc::mojom::AppInfo& app_last = fake_apps()[0];
-  ArcAppItem* item_first = FindArcItem(ArcAppTest::GetAppId(app_first));
-  ArcAppItem* item_last = FindArcItem(ArcAppTest::GetAppId(app_last));
-  ASSERT_NE(nullptr, item_first);
-  ASSERT_NE(nullptr, item_last);
-  item_first->PerformActivate(0);
-  item_last->PerformActivate(0);
-  item_first->PerformActivate(0);
+  ArcAppItem* item1 = FindArcItem(ArcAppTest::GetAppId(apps[0]));
+  ArcAppItem* item2 = FindArcItem(ArcAppTest::GetAppId(apps[1]));
+  ArcAppItem* item3 = FindArcItem(ArcAppTest::GetAppId(apps[2]));
+  ASSERT_TRUE(item1);
+  ASSERT_TRUE(item2);
+  ASSERT_TRUE(item3);
+  item1->PerformActivate(0);
+  item2->PerformActivate(0);
+  item1->PerformActivate(0);
 
   const std::vector<std::unique_ptr<arc::FakeAppInstance::Request>>&
       launch_requests = app_instance()->launch_requests();
   ASSERT_EQ(3u, launch_requests.size());
-  EXPECT_TRUE(launch_requests[0]->IsForApp(app_first));
-  EXPECT_TRUE(launch_requests[1]->IsForApp(app_last));
-  EXPECT_TRUE(launch_requests[2]->IsForApp(app_first));
+  EXPECT_TRUE(launch_requests[0]->IsForApp(apps[0]));
+  EXPECT_TRUE(launch_requests[1]->IsForApp(apps[1]));
+  EXPECT_TRUE(launch_requests[2]->IsForApp(apps[0]));
 
-  // Test an attempt to launch of a not-ready app.
+  // Test an attempt to launch suspended app. It should be blocked.
+  item3->PerformActivate(0);
+  EXPECT_EQ(3u, app_instance()->launch_requests().size());
+
+  // Test an attempt to launch of a not-ready app. Number of launch requests
+  // should be the same, indicating that launch request was blocked.
   arc_test()->StopArcInstance();
-  item_first = FindArcItem(ArcAppTest::GetAppId(app_first));
-  ASSERT_NE(nullptr, item_first);
-  size_t launch_request_count_before = app_instance()->launch_requests().size();
-  item_first->PerformActivate(0);
-  // Number of launch requests must not change.
-  EXPECT_EQ(launch_request_count_before,
-            app_instance()->launch_requests().size());
+  item1 = FindArcItem(ArcAppTest::GetAppId(apps[0]));
+  ASSERT_TRUE(item1);
+  item1->PerformActivate(0);
+  EXPECT_EQ(3u, app_instance()->launch_requests().size());
 }
 
 TEST_P(ArcAppModelBuilderTest, LaunchShortcuts) {
@@ -1586,7 +1593,7 @@
       profile(),
       app_list::AppListConfig::instance().search_list_icon_dimension(),
       &delegate);
-  EXPECT_EQ(0UL, delegate.update_image_cnt());
+  EXPECT_EQ(0UL, delegate.update_image_count());
 
   // Shortcut exists, icon is requested from shortcut.
   icon_loader.FetchImage(id_shortcut_exist);
@@ -1595,9 +1602,9 @@
   EXPECT_EQ(id_shortcut_exist, delegate.app_id());
 
   content::RunAllTasksUntilIdle();
-  const size_t shortcut_request_cnt =
+  const size_t shortcut_request_count =
       app_instance()->shortcut_icon_requests().size();
-  EXPECT_NE(0U, shortcut_request_cnt);
+  EXPECT_NE(0U, shortcut_request_count);
   EXPECT_EQ(initial_icon_request_count, app_instance()->icon_requests().size());
   for (const auto& request : app_instance()->shortcut_icon_requests())
     EXPECT_EQ(shortcuts[0].icon_resource_id, request->icon_resource_id());
@@ -1605,15 +1612,15 @@
   // Fallback when shortcut is not found for shelf group id, use app id instead.
   // Remove the IconRequestRecord for |app_id| to observe the icon request for
   // |app_id| is re-sent.
-  const size_t update_image_count_before = delegate.update_image_cnt();
+  const size_t update_image_count_before = delegate.update_image_count();
   MaybeRemoveIconRequestRecord(app_id);
   icon_loader.FetchImage(id_shortcut_absent);
   // Expected default update.
-  EXPECT_EQ(update_image_count_before + 1, delegate.update_image_cnt());
+  EXPECT_EQ(update_image_count_before + 1, delegate.update_image_count());
   content::RunAllTasksUntilIdle();
   EXPECT_TRUE(app_instance()->icon_requests().size() >
               initial_icon_request_count);
-  EXPECT_EQ(shortcut_request_cnt,
+  EXPECT_EQ(shortcut_request_count,
             app_instance()->shortcut_icon_requests().size());
   for (size_t i = initial_icon_request_count;
        i < app_instance()->icon_requests().size(); ++i) {
@@ -1622,6 +1629,59 @@
   }
 }
 
+// Test that icon is correctly updated for suspended/non-suspended app.
+TEST_P(ArcAppModelBuilderTest, IconLoaderForSuspendedApps) {
+  arc::mojom::AppInfo app = fake_apps()[0];
+  const std::string app_id = ArcAppTest::GetAppId(app);
+
+  ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get());
+  ASSERT_NE(nullptr, prefs);
+
+  FakeAppIconLoaderDelegate delegate;
+  ArcAppIconLoader icon_loader(
+      profile(),
+      app_list::AppListConfig::instance().search_list_icon_dimension(),
+      &delegate);
+
+  app_instance()->RefreshAppList();
+  app_instance()->SendRefreshAppList({app});
+
+  icon_loader.FetchImage(app_id);
+  std::string png_data;
+  EXPECT_TRUE(app_instance()->GenerateAndSendIcon(
+      app, arc::mojom::ScaleFactor::SCALE_FACTOR_100P, &png_data));
+  delegate.WaitForIconUpdates(1);
+
+  const gfx::ImageSkia app_normal_icon = delegate.image();
+
+  size_t update_count = delegate.update_image_count();
+  // Now switch to suspended mode. Image is updated inline because primary icon
+  // is loaded and we only apply gray effect.
+  app.suspended = true;
+  app_instance()->SendPackageAppListRefreshed(app.package_name, {app});
+  EXPECT_EQ(update_count + 1, delegate.update_image_count());
+  // No futher updates.
+  content::RunAllTasksUntilIdle();
+  EXPECT_EQ(update_count + 1, delegate.update_image_count());
+
+  // We should have different icons.
+  EXPECT_FALSE(gfx::test::AreBitmapsEqual(
+      app_normal_icon.GetRepresentation(1.0f).sk_bitmap(),
+      delegate.image().GetRepresentation(1.0f).sk_bitmap()));
+
+  // Now switch back to normal mode.
+  app.suspended = false;
+  app_instance()->SendPackageAppListRefreshed(app.package_name, {app});
+  EXPECT_EQ(update_count + 2, delegate.update_image_count());
+  content::RunAllTasksUntilIdle();
+  EXPECT_EQ(update_count + 2, delegate.update_image_count());
+
+  // Icon should be restored to normal
+  EXPECT_TRUE(gfx::test::AreBitmapsEqual(
+      app_normal_icon.GetRepresentation(1.0f).sk_bitmap(),
+      delegate.image().GetRepresentation(1.0f).sk_bitmap()));
+}
+
 // If the cached icon file is corrupted, we expect send request to ARC for a new
 // icon.
 TEST_P(ArcAppModelBuilderTest, IconLoaderWithBadIcon) {
@@ -1650,7 +1710,7 @@
   icon_loader.FetchImage(app_id);
 
   // So far one updated of default icon is expected.
-  EXPECT_EQ(delegate.update_image_cnt(), 1U);
+  EXPECT_EQ(delegate.update_image_count(), 1U);
 
   // Although icon file is still missing, expect no new request sent to ARC as
   // them are recorded in IconRequestRecord in ArcAppListPrefs.
@@ -1684,7 +1744,7 @@
   }
 
   // Icon update is not expected because of bad icon.
-  EXPECT_EQ(delegate.update_image_cnt(), 1U);
+  EXPECT_EQ(delegate.update_image_count(), 1U);
 }
 
 TEST_P(ArcAppModelBuilderTest, IconLoader) {
@@ -1703,9 +1763,9 @@
       profile(),
       app_list::AppListConfig::instance().search_list_icon_dimension(),
       &delegate);
-  EXPECT_EQ(0UL, delegate.update_image_cnt());
+  EXPECT_EQ(0UL, delegate.update_image_count());
   icon_loader.FetchImage(app_id);
-  EXPECT_EQ(1UL, delegate.update_image_cnt());
+  EXPECT_EQ(1UL, delegate.update_image_count());
   EXPECT_EQ(app_id, delegate.app_id());
 
   // Validate default image.
@@ -1726,13 +1786,13 @@
   delegate.WaitForIconUpdates(scale_factors.size());
 
   // Validate loaded image.
-  EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_cnt());
+  EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_count());
   EXPECT_EQ(app_id, delegate.app_id());
   ValidateIcon(delegate.image());
 
   // No more updates are expected.
   base::RunLoop().RunUntilIdle();
-  EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_cnt());
+  EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_count());
 }
 
 TEST_P(ArcAppModelBuilderRecreate, IconInvalidation) {
@@ -1840,7 +1900,7 @@
   icon_loader.FetchImage(app_id);
   // Expected 1 update with default image and 2 representations should be
   // allocated.
-  EXPECT_EQ(1U, delegate.update_image_cnt());
+  EXPECT_EQ(1U, delegate.update_image_count());
   gfx::ImageSkia app_icon = delegate.image();
   EXPECT_EQ(2U, app_icon.image_reps().size());
   EXPECT_TRUE(app_icon.HasRepresentation(1.0f));
@@ -1851,7 +1911,7 @@
   // 2.0 is used to scale 1.25.
   app_icon.GetRepresentation(1.15f);
   app_icon.GetRepresentation(1.25f);
-  EXPECT_EQ(1U, delegate.update_image_cnt());
+  EXPECT_EQ(1U, delegate.update_image_count());
   EXPECT_EQ(4U, app_icon.image_reps().size());
   EXPECT_TRUE(app_icon.HasRepresentation(1.0f));
   EXPECT_TRUE(app_icon.HasRepresentation(2.0f));
@@ -1947,6 +2007,35 @@
   EXPECT_EQ(app_instance()->launch_intents()[0], launch_intent2);
 }
 
+// Suspended app cannot be triggered from app launcher.
+TEST_P(ArcAppModelBuilderTest, AppLauncherForSuspendedApp) {
+  ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile());
+  ASSERT_NE(nullptr, prefs);
+
+  arc::mojom::AppInfo app = fake_apps()[0];
+  app.suspended = true;
+  const std::string app_id = ArcAppTest::GetAppId(app);
+
+  ArcAppLauncher launcher(profile(), app_id, base::Optional<std::string>(),
+                          false, display::kInvalidDisplayId,
+                          arc::UserInteractionType::NOT_USER_INITIATED);
+  EXPECT_FALSE(launcher.app_launched());
+
+  // Register app, however it is suspended.
+  app_instance()->RefreshAppList();
+  app_instance()->SendRefreshAppList({app});
+  EXPECT_FALSE(launcher.app_launched());
+  EXPECT_TRUE(app_instance()->launch_requests().empty());
+
+  // Update app with non-suspended state.
+  app.suspended = false;
+  app_instance()->SendPackageAppListRefreshed(app.package_name, {app});
+  EXPECT_TRUE(launcher.app_launched());
+
+  ASSERT_EQ(1u, app_instance()->launch_requests().size());
+  EXPECT_TRUE(app_instance()->launch_requests()[0]->IsForApp(app));
+}
+
 // Validates an app that have no launchable flag.
 TEST_P(ArcAppModelBuilderTest, NonLaunchableApp) {
   ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get());
diff --git a/chrome/browser/ui/app_list/arc/arc_app_utils.cc b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
index b1215b0a..ae06d05 100644
--- a/chrome/browser/ui/app_list/arc/arc_app_utils.cc
+++ b/chrome/browser/ui/app_list/arc/arc_app_utils.cc
@@ -121,6 +121,11 @@
     return false;
   }
 
+  if (app_info->suspended) {
+    VLOG(2) << "Cannot launch suspended app: " << app_id << ".";
+    return false;
+  }
+
   arc::mojom::IntentHelperInstance* intent_helper_instance =
       GET_INTENT_HELPER_INSTANCE(SendBroadcast);
   if (intent_helper_instance) {
@@ -319,8 +324,8 @@
     prefs->SetLastLaunchTime(app_id);
     return true;
   }
-  arc::ArcBootPhaseMonitorBridge::RecordFirstAppLaunchDelayUMA(context);
 
+  arc::ArcBootPhaseMonitorBridge::RecordFirstAppLaunchDelayUMA(context);
   return Launch(context, app_id, launch_intent, event_flags,
                 GetValidDisplayId(display_id));
 }
diff --git a/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.cc b/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.cc
index 2bf96f7..fa1ed4c9 100644
--- a/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.cc
+++ b/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.cc
@@ -77,12 +77,13 @@
 void ArcFastAppReinstallStarter::OnAppRegistered(
     const std::string& app_id,
     const ArcAppListPrefs::AppInfo& app_info) {
-  OnAppReadyChanged(app_id, app_info.ready);
+  OnAppStatesChanged(app_id, app_info);
 }
 
-void ArcFastAppReinstallStarter::OnAppReadyChanged(const std::string& app_id,
-                                                   bool ready) {
-  if (app_id == kPlayStoreAppId && ready)
+void ArcFastAppReinstallStarter::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (app_id == kPlayStoreAppId && app_info.ready)
     MaybeStartFastAppReinstall();
 }
 
diff --git a/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.h b/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.h
index 40aef98..0667943 100644
--- a/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.h
+++ b/chrome/browser/ui/app_list/arc/arc_fast_app_reinstall_starter.h
@@ -39,7 +39,8 @@
   // ArcAppListPrefs::Observer:
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
-  void OnAppReadyChanged(const std::string& app_id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
 
   content::BrowserContext* const context_;
   PrefService* const pref_service_;
diff --git a/chrome/browser/ui/app_list/arc/arc_pai_starter.cc b/chrome/browser/ui/app_list/arc/arc_pai_starter.cc
index 1a575b81..06251d82 100644
--- a/chrome/browser/ui/app_list/arc/arc_pai_starter.cc
+++ b/chrome/browser/ui/app_list/arc/arc_pai_starter.cc
@@ -88,11 +88,13 @@
 
 void ArcPaiStarter::OnAppRegistered(const std::string& app_id,
                                     const ArcAppListPrefs::AppInfo& app_info) {
-  OnAppReadyChanged(app_id, app_info.ready);
+  OnAppStatesChanged(app_id, app_info);
 }
 
-void ArcPaiStarter::OnAppReadyChanged(const std::string& app_id, bool ready) {
-  if (app_id == kPlayStoreAppId && ready)
+void ArcPaiStarter::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (app_id == kPlayStoreAppId && app_info.ready)
     MaybeStartPai();
 }
 
diff --git a/chrome/browser/ui/app_list/arc/arc_pai_starter.h b/chrome/browser/ui/app_list/arc/arc_pai_starter.h
index b1689867..aed44f7 100644
--- a/chrome/browser/ui/app_list/arc/arc_pai_starter.h
+++ b/chrome/browser/ui/app_list/arc/arc_pai_starter.h
@@ -54,7 +54,8 @@
   // ArcAppListPrefs::Observer:
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
-  void OnAppReadyChanged(const std::string& app_id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
 
   content::BrowserContext* const context_;
   PrefService* const pref_service_;
diff --git a/chrome/browser/ui/app_list/crostini/crostini_app_item.cc b/chrome/browser/ui/app_list/crostini/crostini_app_item.cc
index 6c0a14a..5216275b1 100644
--- a/chrome/browser/ui/app_list/crostini/crostini_app_item.cc
+++ b/chrome/browser/ui/app_list/crostini/crostini_app_item.cc
@@ -38,7 +38,7 @@
 
     // Crostini app is created from scratch. Move it to default folder.
     DCHECK(folder_id().empty());
-    SetFolderId(kCrostiniFolderId);
+    SetChromeFolderId(kCrostiniFolderId);
   }
 
   // Set model updater last to avoid being called during construction.
diff --git a/chrome/browser/ui/app_list/search/app_search_provider.cc b/chrome/browser/ui/app_list/search/app_search_provider.cc
index 9282c82..326a6e14f 100644
--- a/chrome/browser/ui/app_list/search/app_search_provider.cc
+++ b/chrome/browser/ui/app_list/search/app_search_provider.cc
@@ -304,7 +304,7 @@
         continue;
       }
 
-      if (!app_info->launchable || !app_info->showInLauncher)
+      if (!app_info->show_in_launcher)
         continue;
 
       apps->emplace_back(std::make_unique<AppSearchProvider::App>(
@@ -327,6 +327,11 @@
     owner()->RefreshAppsAndUpdateResults(false);
   }
 
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override {
+    owner()->RefreshAppsAndUpdateResults(false);
+  }
+
   void OnAppRemoved(const std::string& id) override {
     owner()->RefreshAppsAndUpdateResults(true);
   }
diff --git a/chrome/browser/ui/ash/assistant/device_actions.cc b/chrome/browser/ui/ash/assistant/device_actions.cc
index 988b493..4bb1236a 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.cc
+++ b/chrome/browser/ui/ash/assistant/device_actions.cc
@@ -3,7 +3,13 @@
 // found in the LICENSE file.
 
 #include "chrome/browser/ui/ash/assistant/device_actions.h"
+
+#include "ash/public/cpp/ash_pref_names.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
+#include "chrome/browser/profiles/profile.h"
 #include "chromeos/network/network_state_handler.h"
+#include "components/prefs/pref_service.h"
+#include "components/user_manager/user_manager.h"
 
 using chromeos::NetworkHandler;
 using chromeos::NetworkStateHandler;
@@ -18,3 +24,14 @@
       NetworkTypePattern::WiFi(), enabled,
       chromeos::network_handler::ErrorCallback());
 }
+
+void DeviceActions::SetBluetoothEnabled(bool enabled) {
+  const user_manager::User* const user =
+      user_manager::UserManager::Get()->GetActiveUser();
+  Profile* profile = chromeos::ProfileHelper::Get()->GetProfileByUser(user);
+  DCHECK(profile);
+  // Simply toggle the user pref, which is being observed by ash's bluetooth
+  // power controller.
+  profile->GetPrefs()->SetBoolean(ash::prefs::kUserBluetoothAdapterEnabled,
+                                  enabled);
+}
diff --git a/chrome/browser/ui/ash/assistant/device_actions.h b/chrome/browser/ui/ash/assistant/device_actions.h
index ff0f44d..a9f4169 100644
--- a/chrome/browser/ui/ash/assistant/device_actions.h
+++ b/chrome/browser/ui/ash/assistant/device_actions.h
@@ -14,7 +14,8 @@
   ~DeviceActions() override;
 
   // mojom::DeviceActions overrides:
-  void SetWifiEnabled(bool enable) override;
+  void SetWifiEnabled(bool enabled) override;
+  void SetBluetoothEnabled(bool enabled) override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(DeviceActions);
diff --git a/chrome/browser/ui/ash/launcher/arc_app_window.cc b/chrome/browser/ui/ash/launcher/arc_app_window.cc
index a9f4a0e9..d913e4e4 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_window.cc
+++ b/chrome/browser/ui/ash/launcher/arc_app_window.cc
@@ -82,7 +82,7 @@
   if (!app_icon_) {
     app_icon_ = std::make_unique<ArcAppIcon>(
         profile_, app_shelf_id_.ToString(),
-        app_list::AppListConfig::instance().grid_icon_dimension(), this);
+        app_list::AppListConfig::instance().arc_icon_dimension(), this);
   }
   // Apply default image now and in case icon is updated then OnIconUpdated()
   // will be called additionally.
diff --git a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
index aa6f1c34..7c2eb5a5 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
+++ b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.cc
@@ -242,11 +242,11 @@
   window->SetProperty(ash::kShelfIDKey, new std::string(shelf_id.Serialize()));
 }
 
-void ArcAppWindowLauncherController::OnAppReadyChanged(
-    const std::string& arc_app_id,
-    bool ready) {
-  if (!ready)
-    OnAppRemoved(arc_app_id);
+void ArcAppWindowLauncherController::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (!app_info.ready)
+    OnAppRemoved(app_id);
 }
 
 std::vector<int> ArcAppWindowLauncherController::GetTaskIdsForApp(
diff --git a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h
index 97ddd75..5507e9b 100644
--- a/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h
+++ b/chrome/browser/ui/ash/launcher/arc_app_window_launcher_controller.h
@@ -59,7 +59,8 @@
                          aura::Window* lost_active) override;
 
   // ArcAppListPrefs::Observer:
-  void OnAppReadyChanged(const std::string& app_id, bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
   void OnAppRemoved(const std::string& app_id) override;
   void OnTaskCreated(int task_id,
                      const std::string& package_name,
diff --git a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
index 1a3c63c..9384e95e 100644
--- a/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
+++ b/chrome/browser/ui/ash/launcher/arc_launcher_context_menu.cc
@@ -59,7 +59,7 @@
   }
 
   const bool app_is_open = controller()->IsOpen(item().id);
-  if (!app_is_open) {
+  if (!app_is_open && !app_info->suspended) {
     DCHECK(app_info->launchable);
     AddContextMenuOption(menu_model.get(), ash::MENU_OPEN_NEW,
                          IDS_APP_CONTEXT_MENU_ACTIVATE_ARC);
diff --git a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.cc b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.cc
index cfbe4f13..ed10fec 100644
--- a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.cc
+++ b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.cc
@@ -39,14 +39,23 @@
   ShelfSpinnerItemController::SetHost(controller);
 }
 
-void ArcShelfSpinnerItemController::OnAppReadyChanged(
-    const std::string& changed_app_id,
-    bool ready) {
-  if (!ready || app_id() != changed_app_id)
+void ArcShelfSpinnerItemController::OnAppStatesChanged(
+    const std::string& arc_app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (app_id() != arc_app_id)
+    return;
+
+  // App was suspended. Launch is no longer available, close controller.
+  if (app_info.suspended) {
+    Close();
+    return;
+  }
+
+  if (!app_info.ready)
     return;
 
   // Close() destroys this object, so start launching the app first.
-  arc::LaunchApp(observed_profile_, changed_app_id, event_flags_,
+  arc::LaunchApp(observed_profile_, arc_app_id, event_flags_,
                  arc::UserInteractionType::APP_STARTED_FROM_SHELF, display_id_);
   Close();
 }
diff --git a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h
index d1695dc4..5dfc65f 100644
--- a/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h
+++ b/chrome/browser/ui/ash/launcher/arc_shelf_spinner_item_controller.h
@@ -32,8 +32,8 @@
   void SetHost(const base::WeakPtr<ShelfSpinnerController>& host) override;
 
   // ArcAppListPrefs::Observer:
-  void OnAppReadyChanged(const std::string& changed_app_id,
-                         bool ready) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
   void OnAppRemoved(const std::string& removed_app_id) override;
 
   // arc::ArcSessionManager::Observer:
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
index 144d608..e1c4e6e 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_unittest.cc
@@ -978,10 +978,10 @@
     ArcAppListPrefs* const prefs = arc_test_.arc_app_list_prefs();
     // Adding app to the prefs, and check that the app is accessible by id.
     prefs->AddAppAndShortcut(
-        true /* app_ready */, app_info.name, app_info.package_name,
-        app_info.activity, std::string() /* intent_uri */,
-        std::string() /* icon_resource_id */, false /* sticky */,
-        true /* notifications_enabled */, false /* shortcut */,
+        app_info.name, app_info.package_name, app_info.activity,
+        std::string() /* intent_uri */, std::string() /* icon_resource_id */,
+        false /* sticky */, true /* notifications_enabled */,
+        true /* app_ready */, false /* suspended */, false /* shortcut */,
         true /* launchable */);
     const std::string app_id =
         ArcAppListPrefs::GetAppId(app_info.package_name, app_info.activity);
@@ -1958,6 +1958,39 @@
             shortcut.intent_uri);
 }
 
+// Launch is canceled in case app becomes suspended.
+TEST_P(ChromeLauncherControllerWithArcTest, ArcDeferredLaunchForSuspendedApp) {
+  InitLauncherController();
+
+  arc::mojom::AppInfo app = arc_test_.fake_apps()[0];
+  const std::string app_id = ArcAppTest::GetAppId(app);
+
+  // Register app first.
+  arc_test_.app_instance()->RefreshAppList();
+  arc_test_.app_instance()->SendRefreshAppList({app});
+  arc_test_.StopArcInstance();
+
+  // Restart ARC
+  arc_test_.RestartArcInstance();
+
+  // Deferred controller should be allocated on start.
+  const ash::ShelfID shelf_id(app_id);
+  arc::LaunchApp(profile(), app_id, ui::EF_LEFT_MOUSE_BUTTON,
+                 arc::UserInteractionType::NOT_USER_INITIATED);
+  EXPECT_TRUE(launcher_controller_->GetItem(shelf_id));
+
+  // Send app with suspended state.
+  app.suspended = true;
+  arc_test_.app_instance()->RefreshAppList();
+  arc_test_.app_instance()->SendRefreshAppList({app});
+
+  // Controler automatically closed.
+  EXPECT_FALSE(launcher_controller_->GetItem(shelf_id));
+
+  // And no launch request issued.
+  EXPECT_TRUE(arc_test_.app_instance()->launch_requests().empty());
+}
+
 // Ensure the spinner controller does not override the active app controller
 // (crbug.com/701152).
 TEST_P(ChromeLauncherControllerWithArcTest, ArcDeferredLaunchForActiveApp) {
diff --git a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
index 152d3a4..0a2f13f 100644
--- a/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
+++ b/chrome/browser/ui/ash/launcher/launcher_context_menu_unittest.cc
@@ -344,6 +344,33 @@
   }
 }
 
+TEST_F(LauncherContextMenuTest, ArcLauncherSuspenedAppMenu) {
+  arc::mojom::AppInfo app = arc_test().fake_apps()[0];
+  app.suspended = true;
+  arc_test().app_instance()->RefreshAppList();
+  arc_test().app_instance()->SendRefreshAppList({app});
+  const std::string app_id = ArcAppTest::GetAppId(app);
+
+  controller()->PinAppWithID(app_id);
+
+  const ash::ShelfID shelf_id(app_id);
+  const ash::ShelfItem* item = controller()->GetItem(shelf_id);
+  ASSERT_TRUE(item);
+  ash::ShelfItemDelegate* item_delegate =
+      model()->GetShelfItemDelegate(shelf_id);
+  ASSERT_TRUE(item_delegate);
+  EXPECT_TRUE(item_delegate->GetAppMenuItems(0 /* event_flags */).empty());
+
+  const int64_t display_id = GetPrimaryDisplay().id();
+  std::unique_ptr<ui::MenuModel> menu =
+      GetContextMenu(item_delegate, display_id);
+  ASSERT_TRUE(menu);
+
+  EXPECT_FALSE(IsItemPresentInMenu(menu.get(), ash::MENU_OPEN_NEW));
+  EXPECT_TRUE(IsItemEnabledInMenu(menu.get(), ash::MENU_PIN));
+  EXPECT_FALSE(IsItemPresentInMenu(menu.get(), ash::MENU_CLOSE));
+}
+
 TEST_F(LauncherContextMenuTest, ArcDeferredLauncherContextMenuItemCheck) {
   arc_test().app_instance()->RefreshAppList();
   arc_test().app_instance()->SendRefreshAppList(
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index 31be40d..ba681a0 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -121,6 +121,7 @@
 #if defined(OS_MACOSX)
 #include "base/mac/scoped_nsautorelease_pool.h"
 #include "chrome/browser/ui/cocoa/test/run_loop_testing.h"
+#include "ui/accelerated_widget_mac/ca_transaction_observer.h"
 #endif
 
 #if defined(OS_WIN)
@@ -1907,15 +1908,17 @@
   EXPECT_EQ(title, title_watcher.WaitAndGetTitle());
 }
 
-#if defined(OS_MACOSX) || (defined(OS_WIN) && !defined(NDEBUG))
+#if (defined(OS_WIN) && !defined(NDEBUG))
 // Times out on windows (dbg). https://crbug.com/753691.
-// Also times out on macOS (can be made to pass by lowering kPaintMsgTimeoutMS
-// in RenderWidgetHostImpl).
 #define MAYBE_WindowOpenClose3 DISABLED_WindowOpenClose3
 #else
 #define MAYBE_WindowOpenClose3 WindowOpenClose3
 #endif
 IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_WindowOpenClose3) {
+#if defined(OS_MACOSX)
+  // Ensure that tests don't wait for frames that will never come.
+  ui::CATransactionCoordinator::Get().DisableForTesting();
+#endif
   base::CommandLine::ForCurrentProcess()->AppendSwitch(
       switches::kDisablePopupBlocking);
   ASSERT_TRUE(embedded_test_server()->Start());
diff --git a/chrome/browser/ui/cocoa/hover_close_button.mm b/chrome/browser/ui/cocoa/hover_close_button.mm
index 7f36806..a74198c 100644
--- a/chrome/browser/ui/cocoa/hover_close_button.mm
+++ b/chrome/browser/ui/cocoa/hover_close_button.mm
@@ -11,7 +11,10 @@
 #import "third_party/google_toolbox_for_mac/src/AppKit/GTMKeyValueAnimation.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/canvas.h"
 #include "ui/gfx/color_palette.h"
+#include "ui/gfx/geometry/rect_f.h"
+#include "ui/gfx/image/canvas_image_source.h"
 #include "ui/gfx/image/image_skia_operations.h"
 #include "ui/gfx/image/image_skia_util_mac.h"
 #include "ui/gfx/paint_vector_icon.h"
@@ -31,6 +34,31 @@
 NSString* const kFadeOutValueKeyPath = @"fadeOutValue";
 
 const SkColor kDefaultIconColor = SkColorSetARGB(0xA0, 0x00, 0x00, 0x00);
+
+class HighlightImage : public gfx::CanvasImageSource {
+ public:
+  explicit HighlightImage(const int image_size, SkColor color)
+      : CanvasImageSource(gfx::Size(image_size, image_size),
+                          /*is_opaque =*/true),
+        color_(color) {}
+  ~HighlightImage() override {}
+
+ private:
+  void Draw(gfx::Canvas* canvas) override {
+    cc::PaintFlags flags;
+    flags.setAntiAlias(true);
+    flags.setStyle(cc::PaintFlags::kFill_Style);
+    flags.setColor(color_);
+    canvas->DrawCircle(
+        gfx::RectF(size().width(), size().height()).CenterPoint(),
+        kTabCloseButtonSize / 2, flags);
+  }
+
+  SkColor color_;
+
+  DISALLOW_COPY_AND_ASSIGN(HighlightImage);
+};
+
 }  // namespace
 
 @interface HoverCloseButton ()
@@ -154,7 +182,6 @@
 }
 
 - (NSImage*)imageForHoverState:(CloseButtonHoverState)hoverState {
-  const gfx::VectorIcon* vectorHighlightIcon = nullptr;
   SkColor vectorIconColor = gfx::kPlaceholderColor;
 
   switch (hoverState) {
@@ -162,23 +189,22 @@
       break;
     case kHoverStateMouseOver:
       // For mouse over, the icon color is the fill color of the circle.
-      vectorHighlightIcon = &kTabCloseButtonHighlightIcon;
       vectorIconColor = SkColorSetARGB(0xFF, 0xDB, 0x44, 0x37);
       break;
     case kHoverStateMouseDown:
       // For mouse pressed, the icon color is the fill color of the circle.
-      vectorHighlightIcon = &kTabCloseButtonHighlightIcon;
       vectorIconColor = SkColorSetARGB(0xFF, 0xA8, 0x35, 0x2A);
       break;
   }
 
-  const gfx::ImageSkia& iconImage =
-      gfx::CreateVectorIcon(kTabCloseNormalIcon, kTabCloseButtonSize,
-                            vectorHighlightIcon ? SK_ColorWHITE : iconColor_);
+  const gfx::ImageSkia iconImage = gfx::CreateVectorIcon(
+      kTabCloseNormalIcon, kTabCloseButtonSize,
+      hoverState != kHoverStateNone ? SK_ColorWHITE : iconColor_);
 
-  if (vectorHighlightIcon) {
-    const gfx::ImageSkia& highlight = gfx::CreateVectorIcon(
-        *vectorHighlightIcon, kTabCloseButtonSize, vectorIconColor);
+  if (hoverState != kHoverStateNone) {
+    const gfx::ImageSkia highlight =
+        gfx::CanvasImageSource::MakeImageSkia<HighlightImage>(
+            kTabCloseButtonSize, vectorIconColor);
     return NSImageFromImageSkia(
         gfx::ImageSkiaOperations::CreateSuperimposedImage(highlight,
                                                           iconImage));
diff --git a/chrome/browser/ui/cocoa/profiles/profile_menu_controller_unittest.mm b/chrome/browser/ui/cocoa/profiles/profile_menu_controller_unittest.mm
index 2c5ef83..bc95c7d 100644
--- a/chrome/browser/ui/cocoa/profiles/profile_menu_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/profiles/profile_menu_controller_unittest.mm
@@ -247,55 +247,3 @@
   [controller() activeBrowserChangedTo:NULL];
   base::ThreadRestrictions::SetIOAllowed(io_was_allowed);
 }
-
-TEST_F(ProfileMenuControllerTest, SupervisedProfile) {
-  TestingProfileManager* manager = testing_profile_manager();
-  TestingProfile* supervised_profile = manager->CreateTestingProfile(
-      "test1", std::unique_ptr<sync_preferences::PrefServiceSyncable>(),
-      base::ASCIIToUTF16("Supervised User"), 0, "TEST_ID",
-      TestingProfile::TestingFactories());
-  // The supervised profile is initially marked as omitted from the avatar menu
-  // (in non-test code, until we have confirmation that it has actually been
-  // created on the server). For the test, just tell the profile attribute
-  // storage to un-hide it.
-  ProfileAttributesEntry* entry;
-  ASSERT_TRUE(manager->profile_attributes_storage()->
-      GetProfileAttributesWithPath(supervised_profile->GetPath(), &entry));
-  entry->SetIsOmitted(false);
-
-  BrowserList::SetLastActive(browser());
-
-  NSMenu* menu = [controller() menu];
-  // Person 1, Supervised User, <sep>, Edit, <sep>, New.
-  ASSERT_EQ(6, [menu numberOfItems]);
-
-  NSMenuItem* item = [menu itemAtIndex:0];
-  ASSERT_EQ(@selector(switchToProfileFromMenu:), [item action]);
-  EXPECT_TRUE([controller() validateMenuItem:item]);
-
-  item = [menu itemAtIndex:1];
-  ASSERT_EQ(@selector(switchToProfileFromMenu:), [item action]);
-  EXPECT_TRUE([controller() validateMenuItem:item]);
-
-  item = [menu itemAtIndex:5];
-  ASSERT_EQ(@selector(newProfile:), [item action]);
-  EXPECT_TRUE([controller() validateMenuItem:item]);
-
-  // Open a new browser for the supervised user and switch to it.
-  Browser::CreateParams supervised_profile_params(supervised_profile, true);
-  std::unique_ptr<Browser> supervised_browser(
-      CreateBrowserWithTestWindowForParams(&supervised_profile_params));
-  BrowserList::SetLastActive(supervised_browser.get());
-
-  item = [menu itemAtIndex:0];
-  ASSERT_EQ(@selector(switchToProfileFromMenu:), [item action]);
-  EXPECT_FALSE([controller() validateMenuItem:item]);
-
-  item = [menu itemAtIndex:1];
-  ASSERT_EQ(@selector(switchToProfileFromMenu:), [item action]);
-  EXPECT_TRUE([controller() validateMenuItem:item]);
-
-  item = [menu itemAtIndex:5];
-  ASSERT_EQ(@selector(newProfile:), [item action]);
-  EXPECT_FALSE([controller() validateMenuItem:item]);
-}
diff --git a/chrome/browser/ui/extensions/extension_action_view_controller.cc b/chrome/browser/ui/extensions/extension_action_view_controller.cc
index 71359114..2c7bfa4d 100644
--- a/chrome/browser/ui/extensions/extension_action_view_controller.cc
+++ b/chrome/browser/ui/extensions/extension_action_view_controller.cc
@@ -27,6 +27,7 @@
 #include "extensions/browser/extension_host.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/common/extension.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/manifest_constants.h"
 #include "ui/gfx/image/image_skia.h"
 #include "ui/gfx/image/image_skia_operations.h"
@@ -248,6 +249,34 @@
   OnPopupClosed();
 }
 
+ExtensionActionViewController::PageInteractionStatus
+ExtensionActionViewController::GetPageInteractionStatus(
+    content::WebContents* web_contents) {
+  // We give priority to kPending, because it's the one that's most important
+  // for users to see.
+  if (HasBeenBlocked(web_contents))
+    return PageInteractionStatus::kPending;
+
+  // We consider an extension active on a page if either the extension action
+  // is active (in which case it can be clicked) or if the extension has
+  // permission to acccess the page (in which case it can inject scripts and
+  // intercept webRequests).
+  // NOTE(devlin): We could theoretically adjust this to only be considered
+  // active if the extension *did* act on the page, rather than if it *could*.
+  // This is a bit more complex, and it's unclear if this is a better UX, since
+  // it would lead to much less determinism in terms of what extensions look
+  // like on a given host.
+  int tab_id = SessionTabHelper::IdForTab(web_contents).id();
+  if (extension_action_->GetIsVisible(tab_id) ||
+      extension_->permissions_data()->GetPageAccess(
+          web_contents->GetLastCommittedURL(), tab_id, /*error=*/nullptr) ==
+          extensions::PermissionsData::PageAccess::kAllowed) {
+    return PageInteractionStatus::kActive;
+  }
+
+  return PageInteractionStatus::kNone;
+}
+
 bool ExtensionActionViewController::ExtensionIsValid() const {
   return extension_registry_->enabled_extensions().Contains(extension_->id());
 }
@@ -386,21 +415,34 @@
   }
   image_source->SetBadge(std::move(badge));
 
-  // If the extension doesn't want to run on the active web contents, we
-  // grayscale it to indicate that.
-  image_source->set_grayscale(!IsEnabled(web_contents));
-  // If the action *does* want to run on the active web contents and is also
+  bool grayscale = false;
+  bool was_blocked = false;
+  if (base::FeatureList::IsEnabled(
+          extensions::features::kRuntimeHostPermissions)) {
+    PageInteractionStatus interaction_status =
+        GetPageInteractionStatus(web_contents);
+    // With the runtime host permissions feature, we only grayscale the icon if
+    // it cannot interact with the page and the icon is disabled.
+    grayscale = interaction_status == PageInteractionStatus::kNone;
+    was_blocked = interaction_status == PageInteractionStatus::kPending;
+  } else {
+    // Without runtime host permissions enabled, grayscaling is purely used to
+    // indicate "clickability", and not any kind of access.
+    grayscale = !extension_action_->GetIsVisible(tab_id);
+    // was_blocked is always false without runtime host permissions.
+  }
+
+  image_source->set_grayscale(grayscale);
+  image_source->set_paint_blocked_actions_decoration(was_blocked);
+
+  // If the action has an active page action on the web contents and is also
   // overflowed, we add a decoration so that the user can see which overflowed
   // action wants to run (since they wouldn't be able to see the change from
   // grayscale to color).
   bool is_overflow =
       toolbar_actions_bar_ && toolbar_actions_bar_->in_overflow_mode();
-
-  bool has_blocked_actions = HasBeenBlocked(web_contents);
-  image_source->set_paint_blocked_actions_decoration(has_blocked_actions);
   image_source->set_paint_page_action_decoration(
-      !has_blocked_actions && is_overflow &&
-      PageActionWantsToRun(web_contents));
+      !was_blocked && is_overflow && PageActionWantsToRun(web_contents));
 
   return image_source;
 }
diff --git a/chrome/browser/ui/extensions/extension_action_view_controller.h b/chrome/browser/ui/extensions/extension_action_view_controller.h
index cc2d81c..dbef20f 100644
--- a/chrome/browser/ui/extensions/extension_action_view_controller.h
+++ b/chrome/browser/ui/extensions/extension_action_view_controller.h
@@ -97,6 +97,21 @@
   // ExtensionHostObserver:
   void OnExtensionHostDestroyed(const extensions::ExtensionHost* host) override;
 
+  // The status of the extension's interaction for the page.
+  enum class PageInteractionStatus {
+    // The extension cannot run on the page and cannot be clicked on the page.
+    kNone,
+    // The extension tried to inject on the page, but is pending user approval.
+    kPending,
+    // The extension has permission to run on the page, or is clickable on the
+    // page and has no pending injections.
+    kActive,
+  };
+
+  // Returns the PageInteractionStatus for the current page.
+  PageInteractionStatus GetPageInteractionStatus(
+      content::WebContents* web_contents);
+
   // Checks if the associated |extension| is still valid by checking its
   // status in the registry. Since the OnExtensionUnloaded() notifications are
   // not in a deterministic order, it's possible that the view tries to refresh
diff --git a/chrome/browser/ui/extensions/extension_action_view_controller_unittest.cc b/chrome/browser/ui/extensions/extension_action_view_controller_unittest.cc
index bc14737..423877d 100644
--- a/chrome/browser/ui/extensions/extension_action_view_controller_unittest.cc
+++ b/chrome/browser/ui/extensions/extension_action_view_controller_unittest.cc
@@ -2,17 +2,29 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/ui/extensions/extension_action_view_controller.h"
+
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/run_loop.h"
+#include "base/stl_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/test/scoped_feature_list.h"
+#include "chrome/browser/extensions/extension_action.h"
+#include "chrome/browser/extensions/extension_action_manager.h"
 #include "chrome/browser/extensions/extension_action_runner.h"
-#include "chrome/browser/ui/extensions/extension_action_view_controller.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/scripting_permissions_modifier.h"
+#include "chrome/browser/sessions/session_tab_helper.h"
 #include "chrome/browser/ui/extensions/icon_with_badge_image_source.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h"
 #include "chrome/browser/ui/toolbar/toolbar_actions_bar_unittest.h"
 #include "chrome/grit/chromium_strings.h"
 #include "chrome/grit/generated_resources.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/common/extension_builder.h"
+#include "extensions/common/extension_features.h"
 #include "extensions/common/user_script.h"
 #include "ui/base/l10n/l10n_util.h"
 
@@ -64,6 +76,11 @@
 }
 
 TEST_P(ToolbarActionsBarUnitTest, ExtensionActionBlockedActions) {
+  // Blocked actions are only present with the runtime host permissions feature.
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      extensions::features::kRuntimeHostPermissions);
+
   scoped_refptr<const extensions::Extension> browser_action_ext =
       CreateAndAddExtension(
           "browser action",
@@ -189,3 +206,118 @@
   check_visibility_string(toolbar_actions_bar()->GetActions()[0],
                           IDS_EXTENSIONS_KEEP_BUTTON_IN_TOOLBAR);
 }
+
+// Tests the behavior for icon grayscaling with the runtime host permissions
+// feature enabled.
+TEST_P(ToolbarActionsBarUnitTest, GrayscaleIcon) {
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitAndEnableFeature(
+      extensions::features::kRuntimeHostPermissions);
+
+  scoped_refptr<const extensions::Extension> extension =
+      extensions::ExtensionBuilder("extension")
+          .SetAction(extensions::ExtensionBuilder::ActionType::BROWSER_ACTION)
+          .SetLocation(extensions::Manifest::INTERNAL)
+          .AddPermission("https://www.google.com/*")
+          .Build();
+  extensions::ExtensionService* service =
+      extensions::ExtensionSystem::Get(profile())->extension_service();
+  service->GrantPermissions(extension.get());
+  service->AddExtension(extension.get());
+
+  extensions::ScriptingPermissionsModifier permissions_modifier(profile(),
+                                                                extension);
+  permissions_modifier.SetWithholdHostPermissions(true);
+  ASSERT_EQ(1u, toolbar_actions_bar()->GetIconCount());
+  const GURL kUrl("https://www.google.com/");
+  AddTab(browser(), kUrl);
+
+  enum class ActionState {
+    kEnabled,
+    kDisabled,
+  };
+  enum class PageAccess {
+    kGranted,
+    kPending,
+    kNone,
+  };
+  enum class Opacity {
+    kGrayscale,
+    kFull,
+  };
+  enum class BlockedActions {
+    kPainted,
+    kNotPainted,
+  };
+
+  struct {
+    ActionState action_state;
+    PageAccess page_access;
+    Opacity expected_opacity;
+    BlockedActions expected_blocked_actions;
+  } test_cases[] = {
+      {ActionState::kEnabled, PageAccess::kNone, Opacity::kFull,
+       BlockedActions::kNotPainted},
+      {ActionState::kEnabled, PageAccess::kPending, Opacity::kFull,
+       BlockedActions::kPainted},
+      {ActionState::kEnabled, PageAccess::kGranted, Opacity::kFull,
+       BlockedActions::kNotPainted},
+
+      {ActionState::kDisabled, PageAccess::kNone, Opacity::kGrayscale,
+       BlockedActions::kNotPainted},
+      {ActionState::kDisabled, PageAccess::kPending, Opacity::kFull,
+       BlockedActions::kPainted},
+      {ActionState::kDisabled, PageAccess::kGranted, Opacity::kFull,
+       BlockedActions::kNotPainted},
+  };
+
+  auto* controller = static_cast<ExtensionActionViewController*>(
+      toolbar_actions_bar()->GetActions()[0]);
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  ExtensionAction* extension_action =
+      extensions::ExtensionActionManager::Get(profile())->GetExtensionAction(
+          *extension);
+  extensions::ExtensionActionRunner* action_runner =
+      extensions::ExtensionActionRunner::GetForWebContents(web_contents);
+  int tab_id = SessionTabHelper::IdForTab(web_contents).id();
+  const gfx::Size kSize = toolbar_actions_bar()->GetViewSize();
+
+  for (size_t i = 0; i < base::size(test_cases); ++i) {
+    SCOPED_TRACE(
+        base::StringPrintf("Running test case %d", static_cast<int>(i)));
+    const auto& test_case = test_cases[i];
+
+    // Set up the proper state.
+    extension_action->SetIsVisible(
+        tab_id, test_case.action_state == ActionState::kEnabled);
+    switch (test_case.page_access) {
+      case PageAccess::kNone:
+        // Page access should already be "none", but verify.
+        EXPECT_EQ(extensions::PermissionsData::PageAccess::kWithheld,
+                  extension->permissions_data()->GetPageAccess(
+                      kUrl, tab_id, /*error=*/nullptr));
+        break;
+      case PageAccess::kPending:
+        action_runner->RequestScriptInjectionForTesting(
+            extension.get(), extensions::UserScript::DOCUMENT_IDLE,
+            base::DoNothing());
+        break;
+      case PageAccess::kGranted:
+        permissions_modifier.GrantHostPermission(kUrl);
+        break;
+    }
+
+    std::unique_ptr<IconWithBadgeImageSource> image_source =
+        controller->GetIconImageSourceForTesting(web_contents, kSize);
+    EXPECT_EQ(test_case.expected_opacity == Opacity::kGrayscale,
+              image_source->grayscale());
+    EXPECT_EQ(test_case.expected_blocked_actions == BlockedActions::kPainted,
+              image_source->paint_blocked_actions_decoration());
+
+    // Clean up permissions state.
+    if (test_case.page_access == PageAccess::kGranted)
+      permissions_modifier.RemoveGrantedHostPermission(kUrl);
+    action_runner->ClearInjectionsForTesting(*extension);
+  }
+}
diff --git a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
index 937eef4..071ecde 100644
--- a/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
+++ b/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
@@ -122,7 +122,7 @@
 // static
 bool HostedAppBrowserController::IsForExperimentalHostedAppBrowser(
     const Browser* browser) {
-  return base::FeatureList::IsEnabled(features::kDesktopPWAWindowing) &&
+  return base::FeatureList::IsEnabled(::features::kDesktopPWAWindowing) &&
          IsForHostedApp(browser);
 }
 
@@ -162,7 +162,7 @@
       // TODO(https://crbug.com/774918): Replace once there is a more explicit
       // indicator of a Bookmark App for an installable website.
       created_for_installed_pwa_(
-          base::FeatureList::IsEnabled(features::kDesktopPWAWindowing) &&
+          base::FeatureList::IsEnabled(::features::kDesktopPWAWindowing) &&
           UrlHandlers::GetUrlHandlers(GetExtension())) {
   browser_->tab_strip_model()->AddObserver(this);
 }
diff --git a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
index 90dacc0..00b2ca6a 100644
--- a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
+++ b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h"
 
+#include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build/build_config.h"
 #include "chrome/app/vector_icons/vector_icons.h"
@@ -22,7 +23,7 @@
 }
 
 // static
-void AlternateNavInfoBarDelegate::Create(
+void AlternateNavInfoBarDelegate::CreateForOmniboxNavigation(
     content::WebContents* web_contents,
     const base::string16& text,
     const AutocompleteMatch& match,
@@ -30,24 +31,43 @@
   InfoBarService* infobar_service =
       InfoBarService::FromWebContents(web_contents);
   infobar_service->AddInfoBar(AlternateNavInfoBarDelegate::CreateInfoBar(
-      std::unique_ptr<AlternateNavInfoBarDelegate>(
-          new AlternateNavInfoBarDelegate(
-              Profile::FromBrowserContext(web_contents->GetBrowserContext()),
-              text, match, search_url))));
+      base::WrapUnique(new AlternateNavInfoBarDelegate(
+          Profile::FromBrowserContext(web_contents->GetBrowserContext()), text,
+          std::make_unique<AutocompleteMatch>(match), match.destination_url,
+          search_url))));
+}
+
+// static
+void AlternateNavInfoBarDelegate::CreateForIDNNavigation(
+    content::WebContents* web_contents,
+    const base::string16& text,
+    const GURL& destination_url,
+    const GURL& original_url) {
+  InfoBarService* infobar_service =
+      InfoBarService::FromWebContents(web_contents);
+  infobar_service->AddInfoBar(AlternateNavInfoBarDelegate::CreateInfoBar(
+      base::WrapUnique(new AlternateNavInfoBarDelegate(
+          Profile::FromBrowserContext(web_contents->GetBrowserContext()), text,
+          nullptr, destination_url, original_url))));
 }
 
 AlternateNavInfoBarDelegate::AlternateNavInfoBarDelegate(
     Profile* profile,
     const base::string16& text,
-    const AutocompleteMatch& match,
-    const GURL& search_url)
+    std::unique_ptr<AutocompleteMatch> match,
+    const GURL& destination_url,
+    const GURL& original_url)
     : infobars::InfoBarDelegate(),
       profile_(profile),
       text_(text),
-      match_(match),
-      search_url_(search_url) {
-  DCHECK(match_.destination_url.is_valid());
-  DCHECK(search_url_.is_valid());
+      match_(std::move(match)),
+      destination_url_(destination_url),
+      original_url_(original_url) {
+  if (match_)
+    DCHECK_EQ(destination_url_, match_->destination_url);
+
+  DCHECK(destination_url_.is_valid());
+  DCHECK(original_url_.is_valid());
 }
 
 // AlternateNavInfoBarDelegate::CreateInfoBar() is implemented in
@@ -61,37 +81,44 @@
 }
 
 base::string16 AlternateNavInfoBarDelegate::GetLinkText() const {
-  return base::UTF8ToUTF16(match_.destination_url.spec());
+  return base::UTF8ToUTF16(destination_url_.spec());
 }
 
 GURL AlternateNavInfoBarDelegate::GetLinkURL() const {
-  return match_.destination_url;
+  return destination_url_;
 }
 
 bool AlternateNavInfoBarDelegate::LinkClicked(
     WindowOpenDisposition disposition) {
-  // Tell the shortcuts backend to remove the shortcut it added for the original
-  // search and instead add one reflecting this navigation.
-  scoped_refptr<ShortcutsBackend> shortcuts_backend(
-      ShortcutsBackendFactory::GetForProfile(profile_));
-  if (shortcuts_backend.get()) {  // May be NULL in incognito.
-    shortcuts_backend->DeleteShortcutsWithURL(search_url_);
-    shortcuts_backend->AddOrUpdateShortcut(text_, match_);
-  }
-
-  // Tell the history system to remove any saved search term for the search.
   history::HistoryService* const history_service =
       HistoryServiceFactory::GetForProfile(profile_,
                                            ServiceAccessType::IMPLICIT_ACCESS);
-  if (history_service)
-    history_service->DeleteKeywordSearchTermForURL(search_url_);
+
+  if (match_) {
+    // If there is an autocomplete match, this is an omnibox navigation. Tell
+    // the shortcuts backend to remove the shortcut it added for the
+    // original search and instead add one reflecting this navigation.
+    scoped_refptr<ShortcutsBackend> shortcuts_backend(
+        ShortcutsBackendFactory::GetForProfile(profile_));
+    if (shortcuts_backend.get()) {  // May be NULL in incognito.
+      shortcuts_backend->DeleteShortcutsWithURL(original_url_);
+      shortcuts_backend->AddOrUpdateShortcut(text_, *match_);
+    }
+
+    // Tell the history system to remove any saved search term for the search.
+    if (history_service)
+      history_service->DeleteKeywordSearchTermForURL(original_url_);
+  } else {
+    // This is an IDN navigation suggestion. Remove the current entry.
+    if (history_service)
+      history_service->DeleteURL(original_url_);
+  }
 
   // Pretend the user typed this URL, so that navigating to it will be the
   // default action when it's typed again in the future.
   InfoBarService::WebContentsFromInfoBar(infobar())->OpenURL(
-      content::OpenURLParams(match_.destination_url, content::Referrer(),
-                             disposition, ui::PAGE_TRANSITION_TYPED,
-                             false));
+      content::OpenURLParams(destination_url_, content::Referrer(), disposition,
+                             ui::PAGE_TRANSITION_TYPED, false));
 
   // We should always close, even if the navigation did not occur within this
   // WebContents.
diff --git a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
index 152de60..fc405d9 100644
--- a/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
+++ b/chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h
@@ -20,16 +20,26 @@
 class WebContents;
 }
 
+// This class creates an alternate nav infobar and delegate and adds the infobar
+// to the infobar service for |web_contents|.
 class AlternateNavInfoBarDelegate : public infobars::InfoBarDelegate {
  public:
   ~AlternateNavInfoBarDelegate() override;
 
-  // Creates an alternate nav infobar and delegate and adds the infobar to the
-  // infobar service for |web_contents|.
-  static void Create(content::WebContents* web_contents,
-                     const base::string16& text,
-                     const AutocompleteMatch& match,
-                     const GURL& search_url);
+  // Creates the delegate for omnibox navigations that have suggested URLs.
+  // E.g. This will display a "Did you mean to go to http://test" infobar if the
+  // user searches for "test" and there is a host called "test" in the network.
+  static void CreateForOmniboxNavigation(content::WebContents* web_contents,
+                                         const base::string16& text,
+                                         const AutocompleteMatch& match,
+                                         const GURL& search_url);
+
+  // Creates the delegate for navigations involving internationalized domain
+  // names (IDN) where the IDN looks similar to one of the top 10K domains.
+  static void CreateForIDNNavigation(content::WebContents* web_contents,
+                                     const base::string16& text,
+                                     const GURL& suggested_url,
+                                     const GURL& original_url);
   base::string16 GetMessageTextWithOffset(size_t* link_offset) const;
   base::string16 GetLinkText() const;
   GURL GetLinkURL() const;
@@ -38,8 +48,9 @@
  private:
   AlternateNavInfoBarDelegate(Profile* profile,
                               const base::string16& text,
-                              const AutocompleteMatch& match,
-                              const GURL& search_url);
+                              std::unique_ptr<AutocompleteMatch> match,
+                              const GURL& destination_url,
+                              const GURL& original_url);
 
   // Returns an alternate nav infobar that owns |delegate|.
   static std::unique_ptr<infobars::InfoBar> CreateInfoBar(
@@ -57,8 +68,20 @@
 
   Profile* profile_;
   const base::string16 text_;
-  const AutocompleteMatch match_;
-  const GURL search_url_;
+
+  // The autocomplete match to be used when deleting the corresponding shortcut.
+  // Can be null when the event triggering the infobar was not an omnibox
+  // navigation.
+  std::unique_ptr<AutocompleteMatch> match_;
+
+  // The URL to navigate to when the user clicks the link.
+  const GURL destination_url_;
+
+  // Original URL of the navigation. When the user clicks the suggested
+  // navigation link, this will be removed from history.
+  // For search navigations this is the search URL. For IDN navigations, this is
+  // the URL that visually matches a top domain.
+  const GURL original_url_;
 
   DISALLOW_COPY_AND_ASSIGN(AlternateNavInfoBarDelegate);
 };
diff --git a/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc b/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc
index 9b7bc80b..0850ddf 100644
--- a/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc
+++ b/chrome/browser/ui/omnibox/chrome_omnibox_navigation_observer.cc
@@ -123,7 +123,7 @@
 }
 
 void ChromeOmniboxNavigationObserver::CreateAlternateNavInfoBar() {
-  AlternateNavInfoBarDelegate::Create(
+  AlternateNavInfoBarDelegate::CreateForOmniboxNavigation(
       web_contents(), text_, alternate_nav_match_, match_.destination_url);
 }
 
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer.cc b/chrome/browser/ui/omnibox/idn_navigation_observer.cc
new file mode 100644
index 0000000..b9f7b08
--- /dev/null
+++ b/chrome/browser/ui/omnibox/idn_navigation_observer.cc
@@ -0,0 +1,50 @@
+// 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.
+
+#include "chrome/browser/ui/omnibox/idn_navigation_observer.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h"
+#include "components/omnibox/browser/autocomplete_match.h"
+#include "components/url_formatter/idn_spoof_checker.h"
+#include "components/url_formatter/url_formatter.h"
+#include "content/public/browser/navigation_details.h"
+#include "content/public/browser/navigation_entry.h"
+
+DEFINE_WEB_CONTENTS_USER_DATA_KEY(IdnNavigationObserver);
+
+IdnNavigationObserver::IdnNavigationObserver(content::WebContents* web_contents)
+    : WebContentsObserver(web_contents) {}
+
+IdnNavigationObserver::~IdnNavigationObserver() {}
+
+void IdnNavigationObserver::NavigationEntryCommitted(
+    const content::LoadCommittedDetails& load_details) {
+  const GURL url = load_details.entry->GetVirtualURL();
+  const base::StringPiece host = url.host_piece();
+  std::string matched_domain;
+
+  url_formatter::IDNConversionResult result =
+      url_formatter::IDNToUnicodeWithDetails(host);
+  if (!result.has_idn_component || result.matching_top_domain.empty())
+    return;
+
+  GURL::Replacements replace_host;
+  replace_host.SetHostStr(result.matching_top_domain);
+  const GURL suggested_url = url.ReplaceComponents(replace_host);
+
+  AlternateNavInfoBarDelegate::CreateForIDNNavigation(
+      web_contents(), base::UTF8ToUTF16(result.matching_top_domain),
+      suggested_url, load_details.entry->GetVirtualURL());
+}
+
+// static
+void IdnNavigationObserver::CreateForWebContents(
+    content::WebContents* web_contents) {
+  DCHECK(web_contents);
+  if (!FromWebContents(web_contents)) {
+    web_contents->SetUserData(
+        UserDataKey(), std::make_unique<IdnNavigationObserver>(web_contents));
+  }
+}
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer.h b/chrome/browser/ui/omnibox/idn_navigation_observer.h
new file mode 100644
index 0000000..6e14ce0
--- /dev/null
+++ b/chrome/browser/ui/omnibox/idn_navigation_observer.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_OMNIBOX_IDN_NAVIGATION_OBSERVER_H_
+#define CHROME_BROWSER_UI_OMNIBOX_IDN_NAVIGATION_OBSERVER_H_
+
+#include "content/public/browser/web_contents_observer.h"
+#include "content/public/browser/web_contents_user_data.h"
+
+// Observes navigations and shows an infobar if an IDN hostname visually looks
+// like a top domain.
+class IdnNavigationObserver
+    : public content::WebContentsObserver,
+      public content::WebContentsUserData<IdnNavigationObserver> {
+ public:
+  static void CreateForWebContents(content::WebContents* web_contents);
+
+  explicit IdnNavigationObserver(content::WebContents* web_contents);
+  ~IdnNavigationObserver() override;
+
+  // content::WebContentsObserver:
+  void NavigationEntryCommitted(
+      const content::LoadCommittedDetails& load_details) override;
+};
+
+#endif  // CHROME_BROWSER_UI_OMNIBOX_IDN_NAVIGATION_OBSERVER_H_
diff --git a/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc b/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc
new file mode 100644
index 0000000..9193f61
--- /dev/null
+++ b/chrome/browser/ui/omnibox/idn_navigation_observer_browsertest.cc
@@ -0,0 +1,136 @@
+// 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.
+
+#include "chrome/browser/history/history_service_factory.h"
+#include "chrome/browser/history/history_test_utils.h"
+#include "chrome/browser/infobars/infobar_observer.h"
+#include "chrome/browser/infobars/infobar_service.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_commands.h"
+#include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/chrome_features.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "components/infobars/core/infobar.h"
+#include "components/infobars/core/infobar_delegate.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_navigation_observer.h"
+#include "net/dns/mock_host_resolver.h"
+#include "ui/base/window_open_disposition.h"
+
+class IdnNavigationObserverBrowserTest
+    : public InProcessBrowserTest,
+      public testing::WithParamInterface<bool> {
+ protected:
+  void SetUp() override {
+    if (GetParam())
+      feature_list_.InitAndEnableFeature(features::kIdnNavigationSuggestions);
+    InProcessBrowserTest::SetUp();
+  }
+
+  void SetUpOnMainThread() override {
+    host_resolver()->AddRule("*", "127.0.0.1");
+    ASSERT_TRUE(embedded_test_server()->Start());
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+INSTANTIATE_TEST_CASE_P(,
+                        IdnNavigationObserverBrowserTest,
+                        ::testing::Values(false, true));
+
+// Navigating to a non-IDN shouldn't show an infobar.
+IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest, NonIdn_NoInfobar) {
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  InfoBarService* infobar_service =
+      InfoBarService::FromWebContents(web_contents);
+  content::TestNavigationObserver navigation_observer(web_contents, 1);
+  ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL("google.com", "/title1.html"));
+  navigation_observer.Wait();
+  EXPECT_EQ(0u, infobar_service->infobar_count());
+}
+
+// Navigating to a domain whose visual representation does not look like a
+// top domain shouldn't show an infobar.
+IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest,
+                       NonTopDomainIdn_NoInfobar) {
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  InfoBarService* infobar_service =
+      InfoBarService::FromWebContents(web_contents);
+
+  content::TestNavigationObserver navigation_observer(web_contents, 1);
+  ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL("éxample.com", "/title1.html"));
+  EXPECT_EQ(0u, infobar_service->infobar_count());
+}
+
+// Navigating to a domain whose visual representation looks like a top domain
+// should show a "Did you mean to go to ..." infobar.
+IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest, TopDomainIdn_Infobar) {
+  if (!GetParam())
+    return;
+
+  history::HistoryService* const history_service =
+      HistoryServiceFactory::GetForProfile(browser()->profile(),
+                                           ServiceAccessType::EXPLICIT_ACCESS);
+  ui_test_utils::WaitForHistoryToLoad(history_service);
+
+  const GURL kIdnUrl =
+      embedded_test_server()->GetURL("googlé.com", "/title1.html");
+  const GURL kSuggestedUrl =
+      embedded_test_server()->GetURL("google.com", "/title1.html");
+
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  InfoBarService* infobar_service =
+      InfoBarService::FromWebContents(web_contents);
+  InfoBarObserver infobar_added_observer(infobar_service,
+                                         InfoBarObserver::Type::kInfoBarAdded);
+  ui_test_utils::NavigateToURL(browser(), kIdnUrl);
+  infobar_added_observer.Wait();
+
+  infobars::InfoBar* infobar = infobar_service->infobar_at(0);
+  EXPECT_EQ(infobars::InfoBarDelegate::ALTERNATE_NAV_INFOBAR_DELEGATE,
+            infobar->delegate()->GetIdentifier());
+
+  // Clicking the link in the infobar should remove the infobar and navigate to
+  // the suggested URL.
+  InfoBarObserver infobar_removed_observer(
+      infobar_service, InfoBarObserver::Type::kInfoBarRemoved);
+  AlternateNavInfoBarDelegate* infobar_delegate =
+      static_cast<AlternateNavInfoBarDelegate*>(infobar->delegate());
+  infobar_delegate->LinkClicked(WindowOpenDisposition::CURRENT_TAB);
+  infobar_removed_observer.Wait();
+
+  EXPECT_EQ(0u, infobar_service->infobar_count());
+  EXPECT_EQ(kSuggestedUrl, web_contents->GetURL());
+
+  // Clicking the link in the infobar should also remove the original URL from
+  // history.
+  ui_test_utils::HistoryEnumerator enumerator(browser()->profile());
+  EXPECT_FALSE(base::ContainsValue(enumerator.urls(), kIdnUrl));
+}
+
+// The infobar shouldn't be shown when the feature is disabled.
+IN_PROC_BROWSER_TEST_P(IdnNavigationObserverBrowserTest,
+                       TopDomainIdn_FeatureDisabled) {
+  if (GetParam())
+    return;
+
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+  InfoBarService* infobar_service =
+      InfoBarService::FromWebContents(web_contents);
+
+  content::TestNavigationObserver navigation_observer(web_contents, 1);
+  ui_test_utils::NavigateToURL(
+      browser(), embedded_test_server()->GetURL("googlé.com", "/title1.html"));
+  EXPECT_EQ(0u, infobar_service->infobar_count());
+}
diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
index 483ed86..ced129b 100644
--- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
+++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc
@@ -355,6 +355,11 @@
     }
 
     test_toolbar_model_->set_formatted_full_url(text);
+
+    // Normally the URL for display has portions elided. We aren't doing that in
+    // this case, because that is irrevelant for these tests.
+    test_toolbar_model_->set_url_for_display(text);
+
     omnibox_view->Update();
   }
 
diff --git a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
index bb63b3b..6a3cf24 100644
--- a/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
+++ b/chrome/browser/ui/startup/startup_browser_creator_browsertest.cc
@@ -82,6 +82,7 @@
 #endif  // !defined(OS_CHROMEOS)
 
 #if BUILDFLAG(ENABLE_SUPERVISED_USERS)
+#include "chrome/browser/supervised_user/supervised_user_constants.h"
 #include "chrome/browser/supervised_user/supervised_user_navigation_observer.h"
 #include "chrome/browser/supervised_user/supervised_user_service.h"
 #include "chrome/browser/supervised_user/supervised_user_service_factory.h"
@@ -1025,7 +1026,8 @@
 class SupervisedUserBrowserCreatorTest : public InProcessBrowserTest {
  protected:
   void SetUpCommandLine(base::CommandLine* command_line) override {
-    command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
+    command_line->AppendSwitchASCII(switches::kSupervisedUserId,
+                                    supervised_users::kChildAccountSUID);
   }
 };
 
diff --git a/chrome/browser/ui/tab_helpers.cc b/chrome/browser/ui/tab_helpers.cc
index 770ff41..1934651 100644
--- a/chrome/browser/ui/tab_helpers.cc
+++ b/chrome/browser/ui/tab_helpers.cc
@@ -62,6 +62,7 @@
 #include "chrome/browser/ui/find_bar/find_tab_helper.h"
 #include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h"
 #include "chrome/browser/ui/navigation_correction_tab_observer.h"
+#include "chrome/browser/ui/omnibox/idn_navigation_observer.h"
 #include "chrome/browser/ui/passwords/manage_passwords_ui_controller.h"
 #include "chrome/browser/ui/pdf/chrome_pdf_web_contents_helper_client.h"
 #include "chrome/browser/ui/prefs/prefs_tab_helper.h"
@@ -286,6 +287,9 @@
   extensions::WebNavigationTabObserver::CreateForWebContents(web_contents);
   FramebustBlockTabHelper::CreateForWebContents(web_contents);
   HungPluginTabHelper::CreateForWebContents(web_contents);
+  if (base::FeatureList::IsEnabled(features::kIdnNavigationSuggestions)) {
+    IdnNavigationObserver::CreateForWebContents(web_contents);
+  }
   JavaScriptDialogTabHelper::CreateForWebContents(web_contents);
   ManagePasswordsUIController::CreateForWebContents(web_contents);
   pdf::PDFWebContentsHelper::CreateForWebContentsWithClient(
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
index d56acda..8ed6080 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
+++ b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.cc
@@ -61,17 +61,6 @@
   }
 }
 
-void ArcAppInfoLinksPanel::OnAppReadyChanged(const std::string& app_id,
-                                             bool ready) {
-  if (app_id == arc::kSettingsAppId)
-    UpdateLink(ready);
-}
-
-void ArcAppInfoLinksPanel::OnAppRemoved(const std::string& app_id) {
-  if (app_id == arc::kSettingsAppId)
-    UpdateLink(false);
-}
-
 void ArcAppInfoLinksPanel::OnAppRegistered(
     const std::string& app_id,
     const ArcAppListPrefs::AppInfo& app_info) {
@@ -79,6 +68,18 @@
     UpdateLink(app_info.ready);
 }
 
+void ArcAppInfoLinksPanel::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  if (app_id == arc::kSettingsAppId)
+    UpdateLink(app_info.ready);
+}
+
+void ArcAppInfoLinksPanel::OnAppRemoved(const std::string& app_id) {
+  if (app_id == arc::kSettingsAppId)
+    UpdateLink(false);
+}
+
 void ArcAppInfoLinksPanel::UpdateLink(bool enabled) {
   manage_link_->SetEnabled(enabled);
 }
diff --git a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.h b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.h
index ea30325..b13e2723 100644
--- a/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.h
+++ b/chrome/browser/ui/views/apps/app_info_dialog/arc_app_info_links_panel.h
@@ -38,10 +38,11 @@
   void LinkClicked(views::Link* source, int event_flags) override;
 
   // ArcAppListPrefs::Observer:
-  void OnAppReadyChanged(const std::string& app_id, bool ready) override;
-  void OnAppRemoved(const std::string& app_id) override;
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
+  void OnAppRemoved(const std::string& app_id) override;
 
   void UpdateLink(bool enabled);
 
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 9de17f6..15c6bf9 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
@@ -424,6 +424,8 @@
       /*bottom=*/0,
       /*right=*/0));
   AddChildView(separator);
+
+  SetBackground(CreateBackground());
 }
 
 void AutofillPopupSeparatorView::RefreshStyle() {
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
index 6f95df5..8ab8fec 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -123,32 +123,33 @@
 using views::View;
 
 // Maximum size of buttons on the bookmark bar.
-static const int kMaxButtonWidth = 150;
+static const int kBookmarkBarMaxButtonWidth = 150;
 
 // Margins around the content.
-static const int kDetachedTopMargin = 1;  // When attached, we use 0 and let the
-                                          // toolbar above serve as the margin.
-static const int kBottomMargin = 4;
-static const int kHorizontalMargin = 8;
+// When attached, we use 0 and let the
+// toolbar above serve as the margin.
+static const int kBookmarkBarDetachedTopMargin = 1;
+static const int kBookmarkBarBottomMargin = 4;
+static const int kBookmarkBarHorizontalMargin = 8;
 
 // Padding between buttons.
 static const int kBookmarkBarButtonPadding = 8;
 
 // Width of the drop indicator.
-static const int kDropIndicatorWidth = 2;
+static const int kBookmarkBarDropIndicatorWidth = 2;
 
 // Distance between the bottom of the bar and the separator.
-static const int kSeparatorMargin = 1;
+static const int kBookmarkBarSeparatorMargin = 1;
 
 // Width of the separator between the recently bookmarked button and the
 // overflow indicator.
-static const int kSeparatorWidth = 9;
+static const int kBookmarkBarSeparatorWidth = 9;
 
 // Left-padding for the instructional text.
-static const int kInstructionsPadding = 6;
+static const int kBookmarkBarInstructionsPadding = 6;
 
 // Tag for the 'Apps Shortcut' button.
-static const int kAppsShortcutButtonTag = 2;
+static const int kBookmarkBarAppsShortcutButtonTag = 2;
 
 namespace {
 
@@ -605,7 +606,7 @@
   gfx::Size CalculatePreferredSize() const override {
     // We get the full height of the bookmark bar, so that the height returned
     // here doesn't matter.
-    return gfx::Size(kSeparatorWidth, 1);
+    return gfx::Size(kBookmarkBarSeparatorWidth, 1);
   }
 
   void GetAccessibleNodeData(ui::AXNodeData* node_data) override {
@@ -906,7 +907,7 @@
   // button, by which one can access all the Bookmark Bar items, and the "Other
   // Bookmarks" folder, along with appropriate margins and button padding.
   // It should also contain the Managed Bookmarks folder, if it is visible.
-  int width = kHorizontalMargin;
+  int width = kBookmarkBarHorizontalMargin;
 
   int height = GetPreferredHeight();
   if (IsDetached()) {
@@ -944,18 +945,19 @@
   if (!model_)
     return;
 
-  int x = kHorizontalMargin;
-  int top_margin = IsDetached() ? kDetachedTopMargin : 0;
+  int x = kBookmarkBarHorizontalMargin;
+  int top_margin = IsDetached() ? kBookmarkBarDetachedTopMargin : 0;
   int y = top_margin;
-  int width = View::width() - 2 * kHorizontalMargin;
+  int width = View::width() - 2 * kBookmarkBarHorizontalMargin;
   int preferred_height = GetPreferredHeight();
-  int height = preferred_height - kBottomMargin;
-  int separator_margin = kSeparatorMargin;
+  int height = preferred_height - kBookmarkBarBottomMargin;
+  int separator_margin = kBookmarkBarSeparatorMargin;
 
   if (IsDetached()) {
     double current_state = 1 - size_animation_.GetCurrentValue();
     y += (View::height() - preferred_height) / 2;
-    separator_margin -= static_cast<int>(kSeparatorMargin * current_state);
+    separator_margin -=
+        static_cast<int>(kBookmarkBarSeparatorMargin * current_state);
   } else {
     // For the attached appearance, pin the content to the bottom of the bar
     // when animating in/out, as shrinking its height instead looks weird.  This
@@ -971,7 +973,7 @@
   gfx::Size apps_page_shortcut_pref = apps_page_shortcut_->visible() ?
       apps_page_shortcut_->GetPreferredSize() : gfx::Size();
 
-  int max_x = kHorizontalMargin + width - overflow_pref.width() -
+  int max_x = kBookmarkBarHorizontalMargin + width - overflow_pref.width() -
               bookmarks_separator_pref.width();
   if (other_bookmarks_button_->visible())
     max_x -= other_bookmarks_pref.width() + kBookmarkBarButtonPadding;
@@ -999,10 +1001,8 @@
   if (show_instructions) {
     gfx::Size pref = instructions_->GetPreferredSize();
     instructions_->SetBounds(
-        x + kInstructionsPadding, y,
-        std::min(static_cast<int>(pref.width()),
-                 max_x - x),
-        height);
+        x + kBookmarkBarInstructionsPadding, y,
+        std::min(static_cast<int>(pref.width()), max_x - x), height);
   } else {
     bool last_visible = x < max_x;
     int button_count = GetBookmarkButtonCount();
@@ -1044,11 +1044,9 @@
 
   // Separator.
   if (bookmarks_separator_view_->visible()) {
-    bookmarks_separator_view_->SetBounds(x,
-                                         y - top_margin,
-                                         bookmarks_separator_pref.width(),
-                                         height + top_margin + kBottomMargin -
-                                         separator_margin);
+    bookmarks_separator_view_->SetBounds(
+        x, y - top_margin, bookmarks_separator_pref.width(),
+        height + top_margin + kBookmarkBarBottomMargin - separator_margin);
 
     x += bookmarks_separator_pref.width();
   }
@@ -1092,7 +1090,7 @@
     int h = height();
     if (index == GetBookmarkButtonCount()) {
       if (index == 0) {
-        x = kHorizontalMargin;
+        x = kBookmarkBarHorizontalMargin;
       } else {
         x = GetBookmarkButton(index - 1)->x() +
             GetBookmarkButton(index - 1)->width();
@@ -1107,8 +1105,9 @@
 
     // Since the drop indicator is painted directly onto the canvas, we must
     // make sure it is painted in the right location if the locale is RTL.
-    gfx::Rect indicator_bounds = GetMirroredRect(
-        gfx::Rect(x - kDropIndicatorWidth / 2, y, kDropIndicatorWidth, h));
+    gfx::Rect indicator_bounds =
+        GetMirroredRect(gfx::Rect(x - kBookmarkBarDropIndicatorWidth / 2, y,
+                                  kBookmarkBarDropIndicatorWidth, h));
 
     ui::PaintRecorder recorder(paint_info.context(), size());
     // TODO(sky/glen): make me pretty!
@@ -1544,7 +1543,7 @@
   WindowOpenDisposition disposition_from_event_flags =
       ui::DispositionFromEventFlags(event.flags());
 
-  if (sender->tag() == kAppsShortcutButtonTag) {
+  if (sender->tag() == kBookmarkBarAppsShortcutButtonTag) {
     OpenURLParams params(GURL(chrome::kChromeUIAppsURL),
                          Referrer(),
                          disposition_from_event_flags,
@@ -1756,7 +1755,7 @@
   button->SetImage(views::Button::STATE_NORMAL,
                    *GetImageSkiaNamed(IDR_BOOKMARK_BAR_APPS_SHORTCUT));
   button->set_context_menu_controller(this);
-  button->set_tag(kAppsShortcutButtonTag);
+  button->set_tag(kBookmarkBarAppsShortcutButtonTag);
   return button;
 }
 
@@ -1810,7 +1809,7 @@
 
     button->SetImage(views::Button::STATE_NORMAL, favicon);
   }
-  button->SetMaxSize(gfx::Size(kMaxButtonWidth, 0));
+  button->SetMaxSize(gfx::Size(kBookmarkBarMaxButtonWidth, 0));
 }
 
 bool BookmarkBarView::BookmarkNodeAddedImpl(BookmarkModel* model,
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
index 8223dc7..a17e1359 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash_browsertest.cc
@@ -58,6 +58,7 @@
 #include "chrome/browser/ui/views/page_action/page_action_icon_container_view.h"
 #include "chrome/browser/ui/views/profiles/profile_indicator_icon.h"
 #include "chrome/browser/ui/views/tabs/tab.h"
+#include "chrome/browser/ui/views/tabs/tab_strip.h"
 #include "chrome/browser/ui/views/toolbar/app_menu.h"
 #include "chrome/browser/ui/views/toolbar/extension_toolbar_menu_view.h"
 #include "chrome/common/chrome_features.h"
@@ -223,7 +224,6 @@
   // buttons should be visible.
   ToggleFullscreenModeAndWait(browser());
   EXPECT_TRUE(frame_view->ShouldPaint());
-  EXPECT_TRUE(frame_view->caption_button_container_->visible());
 }
 
 IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewAshTest, ImmersiveFullscreen) {
@@ -248,7 +248,8 @@
 
   // Frame paints by default.
   EXPECT_TRUE(frame_view->ShouldPaint());
-  EXPECT_LT(0, frame_view->frame_header_->GetHeaderHeightForPainting());
+  EXPECT_LT(
+      0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom());
 
   // Enter both browser fullscreen and tab fullscreen. Entering browser
   // fullscreen should enable immersive fullscreen.
@@ -262,14 +263,14 @@
           ImmersiveModeController::ANIMATE_REVEAL_NO));
   EXPECT_TRUE(immersive_mode_controller->IsRevealed());
   EXPECT_TRUE(frame_view->ShouldPaint());
-  EXPECT_TRUE(frame_view->caption_button_container_->visible());
 
   // End the reveal. When in both immersive browser fullscreen and tab
   // fullscreen.
   revealed_lock.reset();
   EXPECT_FALSE(immersive_mode_controller->IsRevealed());
   EXPECT_FALSE(frame_view->ShouldPaint());
-  EXPECT_EQ(0, frame_view->frame_header_->GetHeaderHeightForPainting());
+  EXPECT_EQ(
+      0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom());
 
   // Repeat test but without tab fullscreen.
   ExitFullscreenModeForTabAndWait(browser(), web_contents);
@@ -279,22 +280,23 @@
       ImmersiveModeController::ANIMATE_REVEAL_NO));
   EXPECT_TRUE(immersive_mode_controller->IsRevealed());
   EXPECT_TRUE(frame_view->ShouldPaint());
-  EXPECT_TRUE(frame_view->caption_button_container_->visible());
-  EXPECT_LT(0, frame_view->frame_header_->GetHeaderHeightForPainting());
+  EXPECT_LT(
+      0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom());
 
   // Ending the reveal. Immersive browser should have the same behavior as full
   // screen, i.e., having an origin of (0,0).
   revealed_lock.reset();
   EXPECT_FALSE(frame_view->ShouldPaint());
-  EXPECT_EQ(0, frame_view->frame_header_->GetHeaderHeightForPainting());
+  EXPECT_EQ(
+      0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom());
 
   // Exiting immersive fullscreen should make the caption buttons and the frame
   // visible again.
   ExitFullscreenModeAndWait(browser_view);
   EXPECT_FALSE(immersive_mode_controller->IsEnabled());
   EXPECT_TRUE(frame_view->ShouldPaint());
-  EXPECT_TRUE(frame_view->caption_button_container_->visible());
-  EXPECT_LT(0, frame_view->frame_header_->GetHeaderHeightForPainting());
+  EXPECT_LT(
+      0, frame_view->GetBoundsForTabStrip(browser_view->tabstrip()).bottom());
 }
 
 // Tests that Avatar icon should show on the top left corner of the teleported
@@ -385,6 +387,8 @@
 
 // Tests that FrameCaptionButtonContainer has been relaid out in response to
 // tablet mode being toggled.
+// TODO(estade): Implement this behavior in OopAsh (test by checking the
+// window's caption button bounds).
 IN_PROC_BROWSER_TEST_P(BrowserNonClientFrameViewAshTest,
                        ToggleTabletModeRelayout) {
   BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser());
diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc
index dd6d14f..789c8ba 100644
--- a/chrome/browser/ui/views/frame/browser_view.cc
+++ b/chrome/browser/ui/views/frame/browser_view.cc
@@ -1657,7 +1657,19 @@
 }
 
 base::string16 BrowserView::GetWindowTitle() const {
-  return browser_->GetWindowTitleForCurrentTab(true /* include_app_name */);
+  base::string16 title =
+      browser_->GetWindowTitleForCurrentTab(true /* include_app_name */);
+#if defined(OS_MACOSX)
+  TabAlertState state =
+      chrome::GetTabAlertStateForContents(GetActiveWebContents());
+  if (state == TabAlertState::AUDIO_PLAYING)
+    title = l10n_util::GetStringFUTF16(IDS_WINDOW_AUDIO_PLAYING_MAC, title,
+                                       base::WideToUTF16(L"\U0001F50A"));
+  else if (state == TabAlertState::AUDIO_MUTING)
+    title = l10n_util::GetStringFUTF16(IDS_WINDOW_AUDIO_MUTING_MAC, title,
+                                       base::WideToUTF16(L"\U0001F507"));
+#endif
+  return title;
 }
 
 base::string16 BrowserView::GetAccessibleWindowTitle() const {
diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
index 95fdbba..914e1fa1 100644
--- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
+++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
@@ -32,15 +32,15 @@
 
 // Amount of space reserved for the separator that appears after the icon or
 // label.
-constexpr int kSeparatorWidth = 1;
+constexpr int kIconLabelBubbleSeparatorWidth = 1;
 
 // Amount of space on either side of the separator that appears after the icon
 // or label.
-constexpr int kSpaceBesideSeparator = 8;
+constexpr int kIconLabelBubbleSpaceBesideSeparator = 8;
 
 // The length of the separator's fade animation. These values are empirical.
-constexpr int kFadeInDurationMs = 250;
-constexpr int kFadeOutDurationMs = 175;
+constexpr int kIconLabelBubbleFadeInDurationMs = 250;
+constexpr int kIconLabelBubbleFadeOutDurationMs = 175;
 
 }  // namespace
 
@@ -79,13 +79,13 @@
   // separator should fade out.
   views::InkDropState state = ink_drop->GetTargetInkDropState();
   float opacity = 0.0f;
-  float duration = kFadeOutDurationMs;
+  float duration = kIconLabelBubbleFadeOutDurationMs;
   if (!ink_drop->IsHighlightFadingInOrVisible() &&
       (state == views::InkDropState::HIDDEN ||
        state == views::InkDropState::ACTION_TRIGGERED ||
        state == views::InkDropState::DEACTIVATED)) {
     opacity = 1.0f;
-    duration = kFadeInDurationMs;
+    duration = kIconLabelBubbleFadeInDurationMs;
   }
 
   if (!layer())
@@ -437,13 +437,14 @@
 
 int IconLabelBubbleView::GetPrefixedSeparatorWidth() const {
   return ShouldShowSeparator() || ShouldShowExtraEndSpace()
-             ? kSeparatorWidth + kSpaceBesideSeparator
+             ? kIconLabelBubbleSeparatorWidth +
+                   kIconLabelBubbleSpaceBesideSeparator
              : 0;
 }
 
 int IconLabelBubbleView::GetEndPadding() const {
   if (ShouldShowSeparator())
-    return kSpaceBesideSeparator;
+    return kIconLabelBubbleSpaceBesideSeparator;
   return GetInsets().right();
 }
 
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.cc b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
index 79fbdfd..600a0c7 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.cc
@@ -13,9 +13,14 @@
 #include "chrome/browser/ui/media_router/cast_dialog_model.h"
 #include "chrome/browser/ui/media_router/media_cast_mode.h"
 #include "chrome/browser/ui/media_router/ui_media_sink.h"
+#include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
+#include "chrome/browser/ui/views/frame/browser_view.h"
+#include "chrome/browser/ui/views/frame/top_container_view.h"
 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/media_router/cast_dialog_no_sinks_view.h"
 #include "chrome/browser/ui/views/media_router/cast_dialog_sink_button.h"
+#include "chrome/browser/ui/views/toolbar/browser_actions_container.h"
+#include "chrome/browser/ui/views/toolbar/toolbar_view.h"
 #include "chrome/common/media_router/media_sink.h"
 #include "chrome/grit/generated_resources.h"
 #include "content/public/browser/browser_thread.h"
@@ -23,6 +28,7 @@
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/native_widget_types.h"
 #include "ui/gfx/vector_icon_types.h"
+#include "ui/views/bubble/bubble_border.h"
 #include "ui/views/controls/button/label_button.h"
 #include "ui/views/controls/button/md_text_button.h"
 #include "ui/views/controls/scroll_view.h"
@@ -54,16 +60,25 @@
 }  // namespace
 
 // static
-void CastDialogView::ShowDialog(views::View* anchor_view,
-                                CastDialogController* controller,
-                                Browser* browser,
-                                const base::Time& start_time) {
-  DCHECK(!instance_);
-  DCHECK(!start_time.is_null());
-  instance_ = new CastDialogView(anchor_view, controller, browser, start_time);
-  views::Widget* widget =
-      views::BubbleDialogDelegateView::CreateBubble(instance_);
-  widget->Show();
+void CastDialogView::ShowDialogWithToolbarAction(
+    CastDialogController* controller,
+    Browser* browser,
+    const base::Time& start_time) {
+  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+  DCHECK(browser_view->toolbar()->browser_actions());
+  views::View* action_view =
+      browser_view->toolbar()->browser_actions()->GetViewForId(
+          ComponentToolbarActionsFactory::kMediaRouterActionId);
+  ShowDialog(action_view, views::BubbleBorder::TOP_RIGHT, controller, browser,
+             start_time);
+}
+
+// static
+void CastDialogView::ShowDialogTopCentered(CastDialogController* controller,
+                                           Browser* browser,
+                                           const base::Time& start_time) {
+  ShowDialog(BrowserView::GetBrowserViewForBrowser(browser)->top_container(),
+             views::BubbleBorder::TOP_CENTER, controller, browser, start_time);
 }
 
 // static
@@ -205,11 +220,27 @@
   metrics_.OnCastModeSelected();
 }
 
+// static
+void CastDialogView::ShowDialog(views::View* anchor_view,
+                                views::BubbleBorder::Arrow anchor_position,
+                                CastDialogController* controller,
+                                Browser* browser,
+                                const base::Time& start_time) {
+  DCHECK(!instance_);
+  DCHECK(!start_time.is_null());
+  instance_ = new CastDialogView(anchor_view, anchor_position, controller,
+                                 browser, start_time);
+  views::Widget* widget =
+      views::BubbleDialogDelegateView::CreateBubble(instance_);
+  widget->Show();
+}
+
 CastDialogView::CastDialogView(views::View* anchor_view,
+                               views::BubbleBorder::Arrow anchor_position,
                                CastDialogController* controller,
                                Browser* browser,
                                const base::Time& start_time)
-    : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
+    : BubbleDialogDelegateView(anchor_view, anchor_position),
       selected_source_(kTabSource),
       controller_(controller),
       browser_(browser),
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view.h b/chrome/browser/ui/views/media_router/cast_dialog_view.h
index 0750d19..a2dfa45 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view.h
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view.h
@@ -12,6 +12,7 @@
 #include "chrome/browser/ui/media_router/cast_dialog_controller.h"
 #include "chrome/browser/ui/views/media_router/cast_dialog_metrics.h"
 #include "ui/base/models/simple_menu_model.h"
+#include "ui/views/bubble/bubble_border.h"
 #include "ui/views/bubble/bubble_dialog_delegate.h"
 #include "ui/views/controls/button/button.h"
 #include "ui/views/controls/menu/menu_runner.h"
@@ -35,12 +36,17 @@
                        public CastDialogController::Observer,
                        public ui::SimpleMenuModel::Delegate {
  public:
-  // Instantiates and shows the singleton dialog. The dialog must not be
-  // currently shown.
-  static void ShowDialog(views::View* anchor_view,
-                         CastDialogController* controller,
-                         Browser* browser,
-                         const base::Time& start_time);
+  // Shows the singleton dialog anchored to the Cast toolbar icon. Requires that
+  // BrowserActionsContainer exists for |browser|.
+  static void ShowDialogWithToolbarAction(CastDialogController* controller,
+                                          Browser* browser,
+                                          const base::Time& start_time);
+
+  // Shows the singleton dialog anchored to the top-center of the browser
+  // window.
+  static void ShowDialogTopCentered(CastDialogController* controller,
+                                    Browser* browser,
+                                    const base::Time& start_time);
 
   // No-op if the dialog is currently not shown.
   static void HideDialog();
@@ -98,7 +104,19 @@
   }
 
  private:
+  friend class CastDialogViewTest;
+  FRIEND_TEST_ALL_PREFIXES(CastDialogViewTest, ShowAndHideDialog);
+
+  // Instantiates and shows the singleton dialog. The dialog must not be
+  // currently shown.
+  static void ShowDialog(views::View* anchor_view,
+                         views::BubbleBorder::Arrow anchor_position,
+                         CastDialogController* controller,
+                         Browser* browser,
+                         const base::Time& start_time);
+
   CastDialogView(views::View* anchor_view,
+                 views::BubbleBorder::Arrow anchor_position,
                  CastDialogController* controller,
                  Browser* browser,
                  const base::Time& start_time);
diff --git a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
index 222cf69..6f1de19 100644
--- a/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
+++ b/chrome/browser/ui/views/media_router/cast_dialog_view_unittest.cc
@@ -24,6 +24,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/l10n/l10n_util.h"
 #include "ui/events/base_event_utils.h"
+#include "ui/views/bubble/bubble_border.h"
 #include "ui/views/controls/scroll_view.h"
 #include "ui/views/widget/widget.h"
 #include "ui/views/window/dialog_client_view.h"
@@ -102,7 +103,8 @@
             WithArg<0>(Invoke([this](CastDialogController::Observer* observer) {
               dialog_ = static_cast<CastDialogView*>(observer);
             })));
-    CastDialogView::ShowDialog(anchor_widget_->GetContentsView(), &controller_,
+    CastDialogView::ShowDialog(anchor_widget_->GetContentsView(),
+                               views::BubbleBorder::TOP_RIGHT, &controller_,
                                nullptr, base::Time::Now());
 
     dialog_->OnModelUpdated(model);
@@ -149,7 +151,8 @@
   EXPECT_EQ(nullptr, CastDialogView::GetCurrentDialogWidget());
 
   EXPECT_CALL(controller_, AddObserver(_));
-  CastDialogView::ShowDialog(anchor_widget_->GetContentsView(), &controller_,
+  CastDialogView::ShowDialog(anchor_widget_->GetContentsView(),
+                             views::BubbleBorder::TOP_RIGHT, &controller_,
                              nullptr, base::Time::Now());
   base::RunLoop().RunUntilIdle();
   EXPECT_TRUE(CastDialogView::IsShowing());
diff --git a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
index b69ff1db2..7db2704 100644
--- a/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
+++ b/chrome/browser/ui/views/media_router/media_router_dialog_controller_views.cc
@@ -9,7 +9,6 @@
 #include "build/build_config.h"
 #include "chrome/browser/media/router/media_router_feature.h"
 #include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/toolbar/component_toolbar_actions_factory.h"
 #include "chrome/browser/ui/toolbar/media_router_action.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
 #include "chrome/browser/ui/views/media_router/cast_dialog_view.h"
@@ -57,22 +56,17 @@
   Browser* browser = chrome::FindBrowserWithWebContents(initiator());
   if (!browser)
     return;
-  BrowserActionsContainer* browser_actions =
-      BrowserView::GetBrowserViewForBrowser(browser)
-          ->toolbar()
-          ->browser_actions();
-  // |browser_actions| may be null in toolbar-less browser windows.
-  // TODO(takumif): Show the dialog at the top-middle of the window if the
-  // toolbar is missing.
-  if (!browser_actions)
-    return;
-  views::View* action_view = browser_actions->GetViewForId(
-      ComponentToolbarActionsFactory::kMediaRouterActionId);
 
   ui_ = std::make_unique<MediaRouterViewsUI>();
   InitializeMediaRouterUI(ui_.get());
-  CastDialogView::ShowDialog(action_view, ui_.get(), browser,
-                             dialog_creation_time);
+  BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser);
+  if (browser_view->toolbar()->browser_actions()) {
+    CastDialogView::ShowDialogWithToolbarAction(ui_.get(), browser,
+                                                dialog_creation_time);
+  } else {
+    CastDialogView::ShowDialogTopCentered(ui_.get(), browser,
+                                          dialog_creation_time);
+  }
   CastDialogView::GetCurrentDialogWidget()->AddObserver(this);
 }
 
diff --git a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
index 652c528be..5f09d7f 100644
--- a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
+++ b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.cc
@@ -29,6 +29,35 @@
 // Value from the spec controlling appearance of the shadow.
 constexpr int kElevation = 16;
 
+#if !defined(USE_AURA)
+
+struct WidgetEventPair {
+  views::Widget* widget;
+  ui::MouseEvent event;
+};
+
+WidgetEventPair GetParentWidgetAndEvent(views::View* this_view,
+                                        const ui::MouseEvent* this_event) {
+  views::Widget* this_widget = this_view->GetWidget();
+  views::Widget* parent_widget =
+      this_widget->GetTopLevelWidgetForNativeView(this_widget->GetNativeView());
+  DCHECK_NE(this_widget, parent_widget);
+  if (!parent_widget)
+    return {nullptr, *this_event};
+
+  gfx::Point event_location = this_event->location();
+  views::View::ConvertPointToScreen(this_view, &event_location);
+  views::View::ConvertPointFromScreen(parent_widget->GetRootView(),
+                                      &event_location);
+
+  ui::MouseEvent parent_event(*this_event);
+  parent_event.set_location(event_location);
+
+  return {parent_widget, parent_event};
+}
+
+#endif  // !USE_AURA
+
 // View at the top of the frame which paints transparent pixels to make a hole
 // so that the location bar shows through.
 class TopBackgroundView : public views::View {
@@ -46,40 +75,27 @@
   // done with an event targeter set up in
   // RoundedOmniboxResultsFrame::AddedToWidget(), below.
  private:
-  struct OmniboxWidgetEventPair {
-    views::Widget* widget;
-    ui::MouseEvent event;
-  };
-
-  OmniboxWidgetEventPair GetOmniboxWidgetAndEvent(const ui::MouseEvent* event) {
-    views::Widget* omnibox_widget = GetWidget()->GetTopLevelWidgetForNativeView(
-        GetWidget()->GetNativeView());
-    DCHECK_NE(GetWidget(), omnibox_widget);
-
-    gfx::Point event_location = event->location();
-    views::View::ConvertPointToScreen(this, &event_location);
-    views::View::ConvertPointFromScreen(omnibox_widget->GetRootView(),
-                                        &event_location);
-
-    ui::MouseEvent omnibox_event(*event);
-    omnibox_event.set_location(event_location);
-
-    return {omnibox_widget, omnibox_event};
+  // Note that mouse moved events can be dispatched through OnMouseEvent, but
+  // RootView directly calls OnMouseMoved as well, so override OnMouseMoved as
+  // well to catch 'em all.
+  void OnMouseMoved(const ui::MouseEvent& event) override {
+    auto pair = GetParentWidgetAndEvent(this, &event);
+    pair.widget->OnMouseEvent(&pair.event);
   }
 
   void OnMouseEvent(ui::MouseEvent* event) override {
-    auto pair = GetOmniboxWidgetAndEvent(event);
+    auto pair = GetParentWidgetAndEvent(this, event);
     pair.widget->OnMouseEvent(&pair.event);
   }
 
   gfx::NativeCursor GetCursor(const ui::MouseEvent& event) override {
-    auto pair = GetOmniboxWidgetAndEvent(&event);
+    auto pair = GetParentWidgetAndEvent(this, &event);
     views::View* omnibox_view =
         pair.widget->GetRootView()->GetEventHandlerForPoint(
             pair.event.location());
     return omnibox_view->GetCursor(pair.event);
   }
-#endif  // !AURA
+#endif  // !USE_AURA
 };
 
 // Insets used to position |contents_| within |contents_host_|.
@@ -200,5 +216,26 @@
   auto results_targeter = std::make_unique<aura::WindowTargeter>();
   results_targeter->SetInsets(GetInsets() + GetContentInsets());
   GetWidget()->GetNativeWindow()->SetEventTargeter(std::move(results_targeter));
-#endif
+#endif  // USE_AURA
 }
+
+// Note that these two functions are only called for the shadow area, as both
+// the omnibox proper and the results list have their own mouse handling.
+#if !defined(USE_AURA)
+
+// Note that mouse moved events can be dispatched through OnMouseEvent, but
+// RootView directly calls OnMouseMoved as well, so override OnMouseMoved as
+// well to catch 'em all.
+void RoundedOmniboxResultsFrame::OnMouseMoved(const ui::MouseEvent& event) {
+  auto pair = GetParentWidgetAndEvent(this, &event);
+  if (pair.widget)
+    pair.widget->OnMouseEvent(&pair.event);
+}
+
+void RoundedOmniboxResultsFrame::OnMouseEvent(ui::MouseEvent* event) {
+  auto pair = GetParentWidgetAndEvent(this, event);
+  if (pair.widget)
+    pair.widget->OnMouseEvent(&pair.event);
+}
+
+#endif  // !USE_AURA
diff --git a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.h b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.h
index f8e9fc4..1ba3a46 100644
--- a/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.h
+++ b/chrome/browser/ui/views/omnibox/rounded_omnibox_results_frame.h
@@ -36,6 +36,10 @@
   const char* GetClassName() const override;
   void Layout() override;
   void AddedToWidget() override;
+#if !defined(USE_AURA)
+  void OnMouseMoved(const ui::MouseEvent& event) override;
+  void OnMouseEvent(ui::MouseEvent* event) override;
+#endif  // !USE_AURA
 
  private:
   std::unique_ptr<ui::LayerOwner> contents_mask_;
diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.cc b/chrome/browser/ui/views/overlay/overlay_window_views.cc
index 234a8f7..546f9af 100644
--- a/chrome/browser/ui/views/overlay/overlay_window_views.cc
+++ b/chrome/browser/ui/views/overlay/overlay_window_views.cc
@@ -493,6 +493,22 @@
   // does not trigger this function. http://crbug.com/819673
 }
 
+void OverlayWindowViews::OnKeyEvent(ui::KeyEvent* event) {
+  if (event->type() != ui::ET_KEY_RELEASED)
+    return;
+
+  if (event->key_code() == ui::VKEY_RETURN ||
+      event->key_code() == ui::VKEY_SPACE) {
+    if (play_pause_controls_view_->HasFocus()) {
+      TogglePlayPause();
+    } else if (close_controls_view_->HasFocus()) {
+      controller_->Close(true /* should_pause_video */);
+    }
+
+    event->SetHandled();
+  }
+}
+
 void OverlayWindowViews::OnMouseEvent(ui::MouseEvent* event) {
   switch (event->type()) {
     // Only show the media controls when the mouse is hovering over the window.
diff --git a/chrome/browser/ui/views/overlay/overlay_window_views.h b/chrome/browser/ui/views/overlay/overlay_window_views.h
index 54b1e1ec..ca28d91 100644
--- a/chrome/browser/ui/views/overlay/overlay_window_views.h
+++ b/chrome/browser/ui/views/overlay/overlay_window_views.h
@@ -42,6 +42,7 @@
   gfx::Size GetMinimumSize() const override;
   gfx::Size GetMaximumSize() const override;
   void OnNativeWidgetWorkspaceChanged() override;
+  void OnKeyEvent(ui::KeyEvent* event) override;
   void OnMouseEvent(ui::MouseEvent* event) override;
   void OnGestureEvent(ui::GestureEvent* event) override;
 
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.h b/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.h
new file mode 100644
index 0000000..edaf7d1
--- /dev/null
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.h
@@ -0,0 +1,21 @@
+// 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.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_POLICY_ENTERPRISE_STARTUP_DIALOG_MAC_UTIL_H_
+#define CHROME_BROWSER_UI_VIEWS_POLICY_ENTERPRISE_STARTUP_DIALOG_MAC_UTIL_H_
+
+#import "ui/gfx/native_widget_types.h"
+
+namespace policy {
+
+// Run the modal dialog loop. Function is blocked until |StopModal| is called.
+void StartModal(gfx::NativeWindow dialog);
+
+// Stop the modal dialog loop. |StartModal| will return after this function is
+// called.
+void StopModal();
+
+}  // namespace policy
+
+#endif  // CHROME_BROWSER_UI_VIEWS_POLICY_ENTERPRISE_STARTUP_DIALOG_MAC_UTIL_H_
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.mm b/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.mm
new file mode 100644
index 0000000..7ec7336
--- /dev/null
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.mm
@@ -0,0 +1,18 @@
+// 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.
+
+#import "chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.h"
+
+#include <Cocoa/Cocoa.h>
+
+namespace policy {
+
+void StartModal(gfx::NativeWindow dialog) {
+  [NSApp runModalForWindow:dialog];
+}
+void StopModal() {
+  [NSApp stopModal];
+}
+
+}  // namespace policy
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
index 9f25e50c..6e20a16 100644
--- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.cc
@@ -10,6 +10,7 @@
 #include "base/i18n/message_formatter.h"
 #include "base/strings/string16.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/ui/views/harmony/chrome_layout_provider.h"
 #include "chrome/grit/chromium_strings.h"
@@ -28,6 +29,11 @@
 #include "ui/views/layout/grid_layout.h"
 #include "ui/views/window/dialog_client_view.h"
 
+#if defined(OS_MACOSX)
+#include "base/message_loop/message_loop_current.h"
+#include "chrome/browser/ui/views/policy/enterprise_startup_dialog_mac_util.h"
+#endif
+
 namespace policy {
 namespace {
 
@@ -59,10 +65,18 @@
 
 EnterpriseStartupDialogView::EnterpriseStartupDialogView(
     EnterpriseStartupDialog::DialogResultCallback callback)
-    : callback_(std::move(callback)), can_show_browser_window_(false) {
+    : callback_(std::move(callback)),
+      can_show_browser_window_(false),
+      weak_factory_(this) {
   SetBorder(views::CreateEmptyBorder(GetDialogInsets()));
   CreateDialogWidget(this, nullptr, nullptr)->Show();
+#if defined(OS_MACOSX)
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(&EnterpriseStartupDialogView::StartModalDialog,
+                                weak_factory_.GetWeakPtr()));
+#endif
 }
+
 EnterpriseStartupDialogView::~EnterpriseStartupDialogView() {}
 
 void EnterpriseStartupDialogView::DisplayLaunchingInformationWithThrobber(
@@ -106,12 +120,32 @@
   GetWidget()->RemoveObserver(observer);
 }
 
+void EnterpriseStartupDialogView::StartModalDialog() {
+#if defined(OS_MACOSX)
+  base::MessageLoopCurrent::ScopedNestableTaskAllower allow_nested;
+  StartModal(GetWidget()->GetNativeWindow());
+#endif
+}
+
+void EnterpriseStartupDialogView::RunDialogCallback(bool was_accepted) {
+#if defined(OS_MACOSX)
+  // On mac, we need to stop the modal message loop before returning the result
+  // to the caller who controls its own run loop.
+  StopModal();
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(std::move(callback_), was_accepted,
+                                can_show_browser_window_));
+#else
+  std::move(callback_).Run(was_accepted, can_show_browser_window_);
+#endif
+}
+
 bool EnterpriseStartupDialogView::Accept() {
-  std::move(callback_).Run(true, can_show_browser_window_);
+  RunDialogCallback(true);
   return true;
 }
 bool EnterpriseStartupDialogView::Cancel() {
-  std::move(callback_).Run(false, can_show_browser_window_);
+  RunDialogCallback(false);
   return true;
 }
 
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.h b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.h
index 38c0503..983eb6d56 100644
--- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.h
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view.h
@@ -33,6 +33,13 @@
   void RemoveWidgetObserver(views::WidgetObserver* observer);
 
  private:
+  // Run the dialog modally for MacOSX.
+  void StartModalDialog();
+
+  // Call the dialog callback. |was_accepted| is true if the dialog is confirmed
+  // by user. Otherwise it's false.
+  void RunDialogCallback(bool was_accepted);
+
   // override views::DialogDelegateView
   bool Accept() override;
   bool Cancel() override;
@@ -55,6 +62,8 @@
   EnterpriseStartupDialog::DialogResultCallback callback_;
   bool can_show_browser_window_;
 
+  base::WeakPtrFactory<EnterpriseStartupDialogView> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(EnterpriseStartupDialogView);
 };
 
diff --git a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
index a9c452f..36bb07d 100644
--- a/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
+++ b/chrome/browser/ui/views/policy/enterprise_startup_dialog_view_browsertest.cc
@@ -6,6 +6,7 @@
 
 #include "base/bind.h"
 #include "base/strings/utf_string_conversions.h"
+#include "build/build_config.h"
 #include "chrome/browser/ui/test/test_browser_dialog.h"
 
 namespace policy {
@@ -39,6 +40,16 @@
     }
   }
 
+#if defined(OS_MACOSX)
+  // On mac, we need to wait until the dialog launched modally before closing
+  // it.
+  void DismissUi() override {
+    base::ThreadTaskRunnerHandle::Get()->PostTask(
+        FROM_HERE, base::BindOnce(&EnterpriseStartupDialogView::CloseDialog,
+                                  base::Unretained(dialog)));
+  }
+#endif
+
  private:
   EnterpriseStartupDialogView* dialog;
 
diff --git a/chrome/browser/ui/views/profiles/profile_chooser_view.cc b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
index bf21e55..909d5b1 100644
--- a/chrome/browser/ui/views/profiles/profile_chooser_view.cc
+++ b/chrome/browser/ui/views/profiles/profile_chooser_view.cc
@@ -1266,8 +1266,7 @@
   }
   for (size_t i : ordered_item_indices) {
     const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
-    if (!item.active ||
-        (dice_enabled_ && avatar_menu->GetNumberOfItems() >= 2)) {
+    if (!item.active) {
       gfx::Image image = profiles::GetSizedAvatarIcon(
           item.icon, true, kIconSize, kIconSize, profiles::SHAPE_CIRCLE);
       views::LabelButton* button =
diff --git a/chrome/browser/ui/views/ssl_client_certificate_selector.cc b/chrome/browser/ui/views/ssl_client_certificate_selector.cc
index d73a0651..00b435fc 100644
--- a/chrome/browser/ui/views/ssl_client_certificate_selector.cc
+++ b/chrome/browser/ui/views/ssl_client_certificate_selector.cc
@@ -142,14 +142,11 @@
     net::ClientCertIdentityList client_certs,
     std::unique_ptr<content::ClientCertificateDelegate> delegate) {
 #if defined(OS_MACOSX)
-  // TODO(ellyjones): Always use the Cocoa cert selector, even in Views builds.
-  // See also https://crbug.com/804950.
-  if (views_mode_controller::IsViewsBrowserCocoa()) {
-    return ShowSSLClientCertificateSelectorCocoa(contents, cert_request_info,
-                                                 std::move(client_certs),
-                                                 std::move(delegate));
-  }
-#endif
+  return ShowSSLClientCertificateSelectorCocoa(contents, cert_request_info,
+                                               std::move(client_certs),
+                                               std::move(delegate));
+#else   // defined(OS_MACOSX)
+
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
 
   // Not all WebContentses can show modal dialogs.
@@ -164,6 +161,7 @@
       std::move(delegate));
   selector->Init();
   selector->Show();
+#endif  // defined(OS_MACOSX)
 }
 
 }  // namespace chrome
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc
index e62cd979..723900e 100644
--- a/chrome/browser/ui/views/tabs/tab.cc
+++ b/chrome/browser/ui/views/tabs/tab.cc
@@ -272,7 +272,7 @@
   // Bottom left.
   left_path.arcTo(radius, radius, 0, SkPath::kSmall_ArcSize,
                   SkPath::kCW_Direction, left + corner_gap, bottom);
-  left_path.rLineTo(0, bottom_extension);
+  left_path.lineTo(left + corner_gap, extended_bottom);
 
   // Bottom/top edges of left side.
   left_path.lineTo(right, extended_bottom);
@@ -1702,14 +1702,11 @@
     button_color_ = new_button_color;
     title_->SetEnabledColor(title_color);
     alert_indicator_button_->OnParentTabButtonColorChanged();
-    if (!MD::IsTouchOptimizedUiEnabled()) {
-      close_button_->SetTabColor(button_color_,
-                                 color_utils::IsDark(theme_provider->GetColor(
-                                     ThemeProperties::COLOR_TOOLBAR)));
-    }
   }
-  if (MD::IsTouchOptimizedUiEnabled())
-    close_button_->ActiveStateChanged(this);
+  SkColor icon_color = MD::IsNewerMaterialUi()
+                           ? GetCloseTabButtonColor(views::Button::STATE_NORMAL)
+                           : button_color_;
+  close_button_->SetIconColors(icon_color);
 }
 
 Tab::BackgroundCache::BackgroundCache() = default;
diff --git a/chrome/browser/ui/views/tabs/tab_close_button.cc b/chrome/browser/ui/views/tabs/tab_close_button.cc
index 405b12a..336ec40 100644
--- a/chrome/browser/ui/views/tabs/tab_close_button.cc
+++ b/chrome/browser/ui/views/tabs/tab_close_button.cc
@@ -58,26 +58,8 @@
   return gfx::GetDefaultSizeOfVectorIcon(close_icon);
 }
 
-void TabCloseButton::SetTabColor(SkColor color, bool tab_color_is_dark) {
-  SkColor hover_color = SkColorSetRGB(0xDB, 0x44, 0x37);
-  SkColor pressed_color = SkColorSetRGB(0xA8, 0x35, 0x2A);
-  SkColor icon_color = SK_ColorWHITE;
-  if (MD::IsRefreshUi()) {
-    hover_color = tab_color_is_dark ? gfx::kGoogleGrey700 : gfx::kGoogleGrey200;
-    pressed_color =
-        tab_color_is_dark ? gfx::kGoogleGrey600 : gfx::kGoogleGrey300;
-    icon_color = color;
-  }
-  GenerateImages(false, color, icon_color, hover_color, pressed_color);
-}
-
-void TabCloseButton::ActiveStateChanged(const Tab* parent_tab) {
-  SkColor icon_color =
-      parent_tab->GetCloseTabButtonColor(views::Button::STATE_NORMAL);
-  GenerateImages(
-      true, icon_color, icon_color,
-      parent_tab->GetCloseTabButtonColor(views::Button::STATE_HOVERED),
-      parent_tab->GetCloseTabButtonColor(views::Button::STATE_PRESSED));
+void TabCloseButton::SetIconColors(SkColor color) {
+  GenerateImages(color, MD::IsNewerMaterialUi() ? color : SK_ColorWHITE);
 }
 
 views::View* TabCloseButton::GetTooltipHandlerForPoint(
@@ -131,6 +113,20 @@
 
 void TabCloseButton::PaintButtonContents(gfx::Canvas* canvas) {
   canvas->SaveLayerAlpha(GetOpacity());
+  ButtonState button_state = state();
+  if (button_state != views::Button::STATE_NORMAL) {
+    // Draw the background circle highlight.
+    gfx::Path path;
+    SkColor background_color =
+        static_cast<Tab*>(parent())->GetCloseTabButtonColor(button_state);
+    gfx::Point center = GetContentsBounds().CenterPoint();
+    path.setFillType(SkPath::kEvenOdd_FillType);
+    path.addCircle(center.x(), center.y(), GetWidth() / 2);
+    cc::PaintFlags flags;
+    flags.setAntiAlias(true);
+    flags.setColor(background_color);
+    canvas->DrawPath(path, flags);
+  }
   views::ImageButton::PaintButtonContents(canvas);
   canvas->Restore();
 }
@@ -178,34 +174,18 @@
                                      SK_AlphaOPAQUE);
 }
 
-void TabCloseButton::GenerateImages(bool is_touch,
-                                    SkColor normal_icon_color,
-                                    SkColor hover_pressed_icon_color,
-                                    SkColor hover_highlight_color,
-                                    SkColor pressed_highlight_color) {
-  const gfx::VectorIcon& button_icon =
-      is_touch ? kTabCloseButtonTouchIcon : kTabCloseNormalIcon;
-  const gfx::VectorIcon& highlight = is_touch
-                                         ? kTabCloseButtonTouchHighlightIcon
-                                         : kTabCloseButtonHighlightIcon;
-  const gfx::ImageSkia& normal =
+void TabCloseButton::GenerateImages(SkColor normal_icon_color,
+                                    SkColor hover_pressed_icon_color) {
+  const gfx::VectorIcon& button_icon = MD::IsTouchOptimizedUiEnabled()
+                                           ? kTabCloseButtonTouchIcon
+                                           : kTabCloseNormalIcon;
+  const gfx::ImageSkia normal =
       gfx::CreateVectorIcon(button_icon, normal_icon_color);
-  const gfx::ImageSkia& hover_pressed =
+  const gfx::ImageSkia hover_pressed =
       normal_icon_color != hover_pressed_icon_color
           ? gfx::CreateVectorIcon(button_icon, hover_pressed_icon_color)
           : normal;
-
-  const gfx::ImageSkia& hover_highlight =
-      gfx::CreateVectorIcon(highlight, hover_highlight_color);
-  const gfx::ImageSkia& pressed_highlight =
-      gfx::CreateVectorIcon(highlight, pressed_highlight_color);
-  const gfx::ImageSkia& hover =
-      gfx::ImageSkiaOperations::CreateSuperimposedImage(hover_highlight,
-                                                        hover_pressed);
-  const gfx::ImageSkia& pressed =
-      gfx::ImageSkiaOperations::CreateSuperimposedImage(pressed_highlight,
-                                                        hover_pressed);
   SetImage(views::Button::STATE_NORMAL, normal);
-  SetImage(views::Button::STATE_HOVERED, hover);
-  SetImage(views::Button::STATE_PRESSED, pressed);
+  SetImage(views::Button::STATE_HOVERED, hover_pressed);
+  SetImage(views::Button::STATE_PRESSED, hover_pressed);
 }
diff --git a/chrome/browser/ui/views/tabs/tab_close_button.h b/chrome/browser/ui/views/tabs/tab_close_button.h
index d94999f..3124f16 100644
--- a/chrome/browser/ui/views/tabs/tab_close_button.h
+++ b/chrome/browser/ui/views/tabs/tab_close_button.h
@@ -9,8 +9,6 @@
 #include "ui/views/controls/button/image_button.h"
 #include "ui/views/masked_targeter_delegate.h"
 
-class Tab;
-
 // This is a Button subclass that shows the tab closed icon.
 //
 // In addition to setup for the icon, it forwards middle clicks to the parent
@@ -35,13 +33,8 @@
   // This function must be called before the tab is painted so it knows what
   // color to use. It must also be called when the background color of the tab
   // changes (this class does not track tab activation state), and when the
-  // theme changes. |tab_color_is_dark| will be true if the tab is a dark
-  // color. This will NOT be called when in newer material ui mode.
-  void SetTabColor(SkColor color, bool tab_color_is_dark);
-
-  // This is called whenever the |parent_tab| changes its active state. This
-  // is only called when in newer material ui mode.
-  void ActiveStateChanged(const Tab* parent_tab);
+  // theme changes.
+  void SetIconColors(SkColor color);
 
   // views::View:
   View* GetTooltipHandlerForPoint(const gfx::Point& point) override;
@@ -64,11 +57,8 @@
   // the hover animation on the parent tab.
   SkAlpha GetOpacity();
 
-  void GenerateImages(bool is_touch,
-                      SkColor normal_icon_color,
-                      SkColor hover_pressed_icon_color,
-                      SkColor hover_highlight_color,
-                      SkColor pressed_highlight_color);
+  void GenerateImages(SkColor normal_icon_color,
+                      SkColor hover_pressed_icon_color);
 
   MouseEventCallback mouse_event_callback_;
 
diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
index ab3d2d2..fb325cf 100644
--- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
+++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
@@ -15,6 +15,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "build/build_config.h"
 #include "chrome/browser/about_flags.h"
+#include "chrome/browser/accessibility/accessibility_ui.h"
 #include "chrome/browser/devtools/devtools_ui_bindings.h"
 #include "chrome/browser/dom_distiller/dom_distiller_service_factory.h"
 #include "chrome/browser/engagement/site_engagement_service.h"
@@ -349,6 +350,8 @@
   // All platform builds of Chrome will need to have a cloud printing
   // dialog as backup.  It's just that on Chrome OS, it's the only
   // print dialog.
+  if (url.host_piece() == chrome::kChromeUIAccessibilityHost)
+    return &NewWebUI<AccessibilityUI>;
   if (url.host_piece() == chrome::kChromeUIBluetoothInternalsHost)
     return &NewWebUI<BluetoothInternalsUI>;
   if (url.host_piece() == chrome::kChromeUIComponentsHost)
diff --git a/chrome/browser/ui/webui/extensions/extensions_ui.cc b/chrome/browser/ui/webui/extensions/extensions_ui.cc
index 288f145..7231b367 100644
--- a/chrome/browser/ui/webui/extensions/extensions_ui.cc
+++ b/chrome/browser/ui/webui/extensions/extensions_ui.cc
@@ -158,13 +158,12 @@
     {"openChromeWebStore", IDS_MD_EXTENSIONS_SIDEBAR_OPEN_CHROME_WEB_STORE},
     {"keyboardShortcuts", IDS_MD_EXTENSIONS_SIDEBAR_KEYBOARD_SHORTCUTS},
     {"incognitoInfoWarning", IDS_EXTENSIONS_INCOGNITO_WARNING},
-    {"itemHostPermissionsHeading",
-     IDS_MD_EXTENSIONS_ITEM_HOST_PERMISSIONS_HEADING},
-    {"itemHostAccessOnClick", IDS_MD_EXTENSIONS_HOST_ACCESS_ON_CLICK},
-    {"itemHostAccessOnSpecificSites",
+    {"hostPermissionsHeading", IDS_MD_EXTENSIONS_ITEM_HOST_PERMISSIONS_HEADING},
+    {"hostAccessOnClick", IDS_MD_EXTENSIONS_HOST_ACCESS_ON_CLICK},
+    {"hostAccessOnSpecificSites",
      IDS_MD_EXTENSIONS_HOST_ACCESS_ON_SPECIFIC_SITES},
-    {"itemHostAccessOnAllSites", IDS_MD_EXTENSIONS_HOST_ACCESS_ON_ALL_SITES},
-    {"itemAllowedHosts", IDS_EXTENSIONS_ITEM_ALLOWED_HOSTS},
+    {"hostAccessOnAllSites", IDS_MD_EXTENSIONS_HOST_ACCESS_ON_ALL_SITES},
+    {"hostAllowedHosts", IDS_EXTENSIONS_ITEM_ALLOWED_HOSTS},
     {"itemId", IDS_MD_EXTENSIONS_ITEM_ID},
     {"itemInspectViews", IDS_MD_EXTENSIONS_ITEM_INSPECT_VIEWS},
     // NOTE: This text reads "<n> more". It's possible that it should be using
diff --git a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
index 1a3824c..20b842fa 100644
--- a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
+++ b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.cc
@@ -57,14 +57,20 @@
 void AndroidAppsHandler::OnAppRegistered(
     const std::string& app_id,
     const ArcAppListPrefs::AppInfo& app_info) {
-  OnAppChanged(app_id);
+  HandleAppChanged(app_id);
+}
+
+void AndroidAppsHandler::OnAppStatesChanged(
+    const std::string& app_id,
+    const ArcAppListPrefs::AppInfo& app_info) {
+  HandleAppChanged(app_id);
 }
 
 void AndroidAppsHandler::OnAppRemoved(const std::string& app_id) {
-  OnAppChanged(app_id);
+  HandleAppChanged(app_id);
 }
 
-void AndroidAppsHandler::OnAppChanged(const std::string& app_id) {
+void AndroidAppsHandler::HandleAppChanged(const std::string& app_id) {
   if (app_id != arc::kSettingsAppId)
     return;
   SendAndroidAppsInfo();
diff --git a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
index 94d6e16..cb89bc3 100644
--- a/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
+++ b/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h
@@ -37,17 +37,19 @@
   void OnJavascriptDisallowed() override;
 
   // ArcAppListPrefs::Observer
-  void OnAppRemoved(const std::string& app_id) override;
   void OnAppRegistered(const std::string& app_id,
                        const ArcAppListPrefs::AppInfo& app_info) override;
+  void OnAppStatesChanged(const std::string& app_id,
+                          const ArcAppListPrefs::AppInfo& app_info) override;
+  void OnAppRemoved(const std::string& app_id) override;
 
   // arc::ArcSessionManager::Observer:
   void OnArcPlayStoreEnabledChanged(bool enabled) override;
 
  private:
   std::unique_ptr<base::DictionaryValue> BuildAndroidAppsInfo();
-  void OnAppChanged(const std::string& app_id);
   void HandleRequestAndroidAppsInfo(const base::ListValue* args);
+  void HandleAppChanged(const std::string& app_id);
   void SendAndroidAppsInfo();
   void ShowAndroidAppsSettings(const base::ListValue* args);
   void ShowAndroidManageAppLinks(const base::ListValue* args);
diff --git a/chrome/browser/vr/BUILD.gn b/chrome/browser/vr/BUILD.gn
index ac40b82..e0a40bc 100644
--- a/chrome/browser/vr/BUILD.gn
+++ b/chrome/browser/vr/BUILD.gn
@@ -20,6 +20,18 @@
   flags = [ "USE_VR_ASSETS_COMPONENT=$use_vr_assets_component" ]
 }
 
+source_set("vr_gl_utils") {
+  sources = [
+    "vr_gl_util.cc",
+    "vr_gl_util.h",
+  ]
+
+  deps = [
+    "//skia",
+    "//ui/gl/init",
+  ]
+}
+
 component("vr_common") {
   sources = [
     "animation.cc",
@@ -244,8 +256,8 @@
     "ui_unsupported_mode.h",
     "vr_export.h",
     "vr_features.h",
-    "vr_gl_util.cc",
-    "vr_gl_util.h",
+    "vr_geometry_util.cc",
+    "vr_geometry_util.h",
   ]
 
   public_deps = [
@@ -254,6 +266,7 @@
 
   deps = [
     ":vr_build_features",
+    ":vr_gl_utils",
     "//base",
     "//cc/animation",
     "//cc/paint",
@@ -330,7 +343,7 @@
     "ui_input_manager_unittest.cc",
     "ui_scene_unittest.cc",
     "ui_unittest.cc",
-    "vr_gl_util_unittest.cc",
+    "vr_geometry_util_unittest.cc",
   ]
 
   # TODO(mthiesse, crbug.com/769373): The dependency on device/vr:fakes requires
diff --git a/chrome/browser/vr/elements/content_element.cc b/chrome/browser/vr/elements/content_element.cc
index 01bbf156..bcb9f130 100644
--- a/chrome/browser/vr/elements/content_element.cc
+++ b/chrome/browser/vr/elements/content_element.cc
@@ -8,7 +8,7 @@
 #include "chrome/browser/vr/model/text_input_info.h"
 #include "chrome/browser/vr/text_input_delegate.h"
 #include "chrome/browser/vr/ui_scene_constants.h"
-#include "chrome/browser/vr/vr_gl_util.h"
+#include "chrome/browser/vr/vr_geometry_util.h"
 #include "ui/gfx/geometry/rect_f.h"
 
 namespace vr {
diff --git a/chrome/browser/vr/gesture_detector.cc b/chrome/browser/vr/gesture_detector.cc
index 2bf766ea..27de7107 100644
--- a/chrome/browser/vr/gesture_detector.cc
+++ b/chrome/browser/vr/gesture_detector.cc
@@ -33,6 +33,11 @@
 // Horizontal distance from the border to the center of slop.
 constexpr float kSlopHorizontal = 0.15f;
 
+// Exceeding pressing the appbutton for longer than this threshold will result
+// in a long press.
+constexpr base::TimeDelta kLongPressThreshold =
+    base::TimeDelta::FromMilliseconds(900);
+
 struct TouchPoint {
   gfx::Vector2dF position;
   base::TimeTicks timestamp;
@@ -45,7 +50,7 @@
 }
 GestureDetector::~GestureDetector() = default;
 
-std::unique_ptr<InputEventList> GestureDetector::DetectGestures(
+InputEventList GestureDetector::DetectGestures(
     const PlatformController& controller,
     base::TimeTicks current_timestamp) {
   touch_position_changed_ = UpdateCurrentTouchPoint(controller);
@@ -59,7 +64,8 @@
   last_touching_state_ = is_touching_trackpad_;
   is_touching_trackpad_ = controller.IsTouchingTrackpad();
 
-  auto gesture_list = std::make_unique<InputEventList>();
+  InputEventList gesture_list;
+  DetectMenuButtonGestures(&gesture_list, controller, current_timestamp);
   auto gesture = GetGestureFromTouchInfo(touch_point);
 
   if (!gesture)
@@ -69,11 +75,41 @@
     Reset();
 
   if (gesture->type() != InputEvent::kTypeUndefined)
-    gesture_list->push_back(std::move(gesture));
+    gesture_list.push_back(std::move(gesture));
 
   return gesture_list;
 }
 
+void GestureDetector::DetectMenuButtonGestures(
+    InputEventList* event_list,
+    const PlatformController& controller,
+    base::TimeTicks current_timestamp) {
+  std::unique_ptr<InputEvent> event;
+  if (!menu_button_pressed_ &&
+      controller.IsButtonDown(PlatformController::kButtonMenu)) {
+    menu_button_pressed_ = true;
+    menu_button_down_timestamp_ = current_timestamp;
+    menu_button_long_pressed_ = false;
+  }
+  if (menu_button_pressed_ &&
+      !controller.IsButtonDown(PlatformController::kButtonMenu)) {
+    event = std::make_unique<InputEvent>(
+        menu_button_long_pressed_ ? InputEvent::kMenuButtonLongPressEnd
+                                  : InputEvent::kMenuButtonClicked);
+    menu_button_pressed_ = false;
+  }
+  if (!menu_button_long_pressed_ &&
+      controller.IsButtonDown(PlatformController::kButtonMenu) &&
+      current_timestamp - menu_button_down_timestamp_ > kLongPressThreshold) {
+    menu_button_long_pressed_ = true;
+    event = std::make_unique<InputEvent>(InputEvent::kMenuButtonLongPressStart);
+  }
+  if (event) {
+    event->set_time_stamp(current_timestamp);
+    event_list->push_back(std::move(event));
+  }
+}
+
 std::unique_ptr<InputEvent> GestureDetector::GetGestureFromTouchInfo(
     const TouchPoint& touch_point) {
   std::unique_ptr<InputEvent> gesture;
diff --git a/chrome/browser/vr/gesture_detector.h b/chrome/browser/vr/gesture_detector.h
index bb8d7b5..83c109c 100644
--- a/chrome/browser/vr/gesture_detector.h
+++ b/chrome/browser/vr/gesture_detector.h
@@ -25,9 +25,8 @@
   GestureDetector();
   virtual ~GestureDetector();
 
-  std::unique_ptr<InputEventList> DetectGestures(
-      const PlatformController& controller,
-      base::TimeTicks current_timestamp);
+  InputEventList DetectGestures(const PlatformController& controller,
+                                base::TimeTicks current_timestamp);
 
  private:
   enum GestureDetectorStateLabel {
@@ -53,6 +52,10 @@
     gfx::Vector2dF displacement;
   };
 
+  void DetectMenuButtonGestures(InputEventList* event_list,
+                                const PlatformController& controller,
+                                base::TimeTicks current_timestamp);
+
   std::unique_ptr<InputEvent> GetGestureFromTouchInfo(
       const TouchPoint& touch_point);
 
@@ -95,6 +98,10 @@
 
   bool touch_position_changed_;
 
+  base::TimeTicks menu_button_down_timestamp_;
+  bool menu_button_pressed_ = false;
+  bool menu_button_long_pressed_ = false;
+
   DISALLOW_COPY_AND_ASSIGN(GestureDetector);
 };
 
diff --git a/chrome/browser/vr/gesture_detector_unittest.cc b/chrome/browser/vr/gesture_detector_unittest.cc
index a15186a..a60bb2b 100644
--- a/chrome/browser/vr/gesture_detector_unittest.cc
+++ b/chrome/browser/vr/gesture_detector_unittest.cc
@@ -20,8 +20,14 @@
         last_touch_timestamp(touch_timestamp) {}
 
   bool IsButtonDown(vr::PlatformController::ButtonType type) const override {
-    return type == vr::PlatformController::kButtonSelect ? is_button_down
-                                                         : false;
+    switch (type) {
+      case vr::PlatformController::kButtonSelect:
+        return is_select_button_down;
+      case vr::PlatformController::kButtonMenu:
+        return is_menu_button_down;
+      default:
+        return false;
+    }
   }
 
   bool IsTouchingTrackpad() const override { return is_touching_trackpad; }
@@ -50,8 +56,9 @@
 
   int GetBatteryLevel() const override { return 100; }
 
-  bool is_button_down = false;
   bool is_touching_trackpad = false;
+  bool is_select_button_down = false;
+  bool is_menu_button_down = false;
   gfx::PointF position_in_trackpad;
   base::TimeTicks last_touch_timestamp;
 };
@@ -67,14 +74,14 @@
 
   MockPlatformController controller(true, timestamp);
   auto gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kFlingCancel);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kFlingCancel);
 
   // A small move doesn't trigger scrolling yet.
   timestamp += base::TimeDelta::FromMilliseconds(1);
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {kDelta, kDelta};
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_TRUE(gestures->empty());
+  EXPECT_TRUE(gestures.empty());
 }
 
 TEST(GestureDetector, StartTouchMoveAndRelease) {
@@ -89,8 +96,8 @@
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {0.3f, 0.0f};
   auto gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollBegin);
-  auto* gesture = static_cast<InputEvent*>(gestures->front().get());
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollBegin);
+  auto* gesture = static_cast<InputEvent*>(gestures.front().get());
   EXPECT_GT(gesture->scroll_data.delta_x, 0.0f);
   EXPECT_EQ(gesture->scroll_data.delta_y, 0.0f);
 
@@ -99,8 +106,8 @@
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {0.3f, 0.01f};
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollUpdate);
-  gesture = static_cast<InputEvent*>(gestures->front().get());
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollUpdate);
+  gesture = static_cast<InputEvent*>(gestures.front().get());
   EXPECT_EQ(gesture->scroll_data.delta_x, 0.0f);
   EXPECT_GT(gesture->scroll_data.delta_y, 0.0f);
 
@@ -108,16 +115,16 @@
   controller.is_touching_trackpad = false;
   timestamp += base::TimeDelta::FromMilliseconds(1);
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollUpdate);
-  gesture = static_cast<InputEvent*>(gestures->front().get());
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollUpdate);
+  gesture = static_cast<InputEvent*>(gestures.front().get());
   EXPECT_GT(gesture->scroll_data.delta_x, 0.0f);
   EXPECT_GT(gesture->scroll_data.delta_y, 0.0f);
   timestamp += base::TimeDelta::FromMilliseconds(1);
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollUpdate);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollUpdate);
   timestamp += base::TimeDelta::FromMilliseconds(1);
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollEnd);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollEnd);
 }
 
 TEST(GestureDetector, CancelDuringScrolling) {
@@ -132,14 +139,14 @@
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {0.3f, 0.0f};
   auto gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollBegin);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollBegin);
 
   // Button down.
   timestamp += base::TimeDelta::FromMilliseconds(1);
   controller.last_touch_timestamp = timestamp;
-  controller.is_button_down = true;
+  controller.is_select_button_down = true;
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollEnd);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollEnd);
 }
 
 TEST(GestureDetector, CancelDuringPostScrolling) {
@@ -154,19 +161,19 @@
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {0.3f, 0.0f};
   auto gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollBegin);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollBegin);
 
   // Release touch. We should see extrapolated scrolling.
   timestamp += base::TimeDelta::FromMilliseconds(1);
   controller.is_touching_trackpad = false;
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollUpdate);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollUpdate);
 
   // Button down.
   timestamp += base::TimeDelta::FromMilliseconds(1);
-  controller.is_button_down = true;
+  controller.is_select_button_down = true;
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollEnd);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollEnd);
 }
 
 TEST(GestureDetector, CancelAndTouchDuringPostScrolling) {
@@ -181,20 +188,62 @@
   controller.last_touch_timestamp = timestamp;
   controller.position_in_trackpad = {0.3f, 0.0f};
   auto gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollBegin);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollBegin);
 
   // Release touch. We should see extrapolated scrolling.
   timestamp += base::TimeDelta::FromMilliseconds(1);
   controller.is_touching_trackpad = false;
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollUpdate);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollUpdate);
 
   // Touch and button down.
   timestamp += base::TimeDelta::FromMilliseconds(1);
-  controller.is_button_down = true;
+  controller.is_select_button_down = true;
   controller.is_touching_trackpad = true;
   gestures = detector.DetectGestures(controller, timestamp);
-  EXPECT_EQ(gestures->front()->type(), InputEvent::kScrollEnd);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kScrollEnd);
+}
+
+TEST(GestureDetector, ClickMenuButton) {
+  GestureDetector detector;
+  base::TimeTicks timestamp;
+
+  // Touch down menu button.
+  MockPlatformController controller;
+  controller.is_menu_button_down = true;
+  auto gestures = detector.DetectGestures(controller, timestamp);
+  EXPECT_TRUE(gestures.empty());
+
+  // Release menu button.
+  controller.is_menu_button_down = false;
+  timestamp += base::TimeDelta::FromMilliseconds(1);
+  gestures = detector.DetectGestures(controller, timestamp);
+  EXPECT_EQ(gestures.size(), 1u);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kMenuButtonClicked);
+}
+
+TEST(GestureDetector, LongPressMenuButton) {
+  GestureDetector detector;
+  base::TimeTicks timestamp;
+
+  // Touch down menu button.
+  MockPlatformController controller;
+  controller.is_menu_button_down = true;
+  auto gestures = detector.DetectGestures(controller, timestamp);
+  EXPECT_TRUE(gestures.empty());
+
+  // Keep menu button down.
+  timestamp += base::TimeDelta::FromSeconds(1);
+  gestures = detector.DetectGestures(controller, timestamp);
+  EXPECT_EQ(gestures.size(), 1u);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kMenuButtonLongPressStart);
+
+  // Release menu button.
+  controller.is_menu_button_down = false;
+  timestamp += base::TimeDelta::FromSeconds(1);
+  gestures = detector.DetectGestures(controller, timestamp);
+  EXPECT_EQ(gestures.size(), 1u);
+  EXPECT_EQ(gestures.front()->type(), InputEvent::kMenuButtonLongPressEnd);
 }
 
 }  // namespace vr
diff --git a/chrome/browser/vr/input_event.h b/chrome/browser/vr/input_event.h
index d23c3bf..28f93d2 100644
--- a/chrome/browser/vr/input_event.h
+++ b/chrome/browser/vr/input_event.h
@@ -30,6 +30,12 @@
     kScrollEnd,
     kScrollTypeLast = kScrollEnd,
 
+    kMenuButtonClicked,
+    kMenuButtonTypeFirst = kMenuButtonClicked,
+    kMenuButtonLongPressStart,
+    kMenuButtonLongPressEnd,
+    kMenuButtonTypeLast = kMenuButtonLongPressEnd,
+
     kNumVrInputEventTypes
   };
 
@@ -56,6 +62,10 @@
     return kScrollTypeFirst <= type && type <= kScrollTypeLast;
   }
 
+  static bool IsMenuButtonEventType(InputEvent::Type type) {
+    return kMenuButtonTypeFirst <= type && type <= kMenuButtonTypeLast;
+  }
+
   struct {
     float delta_x;
     float delta_y;
diff --git a/chrome/browser/vr/model/controller_model.h b/chrome/browser/vr/model/controller_model.h
index 4ab3f82b..c097d1b 100644
--- a/chrome/browser/vr/model/controller_model.h
+++ b/chrome/browser/vr/model/controller_model.h
@@ -34,7 +34,6 @@
   float opacity = 1.0f;
   bool resting_in_viewport = false;
   bool recentered = false;
-  bool app_button_long_pressed = false;
   PlatformController::Handedness handedness = PlatformController::kRightHanded;
   base::TimeTicks last_orientation_timestamp;
   base::TimeTicks last_touch_timestamp;
diff --git a/chrome/browser/vr/model/model.h b/chrome/browser/vr/model/model.h
index 0002fed..d766ecb 100644
--- a/chrome/browser/vr/model/model.h
+++ b/chrome/browser/vr/model/model.h
@@ -56,6 +56,7 @@
   bool needs_keyboard_update = false;
   bool overflow_menu_enabled = false;
   bool standalone_vr_device = false;
+  bool menu_button_long_pressed = false;
   std::vector<TabModel> regular_tabs;
   std::vector<TabModel> incognito_tabs;
   bool incognito_tabs_view_selected = false;
diff --git a/chrome/browser/vr/platform_controller.h b/chrome/browser/vr/platform_controller.h
index 2da20ffb..aa0ea8e 100644
--- a/chrome/browser/vr/platform_controller.h
+++ b/chrome/browser/vr/platform_controller.h
@@ -29,14 +29,6 @@
     kButtonTypeNumber
   };
 
-  enum SwipeDirection {
-    kSwipeDirectionNone,
-    kSwipeDirectionLeft,
-    kSwipeDirectionRight,
-    kSwipeDirectionUp,
-    kSwipeDirectionDown,
-  };
-
   enum Handedness {
     kRightHanded,
     kLeftHanded,
diff --git a/chrome/browser/vr/testapp/vr_test_context.cc b/chrome/browser/vr/testapp/vr_test_context.cc
index f768360e..c2ae6c0 100644
--- a/chrome/browser/vr/testapp/vr_test_context.cc
+++ b/chrome/browser/vr/testapp/vr_test_context.cc
@@ -257,9 +257,6 @@
       case ui::DomCode::US_G:
         recentered_ = true;
         break;
-      case ui::DomCode::US_X:
-        ui_->OnAppButtonClicked();
-        break;
       case ui::DomCode::US_T:
         touching_touchpad_ = !touching_touchpad_;
         break;
@@ -324,10 +321,12 @@
 
   const ui::MouseEvent* mouse_event = event->AsMouseEvent();
 
-  if (mouse_event->IsMiddleMouseButton()) {
-    if (mouse_event->type() == ui::ET_MOUSE_RELEASED) {
-      ui_->OnAppButtonClicked();
-    }
+  if (mouse_event->IsMiddleMouseButton() &&
+      mouse_event->type() == ui::ET_MOUSE_RELEASED) {
+    InputEventList list;
+    list.push_back(
+        std::make_unique<InputEvent>(InputEvent::kMenuButtonClicked));
+    input_event_lists_.push(std::move(list));
   }
 
   // TODO(cjgrant): Figure out why, quite regularly, mouse click events do not
@@ -421,9 +420,8 @@
     input_event_lists_.push(InputEventList());
   }
   ReticleModel reticle_model;
-  ui_instance_->input_manager()->HandleInput(current_time, render_info,
-                                             controller_model, &reticle_model,
-                                             &input_event_lists_.front());
+  ui_->HandleInput(current_time, render_info, controller_model, &reticle_model,
+                   &input_event_lists_.front());
   input_event_lists_.pop();
 
   // Now that we have accurate hit information, we use this to construct a
diff --git a/chrome/browser/vr/ui.cc b/chrome/browser/vr/ui.cc
index f9211b8..09ffa15 100644
--- a/chrome/browser/vr/ui.cc
+++ b/chrome/browser/vr/ui.cc
@@ -376,8 +376,8 @@
   input_manager_->OnPause();
 }
 
-void Ui::OnAppButtonClicked() {
-  // App button clicks should be a no-op when browsing mode is disabled.
+void Ui::OnMenuButtonClicked() {
+  // Menu button clicks should be a no-op when browsing mode is disabled.
   if (model_->browsing_disabled)
     return;
 
@@ -396,7 +396,7 @@
     return;
   }
 
-  // App button click exits the WebVR presentation and fullscreen.
+  // Menu button click exits the WebVR presentation and fullscreen.
   browser_->ExitPresent();
   browser_->ExitFullscreen();
 
@@ -412,9 +412,6 @@
   }
 }
 
-void Ui::OnAppButtonSwipePerformed(
-    PlatformController::SwipeDirection direction) {}
-
 void Ui::OnControllerUpdated(const ControllerModel& controller_model,
                              const ReticleModel& reticle_model) {
   model_->controller = controller_model;
@@ -455,10 +452,6 @@
   return controller_group && controller_group->GetTargetOpacity() > 0.0f;
 }
 
-bool Ui::IsAppButtonLongPressed() const {
-  return model_->controller.app_button_long_pressed;
-}
-
 bool Ui::SkipsRedrawWhenNotDirty() const {
   return model_->skips_redraw_when_not_dirty;
 }
@@ -664,23 +657,44 @@
   return scene_->GetWebVrOverlayElementsToDraw();
 }
 
-gfx::Rect Ui::CalculatePixelSpaceRect(const gfx::Size& texture_size,
-                                      const gfx::RectF& texture_rect) {
-  const gfx::RectF rect =
-      ScaleRect(texture_rect, static_cast<float>(texture_size.width()),
-                static_cast<float>(texture_size.height()));
-  return gfx::Rect(rect.x(), rect.y(), rect.width(), rect.height());
-}
-
 void Ui::HandleInput(base::TimeTicks current_time,
                      const RenderInfo& render_info,
                      const ControllerModel& controller_model,
                      ReticleModel* reticle_model,
                      InputEventList* input_event_list) {
+  HandleMenuButtonEvents(input_event_list);
   input_manager_->HandleInput(current_time, render_info, controller_model,
                               reticle_model, input_event_list);
 }
 
+void Ui::HandleMenuButtonEvents(InputEventList* input_event_list) {
+  InputEventList::iterator it = input_event_list->begin();
+  while (it != input_event_list->end()) {
+    if (InputEvent::IsMenuButtonEventType((*it)->type())) {
+      switch ((*it)->type()) {
+        case InputEvent::kMenuButtonClicked:
+          // Post a task, rather than calling directly, to avoid modifying UI
+          // state in the midst of frame rendering.
+          base::ThreadTaskRunnerHandle::Get()->PostTask(
+              FROM_HERE,
+              base::BindOnce(&Ui::OnMenuButtonClicked, base::Unretained(this)));
+          break;
+        case InputEvent::kMenuButtonLongPressStart:
+          model_->menu_button_long_pressed = true;
+          break;
+        case InputEvent::kMenuButtonLongPressEnd:
+          model_->menu_button_long_pressed = false;
+          break;
+        default:
+          NOTREACHED();
+      }
+      it = input_event_list->erase(it);
+    } else {
+      ++it;
+    }
+  }
+}
+
 Ui::FovRectangle Ui::GetMinimalFov(
     const gfx::Transform& view_matrix,
     const std::vector<const UiElement*>& elements,
diff --git a/chrome/browser/vr/ui.h b/chrome/browser/vr/ui.h
index c83a19e1..3d8b7ab 100644
--- a/chrome/browser/vr/ui.h
+++ b/chrome/browser/vr/ui.h
@@ -142,9 +142,6 @@
       unsigned int ui_texture_id) override;
 
   void OnPause() override;
-  void OnAppButtonClicked() override;
-  void OnAppButtonSwipePerformed(
-      PlatformController::SwipeDirection direction) override;
   void OnControllerUpdated(const ControllerModel& controller_model,
                            const ReticleModel& reticle_model) override;
   void OnProjMatrixChanged(const gfx::Transform& proj_matrix) override;
@@ -152,7 +149,6 @@
   void OnWebVrTimedOut() override;
   void OnWebVrTimeoutImminent() override;
   bool IsControllerVisible() const override;
-  bool IsAppButtonLongPressed() const override;
   bool SkipsRedrawWhenNotDirty() const override;
   void OnSwapContents(int new_content_id) override;
   void OnContentBoundsChanged(int width, int height) override;
@@ -177,8 +173,6 @@
                  float yborder) override;
   void DrawWebVrOverlayForeground(const RenderInfo& render_info) override;
   UiScene::Elements GetWebVrOverlayElementsToDraw() override;
-  gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size,
-                                    const gfx::RectF& texture_rect) override;
 
   void HandleInput(base::TimeTicks current_time,
                    const RenderInfo& render_info,
@@ -186,6 +180,8 @@
                    ReticleModel* reticle_model,
                    InputEventList* input_event_list) override;
 
+  void HandleMenuButtonEvents(InputEventList* input_event_list) override;
+
   FovRectangle GetMinimalFov(const gfx::Transform& view_matrix,
                              const std::vector<const UiElement*>& elements,
                              const FovRectangle& fov_recommended,
@@ -200,6 +196,7 @@
   void OnKeyboardHidden() override;
 
  private:
+  void OnMenuButtonClicked();
   void OnSpeechRecognitionEnded();
   void InitializeModel(const UiInitialState& ui_initial_state);
   UiBrowserInterface* browser_;
diff --git a/chrome/browser/vr/ui_interface.h b/chrome/browser/vr/ui_interface.h
index b33ec65c..b649ee9b 100644
--- a/chrome/browser/vr/ui_interface.h
+++ b/chrome/browser/vr/ui_interface.h
@@ -63,9 +63,6 @@
       UiElementRenderer::TextureLocation content_overlay_location,
       unsigned int ui_texture_id) = 0;
   virtual void OnPause() = 0;
-  virtual void OnAppButtonClicked() = 0;
-  virtual void OnAppButtonSwipePerformed(
-      PlatformController::SwipeDirection direction) = 0;
   virtual void OnControllerUpdated(const ControllerModel& controller_model,
                                    const ReticleModel& reticle_model) = 0;
   virtual void OnProjMatrixChanged(const gfx::Transform& proj_matrix) = 0;
@@ -73,7 +70,6 @@
   virtual void OnWebVrTimedOut() = 0;
   virtual void OnWebVrTimeoutImminent() = 0;
   virtual bool IsControllerVisible() const = 0;
-  virtual bool IsAppButtonLongPressed() const = 0;
   virtual bool SkipsRedrawWhenNotDirty() const = 0;
   virtual void OnSwapContents(int new_content_id) = 0;
   virtual void OnContentBoundsChanged(int width, int height) = 0;
@@ -95,13 +91,12 @@
                          float yborder) = 0;
   virtual void DrawWebVrOverlayForeground(const RenderInfo&) = 0;
   virtual UiScene::Elements GetWebVrOverlayElementsToDraw() = 0;
-  virtual gfx::Rect CalculatePixelSpaceRect(const gfx::Size&,
-                                            const gfx::RectF&) = 0;
   virtual void HandleInput(base::TimeTicks current_time,
                            const RenderInfo& render_info,
                            const ControllerModel& controller_model,
                            ReticleModel* reticle_model,
                            InputEventList* input_event_list) = 0;
+  virtual void HandleMenuButtonEvents(InputEventList* input_event_list) = 0;
   virtual void RequestFocus(int element_id) = 0;
   virtual void RequestUnfocus(int element_id) = 0;
 
diff --git a/chrome/browser/vr/ui_scene_creator.cc b/chrome/browser/vr/ui_scene_creator.cc
index 337f8e8a..cee11db 100644
--- a/chrome/browser/vr/ui_scene_creator.cc
+++ b/chrome/browser/vr/ui_scene_creator.cc
@@ -2935,7 +2935,7 @@
             return std::tuple<bool, bool, bool>(
                 model->web_vr_enabled() && model->web_vr.presenting_web_vr() &&
                     model->web_vr.has_received_permissions,
-                model->controller.app_button_long_pressed,
+                model->menu_button_long_pressed,
                 model->web_vr.showing_hosted_ui);
           },
           base::Unretained(model_)),
diff --git a/chrome/browser/vr/ui_unittest.cc b/chrome/browser/vr/ui_unittest.cc
index 787f2a0..1664f6d55 100644
--- a/chrome/browser/vr/ui_unittest.cc
+++ b/chrome/browser/vr/ui_unittest.cc
@@ -6,6 +6,7 @@
 
 #include "base/macros.h"
 #include "base/numerics/ranges.h"
+#include "base/run_loop.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/version.h"
@@ -514,15 +515,19 @@
   EXPECT_TRUE(scene_->GetUiElementByName(kExitPrompt)->IsVisible());
 }
 
-TEST_F(UiTest, ExitWebInputEditingOnAppButtonClick) {
+TEST_F(UiTest, ExitWebInputEditingOnMenuButtonClick) {
   CreateScene(kNotInWebVr);
   EXPECT_FALSE(scene_->GetUiElementByName(kKeyboard)->IsVisible());
   ui_->ShowSoftInput(true);
   OnBeginFrame();
   EXPECT_TRUE(scene_->GetUiElementByName(kKeyboard)->IsVisible());
-  ui_->OnAppButtonClicked();
+  InputEventList events;
+  events.push_back(
+      std::make_unique<InputEvent>(InputEvent::kMenuButtonClicked));
+  ui_->HandleMenuButtonEvents(&events);
+  base::RunLoop().RunUntilIdle();
   OnBeginFrame();
-  // Clicking app button should hide the keyboard.
+  // Clicking menu button should hide the keyboard.
   EXPECT_FALSE(scene_->GetUiElementByName(kKeyboard)->IsVisible());
 }
 
@@ -610,7 +615,7 @@
 
 // This test verifies that we ignore the WebVR frame when we're not expecting
 // WebVR presentation. You can get an unexpected frame when for example, the
-// user hits the app button to exit WebVR mode, but the site continues to pump
+// user hits the menu button to exit WebVR mode, but the site continues to pump
 // frames. If the frame is not ignored, our UI will think we're in WebVR mode.
 TEST_F(UiTest, WebVrFramesIgnoredWhenUnexpected) {
   CreateScene(kInWebVr);
@@ -998,14 +1003,18 @@
   }
 }
 
-TEST_F(UiTest, ExitPresentAndFullscreenOnAppButtonClick) {
+TEST_F(UiTest, ExitPresentAndFullscreenOnMenuButtonClick) {
   CreateScene(kNotInWebVr);
   ui_->SetWebVrMode(true);
-  // Clicking app button should trigger to exit presentation.
+  // Clicking menu button should trigger to exit presentation.
   EXPECT_CALL(*browser_, ExitPresent());
   // And also trigger exit fullscreen.
   EXPECT_CALL(*browser_, ExitFullscreen());
-  ui_->OnAppButtonClicked();
+  InputEventList events;
+  events.push_back(
+      std::make_unique<InputEvent>(InputEvent::kMenuButtonClicked));
+  ui_->HandleMenuButtonEvents(&events);
+  base::RunLoop().RunUntilIdle();
 }
 
 
@@ -1284,10 +1293,10 @@
   EXPECT_FALSE(IsVisible(kWebVrExclusiveScreenToast));
 }
 
-// Ensures that permissions appear on long press, and that when the app button
+// Ensures that permissions appear on long press, and that when the menu button
 // is released that we do not show the exclusive screen toast. Distinguishing
 // these cases requires knowledge of the previous state.
-TEST_F(UiTest, LongPressAppButtonInWebVrMode) {
+TEST_F(UiTest, LongPressMenuButtonInWebVrMode) {
   CreateScene(kInWebVr);
   ui_->SetWebVrMode(true);
   EXPECT_FALSE(IsVisible(kWebVrExclusiveScreenToast));
@@ -1298,16 +1307,25 @@
   RunForSeconds(8);
   EXPECT_FALSE(IsVisible(kWebVrExclusiveScreenToast));
   model_->capturing_state.audio_capture_enabled = true;
-  model_->controller.app_button_long_pressed = true;
+  EXPECT_FALSE(model_->menu_button_long_pressed);
+  InputEventList events;
+  events.push_back(
+      std::make_unique<InputEvent>(InputEvent::kMenuButtonLongPressStart));
+  ui_->HandleMenuButtonEvents(&events);
   OnBeginFrame();
+  EXPECT_TRUE(model_->menu_button_long_pressed);
   EXPECT_FALSE(IsVisible(kWebVrExclusiveScreenToast));
   EXPECT_TRUE(IsVisible(kWebVrAudioCaptureIndicator));
   RunForSeconds(8);
-  EXPECT_FALSE(IsVisible(kWebVrAudioCaptureIndicator));
-  model_->controller.app_button_long_pressed = true;
   OnBeginFrame();
+  EXPECT_TRUE(model_->menu_button_long_pressed);
+  EXPECT_FALSE(IsVisible(kWebVrAudioCaptureIndicator));
   EXPECT_FALSE(IsVisible(kWebVrAudioCaptureIndicator));
   EXPECT_FALSE(IsVisible(kWebVrExclusiveScreenToast));
+  events.push_back(
+      std::make_unique<InputEvent>(InputEvent::kMenuButtonLongPressEnd));
+  ui_->HandleMenuButtonEvents(&events);
+  EXPECT_FALSE(model_->menu_button_long_pressed);
 }
 
 TEST_F(UiTest, MenuItems) {
diff --git a/chrome/browser/vr/vr_geometry_util.cc b/chrome/browser/vr/vr_geometry_util.cc
new file mode 100644
index 0000000..1448a63
--- /dev/null
+++ b/chrome/browser/vr/vr_geometry_util.cc
@@ -0,0 +1,50 @@
+// 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.
+
+#include "chrome/browser/vr/vr_geometry_util.h"
+
+#include "ui/gfx/geometry/point3_f.h"
+#include "ui/gfx/geometry/rect_f.h"
+#include "ui/gfx/geometry/size_f.h"
+#include "ui/gfx/transform.h"
+
+namespace vr {
+
+// This code is adapted from the GVR Treasure Hunt demo source.
+gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size,
+                                  const gfx::RectF& texture_rect) {
+  const gfx::RectF rect =
+      ScaleRect(texture_rect, static_cast<float>(texture_size.width()),
+                static_cast<float>(texture_size.height()));
+  return gfx::Rect(rect.x(), rect.y(), rect.width(), rect.height());
+}
+
+gfx::SizeF CalculateScreenSize(const gfx::Transform& proj_matrix,
+                               float distance,
+                               const gfx::SizeF& size) {
+  // View matrix is the identity, thus, not needed in the calculation.
+  gfx::Transform scale_transform;
+  scale_transform.Scale(size.width(), size.height());
+
+  gfx::Transform translate_transform;
+  translate_transform.Translate3d(0, 0, -distance);
+
+  gfx::Transform model_view_proj_matrix =
+      proj_matrix * translate_transform * scale_transform;
+
+  gfx::Point3F projected_upper_right_corner(0.5f, 0.5f, 0.0f);
+  model_view_proj_matrix.TransformPoint(&projected_upper_right_corner);
+  gfx::Point3F projected_lower_left_corner(-0.5f, -0.5f, 0.0f);
+  model_view_proj_matrix.TransformPoint(&projected_lower_left_corner);
+
+  // Calculate and return the normalized size in screen space.
+  return gfx::SizeF((std::abs(projected_upper_right_corner.x()) +
+                     std::abs(projected_lower_left_corner.x())) /
+                        2.0f,
+                    (std::abs(projected_upper_right_corner.y()) +
+                     std::abs(projected_lower_left_corner.y())) /
+                        2.0f);
+}
+
+}  // namespace vr
diff --git a/chrome/browser/vr/vr_geometry_util.h b/chrome/browser/vr/vr_geometry_util.h
new file mode 100644
index 0000000..bde3952
--- /dev/null
+++ b/chrome/browser/vr/vr_geometry_util.h
@@ -0,0 +1,31 @@
+// 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.
+
+#ifndef CHROME_BROWSER_VR_VR_GEOMETRY_UTIL_H_
+#define CHROME_BROWSER_VR_VR_GEOMETRY_UTIL_H_
+
+#include "chrome/browser/vr/vr_ui_export.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace gfx {
+class RectF;
+class Size;
+class SizeF;
+class Transform;
+}  // namespace gfx
+
+namespace vr {
+
+VR_UI_EXPORT gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size,
+                                               const gfx::RectF& texture_rect);
+
+// Returns the normalized size of the element projected into screen space.
+// If (1, 1) the element fills the entire buffer.
+VR_UI_EXPORT gfx::SizeF CalculateScreenSize(const gfx::Transform& proj_matrix,
+                                            float distance,
+                                            const gfx::SizeF& size);
+
+}  // namespace vr
+
+#endif  // CHROME_BROWSER_VR_VR_GEOMETRY_UTIL_H_
diff --git a/chrome/browser/vr/vr_gl_util_unittest.cc b/chrome/browser/vr/vr_geometry_util_unittest.cc
similarity index 86%
rename from chrome/browser/vr/vr_gl_util_unittest.cc
rename to chrome/browser/vr/vr_geometry_util_unittest.cc
index 74ba936..b48495f 100644
--- a/chrome/browser/vr/vr_gl_util_unittest.cc
+++ b/chrome/browser/vr/vr_geometry_util_unittest.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 "chrome/browser/vr/vr_gl_util.h"
+#include "chrome/browser/vr/vr_geometry_util.h"
 
 #include "chrome/browser/vr/test/constants.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -11,7 +11,7 @@
 
 namespace vr {
 
-TEST(VrGlUtilTest, CalculateScreenSize) {
+TEST(VrGeometryUtilTest, CalculateScreenSize) {
   gfx::SizeF size(2.4f, 1.6f);
 
   gfx::SizeF screen_size =
diff --git a/chrome/browser/vr/vr_gl_util.cc b/chrome/browser/vr/vr_gl_util.cc
index 67586cc..a360166 100644
--- a/chrome/browser/vr/vr_gl_util.cc
+++ b/chrome/browser/vr/vr_gl_util.cc
@@ -4,9 +4,6 @@
 
 #include "chrome/browser/vr/vr_gl_util.h"
 
-#include "ui/gfx/geometry/point3_f.h"
-#include "ui/gfx/geometry/rect_f.h"
-#include "ui/gfx/geometry/size_f.h"
 #include "ui/gfx/transform.h"
 
 namespace vr {
@@ -18,15 +15,6 @@
   return result;
 }
 
-// This code is adapted from the GVR Treasure Hunt demo source.
-gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size,
-                                  const gfx::RectF& texture_rect) {
-  const gfx::RectF rect =
-      ScaleRect(texture_rect, static_cast<float>(texture_size.width()),
-                static_cast<float>(texture_size.height()));
-  return gfx::Rect(rect.x(), rect.y(), rect.width(), rect.height());
-}
-
 GLuint CompileShader(GLenum shader_type,
                      const GLchar* shader_source,
                      std::string& error) {
@@ -96,33 +84,6 @@
   return program_handle;
 }
 
-gfx::SizeF CalculateScreenSize(const gfx::Transform& proj_matrix,
-                               float distance,
-                               const gfx::SizeF& size) {
-  // View matrix is the identity, thus, not needed in the calculation.
-  gfx::Transform scale_transform;
-  scale_transform.Scale(size.width(), size.height());
-
-  gfx::Transform translate_transform;
-  translate_transform.Translate3d(0, 0, -distance);
-
-  gfx::Transform model_view_proj_matrix =
-      proj_matrix * translate_transform * scale_transform;
-
-  gfx::Point3F projected_upper_right_corner(0.5f, 0.5f, 0.0f);
-  model_view_proj_matrix.TransformPoint(&projected_upper_right_corner);
-  gfx::Point3F projected_lower_left_corner(-0.5f, -0.5f, 0.0f);
-  model_view_proj_matrix.TransformPoint(&projected_lower_left_corner);
-
-  // Calculate and return the normalized size in screen space.
-  return gfx::SizeF((std::abs(projected_upper_right_corner.x()) +
-                     std::abs(projected_lower_left_corner.x())) /
-                        2.0f,
-                    (std::abs(projected_upper_right_corner.y()) +
-                     std::abs(projected_lower_left_corner.y())) /
-                        2.0f);
-}
-
 void SetTexParameters(GLenum texture_type) {
   glTexParameteri(texture_type, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
   glTexParameteri(texture_type, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
diff --git a/chrome/browser/vr/vr_gl_util.h b/chrome/browser/vr/vr_gl_util.h
index 478ca2f..1f6c17e4 100644
--- a/chrome/browser/vr/vr_gl_util.h
+++ b/chrome/browser/vr/vr_gl_util.h
@@ -8,9 +8,7 @@
 #include <array>
 #include <string>
 
-#include "chrome/browser/vr/vr_ui_export.h"
 #include "third_party/skia/include/core/SkColor.h"
-#include "ui/gfx/geometry/rect.h"
 #include "ui/gl/gl_bindings.h"
 
 #define SHADER(Src) "#version 100\n" #Src
@@ -19,9 +17,6 @@
 #define VOID_OFFSET(x) reinterpret_cast<void*>(x)
 
 namespace gfx {
-class RectF;
-class Size;
-class SizeF;
 class Transform;
 }  // namespace gfx
 
@@ -29,9 +24,6 @@
 
 std::array<float, 16> MatrixToGLArray(const gfx::Transform& matrix);
 
-VR_UI_EXPORT gfx::Rect CalculatePixelSpaceRect(const gfx::Size& texture_size,
-                                               const gfx::RectF& texture_rect);
-
 // Compile a shader.
 GLuint CompileShader(GLenum shader_type,
                      const GLchar* shader_source,
@@ -42,12 +34,6 @@
                             GLuint fragment_shader_handle,
                             std::string& error);
 
-// Returns the normalized size of the element projected into screen space.
-// If (1, 1) the element fills the entire buffer.
-VR_UI_EXPORT gfx::SizeF CalculateScreenSize(const gfx::Transform& proj_matrix,
-                                            float distance,
-                                            const gfx::SizeF& size);
-
 // Sets default texture parameters given a texture type.
 void SetTexParameters(GLenum texture_type);
 
diff --git a/chrome/chrome_cleaner/BUILD.gn b/chrome/chrome_cleaner/BUILD.gn
index 59124b9..040bc97 100644
--- a/chrome/chrome_cleaner/BUILD.gn
+++ b/chrome/chrome_cleaner/BUILD.gn
@@ -22,10 +22,14 @@
     "//chrome/chrome_cleaner/pup_data:unittest_sources",
     "//chrome/chrome_cleaner/settings:unittest_sources",
     "//chrome/chrome_cleaner/strings:unittest_sources",
+    "//chrome/chrome_cleaner/test:unittest_sources",
 
     # Dependencies of the test harness.
     "//base",
     "//base/test:test_support",
+    "//chrome/chrome_cleaner/os:cleaner_os",
+    "//chrome/chrome_cleaner/os:common_os",
+    "//chrome/chrome_cleaner/test:test_util",
     "//sandbox/win:sandbox",
     "//testing/gtest",
   ]
diff --git a/chrome/chrome_cleaner/DEPS b/chrome/chrome_cleaner/DEPS
index aa45b14..16f67f85 100644
--- a/chrome/chrome_cleaner/DEPS
+++ b/chrome/chrome_cleaner/DEPS
@@ -1,3 +1,4 @@
 include_rules = [
+  "+sandbox/win/src",
   "+testing/gtest",
 ]
diff --git a/chrome/chrome_cleaner/os/BUILD.gn b/chrome/chrome_cleaner/os/BUILD.gn
index ee87e0ff..fe0dbf45 100644
--- a/chrome/chrome_cleaner/os/BUILD.gn
+++ b/chrome/chrome_cleaner/os/BUILD.gn
@@ -2,7 +2,7 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-static_library("common_os") {
+source_set("common_os") {
   sources = [
     "digest_verifier.cc",
     "digest_verifier.h",
@@ -74,7 +74,6 @@
     "ntdll.lib",  # For NtQueryKey
     "secur32.lib",  # For GetUserNameEx
     "taskschd.lib",  # For CLSID_TaskScheduler
-    "wintrust.lib",  # For WinVerifyTrust
   ]
 
   defines = [ "SECURITY_WIN32" ]  # For secur32.lib
@@ -91,7 +90,7 @@
   ]
 }
 
-static_library("cleaner_os") {
+source_set("cleaner_os") {
   sources = [
     "file_removal_status_updater.cc",
     "file_removal_status_updater.h",
@@ -124,11 +123,27 @@
 
   sources = [
     # TODO(joenotcharles): Copy unit tests from the internal repo.
+    "digest_verifier_unittest.cc",
+    "disk_util_unittest.cc",
+    "file_path_sanitization_unittest.cc",
+    "file_path_set_unittest.cc",
+    "file_removal_status_updater_unittest.cc",
+    "file_remover_unittest.cc",
   ]
 
   deps = [
     ":cleaner_os",
     ":common_os",
     ":file_remover_api",
+    "//base",
+    "//base/test:test_config",
+    "//base/test:test_support",
+    "//chrome/chrome_cleaner/logging/proto:removal_status_proto",
+    "//chrome/chrome_cleaner/strings",
+    "//chrome/chrome_cleaner/test:test_executables",
+    "//chrome/chrome_cleaner/test:test_strings",
+    "//chrome/chrome_cleaner/test:test_util",
+    "//chrome/chrome_cleaner/test/resources:test_resources",
+    "//testing/gtest",
   ]
 }
diff --git a/chrome/chrome_cleaner/os/digest_verifier_unittest.cc b/chrome/chrome_cleaner/os/digest_verifier_unittest.cc
new file mode 100644
index 0000000..2be0340
--- /dev/null
+++ b/chrome/chrome_cleaner/os/digest_verifier_unittest.cc
@@ -0,0 +1,52 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/digest_verifier.h"
+
+#include "base/base_paths.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/path_service.h"
+#include "chrome/chrome_cleaner/os/pre_fetched_paths.h"
+#include "chrome/chrome_cleaner/os/system_util.h"
+#include "chrome/chrome_cleaner/test/resources/grit/test_resources.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+TEST(DigestVerifier, KnownFile) {
+  std::shared_ptr<DigestVerifier> digest_verifier =
+      DigestVerifier::CreateFromResource(IDS_TEST_SAMPLE_DLL_DIGEST);
+  ASSERT_TRUE(digest_verifier);
+
+  base::FilePath dll_path = GetSampleDLLPath();
+  ASSERT_TRUE(base::PathExists(dll_path)) << dll_path.value();
+
+  EXPECT_TRUE(digest_verifier->IsKnownFile(dll_path));
+}
+
+TEST(DigestVerifier, UnknownFile) {
+  std::shared_ptr<DigestVerifier> digest_verifier =
+      DigestVerifier::CreateFromResource(IDS_TEST_SAMPLE_DLL_DIGEST);
+  ASSERT_TRUE(digest_verifier);
+
+  const base::FilePath self_path =
+      PreFetchedPaths::GetInstance()->GetExecutablePath();
+
+  EXPECT_FALSE(digest_verifier->IsKnownFile(self_path));
+}
+
+TEST(DigestVerifier, InexistentFile) {
+  std::shared_ptr<DigestVerifier> digest_verifier =
+      DigestVerifier::CreateFromResource(IDS_TEST_SAMPLE_DLL_DIGEST);
+  ASSERT_TRUE(digest_verifier);
+
+  base::FilePath invalid_path(L"this_file_should_not_exist.dll");
+  ASSERT_FALSE(base::PathExists(invalid_path));
+
+  EXPECT_FALSE(digest_verifier->IsKnownFile(invalid_path));
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/os/disk_util.cc b/chrome/chrome_cleaner/os/disk_util.cc
index 5e0534a..6b8e4b2 100644
--- a/chrome/chrome_cleaner/os/disk_util.cc
+++ b/chrome/chrome_cleaner/os/disk_util.cc
@@ -4,7 +4,6 @@
 
 #include "chrome/chrome_cleaner/os/disk_util.h"
 
-#include <softpub.h>
 #include <stdint.h>
 
 #include <algorithm>
@@ -135,22 +134,6 @@
   }
 }
 
-// Return whether an executable is whitelisted. On success, |file_information|
-// receives the file version information. |file_information| is not modified by
-// this function but cannot be const because of the accessors prototype in base.
-bool IsExecutableWhiteListed(FileVersionInfo* file_information) {
-  DCHECK(file_information);
-  bool white_listed = false;
-  base::string16 company_name = file_information->company_name();
-  for (const base::string16& white_listed_name : company_white_list) {
-    if (company_name.compare(white_listed_name) == 0) {
-      white_listed = true;
-      break;
-    }
-  }
-  return white_listed;
-}
-
 void AppendFileInformationField(const wchar_t* field_name,
                                 const base::string16& field,
                                 base::string16* information) {
@@ -520,10 +503,28 @@
   return content;
 }
 
+bool IsExecutableOnDefaultReportingWhiteList(const base::FilePath& file_path) {
+  std::unique_ptr<FileVersionInfo> file_information(
+      FileVersionInfo::CreateFileVersionInfo(file_path));
+  if (!file_information)
+    return false;
+
+  bool white_listed = false;
+  base::string16 company_name = file_information->company_name();
+  for (const base::string16& white_listed_name : company_white_list) {
+    if (company_name.compare(white_listed_name) == 0) {
+      white_listed = true;
+      break;
+    }
+  }
+  return white_listed;
+}
+
 bool RetrieveDetailedFileInformation(
     const base::FilePath& file_path,
     internal::FileInformation* file_information,
-    bool* white_listed) {
+    bool* white_listed,
+    ReportingWhiteListCallback white_list_callback) {
   DCHECK(file_information);
   DCHECK(white_listed);
 
@@ -531,9 +532,7 @@
   if (!TryToExpandPath(file_path, &expanded_path))
     return false;
 
-  std::unique_ptr<FileVersionInfo> version(
-      FileVersionInfo::CreateFileVersionInfo(expanded_path));
-  if (version.get() && IsExecutableWhiteListed(version.get())) {
+  if (std::move(white_list_callback).Run(file_path)) {
     *white_listed = true;
     return false;
   }
@@ -550,7 +549,9 @@
   }
 
   // Set the executable version information, when available.
-  if (version.get()) {
+  std::unique_ptr<FileVersionInfo> version(
+      FileVersionInfo::CreateFileVersionInfo(expanded_path));
+  if (version) {
     file_information->company_name = version->company_name();
     file_information->company_short_name = version->company_short_name();
     file_information->product_name = version->product_name();
diff --git a/chrome/chrome_cleaner/os/disk_util.h b/chrome/chrome_cleaner/os/disk_util.h
index 201c5dcc..4285c1e8 100644
--- a/chrome/chrome_cleaner/os/disk_util.h
+++ b/chrome/chrome_cleaner/os/disk_util.h
@@ -14,6 +14,8 @@
 #include <string>
 #include <vector>
 
+#include "base/bind.h"
+#include "base/callback.h"
 #include "base/strings/string16.h"
 #include "base/win/scoped_handle.h"
 #include "chrome/chrome_cleaner/os/disk_util_types.h"
@@ -27,6 +29,9 @@
 
 class LayeredServiceProviderAPI;
 
+typedef base::OnceCallback<bool(const base::FilePath&)>
+    ReportingWhiteListCallback;
+
 // Return the full path of the relative path |input_path| when expanded to the
 // 64 bits program files path. Return an empty path when not running on 64 bits
 // OS.
@@ -92,13 +97,20 @@
 base::string16 FileInformationToString(
     const internal::FileInformation& file_information);
 
+// Returns true if the given |path| refers to an executable which is
+// whitelisted so that its details should not be reported.
+bool IsExecutableOnDefaultReportingWhiteList(const base::FilePath& file_path);
+
 // Retrieve the detailed information for the executable |file_path| and append
-// the fields to |file_information|. If the executable is |white_listed|,
-// |file_information| stay unchanged.
+// the fields to |file_information|. If the executable is |white_listed|
+// according to the given |white_list_callback|, |file_information| stays
+// unchanged.
 bool RetrieveDetailedFileInformation(
     const base::FilePath& file_path,
     internal::FileInformation* file_information,
-    bool* white_listed);
+    bool* white_listed,
+    ReportingWhiteListCallback white_list_callback =
+        base::BindOnce(&IsExecutableOnDefaultReportingWhiteList));
 
 // Retrieve the file information path, dates and size into |file_information|.
 bool RetrieveBasicFileInformation(const base::FilePath& file_path,
diff --git a/chrome/chrome_cleaner/os/disk_util_unittest.cc b/chrome/chrome_cleaner/os/disk_util_unittest.cc
new file mode 100644
index 0000000..4d8741a
--- /dev/null
+++ b/chrome/chrome_cleaner/os/disk_util_unittest.cc
@@ -0,0 +1,1233 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/disk_util.h"
+
+#include <windows.h>
+
+#include <shlobj.h>
+
+#include "base/bind.h"
+#include "base/command_line.h"
+#include "base/files/file.h"
+#include "base/files/file_enumerator.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "base/path_service.h"
+#include "base/process/launch.h"
+#include "base/stl_util.h"
+#include "base/strings/strcat.h"
+#include "base/strings/string_util.h"
+#include "base/strings/stringprintf.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/scoped_path_override.h"
+#include "base/test/test_shortcut_win.h"
+#include "base/test/test_timeouts.h"
+#include "base/win/windows_version.h"
+#include "chrome/chrome_cleaner/os/file_path_sanitization.h"
+#include "chrome/chrome_cleaner/os/layered_service_provider_wrapper.h"
+#include "chrome/chrome_cleaner/os/system_util_cleaner.h"
+#include "chrome/chrome_cleaner/strings/string_util.h"
+#include "chrome/chrome_cleaner/test/test_executables.h"
+#include "chrome/chrome_cleaner/test/test_file_util.h"
+#include "chrome/chrome_cleaner/test/test_layered_service_provider.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+// A path name under program files.
+const wchar_t kProgramFilesBaseName[] = L"Foo";
+
+// Keep these digests in sorted order.
+const char* const kFileContentDigests[] = {
+    "02544E052F29BBA79C81243EC63B43B6CD85B185461928E65BFF501346C62A75",
+    "04614470DDF4939091F5EC4A13C92A9EAAACF07CA5C3F713E792E2D21CD24075",
+    // Hash for content: |kFileContent2|.
+    "82E0B92772BC0DA59AAB0B9231AA006FB37B4F99EC3E853C5A62786A1C7215BD",
+    "94F7BDF53CDFDE7AA5E5C90BCDA6793B7377CE39E2591ABC758EBAE8072A275C",
+    // Hash for content: |kFileContent1|.
+    "BD283E41A3672B6BDAA574F8BD7176F8BCA95BD81383CDE32AA6D78B1DB0E371"};
+
+const wchar_t kFileName1[] = L"Filename one";
+const wchar_t kFileName2[] = L"Filename two";
+const wchar_t kFileName3[] = L"Third filename";
+const wchar_t kLongFileName1[] = L"Long File Name.bla";
+const wchar_t kLongFileName2[] = L"Other Long File Name.bla";
+const wchar_t kLongFileName2Subset[] = L"Long File";
+const char kFileContent1[] = "This is the file content.";
+const char kFileContent2[] = "Hi!";
+const char kFileContent3[] = "Hello World!";
+
+const internal::FileInformation kFileInformation1(L"some/path/something.tmp",
+                                                  "3/1/2016",
+                                                  "3/3/2016",
+                                                  "somedigest1234",
+                                                  9876,
+                                                  L"Company Name",
+                                                  L"CNShort",
+                                                  L"Product Name",
+                                                  L"PNShort",
+                                                  L"Internal Name",
+                                                  L"Something_Original.tmp",
+                                                  L"Very descriptive",
+                                                  L"42.1.2");
+
+const wchar_t kFileInformation1ExpectedString[] =
+    L"path = 'some/path/something.tmp', file_creation_date = "
+    L"'3/1/2016', file_last_modified_date = '3/3/2016', digest = "
+    L"'somedigest1234', size = '9876', company_name = 'Company Name', "
+    L"company_short_name = 'CNShort', product_name = 'Product Name', "
+    L"product_short_name = 'PNShort', internal_name = 'Internal Name', "
+    L"original_filename = 'Something_Original.tmp', file_description = 'Very "
+    L"descriptive', file_version = '42.1.2', active_file = '0'";
+
+// All potential format of content that get from registry. %ls will be replaced
+// by the executable path.
+// clang-format off
+const wchar_t* kMockRegistryContents[] = {
+    // Straight path as is.
+    L"%ls",
+    L"\"%ls\"",
+    // With command line arguments.
+    L"%ls -s",
+    L"\"%ls\" -s",
+    L"\"%ls -s\"",
+    // Using rundll.
+    L"C:\\Windows\\SysWow64\\rundll32 %ls",
+    L"C:\\Windows\\SysWow64\\rundll32 \"%ls\"",
+    // Using rundll with args.
+    L"C:\\Windows\\SysWow64\\rundll32.exe %ls,OpenAs_RunDLL %%1",
+    L"C:\\Windows\\SysWow64\\rundll32.exe \"%ls\",OpenAs_RunDLL %%1",
+    L"C:\\Windows\\SysWow64\\rundll32.exe \"%ls,OpenAs_RunDLL\" %%1",
+    L"C:\\Windows\\SysWow64\\rundll32.exe %ls a1 a2,OpenAs_RunDLL %%1",
+    L"C:\\Windows\\SysWow64\\rundll32.exe \"%ls\" a1,OpenAs_RunDLL %%1",
+    L"C:\\Windows\\SysWow64\\rundll32.exe \"%ls a1,OpenAs_RunDLL\" %%1",
+    L"C:\\Windows\\System32\\rundll32 %ls",
+    // Rundll without a path.
+    L"rundll32.exe %ls a1 a2,OpenAs_RunDLL %%1",
+    L"rundll32.exe \"%ls\" -s %%1",
+    L"rundll32.exe \"%ls -s\" %%1",
+    // Rundll without extension.
+    L"C:\\Windows\\SysWow64\\rundll32 %ls a1 a2,OpenAs_RunDLL %%1",
+    L"C:\\Windows\\SysWow64\\rundll32 \"%ls\" -s %%1",
+    L"C:\\Windows\\SysWow64\\rundll32 \"%ls -s\" %%1"};
+// clang-format on
+
+bool LaunchTestProcess(const wchar_t* executable,
+                       const char* action,
+                       bool wait) {
+  base::FilePath executable_path(executable);
+  base::CommandLine command_line(executable_path);
+  command_line.AppendSwitch(action);
+  base::LaunchOptions options = base::LaunchOptions();
+  options.wait = wait;
+  return base::LaunchProcess(command_line, options).IsValid();
+}
+
+bool DoesVolumeSupportNamedStreams(const base::FilePath& path) {
+  std::vector<base::string16> components;
+  path.GetComponents(&components);
+  DCHECK(!components.empty());
+  base::string16& drive = components[0];
+  drive += L'\\';
+  DWORD system_flags = 0;
+  if (::GetVolumeInformation(drive.c_str(), nullptr, 0, nullptr, nullptr,
+                             &system_flags, nullptr, 0) != TRUE) {
+    PLOG(ERROR) << "Cannot retrieve drive information: '" << path.value()
+                << "'.";
+    return false;
+  }
+
+  return (system_flags & FILE_NAMED_STREAMS) != 0;
+}
+
+void CreateProgramPathsAndFiles(const base::FilePath& temp_dir_path,
+                                base::FilePath* program_path,
+                                base::FilePath* spaced_program_path) {
+  DCHECK(program_path);
+  DCHECK(spaced_program_path);
+  base::FilePath folder;
+  base::FilePath file_path;
+  base::FilePath spaced_folder;
+  base::FilePath spaced_file_path;
+
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir_path, L"folder", &folder));
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir_path, L"  spaced folder",
+                                            &spaced_folder));
+
+  ASSERT_TRUE(CreateTemporaryFileInDir(folder, &file_path));
+  ASSERT_TRUE(CreateTemporaryFileInDir(spaced_folder, &spaced_file_path));
+
+  *program_path = file_path;
+  *spaced_program_path = spaced_file_path;
+}
+
+// Substitutes |registry_path| into each entry in the mock registry in turn
+// and passes the result to ExtractExecutablePathFromRegistryContent to get a
+// file path. Returns success if every file path matches |expected_path|.
+::testing::AssertionResult ExtractExecutablePathFromMockRegistryAndExpect(
+    const base::string16& registry_path,
+    const base::FilePath& expected_path) {
+  for (const base::string16& registry_content : kMockRegistryContents) {
+    base::string16 full_registry_content =
+        base::StringPrintf(registry_content.c_str(), registry_path.c_str());
+    base::FilePath extracted_path =
+        ExtractExecutablePathFromRegistryContent(full_registry_content);
+    if (!PathEqual(expected_path, extracted_path)) {
+      return ::testing::AssertionFailure()
+             << expected_path.value() << " != " << extracted_path.value()
+             << ", full_registry_content = " << full_registry_content;
+    }
+  }
+  return ::testing::AssertionSuccess();
+}
+
+// Return that the sample DLL is whitelisted and all other files are not.
+bool WhitelistSampleDLL(const base::FilePath& path) {
+  return PathEqual(path, GetSampleDLLPath());
+}
+
+}  // namespace
+
+TEST(DiskUtilTests, GetX64ProgramFilePath) {
+  base::FilePath x64_program_files =
+      GetX64ProgramFilesPath(base::FilePath(kProgramFilesBaseName));
+  if (base::win::OSInfo::GetInstance()->architecture() ==
+      base::win::OSInfo::X86_ARCHITECTURE) {
+    EXPECT_TRUE(x64_program_files.empty());
+    return;
+  }
+
+  EXPECT_FALSE(x64_program_files.empty());
+  EXPECT_NE(x64_program_files,
+            ExpandSpecialFolderPath(CSIDL_PROGRAM_FILES,
+                                    base::FilePath(kProgramFilesBaseName)));
+}
+
+TEST(DiskUtilTests, PathContainsWildcards) {
+  EXPECT_FALSE(PathContainsWildcards(base::FilePath(L"c:\\foo.txt")));
+  EXPECT_FALSE(PathContainsWildcards(base::FilePath(L"c:\\bar\\foo.txt")));
+  EXPECT_TRUE(PathContainsWildcards(base::FilePath(L"c:\\foo.t?t")));
+  EXPECT_TRUE(PathContainsWildcards(base::FilePath(L"c:\\foo.t*t")));
+  EXPECT_TRUE(
+      PathContainsWildcards(base::FilePath(L"c:\\"
+                                           LR"(???)"
+                                           L"*\\foo.txt")));
+  EXPECT_TRUE(PathContainsWildcards(base::FilePath(L"*:\\")));
+  EXPECT_FALSE(PathContainsWildcards(base::FilePath(L"foo.txt")));
+  EXPECT_TRUE(PathContainsWildcards(base::FilePath(LR"(foo.???)")));
+}
+
+TEST(DiskUtilTests, CollectMatchingPathsMultipleWildcards) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  // Create files and folders under |temp_dir| and add them to |expected_files|.
+  std::set<base::FilePath> expected_files;
+
+  base::ScopedTempDir sub_dir1;
+  ASSERT_TRUE(sub_dir1.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::ScopedTempDir sub_dir2;
+  ASSERT_TRUE(sub_dir2.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::FilePath sub_dir1_file_path1(sub_dir1.GetPath().Append(kFileName1));
+  base::File sub_dir1_file1(sub_dir1_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path1));
+
+  base::FilePath sub_dir1_file_path2(sub_dir1.GetPath().Append(kFileName2));
+  base::File sub_dir1_file2(sub_dir1_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path2));
+
+  base::FilePath sub_dir1_file_path3(sub_dir1.GetPath().Append(kFileName3));
+  base::File sub_dir1_file3(sub_dir1_file_path3, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path3));
+
+  base::FilePath sub_dir2_file_path1(sub_dir2.GetPath().Append(kFileName1));
+  base::File sub_dir2_file1(sub_dir2_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path1));
+
+  base::FilePath sub_dir2_file_path2(sub_dir2.GetPath().Append(kFileName2));
+  base::File sub_dir2_file2(sub_dir2_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path2));
+
+  expected_files.insert(sub_dir1_file_path1);
+  expected_files.insert(sub_dir1_file_path2);
+  expected_files.insert(sub_dir2_file_path1);
+  expected_files.insert(sub_dir2_file_path2);
+
+  base::FilePath wildcard_path1(
+      temp_dir.GetPath().Append(L"*").Append(L"Filename*"));
+  std::vector<base::FilePath> matches;
+  CollectMatchingPaths(wildcard_path1, &matches);
+  EXPECT_THAT(expected_files, testing::UnorderedElementsAreArray(matches));
+}
+
+TEST(DiskUtilTests, CollectMatchingPathsDriveWildcard) {
+  std::vector<base::FilePath> matches;
+
+  // The drive could not be enumerated, thus no file will exists..
+  base::FilePath wildcard_path1(L"*:\\test");
+  CollectMatchingPaths(wildcard_path1, &matches);
+  EXPECT_TRUE(matches.empty());
+
+  base::FilePath wildcard_path2(L"*:\\");
+  CollectMatchingPaths(wildcard_path2, &matches);
+  EXPECT_TRUE(matches.empty());
+}
+
+TEST(DiskUtilTests, CollectMatchingPathsDirectoryWildcard) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  // Create files and folders under |temp_dir| and add them to |expected_files|.
+  std::set<base::FilePath> expected_files;
+
+  base::ScopedTempDir sub_dir1;
+  ASSERT_TRUE(sub_dir1.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::ScopedTempDir sub_dir2;
+  ASSERT_TRUE(sub_dir2.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::FilePath sub_dir1_file_path1(sub_dir1.GetPath().Append(kFileName1));
+  base::File sub_dir1_file1(sub_dir1_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path1));
+
+  base::FilePath sub_dir1_file_path2(sub_dir1.GetPath().Append(kFileName2));
+  base::File sub_dir1_file2(sub_dir1_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path2));
+
+  base::FilePath sub_dir1_file_path3(sub_dir1.GetPath().Append(kFileName3));
+  base::File sub_dir1_file3(sub_dir1_file_path3, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path3));
+
+  base::FilePath sub_dir2_file_path1(sub_dir2.GetPath().Append(kFileName1));
+  base::File sub_dir2_file1(sub_dir2_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path1));
+
+  base::FilePath sub_dir2_file_path2(sub_dir2.GetPath().Append(kFileName2));
+  base::File sub_dir2_file2(sub_dir2_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path2));
+
+  expected_files.insert(sub_dir1_file_path1);
+  expected_files.insert(sub_dir2_file_path1);
+  base::FilePath wildcard_path3(
+      temp_dir.GetPath().Append(L"*").Append(kFileName1));
+  std::vector<base::FilePath> matches;
+  CollectMatchingPaths(wildcard_path3, &matches);
+  EXPECT_THAT(expected_files, testing::UnorderedElementsAreArray(matches));
+}
+
+TEST(DiskUtilTests, CollectMatchingPathsMultipleFileWildcards) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::ScopedTempDir sub_dir1;
+  ASSERT_TRUE(sub_dir1.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::ScopedTempDir sub_dir2;
+  ASSERT_TRUE(sub_dir2.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::FilePath sub_dir1_file_path1(sub_dir1.GetPath().Append(kFileName1));
+  base::File sub_dir1_file1(sub_dir1_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path1));
+
+  base::FilePath sub_dir1_file_path2(sub_dir1.GetPath().Append(kFileName2));
+  base::File sub_dir1_file2(sub_dir1_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path2));
+
+  base::FilePath sub_dir1_file_path3(sub_dir1.GetPath().Append(kFileName3));
+  base::File sub_dir1_file3(sub_dir1_file_path3, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path3));
+
+  base::FilePath sub_dir2_file_path1(sub_dir2.GetPath().Append(kFileName1));
+  base::File sub_dir2_file1(sub_dir2_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path1));
+
+  base::FilePath sub_dir2_file_path2(sub_dir2.GetPath().Append(kFileName2));
+  base::File sub_dir2_file2(sub_dir2_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path2));
+
+  // Create files and folders under |temp_dir| and add them to |expected_files|.
+  std::set<base::FilePath> expected_files;
+  expected_files.insert(sub_dir1_file_path3);
+  base::FilePath wildcard_path4(
+      temp_dir.GetPath().Append(L"*").Append(L"*Third*"));
+  std::vector<base::FilePath> matches;
+  CollectMatchingPaths(wildcard_path4, &matches);
+  EXPECT_THAT(expected_files, testing::UnorderedElementsAreArray(matches));
+}
+
+TEST(DiskUtilTests, CollectMatchingPathsNoWildcards) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::ScopedTempDir sub_dir;
+  ASSERT_TRUE(sub_dir.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::FilePath sub_dir_file_path1(sub_dir.GetPath().Append(kFileName1));
+  base::File sub_dir_file1(sub_dir_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir_file_path1));
+
+  base::FilePath sub_dir_file_path2(sub_dir.GetPath().Append(kFileName2));
+  base::File sub_dir_file2(sub_dir_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir_file_path2));
+
+  base::FilePath sub_dir_file_path3(sub_dir.GetPath().Append(kFileName3));
+  base::File sub_dir_file3(sub_dir_file_path3, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir_file_path3));
+
+  // Create files and folders under |temp_dir| and add them to |expected_files|.
+  std::vector<base::FilePath> matches;
+
+  base::FilePath no_wildcard_path(sub_dir.GetPath());
+  CollectMatchingPaths(no_wildcard_path, &matches);
+  EXPECT_EQ(1UL, matches.size());
+  EXPECT_NE(matches.end(),
+            std::find(matches.begin(), matches.end(), sub_dir.GetPath()));
+}
+
+TEST(DiskUtilTests, CollectExecutableMatchingPaths) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::FilePath subfolder1_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub1",
+                                            &subfolder1_path));
+
+  base::FilePath subfolder2_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub2",
+                                            &subfolder2_path));
+
+  base::FilePath subfolder3_path(subfolder2_path.Append(L"folder.exe"));
+  ASSERT_TRUE(base::CreateDirectory(subfolder3_path));
+
+  base::FilePath file_path1(subfolder1_path.Append(L"dummy1.exe"));
+  base::FilePath file_path2(subfolder1_path.Append(L"dummy2.exe"));
+  base::FilePath file_path3(subfolder2_path.Append(L"dummy3.exe"));
+  base::FilePath file_path4(subfolder2_path.Append(L"dummy4.exe"));
+  base::FilePath file_path5(subfolder2_path.Append(L"info.exe.txt"));
+  base::FilePath file_path6(subfolder3_path.Append(L"bad-mad.exe"));
+
+  CreateFileWithContent(file_path1, kFileContent1, sizeof(kFileContent1));
+  CreateFileWithContent(file_path2, kFileContent2, sizeof(kFileContent2));
+  CreateFileWithContent(file_path3, kFileContent3, sizeof(kFileContent3));
+  CreateFileWithContent(file_path4, kFileContent1, sizeof(kFileContent1));
+  CreateFileWithContent(file_path5, kFileContent2, sizeof(kFileContent2));
+  CreateFileWithContent(file_path6, kFileContent2, sizeof(kFileContent2));
+
+  base::FilePath wildcard_path(temp_dir.GetPath().Append(L"*\\*.exe"));
+  std::vector<base::FilePath> executable_matches;
+  CollectMatchingPaths(wildcard_path, &executable_matches);
+
+  EXPECT_THAT(executable_matches,
+              testing::ElementsAre(file_path1, file_path2, file_path3,
+                                   file_path4, subfolder3_path));
+}
+
+TEST(DiskUtilTests, CollectMultipleDotWildcardsMatchingPaths) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::FilePath subfolder1_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub1",
+                                            &subfolder1_path));
+
+  base::FilePath subfolder2_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub2",
+                                            &subfolder2_path));
+
+  base::FilePath subfolder3_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(subfolder2_path, L"folder.exe",
+                                            &subfolder3_path));
+
+  base::FilePath file_path1(subfolder1_path.Append(L"dummy1.tar.gz"));
+  base::FilePath file_path2(subfolder1_path.Append(L"dummy2.12.exe"));
+  base::FilePath file_path3(subfolder2_path.Append(L"dummy3.tar.gz"));
+  base::FilePath file_path4(subfolder2_path.Append(L"dummy4.12.exe"));
+  base::FilePath file_path5(subfolder2_path.Append(L"info.tar.gz.txt"));
+  base::FilePath file_path6(subfolder3_path.Append(L"bad-mad.exe"));
+
+  CreateFileWithContent(file_path1, kFileContent1, sizeof(kFileContent1));
+  CreateFileWithContent(file_path2, kFileContent2, sizeof(kFileContent2));
+  CreateFileWithContent(file_path3, kFileContent3, sizeof(kFileContent3));
+  CreateFileWithContent(file_path4, kFileContent1, sizeof(kFileContent1));
+  CreateFileWithContent(file_path5, kFileContent2, sizeof(kFileContent2));
+  CreateFileWithContent(file_path6, kFileContent2, sizeof(kFileContent2));
+
+  base::FilePath wildcard_path_tar_gz(
+      temp_dir.GetPath().Append(L"*\\*.tar.gz"));
+  std::vector<base::FilePath> executable_matches_tar_gz;
+  CollectMatchingPaths(wildcard_path_tar_gz, &executable_matches_tar_gz);
+
+  EXPECT_THAT(executable_matches_tar_gz,
+              testing::ElementsAre(file_path1, file_path3));
+
+  base::FilePath wildcard_path_all(temp_dir.GetPath().Append(L"*\\*.*.*"));
+  std::vector<base::FilePath> executable_matches_all;
+  CollectMatchingPaths(wildcard_path_all, &executable_matches_all);
+
+  EXPECT_THAT(executable_matches_all,
+              testing::ElementsAre(file_path1, file_path2, file_path3,
+                                   file_path4, file_path5));
+}
+
+TEST(DiskUtilTests, CollectEmptyDirMatchingPaths) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::FilePath subfolder1_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub1",
+                                            &subfolder1_path));
+
+  base::FilePath subfolder2_path;
+  ASSERT_TRUE(base::CreateTemporaryDirInDir(temp_dir.GetPath(), L"sub2",
+                                            &subfolder2_path));
+
+  base::FilePath wildcard_path1(temp_dir.GetPath().Append(L"*\\dummy.exe"));
+  std::vector<base::FilePath> executable_matches;
+  CollectMatchingPaths(wildcard_path1, &executable_matches);
+  EXPECT_TRUE(executable_matches.empty());
+}
+
+TEST(DiskUtilTests, CollectCumulativeMatchingPaths) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  base::ScopedTempDir sub_dir1;
+  ASSERT_TRUE(sub_dir1.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  // Create files and folders under |sub_dirX| and add them to |expected_files|.
+  std::set<base::FilePath> expected_files;
+  base::FilePath sub_dir1_file_path1(sub_dir1.GetPath().Append(kFileName1));
+  base::File sub_dir1_file1(sub_dir1_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path1));
+  expected_files.insert(sub_dir1_file_path1);
+
+  base::FilePath sub_dir1_file_path2(sub_dir1.GetPath().Append(kFileName2));
+  base::File sub_dir1_file2(sub_dir1_file_path2, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir1_file_path2));
+  expected_files.insert(sub_dir1_file_path2);
+
+  base::ScopedTempDir sub_dir2;
+  ASSERT_TRUE(sub_dir2.CreateUniqueTempDirUnderPath(temp_dir.GetPath()));
+
+  base::FilePath sub_dir2_file_path1(sub_dir2.GetPath().Append(kFileName1));
+  base::File sub_dir2_file1(sub_dir2_file_path1, base::File::FLAG_CREATE);
+  ASSERT_TRUE(base::PathExists(sub_dir2_file_path1));
+  expected_files.insert(sub_dir2_file_path1);
+
+  base::FilePath wildcard_path1(sub_dir1.GetPath().Append(L"*"));
+  std::vector<base::FilePath> matches;
+  CollectMatchingPaths(wildcard_path1, &matches);
+  base::FilePath wildcard_path2(sub_dir2.GetPath().Append(L"*"));
+  CollectMatchingPaths(wildcard_path2, &matches);
+  EXPECT_THAT(expected_files, testing::UnorderedElementsAreArray(matches));
+}
+
+TEST(DiskUtilTests, PathHasActiveExtension) {
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.exe")));
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.exe  ")));
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.jpg.exe")));
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.lnk")));
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file")));
+  EXPECT_TRUE(PathHasActiveExtension(base::FilePath(L"C:\\file.lnk::$DATA")));
+
+  EXPECT_FALSE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.wvm")));
+  EXPECT_FALSE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.jpg")));
+  EXPECT_FALSE(PathHasActiveExtension(base::FilePath(L"C:\\uws\\file.jpg ")));
+  EXPECT_FALSE(PathHasActiveExtension(base::FilePath(L"C:\\file.txt::$DATA")));
+}
+
+TEST(DiskUtilTests, HasDosExecutableHeader) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath executable = temp.GetPath().Append(L"executable.txt");
+  const char kExecutableFileContents[] = "MZ I am executable";
+  chrome_cleaner::CreateFileWithContent(executable, kExecutableFileContents,
+                                        sizeof(kExecutableFileContents));
+  EXPECT_TRUE(HasDosExecutableHeader(executable));
+
+  base::FilePath non_executable = temp.GetPath().Append(L"text.exe");
+  const char kTextFileContents[] = "I am benign text";
+  chrome_cleaner::CreateFileWithContent(non_executable, kTextFileContents,
+                                        sizeof(kTextFileContents));
+  EXPECT_FALSE(HasDosExecutableHeader(non_executable));
+}
+
+TEST(DiskUtilTests, HasAlternateFileStream) {
+  EXPECT_FALSE(HasAlternateFileStream(base::FilePath(L"C:\\file.txt")));
+  EXPECT_FALSE(HasAlternateFileStream(base::FilePath(L"C:\\file.txt::$DATA")));
+
+  EXPECT_TRUE(HasAlternateFileStream(base::FilePath(L"C:\\file.txt:stream")));
+  EXPECT_TRUE(
+      HasAlternateFileStream(base::FilePath(L"C:\\file.txt:stream:$TYPE")));
+}
+
+TEST(DiskUtilTests, ExpandEnvPath) {
+  ASSERT_TRUE(
+      ::SetEnvironmentVariable(L"CLEANER_TEST_VAR", L"CLEANER_TEST_VALUE"));
+  ASSERT_TRUE(::SetEnvironmentVariable(L"ROOT_TEST_VAR", L"c:\\root"));
+  base::FilePath test_path1(L"C:\\%CLEANER_TEST_VAR%\\test\\foo");
+  base::FilePath test_path2(L"%ROOT_TEST_VAR%\\test\\foo");
+  base::FilePath test_path3(
+      L"C:\\aa%CLEANER_TEST_VAR%bb\\test\\%%CLEANER_TEST_VAR%%");
+
+  base::FilePath expanded_path;
+  ExpandEnvPath(test_path1, &expanded_path);
+  EXPECT_EQ(L"C:\\CLEANER_TEST_VALUE\\test\\foo", expanded_path.value());
+
+  ExpandEnvPath(test_path2, &expanded_path);
+  EXPECT_EQ(L"c:\\root\\test\\foo", expanded_path.value());
+
+  ExpandEnvPath(test_path3, &expanded_path);
+  EXPECT_EQ(L"C:\\aaCLEANER_TEST_VALUEbb\\test\\%CLEANER_TEST_VALUE%",
+            expanded_path.value());
+}
+
+TEST(DiskUtilTests, ExpandWow64Path) {
+  base::ScopedPathOverride windows_override(
+      CsidlToPathServiceKey(CSIDL_WINDOWS));
+  base::FilePath windows_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_WINDOWS),
+                                     &windows_folder));
+
+  base::FilePath system_folder(windows_folder.Append(L"system32"));
+  base::ScopedPathOverride system_override(CsidlToPathServiceKey(CSIDL_SYSTEM),
+                                           system_folder, true, true);
+
+  base::FilePath native_folder(windows_folder.Append(L"sysnative"));
+  ASSERT_TRUE(base::CreateDirectory(native_folder));
+
+  base::FilePath file_path1(system_folder.Append(kFileName1));
+  base::FilePath file_path2(native_folder.Append(kFileName2));
+  base::FilePath file_path3_system(system_folder.Append(kFileName3));
+  base::FilePath file_path3_native(native_folder.Append(kFileName3));
+  CreateFileWithContent(file_path1, kFileContent1, sizeof(kFileContent1));
+  CreateFileWithContent(file_path2, kFileContent2, sizeof(kFileContent2));
+  CreateFileWithContent(file_path3_system, kFileContent3,
+                        sizeof(kFileContent3));
+  CreateFileWithContent(file_path3_native, kFileContent3,
+                        sizeof(kFileContent3));
+
+  base::FilePath expanded_file1;
+  ExpandWow64Path(file_path1, &expanded_file1);
+  ASSERT_TRUE(PathEqual(expanded_file1, file_path1));
+
+  base::FilePath expanded_file2;
+  ExpandWow64Path(file_path2, &expanded_file2);
+  ASSERT_TRUE(PathEqual(expanded_file2, file_path2));
+
+  base::FilePath expanded_file3;
+  ExpandWow64Path(file_path3_system, &expanded_file3);
+  ASSERT_TRUE(PathEqual(expanded_file3, file_path3_native));
+}
+
+TEST(DiskUtilTests, ComputeDigestSHA256) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  // Check the digest of an non-existing file.
+  base::FilePath file_path1(temp_dir.GetPath().Append(kFileName1));
+  std::string digest1;
+  EXPECT_FALSE(ComputeDigestSHA256(file_path1, &digest1));
+  EXPECT_TRUE(digest1.empty());
+
+  // Create an empty file and validate the digest.
+  base::FilePath file_path2(temp_dir.GetPath().Append(kFileName2));
+  base::File empty_file(file_path2, base::File::FLAG_CREATE);
+  empty_file.Close();
+
+  std::string digest2;
+  EXPECT_TRUE(ComputeDigestSHA256(file_path2, &digest2));
+  EXPECT_STREQ(
+      "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
+      digest2.c_str());
+
+  // Create a file with some content and validate the digest.
+  base::FilePath file_path3(temp_dir.GetPath().Append(kFileName3));
+  base::File valid_file(
+      file_path3, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
+  ASSERT_EQ(sizeof(kFileContent),
+            static_cast<size_t>(valid_file.WriteAtCurrentPos(
+                kFileContent, sizeof(kFileContent))));
+  valid_file.Close();
+
+  std::string digest3;
+  EXPECT_TRUE(ComputeDigestSHA256(file_path3, &digest3));
+  EXPECT_STREQ(
+      "BD283E41A3672B6BDAA574F8BD7176F8BCA95BD81383CDE32AA6D78B1DB0E371",
+      digest3.c_str());
+}
+
+TEST(DiskUtilTests, ComputeDigestSHA256OnBigFile) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  struct DigestInfo {
+    size_t size;
+    const char* digest;
+  } digests[] = {
+      {1, "CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB"},
+      {2, "FB8E20FC2E4C3F248C60C39BD652F3C1347298BB977B8B4D5903B85055620603"},
+      {3, "BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD"},
+      {100, "2AC123DCD759EEBABFA1B17C0332B88B3815EF3F95FBFCCEB5FAC07E233235BD"},
+      {128, "6C05BE2C4268843AE47E68E611277CE62C02153F2F4D2E1E2A1A4B44F766CF74"},
+      {1000,
+       "915E53A44C18B19BB06BA5B3F5FCAF1DC4651E8404C63425CFC6174E74659D87"},
+      {1023,
+       "6A6EE128AAC6B98D2697EED0A912AE264603D046B3CBFD5E7EA1D01C865474D9"},
+      {1024,
+       "DBA4A6315B76548B7A4DD079EF6AA29A7B34FA8B92C11668473441715C5F0AF5"},
+      {1025,
+       "2B4B65474580781B4DC0AB66B9A0F39B869DE5A44CF26DBA22AC0496760D4230"},
+      {4095,
+       "7413609B553226A9A8A3203A82062111DC1F98C24163E303774F27E4F615BFB2"},
+      {4096,
+       "BC45051AC426475F459EC0B0C88A6646D037B8DFB1B9FA3CA3EF9203CE33E283"},
+      {4097,
+       "A9145EB3812CA8F11A014029FEE1854FABB76D2FFEA680D0875F78FA786F58B8"},
+      {10000,
+       "5B92F844F0ED521B75688F4B6FF58E127711709613589EB6EC88FDFBBDC7DC63"}};
+
+  for (size_t offset = 0; offset < base::size(digests); ++offset) {
+    DigestInfo* info = &digests[offset];
+    DCHECK(info);
+
+    // Create a file and write some content into it.
+    base::FilePath file_path(temp_dir.GetPath().Append(kFileName1));
+    base::File valid_file(
+        file_path, base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE);
+    for (size_t position = 0; position < info->size; ++position) {
+      char c = 'a' + (position % 26);
+      ASSERT_EQ(1, valid_file.WriteAtCurrentPos(&c, 1));
+    }
+    valid_file.Close();
+
+    std::string digest;
+    EXPECT_TRUE(ComputeDigestSHA256(file_path, &digest));
+    EXPECT_STREQ(info->digest, digest.c_str());
+  }
+}
+
+TEST(DiskUtilTests, GetLayeredServiceProviders) {
+  // Make sure that running the OS implementation doesn't crash/dcheck.
+  LSPPathToGUIDs providers;
+  GetLayeredServiceProviders(LayeredServiceProviderWrapper(), &providers);
+  providers.clear();
+
+  // Make sure an empty test provider returns nothing
+  TestLayeredServiceProvider lsp;
+  GetLayeredServiceProviders(lsp, &providers);
+  EXPECT_TRUE(providers.empty());
+
+  // Now try with a couple of providers
+  base::FilePath file_path1 = base::FilePath(kFileName1);
+  base::FilePath file_path2 = base::FilePath(kFileName2);
+  lsp.AddProvider(kGUID1, file_path1);
+  lsp.AddProvider(kGUID2, file_path2);
+  lsp.AddProvider(kGUID3, file_path2);
+
+  GetLayeredServiceProviders(lsp, &providers);
+
+  EXPECT_EQ(2UL, providers.size());
+  EXPECT_NE(providers.end(), providers.find(file_path1));
+  EXPECT_NE(providers.end(), providers.find(file_path2));
+  EXPECT_EQ(1UL, providers.find(file_path1)->second.size());
+  EXPECT_NE(providers.find(file_path1)->second.end(),
+            providers.find(file_path1)->second.find(kGUID1));
+  EXPECT_EQ(2UL, providers.find(file_path2)->second.size());
+  EXPECT_NE(providers.find(file_path2)->second.end(),
+            providers.find(file_path2)->second.find(kGUID2));
+  EXPECT_NE(providers.find(file_path2)->second.end(),
+            providers.find(file_path2)->second.find(kGUID3));
+}
+
+TEST(DiskUtilTests, DeleteFileFromTempProcess) {
+  base::FilePath test_file;
+  base::ScopedTempDir test_dir;
+  ASSERT_TRUE(test_dir.CreateUniqueTempDir());
+  base::CreateTemporaryFileInDir(test_dir.GetPath(), &test_file);
+  ASSERT_TRUE(base::PathExists(test_file));
+  base::WriteFile(test_file, "foo", 3);
+  base::win::ScopedHandle process_handle;
+  EXPECT_TRUE(DeleteFileFromTempProcess(test_file, 0, &process_handle));
+  ASSERT_NE(static_cast<HANDLE>(nullptr), process_handle.Get());
+  DWORD wait_result = ::WaitForSingleObject(
+      process_handle.Get(),
+      TestTimeouts::action_max_timeout().InMilliseconds());
+  process_handle.Close();
+  EXPECT_EQ(WAIT_OBJECT_0, wait_result);
+  EXPECT_FALSE(base::PathExists(test_file));
+  EXPECT_FALSE(DeleteFileFromTempProcess(test_file, 0, &process_handle));
+  EXPECT_FALSE(process_handle.IsValid());
+}
+
+TEST(DiskUtilTests, ShortPathContainsCaseInsensitive) {
+  base::ScopedTempDir scoped_temp_dir;
+  ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir());
+  base::FilePath short_name_path;
+  CreateFileAndGetShortName(scoped_temp_dir.GetPath().Append(kLongFileName1),
+                            &short_name_path);
+
+  // Make sure the test strings would fail with the previous API.
+  ASSERT_FALSE(
+      String16ContainsCaseInsensitive(short_name_path.value(), kLongFileName1));
+
+  // Find the long name from the shorten version.
+  EXPECT_TRUE(ShortPathContainsCaseInsensitive(short_name_path.value(),
+                                               kLongFileName1));
+
+  // Make sure the shorten version can also be found.
+  EXPECT_TRUE(ShortPathContainsCaseInsensitive(short_name_path.value(),
+                                               short_name_path.value()));
+
+  // Validate the not found case.
+  EXPECT_FALSE(ShortPathContainsCaseInsensitive(short_name_path.value(),
+                                                kLongFileName2));
+
+  // Validate a non shorten case.
+  EXPECT_TRUE(
+      ShortPathContainsCaseInsensitive(kLongFileName2, kLongFileName2Subset));
+}
+
+TEST(DiskUtilTests, PathEqual) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath long_path1(temp_dir.GetPath().Append(kLongFileName1));
+  base::FilePath long_path2(temp_dir.GetPath().Append(kLongFileName2));
+  base::FilePath long_path1_upper(base::ToUpperASCII(long_path1.value()));
+
+  base::FilePath short_path1;
+  CreateFileAndGetShortName(long_path1, &short_path1);
+
+  // Same paths are equal.
+  EXPECT_TRUE(PathEqual(long_path1, long_path1));
+  EXPECT_TRUE(PathEqual(long_path2, long_path2));
+  // Same paths with different case are equal.
+  EXPECT_TRUE(PathEqual(long_path1, long_path1_upper));
+  // Different path are not equal.
+  EXPECT_FALSE(PathEqual(long_path1, long_path2));
+
+  // Short and long path to the same file are equal.
+  EXPECT_TRUE(PathEqual(short_path1, long_path1));
+  // Short and long path to different files are not equal.
+  EXPECT_FALSE(PathEqual(short_path1, long_path2));
+}
+
+TEST(DiskUtilTests, GetAppDataProductDirectory) {
+  base::ScopedPathOverride appdata_override(
+      CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA));
+  base::FilePath appdata_dir;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_dir));
+
+  base::FilePath product_folder;
+  EXPECT_TRUE(GetAppDataProductDirectory(&product_folder));
+  EXPECT_TRUE(base::DirectoryExists(product_folder));
+  EXPECT_TRUE(PathEqual(appdata_dir, product_folder.DirName().DirName()));
+}
+
+TEST(DiskUtilTests, ZoneIdentifier) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath path(temp_dir.GetPath().Append(kTestProcessExecutableName));
+
+  if (!DoesVolumeSupportNamedStreams(temp_dir.GetPath())) {
+    LOG(ERROR) << "Skip ZoneIdentifier : alternate streams not supported.";
+    return;
+  }
+
+  // Copy the test_process executable in a temporary folder.
+  base::FilePath executable_path;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &executable_path));
+  base::FilePath source_path =
+      executable_path.Append(kTestProcessExecutableName);
+  ASSERT_TRUE(base::CopyFile(source_path, path));
+
+  // Overwrite the ZoneIdentifier.
+  EXPECT_FALSE(HasZoneIdentifier(path));
+  EXPECT_TRUE(OverwriteZoneIdentifier(path));
+  EXPECT_TRUE(HasZoneIdentifier(path));
+
+  // Validate the content of the Zone.Identifier stream.
+  base::FilePath stream_path(path.value() + L":Zone.Identifier");
+  std::string content;
+  ASSERT_TRUE(base::ReadFileToString(stream_path, &content));
+  EXPECT_EQ("[ZoneTransfer]\r\nZoneId=0\r\n", content);
+}
+
+TEST(DiskUtilTests, ZoneIdentifierWhenProcessIsRunning) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  if (!DoesVolumeSupportNamedStreams(temp_dir.GetPath())) {
+    LOG(ERROR) << "Skip ZoneIdentifier : alternate streams not supported.";
+    return;
+  }
+
+  // Copy the test_process executable in a temporary folder.
+  base::FilePath executable_path;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_EXE, &executable_path));
+  base::FilePath source_exe_path(
+      executable_path.Append(kTestProcessExecutableName));
+  base::FilePath target_exe_path(
+      temp_dir.GetPath().Append(kTestProcessExecutableName));
+  ASSERT_TRUE(base::CopyFile(source_exe_path, target_exe_path));
+
+  // Launch the test_process and wait it's completion. The process must set its
+  // zone identifier.
+  EXPECT_FALSE(HasZoneIdentifier(target_exe_path));
+  ASSERT_FALSE(IsProcessRunning(kTestProcessExecutableName));
+  ASSERT_TRUE(LaunchTestProcess(target_exe_path.value().c_str(),
+                                kTestForceOverwriteZoneIdentifier, false));
+  EXPECT_TRUE(WaitForProcessesStopped(kTestProcessExecutableName));
+  EXPECT_TRUE(HasZoneIdentifier(target_exe_path));
+
+  // Validate the content of the Zone.Identifier stream.
+  base::FilePath stream_path(target_exe_path.value() + L":Zone.Identifier");
+  std::string content;
+  ASSERT_TRUE(base::ReadFileToString(stream_path, &content));
+  EXPECT_EQ("[ZoneTransfer]\r\nZoneId=0\r\n", content);
+}
+
+TEST(DiskUtilTests,
+     ExtractExecutablePathFromRegistryContentWithSysnativeReplacement) {
+  base::FilePath system_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_SYSTEM),
+                                     &system_folder));
+
+  base::FilePath native_folder(system_folder.DirName().Append(L"sysnative"));
+  // Only run this test on 64-bits Windows with 32-bits process.
+  if (base::PathExists(native_folder)) {
+    base::ScopedTempDir temp_dir;
+    ASSERT_TRUE(temp_dir.CreateUniqueTempDirUnderPath(native_folder));
+
+    base::FilePath program_path, spaced_program_path;
+    CreateProgramPathsAndFiles(temp_dir.GetPath(), &program_path,
+                               &spaced_program_path);
+    const base::FilePath program_paths[] = {program_path, spaced_program_path};
+    for (const auto& program_path : program_paths) {
+      // convert C:\\Windows\sysnative\scoped_folder\folder1234\file1 into
+      // C:\\Windows\system32\scoped_folder\folder1234\file1
+      base::FilePath program_path_system =
+          system_folder.Append(program_path.DirName().DirName().BaseName())
+              .Append(program_path.DirName().BaseName())
+              .Append(program_path.BaseName());
+      EXPECT_TRUE(ExtractExecutablePathFromMockRegistryAndExpect(
+          program_path_system.value(), program_path));
+    }
+  }
+}
+
+TEST(DiskUtilTests, ExtractExecutablePathFromRegistryContentWithEnvVariable) {
+  // This test expects files to be placed in %TEMP% and not anywhere else
+  // ScopedTempDir might decide to put them.
+  base::string16 temp_str;
+  ASSERT_NE(0U, ::GetEnvironmentVariableW(
+                    L"TEMP", ::base::WriteInto(&temp_str, MAX_PATH), MAX_PATH))
+      << logging::SystemErrorCodeToString(logging::GetLastSystemErrorCode());
+  base::FilePath temp_path(temp_str);
+  ASSERT_TRUE(base::PathExists(temp_path));
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDirUnderPath(temp_path));
+
+  base::FilePath program_path, spaced_program_path;
+  CreateProgramPathsAndFiles(temp_dir.GetPath(), &program_path,
+                             &spaced_program_path);
+  const base::FilePath program_paths[] = {program_path, spaced_program_path};
+
+  for (const auto& program_path : program_paths) {
+    // Convert
+    // "C:\Users\$USER\AppData\Local\Temp\scoped_dir1234\folder6788\A111.tmp"
+    // into "scoped_dir1234\folder6789\A111.tmp"
+    base::FilePath relative_program_path =
+        program_path.DirName()
+            .DirName()
+            .BaseName()
+            .Append(program_path.DirName().BaseName())
+            .Append(program_path.BaseName());
+    const auto program_path_with_var =
+        base::StrCat({L"%TEMP%\\", relative_program_path.value()});
+
+    EXPECT_TRUE(ExtractExecutablePathFromMockRegistryAndExpect(
+        program_path_with_var, program_path));
+  }
+}
+
+TEST(DiskUtilTests, ExtractExecutablePathFromRegistryContent) {
+  // Create the executable to be recognized.
+  base::ScopedTempDir temp_dir;
+
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath program_path, spaced_program_path;
+  CreateProgramPathsAndFiles(temp_dir.GetPath(), &program_path,
+                             &spaced_program_path);
+  const base::FilePath program_paths[] = {program_path, spaced_program_path};
+
+  for (const auto& program_path : program_paths) {
+    EXPECT_TRUE(ExtractExecutablePathFromMockRegistryAndExpect(
+        program_path.value(), program_path));
+  }
+}
+
+TEST(DiskUtilTests, FilePathLess) {
+  base::FilePath path_a(L"c:\\a");
+  base::FilePath path_upper_a(L"c:\\A");
+  base::FilePath path_b(L"c:\\b");
+  FilePathLess file_path_less;
+  EXPECT_TRUE(file_path_less(path_a, path_b));
+  EXPECT_TRUE(file_path_less(path_upper_a, path_b));
+  EXPECT_FALSE(file_path_less(path_b, path_a));
+  EXPECT_FALSE(file_path_less(path_a, path_upper_a));
+  EXPECT_FALSE(file_path_less(path_upper_a, path_a));
+
+  std::map<base::FilePath, int, FilePathLess> collection;
+  collection[path_a] = 0;
+  EXPECT_NE(collection.find(path_a), collection.end());
+  EXPECT_NE(collection.find(path_upper_a), collection.end());
+  EXPECT_EQ(collection.find(path_b), collection.end());
+}
+
+TEST(DiskUtilTests, RetrieveDetailedFileInformation) {
+  base::ScopedPathOverride appdata_override(
+      CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA));
+  base::FilePath appdata_folder;
+
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_folder));
+
+  base::FilePath temp_file(appdata_folder.Append(L"DUMMY.inactive"));
+  CreateFileWithContent(temp_file, kFileContent1, sizeof(kFileContent1));
+
+  bool whitelisted = false;
+  internal::FileInformation file_information;
+  RetrieveDetailedFileInformation(temp_file, &file_information, &whitelisted);
+
+  EXPECT_FALSE(whitelisted);
+
+  base::string16 sanitized_path = SanitizePath(temp_file);
+
+  EXPECT_EQ(sanitized_path, file_information.path);
+  EXPECT_FALSE(file_information.creation_date.empty());
+  EXPECT_FALSE(file_information.last_modified_date.empty());
+  EXPECT_FALSE(file_information.active_file);
+  EXPECT_EQ(kFileContentDigests[4], file_information.sha256);
+  EXPECT_EQ(sizeof(kFileContent1), static_cast<size_t>(file_information.size));
+  // The next fields are parsed from PE headers so they won't exist.
+  EXPECT_TRUE(file_information.company_name.empty());
+  EXPECT_TRUE(file_information.company_short_name.empty());
+  EXPECT_TRUE(file_information.product_name.empty());
+  EXPECT_TRUE(file_information.product_short_name.empty());
+  EXPECT_TRUE(file_information.internal_name.empty());
+  EXPECT_TRUE(file_information.original_filename.empty());
+  EXPECT_TRUE(file_information.file_description.empty());
+  EXPECT_TRUE(file_information.file_version.empty());
+}
+
+TEST(DiskUtilTests, RetrieveDetailedFileInformationNoFile) {
+  base::FilePath appdata_folder;
+
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_folder));
+
+  base::FilePath non_existent_file(
+      appdata_folder.DirName().Append(L"abcd1234CCT1234.tmp"));
+
+  bool whitelisted = false;
+  internal::FileInformation file_information;
+  RetrieveDetailedFileInformation(non_existent_file, &file_information,
+                                  &whitelisted);
+
+  EXPECT_FALSE(whitelisted);
+  EXPECT_TRUE(file_information.path.empty());
+  EXPECT_TRUE(file_information.creation_date.empty());
+  EXPECT_TRUE(file_information.last_modified_date.empty());
+  EXPECT_FALSE(file_information.active_file);
+  EXPECT_TRUE(file_information.sha256.empty());
+  EXPECT_EQ(0, file_information.size);
+  EXPECT_TRUE(file_information.company_name.empty());
+  EXPECT_TRUE(file_information.company_short_name.empty());
+  EXPECT_TRUE(file_information.product_name.empty());
+  EXPECT_TRUE(file_information.product_short_name.empty());
+  EXPECT_TRUE(file_information.internal_name.empty());
+  EXPECT_TRUE(file_information.original_filename.empty());
+  EXPECT_TRUE(file_information.file_description.empty());
+  EXPECT_TRUE(file_information.file_version.empty());
+}
+
+TEST(DiskUtilTests, RetrieveDetailedFileInformationWhitelisted) {
+  bool whitelisted = false;
+  internal::FileInformation file_information;
+
+  RetrieveDetailedFileInformation(GetSampleDLLPath(), &file_information,
+                                  &whitelisted,
+                                  base::BindOnce(&WhitelistSampleDLL));
+
+  EXPECT_TRUE(whitelisted);
+  EXPECT_TRUE(file_information.path.empty());
+  EXPECT_TRUE(file_information.creation_date.empty());
+  EXPECT_TRUE(file_information.last_modified_date.empty());
+  EXPECT_FALSE(file_information.active_file);
+  EXPECT_TRUE(file_information.sha256.empty());
+  EXPECT_EQ(0, file_information.size);
+  EXPECT_TRUE(file_information.company_name.empty());
+  EXPECT_TRUE(file_information.company_short_name.empty());
+  EXPECT_TRUE(file_information.product_name.empty());
+  EXPECT_TRUE(file_information.product_short_name.empty());
+  EXPECT_TRUE(file_information.internal_name.empty());
+  EXPECT_TRUE(file_information.original_filename.empty());
+  EXPECT_TRUE(file_information.file_description.empty());
+  EXPECT_TRUE(file_information.file_version.empty());
+}
+
+TEST(DiskUtilTests, RetrieveBasicFileInformation) {
+  base::ScopedPathOverride appdata_override(
+      CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA));
+  base::FilePath appdata_folder;
+
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_folder));
+
+  base::FilePath temp_file(appdata_folder.Append(L"DUMMY.exe"));
+  CreateFileWithContent(temp_file, kFileContent1, sizeof(kFileContent1));
+
+  internal::FileInformation file_information;
+  RetrieveBasicFileInformation(temp_file, &file_information);
+
+  // The expected file path value should be sanitized.
+  EXPECT_EQ(SanitizePath(temp_file), file_information.path);
+  EXPECT_FALSE(file_information.creation_date.empty());
+  EXPECT_FALSE(file_information.last_modified_date.empty());
+  EXPECT_EQ(sizeof(kFileContent1), static_cast<size_t>(file_information.size));
+  EXPECT_TRUE(file_information.active_file);
+  // The next fields are not included in basic file information.
+  EXPECT_TRUE(file_information.sha256.empty());
+  EXPECT_TRUE(file_information.company_name.empty());
+  EXPECT_TRUE(file_information.company_short_name.empty());
+  EXPECT_TRUE(file_information.product_name.empty());
+  EXPECT_TRUE(file_information.product_short_name.empty());
+  EXPECT_TRUE(file_information.internal_name.empty());
+  EXPECT_TRUE(file_information.original_filename.empty());
+  EXPECT_TRUE(file_information.file_description.empty());
+  EXPECT_TRUE(file_information.file_version.empty());
+}
+
+TEST(DiskUtilTests, RetrieveBasicFileInformationNoFile) {
+  base::FilePath appdata_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_folder));
+
+  base::FilePath non_existent_file(
+      appdata_folder.DirName().Append(L"abcd1234CCT1234.tmp"));
+
+  internal::FileInformation file_information;
+  RetrieveBasicFileInformation(non_existent_file, &file_information);
+
+  EXPECT_TRUE(file_information.path.empty());
+  EXPECT_TRUE(file_information.creation_date.empty());
+  EXPECT_TRUE(file_information.last_modified_date.empty());
+  EXPECT_FALSE(file_information.active_file);
+  EXPECT_TRUE(file_information.sha256.empty());
+  EXPECT_EQ(0, file_information.size);
+  EXPECT_TRUE(file_information.company_name.empty());
+  EXPECT_TRUE(file_information.company_short_name.empty());
+  EXPECT_TRUE(file_information.product_name.empty());
+  EXPECT_TRUE(file_information.product_short_name.empty());
+  EXPECT_TRUE(file_information.internal_name.empty());
+  EXPECT_TRUE(file_information.original_filename.empty());
+  EXPECT_TRUE(file_information.file_description.empty());
+  EXPECT_TRUE(file_information.file_version.empty());
+}
+
+TEST(DiskUtilTests, FileInformationToString) {
+  base::string16 display_str = FileInformationToString(kFileInformation1);
+  EXPECT_EQ(kFileInformation1ExpectedString, display_str);
+}
+
+TEST(DiskUtilTests, FileInformationToStringEmpty) {
+  internal::FileInformation file_information;
+  EXPECT_TRUE(FileInformationToString(file_information).empty());
+}
+
+TEST(DiskUtilTests, TryToExpandPath_NonSystemNativePath) {
+  base::ScopedPathOverride appdata_override(
+      CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA));
+  base::FilePath appdata_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_LOCAL_APPDATA),
+                                     &appdata_folder));
+
+  base::FilePath non_existing_file(
+      appdata_folder.DirName().Append(L"non-existing-file.tmp"));
+  base::FilePath unused_expanded_path;
+  ASSERT_FALSE(TryToExpandPath(non_existing_file, &unused_expanded_path));
+
+  base::FilePath existing_file(appdata_folder.Append(L"existing-file.tmp"));
+  CreateFileWithContent(existing_file, kFileContent1, sizeof(kFileContent1));
+  base::FilePath expanded_path;
+  ASSERT_TRUE(TryToExpandPath(existing_file, &expanded_path));
+  ASSERT_EQ(existing_file.value(), expanded_path.value());
+
+  // TODO: Figure out how to test paths in C:\Windows\System32.
+}
+
+TEST(DiskUtilTests, TruncateLogFileToTail_FindsNewline) {
+  const char kFileContents[] = "File with utf8 \n\xe2\x82\xac \ntail";
+  const int kFileSize = strlen(kFileContents);
+  const char kTailContents[] = "\ntail";
+  const int kTailSize = strlen(kTailContents);
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath file_path = temp_dir.GetPath().Append(L"file.txt");
+  ASSERT_EQ(kFileSize, base::WriteFile(file_path, kFileContents, kFileSize));
+
+  // The tail threshold lands in the middle of a multi-byte character.
+  TruncateLogFileToTail(file_path, kTailSize + 3);
+
+  int64_t file_size;
+  ASSERT_TRUE(base::GetFileSize(file_path, &file_size));
+  EXPECT_EQ(kTailSize, file_size);
+  std::string tail;
+  ASSERT_TRUE(base::ReadFileToString(file_path, &tail));
+  EXPECT_EQ(kTailContents, tail);
+}
+
+TEST(DiskUtilTests, TruncateLogFileToTail_FileSmallerThanLimit) {
+  const char kFileContents[] = "I am file";
+  const int kFileSize = strlen(kFileContents);
+
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath file_path = temp_dir.GetPath().Append(L"file.txt");
+  ASSERT_EQ(kFileSize, base::WriteFile(file_path, kFileContents, kFileSize));
+
+  TruncateLogFileToTail(file_path, kFileSize * 2);
+
+  int64_t file_size;
+  ASSERT_TRUE(base::GetFileSize(file_path, &file_size));
+  EXPECT_EQ(kFileSize, file_size);
+  std::string tail;
+  ASSERT_TRUE(base::ReadFileToString(file_path, &tail));
+  EXPECT_EQ(kFileContents, tail);
+}
+
+TEST(DiskUtilTests, TruncateLogFileToTail_NotExisting) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+  base::FilePath file_path = temp_dir.GetPath().Append(L"file.txt");
+
+  TruncateLogFileToTail(file_path, 42);
+
+  EXPECT_FALSE(base::PathExists(file_path));
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/os/file_path_sanitization_unittest.cc b/chrome/chrome_cleaner/os/file_path_sanitization_unittest.cc
new file mode 100644
index 0000000..8b46d8c2
--- /dev/null
+++ b/chrome/chrome_cleaner/os/file_path_sanitization_unittest.cc
@@ -0,0 +1,153 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/file_path_sanitization.h"
+
+#include <shlobj.h>
+
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/utf_string_conversions.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+base::string16 FirstComponent(const base::string16& original) {
+  return original.substr(0, original.find(L"\\"));
+}
+
+TEST(FilePathSanitizationTests, NormalizePath) {
+  base::FilePath expected_path =
+      base::FilePath(L"c:\\program files\\desktop.ini");
+  EXPECT_EQ(NormalizePath(base::FilePath(L"C:\\PROGRA~1\\DESKTOP.INI")),
+            expected_path);
+  EXPECT_EQ(NormalizePath(base::FilePath(L"c:\\pRoGrAm FiLeS\\desktop.INI")),
+            expected_path);
+  base::FilePath empty_path;
+  EXPECT_EQ(NormalizePath(empty_path), empty_path);
+}
+
+TEST(FilePathSanitizationTests, NormalizePathUnicode) {
+  EXPECT_EQ(
+      NormalizePath(
+          base::FilePath(L"C:\\\u03b1\u03c1\u03c7\u03b5\u03b9\u03b1 "
+                         L"\u03c0\u03c1\u03bf\u03b3\u03c1"
+                         L"\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2\\u03b5"
+                         L"\u03c0\u03b9\u03c6"
+                         L"\u03ac\u03bd\u03b5\u03b9\u03b1 "
+                         L"\u03b5\u03c1\u03b3\u03b1\u03c3\u03af"
+                         L"\u03b1\u03c2.iNi"))
+          .value(),
+      L"c:\\\u03b1\u03c1\u03c7\u03b5\u03b9\u03b1 \u03c0\u03c1\u03bf\u03b3\u03c1"
+      L"\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2\\u03b5\u03c0\u03b9\u03c6"
+      L"\u03ac\u03bd\u03b5\u03b9\u03b1 \u03b5\u03c1\u03b3\u03b1\u03c3\u03af"
+      L"\u03b1\u03c2.ini");
+}
+TEST(FilePathSanitizationTests, SanitizePath) {
+  base::FilePath programfiles_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_PROGRAM_FILES),
+                                     &programfiles_folder));
+
+  base::FilePath absolute(L"C:\\Dummy\\Dummy.exe");
+  base::string16 result = SanitizePath(absolute);
+  EXPECT_EQ(NormalizePath(absolute).value(), result);
+
+  base::FilePath relative(programfiles_folder.Append(L"Dummy\\Dummy.exe"));
+  base::string16 sanitized_relative = SanitizePath(relative);
+  EXPECT_NE(sanitized_relative, relative.value());
+  EXPECT_EQ(L"CSIDL_PROGRAM_FILES\\dummy\\dummy.exe", sanitized_relative);
+
+  base::FilePath empty_path;
+  EXPECT_EQ(L"", SanitizePath(empty_path));
+}
+
+TEST(FilePathSanitizationTests, SanitizePathConsistency) {
+  // Loop over all the rewrite rules used by sanitize path to make sure all the
+  // rules work correctly. In particular this test verifies each rule is not
+  // masked by another.
+  base::FilePath arbitrary_path = NormalizePath(base::FilePath(L"Desktop.ini"));
+  for (auto* rule = sanitization_internal::rewrite_rules; rule->path != nullptr;
+       ++rule) {
+    base::FilePath expanded_path;
+    base::PathService::Get(rule->id, &expanded_path);
+    expanded_path = expanded_path.Append(arbitrary_path);
+    const auto sanitized_path = chrome_cleaner::SanitizePath(expanded_path);
+
+    // The FirstComponent here is the label string used to sanitize the path. It
+    // is extracted to verify the correct label string is being used.
+    //
+    // For example:
+    // C:\Program Files (x86)\Common Files\Desktop.ini
+    // maps to
+    // CSIDL_PROGRAM_FILES_COMMON (CSIDL_PROGRAM_FILES_COMMON\Desktop.ini)
+    // and shouldn't map to
+    // CSIDL_PROGRAM_FILES        (CSIDL_PROGRAM_FILES\Common Files\Desktop.ini)
+    // or it will clash with
+    // C:\Program Files (x86)\Desktop.ini
+    // which maps to
+    // CSIDL_PROGRAM_FILES        (CSIDL_PROGRAM_FILES\desktop.ini)
+    const auto first_dir = FirstComponent(sanitized_path);
+    if (first_dir != rule->path) {
+      ADD_FAILURE() << base::WideToUTF8(expanded_path.value())
+                    << " is being Sanitized to "
+                    << base::WideToUTF8(sanitized_path) << " instead of using "
+                    << rule->path;
+    }
+  }
+}
+
+TEST(FilePathSanitizationTests, SanitizeCommandLine) {
+  base::CommandLine switches =
+      base::CommandLine::FromString(L"dummy.exe --flag --arg=value");
+
+  base::CommandLine already_sanitized(switches);
+  already_sanitized.SetProgram(base::FilePath(L"c:\\dummy\\dummy.exe"));
+  base::string16 result = SanitizeCommandLine(already_sanitized);
+  EXPECT_EQ(already_sanitized.GetCommandLineString(), result);
+
+  base::FilePath programfiles_folder;
+  ASSERT_TRUE(base::PathService::Get(CsidlToPathServiceKey(CSIDL_PROGRAM_FILES),
+                                     &programfiles_folder));
+  base::FilePath exe_in_programfiles =
+      programfiles_folder.Append(L"dummy\\dummy.exe");
+
+  base::CommandLine to_sanitize(switches);
+  to_sanitize.SetProgram(exe_in_programfiles);
+  base::string16 sanitized_cmd = SanitizeCommandLine(to_sanitize);
+  EXPECT_NE(to_sanitize.GetCommandLineString(), sanitized_cmd);
+  EXPECT_NE(sanitized_cmd.find(SanitizePath(exe_in_programfiles)),
+            base::string16::npos);
+}
+
+TEST(FilePathSanitizationTests, ExpandSpecialFolderPath) {
+  base::FilePath arbitrary_path(L"Desktop.ini");
+  for (auto* rule = sanitization_internal::rewrite_rules; rule->path != nullptr;
+       ++rule) {
+    // Skip non-CSIDL entries.
+    if (rule->id < sanitization_internal::PATH_CSIDL_START ||
+        rule->id >= sanitization_internal::PATH_CSIDL_END) {
+      continue;
+    }
+
+    // Fetch and validate expected path.
+    base::FilePath expected_path;
+    ASSERT_TRUE(base::PathService::Get(rule->id, &expected_path));
+    ASSERT_FALSE(expected_path.empty());
+    expected_path = expected_path.Append(arbitrary_path);
+
+    int csidl = rule->id - sanitization_internal::PATH_CSIDL_START;
+    base::FilePath expanded_path =
+        ExpandSpecialFolderPath(csidl, arbitrary_path);
+    EXPECT_EQ(expected_path, expanded_path)
+        << "Failed special folder path expansion. Got: \""
+        << base::WideToUTF8(expanded_path.value())
+        << "\", but expected: " << base::WideToUTF8(expected_path.value());
+  }
+}
+
+}  // namespace
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/os/file_path_set_unittest.cc b/chrome/chrome_cleaner/os/file_path_set_unittest.cc
new file mode 100644
index 0000000..ddb0ab8
--- /dev/null
+++ b/chrome/chrome_cleaner/os/file_path_set_unittest.cc
@@ -0,0 +1,168 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/file_path_set.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/strings/string_util.h"
+#include "chrome/chrome_cleaner/test/test_file_util.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+const wchar_t kFileNameFull[] = L"C:\\Filename";
+const wchar_t kLongFileName[] = L"Long File Name.bla";
+const wchar_t kLongFileNameFull[] = L"C:\\Long File Name.bla";
+}  // namespace
+
+TEST(FilePathSetTests, Empty) {
+  FilePathSet file_paths;
+  // Start empty.
+  EXPECT_TRUE(file_paths.empty());
+  // Clear should be callable on empty sets.
+  file_paths.clear();
+}
+
+TEST(FilePathSetTests, InsertedOnce) {
+  FilePathSet file_paths;
+  // Same path should be inserted only once.
+  base::FilePath file_path1(kFileNameFull);
+  EXPECT_TRUE(file_paths.Insert(file_path1));
+  EXPECT_FALSE(file_paths.Insert(file_path1));
+  EXPECT_EQ(1UL, file_paths.size());
+  // But still should be found.
+  EXPECT_TRUE(file_paths.Contains(file_path1));
+}
+
+TEST(FilePathSetTests, EqualOperator) {
+  FilePathSet file_paths1;
+  base::FilePath file_path(kFileNameFull);
+  EXPECT_TRUE(file_paths1.Insert(file_path));
+  EXPECT_EQ(file_paths1, file_paths1);
+
+  FilePathSet file_paths2;
+  EXPECT_TRUE(file_paths2.Insert(file_path));
+  EXPECT_EQ(file_paths1, file_paths2);
+
+  base::FilePath long_file_path(kLongFileNameFull);
+  EXPECT_TRUE(file_paths1.Insert(long_file_path));
+  EXPECT_TRUE(file_paths2.Insert(long_file_path));
+  EXPECT_EQ(file_paths1, file_paths2);
+
+  base::FilePath other_path(L"C:\\other_path.txt");
+  EXPECT_TRUE(file_paths2.Insert(other_path));
+  // To avoid implementing operator!=();
+  EXPECT_FALSE(file_paths1 == file_paths2);
+}
+
+TEST(FilePathSetTests, LongName) {
+  FilePathSet file_paths;
+  // Long paths should also be found, even by their short version.
+  base::ScopedTempDir scoped_temp_dir;
+  ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir());
+  base::FilePath short_name_path;
+  base::FilePath long_name_path(
+      scoped_temp_dir.GetPath().Append(kLongFileName));
+  CreateFileAndGetShortName(long_name_path, &short_name_path);
+  EXPECT_TRUE(file_paths.Insert(long_name_path));
+  EXPECT_FALSE(file_paths.Insert(long_name_path));
+  EXPECT_FALSE(file_paths.Insert(short_name_path));
+  base::FilePath long_name_path_upper(
+      base::ToUpperASCII(long_name_path.value()));
+  EXPECT_FALSE(file_paths.Insert(long_name_path_upper));
+
+  // And they should be found-able in all its different forms.
+  EXPECT_TRUE(file_paths.Contains(long_name_path));
+  EXPECT_TRUE(file_paths.Contains(short_name_path));
+  EXPECT_TRUE(file_paths.Contains(long_name_path_upper));
+}
+
+TEST(FilePathSetTests, ShortName) {
+  FilePathSet file_paths;
+  // Short paths should also be found, even by their long version.
+  base::ScopedTempDir scoped_temp_dir;
+  ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir());
+  base::FilePath short_name_path;
+  base::FilePath long_name_path(
+      scoped_temp_dir.GetPath().Append(kLongFileName));
+  CreateFileAndGetShortName(long_name_path, &short_name_path);
+  EXPECT_TRUE(file_paths.Insert(short_name_path));
+  EXPECT_FALSE(file_paths.Insert(short_name_path));
+  EXPECT_FALSE(file_paths.Insert(long_name_path));
+  base::FilePath long_name_path_upper(
+      base::ToUpperASCII(long_name_path.value()));
+  EXPECT_FALSE(file_paths.Insert(long_name_path_upper));
+
+  // And they should be found-able in all its different forms.
+  EXPECT_TRUE(file_paths.Contains(long_name_path));
+  EXPECT_TRUE(file_paths.Contains(short_name_path));
+  EXPECT_TRUE(file_paths.Contains(long_name_path_upper));
+}
+
+TEST(FilePathSetTests, ProperOrder) {
+  // Ensure that all the items in a folder are listed before the folder.
+  const base::FilePath folder(L"C:\\folder");
+  base::FilePath file = folder.Append(L"file.exe");
+  base::FilePath sub_folder = folder.Append(L"sub_folder");
+  base::FilePath sub_file = sub_folder.Append(L"sub_file.txt");
+
+  FilePathSet file_paths;
+  EXPECT_TRUE(file_paths.Insert(folder));
+  EXPECT_TRUE(file_paths.Insert(file));
+  EXPECT_TRUE(file_paths.Insert(sub_folder));
+  EXPECT_TRUE(file_paths.Insert(sub_file));
+
+  const auto sorted_files = file_paths.ReverseSorted();
+  ASSERT_EQ(4UL, sorted_files.size());
+  EXPECT_EQ(sub_file, sorted_files[0]);
+  EXPECT_EQ(sub_folder, sorted_files[1]);
+  EXPECT_EQ(file, sorted_files[2]);
+  EXPECT_EQ(folder, sorted_files[3]);
+}
+
+TEST(FilePathMap, Find) {
+  // Long paths should also be found, even by their short version.
+  base::ScopedTempDir scoped_temp_dir;
+  ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir());
+  base::FilePath short_name_path;
+  base::FilePath long_name_path(
+      scoped_temp_dir.GetPath().Append(kLongFileName));
+  CreateFileAndGetShortName(long_name_path, &short_name_path);
+
+  FilePathMap<int> map;
+  EXPECT_TRUE(map.Insert(short_name_path, 42));
+
+  const int* found_value = nullptr;
+  ASSERT_NE(nullptr, found_value = map.Find(short_name_path));
+  EXPECT_EQ(42, *found_value);
+
+  ASSERT_NE(nullptr, found_value = map.Find(long_name_path));
+  EXPECT_EQ(42, *found_value);
+
+  EXPECT_EQ(nullptr, map.Find(base::FilePath(kFileNameFull)));
+}
+
+TEST(FilePathMap, DoNotInsertDuplicates) {
+  base::ScopedTempDir scoped_temp_dir;
+  ASSERT_TRUE(scoped_temp_dir.CreateUniqueTempDir());
+  base::FilePath short_name_path;
+  base::FilePath long_name_path(
+      scoped_temp_dir.GetPath().Append(kLongFileName));
+  CreateFileAndGetShortName(long_name_path, &short_name_path);
+
+  FilePathMap<int> map;
+  EXPECT_TRUE(map.Insert(long_name_path, 42));
+  EXPECT_FALSE(map.Insert(long_name_path, 43));
+  EXPECT_FALSE(map.Insert(short_name_path, 44));
+  EXPECT_EQ(1u, map.map().size());
+
+  const int* found_value = nullptr;
+  EXPECT_NE(nullptr, found_value = map.Find(short_name_path));
+  EXPECT_EQ(42, *found_value);
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/os/file_removal_status_updater_unittest.cc b/chrome/chrome_cleaner/os/file_removal_status_updater_unittest.cc
new file mode 100644
index 0000000..54642931
--- /dev/null
+++ b/chrome/chrome_cleaner/os/file_removal_status_updater_unittest.cc
@@ -0,0 +1,159 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/file_removal_status_updater.h"
+
+#include "base/base_paths.h"
+#include "base/path_service.h"
+#include "base/strings/string_util.h"
+#include "chrome/chrome_cleaner/os/file_path_sanitization.h"
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+constexpr wchar_t kFile1[] = L"file_one";
+constexpr wchar_t kFile2[] = L"file_two";
+
+class FileRemovalStatusUpdaterTest : public ::testing::Test {
+ protected:
+  FileRemovalStatusUpdaterTest() {
+    // Start each test with an empty map.
+    FileRemovalStatusUpdater::GetInstance()->Clear();
+  }
+
+  // Convenience accessors
+  FileRemovalStatusUpdater* instance_ = FileRemovalStatusUpdater::GetInstance();
+  const base::FilePath file_1_ = base::FilePath(kFile1);
+  const base::FilePath file_2_ = base::FilePath(kFile2);
+};
+
+}  // namespace
+
+TEST_F(FileRemovalStatusUpdaterTest, Clear) {
+  // Map should start empty.
+  EXPECT_TRUE(instance_->GetAllRemovalStatuses().empty());
+  EXPECT_EQ(REMOVAL_STATUS_UNSPECIFIED, instance_->GetRemovalStatus(file_1_));
+  EXPECT_EQ(REMOVAL_STATUS_UNSPECIFIED, instance_->GetRemovalStatus(file_2_));
+
+  instance_->UpdateRemovalStatus(file_1_, REMOVAL_STATUS_MATCHED_ONLY);
+
+  // Only file_1_ should be in the map.
+  EXPECT_EQ(1U, instance_->GetAllRemovalStatuses().size());
+  EXPECT_EQ(REMOVAL_STATUS_MATCHED_ONLY, instance_->GetRemovalStatus(file_1_));
+  EXPECT_EQ(REMOVAL_STATUS_UNSPECIFIED, instance_->GetRemovalStatus(file_2_));
+
+  instance_->Clear();
+
+  // Map should be empty again.
+  EXPECT_TRUE(instance_->GetAllRemovalStatuses().empty());
+  EXPECT_EQ(REMOVAL_STATUS_UNSPECIFIED, instance_->GetRemovalStatus(file_1_));
+  EXPECT_EQ(REMOVAL_STATUS_UNSPECIFIED, instance_->GetRemovalStatus(file_2_));
+}
+
+TEST_F(FileRemovalStatusUpdaterTest, UpdateRemovalStatus) {
+  // This function uses GetRemovalStatusOfSanitizedPath to cut down on the
+  // number of times it calls SanitizePath on the same paths, which is slow.
+  const base::string16 file_1_sanitized = SanitizePath(file_1_);
+  const base::string16 file_2_sanitized = SanitizePath(file_2_);
+
+  // Creates a vector of all RemovalStatus enum values to improve readability
+  // of loops in this test and ensure that all RemovalStatus enumerators are
+  // checked.
+  std::vector<RemovalStatus> all_removal_status;
+  for (int i = RemovalStatus_MIN; i <= RemovalStatus_MAX; ++i) {
+    // Status cannot be set to REMOVAL_STATUS_UNSPECIFIED - this is guarded by
+    // an assert.
+    RemovalStatus status = static_cast<RemovalStatus>(i);
+    if (status != REMOVAL_STATUS_UNSPECIFIED)
+      all_removal_status.push_back(status);
+  }
+
+  for (RemovalStatus removal_status : all_removal_status) {
+    // Repeatedly update the removal status of file_2_. file_1_'s status should
+    // not be touched.
+    for (RemovalStatus new_removal_status : all_removal_status) {
+      SCOPED_TRACE(::testing::Message()
+                   << "removal_status " << removal_status
+                   << ", new_removal_status " << new_removal_status);
+
+      // Initially, files should have removal status "unspecified".
+      ASSERT_TRUE(instance_->GetAllRemovalStatuses().empty());
+      ASSERT_EQ(REMOVAL_STATUS_UNSPECIFIED,
+                instance_->GetRemovalStatusOfSanitizedPath(file_1_sanitized));
+      ASSERT_EQ(REMOVAL_STATUS_UNSPECIFIED,
+                instance_->GetRemovalStatusOfSanitizedPath(file_2_sanitized));
+
+      // Any removal status can override "unspecified".
+      instance_->UpdateRemovalStatus(file_1_, removal_status);
+      instance_->UpdateRemovalStatus(file_2_, removal_status);
+      EXPECT_EQ(removal_status,
+                instance_->GetRemovalStatusOfSanitizedPath(file_1_sanitized));
+      EXPECT_EQ(removal_status,
+                instance_->GetRemovalStatusOfSanitizedPath(file_2_sanitized));
+
+      // Tests if attempts to override removal status obey the rules specified
+      // by GetRemovalStatusOfSanitizedPathOverridePermissionMap().
+      instance_->UpdateRemovalStatus(file_2_, new_removal_status);
+      const internal::RemovalStatusOverridePermissionMap& decisions_map =
+          internal::GetRemovalStatusOverridePermissionMap();
+      const bool can_override = decisions_map.find(removal_status)
+                                    ->second.find(new_removal_status)
+                                    ->second == internal::kOkToOverride;
+      EXPECT_EQ(can_override ? new_removal_status : removal_status,
+                instance_->GetRemovalStatusOfSanitizedPath(file_2_sanitized));
+
+      // Updating file_2_ should not have touched file_1_.
+      EXPECT_EQ(removal_status,
+                instance_->GetRemovalStatusOfSanitizedPath(file_1_sanitized));
+
+      // GetAllRemovalStatuses should agree with GetRemovalStatusOfSanitizedPath
+      // for all files.
+      FileRemovalStatusUpdater::SanitizedPathToRemovalStatusMap all_statuses =
+          instance_->GetAllRemovalStatuses();
+      EXPECT_EQ(2U, all_statuses.size());
+      for (const auto& path_and_status : all_statuses) {
+        base::string16 sanitized_path = path_and_status.first;
+        FileRemovalStatusUpdater::FileRemovalStatus status =
+            path_and_status.second;
+        EXPECT_EQ(instance_->GetRemovalStatusOfSanitizedPath(sanitized_path),
+                  status.removal_status);
+      }
+
+      // Empty the map for the next loop.
+      instance_->Clear();
+    }
+  }
+}
+
+TEST_F(FileRemovalStatusUpdaterTest, PathSanitization) {
+  base::FilePath home_dir;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_HOME, &home_dir));
+  base::FilePath path = home_dir.Append(L"UPPER_CASE_FILENAME");
+
+  instance_->UpdateRemovalStatus(path, REMOVAL_STATUS_REMOVED);
+
+  // Path should be accessible with any capitalization, sanitized or
+  // unsanitized.
+  base::string16 lowercase_path = base::ToLowerASCII(path.value());
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED, instance_->GetRemovalStatus(path));
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED,
+            instance_->GetRemovalStatus(base::FilePath(lowercase_path)));
+
+  base::string16 sanitized_path = SanitizePath(path);
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED,
+            instance_->GetRemovalStatusOfSanitizedPath(sanitized_path));
+
+  FileRemovalStatusUpdater::SanitizedPathToRemovalStatusMap all_statuses =
+      instance_->GetAllRemovalStatuses();
+  EXPECT_EQ(1U, all_statuses.size());
+  EXPECT_EQ(sanitized_path, all_statuses.begin()->first);
+  EXPECT_EQ(path, all_statuses.begin()->second.path);
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED,
+            all_statuses.begin()->second.removal_status);
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/os/file_remover_unittest.cc b/chrome/chrome_cleaner/os/file_remover_unittest.cc
new file mode 100644
index 0000000..dad51e1b
--- /dev/null
+++ b/chrome/chrome_cleaner/os/file_remover_unittest.cc
@@ -0,0 +1,405 @@
+// 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.
+
+#include "chrome/chrome_cleaner/os/file_remover.h"
+
+#include <stdint.h>
+#include <utility>
+
+#include "base/base_paths.h"
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/test/scoped_path_override.h"
+#include "chrome/chrome_cleaner/logging/proto/removal_status.pb.h"
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "chrome/chrome_cleaner/os/file_removal_status_updater.h"
+#include "chrome/chrome_cleaner/os/layered_service_provider_wrapper.h"
+#include "chrome/chrome_cleaner/os/pre_fetched_paths.h"
+#include "chrome/chrome_cleaner/os/system_util.h"
+#include "chrome/chrome_cleaner/os/whitelisted_directory.h"
+#include "chrome/chrome_cleaner/test/reboot_deletion_helper.h"
+#include "chrome/chrome_cleaner/test/resources/grit/test_resources.h"
+#include "chrome/chrome_cleaner/test/test_file_util.h"
+#include "chrome/chrome_cleaner/test/test_layered_service_provider.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+using testing::_;
+using testing::Eq;
+using testing::Return;
+using ValidationStatus = FileRemoverAPI::DeletionValidationStatus;
+
+const wchar_t kRemoveFile1[] = L"remove_one.exe";
+const wchar_t kRemoveFile2[] = L"remove_two.exe";
+const wchar_t kRemoveFolder[] = L"remove";
+
+class FileRemoverTest : public ::testing::Test {
+ protected:
+  FileRemoverTest()
+      : default_file_remover_(
+            nullptr,
+            LayeredServiceProviderWrapper(),
+            /*deletion_allowed_paths=*/{},
+            base::BindRepeating(&FileRemoverTest::RebootRequired,
+                                base::Unretained(this))) {
+    FileRemovalStatusUpdater::GetInstance()->Clear();
+  }
+
+  void RebootRequired() { reboot_required_ = true; }
+
+  void TestBlacklistedRemoval(FileRemover* remover,
+                              const base::FilePath& path) {
+    DCHECK(remover);
+
+    EXPECT_EQ(ValidationStatus::FORBIDDEN, remover->CanRemove(path));
+
+    FileRemovalStatusUpdater* removal_status_updater =
+        FileRemovalStatusUpdater::GetInstance();
+
+    EXPECT_FALSE(remover->RemoveNow(path));
+    EXPECT_EQ(removal_status_updater->GetRemovalStatus(path),
+              REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+
+    removal_status_updater->Clear();
+    EXPECT_FALSE(remover->RegisterPostRebootRemoval(path));
+    EXPECT_EQ(removal_status_updater->GetRemovalStatus(path),
+              REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+
+    EXPECT_TRUE(base::PathExists(path));
+    EXPECT_FALSE(IsFileRegisteredForPostRebootRemoval(path));
+  }
+
+  FileRemover default_file_remover_;
+  bool reboot_required_ = false;
+};
+
+}  // namespace
+
+TEST_F(FileRemoverTest, RemoveNowValidFile) {
+  // Create a temporary empty file.
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  const base::FilePath file_path = temp.GetPath().Append(kRemoveFile1);
+  EXPECT_TRUE(CreateEmptyFile(file_path));
+
+  // Removing it must succeed.
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path));
+  EXPECT_FALSE(base::PathExists(file_path));
+  EXPECT_EQ(
+      FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(file_path),
+      REMOVAL_STATUS_REMOVED);
+}
+
+TEST_F(FileRemoverTest, RemoveNowAbsentFile) {
+  // Create a non-existing file name.
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  FileRemovalStatusUpdater* removal_status_updater =
+      FileRemovalStatusUpdater::GetInstance();
+
+  const base::FilePath file_path = temp.GetPath().Append(kRemoveFile1);
+  EXPECT_FALSE(base::PathExists(file_path));
+
+  // Removing it must not generate an error.
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path),
+            REMOVAL_STATUS_NOT_FOUND);
+
+  // Ensure the non-existant files with non-existant parents don't generate an
+  // error.
+  base::FilePath file_path_deeper = file_path.Append(kRemoveFile2);
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path_deeper));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path_deeper),
+            REMOVAL_STATUS_NOT_FOUND);
+}
+
+TEST_F(FileRemoverTest, NoKnownFileRemoval) {
+  base::ScopedTempDir temp_dir;
+  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+  FileRemover remover(
+      DigestVerifier::CreateFromResource(IDS_TEST_SAMPLE_DLL_DIGEST),
+      LayeredServiceProviderWrapper(), /*deletion_allowed_paths=*/{},
+      base::DoNothing::Repeatedly());
+
+  // Copy the sample DLL to the temp folder.
+  base::FilePath dll_path = GetSampleDLLPath();
+  ASSERT_TRUE(base::PathExists(dll_path)) << dll_path.value();
+
+  base::FilePath target_dll_path(
+      temp_dir.GetPath().Append(dll_path.BaseName()));
+  ASSERT_TRUE(base::CopyFile(dll_path, target_dll_path));
+
+  TestBlacklistedRemoval(&remover, target_dll_path);
+}
+
+TEST_F(FileRemoverTest, NoSelfRemoval) {
+  base::FilePath exe_path = PreFetchedPaths::GetInstance()->GetExecutablePath();
+  TestBlacklistedRemoval(&default_file_remover_, exe_path);
+}
+
+TEST_F(FileRemoverTest, NoWhitelistedFileRemoval) {
+  base::FilePath program_files_dir =
+      PreFetchedPaths::GetInstance()->GetProgramFilesFolder();
+  TestBlacklistedRemoval(&default_file_remover_, program_files_dir);
+}
+
+TEST_F(FileRemoverTest, NoWhitelistFileTempRemoval) {
+  base::FilePath temp_dir;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_TEMP, &temp_dir));
+  TestBlacklistedRemoval(&default_file_remover_, temp_dir);
+}
+
+TEST_F(FileRemoverTest, NoLSPRemoval) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath provider_path = temp.GetPath().Append(kRemoveFile1);
+  ASSERT_TRUE(CreateEmptyFile(provider_path));
+
+  TestLayeredServiceProvider lsp;
+  lsp.AddProvider(kGUID1, provider_path);
+
+  FileRemover remover(nullptr, lsp, /*deletion_allowed_paths=*/{},
+                      base::DoNothing::Repeatedly());
+
+  TestBlacklistedRemoval(&remover, provider_path);
+}
+
+TEST_F(FileRemoverTest, CanRemoveAbsolutePath) {
+  EXPECT_EQ(ValidationStatus::ALLOWED,
+            default_file_remover_.CanRemove(base::FilePath(L"C:\\foo\\bar")));
+}
+
+TEST_F(FileRemoverTest, NoRelativePathRemoval) {
+  EXPECT_EQ(ValidationStatus::FORBIDDEN,
+            default_file_remover_.CanRemove(base::FilePath(L"bar.txt")));
+}
+
+TEST_F(FileRemoverTest, NoDriveRemoval) {
+  EXPECT_EQ(ValidationStatus::FORBIDDEN,
+            default_file_remover_.CanRemove(base::FilePath(L"C:")));
+  EXPECT_EQ(ValidationStatus::FORBIDDEN,
+            default_file_remover_.CanRemove(base::FilePath(L"C:\\")));
+}
+
+TEST_F(FileRemoverTest, NoPathTraversal) {
+  EXPECT_EQ(
+      ValidationStatus::FORBIDDEN,
+      default_file_remover_.CanRemove(base::FilePath(L"C:\\foo\\..\\bar")));
+  EXPECT_EQ(
+      ValidationStatus::FORBIDDEN,
+      default_file_remover_.CanRemove(base::FilePath(L"..\\foo\\bar.dll")));
+}
+
+TEST_F(FileRemoverTest, CorrectPathTraversalDetection) {
+  EXPECT_EQ(
+      ValidationStatus::ALLOWED,
+      default_file_remover_.CanRemove(base::FilePath(L"C:\\foo\\..bar.dll")));
+  EXPECT_EQ(
+      ValidationStatus::ALLOWED,
+      default_file_remover_.CanRemove(base::FilePath(L"C:\\foo\\bar..dll")));
+  EXPECT_EQ(
+      ValidationStatus::ALLOWED,
+      default_file_remover_.CanRemove(base::FilePath(L"C:\\foo..\\bar.dll")));
+}
+
+TEST_F(FileRemoverTest, RemoveNowDoesNotDeleteFolders) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  // Create the folder and the files.
+  base::FilePath subfolder_path = temp.GetPath().Append(kRemoveFolder);
+  base::CreateDirectory(subfolder_path);
+  base::FilePath file_path1 = subfolder_path.Append(kRemoveFile1);
+  ASSERT_TRUE(CreateEmptyFile(file_path1));
+
+  // The folder should not be removed.
+  EXPECT_FALSE(default_file_remover_.RemoveNow(subfolder_path));
+  EXPECT_EQ(
+      FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(subfolder_path),
+      REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+  EXPECT_TRUE(base::PathExists(subfolder_path));
+  EXPECT_TRUE(base::PathExists(file_path1));
+}
+
+TEST_F(FileRemoverTest, RemoveNowDeletesEmptyFolders) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  // Create the folder and the files.
+  base::FilePath subfolder_path = temp.GetPath().Append(kRemoveFolder);
+  base::CreateDirectory(subfolder_path);
+  base::FilePath file_path1 = subfolder_path.Append(kRemoveFile1);
+  ASSERT_TRUE(CreateEmptyFile(file_path1));
+  base::FilePath subsubfolder_path = subfolder_path.Append(kRemoveFolder);
+  base::CreateDirectory(subsubfolder_path);
+  base::FilePath file_path2 = subsubfolder_path.Append(kRemoveFile2);
+  ASSERT_TRUE(CreateEmptyFile(file_path2));
+
+  FileRemovalStatusUpdater* removal_status_updater =
+      FileRemovalStatusUpdater::GetInstance();
+
+  // Delete a file in a folder with other stuff, so the folder isn't deleted.
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path1));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path1),
+            REMOVAL_STATUS_REMOVED);
+  EXPECT_TRUE(base::PathExists(subfolder_path));
+  EXPECT_FALSE(base::PathExists(file_path1));
+  EXPECT_TRUE(base::PathExists(subsubfolder_path));
+  EXPECT_TRUE(base::PathExists(file_path2));
+
+  // Delete the file and ensure the two parent folders are deleted since they
+  // are now empty.
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path2));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path2),
+            REMOVAL_STATUS_REMOVED);
+  EXPECT_FALSE(base::PathExists(subfolder_path));
+  EXPECT_FALSE(base::PathExists(subsubfolder_path));
+  EXPECT_FALSE(base::PathExists(file_path2));
+}
+
+TEST_F(FileRemoverTest, RemoveNowDeletesEmptyFoldersNotTemp) {
+  base::ScopedPathOverride temp_override(base::DIR_TEMP);
+
+  base::FilePath scoped_temp_dir;
+  ASSERT_TRUE(base::PathService::Get(base::DIR_TEMP, &scoped_temp_dir));
+
+  // Create a file in temp.
+  base::FilePath file_path = scoped_temp_dir.Append(kRemoveFile1);
+  ASSERT_TRUE(CreateEmptyFile(file_path));
+
+  // Delete the file and ensure Temp isn't deleted since it is whitelisted.
+  EXPECT_TRUE(default_file_remover_.RemoveNow(file_path));
+  EXPECT_EQ(
+      FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(file_path),
+      REMOVAL_STATUS_REMOVED);
+  EXPECT_FALSE(base::PathExists(file_path));
+  base::FilePath temp_dir;
+  ASSERT_TRUE(base::GetTempDir(&temp_dir));
+  EXPECT_TRUE(base::PathExists(temp_dir));
+}
+
+TEST_F(FileRemoverTest, RegisterPostRebootRemoval) {
+  FileRemovalStatusUpdater* removal_status_updater =
+      FileRemovalStatusUpdater::GetInstance();
+
+  // When trying to delete a whitelisted file, we should fail to register the
+  // file for removal, and no reboot should be required.
+  base::FilePath exe_path = PreFetchedPaths::GetInstance()->GetExecutablePath();
+  EXPECT_FALSE(default_file_remover_.RegisterPostRebootRemoval(exe_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(exe_path),
+            REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+  EXPECT_FALSE(reboot_required_);
+
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath file_path = temp.GetPath().Append(kRemoveFile2);
+
+  // When trying to delete an non-existant file, we should return success, but
+  // not require a reboot.
+  EXPECT_TRUE(default_file_remover_.RegisterPostRebootRemoval(file_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path),
+            REMOVAL_STATUS_NOT_FOUND);
+  EXPECT_FALSE(reboot_required_);
+
+  // When trying to delete a real file, we should return success and require a
+  // reboot.
+  ASSERT_TRUE(CreateEmptyFile(file_path));
+  EXPECT_TRUE(default_file_remover_.RegisterPostRebootRemoval(file_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(file_path),
+            REMOVAL_STATUS_SCHEDULED_FOR_REMOVAL);
+  EXPECT_TRUE(reboot_required_);
+  EXPECT_TRUE(IsFileRegisteredForPostRebootRemoval(file_path));
+}
+
+TEST_F(FileRemoverTest, RegisterPostRebootRemoval_Directories) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  // Create an empty directory.
+  base::FilePath subfolder_path = temp.GetPath().Append(kRemoveFolder);
+  ASSERT_TRUE(base::CreateDirectory(subfolder_path));
+
+  FileRemovalStatusUpdater* removal_status_updater =
+      FileRemovalStatusUpdater::GetInstance();
+
+  // Directories shouldn't be registered for deletion.
+  EXPECT_FALSE(default_file_remover_.RegisterPostRebootRemoval(subfolder_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(subfolder_path),
+            REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+
+  // Put a file into the directory and ensure the non-empty directory still
+  // isn't registered for removal.
+  removal_status_updater->Clear();
+  base::FilePath file_path1 = subfolder_path.Append(kRemoveFile1);
+  ASSERT_TRUE(CreateEmptyFile(file_path1));
+  EXPECT_FALSE(default_file_remover_.RegisterPostRebootRemoval(subfolder_path));
+  EXPECT_EQ(removal_status_updater->GetRemovalStatus(subfolder_path),
+            REMOVAL_STATUS_BLACKLISTED_FOR_REMOVAL);
+}
+
+TEST_F(FileRemoverTest, NotActiveFileType) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath path = temp.GetPath().Append(L"temp_file.txt");
+  ASSERT_TRUE(
+      CreateFileInFolder(path.DirName(), path.BaseName().value().c_str()));
+
+  EXPECT_EQ(ValidationStatus::INACTIVE,
+            FileRemover::IsFileRemovalAllowed(path, {}, {}));
+  EXPECT_TRUE(default_file_remover_.RemoveNow(path));
+  EXPECT_EQ(REMOVAL_STATUS_NOT_REMOVED_INACTIVE_EXTENSION,
+            FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(path));
+  EXPECT_TRUE(base::PathExists(path));
+}
+
+TEST_F(FileRemoverTest, NotActiveFileAllowed) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath path = temp.GetPath().Append(L"temp_file.txt");
+  ASSERT_TRUE(
+      CreateFileInFolder(path.DirName(), path.BaseName().value().c_str()));
+
+  FileRemover remover(nullptr, LayeredServiceProviderWrapper(),
+                      {path.value().c_str()}, base::DoNothing::Repeatedly());
+
+  EXPECT_EQ(ValidationStatus::ALLOWED, FileRemover::IsFileRemovalAllowed(
+                                           path, {path.value().c_str()}, {}));
+  EXPECT_TRUE(remover.RemoveNow(path));
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED,
+            FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(path));
+  EXPECT_FALSE(base::PathExists(path));
+}
+
+TEST_F(FileRemoverTest, DosMzExecutable) {
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+  base::FilePath path = temp.GetPath().Append(L"temp_file.txt");
+  constexpr char kMzExecutable[] = "MZ executable";
+  CreateFileWithContent(path, kMzExecutable, sizeof(kMzExecutable));
+  ASSERT_TRUE(base::PathExists(path));
+
+  FileRemover remover(nullptr, LayeredServiceProviderWrapper(),
+                      {path.value().c_str()}, base::DoNothing::Repeatedly());
+
+  EXPECT_EQ(ValidationStatus::ALLOWED,
+            FileRemover::IsFileRemovalAllowed(path, {}, {}));
+  EXPECT_TRUE(remover.RemoveNow(path));
+  EXPECT_EQ(REMOVAL_STATUS_REMOVED,
+            FileRemovalStatusUpdater::GetInstance()->GetRemovalStatus(path));
+  EXPECT_FALSE(base::PathExists(path));
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/settings/BUILD.gn b/chrome/chrome_cleaner/settings/BUILD.gn
index adc94eb06..6dd920a 100644
--- a/chrome/chrome_cleaner/settings/BUILD.gn
+++ b/chrome/chrome_cleaner/settings/BUILD.gn
@@ -8,7 +8,7 @@
   ]
 }
 
-static_library("settings") {
+source_set("settings") {
   sources = [
     "settings.cc",
     "settings.h",
@@ -28,14 +28,14 @@
   ]
 }
 
-static_library("matching_options") {
+source_set("matching_options") {
   sources = [
     "matching_options.cc",
     "matching_options.h",
   ]
 }
 
-static_library("default_matching_options") {
+source_set("default_matching_options") {
   sources = [
     "default_matching_options.cc",
     "default_matching_options.h",
diff --git a/chrome/chrome_cleaner/test/BUILD.gn b/chrome/chrome_cleaner/test/BUILD.gn
index e4609bb..421d318 100644
--- a/chrome/chrome_cleaner/test/BUILD.gn
+++ b/chrome/chrome_cleaner/test/BUILD.gn
@@ -28,23 +28,69 @@
   ]
 }
 
-static_library("test_util") {
+source_set("test_executables") {
   testonly = true
 
   sources = [
-    "test_file_util.cc",
-    "test_file_util.h",
-    "test_name_helper.cc",
-    "test_registry_util.cc",
-    "test_registry_util.h",
+    "test_executables.cc",
+    "test_executables.h",
+  ]
+
+  # Assume that every target that uses the test_executables header will run one
+  # of the executables, so make sure they are built.
+  data_deps = [
+    ":test_process",
+    ":test_service",
   ]
 
   deps = [
+    ":test_strings",
+    ":test_util",
     "//base:base",
-    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
+    "//chrome/chrome_cleaner/constants:common_strings",
+  ]
+}
+
+source_set("test_util") {
+  testonly = true
+
+  sources = [
+    "reboot_deletion_helper.cc",
+    "reboot_deletion_helper.h",
+    "test_file_util.cc",
+    "test_file_util.h",
+    "test_layered_service_provider.cc",
+    "test_layered_service_provider.h",
+    "test_name_helper.cc",
+    "test_name_helper.h",
+    "test_registry_util.cc",
+    "test_registry_util.h",
+    "test_util.cc",
+    "test_util.h",
+  ]
+
+  deps = [
+    ":test_pup_data",
+    ":test_strings",
+    "//base:base",
+    "//base/test:test_support",
+    "//chrome/chrome_cleaner/constants:common_strings",
+    "//chrome/chrome_cleaner/os:cleaner_os",
     "//chrome/chrome_cleaner/os:common_os",
-    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
     "//chrome/chrome_cleaner/pup_data:pup_data_base",
+    "//chrome/chrome_cleaner/strings",
+    "//components/chrome_cleaner/public/constants:constants",
+    "//sandbox/win:sandbox",
+  ]
+
+  data_deps = [
+    ":empty_dll",
+    "//chrome/chrome_cleaner/test/resources:signed_empty_dll",
+  ]
+
+  public_deps = [
+    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
+    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
     "//testing/gmock",
     "//testing/gtest",
   ]
@@ -80,3 +126,52 @@
     "//testing/gtest",
   ]
 }
+
+source_set("unittest_sources") {
+  testonly = true
+
+  sources = [
+    "reboot_deletion_helper_unittest.cc",
+    "test_util_unittest.cc",
+  ]
+
+  deps = [
+    ":test_util",
+    "//base",
+    "//base/test:test_support",
+    "//chrome/chrome_cleaner/os:common_os",
+    "//testing/gtest",
+  ]
+}
+
+executable("test_process") {
+  testonly = true
+
+  sources = [
+    "test_process_main.cc",
+  ]
+
+  deps = [
+    ":test_strings",
+    ":test_util",
+    "//base:base",
+    "//base/test:test_support",
+    "//build/win:default_exe_manifest",
+    "//chrome/chrome_cleaner/os:common_os",
+  ]
+}
+
+executable("test_service") {
+  testonly = true
+
+  sources = [
+    "test_service_main.cc",
+  ]
+
+  deps = [
+    ":test_strings",
+    "//base:base",
+    "//base/test:test_support",
+    "//build/win:default_exe_manifest",
+  ]
+}
diff --git a/chrome/chrome_cleaner/test/reboot_deletion_helper.cc b/chrome/chrome_cleaner/test/reboot_deletion_helper.cc
new file mode 100644
index 0000000..7792cb1
--- /dev/null
+++ b/chrome/chrome_cleaner/test/reboot_deletion_helper.cc
@@ -0,0 +1,306 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/reboot_deletion_helper.h"
+
+#include <windows.h>
+
+#include "base/stl_util.h"
+#include "base/strings/string_util.h"
+#include "base/win/registry.h"
+#include "chrome/chrome_cleaner/os/file_path_sanitization.h"
+#include "chrome/chrome_cleaner/os/registry_util.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+// The moves-pending-reboot is a MULTISZ registry value in the HKLM part of the
+// registry.
+const wchar_t kSessionManagerKey[] =
+    L"SYSTEM\\CurrentControlSet\\Control\\Session Manager";
+const wchar_t kPendingFileRenameOps[] = L"PendingFileRenameOperations";
+
+const wchar_t kDoubleNullEntry[] = L"\0\0";
+
+// Convert the strings found in |buffer| to a list of string16s that is returned
+// in |value|. |buffer| is a string which contains a series of pairs of
+// null-terminated string16s followed by a terminating null character. |value|
+// is a pointer to an empty vector of pending moves. On success, this vector
+// contains all of the strings extracted from |buffer|.
+// Returns false if buffer does not meet the above specification.
+bool MultiSZToStringArray(const base::string16& buffer,
+                          std::vector<PendingMove>* value) {
+  DCHECK(value);
+  DCHECK(value->empty());
+
+  const base::char16* data = buffer.c_str();
+  const base::char16* data_end = data + buffer.size();
+
+  // Put null-terminated strings into the sequence.
+  while (data < data_end) {
+    // Parse the source path.
+    base::string16 str_from(data);
+    data += str_from.length() + 1;
+
+    // Parse the destination path. If the offset is at the end of the string,
+    // we assume the destination is empty. This may happen with corrupt registry
+    // values where there are missing trailing null characters.
+    base::string16 str_to;
+    if (data > data_end)
+      return false;
+    if (data < data_end)
+      str_to = data;
+
+    // Move to the next entry.
+    data += str_to.length() + 1;
+    value->push_back(std::make_pair(str_from, str_to));
+  }
+  return true;
+}
+
+// The inverse of MultiSZToStringArray, this function converts a list
+// of string pairs into a byte array format suitable for writing to the
+// kPendingFileRenameOps registry value. It concatenates the strings and
+// appends an additional terminating null character.
+void StringArrayToMultiSZ(const std::vector<PendingMove>& pending_moves,
+                          base::string16* buffer) {
+  DCHECK(buffer);
+  buffer->clear();
+
+  if (pending_moves.empty()) {
+    // Leave buffer empty if there are no strings.
+    return;
+  }
+
+  size_t total_wchars = 0;
+  std::vector<PendingMove>::const_iterator iter(pending_moves.begin());
+  for (; iter != pending_moves.end(); ++iter) {
+    total_wchars += iter->first.length();
+    ++total_wchars;  // Space for the null char.
+    total_wchars += iter->second.length();
+    ++total_wchars;  // Space for the null char.
+  }
+  ++total_wchars;  // Space for the extra terminating null char.
+
+  buffer->resize(total_wchars);
+  base::char16* write_pointer =
+      reinterpret_cast<base::char16*>(&((*buffer)[0]));
+  // Keep an end pointer around for sanity checking.
+  base::char16* end_pointer = write_pointer + total_wchars;
+
+  std::vector<PendingMove>::const_iterator copy_iter(pending_moves.begin());
+  for (; copy_iter != pending_moves.end() && write_pointer < end_pointer;
+       ++copy_iter) {
+    // First copy the source string.
+    size_t string_length = copy_iter->first.length() + 1;
+    ::memcpy(write_pointer, copy_iter->first.c_str(),
+             string_length * sizeof(base::char16));
+    write_pointer += string_length;
+    // Now copy the destination string.
+    string_length = copy_iter->second.length() + 1;
+    ::memcpy(write_pointer, copy_iter->second.c_str(),
+             string_length * sizeof(base::char16));
+    write_pointer += string_length;
+
+    // We should never run off the end while in this loop.
+    DCHECK(write_pointer < end_pointer);
+  }
+  *write_pointer = L'\0';  // Explicitly set the final null char.
+  DCHECK(++write_pointer == end_pointer);
+}
+
+// A helper function for the win32 GetShortPathName that more conveniently
+// returns a FilePath. Note that if |path| is not present on the file system
+// then GetShortPathName will return |path| unchanged, unlike the win32
+// GetShortPathName which will return an error.
+base::FilePath GetShortPathName(const base::FilePath& path) {
+  base::string16 short_path;
+  DWORD length = ::GetShortPathName(
+      path.value().c_str(), base::WriteInto(&short_path, MAX_PATH), MAX_PATH);
+  DPLOG_IF(WARNING, length == 0 && ::GetLastError() != ERROR_PATH_NOT_FOUND)
+      << "GetShortPathName an unexpected result.";
+  if (length == 0) {
+    // GetShortPathName fails if the path is no longer present. Instead of
+    // returning an empty string, just return the original string. This will
+    // serve our purpose.
+    return path;
+  }
+
+  short_path.resize(length);
+  return base::FilePath(short_path);
+}
+
+base::FilePath GetShortPathNameWithoutPrefix(const base::FilePath& reg_path) {
+  // Stores the path stored in each entry.
+  base::string16 match_path(reg_path.value());
+
+  // First chomp the prefix since that will mess up GetShortPathName.
+  base::string16 prefix(L"\\??\\");
+  if (base::StartsWith(match_path, prefix,
+                       base::CompareCase::INSENSITIVE_ASCII))
+    match_path = match_path.substr(4);
+
+  // Get the short path name of the entry.
+  return GetShortPathName(base::FilePath(match_path));
+}
+
+}  // namespace
+
+bool IsFileRegisteredForPostRebootRemoval(const base::FilePath& file_path) {
+  base::FilePath short_path = GetShortPathName(NormalizePath(file_path));
+
+  PendingMoveVector pending_moves;
+  // This can only be called in tests, so CHECKing is ok since that ensures the
+  // test fails.
+  CHECK(GetPendingMoves(&pending_moves)) << "Unable to get pending moves";
+
+  for (PendingMoveVector::const_iterator iter(pending_moves.begin());
+       iter != pending_moves.end(); ++iter) {
+    if (!iter->second.empty()) {
+      // If the destination string is not empty, the pending operation is a move
+      // so this isn't a removal.
+      continue;
+    }
+
+    base::FilePath pending_path(
+        GetShortPathName(NormalizePath(base::FilePath(iter->first))));
+    pending_path = GetShortPathNameWithoutPrefix(pending_path);
+    if (base::FilePath::CompareEqualIgnoreCase(pending_path.value(),
+                                               short_path.value())) {
+      return true;
+    }
+  }
+
+  return false;
+}
+
+bool UnregisterPostRebootRemovals(const FilePathSet& paths) {
+  // Retrieve pending moves from the registry.
+  PendingMoveVector pending_moves;
+  if (!GetPendingMoves(&pending_moves))
+    return false;
+
+  // Build an index of short paths to remove.
+  UnorderedFilePathSet short_paths;
+  for (const auto& path : paths.file_paths()) {
+    short_paths.insert(GetShortPathName(path));
+  }
+
+  // Filter paths pending for deletion with the short paths index.
+  PendingMoveVector moves_to_keep;
+  for (PendingMoveVector::const_iterator iter(pending_moves.begin());
+       iter != pending_moves.end(); ++iter) {
+    if (!iter->second.empty()) {
+      // If the destination string is not empty, the pending operation is a move
+      // and must not be removed.
+      moves_to_keep.push_back(*iter);
+      continue;
+    }
+    base::FilePath pending_path(
+        GetShortPathName(NormalizePath(base::FilePath(iter->first))));
+    pending_path = GetShortPathNameWithoutPrefix(pending_path);
+    if (short_paths.find(pending_path) == short_paths.end())
+      moves_to_keep.push_back(*iter);
+  }
+
+  // Update the remaining pending moves to the registry.
+  if (!SetPendingMoves(moves_to_keep))
+    return false;
+
+  return true;
+}
+
+// Retrieves the list of pending moves from the registry and returns a vector
+// containing pairs of strings that represent the operations. If the list
+// contains only deletes then every other element will be an empty string
+// as per http://msdn.microsoft.com/en-us/library/aa365240(VS.85).aspx.
+bool GetPendingMoves(PendingMoveVector* pending_moves) {
+  DCHECK(pending_moves);
+  pending_moves->clear();
+
+  // Get the current value of the key.
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_QUERY_VALUE);
+  HKEY session_manager_handle = session_manager_key.Handle();
+  if (!session_manager_handle ||
+      !session_manager_key.HasValue(kPendingFileRenameOps)) {
+    // If the key or the value is missing, that's totally acceptable.
+    return true;
+  }
+
+  // Read the content of the registry value to retrieve the pending moves.
+  base::string16 pending_moves_value;
+  uint32_t pending_moves_value_type;
+  if (!ReadRegistryValue(session_manager_key, kPendingFileRenameOps,
+                         &pending_moves_value, &pending_moves_value_type,
+                         nullptr)) {
+    DLOG(ERROR) << "Cannot read PendingRename registry value.";
+    return false;
+  }
+
+  if (pending_moves_value_type != REG_MULTI_SZ) {
+    DLOG(ERROR) << "Found PendingRename value of unexpected type.";
+    return false;
+  }
+
+  // We now have a buffer of bytes that is actually a sequence of
+  // null-terminated char16 strings terminated by an additional null character.
+  // Stick this into a vector of strings for clarity.
+  if (!MultiSZToStringArray(pending_moves_value, pending_moves)) {
+    DLOG(ERROR) << "Cannot decode PendingRename registry value.";
+    return false;
+  }
+
+  // Remove the last pending moves entry if it is empty. This entry is found on
+  // Vista+ but not on XP.
+  if (!pending_moves->empty() && pending_moves->back().first.empty() &&
+      pending_moves->back().second.empty()) {
+    pending_moves->pop_back();
+  }
+
+  return true;
+}
+
+bool SetPendingMoves(const PendingMoveVector& pending_moves) {
+  // Retrieve the key content into a buffer.
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_CREATE_SUB_KEY | KEY_SET_VALUE);
+  if (!session_manager_key.Handle()) {
+    // Couldn't open / create the key.
+    LOG(ERROR) << "Failed to open session manager key for writing.";
+    return false;
+  }
+
+  if (pending_moves.empty()) {
+    // No remaining moves. Don't bother writing that.
+    LONG delete_result = session_manager_key.DeleteValue(kPendingFileRenameOps);
+    return (delete_result == ERROR_SUCCESS ||
+            delete_result == ERROR_FILE_NOT_FOUND);
+  }
+
+  // Serialize pending moves as a sequence of bytes.
+  base::string16 buffer;
+  StringArrayToMultiSZ(pending_moves, &buffer);
+  if (buffer.empty())
+    return false;
+
+  // The pending moves format needs a null entry at the end which consists of
+  // two MULTISZ empty string.
+  base::string16 last_entry(kDoubleNullEntry, base::size(kDoubleNullEntry) - 1);
+  buffer = buffer + last_entry;
+
+  // Write back the serialized values into the registry key.
+  uint32_t size_in_bytes = buffer.size() * sizeof(base::char16);
+  if (session_manager_key.WriteValue(kPendingFileRenameOps, buffer.c_str(),
+                                     size_in_bytes,
+                                     REG_MULTI_SZ) != ERROR_SUCCESS) {
+    LOG(ERROR) << "Failed to update the " << kPendingFileRenameOps << " key.";
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/reboot_deletion_helper.h b/chrome/chrome_cleaner/test/reboot_deletion_helper.h
new file mode 100644
index 0000000..1a9165e9
--- /dev/null
+++ b/chrome/chrome_cleaner/test/reboot_deletion_helper.h
@@ -0,0 +1,36 @@
+// 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.
+
+#ifndef CHROME_CHROME_CLEANER_TEST_REBOOT_DELETION_HELPER_H_
+#define CHROME_CHROME_CLEANER_TEST_REBOOT_DELETION_HELPER_H_
+
+#include <utility>
+#include <vector>
+
+#include "chrome/chrome_cleaner/os/file_path_set.h"
+
+namespace chrome_cleaner {
+
+// Holds the (source, destination) paths of a pending move. An empty
+// destination string means deletion instead of move.
+typedef std::pair<base::string16, base::string16> PendingMove;
+typedef std::vector<PendingMove> PendingMoveVector;
+
+// Returns true if the given file is registered to be deleted on the next
+// reboot.
+bool IsFileRegisteredForPostRebootRemoval(const base::FilePath& file_path);
+
+// Unregister all of the given files from being registered to be deleted after
+// the next reboot.
+bool UnregisterPostRebootRemovals(const FilePathSet& paths);
+
+// Get the list of all the pending post reboot moves.
+bool GetPendingMoves(PendingMoveVector* pending_moves);
+
+// Set all the pending moves for the nest reboot.
+bool SetPendingMoves(const PendingMoveVector& pending_moves);
+
+}  // namespace chrome_cleaner
+
+#endif  // CHROME_CHROME_CLEANER_TEST_REBOOT_DELETION_HELPER_H_
diff --git a/chrome/chrome_cleaner/test/reboot_deletion_helper_unittest.cc b/chrome/chrome_cleaner/test/reboot_deletion_helper_unittest.cc
new file mode 100644
index 0000000..76f3742
--- /dev/null
+++ b/chrome/chrome_cleaner/test/reboot_deletion_helper_unittest.cc
@@ -0,0 +1,322 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/reboot_deletion_helper.h"
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/test/test_reg_util_win.h"
+#include "base/win/registry.h"
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+namespace {
+
+// The moves-pending-reboot is a MULTISZ registry value in the HKLM part of the
+// registry.
+const wchar_t kSessionManagerKey[] =
+    L"SYSTEM\\CurrentControlSet\\Control\\Session Manager";
+const wchar_t kPendingFileRenameOps[] = L"PendingFileRenameOperations";
+
+const uint32_t kMaxRegistryValueLength = 1024;
+
+const wchar_t kRemoveFile1[] = L"remove_one";
+const wchar_t kRemoveFile2[] = L"remove_two";
+const wchar_t kRemoveFile3[] = L"remove_three";
+const wchar_t kRemoveFile4[] = L"remove_four";
+const wchar_t kRemoveFile5[] = L"remove_five";
+const wchar_t kDeleteFile[] = L"";
+const BYTE kNoNullInvalidString[] = {12, 13};
+const BYTE kMissingNullEntryString[] = {65, 0, 0, 0};
+const BYTE kOddSizeEntryString[] = {0, 65, 0, 66, 0xFF, 0, 0, 0, 0};
+const wchar_t kRemoveRawMultipleFiles[] =
+    L"remove_one\0\0remove_two\0remove_three\0\0\0";
+const wchar_t kRemoveRawEmpty0[] = L"";
+const wchar_t kRemoveRawEmpty1[] = L"\0";
+const wchar_t kRemoveRawEmpty2[] = L"\0\0";
+const wchar_t kRemoveRawCorrupt[] = L"file_with_no_ending_null";
+
+bool TestPendingFileRenameOperations(const wchar_t* content,
+                                     size_t content_size,
+                                     PendingMoveVector* pending_moves) {
+  DCHECK(content);
+  DCHECK(pending_moves);
+  pending_moves->clear();
+
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_ALL_ACCESS);
+  if (!session_manager_key.Handle()) {
+    PLOG(ERROR) << "Can't open session manager.";
+    return false;
+  }
+
+  // Write raw content of the registry value.
+  if (session_manager_key.WriteValue(kPendingFileRenameOps, content,
+                                     content_size,
+                                     REG_MULTI_SZ) != ERROR_SUCCESS) {
+    PLOG(ERROR) << "Can't write to registry value '" << kPendingFileRenameOps
+                << "' value: '" << content << "'.";
+    return false;
+  }
+
+  // Read back the pending moves.
+  if (!GetPendingMoves(pending_moves)) {
+    PLOG(ERROR) << "Can't read back or parse the registry value '"
+                << kPendingFileRenameOps << "'.";
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace
+
+TEST(RebootDeletionHelper, GetPendingMovesRawValue) {
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  PendingMoveVector pending_moves;
+  EXPECT_TRUE(
+      TestPendingFileRenameOperations(kRemoveRawEmpty0, 0, &pending_moves));
+  EXPECT_TRUE(pending_moves.empty());
+
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawEmpty0, sizeof(kRemoveRawEmpty0), &pending_moves));
+  EXPECT_TRUE(pending_moves.empty());
+
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawEmpty1, sizeof(kRemoveRawEmpty1), &pending_moves));
+  EXPECT_TRUE(pending_moves.empty());
+
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawEmpty2, sizeof(kRemoveRawEmpty2), &pending_moves));
+  EXPECT_TRUE(pending_moves.empty());
+
+  EXPECT_TRUE(TestPendingFileRenameOperations(kRemoveRawMultipleFiles,
+                                              sizeof(kRemoveRawMultipleFiles),
+                                              &pending_moves));
+  EXPECT_THAT(pending_moves,
+              testing::ElementsAre(std::make_pair(kRemoveFile1, kDeleteFile),
+                                   std::make_pair(kRemoveFile2, kRemoveFile3)));
+
+  const wchar_t kRemoveRawSingleFile[] = L"remove_one\0\0";
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawSingleFile, sizeof(kRemoveRawSingleFile), &pending_moves));
+  EXPECT_THAT(pending_moves,
+              testing::ElementsAre(std::make_pair(kRemoveFile1, kDeleteFile)));
+
+  const wchar_t kRemoveRawRename0[] = L"remove_one\0remove_two";
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawRename0, sizeof(kRemoveRawRename0), &pending_moves));
+  EXPECT_THAT(pending_moves,
+              testing::ElementsAre(std::make_pair(kRemoveFile1, kRemoveFile2)));
+
+  const wchar_t kRemoveRawRename1[] = L"remove_one\0remove_two\0";
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawRename1, sizeof(kRemoveRawRename1), &pending_moves));
+  EXPECT_THAT(pending_moves,
+              testing::ElementsAre(std::make_pair(kRemoveFile1, kRemoveFile2)));
+
+  const wchar_t kRemoveRawRename2[] = L"remove_one\0remove_two\0\0";
+  EXPECT_TRUE(TestPendingFileRenameOperations(
+      kRemoveRawRename2, sizeof(kRemoveRawRename2), &pending_moves));
+  EXPECT_THAT(pending_moves,
+              testing::ElementsAre(std::make_pair(kRemoveFile1, kRemoveFile2)));
+
+  EXPECT_FALSE(TestPendingFileRenameOperations(
+      kRemoveRawCorrupt, sizeof(kRemoveRawCorrupt), &pending_moves));
+}
+
+TEST(RebootDeletionHelper, SetPendingMovesRawValue) {
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_ALL_ACCESS);
+  EXPECT_TRUE(session_manager_key.Handle());
+
+  // Write some pending moves.
+  PendingMoveVector pending_moves;
+  pending_moves.push_back(std::make_pair(kRemoveFile1, kDeleteFile));
+  pending_moves.push_back(std::make_pair(kRemoveFile2, kRemoveFile3));
+
+  EXPECT_TRUE(SetPendingMoves(pending_moves));
+
+  wchar_t buffer[kMaxRegistryValueLength];
+  DWORD buffer_size = kMaxRegistryValueLength;
+  DWORD buffer_type = REG_NONE;
+
+  // Validate the raw content of the registry value.
+  EXPECT_EQ(ERROR_SUCCESS,
+            session_manager_key.ReadValue(kPendingFileRenameOps, &buffer[0],
+                                          &buffer_size, &buffer_type));
+
+  EXPECT_EQ(buffer_size, sizeof(kRemoveRawMultipleFiles));
+  EXPECT_EQ(0, ::memcmp(kRemoveRawMultipleFiles, buffer, buffer_size));
+  EXPECT_EQ(REG_MULTI_SZ, buffer_type);
+}
+
+TEST(RebootDeletionHelper, SetPendingMovesValueWithEmptyInput) {
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_ALL_ACCESS);
+  EXPECT_TRUE(session_manager_key.Handle());
+
+  // Write raw content of the registry value.
+  EXPECT_EQ(ERROR_SUCCESS, session_manager_key.WriteValue(
+                               kPendingFileRenameOps, kRemoveRawMultipleFiles,
+                               sizeof(kRemoveRawMultipleFiles), REG_MULTI_SZ));
+
+  // Write an empty pending moves vector.
+  PendingMoveVector pending_moves;
+  SetPendingMoves(pending_moves);
+
+  // The registry value must be removed.
+  EXPECT_FALSE(session_manager_key.HasValue(kPendingFileRenameOps));
+}
+
+TEST(RebootDeletionHelper, GetAndSetPendingMoves) {
+  // Declare the scoped temp dir before the registry override manager because
+  // the recursive deletion of folders fail when running elevated while a
+  // registry override is active.
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  // Expect the registry key to be empty.
+  PendingMoveVector pending_moves;
+  EXPECT_TRUE(GetPendingMoves(&pending_moves));
+  ASSERT_TRUE(pending_moves.empty());
+
+  // Write back some moves into the registry key.
+  base::FilePath file_path1 = temp.GetPath().Append(kRemoveFile1);
+  base::FilePath file_path2 = temp.GetPath().Append(kRemoveFile2);
+  base::FilePath file_path3 = temp.GetPath().Append(kRemoveFile3);
+
+  pending_moves.push_back(
+      std::make_pair(file_path1.value(), file_path2.value()));
+  pending_moves.push_back(std::make_pair(file_path3.value(), kDeleteFile));
+
+  EXPECT_TRUE(SetPendingMoves(pending_moves));
+
+  // Read back the written moves.
+  PendingMoveVector written_moves;
+  EXPECT_TRUE(GetPendingMoves(&written_moves));
+
+  // Validate that moves before and after serialisation are the same.
+  EXPECT_THAT(written_moves, testing::ElementsAreArray(pending_moves));
+
+  // Write back an empty set of moves.
+  pending_moves.clear();
+  EXPECT_TRUE(SetPendingMoves(pending_moves));
+  EXPECT_TRUE(GetPendingMoves(&written_moves));
+  EXPECT_TRUE(written_moves.empty());
+}
+
+TEST(RebootDeletionHelper, GetInvalidPendingMoves) {
+  // Open the pending registry key to write into invalid data.
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  base::win::RegKey session_manager_key(HKEY_LOCAL_MACHINE, kSessionManagerKey,
+                                        KEY_CREATE_SUB_KEY | KEY_SET_VALUE);
+  EXPECT_TRUE(session_manager_key.Handle());
+
+  // Write an invalid pending moves registry key with a wrong type.
+  EXPECT_EQ(ERROR_SUCCESS,
+            session_manager_key.WriteValue(kPendingFileRenameOps, 0xCCCCCCCC));
+  PendingMoveVector pending_moves;
+  EXPECT_FALSE(GetPendingMoves(&pending_moves));
+
+  // Write an invalid pending moves registry key with an invalid string format.
+  EXPECT_EQ(ERROR_SUCCESS, session_manager_key.WriteValue(
+                               kPendingFileRenameOps, kNoNullInvalidString,
+                               sizeof(kNoNullInvalidString), REG_MULTI_SZ));
+  EXPECT_FALSE(GetPendingMoves(&pending_moves));
+
+  // Write an invalid string without the ending empty entry.
+  EXPECT_EQ(ERROR_SUCCESS, session_manager_key.WriteValue(
+                               kPendingFileRenameOps, kMissingNullEntryString,
+                               sizeof(kMissingNullEntryString), REG_MULTI_SZ));
+  EXPECT_FALSE(GetPendingMoves(&pending_moves));
+
+  // Write an invalid string with an odd number of bytes.
+  EXPECT_EQ(ERROR_SUCCESS, session_manager_key.WriteValue(
+                               kPendingFileRenameOps, kOddSizeEntryString,
+                               sizeof(kOddSizeEntryString), REG_MULTI_SZ));
+  EXPECT_TRUE(GetPendingMoves(&pending_moves));
+}
+
+TEST(RebootDeletionHelper, UnregisterPostRebootRemovals) {
+  // Declare the scoped temp dir before the registry override manager because
+  // the recursive deletion of folders fail when running elevated while a
+  // registry override is active.
+  base::ScopedTempDir temp;
+  ASSERT_TRUE(temp.CreateUniqueTempDir());
+
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  // Write some moves and renamings into the registry key.
+  base::FilePath file_path1 = temp.GetPath().Append(kRemoveFile1);
+  base::FilePath file_path2 = temp.GetPath().Append(kRemoveFile2);
+  base::FilePath file_path3 = temp.GetPath().Append(kRemoveFile3);
+  base::FilePath file_path4 = temp.GetPath().Append(kRemoveFile4);
+  base::FilePath file_path5 = temp.GetPath().Append(kRemoveFile5);
+
+  PendingMoveVector pending_moves;
+  pending_moves.push_back(std::make_pair(file_path1.value(), kDeleteFile));
+  pending_moves.push_back(std::make_pair(file_path2.value(), kDeleteFile));
+  pending_moves.push_back(std::make_pair(file_path3.value(), kDeleteFile));
+  pending_moves.push_back(
+      std::make_pair(file_path4.value(), file_path5.value()));
+
+  EXPECT_TRUE(SetPendingMoves(pending_moves));
+
+  // Unregister paths from the pending moves.
+  FilePathSet paths;
+  paths.Insert(file_path2);
+  paths.Insert(file_path3);
+  // A file renaming action must not be removed, even if a unregister is
+  // requested.
+  paths.Insert(file_path4);
+  EXPECT_TRUE(UnregisterPostRebootRemovals(paths));
+
+  // Read back the pending moves.
+  PendingMoveVector written_moves;
+  EXPECT_TRUE(GetPendingMoves(&written_moves));
+  EXPECT_THAT(written_moves,
+              testing::ElementsAre(
+                  std::make_pair(file_path1.value(), kDeleteFile),
+                  std::make_pair(file_path4.value(), file_path5.value())));
+}
+
+TEST(RebootDeletionHelper, UnregisterPostRebootRemovalsOfQualifiedPath) {
+  registry_util::RegistryOverrideManager registry_override;
+  registry_override.OverrideRegistry(HKEY_LOCAL_MACHINE);
+
+  // Add a pending deletion with a qualified path.
+  PendingMoveVector pending_moves;
+  pending_moves.push_back(
+      std::make_pair(L"\\??\\C:\\this_file_doesnt_exist", kDeleteFile));
+  EXPECT_TRUE(SetPendingMoves(pending_moves));
+
+  // Try to remove it with an unqualified path.
+  FilePathSet paths;
+  paths.Insert(base::FilePath(FILE_PATH_LITERAL("C:\\this_file_doesnt_exist")));
+  EXPECT_TRUE(UnregisterPostRebootRemovals(paths));
+
+  // Read back the pending moves.
+  PendingMoveVector written_moves;
+  EXPECT_TRUE(GetPendingMoves(&written_moves));
+  EXPECT_TRUE(written_moves.empty());
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/resources/BUILD.gn b/chrome/chrome_cleaner/test/resources/BUILD.gn
index aa31e346..f363a360 100644
--- a/chrome/chrome_cleaner/test/resources/BUILD.gn
+++ b/chrome/chrome_cleaner/test/resources/BUILD.gn
@@ -53,3 +53,13 @@
     ":compute_sample_dll_digest",
   ]
 }
+
+copy("signed_empty_dll") {
+  sources = [
+    "signed_dll/signed_empty_dll.dll",
+  ]
+
+  outputs = [
+    "$root_out_dir/signed_empty_dll.dll",
+  ]
+}
diff --git a/chrome/chrome_cleaner/test/resources/signed_dll/README.md b/chrome/chrome_cleaner/test/resources/signed_dll/README.md
new file mode 100644
index 0000000..fa57d67d
--- /dev/null
+++ b/chrome/chrome_cleaner/test/resources/signed_dll/README.md
@@ -0,0 +1,35 @@
+### Signed test files
+
+This directory contains a self-signed test certificate and its private key.
+
+1. cleaner_test_cert.crt and cleaner_test_key.key were generated with:
+
+   ```
+   openssl req -new -newkey rsa:4096 -x509 -sha256 -days 1095 -nodes -out cleaner_test_cert.crt -keyout cleaner_test_key.key
+   ```
+
+   Leave every entry blank except CN set to "Cleaner Test Cert".
+
+   openssl is bundled with Windows Git. A copy can be found in
+   depot_tools/win_tools-2_7_6_bin/git.
+
+1. cleaner_test_cert.pfx was generated with:
+
+   ```
+   openssl pkcs12 -in cleaner_test_cert.crt -inkey cleaner_test_key.key -export -out cleaner_test_cert.pfx
+   ```
+
+   Under Windows Git's bash shell, you need to use the "winpty" wrapper because
+   it asks for user input. Leave the password blank.
+
+1. signed_empty_dll.dll was generated using the
+   //chrome/chrome_cleaner/test:empty_dll target, and then signed with
+
+   ```
+   signtool.exe sign /fd sha256 /f cleaner_test_cert.pfx signed_empty_dll.dll
+   ```
+
+   A copy of signtool.exe can be found in depot_tools/win_toolchain/vs_files.
+
+   Under Windows Git's bash shell, don't forget to escape the arguments (use
+   "//fd" and "//f"). The error message if you don't escape them is cryptic.
diff --git a/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.crt b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.crt
new file mode 100644
index 0000000..a43b1e04
--- /dev/null
+++ b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.crt
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIFCzCCAvOgAwIBAgIJANsfwJbhowz8MA0GCSqGSIb3DQEBCwUAMBwxGjAYBgNV
+BAMMEUNsZWFuZXIgVGVzdCBDZXJ0MB4XDTE4MDcyMDE1MjcxN1oXDTIxMDcxOTE1
+MjcxN1owHDEaMBgGA1UEAwwRQ2xlYW5lciBUZXN0IENlcnQwggIiMA0GCSqGSIb3
+DQEBAQUAA4ICDwAwggIKAoICAQDDJXXzVyMjVU9IaufYZnbcfm+iDuKdIIStGIkP
+KVlT22cnUtSVDKykJy+SAmnzFN0tsMWyYPzTj3onfPQ6y+qAW+AhDpKCASHeMUJC
+VmPAa2mW06hEJpSRLLsBkUFV8jQgvgA0EZlBzIE9tTJXj3kTGry41Fb+Yh/RHRuV
+VXCVK5aYRtbZznLJOSkGri8k8dIqiVBOzI3Z83JD1RmfGisRSgvtg7SoQ8l+ZfQz
+bycw1wP4XJO+/NysksBW10Q5bB4XjwuPFURk+OGVlm/7WoaR6nFoQ0G9Z1YYh+pH
+FGlIYuoFngCznrwxXEAFtOVTXWVrumWhOKnHMEYkdiNPujzYekeu7ch8si/ThTH4
+m8Aphw8QAFQ2lKr9gAM/6fxSXhFUfo4juXtJF3Lz7CeLe7fY76e2NPaEwY7MyEuo
+vx6KXvemHFDJtqix2HCQCH/03TrAZNYavxWxAaH6DYpAuQRw9yUWdALFoSYVykQV
+vZ715yMtLRfT7Fi7UBK73G9G65rVbXPlDuB5uxwK48QA42PHT+u7QUY7BSKiJJBF
+6+C8BLnzVgH0ew0hFtGIUba2AYhV94RDkfTRUUq3ZuK1OmKtyC2XuHv7UXvrurlm
+BqhKl0yoACZnl3Jf3Fjouiq+Wh3IgzKvWCglYQUKQMvEHFnVk5Yu4Oh1s9xD5Mep
+PQ2JWQIDAQABo1AwTjAdBgNVHQ4EFgQUiRfCjDp9ApRzG2WbBPG/1z0jiIwwHwYD
+VR0jBBgwFoAUiRfCjDp9ApRzG2WbBPG/1z0jiIwwDAYDVR0TBAUwAwEB/zANBgkq
+hkiG9w0BAQsFAAOCAgEARRS1G7qAzz5wN8X6CSKFsBf3XXlw/De4fm8Z2Hs13GdP
+TMq8ASUgX3v+rlg/rKIiRov7sbPiaS3BpCwPfV/cCl5QVr3NWr/uqa5TPwYfb/y9
+vIWsHffD3HMp9wE7lxJLlbWQ1gX7CGYPbSJ4z+WnXg4f3KYu9Cjk1hUktpANT8gj
+p9vR7/kL9pEH70LWwTk8zDm6ibqkvSfEHP6wJpQBT6CiBfEB8x29F0klqQJ7jkh5
+wp4gFHQOTGmAdARvQOb788L1EWBIjuRgG0AmB2CoS+VwXl72xTMEWtMkitKtx0oP
+yvSXaGpW3/DcnxuWS7t0mtvNZMKmGj9rASeQcbqzGkpUmZkOHtB2msAsHVBakugb
+JsDnuwrYX5C7D8fIdDzHQPXXrZUjqb6qjOy58EVqYtqINcYzA9j766Cx4SJujmbR
+KrHU/9MAH39hcGrU/NW6mE8IYQ1SFpl8v2g7KdG0Er+ToTiCkOPrVJIst53G+0TG
+K6l81JfQ58J7ilFlcF0GWKaTZY+7d7889PgAvlfazxsUuioM48vQYUlA/ucbbyBN
+4nb/0q9kpY+tCiTZlFxCrmLNlspJHUvWUwbelUVtp+pjppbniMXXNwbOKvZltcoC
+K/Ownd8Z+5hsqDJcJdZmqO1bFNEI1RD8Oz4kFOso5LU8nItB78/lz3WnNLKHeS4=
+-----END CERTIFICATE-----
diff --git a/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.pfx b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.pfx
new file mode 100644
index 0000000..c92f146
--- /dev/null
+++ b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_cert.pfx
Binary files differ
diff --git a/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_key.key b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_key.key
new file mode 100644
index 0000000..e79bee9
--- /dev/null
+++ b/chrome/chrome_cleaner/test/resources/signed_dll/cleaner_test_key.key
@@ -0,0 +1,52 @@
+-----BEGIN PRIVATE KEY-----
+MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDDJXXzVyMjVU9I
+aufYZnbcfm+iDuKdIIStGIkPKVlT22cnUtSVDKykJy+SAmnzFN0tsMWyYPzTj3on
+fPQ6y+qAW+AhDpKCASHeMUJCVmPAa2mW06hEJpSRLLsBkUFV8jQgvgA0EZlBzIE9
+tTJXj3kTGry41Fb+Yh/RHRuVVXCVK5aYRtbZznLJOSkGri8k8dIqiVBOzI3Z83JD
+1RmfGisRSgvtg7SoQ8l+ZfQzbycw1wP4XJO+/NysksBW10Q5bB4XjwuPFURk+OGV
+lm/7WoaR6nFoQ0G9Z1YYh+pHFGlIYuoFngCznrwxXEAFtOVTXWVrumWhOKnHMEYk
+diNPujzYekeu7ch8si/ThTH4m8Aphw8QAFQ2lKr9gAM/6fxSXhFUfo4juXtJF3Lz
+7CeLe7fY76e2NPaEwY7MyEuovx6KXvemHFDJtqix2HCQCH/03TrAZNYavxWxAaH6
+DYpAuQRw9yUWdALFoSYVykQVvZ715yMtLRfT7Fi7UBK73G9G65rVbXPlDuB5uxwK
+48QA42PHT+u7QUY7BSKiJJBF6+C8BLnzVgH0ew0hFtGIUba2AYhV94RDkfTRUUq3
+ZuK1OmKtyC2XuHv7UXvrurlmBqhKl0yoACZnl3Jf3Fjouiq+Wh3IgzKvWCglYQUK
+QMvEHFnVk5Yu4Oh1s9xD5MepPQ2JWQIDAQABAoICAQCRoADXKK12DpFtjymYWU5V
+2JxhqQ3/B2c67NZK1CZu54mg1LUCzUR/8yYSpW5/EZDEKeg95xaEocsccKiov8ct
+JmKpCIDYNxQZBVVWv7UMwJs5DJXC1a+EbobW8ph5FJdF38OzF3bwnTXM4MzCfrRx
+R0CSBRMuHfd0S25sEChFiROGa0alnuQVuWweKhnQTgzx5Spiw08P2BXq/Llz+0ks
+S79+7QwBjSRuCJMlVss+LRYvXpZ6raPXvGN/6oBlAYOrPPn5OnuhhgCBapQCVFmb
+xgH/NkF2oAilobd4d4jhlb7hljkb0VbK1vaHy6hef5HRxHVWzDwWArY1O1u6gVYp
+PtN1ut/gFqEQRewwgZnN+rZP0Z2v1nL4s/0Nb8Y6BNtgEYHOnQZqHlq82JRCOlP8
+ezo+JkoZNZ9Aog/FVf85zkj02jxg0IIPYULQY66S3EWFT9mIHT+S+fiyKu3Y2Rra
+9h5/FlAhNcQY2uuOuKAXmS0Qz1pmv5mpgSrWmMDuYWGXsJ+Eq91IWR1bwSTdIztO
+jKfxzqNrhS1W8CfUHyAXan+yxaCni9AW9Qa7ADbSx49rhP+ihLd1PrXq1V+6LMGc
+MZ2rCL4xYgiZiFuYi89tqSUfJNVpzx0dQSDjOFv5yxGTf10rSxLAXmlN8wk466Ub
+SLLUQmcdwEqcnZT3fG26AQKCAQEA8oVNVM6zcaSyx64iC8ZfamlR/IZB4ARe9EY8
+3Im9D/Q7Z8qPcU2u4ZFDuynyxVhY24TfRKZhV7/Gv21eVbP/ChuobpEz7JaPEZhV
+GPIiTf8uKmvJ/YaQxJrx7MHDntL3SQForexo8cvfd8s7ZCge4hb4QgfxdESRGK7n
+EpaCrbNCMdSERSIA2HKswhypczdygKwVwm0XPae/YZeTP73/T8RdruD89NZcToTG
+vSTi6O6fdmVYGxkKb9TM49o4LJvm00AzlsV6hhoVGUJcqqFDrirxjOWJyWMFmJxb
+d7ZH3sHnX0Z6l91abSAwlUNoMg+ucPdQo+B+c7SPxKz9UQq64QKCAQEAzf4YB5q4
+1YBx2XRaJi8puSCCmnJKp+080pVxHrPOe0JqVa8HH4rVeMju34vFzLEk8Glvjc7u
+iRkqBTkU38wjTY70H+rj35njhrXMnuKDrmBMgezQAONZLpej44SjzSyF6djnBlxs
+a6cP9UuWKdts7hiUyqzGA55nMb7PAE8tG9lPh0FWktAnQYtT0Rn58D/WF5uy0c8h
+aPtUgrgExAvBNJpPAtnq7XOG75Iny5s91i8EXFDkIlTXYQp+0f+U6Qf75yE7BHzB
+TbuKI4Qo9/w3GMW1hMlBBydFwSJckmlP/fwVpfHog5+rHDZG2aHcphK23bO/tvJV
+/6yahwx1nz7VeQKCAQAN6QVxetWiDA9RErTTNhKc+OOB93Vp0vZbTngJMkFM2/ZY
+Uq79kbYZLArVfmd1WEboeGuR9XUZ4l8U9cH2aneTbdiwVtXCmTQljzY6UxESpjNQ
+rZQNXZ2KGVUM/mQpBPK4FkOZzjiKveXYaijC6uYyk5yztN7ti01DPCz2zPk7209N
+qmHX0UZ5I8Ky84/okuKXbMdmunkdyTRZ9aa1fkFZouq4sCDyLiVnP4hiqu307FLr
+KI7wJvSJS4xg+VBFhr+rmEAdQsBvVqmlJEBKbSuDnuTx7uyDR5G3mihI6oSey0Jp
+HZLEiSa5oaIHvbEJRgr8YcMXUzYNjuq8Hiv9bP8hAoIBAQCuDuOdIVbHSSZqWY+H
+LljyDg9tk9+Tb7nyMsaH6+Uwb9lMF35MX9KrohV+HSwBHzoYTu8tA0q52+KO0UHb
+LTIzafTMN31fRjhkbp+9LaeZI9PiAQlthq2n2ghoyn5icxmglF/6FwSiHmM0oS78
+pWWw9mJbs4wKKMIH3bQqDb0PCBvULRiLK4nQL3ued3WjVT2Ba1W5RW10uNIbNoUI
+ZupVmYHj5eFFzVWaf4RS3hVtMwNbQhrTC5+GZwjsRys7kTyAe6rTytrH5Qz/n7/C
+c4LW0tDjp+7jrYKahH92U7h845IjS3puJe+/AfnyEXxRdATC5wy6+KBET0Ovk46c
+Bcr5AoIBAEFA+NHs3omya+XLjed6fxRg6Bi14wIpMLCQbg7H+P4SXfSZLUk3e+zh
+gUjMG7vwzHGp7a5CJcL+Q7y4S5dcmwrgV4JNr4211P6HmehqaVjX3GJa79qe6wuB
+tD60Fh2cYg0DRZ555E60T/kxerwPQ5JEwr8tVkK6hcEyMIWPFmSB90E+cmIGmrzM
+kEvAEqlPVWc3uzFymH60yVbdUDAF8nSlBwjXa4RuXlLePflI4sAD3xSb+DRn/k0B
+cDKIrwpL+lCuIdWs1ARzQ1KKNQ80tKCAy8pPd4ZtVEgTdxiJfbpi+dlW65mLL/G5
+wU4oaRK0RLzuQ79pYtXPcXBbIBRm7Zo=
+-----END PRIVATE KEY-----
diff --git a/chrome/chrome_cleaner/test/resources/signed_dll/signed_empty_dll.dll b/chrome/chrome_cleaner/test/resources/signed_dll/signed_empty_dll.dll
new file mode 100755
index 0000000..c9fa53b
--- /dev/null
+++ b/chrome/chrome_cleaner/test/resources/signed_dll/signed_empty_dll.dll
Binary files differ
diff --git a/chrome/chrome_cleaner/test/test_executables.cc b/chrome/chrome_cleaner/test/test_executables.cc
new file mode 100644
index 0000000..f92500559
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_executables.cc
@@ -0,0 +1,65 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/test_executables.h"
+
+#include "base/base_paths.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/process/launch.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/win/win_util.h"
+#include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+
+namespace chrome_cleaner {
+
+// If you add another test executable here, also add it to the data_deps in
+// the "test_executables" target of chrome_cleaner/test/BUILD.gn.
+
+const base::char16 kTestServiceExecutableName[] = L"test_service.exe";
+const base::char16 kTestProcessExecutableName[] = L"test_process.exe";
+
+base::Process LongRunningProcess(base::CommandLine* cmd) {
+  base::FilePath exe_dir;
+  if (!base::PathService::Get(base::DIR_EXE, &exe_dir)) {
+    LOG(ERROR) << "Failed to get the executable path, unable to create always "
+                  "running process";
+    return base::Process();
+  }
+
+  base::FilePath exe_path =
+      exe_dir.Append(chrome_cleaner::kTestProcessExecutableName);
+  base::CommandLine command_line(exe_path);
+  // This will ensure this new process will run for one minute before dying.
+  command_line.AppendSwitchASCII(chrome_cleaner::kTestSleepMinutesSwitch, "1");
+
+  std::unique_ptr<base::WaitableEvent> init_done_event =
+      chrome_cleaner::CreateInheritableEvent(
+          base::WaitableEvent::ResetPolicy::AUTOMATIC,
+          base::WaitableEvent::InitialState::NOT_SIGNALED);
+  command_line.AppendSwitchNative(
+      chrome_cleaner::kInitDoneNotifierSwitch,
+      base::UintToString16(
+          base::win::HandleToUint32(init_done_event->handle())));
+
+  if (cmd)
+    *cmd = command_line;
+
+  base::LaunchOptions launch_options;
+  launch_options.handles_to_inherit.push_back(init_done_event->handle());
+  base::Process result = base::LaunchProcess(command_line, launch_options);
+
+  if (!init_done_event->TimedWait(base::TimeDelta::FromSeconds(10))) {
+    LOG(ERROR) << "Process did not signal";
+    result.Terminate(/*exit_code=*/1, /*wait=*/false);
+    return base::Process();
+  }
+
+  return result;
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/test_executables.h b/chrome/chrome_cleaner/test/test_executables.h
new file mode 100644
index 0000000..ca6a2af1
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_executables.h
@@ -0,0 +1,27 @@
+// 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.
+
+#ifndef CHROME_CHROME_CLEANER_TEST_TEST_EXECUTABLES_H_
+#define CHROME_CHROME_CLEANER_TEST_TEST_EXECUTABLES_H_
+
+#include "base/command_line.h"
+#include "base/process/process.h"
+#include "base/strings/string16.h"
+
+namespace chrome_cleaner {
+
+// The name of the service executable used for tests.
+extern const base::char16 kTestServiceExecutableName[];
+
+// The name of the executable used for tests.
+extern const base::char16 kTestProcessExecutableName[];
+
+// Creates a process that will run for a minute, which is long enough to be
+// killed by a reasonably fast unit or integration test.
+// Populates |command_line| with the used command line if it is not nullptr.
+base::Process LongRunningProcess(base::CommandLine* command_line);
+
+}  // namespace chrome_cleaner
+
+#endif  // CHROME_CHROME_CLEANER_TEST_TEST_EXECUTABLES_H_
diff --git a/chrome/chrome_cleaner/test/test_layered_service_provider.cc b/chrome/chrome_cleaner/test/test_layered_service_provider.cc
new file mode 100644
index 0000000..a792fc6
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_layered_service_provider.cc
@@ -0,0 +1,66 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/test_layered_service_provider.h"
+
+namespace chrome_cleaner {
+
+TestLayeredServiceProvider::TestLayeredServiceProvider() = default;
+
+TestLayeredServiceProvider::~TestLayeredServiceProvider() = default;
+
+int TestLayeredServiceProvider::EnumProtocols(int* protocols,
+                                              WSAPROTOCOL_INFOW* protocol_info,
+                                              DWORD* nb_protocol_info,
+                                              int* error) const {
+  // We don't use the protocols argument yet.
+  DCHECK(!protocols);
+  DCHECK(nb_protocol_info);
+  DCHECK(error);
+  size_t bytes_needed = protocol_info_.size() * sizeof(WSAPROTOCOL_INFOW);
+  if (*nb_protocol_info < bytes_needed) {
+    *nb_protocol_info = bytes_needed;
+    *error = WSAENOBUFS;
+    return SOCKET_ERROR;
+  }
+  *nb_protocol_info = bytes_needed;
+  std::map<GUID, base::FilePath, GUIDLess>::const_iterator iter =
+      protocol_info_.begin();
+  for (size_t i = 0; iter != protocol_info_.end(); ++iter, ++i) {
+    protocol_info[i].ProviderId = iter->first;
+  }
+  return protocol_info_.size();
+}
+
+int TestLayeredServiceProvider::GetProviderPath(GUID* provider_id,
+                                                wchar_t* provider_dll_path,
+                                                int* provider_dll_path_len,
+                                                int* error) const {
+  DCHECK(provider_id);
+  DCHECK(provider_dll_path);
+  DCHECK(provider_dll_path_len);
+  DCHECK(error);
+  std::map<GUID, base::FilePath, GUIDLess>::const_iterator iter =
+      protocol_info_.find(*provider_id);
+  if (iter == protocol_info_.end()) {
+    *error = WSAEINVAL;
+    return SOCKET_ERROR;
+  }
+  if (*provider_dll_path_len <
+      static_cast<int>(iter->second.value().size() + 1)) {
+    *error = WSAEFAULT;
+    return SOCKET_ERROR;
+  }
+  ::wcsncpy(provider_dll_path, iter->second.value().c_str(),
+            iter->second.value().size());
+  provider_dll_path[iter->second.value().size()] = L'\0';
+  return 0;
+}
+
+void TestLayeredServiceProvider::AddProvider(const GUID& provider_id,
+                                             const base::FilePath& path) {
+  protocol_info_[provider_id] = path;
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/test_layered_service_provider.h b/chrome/chrome_cleaner/test/test_layered_service_provider.h
new file mode 100644
index 0000000..dc32939
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_layered_service_provider.h
@@ -0,0 +1,39 @@
+// 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.
+
+#ifndef CHROME_CHROME_CLEANER_TEST_TEST_LAYERED_SERVICE_PROVIDER_H_
+#define CHROME_CHROME_CLEANER_TEST_TEST_LAYERED_SERVICE_PROVIDER_H_
+
+#include <map>
+
+#include "base/files/file_path.h"
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "chrome/chrome_cleaner/os/layered_service_provider_api.h"
+
+namespace chrome_cleaner {
+
+class TestLayeredServiceProvider : public LayeredServiceProviderAPI {
+ public:
+  TestLayeredServiceProvider();
+  ~TestLayeredServiceProvider() override;
+
+  int EnumProtocols(int* protocols,
+                    WSAPROTOCOL_INFOW* protocol_info,
+                    DWORD* nb_protocol_info,
+                    int* error) const override;
+
+  int GetProviderPath(GUID* provider_id,
+                      wchar_t* provider_dll_path,
+                      int* provider_dll_path_len,
+                      int* error) const override;
+
+  void AddProvider(const GUID& provider_id, const base::FilePath& path);
+
+ private:
+  std::map<GUID, base::FilePath, GUIDLess> protocol_info_;
+};
+
+}  // namespace chrome_cleaner
+
+#endif  // CHROME_CHROME_CLEANER_TEST_TEST_LAYERED_SERVICE_PROVIDER_H_
diff --git a/chrome/chrome_cleaner/test/test_main.cc b/chrome/chrome_cleaner/test/test_main.cc
index 316aba8..f551a25 100644
--- a/chrome/chrome_cleaner/test/test_main.cc
+++ b/chrome/chrome_cleaner/test/test_main.cc
@@ -2,22 +2,76 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <memory>
+
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/test/launcher/unit_test_launcher.h"
 #include "base/test/test_suite.h"
-#include "chrome/chrome_cleaner/os/initializer.h"
-#include "chrome/chrome_cleaner/pup_data/pup_data.h"
-#include "chrome/chrome_cleaner/test/test_uws_catalog.h"
+#include "base/win/scoped_com_initializer.h"
+#include "chrome/chrome_cleaner/os/rebooter.h"
+#include "chrome/chrome_cleaner/os/secure_dll_loading.h"
+#include "chrome/chrome_cleaner/os/system_util_cleaner.h"
+#include "chrome/chrome_cleaner/os/task_scheduler.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+#include "sandbox/win/src/sandbox_factory.h"
+
+namespace {
+
+bool IsSandboxedProcess() {
+  static const bool is_sandboxed_process =
+      (sandbox::SandboxFactory::GetTargetServices() != nullptr);
+  return is_sandboxed_process;
+}
+
+}  // namespace
 
 int main(int argc, char** argv) {
+  // This must be executed as soon as possible to reduce the number of dlls that
+  // the code might try to load before we can lock things down.
+  //
+  // We enable secure DLL loading in the test suite to be sure that it doesn't
+  // affect the behaviour of functionality that's tested.
+  chrome_cleaner::EnableSecureDllLoading();
+
   base::TestSuite test_suite(argc, argv);
 
-  chrome_cleaner::PUPData::InitializePUPData(
-      {&chrome_cleaner::TestUwSCatalog::GetInstance()});
-  chrome_cleaner::InitializeOSUtils();
+  if (!chrome_cleaner::SetupTestConfigs())
+    return 1;
 
-  return base::LaunchUnitTests(
+  if (!chrome_cleaner::CheckTestPrivileges())
+    return 1;
+
+  // Make sure tests will not end up in an infinite reboot loop.
+  if (chrome_cleaner::Rebooter::IsPostReboot())
+    return 0;
+
+  // ScopedCOMInitializer keeps COM initialized in a specific scope. We don't
+  // want to initialize it for sandboxed processes, so manage its lifetime with
+  // a unique_ptr, which will call ScopedCOMInitializer's destructor when it
+  // goes out of scope below.
+  std::unique_ptr<base::win::ScopedCOMInitializer> scoped_com_initializer;
+
+  if (!IsSandboxedProcess()) {
+    scoped_com_initializer = std::make_unique<base::win::ScopedCOMInitializer>(
+        base::win::ScopedCOMInitializer::kMTA);
+    bool success = chrome_cleaner::InitializeCOMSecurity();
+    DCHECK(success) << "InitializeCOMSecurity() failed.";
+
+    success = chrome_cleaner::TaskScheduler::Initialize();
+    DCHECK(success) << "TaskScheduler::Initialize() failed.";
+  }
+
+  // Some tests will fail if two tests try to launch test_process.exe
+  // simultaneously, so run the tests serially. This will still shard them and
+  // distribute the shards to different swarming bots, but tests will run
+  // serially on each bot.
+  const int result = base::LaunchUnitTestsSerially(
       argc, argv,
       base::BindOnce(&base::TestSuite::Run, base::Unretained(&test_suite)));
+
+  if (!IsSandboxedProcess())
+    chrome_cleaner::TaskScheduler::Terminate();
+
+  return result;
 }
diff --git a/chrome/chrome_cleaner/test/test_process_main.cc b/chrome/chrome_cleaner/test/test_process_main.cc
new file mode 100644
index 0000000..de664d6
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_process_main.cc
@@ -0,0 +1,97 @@
+// 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.
+
+#include <windows.h>
+
+#include <string>
+
+#include "base/at_exit.h"
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_number_conversions.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/time/time.h"
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "chrome/chrome_cleaner/os/initializer.h"
+#include "chrome/chrome_cleaner/os/pre_fetched_paths.h"
+#include "chrome/chrome_cleaner/os/secure_dll_loading.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+#include "chrome/chrome_cleaner/test/test_util.h"
+
+namespace {
+
+constexpr base::char16 kLogFileExtension[] = L"log";
+
+}  // namespace
+
+int APIENTRY wWinMain(HINSTANCE, HINSTANCE, wchar_t*, int) {
+  // This must be executed as soon as possible to reduce the number of dlls that
+  // the code might try to load before we can lock things down.
+  chrome_cleaner::EnableSecureDllLoading();
+
+  base::AtExitManager at_exit;
+
+  bool success = base::CommandLine::Init(0, nullptr);
+  DCHECK(success);
+
+  if (!chrome_cleaner::SetupTestConfigs())
+    return 1;
+
+  // Initialize the logging settings to set a specific log file name.
+  base::FilePath exe_file_path =
+      chrome_cleaner::PreFetchedPaths::GetInstance()->GetExecutablePath();
+
+  base::FilePath log_file_path(
+      exe_file_path.ReplaceExtension(kLogFileExtension));
+  logging::LoggingSettings logging_settings;
+  logging_settings.logging_dest = logging::LOG_TO_FILE;
+  logging_settings.log_file = log_file_path.value().c_str();
+  success = logging::InitLogging(logging_settings);
+  DCHECK(success);
+
+  LOG(INFO) << "Process Started.";
+
+  chrome_cleaner::NotifyInitializationDoneForTesting();
+
+  base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
+  if (command_line->HasSwitch(
+          chrome_cleaner::kTestForceOverwriteZoneIdentifier)) {
+    LOG(INFO) << "Process is overwriting the zone identifier.";
+    chrome_cleaner::OverwriteZoneIdentifier(exe_file_path);
+  }
+
+  if (command_line->HasSwitch(chrome_cleaner::kTestSleepMinutesSwitch)) {
+    std::string value = command_line->GetSwitchValueASCII(
+        chrome_cleaner::kTestSleepMinutesSwitch);
+    int sleep_minutes = 0;
+    if (base::StringToInt(value, &sleep_minutes) && sleep_minutes > 0) {
+      LOG(INFO) << "Process is sleeping for " << sleep_minutes << " minutes";
+      ::Sleep(base::TimeDelta::FromMinutes(sleep_minutes).InMilliseconds());
+    } else {
+      LOG(ERROR) << "Invalid sleep delay value " << value;
+    }
+    NOTREACHED();
+    return 1;
+  }
+
+  if (command_line->HasSwitch(chrome_cleaner::kTestEventToSignal)) {
+    LOG(INFO) << "Process is signaling event '"
+              << chrome_cleaner::kTestEventToSignal << "'";
+    base::string16 event_name =
+        command_line->GetSwitchValueNative(chrome_cleaner::kTestEventToSignal);
+    base::win::ScopedHandle handle(
+        ::OpenEvent(EVENT_ALL_ACCESS, TRUE, event_name.c_str()));
+    PLOG_IF(ERROR, !handle.IsValid())
+        << "Cannot create event '" << chrome_cleaner::kTestEventToSignal << "'";
+    base::WaitableEvent event(std::move(handle));
+    event.Signal();
+  }
+
+  // TODO(pmbureau): Add more behavior to test processes termination.
+
+  LOG(INFO) << "Process ended.";
+  return 0;
+}
diff --git a/chrome/chrome_cleaner/test/test_service_main.cc b/chrome/chrome_cleaner/test/test_service_main.cc
new file mode 100644
index 0000000..20afd27
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_service_main.cc
@@ -0,0 +1,153 @@
+// 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.
+
+#include <windows.h>
+
+#include <string>
+
+#include "base/at_exit.h"
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/string16.h"
+#include "base/test/test_timeouts.h"
+#include "base/threading/thread_checker.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+
+namespace {
+
+class TestService {
+ public:
+  TestService() {
+    service_status_.dwCurrentState = SERVICE_START_PENDING;
+    service_status_.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+    service_status_.dwWaitHint =
+        TestTimeouts::action_max_timeout().InMilliseconds();
+    service_stop_event_ = ::CreateEvent(nullptr, TRUE, FALSE, nullptr);
+  }
+
+  void SignalStopEvent() { ::SetEvent(service_stop_event_); }
+  void WaitForStopEvent() {
+    ::WaitForSingleObject(service_stop_event_, INFINITE);
+  }
+
+  void SetControlsAccepted(DWORD control) {
+    DCHECK_CALLED_ON_VALID_THREAD(service_status_thread_checker_);
+    service_status_.dwControlsAccepted = control;
+  }
+
+  void SetStatusHandle(SERVICE_STATUS_HANDLE status_handle) {
+    CHECK(status_handle);
+    status_handle_ = status_handle;
+  }
+
+  DWORD GetServiceStatusState() {
+    DCHECK_CALLED_ON_VALID_THREAD(service_status_thread_checker_);
+    return service_status_.dwCurrentState;
+  }
+
+  void SetServiceStatusState(DWORD state) {
+    DCHECK_CALLED_ON_VALID_THREAD(service_status_thread_checker_);
+    DCHECK(status_handle_);
+    service_status_.dwCurrentState = state;
+    if (::SetServiceStatus(status_handle_, &service_status_) == FALSE)
+      LOG(ERROR) << "Cannot set service status state.";
+  }
+
+ private:
+  SERVICE_STATUS_HANDLE status_handle_ = 0;
+  SERVICE_STATUS service_status_ = {};
+  HANDLE service_stop_event_ = INVALID_HANDLE_VALUE;
+  THREAD_CHECKER(service_status_thread_checker_);
+};
+
+DWORD WINAPI ServiceCtrlHandler(DWORD control,
+                                DWORD /* event_type */,
+                                LPVOID /* event_data */,
+                                LPVOID context) {
+  TestService* service = reinterpret_cast<TestService*>(context);
+  DCHECK(service);
+  if (control == SERVICE_CONTROL_STOP)
+    service->SignalStopEvent();
+  return 0;
+}
+
+void WINAPI ServiceMain(DWORD argc, LPTSTR* argv) {
+  TestService service;
+
+  // Registers a function to handle extended service control requests.
+  SERVICE_STATUS_HANDLE status_handle =
+      RegisterServiceCtrlHandlerEx(L"", ServiceCtrlHandler, &service);
+  service.SetStatusHandle(status_handle);
+
+  // Tell the service controller the current service has started.
+  service.SetServiceStatusState(SERVICE_START_PENDING);
+  LOG(INFO) << "Service status is 'start pending'.";
+
+  // Tell the service controller the current service is running.
+  service.SetControlsAccepted(SERVICE_ACCEPT_STOP);
+  service.SetServiceStatusState(SERVICE_RUNNING);
+  LOG(INFO) << "Service status is 'running'.";
+
+  // The body of the service wait until a stop signal is received.
+  LOG(INFO) << "Service is waiting to be stopped.";
+  service.WaitForStopEvent();
+
+  // TODO(pmbureau): Add more kind of worker that may protect against service
+  //     termination and validate service termination.
+
+  // Tell the service controller the current service is stopped.
+  service.SetServiceStatusState(SERVICE_STOP_PENDING);
+  LOG(INFO) << "Service status is 'stop pending'.";
+
+  service.SetServiceStatusState(SERVICE_STOPPED);
+  // Do not attempt to perform any additional work after calling
+  // SetServiceStatus with SERVICE_STOPPED, because the service process can be
+  // terminated at any time.
+}
+
+constexpr base::char16 kLogFileExtension[] = L"log";
+
+}  // namespace
+
+int main(int argc, char** argv) {
+  base::AtExitManager at_exit;
+
+  bool success = base::CommandLine::Init(0, nullptr);
+  DCHECK(success);
+
+  TestTimeouts::Initialize();
+
+  // Initialize the logging settings to set a specific log file name.
+  base::FilePath exe_file_path;
+  success = base::PathService::Get(base::FILE_EXE, &exe_file_path);
+  DCHECK(success);
+
+  base::FilePath log_file_path(
+      exe_file_path.ReplaceExtension(kLogFileExtension));
+  logging::LoggingSettings logging_settings;
+  logging_settings.logging_dest = logging::LOG_TO_FILE;
+  logging_settings.log_file = log_file_path.value().c_str();
+  success = logging::InitLogging(logging_settings);
+  DCHECK(success);
+
+  LOG(INFO) << "Service Started.";
+
+  // Service main.
+
+  // SERVICE_TABLE_ENTRY::lpServiceName takes a non-const string.
+  base::char16 empty_string[] = L"";
+
+  SERVICE_TABLE_ENTRY dispatch_table[] = {{empty_string, ServiceMain},
+                                          {nullptr, nullptr}};
+
+  if (::StartServiceCtrlDispatcher(dispatch_table) == FALSE) {
+    LOG(ERROR) << "StartServiceCtrlDispatcher failed.";
+    return 1;
+  }
+
+  LOG(INFO) << "Service ended.";
+  return 0;
+}
diff --git a/chrome/chrome_cleaner/test/test_util.cc b/chrome/chrome_cleaner/test/test_util.cc
new file mode 100644
index 0000000..ac643fd
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_util.cc
@@ -0,0 +1,314 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/test_util.h"
+
+#include <stdint.h>
+#include <windows.h>
+
+#include <algorithm>
+#include <iterator>
+#include <set>
+#include <utility>
+
+#include "base/base_paths.h"
+#include "base/command_line.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/chrome_cleaner/constants/chrome_cleaner_switches.h"
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "chrome/chrome_cleaner/os/initializer.h"
+#include "chrome/chrome_cleaner/os/post_reboot_registration.h"
+#include "chrome/chrome_cleaner/os/pre_fetched_paths.h"
+#include "chrome/chrome_cleaner/os/scoped_disable_wow64_redirection.h"
+#include "chrome/chrome_cleaner/os/system_util_cleaner.h"
+#include "chrome/chrome_cleaner/os/whitelisted_directory.h"
+#include "chrome/chrome_cleaner/proto/shared_pup_enums.pb.h"
+#include "chrome/chrome_cleaner/strings/string_util.h"
+#include "chrome/chrome_cleaner/test/test_file_util.h"
+#include "chrome/chrome_cleaner/test/test_strings.h"
+#include "chrome/chrome_cleaner/test/test_uws_catalog.h"
+#include "sandbox/win/src/sandbox_factory.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chrome_cleaner {
+
+bool SetupTestConfigs() {
+  return SetupTestConfigsWithCatalogs({&TestUwSCatalog::GetInstance()});
+}
+
+bool SetupTestConfigsWithCatalogs(const PUPData::UwSCatalogs& catalogs) {
+  if (!InitializeOSUtils())
+    return false;
+
+  PUPData::InitializePUPData(catalogs);
+
+  PreFetchedPaths::GetInstance()->DisableForTesting();
+  base::PathService::DisableCache();
+
+  WhitelistedDirectory::GetInstance()->DisableCache();
+
+  return true;
+}
+
+ScopedIsPostReboot::ScopedIsPostReboot() {
+  // This switch will be removed by scoped_command_line_'s destructor when it
+  // goes out of scope.
+  scoped_command_line_.GetProcessCommandLine()->AppendSwitch(kPostRebootSwitch);
+}
+
+bool RunOnceCommandLineContains(const base::string16& product_shortname,
+                                const wchar_t* sub_string) {
+  DCHECK(sub_string);
+  PostRebootRegistration post_reboot(product_shortname);
+  base::string16 run_once_value = post_reboot.RunOnceOnRestartRegisteredValue();
+  return String16ContainsCaseInsensitive(run_once_value, sub_string);
+}
+
+bool RunOnceOverrideCommandLineContains(const std::string& cleanup_id,
+                                        const wchar_t* sub_string) {
+  DCHECK(sub_string);
+
+  base::string16 reg_value;
+  base::win::RegKey run_once_key(
+      HKEY_CURRENT_USER,
+      PostRebootRegistration::GetPostRebootSwitchKeyPath().c_str(), KEY_READ);
+  if (run_once_key.Valid()) {
+    // There is no need to check the return value, since ReadValue will leave
+    // |reg_value| empty on error.
+    run_once_key.ReadValue(base::UTF8ToUTF16(cleanup_id).c_str(), &reg_value);
+  }
+
+  return String16ContainsCaseInsensitive(reg_value, sub_string);
+}
+
+bool RegisterTestTask(TaskScheduler* task_scheduler,
+                      TaskScheduler::TaskInfo* task_info) {
+  const wchar_t name[] = L"Chrome Cleaner Test task";
+  const wchar_t description[] =
+      L"Chrome Cleaner Test Task Used Just For Testing";
+
+  const base::FilePath exe_path =
+      PreFetchedPaths::GetInstance()->GetExecutablePath();
+
+  TaskScheduler::TaskExecAction action{
+      exe_path, base::FilePath(), L"argument",
+  };
+
+  base::CommandLine command_line(action.application_path);
+  command_line.AppendArgNative(action.arguments);
+  if (!task_scheduler->RegisterTask(
+          name, description, command_line,
+          chrome_cleaner::TaskScheduler::TRIGGER_TYPE_HOURLY, false)) {
+    LOG(ERROR) << "Failed to register test task";
+    return false;
+  }
+
+  task_info->name = name;
+  task_info->description = description;
+  task_info->exec_actions.push_back(action);
+  return true;
+}
+
+void AppendTestSwitches(base::CommandLine* command_line) {
+  command_line->AppendSwitch(kNoRecoveryComponentSwitch);
+  command_line->AppendSwitch(kNoCrashUploadSwitch);
+  command_line->AppendSwitch(kNoReportUploadSwitch);
+  command_line->AppendSwitch(kNoSelfDeleteSwitch);
+}
+
+void ExpectDiskFootprint(const PUPData::PUP& pup,
+                         const base::FilePath& expected_path) {
+  for (const auto& path : pup.expanded_disk_footprints.file_paths()) {
+    if (PathEqual(expected_path, path))
+      return;
+  }
+  ADD_FAILURE() << "Expected file: " << expected_path.value();
+}
+
+// Expect the scheduled task footprint to be found in |pup|.
+void ExpectScheduledTaskFootprint(const PUPData::PUP& pup,
+                                  const wchar_t* task_name) {
+  DCHECK(task_name);
+  for (const auto& footprint : pup.expanded_scheduled_tasks) {
+    if (footprint == task_name)
+      return;
+  }
+  ADD_FAILURE() << "Expected schedule task not found: '" << task_name << "'.";
+}
+
+bool StringContainsCaseInsensitive(const std::string& value,
+                                   const std::string& substring) {
+  return std::search(
+             value.begin(), value.end(), substring.begin(), substring.end(),
+             base::CaseInsensitiveCompareASCII<std::string::value_type>()) !=
+         value.end();
+}
+
+LoggingOverride::LoggingOverride() {
+  DCHECK(!active_logging_messages_);
+  active_logging_messages_ = &logging_messages_;
+  logging::SetLogMessageHandler(&LogMessageHandler);
+}
+
+LoggingOverride::~LoggingOverride() {
+  logging::SetLogMessageHandler(nullptr);
+  logging_messages_.clear();
+  DCHECK_EQ(active_logging_messages_, &logging_messages_);
+  active_logging_messages_ = nullptr;
+}
+
+bool LoggingOverride::LoggingMessagesContain(const std::string& sub_string) {
+  for (const auto& line : logging_messages_) {
+    if (StringContainsCaseInsensitive(line, sub_string))
+      return true;
+  }
+  return false;
+}
+
+bool LoggingOverride::LoggingMessagesContain(const std::string& sub_string1,
+                                             const std::string& sub_string2) {
+  for (const auto& line : logging_messages_) {
+    if (StringContainsCaseInsensitive(line, sub_string1) &&
+        StringContainsCaseInsensitive(line, sub_string2))
+      return true;
+  }
+  return false;
+}
+
+std::vector<std::string>* LoggingOverride::active_logging_messages_ = nullptr;
+
+bool IsSubsetOf(const FilePathSet& set1,
+                const FilePathSet& set2,
+                const std::string& unexpected_path_log_message) {
+  bool is_subset = true;
+  for (const base::FilePath& file_path : set1.file_paths()) {
+    if (!set2.Contains(file_path)) {
+      LOG(ERROR) << unexpected_path_log_message << ": '" << file_path.value()
+                 << "'";
+      is_subset = false;
+    }
+  }
+  return is_subset;
+}
+
+void ExpectEqualFilePathSets(const FilePathSet& matched_files,
+                             const FilePathSet& expected_files) {
+  EXPECT_TRUE(IsSubsetOf(matched_files, expected_files,
+                         "Unexpected file in matched footprints"));
+  EXPECT_TRUE(
+      IsSubsetOf(expected_files, matched_files, "Missing expected footprint"));
+}
+
+base::FilePath GetWow64RedirectedSystemPath() {
+  std::vector<wchar_t> buffer;
+  size_t size_needed = MAX_PATH;
+  while (size_needed > buffer.size()) {
+    buffer.resize(size_needed);
+    size_needed = ::GetSystemWow64DirectoryW(buffer.data(), buffer.size());
+    if (size_needed == 0) {
+      PLOG(ERROR) << "Could not get system Wow64 directory";
+      return base::FilePath();
+    }
+  }
+  buffer.push_back(L'\0');
+  return base::FilePath(buffer.data());
+}
+
+base::FilePath GetSampleDLLPath() {
+  // The sample DLL should be next to the executable because it is generated at
+  // build time.
+  base::FilePath exe_dir;
+  base::PathService::Get(base::DIR_EXE, &exe_dir);
+  return exe_dir.Append(L"empty_dll.dll");
+}
+
+base::FilePath GetSignedSampleDLLPath() {
+  // The signed sample DLL should be next to the executable because it's copied
+  // there at build time.
+  base::FilePath exe_dir;
+  base::PathService::Get(base::DIR_EXE, &exe_dir);
+  return exe_dir.Append(L"signed_empty_dll.dll");
+}
+
+ScopedTempDirNoWow64::ScopedTempDirNoWow64() = default;
+
+ScopedTempDirNoWow64::~ScopedTempDirNoWow64() {
+  // Since the temp dir was created with Wow64 disabled, it must be deleted
+  // with Wow64 disabled.
+  ScopedDisableWow64Redirection disable_wow64_redirection;
+  ANALYZER_ALLOW_UNUSED(Delete());
+
+  // The parent's destructor will call Delete again, without disabling Wow64,
+  // which could delete a directory with the same name in SysWOW64. So make
+  // sure the path is cleared even if the Delete call above failed.
+  Take();
+}
+
+bool ScopedTempDirNoWow64::CreateUniqueSystem32TempDir() {
+  ScopedDisableWow64Redirection disable_wow64_redirection;
+  base::FilePath system_path;
+  if (!base::PathService::Get(base::DIR_SYSTEM, &system_path)) {
+    PLOG(ERROR) << "Unable to get system32 path";
+    return false;
+  }
+  // Note that on 32-bit Windows this check will always succeed because
+  // GetWow64RedirectedSystemPath returns an empty string. This is correct
+  // because Wow64 redirection isn't supported on 32-bit Windows, so the system
+  // path is guaranteed not to be redirected.
+  DCHECK(system_path != GetWow64RedirectedSystemPath());
+  return CreateUniqueTempDirUnderPath(system_path);
+}
+
+bool ScopedTempDirNoWow64::CreateEmptyFileInUniqueSystem32TempDir(
+    const base::string16& file_name) {
+  if (!CreateUniqueSystem32TempDir())
+    return false;
+  ScopedDisableWow64Redirection disable_wow64_redirection;
+  return CreateEmptyFile(GetPath().Append(file_name));
+}
+
+std::unique_ptr<base::WaitableEvent> CreateInheritableEvent(
+    base::WaitableEvent::ResetPolicy reset_policy,
+    base::WaitableEvent::InitialState initial_state) {
+  SECURITY_ATTRIBUTES attributes = {sizeof(SECURITY_ATTRIBUTES)};
+  attributes.bInheritHandle = true;
+
+  HANDLE handle = ::CreateEvent(
+      &attributes, reset_policy == base::WaitableEvent::ResetPolicy::MANUAL,
+      initial_state == base::WaitableEvent::InitialState::SIGNALED, nullptr);
+  if (handle == nullptr || handle == INVALID_HANDLE_VALUE) {
+    PLOG(ERROR) << "Could not create inheritable event";
+    return std::unique_ptr<base::WaitableEvent>();
+  }
+  base::win::ScopedHandle event_handle(handle);
+  return std::make_unique<base::WaitableEvent>(std::move(event_handle));
+}
+
+bool CheckTestPrivileges() {
+  // Check for administrator privileges, unless running in the sandbox.
+  const bool is_sandboxed_process =
+      (sandbox::SandboxFactory::GetTargetServices() != nullptr);
+  if (!is_sandboxed_process && !chrome_cleaner::HasAdminRights()) {
+    LOG(ERROR) << "Some Chrome Cleanup tests need administrator privileges.";
+    return false;
+  }
+
+  // All programs run under the msys git shell have debug privileges (!), which
+  // breaks the assumptions of some of the tests. So drop that privilege unless
+  // actually running under a debugger.
+  if (!::IsDebuggerPresent() &&
+      !chrome_cleaner::ReleaseDebugRightsPrivileges()) {
+    PLOG(ERROR) << "Failed to release debug privileges";
+    return false;
+  }
+
+  return true;
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/chrome_cleaner/test/test_util.h b/chrome/chrome_cleaner/test/test_util.h
new file mode 100644
index 0000000..c0cd0139
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_util.h
@@ -0,0 +1,187 @@
+// 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.
+
+#ifndef CHROME_CHROME_CLEANER_TEST_TEST_UTIL_H_
+#define CHROME_CHROME_CLEANER_TEST_TEST_UTIL_H_
+
+#include <stdint.h>
+
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/files/scoped_temp_dir.h"
+#include "base/process/process.h"
+#include "base/strings/string16.h"
+#include "base/strings/string_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "base/synchronization/waitable_event.h"
+#include "base/test/scoped_command_line.h"
+#include "base/win/registry.h"
+#include "base/win/scoped_handle.h"
+#include "chrome/chrome_cleaner/os/task_scheduler.h"
+#include "chrome/chrome_cleaner/proto/shared_pup_enums.pb.h"
+#include "chrome/chrome_cleaner/pup_data/pup_data.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace base {
+class FilePath;
+}  // namespace base
+
+namespace chrome_cleaner {
+
+// Setup all configs required by tests (like disabling path caching). This
+// should be done in the main function of the test binary, not by individual
+// tests.
+//
+// Returns false if setup fails. Tests shouldn't be run if the setup fails.
+bool SetupTestConfigs();
+
+// Sets up all test configs, as SetupTestConfigs, using the given list of
+// |catalogs| instead of TestUwSCatalog.
+bool SetupTestConfigsWithCatalogs(const PUPData::UwSCatalogs& catalogs);
+
+// While this class is in scope, Rebooter::IsPostReboot will return true.
+class ScopedIsPostReboot {
+ public:
+  ScopedIsPostReboot();
+
+ private:
+  base::test::ScopedCommandLine scoped_command_line_;
+};
+
+class LoggingOverride {
+ public:
+  LoggingOverride();
+  ~LoggingOverride();
+
+  // Intercepts all log messages.
+  static bool LogMessageHandler(int severity,
+                                const char* file,
+                                int line,
+                                size_t message_start,
+                                const std::string& str) {
+    DCHECK(active_logging_messages_);
+    active_logging_messages_->push_back(str);
+    return false;
+  }
+
+  // Returns true if one of the messages contains |sub_string|.
+  bool LoggingMessagesContain(const std::string& sub_string);
+
+  // Returns true if one of the messages contains both |sub_string| and
+  // |sub_string2|.
+  bool LoggingMessagesContain(const std::string& sub_string1,
+                              const std::string& sub_string2);
+
+  // Remove all the log messages.
+  void FlushMessages() { logging_messages_.clear(); }
+
+  std::vector<std::string> logging_messages_;
+  static std::vector<std::string>* active_logging_messages_;
+};
+
+// Validate that the run once on restart registry value contains the given
+// |sub_string|.
+bool RunOnceCommandLineContains(const base::string16& product_shortname,
+                                const wchar_t* sub_string);
+
+// Validate that the run once on restart switch-containing registry value
+// contains the given |sub_string|.
+bool RunOnceOverrideCommandLineContains(const std::string& cleanup_id,
+                                        const wchar_t* sub_string);
+
+// Register a task with the given task scheduler. If the task is successfully
+// added, |task_info| will contain all the information about the task.
+// Callers are responsible for deleting the test task.
+bool RegisterTestTask(TaskScheduler* task_scheduler,
+                      TaskScheduler::TaskInfo* task_info);
+
+// Append switches to the command line that is used to run cleaner or reporter
+// in tests. Switches will disable logs upload, profile reset and other side
+// effects.
+void AppendTestSwitches(base::CommandLine* command_line);
+
+// Expect the |expected_path| to be found in expanded disk footprint of |pup|.
+void ExpectDiskFootprint(const PUPData::PUP& pup,
+                         const base::FilePath& expected_path);
+
+// Expect the scheduled task footprint to be found in |pup|.
+void ExpectScheduledTaskFootprint(const PUPData::PUP& pup,
+                                  const wchar_t* task_name);
+
+// This function is the 8 bits version of String16ContainsCaseInsensitive in
+// chrome_cleaner/string_util. Since it's only used in tests, we decided not to
+// move it to the main lib.
+bool StringContainsCaseInsensitive(const std::string& value,
+                                   const std::string& substring);
+
+// Expect two FilePathSets to be equal. Log files that are matched in excess
+// or expected files that are missing.
+void ExpectEqualFilePathSets(const FilePathSet& matched_files,
+                             const FilePathSet& expected_files);
+
+// Returns the path that base::DIR_SYSTEM is transparently redirected to under
+// Wow64. Note that on 32-bit Windows this will always return the empty string
+// because base::DIR_SYSTEM is not redirected.
+base::FilePath GetWow64RedirectedSystemPath();
+
+// Returns the path to a sample DLL file that can be used in tests.
+base::FilePath GetSampleDLLPath();
+
+// Returns the path to a signed sample DLL file that can be used in tests.
+base::FilePath GetSignedSampleDLLPath();
+
+// A ScopedTempDir with the ability to create and delete subdirs of
+// c:\windows\system32, which are Wow64-redirected by default. This turns off
+// Wow64 redirection so the subdir is created in the real c:\windows\system32
+// even in binaries that would normally be redirected to c:\windows\SysWOW64.
+class ScopedTempDirNoWow64 : protected base::ScopedTempDir {
+ public:
+  ScopedTempDirNoWow64();
+  ~ScopedTempDirNoWow64();
+
+  // Creates a unique subdirectory under system32, bypassing Wow64 redirection,
+  // and takes ownership of it.
+  bool CreateUniqueSystem32TempDir() WARN_UNUSED_RESULT;
+
+  // Convenience function to call CreateUniqueSystem32TempDir and create an
+  // empty file with the given |file_name| in the resulting directory.
+  bool CreateEmptyFileInUniqueSystem32TempDir(const base::string16& file_name)
+      WARN_UNUSED_RESULT;
+
+  using base::ScopedTempDir::Delete;
+  using base::ScopedTempDir::GetPath;
+  using base::ScopedTempDir::IsValid;
+  using base::ScopedTempDir::Take;
+
+  // Do not give access to CreateUniqueTempDir, CreateUniqueTempDirUnderPath,
+  // or Set because they can set the temp dir path to a non-Wow64-redirected
+  // directory.
+};
+
+std::unique_ptr<base::WaitableEvent> CreateInheritableEvent(
+    base::WaitableEvent::ResetPolicy reset_policy,
+    base::WaitableEvent::InitialState initial_state);
+
+// Check that the test has administrator privileges, but not debug privileges.
+// This function drops unneeded privileges if possible, but won't try to raise
+// privileges. Returns false if the privileges could not be made correct.
+bool CheckTestPrivileges();
+
+// Accepts PUPData::PUP parameters with id equals to |expected_id|.
+MATCHER_P(PupHasId, expected_id, "") {
+  return arg->signature().id == expected_id;
+}
+
+// Accepts PUPData::PUP parameters with |size| expanded disk footprints.
+MATCHER_P(PupHasFileListSize, size, "") {
+  return arg->expanded_disk_footprints.size() == static_cast<size_t>(size);
+}
+
+}  // namespace chrome_cleaner
+
+#endif  // CHROME_CHROME_CLEANER_TEST_TEST_UTIL_H_
diff --git a/chrome/chrome_cleaner/test/test_util_unittest.cc b/chrome/chrome_cleaner/test/test_util_unittest.cc
new file mode 100644
index 0000000..b893c47cd
--- /dev/null
+++ b/chrome/chrome_cleaner/test/test_util_unittest.cc
@@ -0,0 +1,44 @@
+// 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.
+
+#include "chrome/chrome_cleaner/test/test_util.h"
+
+#include "chrome/chrome_cleaner/os/disk_util.h"
+#include "testing/gtest/include/gtest/gtest.h"
+// The following include is needed to use EXPECT_NONFATAL_FAILURE.
+#include "testing/gtest/include/gtest/gtest-spi.h"
+
+namespace chrome_cleaner {
+
+namespace {
+const wchar_t kFileName1[] = L"test_path1";
+const wchar_t kFileName2[] = L"test_path2";
+
+}  // namespace
+
+TEST(TestUtilTest, ExpectEqualFilePathSets) {
+  // Messages are logged to a vector for testing.
+  LoggingOverride logger;
+  FilePathSet matched_files;
+  FilePathSet expected_files;
+
+  matched_files.Insert(base::FilePath(kFileName1));
+  EXPECT_NONFATAL_FAILURE(
+      ExpectEqualFilePathSets(matched_files, expected_files), "");
+  EXPECT_TRUE(logger.LoggingMessagesContain(
+      "Unexpected file in matched footprints: 'test_path1'"));
+
+  logger.FlushMessages();
+  expected_files.Insert(base::FilePath(kFileName1));
+  ExpectEqualFilePathSets(matched_files, expected_files);
+
+  logger.FlushMessages();
+  expected_files.Insert(base::FilePath(kFileName2));
+  EXPECT_NONFATAL_FAILURE(
+      ExpectEqualFilePathSets(matched_files, expected_files), "");
+  EXPECT_TRUE(logger.LoggingMessagesContain(
+      "Missing expected footprint: 'test_path2'"));
+}
+
+}  // namespace chrome_cleaner
diff --git a/chrome/common/chrome_features.cc b/chrome/common/chrome_features.cc
index f7823fb1..7d07943 100644
--- a/chrome/common/chrome_features.cc
+++ b/chrome/common/chrome_features.cc
@@ -314,6 +314,11 @@
                                      base::FEATURE_DISABLED_BY_DEFAULT};
 #endif  // !defined(OS_ANDROID)
 
+// Enables navigation suggestions for internationalized domain names that are
+// visually similar to popular domains.
+const base::Feature kIdnNavigationSuggestions{
+    "IdnNavigationSuggestions", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Controls whether the "improved recovery component" is used. The improved
 // recovery component is a redesigned Chrome component intended to restore
 // a broken Chrome updater in more scenarios than before.
diff --git a/chrome/common/chrome_features.h b/chrome/common/chrome_features.h
index bfd7988..9ae3edb7 100644
--- a/chrome/common/chrome_features.h
+++ b/chrome/common/chrome_features.h
@@ -175,6 +175,8 @@
 extern const base::Feature kViewsCastDialog;
 #endif
 
+extern const base::Feature kIdnNavigationSuggestions;
+
 extern const base::Feature kImprovedRecoveryComponent;
 
 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc
index 18d3b52..002e558 100644
--- a/chrome/common/chrome_switches.cc
+++ b/chrome/common/chrome_switches.cc
@@ -220,11 +220,6 @@
 const char kDisableExtensionsFileAccessCheck[] =
     "disable-extensions-file-access-check";
 
-// Disable the net::URLRequestThrottlerManager functionality for
-// requests originating from extensions.
-const char kDisableExtensionsHttpThrottling[] =
-    "disable-extensions-http-throttling";
-
 // Disable auto-reload of error pages if offline.
 const char kDisableOfflineAutoReload[]      = "disable-offline-auto-reload";
 
diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h
index 9d0c2aa..d222c2b 100644
--- a/chrome/common/chrome_switches.h
+++ b/chrome/common/chrome_switches.h
@@ -77,7 +77,6 @@
 extern const char kDisableExtensions[];
 extern const char kDisableExtensionsExcept[];
 extern const char kDisableExtensionsFileAccessCheck[];
-extern const char kDisableExtensionsHttpThrottling[];
 extern const char kDisableOfflineAutoReload[];
 extern const char kDisableOfflineAutoReloadVisibleOnly[];
 extern const char kDisablePopupBlocking[];
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index 7ad9c3f..70fddd7 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -990,6 +990,11 @@
 const char kDefaultBrowserSettingEnabled[] =
     "browser.default_browser_setting_enabled";
 
+// Boolean that indicates whether chrome://accessibility should show the
+// internal accessibility tree.
+const char kShowInternalAccessibilityTree[] =
+    "accessibility.show_internal_accessibility_tree";
+
 #if defined(OS_MACOSX)
 // Boolean that indicates whether the application should show the info bar
 // asking the user to set up automatic updates when Keystone promotion is
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index 387ef158..c41685c 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -169,6 +169,7 @@
     (defined(OS_LINUX) && !defined(OS_CHROMEOS))
 extern const char kConfirmToQuitEnabled[];
 #endif
+extern const char kShowInternalAccessibilityTree[];
 #if defined(OS_MACOSX)
 extern const char kShowFullscreenToolbar[];
 extern const char kAllowJavascriptAppleEvents[];
diff --git a/chrome/common/url_constants.cc b/chrome/common/url_constants.cc
index 44cdfcf..0d6dcc61 100644
--- a/chrome/common/url_constants.cc
+++ b/chrome/common/url_constants.cc
@@ -16,15 +16,11 @@
     "https://support.google.com/chrome?p=bluetooth";
 #endif
 
-// TODO(https://crbug.com/852139): Replace this numbered link with a P-link once
-// we have one.
 const char kCastCloudServicesHelpURL[] =
-    "https://support.google.com/chromecast/answer/6320939";
+    "https://support.google.com/chromecast/?p=casting_cloud_services";
 
-// TODO(https://crbug.com/852139): Replace this numbered link with a P-link once
-// we have one.
 const char kCastNoDestinationFoundURL[] =
-    "https://support.google.com/chromecast/answer/3249268";
+    "https://support.google.com/chromecast/?p=no_cast_destination";
 
 const char kChooserBluetoothOverviewURL[] =
     "https://support.google.com/chrome?p=bluetooth";
@@ -41,7 +37,7 @@
     "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
 #else
     "https://support.google.com/chromebook/?p=help&ctx=keyboard";
-#endif  // defined(GOOGLE_CHROME_BUILD
+#endif  // defined(GOOGLE_CHROME_BUILD)
 #else
     "https://support.google.com/chrome/?p=help&ctx=keyboard";
 #endif  // defined(OS_CHROMEOS)
@@ -52,7 +48,7 @@
     "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
 #else
     "https://support.google.com/chromebook/?p=help&ctx=menu";
-#endif  // defined(GOOGLE_CHROME_BUILD
+#endif  // defined(GOOGLE_CHROME_BUILD)
 #else
     "https://support.google.com/chrome/?p=help&ctx=menu";
 #endif  // defined(OS_CHROMEOS)
@@ -63,7 +59,7 @@
     "chrome-extension://honijodknafkokifofgiaalefdiedpko/main.html";
 #else
     "https://support.google.com/chromebook/?p=help&ctx=settings";
-#endif  // defined(GOOGLE_CHROME_BUILD
+#endif  // defined(GOOGLE_CHROME_BUILD)
 #else
     "https://support.google.com/chrome/?p=help&ctx=settings";
 #endif  // defined(OS_CHROMEOS)
diff --git a/chrome/common/webui_url_constants.cc b/chrome/common/webui_url_constants.cc
index 984797f6..93a2a77d 100644
--- a/chrome/common/webui_url_constants.cc
+++ b/chrome/common/webui_url_constants.cc
@@ -18,6 +18,7 @@
 
 const char kChromeUIAboutHost[] = "about";
 const char kChromeUIAboutURL[] = "chrome://about/";
+const char kChromeUIAccessibilityHost[] = "accessibility";
 const char kChromeUIAppLauncherPageHost[] = "apps";
 const char kChromeUIAppListStartPageURL[] = "chrome://app-list/";
 const char kChromeUIAppsURL[] = "chrome://apps/";
@@ -307,6 +308,7 @@
 // These hosts will also be suggested by BuiltinProvider.
 const char* const kChromeHostURLs[] = {
     kChromeUIAboutHost,
+    kChromeUIAccessibilityHost,
     kChromeUIBluetoothInternalsHost,
     kChromeUIChromeURLsHost,
     kChromeUIComponentsHost,
@@ -348,7 +350,6 @@
     kChromeUIUsbInternalsHost,
     kChromeUIUserActionsHost,
     kChromeUIVersionHost,
-    content::kChromeUIAccessibilityHost,
     content::kChromeUIAppCacheInternalsHost,
     content::kChromeUIBlobInternalsHost,
     content::kChromeUIDinoHost,
diff --git a/chrome/common/webui_url_constants.h b/chrome/common/webui_url_constants.h
index 23005ad..4d819c4b 100644
--- a/chrome/common/webui_url_constants.h
+++ b/chrome/common/webui_url_constants.h
@@ -25,6 +25,7 @@
 // Please keep in alphabetical order, with OS/feature specific sections below.
 extern const char kChromeUIAboutHost[];
 extern const char kChromeUIAboutURL[];
+extern const char kChromeUIAccessibilityHost[];
 extern const char kChromeUIAppLauncherPageHost[];
 extern const char kChromeUIAppListStartPageURL[];
 extern const char kChromeUIAppsURL[];
diff --git a/chrome/renderer/extensions/extension_hooks_delegate.cc b/chrome/renderer/extensions/extension_hooks_delegate.cc
index 255c788..ca1e9072 100644
--- a/chrome/renderer/extensions/extension_hooks_delegate.cc
+++ b/chrome/renderer/extensions/extension_hooks_delegate.cc
@@ -238,7 +238,7 @@
   DCHECK(arguments[0]->IsString());
   DCHECK(script_context->extension());
 
-  std::string path = gin::V8ToString(arguments[0]);
+  std::string path = gin::V8ToString(script_context->isolate(), arguments[0]);
 
   RequestResult result(RequestResult::HANDLED);
   result.return_value =
@@ -283,8 +283,8 @@
 
     if (!v8_view_type->IsUndefined()) {
       DCHECK(v8_view_type->IsString());
-      std::string view_type_string =
-          base::ToUpperASCII(gin::V8ToString(v8_view_type));
+      std::string view_type_string = base::ToUpperASCII(
+          gin::V8ToString(script_context->isolate(), v8_view_type));
       if (view_type_string != "ALL") {
         bool success = GetViewTypeFromString(view_type_string, &view_type);
         DCHECK(success);
diff --git a/chrome/renderer/url_loader_throttle_provider_impl.cc b/chrome/renderer/url_loader_throttle_provider_impl.cc
index b9c38b6a..ca11e09 100644
--- a/chrome/renderer/url_loader_throttle_provider_impl.cc
+++ b/chrome/renderer/url_loader_throttle_provider_impl.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/command_line.h"
 #include "base/feature_list.h"
 #include "base/message_loop/message_loop_current.h"
 #include "chrome/common/prerender.mojom.h"
@@ -28,6 +29,8 @@
 #include "services/service_manager/public/cpp/interface_provider.h"
 
 #if BUILDFLAG(ENABLE_EXTENSIONS)
+#include "extensions/common/switches.h"
+#include "extensions/renderer/extension_throttle_manager.h"
 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_container.h"
 #endif
 
@@ -50,6 +53,54 @@
   return canceler->get();
 }
 
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+std::unique_ptr<extensions::ExtensionThrottleManager>
+CreateExtensionThrottleManager() {
+  if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+          extensions::switches::kDisableExtensionsHttpThrottling)) {
+    return nullptr;
+  }
+  return std::make_unique<extensions::ExtensionThrottleManager>();
+}
+
+void SetExtensionThrottleManagerTestPolicy(
+    extensions::ExtensionThrottleManager* extension_throttle_manager) {
+  // Requests issued within within |kUserGestureWindowMs| of a user gesture
+  // are also considered as user gestures (see
+  // resource_dispatcher_host_impl.cc), so these tests need to bypass the
+  // checking of the net::LOAD_MAYBE_USER_GESTURE load flag in the manager
+  // in order to test the throttling logic.
+  extension_throttle_manager->SetIgnoreUserGestureLoadFlagForTests(true);
+  std::unique_ptr<net::BackoffEntry::Policy> policy(
+      new net::BackoffEntry::Policy{
+          // Number of initial errors (in sequence) to ignore before
+          // applying exponential back-off rules.
+          1,
+
+          // Initial delay for exponential back-off in ms.
+          10 * 60 * 1000,
+
+          // Factor by which the waiting time will be multiplied.
+          10,
+
+          // Fuzzing percentage. ex: 10% will spread requests randomly
+          // between 90%-100% of the calculated time.
+          0.1,
+
+          // Maximum amount of time we are willing to delay our request in ms.
+          15 * 60 * 1000,
+
+          // Time to keep an entry from being discarded even when it
+          // has no significant state, -1 to never discard.
+          -1,
+
+          // Don't use initial delay unless the last request was an error.
+          false,
+      });
+  extension_throttle_manager->SetBackoffPolicyForTests(std::move(policy));
+}
+#endif
+
 }  // namespace
 
 URLLoaderThrottleProviderImpl::URLLoaderThrottleProviderImpl(
@@ -162,6 +213,21 @@
       }
     }
   }
+
+  if (!extension_throttle_manager_)
+    extension_throttle_manager_ = CreateExtensionThrottleManager();
+
+  if (extension_throttle_manager_) {
+    if (base::CommandLine::ForCurrentProcess()->HasSwitch(
+            extensions::switches::kSetExtensionThrottleTestParams)) {
+      SetExtensionThrottleManagerTestPolicy(extension_throttle_manager_.get());
+    }
+
+    std::unique_ptr<content::URLLoaderThrottle> throttle =
+        extension_throttle_manager_->MaybeCreateURLLoaderThrottle(request);
+    if (throttle)
+      throttles.push_back(std::move(throttle));
+  }
 #endif
 
   // Initialize the factory here rather than in the constructor, since metrics
@@ -184,3 +250,10 @@
 
   return throttles;
 }
+
+void URLLoaderThrottleProviderImpl::SetOnline(bool is_online) {
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+  if (extension_throttle_manager_)
+    extension_throttle_manager_->SetOnline(is_online);
+#endif
+}
diff --git a/chrome/renderer/url_loader_throttle_provider_impl.h b/chrome/renderer/url_loader_throttle_provider_impl.h
index cebae77..88ccc54 100644
--- a/chrome/renderer/url_loader_throttle_provider_impl.h
+++ b/chrome/renderer/url_loader_throttle_provider_impl.h
@@ -6,11 +6,17 @@
 #define CHROME_RENDERER_URL_LOADER_THROTTLE_PROVIDER_IMPL_H_
 
 #include <memory>
+#include <vector>
 
 #include "base/threading/thread_checker.h"
 #include "components/safe_browsing/common/safe_browsing.mojom.h"
 #include "components/subresource_filter/content/common/ad_delay_throttle.h"
 #include "content/public/renderer/url_loader_throttle_provider.h"
+#include "extensions/buildflags/buildflags.h"
+
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+#include "extensions/renderer/extension_throttle_manager.h"
+#endif
 
 class ChromeContentRendererClient;
 
@@ -31,6 +37,7 @@
       int render_frame_id,
       const blink::WebURLRequest& request,
       content::ResourceType resource_type) override;
+  void SetOnline(bool is_online) override;
 
  private:
   // This copy constructor works in conjunction with Clone(), not intended for
@@ -46,6 +53,11 @@
   safe_browsing::mojom::SafeBrowsingPtrInfo safe_browsing_info_;
   safe_browsing::mojom::SafeBrowsingPtr safe_browsing_;
 
+#if BUILDFLAG(ENABLE_EXTENSIONS)
+  std::unique_ptr<extensions::ExtensionThrottleManager>
+      extension_throttle_manager_;
+#endif
+
   THREAD_CHECKER(thread_checker_);
 
   DISALLOW_ASSIGN(URLLoaderThrottleProviderImpl);
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index f97fa4b2..db3480c6 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -733,6 +733,7 @@
       "../browser/ui/blocked_content/popup_tracker_browsertest.cc",
       "../browser/ui/blocked_content/safe_browsing_triggered_popup_blocker_browsertest.cc",
       "../browser/ui/blocked_content/tab_under_blocker_browsertest.cc",
+      "../browser/ui/omnibox/idn_navigation_observer_browsertest.cc",
       "../browser/ui/tabs/pinned_tab_service_browsertest.cc",
 
       # If this list is used on Android in the future, these browser / speech/*
@@ -1317,7 +1318,6 @@
         "../browser/extensions/extension_messages_apitest.cc",
         "../browser/extensions/extension_modules_apitest.cc",
         "../browser/extensions/extension_override_apitest.cc",
-        "../browser/extensions/extension_request_limiting_throttle_browsertest.cc",
         "../browser/extensions/extension_resource_request_policy_apitest.cc",
         "../browser/extensions/extension_startup_browsertest.cc",
         "../browser/extensions/extension_storage_apitest.cc",
@@ -1325,6 +1325,7 @@
         "../browser/extensions/extension_tab_util_browsertest.cc",
         "../browser/extensions/extension_tabs_apitest.cc",
         "../browser/extensions/extension_unload_browsertest.cc",
+        "../browser/extensions/extension_url_loader_throttle_browsertest.cc",
         "../browser/extensions/extension_url_rewrite_browsertest.cc",
         "../browser/extensions/extension_view_host_factory_browsertest.cc",
         "../browser/extensions/extension_websocket_apitest.cc",
diff --git a/chrome/test/chromedriver/chrome/version.cc b/chrome/test/chromedriver/chrome/version.cc
index c028af2..b5880b7 100644
--- a/chrome/test/chromedriver/chrome/version.cc
+++ b/chrome/test/chromedriver/chrome/version.cc
@@ -9,7 +9,7 @@
 namespace {
 
 // This variable must be able to be found and parsed by the upload script.
-const int kMinimumSupportedChromeVersion[] = {66, 0, 3359, 0};
+const int kMinimumSupportedChromeVersion[] = {67, 0, 3396, 0};
 
 }  // namespace
 
diff --git a/chrome/test/chromedriver/test/run_all_tests.py b/chrome/test/chromedriver/test/run_all_tests.py
index 8261cecc..f2f467b 100755
--- a/chrome/test/chromedriver/test/run_all_tests.py
+++ b/chrome/test/chromedriver/test/run_all_tests.py
@@ -191,23 +191,23 @@
     versions = {'HEAD': archive.GetLatestRevision()}
     # Linux64 build numbers
     if util.IsLinux():
+      versions['69'] = '576753'
       versions['68'] = '561732'
       versions['67'] = '550422'
-      versions['66'] = '540276'
 
 
     # Mac build numbers
     elif util.IsMac():
+      versions['69'] = '576753'
       versions['68'] = '561733'
       versions['67'] = '550418'
-      versions['66'] = '540271'
 
 
     # Windows build numbers
     elif util.IsWindows():
+      versions['69'] = '576753'
       versions['68'] = '561732'
       versions['67'] = '550416'
-      versions['66'] = '540272'
 
     code = 0
     for version, revision in versions.iteritems():
diff --git a/chrome/test/chromedriver/test/run_py_tests.py b/chrome/test/chromedriver/test/run_py_tests.py
index 5ae9737e..8e9edfd 100755
--- a/chrome/test/chromedriver/test/run_py_tests.py
+++ b/chrome/test/chromedriver/test/run_py_tests.py
@@ -85,16 +85,12 @@
 _VERSION_SPECIFIC_FILTER = {}
 _VERSION_SPECIFIC_FILTER['HEAD'] = []
 
+_VERSION_SPECIFIC_FILTER['69'] = []
+
 _VERSION_SPECIFIC_FILTER['68'] = []
 
 _VERSION_SPECIFIC_FILTER['67'] = []
 
-_VERSION_SPECIFIC_FILTER['66'] = [
-    # https://bugs.chromium.org/p/chromedriver/issues/detail?id=2304
-    'ChromeDriverSiteIsolation.testCanClickOOPIF',
-    # https://bugs.chromium.org/p/chromedriver/issues/detail?id=2350
-    'ChromeDriverTest.testSlowIFrame',
-]
 
 _OS_SPECIFIC_FILTER = {}
 _OS_SPECIFIC_FILTER['win'] = [
diff --git a/chrome/test/data/extensions/api_test/accessibility_features/modify_permission/manifest.json b/chrome/test/data/extensions/api_test/accessibility_features/modify_permission/manifest.json
index a2491a78..dc76910 100644
--- a/chrome/test/data/extensions/api_test/accessibility_features/modify_permission/manifest.json
+++ b/chrome/test/data/extensions/api_test/accessibility_features/modify_permission/manifest.json
@@ -1,4 +1,6 @@
 {
+  // chrome-extension://lbgjohhgghbkcgejgklgcmfijhbheflf/
+  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDasz2sLsAlmcF0v7/FGwzWVP/T+CLhvWpojKckVp8RH0bN/x3HvQ8FUweTymsaLbqxMHn8LbMOYt9uvLg7MuUcs0puzo7vPEwW7FPwLdIke2Fth+uXgkBFUFvtrOoAyIXmiRRFoIi9qfNVQOvIz0nv0c7UEKoHT3UnT0ekxSl7lwIDAQAB",
   "name": "A test extension for accessibilityFeatures API; no modify",
   "version": "0.0.1",
   "manifest_version": 2,
diff --git a/chrome/test/data/extensions/api_test/accessibility_features/read_permission/manifest.json b/chrome/test/data/extensions/api_test/accessibility_features/read_permission/manifest.json
index f2ffc6c..c0d3dd7f 100644
--- a/chrome/test/data/extensions/api_test/accessibility_features/read_permission/manifest.json
+++ b/chrome/test/data/extensions/api_test/accessibility_features/read_permission/manifest.json
@@ -1,4 +1,6 @@
 {
+  // chrome-extension://lbgjohhgghbkcgejgklgcmfijhbheflf/
+  "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDasz2sLsAlmcF0v7/FGwzWVP/T+CLhvWpojKckVp8RH0bN/x3HvQ8FUweTymsaLbqxMHn8LbMOYt9uvLg7MuUcs0puzo7vPEwW7FPwLdIke2Fth+uXgkBFUFvtrOoAyIXmiRRFoIi9qfNVQOvIz0nv0c7UEKoHT3UnT0ekxSl7lwIDAQAB",
   "name": "A test extension for accessibilityFeatures API; no modify",
   "version": "0.0.1",
   "manifest_version": 2,
diff --git a/chrome/test/data/extensions/api_test/webstore_private/begin_install_fail_supervised.html b/chrome/test/data/extensions/api_test/webstore_private/begin_install_fail_supervised.html
deleted file mode 100644
index 4a555d8d..0000000
--- a/chrome/test/data/extensions/api_test/webstore_private/begin_install_fail_supervised.html
+++ /dev/null
@@ -1,22 +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.
--->
-<script src="common.js"></script>
-<script>
-
-runTests([
-  function beginInstall() {
-    var manifest = getManifest();
-    var expectedError =
-        "Apps and extensions can only be modified by the manager ()."
-    chrome.webstorePrivate.beginInstallWithManifest3(
-        {id: extensionId, manifest: manifest},
-        callbackFail(expectedError, function(result) {
-      assertEq("blocked_by_policy", result);
-    }));
-  },
-]);
-
-</script>
diff --git a/chrome/test/data/extensions/extension_throttle/background.js b/chrome/test/data/extensions/extension_throttle/background.js
index b66a1967..6913391 100644
--- a/chrome/test/data/extensions/extension_throttle/background.js
+++ b/chrome/test/data/extensions/extension_throttle/background.js
@@ -2,15 +2,47 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
-  if (message.type == "xhr") {
+/**
+ * Returns a promise that resolves to whether the request was successfully
+ * made. This will throw an error if the request finishes with any status
+ * other than 503.
+ * @return {Promise<bool>}
+ */
+function canMakeRequest(url) {
+  return new Promise(function(resolve, reject) {
     var xhr = new XMLHttpRequest();
-    xhr.open(message.method, message.url);
-    // This header will be enough to avoid serving the XHR from blink's
-    // MemoryCache (which the test requires), but should have no other effect.
-    xhr.setRequestHeader("X-Bust-Blink-MemoryCache", Math.random());
+    xhr.onload = function() {
+      if (this.status == 503)
+        resolve(true);
+      else
+        reject('Unexpected status: ' + this.status);
+    };
+    xhr.onerror = function() {
+      resolve(false);
+    };
+    xhr.open('GET', url, /*async=*/true);
     xhr.send();
+  });
+}
+
+async function runTest(url, requestsToMake, expectedFailRequestNum) {
+  for (let i = 1; i <= requestsToMake; i += 1) {
+    try {
+      const madeRequest = await canMakeRequest(url);
+      const expectSuccess = i < expectedFailRequestNum;
+      chrome.test.assertEq(expectSuccess, madeRequest);
+    } catch (e) {
+      chrome.test.notifyFail('Error: ' + e.message);
+    }
+  }
+  chrome.test.notifyPass('test passed');
+}
+
+chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
+  if (message.type == 'xhr') {
+    runTest(message.url, message.requestsToMake,
+            message.expectedFailRequestNum);
   } else {
-    console.error("Unknown message: " + JSON.stringify(message));
+    console.error('Unknown message: ' + JSON.stringify(message));
   }
 });
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.html b/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.html
deleted file mode 100644
index 89594b7..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
- * Copyright 2015 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.
--->
-<script src="test_request_eventually_throttled.js"></script>
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.js b/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.js
deleted file mode 100644
index 1e3b4bf..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_eventually_throttled.js
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2015 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.
-
-// TODO(xunjieli): When URLSearchParams is stable and implemented, switch this
-// (and a lot of other test code) to it. https://crbug.com/303152
-var url = decodeURIComponent(/url=([^&]*)/.exec(location.search)[1]);
-var filter = {urls: ['http://www.example.com/*'], types: ['xmlhttprequest']};
-var numRequests = 0;
-
-chrome.webRequest.onCompleted.addListener(function(details) {
-  chrome.test.assertEq(503, details.statusCode);
-  numRequests++;
-  chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url});
-}, filter);
-
-chrome.webRequest.onErrorOccurred.addListener(function(details) {
-  // Should thottle the third request, which is one request after
-  // an error is seen.
-  chrome.test.assertEq(3, numRequests);
-  chrome.test.assertEq('net::ERR_TEMPORARILY_THROTTLED', details.error);
-  chrome.test.notifyPass();
-}, filter);
-
-numRequests++;
-chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url});
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.html b/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.html
deleted file mode 100644
index 9b239a2..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
- * Copyright 2015 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.
--->
-<script src="test_request_not_throttled.js"></script>
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.js b/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.js
deleted file mode 100644
index 6c4ef6f..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_not_throttled.js
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2015 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.
-
-// TODO(xunjieli): When URLSearchParams is stable and implemented, switch this
-// (and a lot of other test code) to it. https://crbug.com/303152
-var url = decodeURIComponent(/url=([^&]*)/.exec(location.search)[1]);
-var filter = {urls: ['http://www.example.com/*'], types: ['xmlhttprequest']};
-var numRequests = 0;
-
-chrome.webRequest.onCompleted.addListener(function(details) {
-  chrome.test.assertEq(503, details.statusCode);
-  // If the third request goes through, it means that throttling logic did not
-  // apply.
-  if (numRequests == 3) {
-     chrome.test.notifyPass();
-  } else {
-     numRequests++;
-     chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url});
-  }
-}, filter);
-
-chrome.webRequest.onErrorOccurred.addListener(function(details) {
-  chrome.test.notifyFail('Unexpected error');
-}, filter);
-
-numRequests++;
-chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url});
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_throttle.html b/chrome/test/data/extensions/extension_throttle/test_request_throttle.html
new file mode 100644
index 0000000..78f3b39
--- /dev/null
+++ b/chrome/test/data/extensions/extension_throttle/test_request_throttle.html
@@ -0,0 +1,6 @@
+<!--
+ * 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.
+-->
+<script src="test_request_throttle.js"></script>
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_throttle.js b/chrome/test/data/extensions/extension_throttle/test_request_throttle.js
new file mode 100644
index 0000000..b9ce21a8
--- /dev/null
+++ b/chrome/test/data/extensions/extension_throttle/test_request_throttle.js
@@ -0,0 +1,21 @@
+// 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.
+
+const maxRequests = 3;
+
+var searchParams = new URLSearchParams(location.search);
+var url = searchParams.get('url');
+var requestsToMake;
+var expectedFailRequestNum;
+if (searchParams.has('expectedFailRequestNum')) {
+  expectedFailRequestNum = parseInt(searchParams.get('expectedFailRequestNum'));
+  requestsToMake = expectedFailRequestNum;
+} else {
+  expectedFailRequestNum = maxRequests + 1;
+  requestsToMake = maxRequests;
+}
+
+chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url,
+                            requestsToMake: requestsToMake,
+                            expectedFailRequestNum: expectedFailRequestNum});
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.html b/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.html
deleted file mode 100644
index 1833c20..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<!--
- * Copyright 2015 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.
--->
-<script src="test_request_throttled_on_first_try.js"></script>
diff --git a/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.js b/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.js
deleted file mode 100644
index 84ef890..0000000
--- a/chrome/test/data/extensions/extension_throttle/test_request_throttled_on_first_try.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2015 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.
-
-// TODO(xunjieli): When URLSearchParams is stable and implemented, switch this
-// (and a lot of other test code) to it. https://crbug.com/303152
-var url = decodeURIComponent(/url=([^&]*)/.exec(location.search)[1]);
-var filter = {urls: ['http://www.example.com/*'], types: ['xmlhttprequest']};
-
-chrome.webRequest.onCompleted.addListener(function(details) {
-  chrome.test.notifyFail('Unexpected.');
-}, filter);
-
-chrome.webRequest.onErrorOccurred.addListener(function(details) {
-  chrome.test.assertEq('net::ERR_TEMPORARILY_THROTTLED', details.error);
-  chrome.test.notifyPass();
-}, filter);
-
-chrome.runtime.sendMessage({type: 'xhr', method: 'GET', url: url});
diff --git a/chrome/test/data/webrtc/peerconnection.js b/chrome/test/data/webrtc/peerconnection.js
index 78bddd5..13b7d77 100644
--- a/chrome/test/data/webrtc/peerconnection.js
+++ b/chrome/test/data/webrtc/peerconnection.js
@@ -431,12 +431,13 @@
 }
 
 /**
- * Verifies that the legacy |RTCPeerConnection.getStats| returns stats and
- * verifies that each stats member is a string.
+ * Verifies that the legacy |RTCPeerConnection.getStats| returns stats, that
+ * each stats member is a string, and that each stats member is on the
+ * whitelist.
  *
  * Returns ok-got-stats on success.
  */
-function verifyStatsGenerated() {
+function verifyLegacyStatsGenerated() {
   peerConnection_().getStats(
     function(response) {
       var reports = response.result();
@@ -448,6 +449,14 @@
           var statValue = reports[i].stat(statNames[j]);
           if (typeof statValue != 'string')
             throw failTest('A stat was returned that is not a string.');
+          if (!isWhitelistedLegacyStat(statNames[j])) {
+            throw failTest(
+                '"' + statNames[j] + '" is not a whitelisted stat. Exposing ' +
+                'new metrics in the legacy getStats() API is not allowed. ' +
+                'Please follow the standardization process: ' +
+                'https://docs.google.com/document/d/1q1CJVUqJ6YW9NNRc0tENkLNn' +
+                'y8AHrKZfqjy3SL89zjc/edit?usp=sharing');
+          }
         }
       }
       if (numStats === 0)
@@ -599,3 +608,153 @@
              exception);
   }
 }
+
+/**
+ * The legacy stats API is non-standard. It should be deprecated and removed.
+ * New stats are not allowed. To add new metrics, follow the standardization
+ * process, and only add it to the promise-based getStats() API. See:
+ * https://docs.google.com/document/d/1q1CJVUqJ6YW9NNRc0tENkLNny8AHrKZfqjy3SL89zjc/edit?usp=sharing
+ * @private
+ */
+function isWhitelistedLegacyStat(stat) {
+  const whitelist = new Set([
+      "aecDivergentFilterFraction",
+      "audioOutputLevel",
+      "audioInputLevel",
+      "bytesSent",
+      "concealedSamples",
+      "concealmentEvents",
+      "packetsSent",
+      "bytesReceived",
+      "label",
+      "packetsReceived",
+      "packetsLost",
+      "protocol",
+      "totalSamplesReceived",
+      "transportId",
+      "selectedCandidatePairId",
+      "ssrc",
+      "state",
+      "datachannelid",
+      "framesDecoded",
+      "framesEncoded",
+      "jitterBufferDelay",
+      "codecImplementationName",
+      "mediaType",
+      "qpSum",
+      "googAccelerateRate",
+      "googActiveConnection",
+      "googActualEncBitrate",
+      "googAvailableReceiveBandwidth",
+      "googAvailableSendBandwidth",
+      "googAvgEncodeMs",
+      "googBucketDelay",
+      "googBandwidthLimitedResolution",
+      "requestsSent",
+      "consentRequestsSent",
+      "responsesSent",
+      "requestsReceived",
+      "responsesReceived",
+      "stunKeepaliveRequestsSent",
+      "stunKeepaliveResponsesReceived",
+      "stunKeepaliveRttTotal",
+      "stunKeepaliveRttSquaredTotal",
+      "ipAddress",
+      "networkType",
+      "portNumber",
+      "priority",
+      "transport",
+      "candidateType",
+      "googChannelId",
+      "googCodecName",
+      "googComponent",
+      "googContentName",
+      "googContentType",
+      "googCpuLimitedResolution",
+      "googDecodingCTSG",
+      "googDecodingCTN",
+      "googDecodingMuted",
+      "googDecodingNormal",
+      "googDecodingPLC",
+      "googDecodingCNG",
+      "googDecodingPLCCNG",
+      "googDerBase64",
+      "dtlsCipher",
+      "googEchoCancellationEchoDelayMedian",
+      "googEchoCancellationEchoDelayStdDev",
+      "googEchoCancellationReturnLoss",
+      "googEchoCancellationReturnLossEnhancement",
+      "googEncodeUsagePercent",
+      "googExpandRate",
+      "googFingerprint",
+      "googFingerprintAlgorithm",
+      "googFirsReceived",
+      "googFirsSent",
+      "googFrameHeightInput",
+      "googFrameHeightReceived",
+      "googFrameHeightSent",
+      "googFrameRateReceived",
+      "googFrameRateDecoded",
+      "googFrameRateOutput",
+      "googDecodeMs",
+      "googMaxDecodeMs",
+      "googCurrentDelayMs",
+      "googTargetDelayMs",
+      "googJitterBufferMs",
+      "googMinPlayoutDelayMs",
+      "googRenderDelayMs",
+      "googCaptureStartNtpTimeMs",
+      "googFrameRateInput",
+      "googFrameRateSent",
+      "googFrameWidthInput",
+      "googFrameWidthReceived",
+      "googFrameWidthSent",
+      "googHasEnteredLowResolution",
+      "hugeFramesSent",
+      "googInitiator",
+      "googInterframeDelayMax",
+      "googIssuerId",
+      "googJitterReceived",
+      "googLocalAddress",
+      "localCandidateId",
+      "googLocalCandidateType",
+      "localCertificateId",
+      "googAdaptationChanges",
+      "googNacksReceived",
+      "googNacksSent",
+      "googPreemptiveExpandRate",
+      "googPlisReceived",
+      "googPlisSent",
+      "googPreferredJitterBufferMs",
+      "googReadable",
+      "googRemoteAddress",
+      "remoteCandidateId",
+      "googRemoteCandidateType",
+      "remoteCertificateId",
+      "googResidualEchoLikelihood",
+      "googResidualEchoLikelihoodRecentMax",
+      "googAnaBitrateActionCounter",
+      "googAnaChannelActionCounter",
+      "googAnaDtxActionCounter",
+      "googAnaFecActionCounter",
+      "googAnaFrameLengthIncreaseCounter",
+      "googAnaFrameLengthDecreaseCounter",
+      "googAnaUplinkPacketLossFraction",
+      "googRetransmitBitrate",
+      "googRtt",
+      "googSecondaryDecodedRate",
+      "googSecondaryDiscardedRate",
+      "packetsDiscardedOnSend",
+      "googSpeechExpandRate",
+      "srtpCipher",
+      "googTargetEncBitrate",
+      "totalAudioEnergy",
+      "totalSamplesDuration",
+      "googTransmitBitrate",
+      "googTransportType",
+      "googTrackId",
+      "googTimingFrameInfo",
+      "googTypingNoiseState",
+      "googWritable" ]);
+  return whitelist.has(stat);
+}
diff --git a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
index e196dbbd..d6cbf2ac 100644
--- a/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
+++ b/chrome/test/data/webui/extensions/cr_extensions_browsertest.js
@@ -232,19 +232,6 @@
   this.runMochaTest(extension_detail_view_tests.TestNames.Warnings);
 });
 
-TEST_F(
-    'CrExtensionsDetailViewTest', 'RuntimeHostPermissionsDisplay', function() {
-      this.runMochaTest(
-          extension_detail_view_tests.TestNames.RuntimeHostPermissionsDisplay);
-    });
-
-TEST_F(
-    'CrExtensionsDetailViewTest', 'RuntimeHostPermissionsSelection',
-    function() {
-      this.runMochaTest(extension_detail_view_tests.TestNames
-                            .RuntimeHostPermissionsSelection);
-    });
-
 ////////////////////////////////////////////////////////////////////////////////
 // Extension Item List Tests
 
@@ -855,3 +842,23 @@
 TEST_F('CrExtensionsRuntimeHostsDialogTest', 'All', () => {
   mocha.run();
 });
+
+////////////////////////////////////////////////////////////////////////////////
+// RuntimeHostPermissions tests
+
+CrExtensionsRuntimeHostPermissionsTest = class extends CrExtensionsBrowserTest {
+  /** @override */
+  get browserPreload() {
+    return 'chrome://extensions/runtime_host_permissions.html';
+  }
+
+  get extraLibraries() {
+    return super.extraLibraries.concat([
+      'extension_runtime_host_permissions_test.js',
+    ]);
+  }
+};
+
+TEST_F('CrExtensionsRuntimeHostPermissionsTest', 'All', () => {
+  mocha.run();
+});
diff --git a/chrome/test/data/webui/extensions/extension_detail_view_test.js b/chrome/test/data/webui/extensions/extension_detail_view_test.js
index 78bf6f26..d74e078 100644
--- a/chrome/test/data/webui/extensions/extension_detail_view_test.js
+++ b/chrome/test/data/webui/extensions/extension_detail_view_test.js
@@ -11,8 +11,6 @@
     ClickableElements: 'clickable elements',
     Indicator: 'indicator',
     Warnings: 'warnings',
-    RuntimeHostPermissionsDisplay: 'runtime host permissions display',
-    RuntimeHostPermissionsSelection: 'runtime host permissions selection',
   };
 
   const suiteName = 'ExtensionDetailViewTest';
@@ -98,7 +96,7 @@
 
       expectFalse(testIsVisible('#permissions-list'));
       expectFalse(testIsVisible('#host-access'));
-      expectFalse(testIsVisible('#runtime-hosts'));
+      expectFalse(testIsVisible('extensions-runtime-host-permissions'));
 
       expectTrue(testIsVisible('#no-permissions'));
       item.set(
@@ -110,7 +108,7 @@
           2, item.$$('#permissions-list').querySelectorAll('li').length);
       expectFalse(testIsVisible('#no-permissions'));
       expectFalse(testIsVisible('#host-access'));
-      expectFalse(testIsVisible('#runtime-hosts'));
+      expectFalse(testIsVisible('extensions-runtime-host-permissions'));
 
       const optionsUrl =
           'chrome-extension://' + extensionData.id + '/options.html';
@@ -160,6 +158,14 @@
       item.set('data.runtimeWarnings', ['Dummy warning']);
       Polymer.dom.flush();
       expectTrue(testIsVisible('.warning-icon'));
+
+      // Adding any runtime host permissions should result in the runtime host
+      // controls becoming visible.
+      item.set(
+          'data.permissions.hostAccess',
+          chrome.developerPrivate.HostAccess.ON_CLICK);
+      Polymer.dom.flush();
+      expectTrue(testIsVisible('extensions-runtime-host-permissions'));
     });
 
     test(assert(TestNames.LayoutSource), function() {
@@ -297,81 +303,6 @@
       testWarningVisible('#blacklisted-warning', false);
       testWarningVisible('#update-required-warning', false);
     });
-
-    test(assert(TestNames.RuntimeHostPermissionsDisplay), function() {
-      const HostAccess = chrome.developerPrivate.HostAccess;
-
-      const permissions = {
-        simplePermissions: ['permission 1', 'permission 2'],
-        hostAccess: HostAccess.ON_CLICK,
-        runtimeHostPermissions: [],
-      };
-
-      item.set('data.permissions', permissions);
-      Polymer.dom.flush();
-
-      const testIsVisible = extension_test_util.isVisible.bind(null, item);
-      expectTrue(testIsVisible('#host-access'));
-
-      // The host-access menu should be visible, since the data includes
-      // host access information.
-      const selectHostAccess = item.$$('#host-access');
-      expectEquals(HostAccess.ON_CLICK, selectHostAccess.value);
-      // For on-click mode, there should be no runtime hosts listed.
-      expectFalse(testIsVisible('#runtime-hosts'));
-
-      // Changing the data's access should change the UI appropriately.
-      item.set('data.permissions.hostAccess', HostAccess.ON_ALL_SITES);
-      Polymer.dom.flush();
-      expectEquals(HostAccess.ON_ALL_SITES, selectHostAccess.value);
-      expectFalse(testIsVisible('#runtime-hosts'));
-
-      // Setting the mode to on specific sites should display the runtime hosts
-      // list.
-      item.set('data.permissions.hostAccess', HostAccess.ON_SPECIFIC_SITES);
-      item.set(
-          'data.permissions.runtimeHostPermissions',
-          ['https://example.com', 'https://chromium.org']);
-      Polymer.dom.flush();
-      expectEquals(HostAccess.ON_SPECIFIC_SITES, selectHostAccess.value);
-      expectTrue(testIsVisible('#runtime-hosts'));
-      expectEquals(
-          2, item.$$('#runtime-hosts').getElementsByTagName('li').length);
-    });
-
-    test(assert(TestNames.RuntimeHostPermissionsSelection), function() {
-      const HostAccess = chrome.developerPrivate.HostAccess;
-
-      const permissions = {
-        simplePermissions: ['permission 1', 'permission 2'],
-        hostAccess: HostAccess.ON_CLICK,
-        runtimeHostPermissions: [],
-      };
-
-      item.set('data.permissions', permissions);
-      Polymer.dom.flush();
-
-      const selectHostAccess = item.$$('#host-access');
-
-      // Changes the value of the selectHostAccess menu and fires the change
-      // event, then verifies that the delegate was called with the correct
-      // value.
-      function expectDelegateCallOnAccessChange(newValue) {
-        const mock = new MockController();
-        const mockMethod =
-            mock.createFunctionMock(mockDelegate, 'setItemHostAccess');
-        mockMethod.addExpectation(extensionData.id, newValue);
-        selectHostAccess.value = newValue;
-        selectHostAccess.dispatchEvent(
-            new CustomEvent('change', {target: selectHostAccess}));
-        mock.verifyMocks();
-      }
-
-      // Check that selecting different values correctly notifies the delegate.
-      expectDelegateCallOnAccessChange(HostAccess.ON_SPECIFIC_SITES);
-      expectDelegateCallOnAccessChange(HostAccess.ON_ALL_SITES);
-      expectDelegateCallOnAccessChange(HostAccess.ON_CLICK);
-    });
   });
 
   return {
diff --git a/chrome/test/data/webui/extensions/extension_runtime_host_permissions_test.js b/chrome/test/data/webui/extensions/extension_runtime_host_permissions_test.js
new file mode 100644
index 0000000..54474dc
--- /dev/null
+++ b/chrome/test/data/webui/extensions/extension_runtime_host_permissions_test.js
@@ -0,0 +1,122 @@
+// 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.
+
+suite('RuntimeHostPermissions', function() {
+  /** @type {extensions.RuntimeHostPermissionsElement} */ let element;
+  /** @type {extensions.TestService} */ let delegate;
+
+  const HostAccess = chrome.developerPrivate.HostAccess;
+  const ITEM_ID = 'a'.repeat(32);
+
+  setup(function() {
+    PolymerTest.clearBody();
+    element = document.createElement('extensions-runtime-host-permissions');
+    delegate = new extensions.TestService();
+    element.delegate = delegate;
+    element.itemId = ITEM_ID;
+
+    document.body.appendChild(element);
+  });
+
+  teardown(function() {
+    element.remove();
+  });
+
+  test('permissions display', function() {
+    const permissions = {
+      simplePermissions: ['permission 1', 'permission 2'],
+      hostAccess: HostAccess.ON_CLICK,
+      runtimeHostPermissions: [],
+    };
+
+    element.set('permissions', permissions);
+    Polymer.dom.flush();
+
+    const testIsVisible = extension_test_util.isVisible.bind(null, element);
+    expectTrue(testIsVisible('#host-access'));
+
+    const selectHostAccess = element.$$('#host-access');
+    expectEquals(HostAccess.ON_CLICK, selectHostAccess.value);
+    // For on-click mode, there should be no runtime hosts listed.
+    expectFalse(testIsVisible('#hosts'));
+    expectFalse(testIsVisible('#add-hosts-section'));
+
+    // Changing the data's access should change the UI appropriately.
+    element.set('permissions.hostAccess', HostAccess.ON_ALL_SITES);
+    Polymer.dom.flush();
+    expectEquals(HostAccess.ON_ALL_SITES, selectHostAccess.value);
+    expectFalse(testIsVisible('#hosts'));
+    expectFalse(testIsVisible('#add-hosts-section'));
+
+    // Setting the mode to on specific sites should display the runtime hosts
+    // list.
+    element.set('permissions.hostAccess', HostAccess.ON_SPECIFIC_SITES);
+    element.set(
+        'permissions.runtimeHostPermissions',
+        ['https://example.com', 'https://chromium.org']);
+    Polymer.dom.flush();
+    expectEquals(HostAccess.ON_SPECIFIC_SITES, selectHostAccess.value);
+    expectTrue(testIsVisible('#hosts'));
+    expectTrue(testIsVisible('#add-hosts-section'));
+    expectEquals(2, element.$$('#hosts').getElementsByTagName('li').length);
+  });
+
+  test('permissions selection', function() {
+    const permissions = {
+      simplePermissions: ['permission 1', 'permission 2'],
+      hostAccess: HostAccess.ON_CLICK,
+      runtimeHostPermissions: [],
+    };
+
+    element.set('permissions', permissions);
+    Polymer.dom.flush();
+
+    const selectHostAccess = element.$$('#host-access');
+    assertTrue(!!selectHostAccess);
+
+    // Changes the value of the selectHostAccess menu and fires the change
+    // event, then verifies that the delegate was called with the correct
+    // value.
+    function expectDelegateCallOnAccessChange(newValue) {
+      selectHostAccess.value = newValue;
+      selectHostAccess.dispatchEvent(
+          new CustomEvent('change', {target: selectHostAccess}));
+      return delegate.whenCalled('setItemHostAccess').then((args) => {
+        expectEquals(ITEM_ID, args[0] /* id */);
+        expectEquals(newValue, args[1] /* access */);
+        delegate.resetResolver('setItemHostAccess');
+      });
+    }
+
+    // Check that selecting different values correctly notifies the delegate.
+    return expectDelegateCallOnAccessChange(HostAccess.ON_SPECIFIC_SITES)
+        .then(() => {
+          return expectDelegateCallOnAccessChange(HostAccess.ON_ALL_SITES);
+        })
+        .then(() => {
+          return expectDelegateCallOnAccessChange(HostAccess.ON_CLICK);
+        });
+  });
+
+  test('clicking add host triggers dialog', function() {
+    const permissions = {
+      simplePermissions: [],
+      hostAccess: HostAccess.ON_SPECIFIC_SITES,
+      runtimeHostPermissions: ['http://www.example.com'],
+    };
+
+    element.set('permissions', permissions);
+    Polymer.dom.flush();
+
+    const addHostButton = element.$$('#add-host');
+    assertTrue(!!addHostButton);
+    expectTrue(extension_test_util.isVisible(element, '#add-host'));
+
+    addHostButton.click();
+    Polymer.dom.flush();
+    const dialog = element.$$('extensions-runtime-hosts-dialog');
+    assertTrue(!!dialog);
+    expectTrue(dialog.$.dialog.open);
+  });
+});
diff --git a/chrome/test/data/webui/extensions/test_service.js b/chrome/test/data/webui/extensions/test_service.js
index 81d8db16..0074229 100644
--- a/chrome/test/data/webui/extensions/test_service.js
+++ b/chrome/test/data/webui/extensions/test_service.js
@@ -14,6 +14,7 @@
         'loadUnpacked',
         'retryLoadUnpacked',
         'reloadItem',
+        'setItemHostAccess',
         'setProfileInDevMode',
         'setShortcutHandlingSuspended',
         'shouldIgnoreUpdate',
@@ -85,6 +86,11 @@
     }
 
     /** @override */
+    setItemHostAccess(id, access) {
+      this.methodCalled('setItemHostAccess', [id, access]);
+    }
+
+    /** @override */
     setShortcutHandlingSuspended(enable) {
       this.methodCalled('setShortcutHandlingSuspended', enable);
     }
diff --git a/chrome/utility/DEPS b/chrome/utility/DEPS
index 92ea29b..92d397d 100644
--- a/chrome/utility/DEPS
+++ b/chrome/utility/DEPS
@@ -55,7 +55,6 @@
     "+ash/components/tap_visualizer/tap_visualizer_app.h",
     "+ash/public/interfaces",
     "+ash/window_manager_service.h",
-    "+services/ui/common/image_cursors_set.h",
     "+services/ui/public",
     "+services/ui/service.h",
   ],
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn
index c4364a0..3bd431ab 100644
--- a/chromecast/BUILD.gn
+++ b/chromecast/BUILD.gn
@@ -103,6 +103,10 @@
     ]
   }
 
+  if (is_android && is_cast_using_cma_backend) {
+    tests += [ "//chromecast/media/cma/backend/android:cast_android_cma_backend_unittests" ]
+  }
+
   if (!is_android) {
     tests += [
       ":cast_shell_browsertests",
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsActivity.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsActivity.java
index 456345b..e7ff2f9 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsActivity.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsActivity.java
@@ -86,7 +86,7 @@
             setContentView(R.layout.cast_web_contents_activity);
 
             mSurfaceHelper = new CastWebContentsSurfaceHelper(this, /* hostActivity */
-                    CastWebContentsView.onLayout(this,
+                    CastWebContentsView.onLayoutActivity(this,
                             (FrameLayout) findViewById(R.id.web_contents_container),
                             CastSwitches.getSwitchValueColor(
                                     CastSwitches.CAST_APP_BACKGROUND_COLOR, Color.BLACK)),
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsFragment.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsFragment.java
index d4de1bf8..e302787 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsFragment.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsFragment.java
@@ -88,7 +88,7 @@
         }
 
         mSurfaceHelper = new CastWebContentsSurfaceHelper(getActivity(), /* hostActivity */
-                CastWebContentsView.onLayout(getActivity(),
+                CastWebContentsView.onLayoutFragment(getContext(),
                         (FrameLayout) getView().findViewById(R.id.web_contents_container),
                         CastSwitches.getSwitchValueColor(
                                 CastSwitches.CAST_APP_BACKGROUND_COLOR, Color.BLACK)),
diff --git a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
index 937c585..2be55eb 100644
--- a/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
+++ b/chromecast/browser/android/apk/src/org/chromium/chromecast/shell/CastWebContentsView.java
@@ -4,6 +4,7 @@
 
 package org.chromium.chromecast.shell;
 
+import android.app.Activity;
 import android.content.Context;
 import android.graphics.drawable.ColorDrawable;
 import android.widget.FrameLayout;
@@ -17,11 +18,23 @@
 import org.chromium.ui.base.WindowAndroid;
 
 class CastWebContentsView {
-    public static ScopeFactory<WebContents> onLayout(
+    public static ScopeFactory<WebContents> onLayoutActivity(
+            Activity activity, FrameLayout layout, int backgroundColor) {
+        layout.setBackgroundColor(backgroundColor);
+        WindowAndroid window = new ActivityWindowAndroid(activity);
+        return onLayoutInternal(activity, layout, window, backgroundColor);
+    }
+
+    public static ScopeFactory<WebContents> onLayoutFragment(
             Context context, FrameLayout layout, int backgroundColor) {
         layout.setBackgroundColor(backgroundColor);
+        WindowAndroid window = new WindowAndroid(context);
+        return onLayoutInternal(context, layout, window, backgroundColor);
+    }
+
+    private static ScopeFactory<WebContents> onLayoutInternal(
+            Context context, FrameLayout layout, WindowAndroid window, int backgroundColor) {
         return (WebContents webContents) -> {
-            WindowAndroid window = new ActivityWindowAndroid(context);
             ContentViewRenderView contentViewRenderView = new ContentViewRenderView(context) {
                 @Override
                 protected void onReadyToRender() {
diff --git a/chromecast/media/cma/backend/android/BUILD.gn b/chromecast/media/cma/backend/android/BUILD.gn
index 15f06856..584191b 100644
--- a/chromecast/media/cma/backend/android/BUILD.gn
+++ b/chromecast/media/cma/backend/android/BUILD.gn
@@ -5,6 +5,7 @@
 import("//build/config/android/config.gni")
 import("//build/config/android/rules.gni")
 import("//chromecast/chromecast.gni")
+import("//testing/test.gni")
 
 cast_source_set("cast_media_android") {
   sources = [
@@ -20,6 +21,8 @@
     "media_codec_support_cast_audio.cc",
     "media_pipeline_backend_android.cc",
     "media_pipeline_backend_android.h",
+    "volume_cache.cc",
+    "volume_cache.h",
     "volume_control_android.cc",
     "volume_control_android.h",
   ]
@@ -74,3 +77,23 @@
     "//third_party/android_tools:android_support_v13_java",
   ]
 }
+
+test("cast_android_cma_backend_unittests") {
+  deps = [
+    ":unit_tests",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "volume_cache_test.cc",
+  ]
+
+  deps = [
+    ":cast_media_android",
+    "//base",
+    "//base/test:run_all_unittests",
+    "//testing/gtest",
+  ]
+}
diff --git a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/VolumeMap.java b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/VolumeMap.java
index 42287f9..647454a 100644
--- a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/VolumeMap.java
+++ b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/VolumeMap.java
@@ -89,12 +89,18 @@
         return db;
     }
 
+    /** Return the max volume index for the given cast type. */
+    @CalledByNative
+    static int getMaxVolumeIndex(int castType) {
+        int streamType = getStreamType(castType);
+        return MAX_VOLUME_INDEX.get(streamType);
+    }
+
     /**
      * Logs the dB value at each discrete Android volume index for the given cast type.
      * Note that this is not identical to the volume table, which may contain a different number
      * of points and at different levels.
      */
-    @CalledByNative
     static void dumpVolumeTables(int castType) {
         int streamType = getStreamType(castType);
         int maxIndex = MAX_VOLUME_INDEX.get(streamType);
@@ -117,7 +123,6 @@
         return getStreamVolumeDB(streamType, volumeIndex);
     }
 
-    @CalledByNative
     /**
      * Returns the volume level for the given dB value using the volume table for the given type.
      */
diff --git a/chromecast/media/cma/backend/android/volume_cache.cc b/chromecast/media/cma/backend/android/volume_cache.cc
new file mode 100644
index 0000000..e1ff4e4
--- /dev/null
+++ b/chromecast/media/cma/backend/android/volume_cache.cc
@@ -0,0 +1,70 @@
+// 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.
+
+#include "chromecast/media/cma/backend/android/volume_cache.h"
+
+#include <algorithm>
+#include <cmath>
+
+#include "base/logging.h"
+
+namespace chromecast {
+namespace media {
+
+VolumeCache::VolumeCache(AudioContentType type, SystemVolumeTableAccessApi* api)
+    : kMaxVolumeIndex(api->GetMaxVolumeIndex(type)) {
+  LOG(INFO) << "Build volume cache for type " << static_cast<int>(type) << ":";
+  cache_.resize(kMaxVolumeIndex + 1);
+  for (size_t v_idx = 0; v_idx < cache_.size(); v_idx++) {
+    float v_level = static_cast<float>(v_idx) / kMaxVolumeIndex;
+    cache_[v_idx] = api->VolumeToDbFS(type, v_level);
+    LOG(INFO) << "     " << v_idx << "(" << v_level << ") -> " << cache_[v_idx];
+  }
+}
+
+VolumeCache::~VolumeCache() = default;
+
+float VolumeCache::VolumeToDbFS(float vol_level) {
+  if (vol_level <= 0.0f)
+    return cache_[0];
+  if (vol_level >= 1.0f)
+    return cache_[kMaxVolumeIndex];
+
+  float vol_idx = vol_level * kMaxVolumeIndex;
+  // Find the nearest integers below and above vol_idx.
+  float vol_idx_high = std::ceil(vol_idx);
+  float vol_idx_low = std::floor(vol_idx);
+  float db_high = cache_[static_cast<int>(vol_idx_high)];
+  if (vol_idx_high == vol_idx_low) {
+    return db_high;
+  }
+  // We are in between two consecutive volume points, so interpolate.
+  // Note that vol_idx_high = vol_idx_low + 1.
+  float db_low = cache_[static_cast<int>(vol_idx_low)];
+  float m = (db_high - db_low) / 1.0f;
+  float db_interpolated = db_low + m * (vol_idx - vol_idx_low);
+  return db_interpolated;
+}
+
+float VolumeCache::DbFSToVolume(float db) {
+  auto db_high_it = std::lower_bound(cache_.begin(), cache_.end(), db);
+  if (db_high_it == cache_.end())
+    return 1.0f;
+  if (db_high_it == cache_.begin())
+    return 0.0f;
+
+  int vol_idx_high = db_high_it - cache_.begin();
+  if (db == *db_high_it)
+    return static_cast<float>(vol_idx_high) / kMaxVolumeIndex;
+
+  // We are in between two consecutive volume points, so interpolate.
+  // Note that vol_idx_high = vol_idx_low + 1.
+  auto db_low_it = std::prev(db_high_it);
+  float m = 1.0f / (*db_high_it - *db_low_it);
+  float vol_idx = static_cast<float>(vol_idx_high) - m * (*db_high_it - db);
+  return vol_idx / kMaxVolumeIndex;
+}
+
+}  // namespace media
+}  // namespace chromecast
diff --git a/chromecast/media/cma/backend/android/volume_cache.h b/chromecast/media/cma/backend/android/volume_cache.h
new file mode 100644
index 0000000..a509e19c
--- /dev/null
+++ b/chromecast/media/cma/backend/android/volume_cache.h
@@ -0,0 +1,52 @@
+// 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.
+
+#ifndef CHROMECAST_MEDIA_CMA_BACKEND_ANDROID_VOLUME_CACHE_H_
+#define CHROMECAST_MEDIA_CMA_BACKEND_ANDROID_VOLUME_CACHE_H_
+
+#include <vector>
+
+#include "base/macros.h"
+#include "chromecast/public/volume_control.h"
+
+namespace chromecast {
+namespace media {
+
+// Wrapper class to inject an API into VolumeCache that is used to populate the
+// cache.
+class SystemVolumeTableAccessApi {
+ public:
+  SystemVolumeTableAccessApi() = default;
+  virtual ~SystemVolumeTableAccessApi() = default;
+
+  virtual int GetMaxVolumeIndex(AudioContentType type) = 0;
+  virtual float VolumeToDbFS(AudioContentType type, float volume) = 0;
+};
+
+// Builds a cache of the system's volume table and provides access to it.
+class VolumeCache {
+ public:
+  VolumeCache(AudioContentType type, SystemVolumeTableAccessApi* api);
+  ~VolumeCache();
+
+  // Returns the mapped and interpolated dBFS value for the given volume level,
+  // using the cached volume table.
+  float VolumeToDbFS(float vol_level);
+
+  // Returns the mapped and interpolated volume value for the given dBFS value,
+  // using the cached volume table.
+  float DbFSToVolume(float db);
+
+ private:
+  const int kMaxVolumeIndex;
+
+  std::vector<float> cache_;
+
+  DISALLOW_COPY_AND_ASSIGN(VolumeCache);
+};
+
+}  // namespace media
+}  // namespace chromecast
+
+#endif  // CHROMECAST_MEDIA_CMA_BACKEND_ANDROID_VOLUME_CACHE_H_
diff --git a/chromecast/media/cma/backend/android/volume_cache_test.cc b/chromecast/media/cma/backend/android/volume_cache_test.cc
new file mode 100644
index 0000000..20d1fc13
--- /dev/null
+++ b/chromecast/media/cma/backend/android/volume_cache_test.cc
@@ -0,0 +1,121 @@
+// 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.
+
+#include "chromecast/media/cma/backend/android/volume_cache.h"
+
+#include <cmath>
+
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace chromecast {
+namespace media {
+
+namespace {
+const int kMaxVolumeIndex = 10;
+
+const float kTestVolumeTable[kMaxVolumeIndex + 1] = {
+    -100.0f, -88.0f, -82.0f, -70.0f, -62.5f, -49.9f,
+    -40.5f,  -30.0f, -28.2f, -10.0f, 0.0f};
+
+}  // namespace
+
+class VolumeCacheTest : protected SystemVolumeTableAccessApi,
+                        public testing::Test {
+ protected:
+  VolumeCacheTest() : volume_cache_(AudioContentType::kMedia, this) {}
+
+  ~VolumeCacheTest() override {}
+
+  // SystemVolumeTableAccessApi implementation.
+  // We use kTestVolumeTable for kMedia and just return -1.0f for other types.
+  // That allows to test if the type is properly used in the c'tor.
+  int GetMaxVolumeIndex(AudioContentType type) override {
+    return (type == AudioContentType::kMedia) ? kMaxVolumeIndex : 2;
+  }
+  float VolumeToDbFS(AudioContentType type, float volume) override {
+    if (type != AudioContentType::kMedia)
+      return -1.0f;
+
+    int idx_vol = static_cast<int>(std::round(volume * kMaxVolumeIndex));
+    return kTestVolumeTable[idx_vol];
+  }
+
+  VolumeCache volume_cache_;
+};
+
+TEST_F(VolumeCacheTest, CachedValuesMatchesOriginalTable) {
+  for (int i = 0; i <= kMaxVolumeIndex; i++) {
+    float v = static_cast<float>(i) / kMaxVolumeIndex;
+    EXPECT_FLOAT_EQ(kTestVolumeTable[i], volume_cache_.VolumeToDbFS(v));
+    float db = kTestVolumeTable[i];
+    EXPECT_FLOAT_EQ(v, volume_cache_.DbFSToVolume(db));
+  }
+}
+
+TEST_F(VolumeCacheTest, BoundaryValues) {
+  EXPECT_FLOAT_EQ(kTestVolumeTable[0], volume_cache_.VolumeToDbFS(-100.0f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[0], volume_cache_.VolumeToDbFS(-1.0f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[0], volume_cache_.VolumeToDbFS(-0.1f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[0], volume_cache_.VolumeToDbFS(0.0f));
+
+  EXPECT_FLOAT_EQ(kTestVolumeTable[kMaxVolumeIndex],
+                  volume_cache_.VolumeToDbFS(1.0f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[kMaxVolumeIndex],
+                  volume_cache_.VolumeToDbFS(1.1f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[kMaxVolumeIndex],
+                  volume_cache_.VolumeToDbFS(2.0f));
+  EXPECT_FLOAT_EQ(kTestVolumeTable[kMaxVolumeIndex],
+                  volume_cache_.VolumeToDbFS(100.0f));
+
+  float min_db = kTestVolumeTable[0];
+  EXPECT_FLOAT_EQ(0.0f, volume_cache_.DbFSToVolume(min_db - 100.0f));
+  EXPECT_FLOAT_EQ(0.0f, volume_cache_.DbFSToVolume(min_db - 1.0f));
+  EXPECT_FLOAT_EQ(0.0f, volume_cache_.DbFSToVolume(min_db - 0.1f));
+  EXPECT_FLOAT_EQ(0.0f, volume_cache_.DbFSToVolume(min_db - 0.0f));
+
+  float max_db = kTestVolumeTable[kMaxVolumeIndex];
+  EXPECT_FLOAT_EQ(1.0f, volume_cache_.DbFSToVolume(max_db + 0.0f));
+  EXPECT_FLOAT_EQ(1.0f, volume_cache_.DbFSToVolume(max_db + 0.1f));
+  EXPECT_FLOAT_EQ(1.0f, volume_cache_.DbFSToVolume(max_db + 1.0f));
+  EXPECT_FLOAT_EQ(1.0f, volume_cache_.DbFSToVolume(max_db + 100.0f));
+}
+
+TEST_F(VolumeCacheTest, Volume2DbFSInterpolatesCorrectly) {
+  int i_low = 0, i_high = 1;
+  for (; i_high <= kMaxVolumeIndex; ++i_high, ++i_low) {
+    float v_low = static_cast<float>(i_low) / kMaxVolumeIndex;
+    float v_high = static_cast<float>(i_high) / kMaxVolumeIndex;
+    float db_low = kTestVolumeTable[i_low];
+    float db_high = kTestVolumeTable[i_high];
+    float m = (db_high - db_low) / (v_high - v_low);
+    for (float v = v_low; v <= v_high; v += 0.1f) {
+      float expected_db = db_low + m * (v - v_low);
+      EXPECT_FLOAT_EQ(expected_db, volume_cache_.VolumeToDbFS(v));
+    }
+  }
+}
+
+TEST_F(VolumeCacheTest, DbFSToVolumeInterpolatesCorrectly) {
+  int i_low = 0, i_high = 1;
+  for (; i_high <= kMaxVolumeIndex; ++i_high, ++i_low) {
+    float v_low = static_cast<float>(i_low) / kMaxVolumeIndex;
+    float v_high = static_cast<float>(i_high) / kMaxVolumeIndex;
+    float db_low = kTestVolumeTable[i_low];
+    float db_high = kTestVolumeTable[i_high];
+    float m = (v_high - v_low) / (db_high - db_low);
+    for (float db = db_low; db <= db_high; db += 0.1f) {
+      float expected_v = v_low + m * (db - db_low);
+      EXPECT_FLOAT_EQ(expected_v, volume_cache_.DbFSToVolume(db));
+    }
+  }
+}
+
+TEST_F(VolumeCacheTest, CacheHonorsAudioContentType) {
+  VolumeCache volume_cache(AudioContentType::kAlarm, this);
+  EXPECT_FLOAT_EQ(-1.0f, volume_cache.VolumeToDbFS(0.0f));
+  EXPECT_FLOAT_EQ(-1.0f, volume_cache.VolumeToDbFS(1.0f));
+}
+
+}  // namespace media
+}  // namespace chromecast
diff --git a/chromecast/media/cma/backend/android/volume_control_android.cc b/chromecast/media/cma/backend/android/volume_control_android.cc
index 864640b..435c8227 100644
--- a/chromecast/media/cma/backend/android/volume_control_android.cc
+++ b/chromecast/media/cma/backend/android/volume_control_android.cc
@@ -30,44 +30,6 @@
 namespace chromecast {
 namespace media {
 
-namespace {
-
-#if BUILDFLAG(ENABLE_VOLUME_TABLES_ACCESS)
-float VolumeToDbFSByContentType(AudioContentType type, float volume) {
-  return Java_VolumeMap_volumeToDbFs(base::android::AttachCurrentThread(),
-                                     static_cast<int>(type), volume);
-}
-
-float DbFSToVolumeByContentType(AudioContentType type, float db) {
-  return Java_VolumeMap_dbFsToVolume(base::android::AttachCurrentThread(),
-                                     static_cast<int>(type), db);
-}
-
-#else  // Dummy versions.
-float VolumeToDbFSByContentType(AudioContentType type, float volume) {
-  return 1.0f;
-}
-
-float DbFSToVolumeByContentType(AudioContentType type, float db) {
-  return 100;
-}
-#endif
-
-// For the user of the VolumeControl, all volume values are in the volume table
-// domain of kMedia (MUSIC). For volume types other than media, VolumeControl
-// converts them internally into their proper volume table domains.
-float MapIntoDifferentVolumeTableDomain(AudioContentType from_type,
-                                        AudioContentType to_type,
-                                        float level) {
-  if (from_type == to_type) {
-    return level;
-  }
-  float from_db = VolumeToDbFSByContentType(from_type, level);
-  return DbFSToVolumeByContentType(to_type, from_db);
-}
-
-}  // namespace
-
 VolumeControlAndroid& GetVolumeControl() {
   static base::NoDestructor<VolumeControlAndroid> volume_control;
   return *volume_control;
@@ -154,7 +116,7 @@
 
   // The input limit is in the kMedia (MUSIC) volume table domain.
   limit = std::max(0.0f, std::min(limit, 1.0f));
-  float limit_db = VolumeToDbFSByContentType(AudioContentType::kMedia, limit);
+  float limit_db = VolumeToDbFSCached(AudioContentType::kMedia, limit);
   AudioSinkManager::Get()->SetOutputLimitDb(type, limit_db);
 }
 
@@ -180,19 +142,43 @@
                      base::Unretained(this), (AudioContentType)type, muted));
 }
 
+#if BUILDFLAG(ENABLE_VOLUME_TABLES_ACCESS)
+
+int VolumeControlAndroid::GetMaxVolumeIndex(AudioContentType type) {
+  return Java_VolumeMap_getMaxVolumeIndex(base::android::AttachCurrentThread(),
+                                          static_cast<int>(type));
+}
+
+float VolumeControlAndroid::VolumeToDbFS(AudioContentType type, float volume) {
+  return Java_VolumeMap_volumeToDbFs(base::android::AttachCurrentThread(),
+                                     static_cast<int>(type), volume);
+}
+
+#else  // Dummies:
+
+int VolumeControlAndroid::GetMaxVolumeIndex(AudioContentType type) {
+  return 1;
+}
+
+float VolumeControlAndroid::VolumeToDbFS(AudioContentType type, float volume) {
+  return 1.0f;
+}
+
+#endif
+
 void VolumeControlAndroid::InitializeOnThread() {
   DCHECK(thread_.task_runner()->BelongsToCurrentThread());
 
-  for (auto type : {AudioContentType::kMedia, AudioContentType::kAlarm,
-                    AudioContentType::kCommunication}) {
-#if BUILDFLAG(ENABLE_VOLUME_TABLES_ACCESS)
-    Java_VolumeMap_dumpVolumeTables(base::android::AttachCurrentThread(),
-                                    static_cast<int>(type));
-#endif
+  for (auto type :
+       {AudioContentType::kMedia, AudioContentType::kAlarm,
+        AudioContentType::kCommunication, AudioContentType::kOther}) {
+    std::unique_ptr<VolumeCache> vc(new VolumeCache(type, this));
+    volume_cache_.emplace(type, std::move(vc));
+
     volumes_[type] =
         Java_VolumeControl_getVolume(base::android::AttachCurrentThread(),
                                      j_volume_control_, static_cast<int>(type));
-    float volume_db = VolumeToDbFSByContentType(type, volumes_[type]);
+    float volume_db = VolumeToDbFSCached(type, volumes_[type]);
     AudioSinkManager::Get()->SetTypeVolumeDb(type, volume_db);
     muted_[type] =
         Java_VolumeControl_isMuted(base::android::AttachCurrentThread(),
@@ -226,7 +212,7 @@
     volumes_[type] = level;
   }
 
-  float level_db = VolumeToDbFSByContentType(type, level);
+  float level_db = VolumeToDbFSCached(type, level);
   LOG(INFO) << __func__ << ": level=" << level << " (" << level_db << ")";
   // Provide the type volume to the sink manager so it can properly calculate
   // the limiter multiplier. The volume is *not* applied by the sink though.
@@ -305,6 +291,27 @@
   SetMutedOnThread(type, muted, true /* from_android */);
 }
 
+float VolumeControlAndroid::MapIntoDifferentVolumeTableDomain(
+    AudioContentType from_type,
+    AudioContentType to_type,
+    float level) {
+  if (from_type == to_type) {
+    return level;
+  }
+  float from_db = VolumeToDbFSCached(from_type, level);
+  return DbFSToVolumeCached(to_type, from_db);
+}
+
+float VolumeControlAndroid::VolumeToDbFSCached(AudioContentType type,
+                                               float vol_level) {
+  return volume_cache_[type]->VolumeToDbFS(vol_level);
+}
+
+float VolumeControlAndroid::DbFSToVolumeCached(AudioContentType type,
+                                               float db) {
+  return volume_cache_[type]->DbFSToVolume(db);
+}
+
 //
 // Implementation of VolumeControl as defined in public/volume_control.h
 //
@@ -357,13 +364,14 @@
 // static
 float VolumeControl::VolumeToDbFS(float volume) {
   // The volume value is the kMedia (MUSIC) volume table domain.
-  return VolumeToDbFSByContentType(AudioContentType::kMedia, volume);
+  return GetVolumeControl().VolumeToDbFSCached(AudioContentType::kMedia,
+                                               volume);
 }
 
 // static
 float VolumeControl::DbFSToVolume(float db) {
   // The db value is the kMedia (MUSIC) volume table domain.
-  return DbFSToVolumeByContentType(AudioContentType::kMedia, db);
+  return GetVolumeControl().DbFSToVolumeCached(AudioContentType::kMedia, db);
 }
 
 }  // namespace media
diff --git a/chromecast/media/cma/backend/android/volume_control_android.h b/chromecast/media/cma/backend/android/volume_control_android.h
index e662c98c..b810a7d 100644
--- a/chromecast/media/cma/backend/android/volume_control_android.h
+++ b/chromecast/media/cma/backend/android/volume_control_android.h
@@ -15,14 +15,15 @@
 #include "base/threading/thread.h"
 #include "base/values.h"
 #include "chromecast/media/cma/backend/android/audio_sink_manager.h"
+#include "chromecast/media/cma/backend/android/volume_cache.h"
 
 namespace chromecast {
 namespace media {
 
-class VolumeControlAndroid {
+class VolumeControlAndroid : SystemVolumeTableAccessApi {
  public:
   VolumeControlAndroid();
-  ~VolumeControlAndroid();
+  ~VolumeControlAndroid() override;
 
   void AddVolumeObserver(VolumeObserver* observer);
   void RemoveVolumeObserver(VolumeObserver* observer);
@@ -31,6 +32,8 @@
   bool IsMuted(AudioContentType type);
   void SetMuted(AudioContentType type, bool muted);
   void SetOutputLimit(AudioContentType type, float limit);
+  float VolumeToDbFSCached(AudioContentType type, float volume);
+  float DbFSToVolumeCached(AudioContentType type, float db);
 
   // Called from java to signal a change volume.
   void OnVolumeChange(JNIEnv* env,
@@ -43,6 +46,10 @@
                     jint type,
                     jboolean muted);
 
+  // SystemVolumeTableAccessApi implementation.
+  int GetMaxVolumeIndex(AudioContentType type) override;
+  float VolumeToDbFS(AudioContentType type, float volume) override;
+
  private:
   void InitializeOnThread();
   void SetVolumeOnThread(AudioContentType type, float level, bool from_android);
@@ -50,8 +57,18 @@
   void ReportVolumeChangeOnThread(AudioContentType type, float level);
   void ReportMuteChangeOnThread(AudioContentType type, bool muted);
 
+  // For the user of the VolumeControl, all volume values are in the volume
+  // table domain of kMedia (MUSIC). For volume types other than media,
+  // VolumeControl converts them internally into their proper volume table
+  // domains.
+  float MapIntoDifferentVolumeTableDomain(AudioContentType from_type,
+                                          AudioContentType to_type,
+                                          float level);
+
   base::android::ScopedJavaGlobalRef<jobject> j_volume_control_;
 
+  std::map<AudioContentType, std::unique_ptr<VolumeCache>> volume_cache_;
+
   base::Lock volume_lock_;
   std::map<AudioContentType, float> volumes_;
   std::map<AudioContentType, bool> muted_;
diff --git a/chromecast/media/cma/backend/desktop/volume_control_desktop.cc b/chromecast/media/cma/backend/desktop/volume_control_desktop.cc
index a64cdb6..18ac2cdb 100644
--- a/chromecast/media/cma/backend/desktop/volume_control_desktop.cc
+++ b/chromecast/media/cma/backend/desktop/volume_control_desktop.cc
@@ -4,51 +4,203 @@
 
 #include "chromecast/public/volume_control.h"
 
+#include <algorithm>
+#include <map>
 #include <string>
 #include <vector>
 
+#include "base/bind.h"
+#include "base/bind_helpers.h"
+#include "base/location.h"
+#include "base/logging.h"
+#include "base/macros.h"
+#include "base/message_loop/message_loop.h"
+#include "base/no_destructor.h"
+#include "base/numerics/ranges.h"
+#include "base/synchronization/lock.h"
+#include "base/threading/thread.h"
+
 namespace chromecast {
 namespace media {
 
+namespace {
+
+const float kMinVolumeDbfs = -60.0f;
+const float kMaxVolumeDbfs = 0.0f;
+
+class VolumeControlInternal {
+ public:
+  VolumeControlInternal() : thread_("VolumeControl") {
+    for (auto type :
+         {AudioContentType::kMedia, AudioContentType::kAlarm,
+          AudioContentType::kCommunication, AudioContentType::kOther}) {
+      volumes_[type] = 1.0f;
+      muted_[type] = false;
+    }
+
+    base::Thread::Options options;
+    options.message_loop_type = base::MessageLoop::TYPE_IO;
+    thread_.StartWithOptions(options);
+  }
+
+  ~VolumeControlInternal() = default;
+
+  void AddVolumeObserver(VolumeObserver* observer) {
+    base::AutoLock lock(observer_lock_);
+    volume_observers_.push_back(observer);
+  }
+
+  void RemoveVolumeObserver(VolumeObserver* observer) {
+    base::AutoLock lock(observer_lock_);
+    volume_observers_.erase(std::remove(volume_observers_.begin(),
+                                        volume_observers_.end(), observer),
+                            volume_observers_.end());
+  }
+
+  float GetVolume(AudioContentType type) {
+    base::AutoLock lock(volume_lock_);
+    return volumes_[type];
+  }
+
+  void SetVolume(AudioContentType type, float level) {
+    if (type == AudioContentType::kOther) {
+      NOTREACHED() << "Can't set volume for content type kOther";
+      return;
+    }
+
+    level = base::ClampToRange(level, 0.0f, 1.0f);
+    thread_.task_runner()->PostTask(
+        FROM_HERE, base::BindOnce(&VolumeControlInternal::SetVolumeOnThread,
+                                  base::Unretained(this), type, level));
+  }
+
+  bool IsMuted(AudioContentType type) {
+    base::AutoLock lock(volume_lock_);
+    return muted_[type];
+  }
+
+  void SetMuted(AudioContentType type, bool muted) {
+    if (type == AudioContentType::kOther) {
+      NOTREACHED() << "Can't set mute state for content type kOther";
+      return;
+    }
+
+    thread_.task_runner()->PostTask(
+        FROM_HERE, base::BindOnce(&VolumeControlInternal::SetMutedOnThread,
+                                  base::Unretained(this), type, muted));
+  }
+
+ private:
+  void SetVolumeOnThread(AudioContentType type, float level) {
+    DCHECK(thread_.task_runner()->BelongsToCurrentThread());
+    DCHECK(type != AudioContentType::kOther);
+
+    {
+      base::AutoLock lock(volume_lock_);
+      if (level == volumes_[type]) {
+        return;
+      }
+      volumes_[type] = level;
+    }
+
+    {
+      base::AutoLock lock(observer_lock_);
+      for (VolumeObserver* observer : volume_observers_) {
+        observer->OnVolumeChange(type, level);
+      }
+    }
+  }
+
+  void SetMutedOnThread(AudioContentType type, bool muted) {
+    DCHECK(thread_.task_runner()->BelongsToCurrentThread());
+    DCHECK(type != AudioContentType::kOther);
+
+    {
+      base::AutoLock lock(volume_lock_);
+      if (muted == muted_[type]) {
+        return;
+      }
+      muted_[type] = muted;
+    }
+
+    {
+      base::AutoLock lock(observer_lock_);
+      for (VolumeObserver* observer : volume_observers_) {
+        observer->OnMuteChange(type, muted);
+      }
+    }
+  }
+
+  base::Lock volume_lock_;
+  std::map<AudioContentType, float> volumes_;
+  std::map<AudioContentType, bool> muted_;
+
+  base::Lock observer_lock_;
+  std::vector<VolumeObserver*> volume_observers_;
+
+  base::Thread thread_;
+
+  DISALLOW_COPY_AND_ASSIGN(VolumeControlInternal);
+};
+
+VolumeControlInternal& GetVolumeControl() {
+  static base::NoDestructor<VolumeControlInternal> g_volume_control;
+  return *g_volume_control;
+}
+
+}  // namespace
+
 // static
-void VolumeControl::Initialize(const std::vector<std::string>& argv) {}
+void VolumeControl::Initialize(const std::vector<std::string>& argv) {
+  GetVolumeControl();
+}
 
 // static
 void VolumeControl::Finalize() {}
 
 // static
-void VolumeControl::AddVolumeObserver(VolumeObserver* observer) {}
+void VolumeControl::AddVolumeObserver(VolumeObserver* observer) {
+  GetVolumeControl().AddVolumeObserver(observer);
+}
 
 // static
-void VolumeControl::RemoveVolumeObserver(VolumeObserver* observer) {}
+void VolumeControl::RemoveVolumeObserver(VolumeObserver* observer) {
+  GetVolumeControl().RemoveVolumeObserver(observer);
+}
 
 // static
 float VolumeControl::GetVolume(AudioContentType type) {
-  return 1.0f;
+  return GetVolumeControl().GetVolume(type);
 }
 
 // static
-void VolumeControl::SetVolume(AudioContentType type, float level) {}
+void VolumeControl::SetVolume(AudioContentType type, float level) {
+  GetVolumeControl().SetVolume(type, level);
+}
 
 // static
 bool VolumeControl::IsMuted(AudioContentType type) {
-  return false;
+  return GetVolumeControl().IsMuted(type);
 }
 
 // static
-void VolumeControl::SetMuted(AudioContentType type, bool muted) {}
+void VolumeControl::SetMuted(AudioContentType type, bool muted) {
+  GetVolumeControl().SetMuted(type, muted);
+}
 
 // static
 void VolumeControl::SetOutputLimit(AudioContentType type, float limit) {}
 
 // static
 float VolumeControl::VolumeToDbFS(float volume) {
-  return 0.0f;
+  volume = base::ClampToRange(volume, 0.0f, 1.0f);
+  return kMinVolumeDbfs + volume * (kMaxVolumeDbfs - kMinVolumeDbfs);
 }
 
 // static
 float VolumeControl::DbFSToVolume(float db) {
-  return 0.0f;
+  db = base::ClampToRange(db, kMinVolumeDbfs, kMaxVolumeDbfs);
+  return (db - kMinVolumeDbfs) / (kMaxVolumeDbfs - kMinVolumeDbfs);
 }
 
 // static
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc
index 5b4a4cf..b11ec82 100644
--- a/chromeos/services/assistant/assistant_manager_service_impl.cc
+++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -380,32 +380,44 @@
           weak_factory_.GetWeakPtr(), speech_level));
 }
 
+void HandleOnOffChange(api::client_op::ModifySettingArgs modify_setting_args,
+                       std::function<void(bool)> on_off_handler) {
+  switch (modify_setting_args.change()) {
+    case api::client_op::ModifySettingArgs_Change_ON:
+      on_off_handler(true);
+      return;
+    case api::client_op::ModifySettingArgs_Change_OFF:
+      on_off_handler(false);
+      return;
+
+    case api::client_op::ModifySettingArgs_Change_TOGGLE:
+    case api::client_op::ModifySettingArgs_Change_INCREASE:
+    case api::client_op::ModifySettingArgs_Change_DECREASE:
+    case api::client_op::ModifySettingArgs_Change_SET:
+    case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
+      break;
+  }
+  DLOG(ERROR) << "Unsupported change operation: "
+              << modify_setting_args.change() << " for setting "
+              << modify_setting_args.setting_id();
+}
+
 void AssistantManagerServiceImpl::OnModifySettingsAction(
     const std::string& modify_setting_args_proto) {
   api::client_op::ModifySettingArgs modify_setting_args;
   modify_setting_args.ParseFromString(modify_setting_args_proto);
   DCHECK(IsSettingSupported(modify_setting_args.setting_id()));
 
-  // TODO(rcui): Add support for bluetooth, etc.
   if (modify_setting_args.setting_id() == kWiFiDeviceSettingId) {
-    switch (modify_setting_args.change()) {
-      case api::client_op::ModifySettingArgs_Change_ON:
-        service_->device_actions()->SetWifiEnabled(true);
-        return;
-      case api::client_op::ModifySettingArgs_Change_OFF:
-        service_->device_actions()->SetWifiEnabled(false);
-        return;
+    HandleOnOffChange(modify_setting_args, [this](bool enabled) {
+      this->service_->device_actions()->SetWifiEnabled(enabled);
+    });
+  }
 
-      case api::client_op::ModifySettingArgs_Change_TOGGLE:
-      case api::client_op::ModifySettingArgs_Change_INCREASE:
-      case api::client_op::ModifySettingArgs_Change_DECREASE:
-      case api::client_op::ModifySettingArgs_Change_SET:
-      case api::client_op::ModifySettingArgs_Change_UNSPECIFIED:
-        break;
-    }
-    DLOG(ERROR) << "Unsupported change operation: "
-                << modify_setting_args.change() << " for setting "
-                << modify_setting_args.setting_id();
+  if (modify_setting_args.setting_id() == kBluetoothDeviceSettingId) {
+    HandleOnOffChange(modify_setting_args, [this](bool enabled) {
+      this->service_->device_actions()->SetBluetoothEnabled(enabled);
+    });
   }
 }
 
diff --git a/chromeos/services/assistant/public/mojom/assistant.mojom b/chromeos/services/assistant/public/mojom/assistant.mojom
index ec8d533c..03057cd5 100644
--- a/chromeos/services/assistant/public/mojom/assistant.mojom
+++ b/chromeos/services/assistant/public/mojom/assistant.mojom
@@ -154,6 +154,9 @@
 interface DeviceActions {
   // Enables or disables WiFi.
   SetWifiEnabled(bool enabled);
+
+  // Enables or disables Bluetooth.
+  SetBluetoothEnabled(bool enabled);
 };
 
 // Enumeration of possible completions for an Assistant interaction.
diff --git a/chromeos/services/assistant/service_unittest.cc b/chromeos/services/assistant/service_unittest.cc
index edb452e..cfdca91c 100644
--- a/chromeos/services/assistant/service_unittest.cc
+++ b/chromeos/services/assistant/service_unittest.cc
@@ -155,6 +155,7 @@
  private:
   // mojom::DeviceActions:
   void SetWifiEnabled(bool enabled) override {}
+  void SetBluetoothEnabled(bool enabled) override {}
 
   mojo::Binding<mojom::DeviceActions> binding_;
 
diff --git a/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc b/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc
index 9a28f07..83ca4966 100644
--- a/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc
+++ b/chromeos/services/multidevice_setup/host_backend_delegate_impl.cc
@@ -5,6 +5,7 @@
 #include "chromeos/services/multidevice_setup/host_backend_delegate_impl.h"
 
 #include <algorithm>
+#include <sstream>
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
@@ -298,16 +299,23 @@
     cryptauth::RemoteDeviceRef device_for_request,
     bool attempted_to_enable,
     device_sync::mojom::NetworkRequestResult result_code) {
-  if (result_code == device_sync::mojom::NetworkRequestResult::kSuccess)
-    return;
+  bool success =
+      result_code == device_sync::mojom::NetworkRequestResult::kSuccess;
 
-  PA_LOG(WARNING) << "HostBackendDelegateImpl::"
-                  << "OnSetSoftwareFeatureStateResult(): Failure requesting "
-                  << "a host change. Device ID: "
-                  << device_for_request.GetTruncatedDeviceIdForLogs()
-                  << ", Attempted to enable: "
-                  << (attempted_to_enable ? "true" : "false")
-                  << ", Error code: " << result_code;
+  std::stringstream ss;
+  ss << "HostBackendDelegateImpl::OnSetSoftwareFeatureStateResult(): "
+     << (success ? "Completed successful" : "Failure requesting") << " "
+     << "host change. Device ID: "
+     << device_for_request.GetTruncatedDeviceIdForLogs()
+     << ", Attempted to enable: " << (attempted_to_enable ? "true" : "false");
+
+  if (success) {
+    PA_LOG(INFO) << ss.str();
+    return;
+  }
+
+  ss << ", Error code: " << result_code;
+  PA_LOG(WARNING) << ss.str();
 
   if (!HasPendingHostRequest())
     return;
diff --git a/components/OWNERS b/components/OWNERS
index f3ef29a..973887a 100644
--- a/components/OWNERS
+++ b/components/OWNERS
@@ -18,7 +18,7 @@
 per-file page_info_strings_grdp=file://chrome/browser/ui/page_info/OWNERS
 per-file password_manager_strings.grdp=file://components/password_manager/OWNERS
 per-file payments_strings.grdp=file://components/payments/OWNERS
-per-file pdf_strings.grdp=raymes@chromium.org
+per-file pdf_strings.grdp=file://pdf/OWNERS
 per-file policy_strings.grdp=file://components/policy/OWNERS
 per-file printing_component_strings.grdp=file://components/printing/OWNERS
 per-file reset_password_strings.grdp=file://components/safe_browsing/OWNERS
diff --git a/components/arc/common/app.mojom b/components/arc/common/app.mojom
index 03b91314..52114b1 100644
--- a/components/arc/common/app.mojom
+++ b/components/arc/common/app.mojom
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// Next MinVersion: 35
+// Next MinVersion: 36
 
 module arc.mojom;
 
@@ -22,6 +22,7 @@
   string activity;
   [MinVersion=2] bool sticky;  // true if the app cannot be uninstalled
   [MinVersion=7] bool notifications_enabled;
+  [MinVersion=35] bool suspended;
 };
 
 // Describes ARC package.
diff --git a/components/autofill_strings.grdp b/components/autofill_strings.grdp
index c2aaeaf..946d60d 100644
--- a/components/autofill_strings.grdp
+++ b/components/autofill_strings.grdp
@@ -285,7 +285,7 @@
   <message name="IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_ABBR" desc="Abbreviated label for credit card expiration date. [CHAR-LIMIT=32]">
     Exp: <ph name="EXPIRATION_MONTH">$1<ex>06</ex></ph>/<ph name="EXPIRATION_YEAR">$2<ex>17</ex></ph>
   </message>
-  <message name="IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_ABBR_V2" desc="Abbreviated label for credit card expiration date. This will be presented as either YY/MM or MM/YY depending on how credit card expiration dates are more commonly presented in the locale. [CHAR-LIMIT=32]" meaning="Label for credit card expiration date for the save card dialog.">
+  <message name="IDS_AUTOFILL_CREDIT_CARD_EXPIRATION_DATE_ABBR_V2" desc="Abbreviated label for credit card expiration date. Please translate the date as either YY/MM or MM/YY depending on how credit card expiration dates are more commonly presented in your locale. [CHAR-LIMIT=32]" meaning="Label for credit card expiration date for the save card dialog.">
     <ph name="EXPIRATION_MONTH">$1<ex>06</ex></ph>/<ph name="EXPIRATION_YEAR">$2<ex>17</ex></ph>
   </message>
 
diff --git a/components/constrained_window/native_web_contents_modal_dialog_manager_views.cc b/components/constrained_window/native_web_contents_modal_dialog_manager_views.cc
index cf4b3274..2056cf3 100644
--- a/components/constrained_window/native_web_contents_modal_dialog_manager_views.cc
+++ b/components/constrained_window/native_web_contents_modal_dialog_manager_views.cc
@@ -106,6 +106,13 @@
   // shadows are below the constrained dialog in z-order when we do this.
   shown_widgets_.insert(widget);
 #endif
+
+#if !defined(USE_AURA)
+  // Don't re-animate when switching tabs. Note this is done on Mac only after
+  // the initial ShowWidget() call above, and then "sticks" for later calls.
+  // TODO(tapted): Consolidate this codepath with Aura.
+  widget->SetVisibilityAnimationTransition(views::Widget::ANIMATE_HIDE);
+#endif
 }
 
 void NativeWebContentsModalDialogManagerViews::Hide() {
diff --git a/components/cronet/stale_host_resolver.cc b/components/cronet/stale_host_resolver.cc
index 08ee692..57421db 100644
--- a/components/cronet/stale_host_resolver.cc
+++ b/components/cronet/stale_host_resolver.cc
@@ -381,6 +381,14 @@
 
 StaleHostResolver::~StaleHostResolver() {}
 
+std::unique_ptr<net::HostResolver::ResolveHostRequest>
+StaleHostResolver::CreateRequest(const net::HostPortPair& host,
+                                 const net::NetLogWithSource& net_log) {
+  // TODO(crbug.com/821021): Implement.
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 int StaleHostResolver::Resolve(const RequestInfo& info,
                                net::RequestPriority priority,
                                net::AddressList* addresses,
diff --git a/components/cronet/stale_host_resolver.h b/components/cronet/stale_host_resolver.h
index 980569f3..23619844 100644
--- a/components/cronet/stale_host_resolver.h
+++ b/components/cronet/stale_host_resolver.h
@@ -5,6 +5,7 @@
 #ifndef COMPONENTS_CRONET_STALE_HOST_RESOLVER_H_
 #define COMPONENTS_CRONET_STALE_HOST_RESOLVER_H_
 
+#include <memory>
 #include <unordered_set>
 
 #include "base/time/default_tick_clock.h"
@@ -61,6 +62,10 @@
 
   // HostResolver implementation:
 
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const net::HostPortPair& host,
+      const net::NetLogWithSource& net_log) override;
+
   // Resolves as a regular HostResolver, but if stale data is available and
   // usable (according to the options passed to the constructor), and fresh data
   // is not returned before the specified delay, returns the stale data instead.
diff --git a/components/data_reduction_proxy/core/browser/BUILD.gn b/components/data_reduction_proxy/core/browser/BUILD.gn
index 898be5c..5cd2c3e4 100644
--- a/components/data_reduction_proxy/core/browser/BUILD.gn
+++ b/components/data_reduction_proxy/core/browser/BUILD.gn
@@ -180,7 +180,6 @@
     "data_reduction_proxy_config_unittest.cc",
     "data_reduction_proxy_configurator_unittest.cc",
     "data_reduction_proxy_data_unittest.cc",
-    "data_reduction_proxy_data_use_observer_unittest.cc",
     "data_reduction_proxy_delegate_unittest.cc",
     "data_reduction_proxy_interceptor_unittest.cc",
     "data_reduction_proxy_io_data_unittest.cc",
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc
index 43fabeb..349658d 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.cc
@@ -142,41 +142,6 @@
 
 void DataReductionProxyDataUseObserver::OnPageDidFinishLoad(
     data_use_measurement::DataUse* data_use) {
-  // This is good place to update data savings based on the overall page
-  // load. If we waited until the |OnPageLoadConcluded| callback, we would miss
-  // cases where the page loaded but the user doesn't navigate away before
-  // Android kills chrome.
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  previews::PreviewsUserData* previews_user_data =
-      reinterpret_cast<previews::PreviewsUserData*>(
-          data_use->GetUserData(kDataUsePreviewsUserDataKey));
-  if (previews_user_data) {
-    // Report estimated data savings for NOSCRIPT if applicable.
-    if (previews_user_data->committed_previews_type() ==
-        previews::PreviewsType::NOSCRIPT) {
-      int inflation_percent =
-          previews::params::NoScriptPreviewsInflationPercent();
-      int inflation_bytes = previews::params::NoScriptPreviewsInflationBytes();
-      if (previews_user_data->data_savings_inflation_percent() != 0) {
-        // Use specific inflation percent rather than default.
-        inflation_percent =
-            previews_user_data->data_savings_inflation_percent();
-        inflation_bytes = 0;
-      }
-      int total_inflated_bytes =
-          (data_use->total_bytes_received() * inflation_percent) / 100 +
-          inflation_bytes;
-      // Report for overall usage.
-      DCHECK(data_use->url().SchemeIs(url::kHttpsScheme));
-      data_reduction_proxy_io_data_->UpdateContentLengths(
-          0, total_inflated_bytes, data_reduction_proxy_io_data_->IsEnabled(),
-          HTTPS, std::string(), true,
-          data_use_measurement::DataUseUserData::OTHER, 0);
-      // Report for host usage.
-      data_reduction_proxy_io_data_->UpdateDataUseForHost(
-          0, total_inflated_bytes, data_use->url().HostNoBrackets());
-    }
-  }
 }
 
 const void*
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer_unittest.cc
deleted file mode 100644
index 37a3c5b..0000000
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer_unittest.cc
+++ /dev/null
@@ -1,169 +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 "components/data_reduction_proxy/core/browser/data_reduction_proxy_data_use_observer.h"
-
-#include <map>
-
-#include "base/message_loop/message_loop.h"
-#include "base/run_loop.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/test/scoped_feature_list.h"
-#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h"
-#include "components/data_use_measurement/core/data_use.h"
-#include "components/data_use_measurement/core/data_use_ascriber.h"
-#include "components/data_use_measurement/core/data_use_recorder.h"
-#include "components/data_use_measurement/core/url_request_classifier.h"
-#include "components/previews/core/previews_experiments.h"
-#include "components/previews/core/previews_features.h"
-#include "components/previews/core/previews_user_data.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::Mock;
-using ::testing::Return;
-using ::testing::_;
-
-namespace {
-
-class MockDataUseAscriber : public data_use_measurement::DataUseAscriber {
- public:
-  MOCK_METHOD1(
-      GetOrCreateDataUseRecorder,
-      data_use_measurement::DataUseRecorder*(net::URLRequest* request));
-  MOCK_METHOD1(
-      GetDataUseRecorder,
-      data_use_measurement::DataUseRecorder*(const net::URLRequest& request));
-  MOCK_CONST_METHOD0(
-      CreateURLRequestClassifier,
-      std::unique_ptr<data_use_measurement::URLRequestClassifier>());
-};
-
-const int kInflationPercent = 50;
-const int kInflationBytes = 1000;
-
-}  // namespace
-
-namespace data_reduction_proxy {
-
-class DataReductionProxyDataUseObserverTest : public testing::Test {
- public:
-  DataReductionProxyDataUseObserverTest() {}
-
-  void SetUp() override {
-    std::map<std::string, std::string> parameters = {
-        {"NoScriptInflationPercent", base::IntToString(kInflationPercent)},
-        {"NoScriptInflationBytes", base::IntToString(kInflationBytes)}};
-    scoped_feature_list_.InitAndEnableFeatureWithParameters(
-        previews::features::kNoScriptPreviews, parameters);
-    test_context_ = DataReductionProxyTestContext::Builder()
-                        .WithConfigClient()
-                        .WithMockDataReductionProxyService()
-                        .Build();
-    ascriber_ = std::make_unique<MockDataUseAscriber>();
-    data_use_observer_ = std::make_unique<DataReductionProxyDataUseObserver>(
-        test_context_->io_data(), ascriber_.get());
-  }
-
-  MockDataReductionProxyService* mock_drp_service() {
-    return test_context_->mock_data_reduction_proxy_service();
-  }
-
-  void SetPreviewsUserData(data_use_measurement::DataUse* data_use,
-                           previews::PreviewsUserData* previews_user_data) {
-    data_use->SetUserData(
-        data_use_observer_->GetDataUsePreviewsUserDataKeyForTesting(),
-        previews_user_data->DeepCopy());
-  }
-
-  void DidFinishLoad(data_use_measurement::DataUse* data_use) {
-    data_use_observer_->OnPageDidFinishLoad(data_use);
-  }
-
-  void RunUntilIdle() { test_context_->RunUntilIdle(); }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-  base::MessageLoopForIO message_loop_;
-  std::unique_ptr<DataReductionProxyTestContext> test_context_;
-  std::unique_ptr<MockDataUseAscriber> ascriber_;
-  std::unique_ptr<DataReductionProxyDataUseObserver> data_use_observer_;
-
-  DISALLOW_COPY_AND_ASSIGN(DataReductionProxyDataUseObserverTest);
-};
-
-TEST_F(DataReductionProxyDataUseObserverTest,
-       OnPageDidFinishLoadNotNoScriptPreview) {
-  std::unique_ptr<data_use_measurement::DataUse> data_use =
-      std::make_unique<data_use_measurement::DataUse>(
-          data_use_measurement::DataUse::TrafficType::USER_TRAFFIC);
-  data_use->IncrementTotalBytes(500000, 300);
-  data_use->set_url(GURL("https://testsite.com"));
-
-  // Verify with no committed preview.
-  previews::PreviewsUserData previews_user_data(3 /* page_id */);
-  SetPreviewsUserData(data_use.get(), &previews_user_data);
-  EXPECT_CALL(*mock_drp_service(), UpdateContentLengths(_, _, _, _, _, _, _, _))
-      .Times(0);
-  EXPECT_CALL(*mock_drp_service(), UpdateDataUseForHost(_, _, _)).Times(0);
-  DidFinishLoad(data_use.get());
-  RunUntilIdle();
-  Mock::VerifyAndClearExpectations(mock_drp_service());
-
-  // Now verify with LOFI as committed preview.
-  previews_user_data.SetCommittedPreviewsType(previews::PreviewsType::LOFI);
-  SetPreviewsUserData(data_use.get(), &previews_user_data);
-  EXPECT_CALL(*mock_drp_service(), UpdateContentLengths(_, _, _, _, _, _, _, _))
-      .Times(0);
-  EXPECT_CALL(*mock_drp_service(), UpdateDataUseForHost(_, _, _)).Times(0);
-  DidFinishLoad(data_use.get());
-  RunUntilIdle();
-}
-
-TEST_F(DataReductionProxyDataUseObserverTest,
-       OnPageDidFinishLoadHasCommittedNoScriptPreview) {
-  std::unique_ptr<data_use_measurement::DataUse> data_use =
-      std::make_unique<data_use_measurement::DataUse>(
-          data_use_measurement::DataUse::TrafficType::USER_TRAFFIC);
-  data_use->IncrementTotalBytes(500000, 300);
-  data_use->set_url(GURL("https://testsite.com"));
-  previews::PreviewsUserData previews_user_data(7 /* page_id */);
-  previews_user_data.SetCommittedPreviewsType(previews::PreviewsType::NOSCRIPT);
-  SetPreviewsUserData(data_use.get(), &previews_user_data);
-  int inflation_value = 500000 * kInflationPercent / 100 + kInflationBytes;
-  EXPECT_EQ(251000, inflation_value);
-  EXPECT_CALL(*mock_drp_service(),
-              UpdateContentLengths(0, inflation_value, true, _, _, _, _, _))
-      .Times(1);
-  EXPECT_CALL(*mock_drp_service(),
-              UpdateDataUseForHost(0, inflation_value, "testsite.com"))
-      .Times(1);
-  DidFinishLoad(data_use.get());
-  RunUntilIdle();
-}
-
-TEST_F(DataReductionProxyDataUseObserverTest,
-       OnPageDidFinishLoadHasCommittedNoScriptPreviewWithInflationPercent) {
-  std::unique_ptr<data_use_measurement::DataUse> data_use =
-      std::make_unique<data_use_measurement::DataUse>(
-          data_use_measurement::DataUse::TrafficType::USER_TRAFFIC);
-  data_use->IncrementTotalBytes(500000, 300);
-  data_use->set_url(GURL("https://testsite.com"));
-  previews::PreviewsUserData previews_user_data(7 /* page_id */);
-  previews_user_data.SetDataSavingsInflationPercent(80);
-  previews_user_data.SetCommittedPreviewsType(previews::PreviewsType::NOSCRIPT);
-  SetPreviewsUserData(data_use.get(), &previews_user_data);
-  int inflation_value = 500000 * 80 / 100;
-  EXPECT_EQ(400000, inflation_value);
-  EXPECT_CALL(*mock_drp_service(),
-              UpdateContentLengths(0, inflation_value, true, _, _, _, _, _))
-      .Times(1);
-  EXPECT_CALL(*mock_drp_service(),
-              UpdateDataUseForHost(0, inflation_value, "testsite.com"))
-      .Times(1);
-  DidFinishLoad(data_use.get());
-  RunUntilIdle();
-}
-
-}  // namespace data_reduction_proxy
diff --git a/components/exo/wayland/server.cc b/components/exo/wayland/server.cc
index ef7e5a2..419c059 100644
--- a/components/exo/wayland/server.cc
+++ b/components/exo/wayland/server.cc
@@ -1801,7 +1801,7 @@
 void xdg_toplevel_v6_set_app_id(wl_client* client,
                                 wl_resource* resource,
                                 const char* app_id) {
-  NOTIMPLEMENTED();
+  GetUserDataAs<WaylandToplevel>(resource)->SetApplicationId(app_id);
 }
 
 void xdg_toplevel_v6_show_window_menu(wl_client* client,
diff --git a/components/gcm_driver/account_tracker_unittest.cc b/components/gcm_driver/account_tracker_unittest.cc
index 21babb7e..c8613ea 100644
--- a/components/gcm_driver/account_tracker_unittest.cc
+++ b/components/gcm_driver/account_tracker_unittest.cc
@@ -433,10 +433,11 @@
   NotifyTokenAvailable(kPrimaryAccountKey);
   EXPECT_TRUE(observer()->CheckEvents());
 
+  NotifyTokenRevoked(kPrimaryAccountKey);
+  EXPECT_TRUE(observer()->CheckEvents());
+
   NotifyLogin(kPrimaryAccountKey);
-  ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
-  EXPECT_TRUE(
-      observer()->CheckEvents(TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
+  EXPECT_TRUE(observer()->CheckEvents());
 }
 #endif
 
diff --git a/components/history/core/browser/BUILD.gn b/components/history/core/browser/BUILD.gn
index c461979..b0d5360 100644
--- a/components/history/core/browser/BUILD.gn
+++ b/components/history/core/browser/BUILD.gn
@@ -237,6 +237,7 @@
     "//sql",
     "//sql:test_support",
     "//testing/gtest",
+    "//third_party/sqlite",
     "//ui/gfx",
     "//ui/gfx:test_support",
     "//url",
diff --git a/components/password_manager/core/browser/BUILD.gn b/components/password_manager/core/browser/BUILD.gn
index 8d3a5057..7ebff07 100644
--- a/components/password_manager/core/browser/BUILD.gn
+++ b/components/password_manager/core/browser/BUILD.gn
@@ -446,6 +446,7 @@
     "//sql:test_support",
     "//testing/gmock",
     "//testing/gtest",
+    "//third_party/sqlite",
     "//ui/base",
     "//url",
   ]
diff --git a/components/policy/resources/policy_templates_am.xtb b/components/policy/resources/policy_templates_am.xtb
index 6ef5ebd..c5c6dae 100644
--- a/components/policy/resources/policy_templates_am.xtb
+++ b/components/policy/resources/policy_templates_am.xtb
@@ -235,6 +235,13 @@
       አለበለዚያ ሳንካ ካለበት አገልጋይ ጋር ተኳሃኝነት መጠበቅ የሚያስፈልግ ከሆነ ይህ መመሪያ ወደ «tls1.1» ሊቀናበር ይችላል። ይህ ጊዜያዊ መፍትሔ ነው እንጂ አገልጋዩ በአስቸኳይ መስተካከል አለበት።</translation>
 <translation id="1864269674877167562">ይህ መመሪያ ወደ ባዶ ሕብረቁምፊ ከተዋቀረ ወይም ካልተዋቀረ <ph name="PRODUCT_OS_NAME" /> በተጠቃሚ መግቢያ ፍሰት ጊዜ የራስ-ሙላ አማራጭን አያሳይም።
       ይህ መመሪያ የጎራ ስምን ወደሚወክል ሕብረቁምፊ ከተዋቀረ <ph name="PRODUCT_OS_NAME" /> ተጠቃሚው ያለጎራ ስም ቅጥያ በተጠቃሚ ስሙ ብቻ እንዲተይብ የሚፈቅድለት በተጠቃሚ መግቢያ ፍሰት ጊዜ የራስ-ሙላ አማራጭን ያሳያል። ተጠቃሚው ይህን የጎራ ስም ቅጥያ ተክቶ ለመፃፍ ይችላል።</translation>
+<translation id="1864382791685519617">በ<ph name="PRODUCT_NAME" /> ውስጥ የአውታረ መረብ ግምትን ያነቃል እና ተጠቃሚዎች ይህንን ቅንብር እንዳይለውጡ ይከላከላል።
+
+      ይህ የዲኤንኤስ ቅድሚያ ማስመጣትን፣ የድረ-ገጾች TCP እና SSL ቅድመ- ግንኙነትን እና ቅድመ-ምስል ስራን ይቆጣጠራል።
+
+      ይህን መመሪያ ካዋቀሩት ተጠቃሚዎች በ<ph name="PRODUCT_NAME" /> ውስጥ ይህን ቅንብር መለወጥ ወይም መሻር አይችሉም።
+
+      ይህ መመሪያ እንዳልተዋቀረ ከተተወ የአውታረ መረብ ግምት ይነቃል፣ ሆኖም ግን ተጠቃሚው ሊለውጠው ይችላል።</translation>
 <translation id="1865417998205858223">የቁልፍ ፍቃዶች</translation>
 <translation id="186719019195685253">በኤሲ ኃይል እየተኬደ እያለ ለረጅም ጊዜ ስራ መፍታቱ ላይ ሲደረስ የሚወሰድ እርምጃ</translation>
 <translation id="187819629719252111"><ph name="PRODUCT_NAME" /> የፋይል መምረጫ መገናኛዎችን እንዲያሳይ በመፍቀድ በማሽኑ ላይ ያሉ የአካባቢያዊ ፋይሎች መዳረሻ እንዲኖር ያስችላል።
@@ -706,6 +713,7 @@
       ይህ መመሪያ ካልተዋቀረ <ph name="PRINTERS_ALLOW_ALL" /> እንደሆነ ይገመታል።
       </translation>
 <translation id="2908277604670530363">ከተኪ አገልጋዩ ጋር ያለው ከፍተኛ የተጓዳኝ ግንኙነቶች ብዛት</translation>
+<translation id="2951386431828317490">ለመገለጫዎች ራስ-ሙላን ያንቁ</translation>
 <translation id="2956777931324644324">ይህ መመሪያ ከ <ph name="PRODUCT_NAME" /> ስሪት 36 ጀምሮ አገልግሎት መስጠት አቁሟል።
 
 የTLS ጎራ ጋር የተሳሰረው የምስክር ወረቀቶች ቅጥያ መንቃት እንዳለበት ይገልጻል።
@@ -714,6 +722,7 @@
 <translation id="2957506574938329824">ምንም ዓይነት ጣቢያ በድር ብሉቱዝ ኤፒአይ በኩል የብሉቱዝ መሣሪያዎች መዳረሻን እንዲጠይቅ አትፍቀድ</translation>
 <translation id="2957513448235202597">የመለያ አይነት ለ<ph name="HTTP_NEGOTIATE" /> ማረጋገጫ</translation>
 <translation id="2959898425599642200">የተኪ ማለፊያ ደንቦች</translation>
+<translation id="2960128438010718932">አዲስ ዝማኔን ለመተግበር የማቅረቢያ መርሐግብር</translation>
 <translation id="2960691910306063964">ፒን የሌለው ማረጋገጫ ለርቀት መዳረሻ አስተናጋጆች ያንቁ ወይም ያሰናክሉ</translation>
 <translation id="2976002782221275500">በባትሪ ኃይል ላይ ሲሆን ሲሞላ ማያ ገጹ የሚፈዝበት የተጠቃሚ ግብዓት የሌለበት የጊዜ ርዝመት ይገልጻል።
 
@@ -753,6 +762,7 @@
       ይህ መመሪያ ተዋቀረ አልተዋቀረ ወይም ይህ እንዴትም ይዋቀር የWPAD ማትቢያ ውቅረቱ በተጠቃሚዎች ሊለወጥ አይችልም።</translation>
 <translation id="3072045631333522102">በችርቻሮ ሁነታ ላይ የመግቢያ ማያው ላይ ስራ ላይ የሚውለው የማያ ገጽ ማዳኛ</translation>
 <translation id="3072847235228302527">የመሣሪያ-አካባቢያዊ መለያ አገልግሎት ውል ያዋቅሩ</translation>
+<translation id="3077183141551274418">የትር የዕድሜ ዑደትን ያነቃል ወይም ያሰናክላል</translation>
 <translation id="3086995894968271156">በ<ph name="PRODUCT_NAME" /> ውስጥ የCast መቀበያው ያዋቅሩ።</translation>
 <translation id="3088796212846734853">ምስሎችን እንዲያሳዩ የተፈቀደላቸው ጣቢያዎችን የሚገልጹ የዩአርኤል ስርዓተ ጥለቶችን እንዲያዘጋጁ ያስችልዎታል።
 
@@ -1328,6 +1338,11 @@
       እነዚህ ጥቆማዎች ከGoogle አገልጋዮች ላይ ከርቀት ይወሰዳሉ።
 
       ይህ ቅንብር ወደ ሀሰት ከተቀናበረ፣ ጥቆማዎች አይወሰዱም ወይም አይታዩም።</translation>
+<translation id="4788252609789586009">የ<ph name="PRODUCT_NAME" /> ራስ-ሙላ ባህሪን ያነቃል፣ እና ተጠቃሚዎች ከዚህ ቀደም የተከማቸ መረጃን በመጠቀም የክሬዲት ካርድ መረጃን በድር ቅጾች ላይ በራስ-እንዲያጠናቅቁ ያስችላቸዋል።
+
+      ይህ ቅንብር ከተሰናከለ ራስ-ሙላ በጭራሽ የክሬዲት ካርድ መረጃን አይጠቁምም ወይም አይሞላም፣ እንዲሁም ተጠቃሚው ድሩን እያሰሰ ሳለ ሊያስገባ የሚችለውን የክሬድቲ ካርድ መረጃን አያስቀምጥም።
+
+      ይህን ቅንብር ከነቃ ወይም እሴት ከሌለው ተጠቃሚው በዩአይ ውስጥ የክሬዲት ካርዶች ራስ-ሙላን መቆጣጠር ይችላል።</translation>
 <translation id="4791031774429044540">የትልቅ ጠቋሚ ተደራሽነት ባህሪውን ያንቁ።
 
           ይህ መመሪያ ወደ እውነት ከተዋቀረ ትልቅ ጠቋሚው ሁልጊዜ ይነቃል።
@@ -1468,6 +1483,11 @@
       ይህ መመሪያ ወደ እውነት ከተዋቀረ <ph name="PRODUCT_OS_NAME" /> መሣሪያው ወደ የገንቢ ሁነታ እንዳይጀምር ይከለክለዋል። ስርዓቱ መጀመር አሻፈረኝ ይልና የገንቢ ማብሪያ/ማጥፊያ ሲበራ የስህተት ማያ ገጽ ያሳያል።
 
       ይህ መመሪያ ካልተዋቀረ ከተተወ ወይም ወደ ሐሰት ከተዋቀረ የገንቢ ሁነታ ለመሣሪያው የሚገኝ እንደሆነ ይቆያል።</translation>
+<translation id="520403427390290017">የትሩ ዑደት ባህሪ መጀመሪያ በማፈን፣ ከዚያ በማሰርና በስተመጨረሻም በማስወገድ ሲፒዩ እና ዞሮ ዞሮ ለረጅም ጊዜ ስራ ላይ ያልዋሉ በማሄድ ላይ ካሉ ትሮች ጋር የተጎዳኘ ማህደረ ትውስታን መልሶ ይወስዳል።
+
+      ይህ መመሪያ ወደ ሐሰት ከተዋቀረ የትር ዑደቶች ይሰናከላሉ፣ እና ሁሉም ትሮች በመደበኛ ሁኔታ መሥራታቸውን እንዲቀጥሉ ይደረጋሉ።
+
+      ይህ መመሪያ ወደ እውነት ከተዋቀረ ወይም ሳይገለጽ ከተተወ የትር ዑደቶች ይነቃሉ።</translation>
 <translation id="5208240613060747912">የትኛዎቹ ጣቢያዎች ማሳወቂያዎችን እንዲያሳዩ የማይፈቀድላቸው ጣቢያዎች የሚገልጽ የዩ አር ኤል ስርዓተ ጥለቶች ዝርዝር እንዲያስቀምጡ ያስችልዎታል።
 
           ይህ መመሪያ እንዳልተዋቀረ ከተተወ ከተዋቀረ የ«DefaultNotificationsSetting» መመሪያ፣ አለበለዚያ ደግሞ የተጠቃሚው የግል ውቅር ሁለንተናዊ ነባሪ ዋጋ ስራ ላይ ይውላል።</translation>
@@ -1515,6 +1535,11 @@
 
           ይህ መመሪያ ወደ ሐሰት ከተዋቀረ ተጠቃሚዎች ይዘትን ወደ መሣሪያቸው cast ማድረግ አይችሉም። ይህ መመሪያ ወደ እውነት ከተዋቀረ ተጠቃሚዎች ይዘትን cast እንዲያደርጉ ይፈቀድላቸዋል። ይህ መመሪያ ካልተዋቀረ ተጠቃሚዎች ይዘትን ወደተመዘገቡ የChrome OS መሣሪያዎች cast እንዲያደርጉ አይፈቀድላቸውም፣ ነገር ግን ወዳልተመዘገቡ መሣሪያዎች cast ማድረግ ይችላሉ።</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> የሚከተሉትን የይዘት አይነቶች እንዲቆጣጠር ይፍቀዱለት</translation>
+<translation id="5360146044009867539">የ<ph name="PRODUCT_NAME" /> ራስ-ሙላ ባህሪን ያነቃል፣ እና ተጠቃሚዎች ከዚህ ቀደም የተከማቸ መረጃን በመጠቀም የመገለጫ እና የአድራሻ መረጃን በድር ቅጾች ላይ በራስ-እንዲያጠናቅቁ ያስችላቸዋል።
+
+      ይህ ቅንብር ከተሰናከለ ራስ-ሙላ በጭራሽ የአድራሻ መረጃን አይጠቁምም ወይም አይሞላም፣ እንዲሁም ተጠቃሚው ድሩን እያሰሰ ሳለ ሊያስገባ የሚችለውን የክሬድቲ ካርድ መረጃን አያስቀምጥም።
+
+      ይህን ቅንብር ከነቃ ወይም እሴት ከሌለው ተጠቃሚው በዩአይ ውስጥ ለአድራሻ ራስ-ሙላን መቆጣጠር ይችላል።</translation>
 <translation id="5365946944967967336">መነሻ አዝራር በመሳሪያ አሞሌው ላይ አሳይ</translation>
 <translation id="5366745336748853475">ጣቢያው የእውቅና ማረጋገጫ የሚጠይቅ ከሆነ በራስ-ሰር የደንበኛ እውቅና ማረጋገጫ ሲመረጥላቸው በSAML ፍሰተ ላይ አስተናጋጅ በሆነው ክፈፍ ውስጥ በተመረጠው በመለያ መግቢያ ማያ ገጽ ላይ የሚገቡ የዩአርኤል ሥርዓተ ጥለቶችን ዝርዝር እንዲጠቅሱ ያስችልዎታል።
 
@@ -2231,6 +2256,15 @@
 
 ይህ ቅንብር ከተሰናከለ፣ ይህ ባህሪይ እይገኝም።</translation>
 <translation id="7275334191706090484">የተዳደሩ እልባቶች</translation>
+<translation id="729492886167634859">ይህ መመሪያ ዝማኔው መጀመሪያ ከተገኘበት ቀን ጀምሮ በየሳምንቱ የሚዘመኑ በOU ውስጥ ያሉ የ<ph name="PRODUCT_OS_NAME" /> መሣሪያዎች ክፍልፋይ የሚገልጽ የመቶኛዎች ዝርዝርን ይገልጻል። መሣሪያው ዝማኔዎች ካሉ እስኪፈትሽ ድረስ ዝማኔው ከታተመ በኋላ ጊዜ ሊወስድ ስለሚችል የግኝት ጊዜው ዝማኔው ከታተመበት ጊዜ በኋላ ነው።
+
+      በዝርዝሩ ውስጥ ያለው n-ኛ እሴት ዝማኔው ከተገኘ በኋላ እስከ n-ኛ ሳምንት ውስጥ ባለው ጊዜ ውስጥ ወደ ቀጣዩ ስሪት አዘምነው መጨረስ ያለባቸው የመሣሪያዎች መቶኛ እንደሆነ ተደርጎ ስራ ላይ ይውላል። ለምሳሌ፣ አንድ ዝማኔ ዛሬ ቢገኝ በዝርዝሩ ውስጥ ያለው የመጀመሪያው እሴት ከዛሬ ጀምሮ በየሳምንቱ ወደዚያ ስሪት መዘመን ያለባቸውን በOU ውስጥ ያሉ መሣሪያዎች መቶኛን ይገልጻል። ሁለተኛው እሴት ከዛሬ ጀምሮ በ2 ሳምንታት ውስጥ ወደዚያ ስሪት መዘመን ያለባቸውን በOU ውስጥ ያሉ መሣሪያዎችን መቶኛን ይገልጻል፣ ወዘተ ማለት ነው።
+
+      ለዚህ መመሪያ የተገለጸ እሴት ካለ ዝማኔዎች የ<ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> መመሪያውን ችላ ይሉትና በምትኩ ይህን መመሪያ ይከተሉታል።
+
+      ይህ ዝርዝር ባዶ ከሆነ ምንም የታቀደ ልቀት አይኖርም፣ እንዲሁም ዝማኔዎች በሌሎች የመሣሪያው መመሪያዎች መሠረት ይተገበራሉ።
+
+      ይህ መመሪያ ለሰርጥ መቀያየሮችን አይመለከተውም።</translation>
 <translation id="7295019613773647480">ክትትል የሚደረግባቸው ተጠቃሚዎችን ያንቁ</translation>
 <translation id="7301543427086558500">የፍለጋ ቃላትን ከፍለጋ ፕሮግራሙ ለማውጣት ሊያገለግሉ የተለዋጭ ዩ አር ኤሎች ዝርዝርን ይገልጻል። ዩ አር ኤሎቹ ሕብረቁምፊው <ph name="SEARCH_TERM_MARKER" /> ሊኖራቸው ይገባል፣ ይህም የፍለጋ ቃላቱን ለማውጣት ሊያገለግል ይችላል።
 
@@ -2697,6 +2731,12 @@
 
           የምሳሌ ስርዓተ ጥለቶችን ለማግኘት https://www.chromium.org/developers/how-tos/chrome-frame-getting-started ን ይመልከቱ።</translation>
 <translation id="8493645415242333585">የአሰሳ ታሪክ ማስቀመጥን ያሰናክሉ</translation>
+<translation id="8498293625012059298">የይለፍ ቃል ለውጥ ዩአርኤሉን (የኤችቲቲፒ እና የኤችቲቲፒኤስ ዕቅዶች ብቻ) ያዋቅሩ። የይለፍ ቃል ጥበቃ አገልግሎት ተጠቃሚዎች በአሳሹ ውስጥ ማስጠንቀቂያ ካዩ በኋላ የይለፍ ቃላቸውን እንዲቀይሩ ወደዚህ ዩአርኤል ይልካቸዋል።
+      <ph name="PRODUCT_NAME" /> በዚህ የይለፍ ቃል ለውጥ ገጽ ላይ አዲሱን የይለፍ ቃል ጣት አሻራን በትክክል መያዝ እንዲችል እባክዎ የይለፍ ቃል ለውጥ ገጽዎ በhttps://www.chromium.org/developers/design-documents/create-amazing-password-forms ላይ ያሉትን መመሪያዎች የሚከተል መሆኑን ያረጋግጡ።
+
+      ይህ ቅንብር ከነቃ የይለፍ ቃል ጥበቃ አገልግሎቱ ተጠቃሚዎች በአሳሹ ውስጥ ማስጠንቀቂያ ካዩ በኋላ የይለፍ ቃላቸውን እንዲቀይሩ ወደዚህ ዩአርኤል ይልካቸዋል።
+      ይህ ቅንብር ከተሰናከለ ወይም ካልተዋቀረ የይለፍ ቃል ጥበቃ አገልግሎቱ ተጠቃሚዎች የይለፍ ቃላቸውን እንዲቀይሩ ወደ https://myaccounts.google.com ይልካቸዋል።
+      ይህ መመሪያ ከ<ph name="MS_AD_NAME" /> ጎራ ጋር ባልተቀላቀሉ የWindows አብነቶች ላይ አይገኝም።</translation>
 <translation id="8499172469244085141">ነባሪ ቅንብሮች (ተጠቃሚዎች ሊሽሯቸው የሚችሉት)</translation>
 <translation id="8507835864888987300">ለራስ-ዝማኔዎች የዒላማ ስሪቱን ያቀናብራል።
 
@@ -2750,6 +2790,14 @@
       ይህ መመሪያ ወደ ሐሰት ሲቀየር አዲስ በሚጀመሩ ምናባዊ ማሽኖች ላይ ይተገበራል፣ ነገር ግን አስቀድመው እያሄዱ ያሉ ምናባዊ ማሽኖችን አይዘጋም።
       ይህ መመሪያ በሚተዳደር መሣሪያ ላይ ካልተዋቀረ መሣሪያው ምናባዊ ማሽኖችን እንዲያሄድ አይፈቀድለትም።
       የማይተዳደሩ መሣሪያዎች ምናባዊ ማሽኖችን እንዲያሄዱ ይፈቀድላቸዋል።</translation>
+<translation id="8669669491594628013">የይለፍ ቃል ጥበቃ ማስጠንቀቂያ ቅስቀሳን እንዲቆጣጠሩ ያስችልዎታል። ተጠቃሚዎች የተጠበቀ ይለፍ ቃላቸውን አጠራጣሪ ሊሆኑ በሚችሉ ጣቢያዎች ላይ ሲጠቀሙ የይለፍ ቃል ጥበቃ ተጠቃሚዎቹን ያነቃቸዋል።
+
+      የትኛው የይለፍ ቃል እንደሚጠበቅ ለማዋቀር የ«PasswordProtectionLoginURLs» እና «PasswordProtectionChangePasswordURL» መመሪያዎችን መጠቀም ይችላሉ።
+
+      ይህ መመሪያ ወደ «PasswordProtectionWarningOff» ከተዋቀረ ምንም የይለፍ ቃል ጥበቃ ማስጠንቀቂያ አይታይም።
+      ይህ መመሪያ ወደ «PasswordProtectionWarningOnPasswordReuse» ከተዋቀረ ተጠቃሚው የተጠበቀው ይለፍ ቃላቸውን በተፈቀደላቸው ዝርዝር ውስጥ ባልሆነ ጣቢያ ላይ ዳግም ሲጠቀሙበት የይለፍ ቃል ጥበቃ ማስጠንቀቂያው ይታያል።
+      ይህ መመሪያ ወደ «PasswordProtectionWarningOnPhishingReuse» ከተዋቀረ ተጠቃሚው የተጠበቀው የይለፍ ቃላቸውን በማስገሪያ ጣቢያ ላይ ዳግም ሲጠቀሙበት የይለፍ ቃል ጥበቃ ማስጠንቀቂያው ይታያል።
+      ይህ መመሪያ እንዳልተዋቀረ ከተተወ ተጠቃሚው የተጠበቀው የይለፍ ቃላቸውን በማስገሪያ ጣቢያ ላይ ሲጠቀሙ የGoogle የይለፍ ቃል ጥበቃ ማስጠንቀቂያው ይቀሰቀሳል፣ ነገር ግን ተጠቃሚው ይህን ቅንብር መቀየር ይችላል።</translation>
 <translation id="8672321184841719703">ራስ-አዘምን ስሪቱን አነጣጥር</translation>
 <translation id="867410340948518937">U2F (ሁለገብ ሁለተኛ ደረጃ)</translation>
 <translation id="8685024486845674965">የይለፍ ቃል ጥበቃ ማስጠንቀቂያ በይለፍ ቃል ዳግም መጠቀም ይቀሰቀሳል</translation>
diff --git a/components/policy/resources/policy_templates_bg.xtb b/components/policy/resources/policy_templates_bg.xtb
index cd3c1e2..5656d67 100644
--- a/components/policy/resources/policy_templates_bg.xtb
+++ b/components/policy/resources/policy_templates_bg.xtb
@@ -231,6 +231,13 @@
 В случай че трябва да се поддържа съвместимост с неизправен сървър, може да се използва опцията „tls1.1“. Това е временна мярка и сървърът трябва да се поправи бързо.</translation>
 <translation id="1864269674877167562">Ако за това правило е зададен празен низ или то не е конфигурирано, в <ph name="PRODUCT_OS_NAME" /> няма да се показва опция за автоматично довършване по време на процедурата за влизане в профил на потребител.
 В случай че е зададен низ, представляващ име на домейн – при влизане в <ph name="PRODUCT_OS_NAME" /> ще се показва опция за автоматично довършване, която дава възможност на потребителите да въведат само потребителското си име, без разширението за име на домейн, което ще могат да презапишат.</translation>
+<translation id="1864382791685519617">Активира предвижданията за мрежата в <ph name="PRODUCT_NAME" /> и не позволява на потребителите да променят тази настройка.
+
+Тя контролира предварителното извличане на DNS, предварителното свързване през TCP и SSL и предварителното изобразяване на уеб страниците.
+
+Ако зададете това правило, потребителите няма да могат да променят или отменят настройката в <ph name="PRODUCT_NAME" />.
+
+В случай че то не е зададено, предвижданията за мрежата ще са активирани, но потребителите ще могат да променят настройката.</translation>
 <translation id="1865417998205858223">Ключови разрешения</translation>
 <translation id="186719019195685253">Действие след изтичане на времето за забавяне при неактивност при работа на променлив ток</translation>
 <translation id="187819629719252111">Разрешава достъпа до локалните файлове на компютъра, като позволява на <ph name="PRODUCT_NAME" /> да показва диалогови прозорци за избор на файл. Ако активирате тази настройка, потребителите могат да отварят тези прозорци по обичайния начин. В случай че я деактивирате, при всяко действие на потребителя, предизвикващо отварянето на такъв прозорец (като импортиране на отметки, качване на файлове, запазване на връзки и т.н.), вместо това се показва съобщение и се приема, че в диалоговия прозорец за избор на файл е кликнато върху „Отказ“. Ако настройката не е зададена, потребителите могат да отварят тези прозорци по обичайния начин.</translation>
@@ -690,6 +697,7 @@
 Ако правилото не е зададено, се използва <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Максимален брой едновременни връзки с прокси сървъра</translation>
+<translation id="2951386431828317490">Активиране на автоматичното попълване за потребителските профили</translation>
 <translation id="2956777931324644324">Това правило е оттеглено от версия 36 на <ph name="PRODUCT_NAME" />.
 
       Посочва дали разширението за обвързани с домейна сертификати за TLS трябва да бъде активирано.
@@ -698,6 +706,7 @@
 <translation id="2957506574938329824">Забраняване на сайтовете да заявяват достъп до устройства с Bluetooth през приложния програмен интерфейс (API) Web Bluetooth</translation>
 <translation id="2957513448235202597">Тип на профилите за удостоверяване чрез <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Правила за заобикаляне на прокси сървъра</translation>
+<translation id="2960128438010718932">График за поетапно прилагане на нова актуализация</translation>
 <translation id="2960691910306063964">Активиране или деактивиране на удостоверяването без ПИН код за хостовете за отдалечен достъп</translation>
 <translation id="2976002782221275500">Посочва периода от време без потребителска активност, след който при работа на батерия екранът се затъмнява.
 
@@ -735,6 +744,7 @@
 Независимо дали или как е зададено правилото, потребителите няма да могат да променят настройката за оптимизиране на WPAD.</translation>
 <translation id="3072045631333522102">Скрийнсейвър, който да се използва на екрана за вход в режим за търговски експонати</translation>
 <translation id="3072847235228302527">Задаване на Общите условия за локален за устройството профил</translation>
+<translation id="3077183141551274418">Активиране или деактивиране на жизнените цикли за разделите</translation>
 <translation id="3086995894968271156">Конфигуриране на Cast Receiver в <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Позволява да съставите списък с образци на URL адреси, посочващи сайтове, на които е разрешено да показват изображения.
 
@@ -1292,6 +1302,11 @@
 Тези предложения се извличат отдалечено от сървърите на Google.
 
 При false няма да се извличат или показват предложения.</translation>
+<translation id="4788252609789586009">Активира функцията на <ph name="PRODUCT_NAME" /> за автоматично попълване и позволява на потребителите да попълват автоматично уеб формуляри чрез вече съхранена информация за кредитни карти.
+
+При деактивиране на тази настройка функцията няма да предлага или попълва информация за кредитни карти, нито ще запазва допълнителни данни за кредитни карти, ако потребителят въведе такива, докато сърфира в мрежата.
+
+В случай че настройката е активирана или няма стойност, потребителят ще може да контролира функцията за автоматично попълване на кредитни карти в ПИ.</translation>
 <translation id="4791031774429044540">Активиране на функцията за достъпност „голям курсор“.
 
           Ако е зададено true, винаги ще бъде активиран голям курсор.
@@ -1416,6 +1431,11 @@
 Ако за това правило е зададено True, <ph name="PRODUCT_OS_NAME" /> няма да позволи стартирането на устройството в режима за програмисти. Системата няма да стартира и ще се покаже екран за грешка, когато превключвателят за програмисти е включен.
 
 В случай че правилото не е зададено или е False, режимът за програмисти ще остане налице за устройството.</translation>
+<translation id="520403427390290017">Функцията за жизнени цикли за разделите освобождава процесора и евентуално паметта, свързани с изпълняването на раздели, които не са използвани дълго време, като първо ги форсира, след това ги блокира и накрая ги отхвърля.
+
+Ако за правилото е зададено false, тази функция ще бъде деактивирана и всички раздели ще бъдат оставени да работят по обичайния начин.
+
+В случай че правилото е true или не е зададено, жизнените цикли за разделите ще бъдат активирани.</translation>
 <translation id="5208240613060747912">Позволява да зададете списък с образци за URL адреси, посочващи сайтове, на които не е разрешено да показват известия. Ако това правило е оставено незададено, за всички сайтове ще се използва глобалната стандартна стойност от правилото „DefaultNotificationsSetting“, ако е зададено, или в противен случай – личната конфигурация на потребителя.</translation>
 <translation id="5219844027738217407">Това правило засяга приложенията за Android само по отношение на микрофона. Когато е зададено true, той е заглушен за абсолютно всички приложения за Android.</translation>
 <translation id="523505283826916779">Настройки за достъпност</translation>
@@ -1461,6 +1481,11 @@
 
 Ако това правило е false, потребителите няма да могат да предават съдържание към устройството си. При true предаването ще е разрешено. В случай че правилото не е зададено, потребителите ще могат да предават към нерегистрирани устройства, но не и към регистрираните с Chrome OS.</translation>
 <translation id="5330684698007383292">Разрешаване на <ph name="PRODUCT_FRAME_NAME" /> да обработва следните типове съдържание</translation>
+<translation id="5360146044009867539">Активира функцията на <ph name="PRODUCT_NAME" /> за автоматично попълване и позволява на потребителите да попълват автоматично уеб формуляри чрез вече съхранена информация за потребителски профили и адреси.
+
+При деактивиране на тази настройка функцията няма да предлага или попълва информация за адреси, нито ще запазва допълнителни данни за адреси, ако потребителят въведе такива, докато сърфира в мрежата.
+
+В случай че настройката е активирана или няма стойност, потребителят ще може да контролира функцията за автоматично попълване на адреси в ПИ.</translation>
 <translation id="5365946944967967336">Показване на бутона „Начало“ в лентата с инструменти</translation>
 <translation id="5366745336748853475">Позволява да съставите списък с образци на URL адреси, указващи за кои от сайтовете, изискващи клиентски сертификат, той да се избира автоматично в рамката на екрана за вход, хостваща процеса за влизане чрез SAML. Можете например да конфигурирате доставчикът на удостоверителни услуги чрез SAML да получава сертификат на ниво устройство.
 
@@ -2147,6 +2172,15 @@
 
 В случай че настройката е деактивирана, функцията няма да е налице.</translation>
 <translation id="7275334191706090484">Управлявани отметки</translation>
+<translation id="729492886167634859">Това правило служи за съставяне на списък с процентни стойности, указващи каква част от устройствата с <ph name="PRODUCT_OS_NAME" /> в ОЕ да бъдат актуализирани на седмица, като се започва от деня на първото откриване на актуализацията. Моментът на откриването е по-късен от този на публикуване на актуализацията, тъй като е възможно да измине известно време след публикуването, докато устройството провери за актуализации.
+
+Стойността с пореден номер n в списъка ще указва какъв процент устройства да бъдат актуализирани до следващата версия през n-тата седмица след откриване на актуализацията. Ако например тя е открита днес, първата стойност в списъка посочва процента устройства в ОЕ, които да се актуализират до съответната версия след една седмица. Втората стойност указва процента, който да бъде актуализиран след 2 седмици, и т.н.
+
+Ако за това правило е зададена стойност, актуализациите ще са съобразени с него и правилото <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> ще бъде пренебрегнато.
+
+В случай че списъкът е празен, актуализациите няма да се инсталират поетапно, а ще бъдат прилагани според другите правила за устройства.
+
+Това правило не е приложимо при промяна на канала.</translation>
 <translation id="7295019613773647480">Активиране на контролирани потребители</translation>
 <translation id="7301543427086558500">Посочва списък с алтернативни URL адреси, които могат да се използват за извличане на думи за търсене от търсещата машина. Тези адреси трябва да съдържат низа <ph name="SEARCH_TERM_MARKER" />, който ще се ползва при извличането.
 
@@ -2601,6 +2635,11 @@
 
 За примерни образци вижте https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Деактивиране на запазването на историята на браузъра</translation>
+<translation id="8498293625012059298">Конфигуриране на URL адреса за промяна на паролата (само със схема HTTP или HTTPS). След като потребителите видят предупреждение в браузъра, услугата за защита на паролата ще ги отвежда до посочения URL адрес, за да променят паролата си.
+За да може <ph name="PRODUCT_NAME" /> да запише правилно отпечатъка на новата парола на страницата за промяната й, тази страница трябва да е съобразена с указанията на адрес https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+Ако настройката е активирана, след като видят предупреждение в браузъра, потребителите ще бъдат отвеждани до посочения URL адрес, за да променят паролата си.
+В случай че настройката е деактивирана или не е зададена, услугата за защита на паролата ще отвежда потребителите до https://myaccounts.google.com, за да променят паролата си.
+Това правило не е налице за екземпляри на Windows, които не са част от домейн на <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Настройки по подразбиране (потребителите могат да ги отменят)</translation>
 <translation id="8507835864888987300">Задава целева версия за автоматичните актуализации.
 
@@ -2654,6 +2693,14 @@
 Когато правилото бъде променено на False, стартирането на нови виртуални машини няма да е възможно, но вече работещите няма да бъдат изключени.
 В случай че правилото не е зададено на управлявано устройство, изпълняването на виртуални машини няма да е разрешено на него.
 Неуправляваните устройства могат да изпълняват виртуални машини.</translation>
+<translation id="8669669491594628013">Дава възможност да контролирате задействането на предупреждение от услугата за защита на паролата. Тази услуга сигнализира на потребителите, когато повторно използват защитената си парола на потенциално подозрителни сайтове.
+
+Можете да използвате правилата PasswordProtectionLoginURLs и PasswordProtectionChangePasswordURL, за да конфигурирате кои пароли да бъдат защитавани.
+
+Ако за правилото е зададено PasswordProtectionWarningOff, няма да се показва предупреждение от услугата за защита на паролата.
+При PasswordProtectionWarningOnPasswordReuse предупреждение ще се показва, когато потребителят използва повторно защитената си парола на сайт извън белия списък.
+В случай че за правилото е зададено PasswordProtectionWarningOnPhishingReuse, предупреждение ще се показва, когато потребителят използва повторно защитената си парола на сайт за фишинг.
+Ако правилото не е зададено, услугата за защита ще предпазва само паролите за Google, но потребителят ще може да променя настройката.</translation>
 <translation id="8672321184841719703">Целева версия за автоматично актуализиране</translation>
 <translation id="867410340948518937">U2F (универсално второ ниво)</translation>
 <translation id="8685024486845674965">Извеждане на предупреждение, когато паролата се използва повторно</translation>
diff --git a/components/policy/resources/policy_templates_bn.xtb b/components/policy/resources/policy_templates_bn.xtb
index 00728b2c..a2d63d3 100644
--- a/components/policy/resources/policy_templates_bn.xtb
+++ b/components/policy/resources/policy_templates_bn.xtb
@@ -384,7 +384,7 @@
 <translation id="2077129598763517140">যখনই উপলব্ধ তখন হার্ডওয়্যার অ্যাক্সিলারেশন ব্যবহার করুন</translation>
 <translation id="2077273864382355561">AC পাওয়ার চলাকালীন স্ক্রিন বন্ধে বিলম্ব</translation>
 <translation id="2082205219176343977">ডিভাইসের জন্য সর্বনিম্ন অনুমোদিত Chrome ভার্সন কনফিগার করুন</translation>
-<translation id="209586405398070749">স্থায়ী  চ্যানেল</translation>
+<translation id="209586405398070749">টেকসই চ্যানেল</translation>
 <translation id="2098658257603918882">ব্যবহার ও ক্র্যাশ-সম্পর্কিত ডেটার প্রতিবেদন সক্ষম করুন</translation>
 <translation id="2111016292707172233"><ph name="PRODUCT_NAME" />-এর কন্টেন্ট ভিউয়ে 'সার্চ করতে ট্যাপ করুন' বিকল্পের উপলভ্যতা চালু করে।
 
@@ -418,7 +418,7 @@
 
           <ph name="PRODUCT_NAME" /> 21 থেকে শুরু করে, Chrome ওয়েব স্টোরের এর বাইরে থেকে এক্সটেনশন, অ্যাপ আর ইউজার স্ক্রিপ্ট ইনস্টল করা আরও কঠিন। আগে ব্যবহারকারীরা একটি *.crx ফাইলের লিঙ্কে ক্লিক করলে কিছু সতর্কতামূলক মেসেজ দিয়ে <ph name="PRODUCT_NAME" /> সেটি ইনস্টল করার প্রস্তাব দিত। <ph name="PRODUCT_NAME" /> 21এর পর, সেই ধরণের ফাইলগুলিকে ডাউনলোড করে <ph name="PRODUCT_NAME" /> এর সেটিংস পৃষ্ঠায় টেনে আনতে হবে। এই সেটিংয়ের মাধ্যমে কিছু নির্দিষ্ট URL এ পুরনো, সহজতর ইনস্টলেশন পদ্ধতি ব্যবহার করা যায়।
 
-          এই তালিকার প্রতিটি আইটেম হল একটি এক্সটেনশন-স্টাইল মিল ধরণ (https://developer.chrome.com/extensions/match_patterns দেখুন)। ব্যবহারকারীরা সেগুলিকে এমন যেকোনও URL থেকে সহজেই ইনস্টল করতে পারবে যা এই তালিকাতে থাকা কোনও আইটেমের সাথে মেলে। *.crx ফাইল ও যেখান থেকে ডাউনলোড শুরু হয় সেই পৃষ্ঠা (অর্থাত উল্লেখকারী) উভয়কেই এই ধরণগুলির দ্বারা অবশ্যই মঞ্জুরিপ্রাপ্ত হতে হবে।
+          এই তালিকার প্রতিটি আইটেম হল একটি এক্সটেনশন-শৈলী মিল ধরণ (https://developer.chrome.com/extensions/match_patterns দেখুন)। ব্যবহারকারীরা সেগুলিকে এমন যেকোনও URL থেকে সহজেই ইনস্টল করতে পারবে যা এই তালিকাতে থাকা কোনও আইটেমের সাথে মেলে। *.crx ফাইল ও যেখান থেকে ডাউনলোড শুরু হয় সেই পৃষ্ঠা (অর্থাত উল্লেখকারী) উভয়কেই এই ধরণগুলির দ্বারা অবশ্যই মঞ্জুরিপ্রাপ্ত হতে হবে।
 
           <ph name="EXTENSION_INSTALL_BLACKLIST_POLICY_NAME" /> এই নীতিতে অগ্রগণ্যতা নেয়। এটি হল, কালোতালিকাতে একটি এক্সটেনশন যা এই তালিকাতে থাকা কোনও সাইট থেকে হলেও ইনস্টল হবে না।</translation>
 <translation id="2156132677421487971"><ph name="PRODUCT_NAME" /> এর জন্য নীতি কনফিগার করে, যা ব্রাউজার থেকে ট্যাব, সাইট বা ডেস্কটপকে দূরবর্তী দেখায় বা সাউন্ড সিস্টেমে পাঠায় এমন এক বৈশিষ্ট্য।</translation>
@@ -706,9 +706,9 @@
 <translation id="2693108589792503178">পাসওয়ার্ড পরিবর্তন করার URL কনফিগার করুন।</translation>
 <translation id="2710534340210290498">এই নীতি মিথ্যাতে সেট করা থাকলে, ব্যবহারকারীরা স্ক্রিন লক করতে পারবেন না (শুধুমাত্র ইউজার সেসন থেকে সাইন-আউট করা সম্ভব হবে)। এই নীতি সেট না করা থাকলে বা সত্যতে সেট করা থাকলে, যেসব ব্যবহারকারী পাসওয়ার্ড দিয়ে প্রমাণীকরণ করেছেন তারা স্ক্রিন লক করতে পারবেন।</translation>
 <translation id="2731627323327011390">ARC-অ্যাপ্লিকেশানগুলিতে <ph name="PRODUCT_OS_NAME" /> শংসাপত্রের ব্যবহার অক্ষম করুন</translation>
-<translation id="2742843273354638707">নতুন ট্যাবের পৃষ্ঠা এবং <ph name="PRODUCT_OS_NAME" /> অ্যাপ্লিকেশান লঞ্চার থেকে Chrome ওয়েব দোকান অ্যাপ্লিকেশান এবং পাদলেখের লিঙ্ক লুকায়৷
+<translation id="2742843273354638707">নতুন ট্যাবের পৃষ্ঠা এবং <ph name="PRODUCT_OS_NAME" /> অ্যাপ লঞ্চার থেকে Chrome ওয়েব স্টোর অ্যাপ এবং ফুটার লিঙ্ক লুকায়৷
 
-      যখন এই নীতিটি সত্যতে সেট করা থাকে, তখন এই আইকনগুলি লুকানো থাকে৷
+      যখন এই নীতিটি ট্রুতে সেট করা থাকে, তখন এই আইকনগুলি লুকানো থাকে৷
 
       যখন এই নীতিটি মিথ্যাতে সেট করা থাকে অথবা কনফিগার করা না থাকে, তখন আইকনগুলি দৃশ্যমান হয়৷</translation>
 <translation id="2744751866269053547">রেজিস্টার প্রোটোকল হ্যান্ডলারগুলি</translation>
@@ -1085,11 +1085,11 @@
 <translation id="3765260570442823273">নিষ্ক্রিয় লগ-আউট সতর্কতা বার্তার স্থিতিকাল</translation>
 <translation id="377044054160169374">খারাপ অথবা অপব্যবহারমূলক অভিজ্ঞতার ক্ষেত্রে হস্তক্ষেপ প্রয়োগ করা</translation>
 <translation id="3780152581321609624">কার্বেরস SPN-এ অ-মানক পোর্ট অন্তর্ভুক্ত করুন</translation>
-<translation id="3780319008680229708">এই নীতিটি সত্যতে সেট করা থাকলে, Cast টুল দণ্ড আইকন সবসময় টুল দণ্ড বা ওভারফ্লো মেনুতে দেখানো হবে, এবং ব্যবহারকারীরা এটি সরাতে পারবেন না।
+<translation id="3780319008680229708">এই নীতিটি সত্যতে সেট করা থাকলে, Cast টুলবার আইকন সবসময় টুলবার বা ওভারফ্লো মেনুতে দেখানো হবে, এবং ব্যবহারকারীরা এটি সরাতে পারবেন না।
 
           এই নীতিটি মিথ্যাতে সেট করা হলে বা সেট করা না থাকলে, ব্যবহারকারীরা প্রসঙ্গ মেনুর মাধ্যমে আইকনটি পিন করতে বা সরাতে পারবেন।
 
-          "EnableMediaRouter" নীতিটি মিথ্যাতে সেট করা থাকলে, এই নীতির মান কোনো প্রভাব ফেলবে না, এবং টুল দণ্ড আইকনটি দেখানো হবে না।</translation>
+          "EnableMediaRouter" নীতিটি মিথ্যাতে সেট করা থাকলে, এই নীতির মান কোনও প্রভাব ফেলবে না, এবং টুলবার আইকনটি দেখানো হবে না।</translation>
 <translation id="3788662722837364290">ব্যবহারকারী নিষ্ক্রিয় অবস্থায় থাকাকালীন সময়কার পাওয়ার ব্যবস্থাপনার সেটিংস</translation>
 <translation id="3793095274466276777"><ph name="PRODUCT_NAME" />-এ ডিফল্ট ব্রাউজার চেকস কনফিগার করে এবং ব্যবহারকারীদের তা পরিবর্তন করতে বাধা দেয়৷      আপনি এই সেটিংটি সক্ষম করলে, <ph name="PRODUCT_NAME" /> সূচনার সময় এটি ডিফল্ট ব্রাউজার কিনা তা সর্বদা পরীক্ষা করবে এবং সম্ভব হলে এটিকে স্বয়ংক্রিয়ভাবে নিবন্ধভুক্ত করবে৷
 
@@ -1163,15 +1163,15 @@
       প্রতিটি তালিকা প্রবেশকার্যে একটি অভিধান থাকে যার 'extension-id' ক্ষেত্রের মধ্যে এক্সটেনশান ID, এবং 'update-url' ক্ষেত্রের মধ্যে নিজের আপডেট URL অন্তর্ভুক্ত করা আবশ্যক৷</translation>
 <translation id="3874773863217952418">সার্চ করতে ট্যাপ চালু করুন</translation>
 <translation id="3877517141460819966">সমন্বিত দ্বিতীয় পদক্ষেপ প্রমাণীকরণ মোড</translation>
-<translation id="388237772682176890">SPDY/3.1 সমর্থন সরানোর কারণে এই নীতিটি M53 এ থামানো হয় এবং M54 এ সরানো হয়।
+<translation id="388237772682176890">SPDY/3.1 সমর্থন সরানোর কারণে এই নীতিটি M53-এ থামানো হয় এবং M54-এ সরানো হয়।
 
-      <ph name="PRODUCT_NAME" /> এর মধ্যে SPDY প্রটোকলের ব্যবহার অক্ষম করে।
+      <ph name="PRODUCT_NAME" /> এর মধ্যে SPDY প্রটোকলের ব্যবহার বন্ধ করে।
 
-      নীতিটি যদি সক্ষম করা হয়, তাহলে SPDY প্রটোকল <ph name="PRODUCT_NAME" /> এর মধ্যে উপলব্ধ হবে না।
+      নীতিটি যদি চালু করা হয়, তাহলে SPDY প্রটোকল <ph name="PRODUCT_NAME" />-এর মধ্যে উপলভ্য হবে না।
 
-      নীতিটি অক্ষম করে রাখা হলে, সেটিংটি SPDY এর ব্যবহারকে মঞ্জুরি দেবে।
+      নীতিটি বন্ধ করে রাখা হলে, সেটিংটি SPDY এর ব্যবহারকে মঞ্জুরি দেবে।
 
-      যদি এই নীতিটি সেট না করেই ছেড়ে যাওয়া হয়, তাহলে SPDY উপলব্ধ হবে।</translation>
+      যদি এই নীতিটি সেট না করেই ছেড়ে যাওয়া হয়, তাহলে SPDY উপলভ্য হবে।</translation>
 <translation id="3890999316834333174">দ্রুত আনলক নীতি</translation>
 <translation id="3891357445869647828">JavaScript সক্ষম করুন</translation>
 <translation id="3895557476567727016">ফাইল ডাউনলোড করার জন্য <ph name="PRODUCT_NAME" /> ব্যবহার করবে এমন ডিফল্ট ডিরেক্টরিকে কনফিগার করে।
@@ -1219,7 +1219,7 @@
 
           আদর্শগতভাবে এটি একটি ফিশিং প্রতিরোধ হিসাবে অক্ষম আছে৷ যদি এই নীতিটি সেট না থেকে থাকে তবে এটি অক্ষম হয় এবং কোনো তৃতীয় পক্ষের উপ-সামগ্রী 
 একটি HTTP Basic Auth কথোপকথন বাক্সে পপ আপ হতে অনুমোদিত হবে না৷</translation>
-<translation id="4056910949759281379">SPDY প্রোটোকল অক্ষম করুন</translation>
+<translation id="4056910949759281379">SPDY প্রোটোকল বন্ধ করুন</translation>
 <translation id="4059515172917655545">Google-এর লোকেশন ভিত্তিক পরিষেবাগুলির উপলভ্যতা নিয়ন্ত্রণ করে।
 
       যখন এই নীতিটি কনফিগার করা থাকে না বা <ph name="GLS_DISABLED" />-এ সেট করা থাকলে, তখন Google-এর লোকেশন ভিত্তিক পরিষেবাগুলি বন্ধ থাকবে এবং ব্যবহারকারীরা তা চালু করতে পারবেন না।
@@ -1399,15 +1399,15 @@
 <translation id="4474167089968829729">পাসওয়ার্ড পরিচালকে পাসওয়ার্ড সংরক্ষণ করা সক্ষম করুন</translation>
 <translation id="4476769083125004742">এই নীতিটি <ph name="BLOCK_GEOLOCATION_SETTING" /> এ সেট করা হলে, Android অ্যাপ্লিকেশানগুলি অবস্থানের তথ্য অ্যাক্সেস করতে পারে না। আপনি যদি এই নীতিটি অন্য যেকোনো মানে সেট করেন বা সেট না করে ছেড়ে যান, তাহলে কোনো Android অ্যাপ্লিকেশান অবস্থানের তথ্য অ্যাক্সেস করতে চাইলে ব্যবহারকারীর সম্মতি চাওয়া হয়।</translation>
 <translation id="4480694116501920047">ফোর্স SafeSearch</translation>
-<translation id="4482640907922304445"><ph name="PRODUCT_NAME" /> টুলবারের মধ্যে হোম বোতাম দেখান৷ 
+<translation id="4482640907922304445"><ph name="PRODUCT_NAME" /> টুলবারের মধ্যে হোম বোতাম দেখান৷
 
-যদি আপনি এই সেটিংটি সক্ষম করেন, হোম বোতাম সব সময় দেখা যাবে৷ 
+যদি আপনি এই সেটিংটি চালু করেন, হোম বোতাম সব সময় দেখা যাবে৷
 
-আপনি যদি এই সেটিংটি অক্ষম করেন,  হোম বোতাম কখনও দেখা যাবে না৷ 
+আপনি যদি এই সেটিংটি বন্ধ করেন, হোম বোতাম কখনও দেখা যাবে না৷
 
-আপনি যদি সেটিংটি সক্ষম অথবা অক্ষম করেন, ব্যবহারকারীরা <ph name="PRODUCT_NAME" />-এর মধ্যে সেটিংটি পরিবর্তন অথবা ওভাররাইড করতে পারবে না৷ 
+আপনি যদি সেটিংটি চালু অথবা বন্ধ করেন, ব্যবহারকারীরা <ph name="PRODUCT_NAME" />-এর মধ্যে সেটিংটি পরিবর্তন অথবা ওভাররাইড করতে পারবে না৷
 
-এই নীতিটি সেট না করে ছেড়ে যাওয়া হলে হোম বোতাম দেখানো হবে কিনা ব্যবহারকারীদের সেটি চয়ন করার অনুমতি দেওয়া হবে৷</translation>
+এই নীতিটি সেট না করে ছেড়ে যাওয়া হলে হোম বোতাম দেখানো হবে কিনা ব্যবহারকারীদের সেটি বেছে নেওয়ার অনুমতি দেওয়া হবে৷</translation>
 <translation id="4483649828988077221">অটো আপডেট চালু করুন</translation>
 <translation id="4485425108474077672">নতুন ট্যাব পৃষ্ঠার URL কনফিগার করুন</translation>
 <translation id="4492287494009043413">স্ক্রীনশট নেওয়া অক্ষম করুন</translation>
@@ -1457,11 +1457,11 @@
 <translation id="4625915093043961294">এক্সটেনশন ইনস্টলেশন সাদা তালিকাটি কনফিগার করুন</translation>
 <translation id="4632343302005518762">নিম্নোক্ত সামগ্রী প্রকার পরিচালনা করতে <ph name="PRODUCT_FRAME_NAME" /> কে মঞ্জুরি দিন৷</translation>
 <translation id="4632566332417930481">এন্টারপ্রাইজ নীতি দ্বারা ইনস্টল করা এক্সটেনশনগুলিতে ডেভেলপার টুল ব্যবহারে অনুমতি দেবেন না, অন্যান্য প্রসঙ্গে ডেভেলপার টুল ব্যবহারের অনুমতি দিন</translation>
-<translation id="4633786464238689684">শীর্ষের সারিতে থাকা কীগুলির ডিফল্ট ব্যবহারকে ফাংশন কীতে পরিবর্তিত করে৷
+<translation id="4633786464238689684">শীর্ষের সারিতে থাকা কীগুলির ডিফল্ট ব্যবহারকে ফাংশন কী তে পরিবর্তিত করে৷
 
           যদি এই নীতিটিকে সত্যতে সেট করা হয়, তাহলে কীবোর্ডের শীর্ষের সারিটির কীগুলি ডিফল্ট অনুসারে ফাংশন কী এর মতো আচরণ করবে৷ সেগুলির ব্যবহারকে মিডিয়া কী অনুসারে প্রত্যাবর্তন করানোর জন্য সার্চ কী টিপতে হবে৷
 
-          যদি এই নীতিটিকে মিথ্যাতে সেট করা হয় অথবা সেট না করে ফেলে রাখা হয়, তাহলে কীবোর্ড ডিফল্ট অনুসারে মিডিয়া কী কম্যান্ড হিসাবে এবং যখন সার্চ কী ধরে রাখা হবে তখন ফাংশন কী কম্যান্ড হিসাবে কাজ করবে৷</translation>
+          যদি এই নীতিটিকে মিথ্যাতে সেট করা হয় অথবা সেট না করে ফেলে রাখা হয়, তাহলে কী বোর্ড ডিফল্ট অনুসারে মিডিয়া কী কম্যান্ড হিসাবে এবং যখন সার্চ কী ধরে রাখা হবে তখন ফাংশন কী কম্যান্ড হিসাবে কাজ করবে৷</translation>
 <translation id="4634322756082542180">এই নীতি ব্যবহারকারীকে কালোতালিকাভুক্ত URL লোড হওয়া থেকে আটকায়। কালোতালিকায় URL ধরণগুলির একটি তালিকা থাকে যা কোন URL কে কালোতালিকাভুক্ত করা হবে তা নির্দেশ করে।
 
       কোনও URL এর ধরণকে https://www.chromium.org/administrators/url-blacklist-filter-format অনুযায়ী ফর্ম্যাট করতে হবে।
@@ -1473,7 +1473,7 @@
       এই নীতি সেট করা না থাকলে, ব্রাউজারটিতে কোনও URL কে কালোতালিকাভুক্ত করা হবে না।</translation>
 <translation id="4639407427807680016">কালোতালিকা থেকে বাদ দিতে হবে এমন নেটিভ বার্তাপ্রেরণ হোস্টগুলির নাম</translation>
 <translation id="4650759511838826572">URL প্রোটোকল স্কিমগুলি অক্ষম করুন</translation>
-<translation id="465099050592230505">এন্টারপ্রাইজ ওয়েব দোকান URL (থামানো হয়েছে)</translation>
+<translation id="465099050592230505">এন্টারপ্রাইজ ওয়েব স্টোর ইউআরএল (থামানো হয়েছে)</translation>
 <translation id="4665897631924472251">এক্সটেনশান পরিচালনা সেটিংস</translation>
 <translation id="4668325077104657568">ডিফল্ট চিত্রসমূহের সেটিং</translation>
 <translation id="4671708336564240458">খারাপ অথবা অপব্যবহারমূলক অভিজ্ঞতা হয় এমন সাইটগুলি নতুন উইন্ডো বা ট্যাব খুলতে পারবে কিনা তা আপনি এখান থেকে সেট করতে পারবেন।
@@ -1731,7 +1731,7 @@
 
           এই নীতিটি যদি মিথ্যাতে সেট করা থাকে তাহলে ব্যবহারকারীরা তাদের ডিভাইসে কন্টেন্ট কাস্ট করতে পারবেন না। যদি এই নীতিটি সত্যতে সেট করা থাকে তাহলে ব্যবহারকারীদের কন্টেন্ট কাস্ট করার অনুমতি দেওয়া হয়। যদি নীতিটি সেট করা না থাকে তাহলে ব্যবহারকারীদেরকে তালিকাভুক্ত Chrome OS ডিভাইসে কাস্ট করার অনুমতি দেওয়া হয় না, কিন্তু তারা তালিকাভুক্ত নয় এমন ডিভাইসে কাস্ট করতে পারেন।</translation>
 <translation id="5330684698007383292">নিম্নোক্ত সামগ্রী প্রকার পরিচালনা করতে <ph name="PRODUCT_FRAME_NAME" /> কে মঞ্জুরি দিন৷</translation>
-<translation id="5365946944967967336">সরঞ্জামদণ্ডে হোম বোতাম দেখান </translation>
+<translation id="5365946944967967336">টুলবারে হোম বোতাম দেখান</translation>
 <translation id="5366745336748853475">কোনও সাইটে যদি সার্টিফিকেট প্রয়োজন হয় তাহলে এই নীতির মাধ্যমে আপনি URL প্যাটার্নের একটি তালিকা নির্দিষ্ট করতে পারেন যেখানে এমন সাইট উল্লেখ করা থাকবে যেগুলির ক্ষেত্রে SAML ফ্লো হোস্ট করা ফ্রেমের সাইন-ইন স্ক্রিনে ক্লায়েন্ট সার্টিফিকেট নিজে থেকেই বেছে নেওয়া হয়। ডিভাইসের সমস্ত কাজে প্রযোজ্য যে সার্টিফিকেট SAML IdP তে জমা দিতে হয়, সেটি কনফিগার করার ক্ষেত্রে এটি ব্যবহার করা হয়।
 
       এই মানটিতে স্ট্রিং এর আকারে সাজানো এক গুচ্ছ JSON ডিকশনারি থাকতে হবে। প্রতিটি ডিকশনারি নির্দিষ্ট ভাবে সাজাতে হবে { "pattern": "$URL_PATTERN", "filter" : $FILTER }, যেখানে $URL_PATTERN হল কন্টেন্ট সেট করার প্যাটার্ন। কোন ক্লায়েন্ট সার্টিফিকেটগুলির মধ্যে থেকে ব্রাউজার বিশেষ কোনওটি নিজে থেকে বেছে নেবে, তা $FILTER নিয়ন্ত্রণ করে। ফিল্টার ব্যবহার না করলে শুধুমাত্র সেই সার্টিফিকেটগুলিই বেছে নেওয়া হয় যেগুলি সার্ভারের সার্টিফিকেট রিকোয়েস্টের সাথে মেলে। $FILTER যদি এইভাবে দেওয়া থাকে { "ISSUER": { "CN": "$ISSUER_CN" } } তাহলে শুধুমাত্র সেই ক্লায়েন্ট সার্টিফিকেটগুলিই বেছে নেওয়া হয় যেগুলি CommonName $ISSUER_CN সার্টিফিকেটের মাধ্যমে ইস্যু করা হয়েছে। $FILTER হিসেবে যদি ফাঁকা ডিকশনারি {} সেট করা থাকে তাহলে ক্লায়েন্ট সার্টিফিকেট বেছে নেওয়ার উপরে কোনও অতিরিক্ত বিধিনিষেধ আরোপ করা হয় না।
@@ -2075,7 +2075,7 @@
 <translation id="614662973812186053">এই নীতিটি Android ব্যবহারের এবং ডায়াগনস্টিক ডেটার সংগ্রহ নিয়ন্ত্রণ করে।</translation>
 <translation id="6155936611791017817">লগইন স্ক্রীনে বড় কার্সারের ডিফল্ট স্থিতি সেট করুন</translation>
 <translation id="6157537876488211233">প্রক্সি বাইপাস বিধিগুলির জন্য কমা দ্বারা পৃথকীকৃত তালিকা</translation>
-<translation id="6158324314836466367">এন্টারপ্রাইজ ওয়েব দোকানের নাম (থামানো হয়েছে)</translation>
+<translation id="6158324314836466367">এন্টারপ্রাইজ ওয়েব স্টোরের নাম (থামানো হয়েছে)</translation>
 <translation id="6164955668342404660">M69-এ বন্ধ করে দেওয়া হয়েছে। এর পরিবর্তে OverrideSecurityRestrictionsOnInsecureOrigin ব্যবহার করুন।
 
       যে উৎসগুলিকে (ইউআরএল) সুরক্ষিত কন্টেক্সট হিসেবে বিবেচনা করা হবে তার একটি তালিকা এই নীতিতে উল্লেখ করা হয়ে থাকে। এটির সাহায্যে কোনও সংস্থা অভ্যন্তরীণ ওয়েব ডেভেলপমেন্টের জন্য স্টেজিং সার্ভার সেট-আপ করতে পারে, যাতে ডেভেলপাররা স্টেজিং সার্ভারে TLS ব্যবহার না করেই এমন বৈশিষ্ট্য পরীক্ষা করে দেখতে পারেন যেগুলিতে সুরক্ষিত কন্টেক্সটের প্রয়োজন হয়।
@@ -2548,9 +2548,9 @@
 <translation id="7329968046053403405"><ph name="HTTP_NEGOTIATE" /> প্রমাণীকরণ (উদাঃ Kerberos প্রমাণীকরণ) সমর্থন করে এমন Android প্রমাণীকরণ অ্যাপ্লিকেশান দ্বারা সরবরাহকৃত অ্যাকাউন্টগুলির অ্যাকাউন্টের ধরন নির্দিষ্ট করে। প্রমাণীকরণ অ্যাপ্লিকেশানের সরবরাহকারীর কাছ থেকে এই তথ্য পাওয়া যাবে। আরও বিশদ বিবরণের জন্য https://goo.gl/hajyfN দেখুন।
 
           যদি কোনো সেটিং দেওয়া না হয়, তাহলে Android এ <ph name="HTTP_NEGOTIATE" /> প্রমাণীকরণ অক্ষম থাকে।</translation>
-<translation id="7331962793961469250">যখন প্রকৃততে সেট থাকে Chrome ওয়েব দোকান অ্যাপসের জন্য প্রচারগুলি নতুন ট্যাব পৃষ্ঠায় উপস্থিত হয় না৷
+<translation id="7331962793961469250">যখন ট্রুতে সেট থাকে Chrome ওয়েব স্টোরের অ্যাপের জন্য প্রচারগুলি নতুন ট্যাব পৃষ্ঠায় উপস্থিত হয় না৷
 
-      এই বিকল্পটি মিথ্যাতে সেট করা বা এটিকে সেট না থাকাতে ছেড়ে দেওয়া Chrome ওয়েব দোকান অ্যাপসের জন্য প্রচারগুলি নতুন ট্যাব পৃষ্ঠায় উপস্থিত করাবে</translation>
+      এই বিকল্পটি মিথ্যাতে সেট করা বা এটিকে সেট না থাকাতে ছেড়ে দেওয়া Chrome ওয়েব স্টোর অ্যাপের জন্য প্রচারগুলি নতুন ট্যাব পৃষ্ঠায় উপস্থিত করাবে</translation>
 <translation id="7332963785317884918">এই নীতিটির অনুমোদিত নয়। <ph name="PRODUCT_OS_NAME" /> সবসময় 'RemoveLRU'ক্লিন-আপ কৌশল ব্যবহার করবে।
 
       <ph name="PRODUCT_OS_NAME" /> ডিভাইসগুলিতে স্বয়ংক্রিয় ক্লিন-আপ আচরণ নিয়ন্ত্রণ করে। যখন ডিস্কের মুক্ত স্থান কিছু ডিস্ক স্থান অ্যাকাউন্ট ফিরিয়ে আনার জন্য জটিল স্তরে পৌঁছায় তখন স্বয়ংক্রিয় ক্লিন-আপ কাজ করে।
@@ -3061,7 +3061,7 @@
 বা  '61.0 ' র মতো একটি ভার্সন প্রিফিক্সও হতে পারে  </translation>
 <translation id="8544375438507658205"><ph name="PRODUCT_FRAME_NAME" />-এর ডিফল্টHTML পরিবেশক</translation>
 <translation id="8549772397068118889">সামগ্রী প্যাকগুলির বাইরের সাইটগুলি পরিদর্শন করার সময় সর্তক করুন</translation>
-<translation id="8566842294717252664">নতুন ট্যাব পৃষ্ঠা এবং অ্যাপ্লিকেশান লঞ্চার থেকে ওয়েব দোকানটি লুকায়</translation>
+<translation id="8566842294717252664">নতুন ট্যাব পৃষ্ঠা এবং অ্যাপ লঞ্চার থেকে ওয়েব স্টোরটি লুকায়</translation>
 <translation id="8586528890725660268">এমন প্রিন্টারের বিষয়ে উল্লেখ করে যেটি কোনও ব্যবহারকারী ব্যবহার করতে পারবেন না।
 
       শুধুমাত্র <ph name="BULK_PRINTERS_ACCESS_MODE" /> এর জন্য <ph name="PRINTERS_BLACKLIST" /> বেছে নেওয়া হলেই এই নীতিটি ব্যবহার করা হয়।
diff --git a/components/policy/resources/policy_templates_ca.xtb b/components/policy/resources/policy_templates_ca.xtb
index 87c5f692a..1e70d28 100644
--- a/components/policy/resources/policy_templates_ca.xtb
+++ b/components/policy/resources/policy_templates_ca.xtb
@@ -230,6 +230,13 @@
       Si cal mantenir la compatibilitat amb un servidor amb errors, es pot establir el valor "tls1.1" a la política. És un recurs temporal que no treu la necessitat de reparar el servidor ràpidament.</translation>
 <translation id="1864269674877167562">Si aquesta política s'estableix en una cadena en blanc o no està configurada, <ph name="PRODUCT_OS_NAME" /> no mostrarà una opció d'emplenament automàtic durant el flux d'inici de sessió de l'usuari.
       Si aquesta política s'estableix en una cadena que representa un nom de domini, <ph name="PRODUCT_OS_NAME" /> mostrarà una opció de compleció automàtica durant l'inici de sessió de l'usuari que li permetrà escriure només el nom d'usuari, sense l'extensió del nom del domini. L'usuari podrà substituir aquesta extensió del nom del domini.</translation>
+<translation id="1864382791685519617">Activa la predicció de xarxa a <ph name="PRODUCT_NAME" /> i impedeix que els usuaris canviïn aquesta opció de configuració.
+
+      Controla la baixada prèvia de DNS, així com la connexió i la renderització prèvies de TCP i d'SSL de les pàgines web.
+
+      Si estableixes aquesta política, els usuaris no podran canviar ni substituir aquesta opció de configuració a <ph name="PRODUCT_NAME" />.
+
+      Si aquesta política no s'estableix, la predicció de xarxa s'activarà però els usuaris podran canviar-la.</translation>
 <translation id="1865417998205858223">Permisos clau</translation>
 <translation id="186719019195685253">Acció que s'ha d'emprendre quan s'està inactiu mentre s'està connectat al CA</translation>
 <translation id="187819629719252111">Permet que <ph name="PRODUCT_NAME" /> mostri diàlegs de selecció de fitxers per permetre l'accés als fitxers locals de l'equip. Si activeu aquest paràmetre, els usuaris podran obrir els diàlegs de selecció de fitxers de la manera habitual. Si el desactiveu, cada vegada que un usuari dugui a terme una acció que provoqui l'obertura d'un diàleg de selecció de fitxers (com ara la importació d'adreces d'interès, la pujada de fitxers, el desament d'enllaços, etc.), li apareixerà un missatge que serà com si l'usuari fes clic a Cancel·la al diàleg de selecció de fitxers. Si no definiu aquest paràmetre, els usuaris podran obrir diàlegs de selecció de fitxers de la manera habitual.</translation>
@@ -321,13 +328,13 @@
 <translation id="2082205219176343977">Configura la versió mínima de Chrome que es permet al dispositiu.</translation>
 <translation id="209586405398070749">Canal estable</translation>
 <translation id="2098658257603918882">Activa la creació d'informes d'ús i de dades relacionades amb bloqueigs</translation>
-<translation id="2111016292707172233">Permet que la funció Tocar per cercar estigui disponible a la visualització de contingut a <ph name="PRODUCT_NAME" />.
+<translation id="2111016292707172233">Permet que la funció Toca per cercar estigui disponible a la visualització de contingut a <ph name="PRODUCT_NAME" />.
 
-      Si actives aquesta opció, l'usuari veurà la funció Tocar per cercar i podrà activar-la i desactivar-la.
+Si actives aquesta opció, l'usuari veurà la funció Toca per cercar i podrà activar-la i desactivar-la.
 
-      Si desactives aquesta opció, la funció Tocar per cercar estarà totalment desactivada.
+Si desactives aquesta opció, la funció Toca per cercar estarà totalment desactivada.
 
-      Deixar aquesta política sense establir és igual que activar l'opció, amb el funcionament descrit abans.</translation>
+Deixar aquesta política sense establir és igual que activar l'opció, amb el funcionament descrit abans.</translation>
 <translation id="2113068765175018713">Limita el temps d'activitat del dispositiu mitjançant el reinici automàtic</translation>
 <translation id="2127599828444728326">Permet les notificacions en aquests llocs</translation>
 <translation id="2131902621292742709">Retard d'atenuació de pantalla quan s'utilitza bateria</translation>
@@ -685,6 +692,7 @@
       Si aquesta política no es defineix, es pressuposa que s'aplica <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Nombre màxim de connexions paral·leles al servidor intermediari</translation>
+<translation id="2951386431828317490">Activa Emplenament automàtic per als perfils</translation>
 <translation id="2956777931324644324">Aquesta política s'ha retirat a partir de <ph name="PRODUCT_NAME" />, versió 36.
 
       Especifica si l'extensió de certificats lligats al domini TLS ha d'estar activada.
@@ -693,6 +701,7 @@
 <translation id="2957506574938329824">No permetis que cap lloc sol·liciti accés a dispositius Bluetooth mitjançant l'API Web Bluetooth</translation>
 <translation id="2957513448235202597">Tipus de compte per a l'autenticació <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Regles d'evitació de servidors intermediaris</translation>
+<translation id="2960128438010718932">Calendari de fases per a aplicar una actualització nova</translation>
 <translation id="2960691910306063964">Activa o desactiva l'autenticació sense PIN per als amfitrions d'accés remot</translation>
 <translation id="2976002782221275500">Indica el temps sense activitat per part de l'usuari després del qual la pantalla s'atenua quan el dispositiu funciona amb bateria.
 
@@ -733,6 +742,7 @@
       Tant si la política s'estableix com si no, els usuaris no poden canviar la configuració de l'optimització WPAD.</translation>
 <translation id="3072045631333522102">Estalvi de pantalla per utilitzar a la pantalla d'inici de sessió en mode de venta</translation>
 <translation id="3072847235228302527">Defineix els Termes i condicions d'un compte local del dispositiu</translation>
+<translation id="3077183141551274418">Activa o desactiva els cicles de vida de les pestanyes</translation>
 <translation id="3086995894968271156">Configura el receptor de Cast a <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Permet definir una llista de patrons d'URL que especifiquin llocs web que poden mostrar imatges.
 
@@ -998,7 +1008,7 @@
      Especifica les extensions que s'instal·len automàticament per a l'usuari de la demostració en els dispositius en mode de venda. Aquestes extensions es desen al dispositiu i es poden instal·lar fora de línia, després de la instal·lació.
 
       Cada entrada de la llista conté un diccionari que ha d'incloure l'identificador de l'extensió al camp "extension-id" i l'URL d'actualització al camp "update-url".</translation>
-<translation id="3874773863217952418">Activa Tocar per cercar</translation>
+<translation id="3874773863217952418">Activa Toca per cercar</translation>
 <translation id="3877517141460819966">Mode d'autenticació de dos factors integrat</translation>
 <translation id="388237772682176890">Aquesta política es considera obsoleta a M53 i s'ha suprimit a M54, perquè el protocol SPDY/3.1 ja no s'admet.
 
@@ -1283,6 +1293,11 @@
       Aquests suggeriments s'obtenen dels servidors de Google de manera remota.
 
       Si aquesta opció de configuració s'estableix en "false", no s'obtindran ni es mostraran suggeriments.</translation>
+<translation id="4788252609789586009">Activa la funció Emplenament automàtic de <ph name="PRODUCT_NAME" /> i permet que els usuaris emplenin la informació de targetes de crèdit automàticament als formularis web amb dades emmagatzemades anteriorment.
+
+      Si es desactiva aquesta opció, Emplenament automàtic mai no suggerirà ni emplenarà la informació de targetes de crèdit, ni tampoc desarà la informació addicional de targetes de crèdit que l'usuari enviï mentre navega pel web.
+
+      Si s'activa aquesta opció o no s'hi defineix cap valor, l'usuari podrà controlar el funcionament d'Emplenament automàtic amb les targetes de crèdit a la IU.</translation>
 <translation id="4791031774429044540">Activa la funció d'accessibilitat del cursor gran.
 
           Si el valor d'aquesta política s'estableix com a vertader, el cursor gran sempre estarà activat.
@@ -1405,6 +1420,11 @@
       Si aquesta política s'estableix com a verdadera, <ph name="PRODUCT_OS_NAME" /> impedirà que el dispositiu s'iniciï en mode de desenvolupador. El sistema no s'iniciarà i mostrarà una pantalla d'error quan l'opció de desenvolupador estigui activada.
 
       Si aquesta política no es defineix o s'estableix com a falsa, el mode de desenvolupador continuarà disponible al dispositiu.</translation>
+<translation id="520403427390290017">La funció de cicles de vida de les pestanyes recupera la CPU i, a llarg termini, la memòria associades amb pestanyes en execució que fa molt de temps que no s'han utilitzat. Per fer-ho, primer es limiten, després es bloquegen i per últim es descarten.
+
+      Si la política s'estableix en "false", els cicles de vida de les pestanyes es desactivaran i es deixarà que totes les pestanyes s'executin normalment.
+
+      Si la política s'estableix en "true" o es deixa sense especificar, els cicles de vida de les pestanyes s'activaran.</translation>
 <translation id="5208240613060747912">Us permet definir una llista de patrons d'URL que especifiquen els llocs en què no està permès mostrar notificacions. Si no es defineix aquesta política, s'utilitzarà el valor global predeterminat per a tots els llocs tant de la política "DefaultNotificationsSetting", si es defineix, com d'un altre tipus de configuració personal de l'usuari.</translation>
 <translation id="5219844027738217407">En el cas de les aplicacions per a Android, aquesta política afecta només el micròfon. Quan s'estableix en "true", es desactiva el micròfon en totes les aplicacions per a Android, sense cap excepció.</translation>
 <translation id="523505283826916779">Configuració d'accessibilitat</translation>
@@ -1450,6 +1470,11 @@
 
           Si aquesta política es defineix com a "false", els usuaris no podran emetre contingut al seu dispositiu. Si es defineix com a "true", els usuaris podran emetre contingut. Si no es defineix, els usuaris no podran emetre contingut en dispositius de Chrome OS inscrits, però sí que ho podran fer en dispositius no inscrits.</translation>
 <translation id="5330684698007383292">Permet que <ph name="PRODUCT_FRAME_NAME" /> gestioni els tipus de contingut següents</translation>
+<translation id="5360146044009867539">Activa la funció Emplenament automàtic de <ph name="PRODUCT_NAME" /> i permet que els usuaris emplenin la informació de perfils i d'adreces automàticament als formularis web amb dades emmagatzemades anteriorment.
+
+      Si es desactiva aquesta opció, Emplenament automàtic mai no suggerirà ni emplenarà la informació d'adreces, ni tampoc desarà la informació addicional d'adreces que l'usuari enviï mentre navega pel web.
+
+      Si s'activa aquesta opció o no s'hi defineix cap valor, l'usuari podrà controlar el funcionament d'Emplenament automàtic amb les adreces a la IU.</translation>
 <translation id="5365946944967967336">Mostra el botó Pàgina d'inici a la barra d'eines</translation>
 <translation id="5366745336748853475">Et permet definir una llista de patrons d'URL en què s'especifiquin els llocs web per als quals se selecciona un certificat de client automàticament a la pantalla d'inici de sessió del marc que allotja el flux SAML, en cas que el lloc web sol·liciti un certificat. Per exemple, es pot configurar un certificat per a tot el dispositiu per oferir-lo al proveïdor d'identitat SAML.
 
@@ -2128,6 +2153,15 @@
 
           Si aquesta configuració està desactivada, aquesta funció no estarà disponible.</translation>
 <translation id="7275334191706090484">Adreces d'interès gestionades</translation>
+<translation id="729492886167634859">Aquesta política defineix una llista de percentatges que definiran quina part dels dispositius <ph name="PRODUCT_OS_NAME" /> a l'UO cal actualitzar cada setmana a partir del dia en què l'actualització es detecti per primer cop. El moment de detecció és posterior al de publicació, ja que podria passar una estona entre que es publica l'actualització i el dispositiu cerca actualitzacions.
+
+      L'enèsim valor de la llista s'utilitzarà com el percentatge de dispositius que han de completar l'actualització a la versió següent durant l'enèsima setmana després d'haver detectat l'actualització. Per exemple, si es detecta una actualització avui, el primer valor de la llista defineix el percentatge de dispositius de l'UO que s'han d'actualitzar a aquesta versió abans no passi una setmana a partir d'avui. El segon valor defineix el percentatge de dispositius de l'UO que s'han d'actualitzar a aquesta versió abans no passin dues setmanes a partir d'avui, etc.
+
+      Si es defineix un valor per a aquesta política, les actualitzacions ignoraran la política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> i seguiran aquesta.
+
+      Si aquesta llista està buida, les actualitzacions no es faran per fases, sinó que s'aplicaran tenint en compte altres polítiques de dispositius.
+
+      Aquesta política no s'aplica als canvis de canal.</translation>
 <translation id="7295019613773647480">Activa els usuaris supervisats</translation>
 <translation id="7301543427086558500">Especifica una llista d'URL alternatius que es poden fer servir per extreure termes de cerca del motor de cerca. Els URL han de contenir la cadena <ph name="SEARCH_TERM_MARKER" />, que s'utilitzarà per extreure els termes de cerca.
 
@@ -2577,6 +2611,12 @@
 
           Per veure exemples de patrons, consulteu l'enllaç https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Desactiva el desament de l'historial de navegació</translation>
+<translation id="8498293625012059298">Configura l'URL per canviar la contrasenya (només esquemes HTTP i HTTPS). El servei de protecció de contrasenyes enviarà els usuaris a aquest URL perquè canviïn la contrasenya després que vegin un advertiment al navegador.
+      Perquè <ph name="PRODUCT_NAME" /> pugui capturar correctament l'empremta digital de la nova contrasenya en aquesta pàgina per canviar de contrasenya, assegura't que la pàgina segueixi les directrius descrites a https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Si aquesta opció de configuració està activada, el servei de protecció de contrasenyes enviarà els usuaris a aquest URL perquè canviïn la contrasenya després que vegin un advertiment al navegador.
+      Si aquesta opció de configuració està desactivada o no s'estableix, el servei de protecció de contrasenyes enviarà els usuaris a https://myaccounts.google.com perquè canviïn la contrasenya.
+      Aquesta política no està disponible en instàncies de Windows que no formin part d'un domini que pertanyi a <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Configuració predeterminada (els usuaris la poden sobreescriure)</translation>
 <translation id="8507835864888987300">Defineix una versió de destinació per a les actualitzacions automàtiques.
 
@@ -2629,6 +2669,14 @@
       Si la política es canvia a "false", afectarà l'execució de màquines virtuals noves, però no desactivarà les que ja s'estan executant.
       Si la política no es defineix en un dispositiu gestionat, el dispositiu no tindrà permís per executar màquines virtuals.
       Els dispositius no gestionats tenen permís per executar màquines virtuals.</translation>
+<translation id="8669669491594628013">Et permet controlar l'activació d'un advertiment sobre la protecció de contrasenyes, que avisa els usuaris quan reutilitzen una contrasenya protegida en llocs web potencialment sospitosos.
+
+      Pots utilitzar les polítiques PasswordProtectionLoginURLs i PasswordProtectionChangePasswordURL per configurar quina contrasenya vols protegir.
+
+      Si aquesta política s'estableix en "PasswordProtectionWarningOff", no es mostrarà cap advertiment sobre la protecció de contrasenyes.
+      Si aquesta política s'estableix en "PasswordProtectionWarningOnPasswordReuse", l'advertiment sobre la protecció de contrasenyes es mostrarà quan l'usuari reutilitzi la seva contrasenya protegida en un lloc web que no es trobi a la llista blanca.
+      Si aquesta política s'estableix en "PasswordProtectionWarningOnPhishingReuse", l'advertiment sobre la protecció de contrasenyes es mostrarà quan l'usuari reutilitzi la seva contrasenya protegida en un lloc web de pesca.
+      Si aquesta política es deixa sense establir, el servei de protecció de contrasenyes només protegirà les contrasenyes de Google, però l'usuari podrà canviar aquesta opció de configuració.</translation>
 <translation id="8672321184841719703">Versió objectiu de l'actualització automàtica</translation>
 <translation id="867410340948518937">U2F (segon factor universal)</translation>
 <translation id="8685024486845674965">L'advertiment sobre la protecció de contrasenyes s'activa quan es reutilitza una contrasenya</translation>
diff --git a/components/policy/resources/policy_templates_cs.xtb b/components/policy/resources/policy_templates_cs.xtb
index f368792..0d295b8 100644
--- a/components/policy/resources/policy_templates_cs.xtb
+++ b/components/policy/resources/policy_templates_cs.xtb
@@ -222,6 +222,13 @@
       Pokud je třeba zajistit kompatibilitu s chybným serverem, lze nastavit hodnotu „tls1.1“. Jedná se však o nouzové řešení a server by měl být co nejrychleji opraven.</translation>
 <translation id="1864269674877167562">Pokud tato zásada není nastavena nebo je nastavena na prázdný textový řetězec, <ph name="PRODUCT_OS_NAME" /> během procesu přihlášení nezobrazí možnost automatického doplňování.
       Pokud je tato zásada nastavena na textový řetězec, který představuje název domény, <ph name="PRODUCT_OS_NAME" /> během procesu přihlášení zobrazí možnost automatického doplňování a uživatel bude moci zadat pouze uživatelské jméno bez přípony s názvem domény. Příponu s názvem domény uživatel bude moci přepsat.</translation>
+<translation id="1864382791685519617">Aktivuje v prohlížeči <ph name="PRODUCT_NAME" /> předvídání akcí sítě a brání uživatelům ve změně tohoto nastavení.
+
+Tato zásada ovlivňuje předběžné načítání záznamů DNS, předběžná připojení TCP a SSL a předběžné vykreslování webových stránek.
+
+Pokud tuto zásadu nastavíte, uživatelé ji v prohlížeči <ph name="PRODUCT_NAME" /> nebudou moci změnit ani přepsat.
+
+Pokud tuto zásadu ponecháte nenastavenou, bude předvídání akcí sítě aktivováno, ale uživatelé nastavení budou moci změnit.</translation>
 <translation id="1865417998205858223">Klíčová oprávnění</translation>
 <translation id="186719019195685253">Akce, která bude provedena, pokud bude dosaženo limitu doby nečinnosti při provozu na síťové napájení</translation>
 <translation id="187819629719252111">Umožňuje přistupovat k místním souborům v počítači tím, že aplikaci <ph name="PRODUCT_NAME" /> povolí, aby zobrazovala dialogová okna pro výběr souboru. 
@@ -685,6 +692,7 @@
       Pokud tato zásada není nastavena, předpokládá se použití možnosti <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maximální počet současných připojení k proxy serveru</translation>
+<translation id="2951386431828317490">Povoluje automatické vyplňování pro profily</translation>
 <translation id="2956777931324644324">Podpora této zásady byla ve verzi 36 prohlížeče <ph name="PRODUCT_NAME" /> ukončena.
 
       Určuje, zda má být povoleno rozšíření certifikátů svázaných s doménami.
@@ -693,6 +701,7 @@
 <translation id="2957506574938329824">Nedovolit žádnému webu požadovat přístup k zařízením Bluetooth pomocí rozhraní Web Bluetooth API</translation>
 <translation id="2957513448235202597">Typ účtu pro ověření protokolu <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Pravidla vynechání proxy serveru</translation>
+<translation id="2960128438010718932">Plán zavádění nové aktualizace po etapách</translation>
 <translation id="2960691910306063964">Aktivovat nebo deaktivovat ověřování bez kódu PIN u hostitelů vzdáleného přístupu</translation>
 <translation id="2976002782221275500">Udává dobu nečinnosti uživatele, po které bude při napájení z baterie snížen jas obrazovky.
 
@@ -732,6 +741,7 @@
       Nezávisle na tom, zda je tato zásada nastavena nebo jak je nastavena, uživatelé nastavení optimalizace WPAD nemohou změnit.</translation>
 <translation id="3072045631333522102">Spořič obrazovky, který bude použit na přihlašovací obrazovce v režimu pro obchody</translation>
 <translation id="3072847235228302527">Nastavit smluvní podmínky pro účet v zařízení</translation>
+<translation id="3077183141551274418">Povolí nebo zakáže životní cykly karet</translation>
 <translation id="3086995894968271156">Nakonfigurujte přijímač Cast ve službě <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Umožňuje nastavit seznam vzorů adres URL webových stránek, které mají povoleno zobrazovat obrázky.
 
@@ -1300,6 +1310,11 @@
       Tyto návrhy se načítají vzdáleně ze serverů Google.
 
       Pokud je tato zásada nastavená na hodnotu false, návrhy se načítat ani zobrazovat nebudou.</translation>
+<translation id="4788252609789586009">Aktivuje v prohlížeči <ph name="PRODUCT_NAME" /> funkci Automatické vyplňování a umožňuje uživatelům automaticky ve webových formulářích vyplňovat informace o platebních kartách pomocí dříve uložených údajů.
+
+      Pokud je toto nastavení zakázáno, nebude automatické vyplňování navrhovat ani vyplňovat informace o platebních kartách a nebude ani ukládat další informace o platebních kartách, které uživatel při prohlížení webu odešle.
+
+      Pokud je toto nastavení zapnuto nebo nemá žádnou hodnotu, uživatel bude moci automatické vyplňování pro platební karty ovládat v uživatelském rozhraní.</translation>
 <translation id="4791031774429044540">Aktivuje funkci usnadnění přístupu pomocí velkého kurzoru.
 
 Pokud je tato zásada nastavena na hodnotu true, velký kurzor bude vždy aktivní.
@@ -1437,6 +1452,11 @@
       Pokud je tato zásada nastavena na hodnotu true, systém <ph name="PRODUCT_OS_NAME" /> zabrání spuštění zařízení v režimu pro vývojáře. Po zapnutí přepínače pro vývojáře se systém odmítne spustit a zobrazí se obrazovka s chybou.
 
       Pokud tato zásada není nastavena nebo je nastavena na hodnotu false, režim pro vývojáře bude v zařízení nadále k dispozici.</translation>
+<translation id="520403427390290017">Funkce životních cyklů karet umožňuje znovu získat kapacitu procesoru a případně také paměť obsazenou spuštěnými kartami, které již dlouhou dobu nebyly použity. Takovým kartám se nejdříve omezí prostředky, poté se zmrazí a nakonec se zahodí.
+
+      Je-li tato zásada nastavena na hodnotu false, jsou životní cykly karet zakázány a všechny karty budou běžně ponechány spuštěné.
+
+      Pokud je tato zásada nastavena na hodnotu true nebo není zadána, je funkce životního cyklu karet povolena.</translation>
 <translation id="5208240613060747912">Umožňuje nastavit seznam vzorů adres URL webových stránek, které nemají povoleno zobrazovat oznámení.
 
          Pokud zásadu nenastavíte, použije se pro všechny webové stránky globální výchozí hodnota buď ze zásady DefaultNotificationsSetting (pokud je nastavena), nebo z osobního nastavení uživatele.</translation>
@@ -1484,6 +1504,11 @@
 
           Je-li tato zásada nastavena na hodnotu False, uživatelé do svého zařízení nebudou moci odesílat obsah. Je-li tato zásada nastavena na hodnotu True, uživatelé obsah odesílat mohou. Pokud tato zásada není nastavena, uživatelé nemohou odesílat obsah do zaregistrovaných zařízení se systémem Chrome OS, ale do nezaregistrovaných zařízení jej odesílat mohou.</translation>
 <translation id="5330684698007383292">Umožnit pluginu <ph name="PRODUCT_FRAME_NAME" /> zpracovávat následující typy obsahu</translation>
+<translation id="5360146044009867539">Aktivuje v prohlížeči <ph name="PRODUCT_NAME" /> funkci Automatické vyplňování a umožňuje uživatelům automaticky ve webových formulářích vyplňovat informace o profilu a adresách pomocí dříve uložených údajů.
+
+      Pokud je toto nastavení zakázáno, automatické vyplňování nebude navrhovat ani vyplňovat informace o adresách a nebude ani ukládat další informace o adresách, které uživatel při prohlížení webu odešle.
+
+      Pokud je toto nastavení zapnuto nebo nemá žádnou hodnotu, uživatel bude moci automatické vyplňování adres ovládat v uživatelském rozhraní.</translation>
 <translation id="5365946944967967336">Zobrazit na liště tlačítko Domů</translation>
 <translation id="5366745336748853475">Umožňuje zadat seznam vzorů adres URL webů, pro které se na přihlašovací obrazovce v rámci procesu SAML automaticky vybere certifikát klienta, pokud o něj daný web požádá. Tuto zásadu lze využít například k nakonfigurování certifikátu pro celé zařízení, který bude předkládán poskytovateli identity SAML.
 
@@ -2194,6 +2219,15 @@
 
           Pokud je toto nastavení deaktivováno, tato funkce nebude dostupná.</translation>
 <translation id="7275334191706090484">Spravované záložky</translation>
+<translation id="729492886167634859">Tato zásada určuje seznam procentuálních podílů zařízení se systémem <ph name="PRODUCT_OS_NAME" /> v organizační jednotce, která se aktualizují každý týden ode dne prvního objevení aktualizace. Čas objevení je pozdější než čas publikování aktualizace, protože zařízení může dostupnost aktualizací zkontrolovat až nějakou dobu po publikování aktualizace.
+
+      N-tá hodnota v seznamu se použije jako procento zařízení, na kterých má být aktualizace na další verzi provedena v n-tém týdnu po objevení aktualizace. Pokud je například aktualizace objevena dnes, první hodnota v seznamu udává, jaké procento zařízení v organizační jednotce se má na danou verzi aktualizovat do jednoho týdne od dnes. Druhá hodnota udává, jaké procento zařízení v organizační jednotce se má na danou verzi aktualizovat do dvou týdnu od dnes, atd.
+
+      Pokud je v této zásadě definovaná nějaká hodnota, budou aktualizace ignorovat zásadu <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> a budou se namísto ní řídit touto zásadou.
+
+      Je-li seznam prázdný, aktualizace se nebudou zavádět na etapy, ale podle jiných zásad zařízení.
+
+      Tato zásada se nevztahuje na přepínání mezi kanály.</translation>
 <translation id="7295019613773647480">Aktivovat dozorovaného uživatele</translation>
 <translation id="7301543427086558500">Určuje seznam alternativních adres URL, ze kterých lze získat vyhledávací dotazy pro vyhledávač. Tyto adresy URL by měly obsahovat řetězec <ph name="SEARCH_TERM_MARKER" />, podle kterého budou vyhledávací dotazy rozpoznány.
 
@@ -2643,6 +2677,12 @@
 
           Ukázkové vzory naleznete na stránce https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Deaktivovat ukládání historie prohlížeče</translation>
+<translation id="8498293625012059298">Konfiguruje adresu URL pro změnu hesla (pouze schémata HTTP a HTTPS). Po zobrazení upozornění v prohlížeči bude služba pro ochranu hesel odesílat uživatele na tuto adresu URL, aby si změnili heslo.
+      Aby prohlížeč <ph name="PRODUCT_NAME" /> na stránce pro změnu hesla mohl správně pořídit otisk nového hesla, měla by odpovídat pokynům na stránce https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Pokud je toto nastavení zapnuto, bude služba pro ochranu hesel uživatele po zobrazení upozornění v prohlížeči odesílat na tuto adresu URL, aby si změnili heslo.
+      Pokud je toto nastavení vypnuto nebo není nastaveno, bude služba pro ochranu hesel uživatele za účelem změny hesla odesílat na adresu https://accounts.google.com.
+      V instancích systému Windows, které nejsou zařazeny do domény <ph name="MS_AD_NAME" />, tato zásada není k dispozici.</translation>
 <translation id="8499172469244085141">Výchozí nastavení (uživatelé mohou zásady přepsat)</translation>
 <translation id="8507835864888987300">Nastavuje cílovou verzi pro automatické aktualizace.
 
@@ -2696,6 +2736,14 @@
       Při změně na hodnotu False se na spouštění nových virtuálních počítačů použije nové nastavení, ale již spuštěné virtuální počítače nebudou ukončeny.
       Pokud na spravovaném zařízení není nastavena tato zásada, je v něm spouštění virtuálních počítačů zakázáno.
       Na zařízeních, která nejsou spravována, je spouštění virtuálních počítačů povoleno.</translation>
+<translation id="8669669491594628013">Umožňuje ovládat spouštění upozornění ohledně ochrany hesla. Upozornění ohledně ochrany hesla se uživatelům zobrazí, pokud své chráněné heslo použijí na potenciálně podezřelých webech.
+
+      Pomocí zásad PasswordProtectionLoginURLs a PasswordProtectionChangePasswordURL můžete nakonfigurovat, která hesla mají být chráněna.
+
+      Pokud tuto zásadu nastavíte na hodnotu PasswordProtectionWarningOff, upozornění ohledně ochrany hesla se zobrazovat nebude.
+      Pokud tuto zásadu nastavíte na hodnotu PasswordProtectionWarningOnPasswordReuse, zobrazí se upozornění ohledně ochrany hesla, když uživatel použije chráněné heslo na webu, který není uveden na seznamu povolených.
+      Pokud tuto zásadu nastavíte na hodnotu PasswordProtectionWarningOnPhishingReuse, zobrazí se upozornění ohledně ochrany hesla, když uživatel použije chráněné heslo na phishingovém webu.
+      Pokud tuto zásadu ponecháte nenastavenou, bude služba pro ochranu hesel chránit pouze hesla Google, ale uživatel toto nastavení bude moci změnit.</translation>
 <translation id="8672321184841719703">Cílová verze automatické aktualizace</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Ochrana hesla – upozornění je spouštěno opětovným použitím hesla</translation>
diff --git a/components/policy/resources/policy_templates_da.xtb b/components/policy/resources/policy_templates_da.xtb
index 1c34574..4d17a4c 100644
--- a/components/policy/resources/policy_templates_da.xtb
+++ b/components/policy/resources/policy_templates_da.xtb
@@ -238,6 +238,13 @@
 Hvis kompatabilitet med en fejlbehæftet server skal opretholdes, kan denne politik indstilles til "tls1.1". Dette er en midlertidig løsning, og problemet med serveren bør snarest udbedres.</translation>
 <translation id="1864269674877167562">Hvis denne politik er angivet med en tom streng, eller hvis den ikke er konfigureret, viser <ph name="PRODUCT_OS_NAME" /> ikke et forslag til autofuldførelse under loginflowet.
       Hvis denne politik er angivet med en streng, der repræsenterer et domænenavn, viser <ph name="PRODUCT_OS_NAME" /> et forslag til autofuldførelse under loginflowet. Dette giver brugeren mulighed for kun at skulle angive sit brugernavn uden hele domænenavnet. Brugeren kan overskrive dette domænenavn.</translation>
+<translation id="1864382791685519617">Aktiverer netværksforudsigelse i <ph name="PRODUCT_NAME" /> og forhindrer brugerne i at ændre denne indstilling.
+
+      Dette styrer både forudhentning af DNS og forhåndstilslutning af TCP og SSL samt forhåndsgengivelse af websider.
+
+      Hvis du indstiller denne politik, kan brugerne ikke ændre eller tilsidesætte denne indstilling i <ph name="PRODUCT_NAME" />.
+
+      Hvis denne politik ikke indstilles, aktiveres netværksforudsigelse, men brugeren vil kunne ændre det.</translation>
 <translation id="1865417998205858223">Vigtige tilladelser</translation>
 <translation id="186719019195685253">Den handling, der igangsættes ved inaktiv forsinkelse på fast strømforsyning</translation>
 <translation id="187819629719252111">Giver adgang til lokale filer på maskinen ved at lade <ph name="PRODUCT_NAME" /> vise dialogbokse om filvalg. Hvis du aktiverer denne indstilling, kan brugerne åbne dialogbokse om filvalg som normalt. Hvis du deaktiverer denne indstilling, vises der en meddelelse i stedet for en dialogboks om filvalg, hver gang brugeren foretager en handling, der ville have frembragt en dialogboks om filvalg (såsom at importere bogmærker, uploade filer, gemme links osv.), og det antages, at brugeren har trykket på Annuller i dialogboksen om filvalg. Hvis denne indstilling ikke angives, kan brugerne åbne dialogbokse om filvalg som normalt.</translation>
@@ -694,6 +701,7 @@
       Hvis politikken ikke angives, anvendes <ph name="PRINTERS_ALLOW_ALL" /> som standard.
       </translation>
 <translation id="2908277604670530363">Maksimalt antal samtidige forbindelser til proxyserveren</translation>
+<translation id="2951386431828317490">Aktivér AutoFyld for profiler</translation>
 <translation id="2956777931324644324">Denne politik udgik fra og med <ph name="PRODUCT_NAME" /> version 36.
 
       Angiver, om udvidelsen for certifikater, der er bundet af TLS-domænet, skal aktiveres.
@@ -702,6 +710,7 @@
 <translation id="2957506574938329824">Tillad ikke, at websites får adgang til Bluetooth-enheder via Web Bluetooth API</translation>
 <translation id="2957513448235202597">Kontotype for <ph name="HTTP_NEGOTIATE" />-godkendelse</translation>
 <translation id="2959898425599642200">Regler for omgåelse af proxy</translation>
+<translation id="2960128438010718932">Tidsplan for trinvis anvendelse af en ny opdatering</translation>
 <translation id="2960691910306063964">Aktivér eller deaktiver godkendelse uden pinkode for hosts til fjernadgang</translation>
 <translation id="2976002782221275500">Angiver den tid uden brugerinput, der aktiverer skærmnedtoning, når batteriet bruges.
 
@@ -742,6 +751,7 @@
       Uafhængigt af om politikken er indstillet og hvordan, kan indstillingen for WPAD-optimering ikke ændres af brugerne.</translation>
 <translation id="3072045631333522102">Pauseskærm, som skal bruges på loginskærmen i detailtilstand</translation>
 <translation id="3072847235228302527">Konfigurer servicevilkårene for en enhedslokal konto</translation>
+<translation id="3077183141551274418">Aktiverer eller deaktiverer livscyklus for faner</translation>
 <translation id="3086995894968271156">Konfigurer Cast Receiver i <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Giver dig mulighed for at oprette en liste over webadressemønstre, der angiver websites, som må vise billeder.
 
@@ -1301,6 +1311,11 @@
       Disse forslag hentes fra Googles servere.
 
       Hvis denne indstilling er angivet som Falsk, hentes eller vises forslag ikke.</translation>
+<translation id="4788252609789586009">Aktiverer funktionen AutoFyld for <ph name="PRODUCT_NAME" /> og giver brugerne mulighed for automatisk at udfylde webformularer med betalingskortoplysninger, der er gemt tidligere.
+
+      Hvis denne indstilling er deaktiveret, foreslår eller udfylder AutoFyld aldrig betalingskortoplysninger, og der gemmes heller ikke yderligere betalingskortoplysninger, som brugeren muligvis indsender, når vedkommende er på nettet.
+
+      Hvis denne indstilling er aktiveret, kan brugeren administrere den overordnede AutoFyld-funktion for betalingskort i brugerfladen.</translation>
 <translation id="4791031774429044540">Aktivér hjælpefunktionen Stor markør.
 
           Hvis denne politik angives som sand, vil den store markør altid være aktiveret.
@@ -1424,6 +1439,11 @@
 Hvis denne politik er sat til True (sandt), forhindrer <ph name="PRODUCT_OS_NAME" /> enheden i at starte i udviklertilstand. Systemet vil nægte at starte og vise en fejlskærm, når udviklerkontakten slås til. 
 
 Hvis denne politik slås fra eller indstilles til False (falsk), er udviklertilstand fortsat tilgængelig for enheden.</translation>
+<translation id="520403427390290017">Funktionen til fanelivscyklus frigør CPU og i sidste ende hukommelse, der er knyttet til kørsel af faner, der ikke er brugt i lang tid. Hastigheden på sådanne faner bliver først reguleret, hvorefter fanerne fryses og til sidst kasseres.
+
+      Hvis politikken er indstillet til falsk, deaktiveres fanelivscyklusser, og alle faner kører videre som normalt.
+
+      Hvis politikken er indstillet til sand, eller hvis der ikke angives en værdi, aktiveres fanelivscyklusser.</translation>
 <translation id="5208240613060747912">Giver dig mulighed for at oprette en liste med webadressemønstre, der angiver websites, hvor det ikke er tilladt at vise underretninger. Hvis denne politik ikke angives, anvendes den globale standardværdi på alle websites, enten fra politikken "DefaultNotificationsSetting", hvis den er indstillet, eller brugerens personlige konfiguration.</translation>
 <translation id="5219844027738217407">I Android-apps påvirker denne politik kun mikrofonen. Når denne politik angives som Sand, slås lyden på mikrofonen fra i alle Android-apps uden undtagelser.</translation>
 <translation id="523505283826916779">Indstillinger for hjælpefunktioner</translation>
@@ -1469,6 +1489,11 @@
 
           Hvis denne politik er angivet som Falsk, kan brugerne ikke caste indhold til deres enheder. Hvis denne politik er angivet som Sand, kan brugerne caste indhold. Hvis politikken ikke er angivet, kan brugerne ikke caste indhold til tilmeldte Chrome OS-enheder, men de kan caste indhold til enheder, der ikke er tilmeldt.</translation>
 <translation id="5330684698007383292">Tillad, at <ph name="PRODUCT_FRAME_NAME" /> håndterer følgende indholdstyper</translation>
+<translation id="5360146044009867539">Aktiverer funktionen AutoFyld for <ph name="PRODUCT_NAME" /> og giver brugerne mulighed for automatisk at udfylde webformularer med profil- og adresseoplysninger, der er gemt tidligere.
+
+      Hvis denne indstilling er deaktiveret, foreslår eller udfylder AutoFyld aldrig adresseoplysninger, og der gemmes heller ikke yderligere adresseoplysninger, som brugeren muligvis indsender, når vedkommende er på nettet.
+
+      Hvis denne indstilling er aktiveret, kan brugeren administrere den overordnede AutoFyld-funktion for adresser i brugerfladen.</translation>
 <translation id="5365946944967967336">Vis knap til startsiden på værktøjslinjen</translation>
 <translation id="5366745336748853475">Giver dig mulighed for at angive en liste over webadressemønstre, som angiver websites, hvor der automatisk vælges et klientcertifikat på loginskærmen i rammen for SAML-flowet, hvis websitet anmoder om et certifikat. Et eksempel på brug er at konfigurere et certifikat for hele enheden, der præsenteres for SAML IdP.
 
@@ -2150,6 +2175,15 @@
 
           Hvis denne indstilling deaktiveres, vil denne funktion ikke være tilgængelig.</translation>
 <translation id="7275334191706090484">Administrerede bogmærker</translation>
+<translation id="729492886167634859">Denne politik angiver en liste over procentdele, som definerer den andel af <ph name="PRODUCT_OS_NAME" />-enheder i organisationsenheden, der skal opdateres pr. uge fra og med den dag, hvor opdateringen først opdages. Tidspunktet, hvor opdateringen opdages, ligger efter tidspunktet hvor opdateringen udgives, da der kan gå et stykke tid, efter opdateringen udgives, til enheden tjekker efter opdateringer.
+
+      Den n'te værdi på listen bruges som procentdelen af enheder, der skal færdiggøre opdateringen til den næste version i den n'te uge, efter opdateringen er opdaget. Hvis en opdatering f.eks. opdages i dag, definerer den første værdi på listen procentdelen af enheder i organisationsenheden, der skal opdatere til den pågældende version senest en uge fra i dag. Den anden værdi definerer procentdelen af enheder i organisationsenheden, der skal opdatere til den pågældende version senest to uger fra i dag osv.
+
+      Hvis der er angivet en værdi for denne politik, ignorerer opdateringer politikken <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> og følger denne politik i stedet.
+
+      Hvis denne liste er tom, anvendes ingen trindeling eller opdateringer i andre enhedspolitikker.
+
+      Denne politik gælder ikke for kanalskift.</translation>
 <translation id="7295019613773647480">Aktivér administrerede brugere</translation>
 <translation id="7301543427086558500">Angiver en liste over alternative webadresser, som kan bruges til at udlede søgetermer fra søgemaskinen. Webadresserne bør indeholde strengen <ph name="SEARCH_TERM_MARKER" />, som bruges til at udlede søgetermer.
 
@@ -2599,6 +2633,12 @@
 
           Se eksempler på mønstre på https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Deaktiver lagring af browserhistorik</translation>
+<translation id="8498293625012059298">Konfigurer den webadresse, hvor adgangskoden skal ændres (kun HTTP- og HTTPS-skemaer). Tjenesten til adgangskodebeskyttelse sender brugerne til denne webadresse, hvor de kan ændre deres adgangskode, efter at have set en advarsel i browseren.
+      Før <ph name="PRODUCT_NAME" /> kan registrere fingeraftrykket for den nye adgangskode korrekt på denne side til ændring af adgangskoder, skal du sørge for, at din side til ændring af adgangskoder følger retningslinjerne på https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Hvis denne indstilling er aktiveret, sender tjenesten til beskyttelse af adgangskoder brugerne til denne webadresse, så de kan ændre adgangskoden, efter først at have set en advarsel i browseren.
+      Hvis denne indstilling er deaktiveret, eller der ikke er angivet en værdi, sender tjenesten til beskyttelse af adgangskoder brugerne til https://myaccounts.google.com, så adgangskoden kan ændres der.
+      Denne politik er ikke tilgængelig i Windows-forekomster, der ikke er tilknyttet et <ph name="MS_AD_NAME" />-domæne.</translation>
 <translation id="8499172469244085141">Standardindstillinger (brugere kan tilsidesætte)</translation>
 <translation id="8507835864888987300">Angiver en målversion for automatiske opdateringer.
 
@@ -2652,6 +2692,14 @@
       Hvis indstillingen for politikken ændres til Falsk, gælder den for start af nye virtuelle maskiner, men den stopper ikke virtuelle maskiner, som allerede kører.
       Hvis politikken ikke angives på en administreret enhed, har enheden ikke tilladelse til at køre virtuelle maskiner.
       Enheder, der ikke administreres, har tilladelse til at køre virtuelle maskiner.</translation>
+<translation id="8669669491594628013">Giver dig mulighed for at styre aktivering af advarsler om adgangskodebeskyttelse. Adgangskodebeskyttelse advarer brugerne, når de bruger deres beskyttede adgangskode på potentielt mistænkelige websites.
+
+      Du kan bruge politikkerne "PasswordProtectionLoginURLs" og "PasswordProtectionChangePasswordURL" til at konfigurere, hvilken adgangskode der skal beskyttes.
+
+      Hvis denne politik er indstillet til "PasswordProtectionWarningOff", vises der ingen advarsel om adgangskodebeskyttelse.
+      Hvis denne politik er indstillet til "PasswordProtectionWarningOnPasswordReuse", vises en advarsel om adgangskodebeskyttelse, når brugeren genbruger sin beskyttede adgangskode på et website, der ikke er hvidlistet.
+      Hvis denne politik er indstillet til "PasswordProtectionWarningOnPhishingReuse", vises en advarsel om adgangskodebeskyttelse, når brugeren genbruger sin beskyttede adgangskode på et phishing-website.
+      Hvis politikken ikke er indstillet, beskytter adgangskodebeskyttelse kun Google-adgangskoder, men brugeren kan ændre denne indstilling.</translation>
 <translation id="8672321184841719703">Målversion for automatiske opdateringer</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Advarsler via adgangskodebeskyttelse udløses ved genbrug af adgangskoder</translation>
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb
index ce58982..ce925094 100644
--- a/components/policy/resources/policy_templates_de.xtb
+++ b/components/policy/resources/policy_templates_de.xtb
@@ -231,6 +231,13 @@
       Wenn die Kompatibilität mit einem fehlerträchtigen Server aufrechterhalten werden muss, kann "tls1.1" eingestellt werden. Hierbei handelt es sich um einen provisorischen Wert und der Server sollte schnell repariert werden.</translation>
 <translation id="1864269674877167562">Wenn diese Richtlinie nicht konfiguriert ist oder ein leerer String dafür festgelegt ist, zeigt <ph name="PRODUCT_OS_NAME" /> keine Option für die automatische Vervollständigung beim Anmeldevorgang an.
       Wenn die Richtlinie für einen String festgelegt ist, der einen Domainnamen darstellt, zeigt <ph name="PRODUCT_OS_NAME" /> eine Option für die automatische Vervollständigung beim Anmeldevorgang des Nutzers an, sodass er seinen Namen ohne die Domain-Namenserweiterung eingeben kann. Der Nutzer kann diese Domain-Namenserweiterung überschreiben.</translation>
+<translation id="1864382791685519617">Durch diese Richtlinie wird die Netzwerkvorhersage in <ph name="PRODUCT_NAME" /> aktiviert und es wird verhindert, dass die Einstellung von Nutzern geändert wird.
+
+      Hiermit werden DNS-Vorabruf, TCP- und SSL-Vorverbindung sowie das Pre-Rendering von Webseiten gesteuert.
+
+      Wenn Sie diese Richtlinie festlegen, können Nutzer diese Einstellung in <ph name="PRODUCT_NAME" /> nicht ändern oder überschreiben.
+
+      Ist die Richtlinie nicht konfiguriert, wird die Netzwerkvorhersage aktiviert, kann jedoch vom Nutzer geändert werden.</translation>
 <translation id="1865417998205858223">Hauptberechtigungen</translation>
 <translation id="186719019195685253">Auszuführende Aktion beim Erreichen der Leerlaufverzögerung während des Wechselstrombetriebs</translation>
 <translation id="187819629719252111">Ermöglicht den Zugriff auf lokale Dateien auf dem Computer, indem <ph name="PRODUCT_NAME" /> gestattet wird, Dialogfelder zur Dateiauswahl anzuzeigen. Wenn Sie diese Einstellung aktivieren, können Nutzer Dateiauswahl-Dialogfelder wie gewohnt öffnen. Ist diese Einstellung deaktiviert, wird bei jeder Nutzeraktion, bei der ein Dialogfeld zur Dateiauswahl angezeigt werden würde, etwa beim Importieren von Lesezeichen, beim Hochladen von Dateien oder beim Speichern von Links, stattdessen eine Meldung angezeigt. Außerdem wird davon ausgegangen, dass der Nutzer im Dialogfeld zur Dateiauswahl auf "Abbrechen" geklickt hat. Wenn diese Einstellung nicht konfiguriert ist, so können Nutzer Dateiauswahl-Dialogfelder wie gewohnt öffnen.</translation>
@@ -688,6 +695,7 @@
       Wenn diese Richtlinie nicht konfiguriert ist, wird angenommen, dass <ph name="PRINTERS_ALLOW_ALL" /> ausgewählt ist.
       </translation>
 <translation id="2908277604670530363">Maximale Anzahl gleichzeitiger Verbindungen zum Proxyserver</translation>
+<translation id="2951386431828317490">AutoFill für Profile aktivieren</translation>
 <translation id="2956777931324644324">Diese Richtlinie wird seit <ph name="PRODUCT_NAME" /> Version 36 nicht mehr verwendet.
 
       Sie legt fest, ob die Erweiterung für domaingebundene TLS-Zertifikate aktiviert werden soll.
@@ -696,6 +704,7 @@
 <translation id="2957506574938329824">Keine Website darf Zugriff auf Bluetooth-Geräte über die Web Bluetooth API anfordern</translation>
 <translation id="2957513448235202597">Kontotyp für die <ph name="HTTP_NEGOTIATE" />-Authentifizierung</translation>
 <translation id="2959898425599642200">Proxy-Umgehungsregeln</translation>
+<translation id="2960128438010718932">Staging-Zeitplan zum Anwenden eines neuen Updates</translation>
 <translation id="2960691910306063964">Authentifizierung ohne PIN für Hosts für den Remotezugriff aktivieren oder deaktivieren</translation>
 <translation id="2976002782221275500">Hiermit wird angegeben, nach welchem Zeitraum ohne Nutzereingabe der Bildschirm im Akkubetrieb abgedunkelt wird.
 
@@ -734,6 +743,7 @@
       Unabhängig davon, ob und wie die Richtlinie festgelegt ist, kann die WPAD-Optimierung nicht von Nutzern verändert werden.</translation>
 <translation id="3072045631333522102">Bildschirmschoner für die Anmeldeseite im Händlermodus</translation>
 <translation id="3072847235228302527">Nutzungsbedingungen für ein lokales Gerätekonto festlegen</translation>
+<translation id="3077183141551274418">Aktiviert oder deaktiviert Tablebenszyklen</translation>
 <translation id="3086995894968271156">Konfigurieren von Cast Receiver in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Ermöglicht die Erstellung einer Liste mit URL-Mustern, die Websites angeben, denen das Anzeigen von Bildern gestattet ist.
 
@@ -1284,6 +1294,11 @@
       Diese Vorschläge werden per Fernzugriff von den Google-Servern abgerufen.
 
       Falls diese Einstellung auf "false" gesetzt ist, werden keine Vorschläge abgerufen oder angezeigt.</translation>
+<translation id="4788252609789586009">Aktiviert die AutoFill-Funktion von <ph name="PRODUCT_NAME" /> und ermöglicht es Nutzern, Kreditkarteninformationen in Webformularen automatisch mit zuvor gespeicherten Informationen ausfüllen zu lassen.
+
+      Wenn diese Einstellung deaktiviert ist, schlägt AutoFill weder Kreditkarteninformationen vor oder füllt sie automatisch aus noch werden zusätzliche Kreditkarteninformationen gespeichert, die der Nutzer während des Surfens im Web möglicherweise sendet.
+
+      Falls diese Einstellung aktiviert ist oder keinen Wert hat, kann der Nutzer die AutoFill-Funktion in der UI für Kreditkarten steuern.</translation>
 <translation id="4791031774429044540">Hiermit wird die Bedienungshilfefunktion für den großen Cursor aktiviert.
 
           Ist diese Richtlinie auf "true" gesetzt, ist der große Cursor immer aktiviert.
@@ -1409,6 +1424,11 @@
       Wenn für diese Richtlinie "True" festgelegt ist, verhindert <ph name="PRODUCT_OS_NAME" />, dass das Gerät im Entwicklermodus gestartet wird. Das System verweigert den Start und es wird ein Fehlerbildschirm angezeigt, wenn der Schalter für Entwickler aktiviert wird.
 
       Wird für diese Richtlinie "False" oder gar nichts festgelegt, bleibt der Entwicklermodus für das Gerät verfügbar.</translation>
+<translation id="520403427390290017">Die Funktion für Tablebenszyklen gibt CPU- und schließlich Speicherkapazitäten wieder frei, die gerade dafür genutzt werden, Tabs auszuführen, die lange nicht verwendet wurden. Dazu wird die Ausführung zuerst gedrosselt, dann angehalten und schließlich endgültig beendet.
+
+      Wenn die Richtlinie auf "false" gesetzt ist, sind Tablebenszyklen deaktiviert und alle Tabs werden weiter normal ausgeführt.
+
+      Falls die Richtlinie auf "true" gesetzt oder nicht konfiguriert ist, sind Tablebenszyklen aktiviert.</translation>
 <translation id="5208240613060747912">Ermöglicht Ihnen die Zusammenstellung einer Liste mit URL-Mustern, die Websites angeben, denen es nicht gestattet ist, Benachrichtigungen anzuzeigen. Wenn diese Richtlinie nicht konfiguriert ist, kommt für alle Websites entweder der globale Standardwert der Richtlinie "DefaultNotificationsSetting", sofern konfiguriert, oder der persönlichen Konfiguration des Nutzers zum Einsatz.</translation>
 <translation id="5219844027738217407">Bei Android-Apps betrifft diese Richtlinie nur das Mikrofon. Wenn diese Richtlinie auf "true" gesetzt ist, wird das Mikrofon ohne Ausnahme für alle Android-Apps stummgeschaltet.</translation>
 <translation id="523505283826916779">Zugänglichkeitseinstellungen</translation>
@@ -1454,6 +1474,11 @@
 
           Wird diese Richtlinie auf "false" gesetzt, ist es Nutzern nicht möglich, Inhalte auf ihr Gerät zu streamen. Wird diese Richtlinie auf "true" gesetzt, können Nutzer Inhalte streamen. Ist diese Richtlinie nicht definiert, so können Nutzer zwar keine Inhalte an angemeldete Chrome OS-Geräte streamen, aber an andere Geräte.</translation>
 <translation id="5330684698007383292">Verarbeitung der folgenden Inhaltstypen durch <ph name="PRODUCT_FRAME_NAME" /> zulassen</translation>
+<translation id="5360146044009867539">Aktiviert die AutoFill-Funktion von <ph name="PRODUCT_NAME" /> und ermöglicht es Nutzern, Profil- und Adressinformationen in Webformularen automatisch mit zuvor gespeicherten Informationen ausfüllen zu lassen.
+
+      Wenn diese Einstellung deaktiviert ist, schlägt AutoFill weder Adressinformationen vor oder füllt sie automatisch aus noch werden zusätzliche Adressinformationen gespeichert, die der Nutzer während des Surfens im Web möglicherweise sendet.
+
+      Falls diese Einstellung aktiviert ist oder keinen Wert hat, kann der Nutzer die AutoFill-Funktion in der UI für Adressen steuern.</translation>
 <translation id="5365946944967967336">Startseiten-Schaltfläche auf Symbolleiste anzeigen</translation>
 <translation id="5366745336748853475">Ermöglicht Ihnen die Zusammenstellung einer Liste mit URL-Mustern, die Websites angeben, für die auf dem Anmeldebildschirm im Frame, der den SAML-Flow hostet, automatisch ein Clientzertifikat ausgewählt wird, wenn die Website ein Zertifikat anfordert. Zum Beispiel kann damit ein geräteübergreifendes Zertifikat konfiguriert werden, das dem SAML IdP präsentiert wird.
 
@@ -2144,6 +2169,15 @@
 
           Bei Deaktivierung dieser Einstellung ist diese Funktion nicht verfügbar.</translation>
 <translation id="7275334191706090484">Verwaltete Lesezeichen</translation>
+<translation id="729492886167634859">Durch diese Richtlinie wird eine Liste mit Prozentwerten festgelegt, die angeben, welcher Anteil der <ph name="PRODUCT_OS_NAME" />-Geräte in der OE pro Woche aktualisiert werden, nachdem das Update entdeckt wurde. Der Abstand zwischen Entdeckungszeitpunkt und Veröffentlichungszeitpunkt hängt davon ab, wann das Gerät nach Updates sucht.
+
+      Der n-te Wert in der Liste gibt den Prozentsatz an Geräten an, die in der n-ten Woche, nachdem das Update entdeckt wurde, auf die nächste Version aktualisiert werden. Wenn zum Beispiel heute ein Update entdeckt wird, steht der erste Wert in der Liste für den Prozentsatz der Geräte in der OE, die bis heute in einer Woche auf diese Version aktualisiert werden sollen. Der zweite Wert gibt den Prozentsatz der Geräte in der OE an, die in der darauffolgenden zweiten Woche aktualisiert werden sollen, und so weiter.
+
+      Wenn für diese Richtlinie ein Wert festgelegt ist, folgen Updates dieser Richtlinie und ignorieren die Richtlinie <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />.
+
+      Falls diese Liste leer ist, erfolgt kein Staging und Updates werden gemäß anderen Geräterichtlinien angewendet.
+
+      Diese Richtlinie gilt nicht für Kanalwechsel.</translation>
 <translation id="7295019613773647480">Betreute Nutzer aktivieren</translation>
 <translation id="7301543427086558500">Definiert eine Liste alternativer URLs, mit denen Suchbegriffe aus der Suchmaschine extrahiert werden können. Die URLs sollten den String <ph name="SEARCH_TERM_MARKER" /> enthalten, der zum Extrahieren der Suchbegriffe verwendet wird.
 
@@ -2586,6 +2620,12 @@
 
           Beispielmuster finden Sie unter https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Speichern des Browserverlaufs deaktivieren</translation>
+<translation id="8498293625012059298">Mit dieser Richtlinie wird die URL zur Passwortänderung konfiguriert (nur HTTP- und HTTPS-Schemas). Nutzer, in deren Browser eine Warnung angezeigt wurde, werden vom Passwortschutzdienst an diese URL weitergeleitet, damit sie ihr Passwort ändern können.
+      Ihre Anmeldeseiten müssen den Richtlinien unter https://www.chromium.org/developers/design-documents/create-amazing-password-forms entsprechen, damit Fingerabdrücke zur Autorisierung in <ph name="PRODUCT_NAME" /> richtig erfasst werden können.
+
+      Wenn diese Einstellung aktiviert ist, leitet der Passwortschutzdienst Nutzer, in deren Browser eine Warnung angezeigt wurde, an diese URL weiter, damit sie ihr Passwort ändern können.
+      Falls diese Einstellung deaktiviert oder nicht konfiguriert ist, leitet der Passwortschutzdienst Nutzer an https://myaccounts.google.com weiter, damit sie ihr Passwort ändern können.
+      Diese Richtlinie ist nur in Windows-Instanzen verfügbar, die mit einer <ph name="MS_AD_NAME" />-Domain verbunden sind.</translation>
 <translation id="8499172469244085141">Standardeinstellungen (können vom Nutzer überschrieben werden)</translation>
 <translation id="8507835864888987300">Legt eine Zielversion für automatische Aktualisierungen fest.
 
@@ -2639,6 +2679,14 @@
       Wird diese Richtlinie auf "false" geändert, wirkt sich dies nur auf den Start neuer virtueller Maschinen aus. Virtuelle Maschinen, die bereits laufen, werden davon nicht beendet.
       Ist diese Richtlinie auf einem verwalteten Gerät nicht konfiguriert, darf das Gerät virtuelle Maschinen nicht ausführen.
       Auf nicht verwalteten Geräten dürfen virtuelle Maschinen ausgeführt werden.</translation>
+<translation id="8669669491594628013">Mit dieser Richtlinie können Sie die Auslösung der Passwortschutzwarnung steuern. Durch diese Meldung werden Nutzer gewarnt, wenn sie ihr geschütztes Passwort auf potenziell verdächtigen Websites wiederverwenden.
+
+      Mithilfe der Richtlinien "PasswordProtectionLoginURLs" und "PasswordProtectionChangePasswordURL" können Sie konfigurieren, welches Passwort geschützt werden soll.
+
+      Wenn diese Richtlinie auf "PasswordProtectionWarningOff" gesetzt ist, wird keine Passwortschutzwarnung angezeigt.
+      Ist diese Richtlinie auf "PasswordProtectionWarningOnPasswordReuse" eingestellt, wird die Passwortschutzwarnung angezeigt, falls der Nutzer sein geschütztes Passwort auf einer Website wiederverwendet, die nicht auf der weißen Liste steht.
+      Falls diese Richtlinie auf "PasswordProtectionWarningOnPhishingReuse" gesetzt ist, wird die Passwortschutzwarnung angezeigt, wenn der Nutzer sein geschütztes Passwort auf einer Phishingwebsite wiederverwendet.
+      Ist diese Richtlinie nicht konfiguriert, schützt der Passwortschutzdienst nur Google-Passwörter, aber der Nutzer kann diese Einstellung ändern.</translation>
 <translation id="8672321184841719703">Automatische Aktualisierung auf Zielversion</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Die Passwortschutzwarnung wird durch die Wiederverwendung eines Passworts ausgelöst</translation>
diff --git a/components/policy/resources/policy_templates_el.xtb b/components/policy/resources/policy_templates_el.xtb
index 553d5795f..214f7089 100644
--- a/components/policy/resources/policy_templates_el.xtb
+++ b/components/policy/resources/policy_templates_el.xtb
@@ -240,6 +240,13 @@
       Αλλιώς, αν πρέπει να διατηρηθεί η συμβατότητα με έναν προβληματικό διακομιστή, αυτή η πολιτική μπορεί να οριστεί ως "tls1.1". Αυτή είναι μια πρόχειρη λύση και ο διακομιστής θα πρέπει να διορθωθεί το συντομότερο.</translation>
 <translation id="1864269674877167562">Αν αυτή η πολιτική οριστεί σε κενή συμβολοσειρά ή δεν διαμορφωθεί, το <ph name="PRODUCT_OS_NAME" /> δεν θα εμφανίσει επιλογή αυτόματης συμπλήρωσης κατά τη διάρκεια της ροής σύνδεσης χρήστη.
       Αν αυτή η πολιτική οριστεί σε συμβολοσειρά που αντιπροσωπεύει κάποιο όνομα τομέα, το <ph name="PRODUCT_OS_NAME" /> θα εμφανίσει μια επιλογή αυτόματης συμπλήρωσης κατά τη διάρκεια της σύνδεσης χρήστη, επιτρέποντας στο χρήστη να πληκτρολογήσει μόνο το όνομα χρήστη χωρίς την επέκταση του ονόματος τομέα. Ο χρήστης θα μπορεί να αντικαταστήσει αυτήν την επέκταση ονόματος τομέα.</translation>
+<translation id="1864382791685519617">Ενεργοποιεί την πρόβλεψη δικτύου στο <ph name="PRODUCT_NAME" /> και αποτρέπει τη δυνατότητα αλλαγής αυτής της ρύθμισης από τους χρήστες.
+
+      Αυτό ελέγχει την προαναζήτηση DNS, καθώς και την προσύνδεση και την προαπόδοση TCP και SSL των ιστοσελίδων.
+
+      Εάν ορίσετε αυτήν την πολιτική, οι χρήστες δεν θα μπορούν να αλλάξουν ή να παρακάμψουν τη συγκεκριμένη ρύθμιση στο <ph name="PRODUCT_NAME" />.
+
+      Εάν αυτή η πολιτική δεν οριστεί, η πρόβλεψη δικτύου θα ενεργοποιηθεί, αλλά ο χρήστης θα έχει τη δυνατότητα να την αλλάξει.</translation>
 <translation id="1865417998205858223">Βασικά δικαιώματα</translation>
 <translation id="186719019195685253">Ενέργεια σε περίπτωση καθυστέρησης αδράνειας κατά τη χρήση του μετασχηματιστή</translation>
 <translation id="187819629719252111">Επιτρέπει την πρόσβαση σε τοπικά αρχεία στον υπολογιστή, επιτρέποντας την εμφάνιση των παράθυρων διαλόγου επιλογής αρχείων από το <ph name="PRODUCT_NAME" />.
@@ -711,6 +718,7 @@
       Εάν δεν οριστεί αυτή η πολιτική, θεωρείται ότι ισχύει η επιλογή <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Μέγιστος αριθμός ταυτόχρονων συνδέσεων στον διακομιστή μεσολάβησης</translation>
+<translation id="2951386431828317490">Ενεργοποίηση της Αυτόματης Συμπλήρωσης για προφίλ</translation>
 <translation id="2956777931324644324">Αυτή η πολιτική έχει αποσυρθεί από την έκδοση 36 του <ph name="PRODUCT_NAME" /> και έπειτα.
 
       Καθορίζει εάν θα πρέπει να ενεργοποιείται η επέκταση πιστοποιητικών TLS βάσει τομέα.
@@ -719,6 +727,7 @@
 <translation id="2957506574938329824">Να μην επιτρέπεται σε κανέναν ιστότοπο η υποβολή αιτημάτων πρόσβασης για συσκευές Bluetooth μέσω του API Bluetooth ιστού</translation>
 <translation id="2957513448235202597">Τύπος λογαριασμού για έλεγχο ταυτότητας <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Κανόνες παράκαμψης διακομιστή μεσολάβησης</translation>
+<translation id="2960128438010718932">Το χρονοδιάγραμμα προετοιμασίας για την εφαρμογή μιας νέας ενημέρωσης</translation>
 <translation id="2960691910306063964">Ενεργοποίηση ή απενεργοποίηση του ελέγχου ταυτότητας χωρίς PIN για κεντρικούς υπολογιστές απομακρυσμένης πρόσβασης</translation>
 <translation id="2976002782221275500">Καθορίζει τη χρονική διάρκεια χωρίς εισαγωγή από το χρήστη, μετά από την οποία η οθόνη θαμπώνει κατά τη λειτουργία με μπαταρία.
 
@@ -761,6 +770,7 @@
       Ανεξάρτητα από το εάν και πώς έχει οριστεί αυτή η πολιτική, η ρύθμιση της βελτιστοποίησης WPAD δεν είναι δυνατό να αλλάξει από τους χρήστες.</translation>
 <translation id="3072045631333522102">Προφύλαξη οθόνης για χρήση στην οθόνη σύνδεσης σε εμπορική λειτουργία</translation>
 <translation id="3072847235228302527">Καθορισμός των Όρων Παροχής Υπηρεσιών για λογαριασμό συσκευής/τοπικό λογαριασμό</translation>
+<translation id="3077183141551274418">Ενεργοποιεί ή απενεργοποιεί τους κύκλους ζωής καρτελών</translation>
 <translation id="3086995894968271156">Διαμορφώστε τον Δέκτη Google Cast στο <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Σας επιτρέπει να ορίσετε μια λίστα μοτίβων URL που καθορίζουν ιστοτόπους στους οποίους επιτρέπεται να προβάλλονται εικόνες.
 
@@ -1334,6 +1344,11 @@
       Αυτές οι προτάσεις ανακτώνται απομακρυσμένα από τους διακομιστές της Google.
 
       Εάν αυτή η ρύθμιση οριστεί ως ψευδής, δεν θα ανακτώνται και δεν θα προβάλλονται προτάσεις.</translation>
+<translation id="4788252609789586009">Ενεργοποιεί τη λειτουργία Αυτόματης Συμπλήρωσης του <ph name="PRODUCT_NAME" /> και επιτρέπει στους χρήστες την αυτόματη συμπλήρωση στοιχείων πιστωτικών καρτών σε φόρμες ιστού με χρήση πληροφοριών που αποθηκεύτηκαν στο παρελθόν.
+
+      Εάν αυτή η ρύθμιση απενεργοποιηθεί, η Αυτόματη Συμπλήρωση δεν θα προτείνει ποτέ ή δεν θα συμπληρώνει τα στοιχεία των πιστωτικών καρτών, ούτε θα αποθηκεύει επιπλέον στοιχεία πιστωτικών καρτών που μπορεί να υποβάλει ο χρήστης κατά την περιήγηση στον ιστό.
+
+      Εάν αυτή η ρύθμιση ενεργοποιηθεί ή δεν έχει κάποια τιμή, ο χρήστης θα έχει τη δυνατότητα να ελέγξει την Αυτόματη Συμπλήρωση για πιστωτικές κάρτες στη διεπαφή χρήστη.</translation>
 <translation id="4791031774429044540">Ενεργοποίηση της δυνατότητας προσβασιμότητας μεγάλου δείκτη στην οθόνη σύνδεσης.
 
           Αν αυτή η πολιτική έχει τιμή true, ο μεγάλος δείκτης θα ενεργοποιηθεί όταν εμφανίζεται η οθόνη σύνδεσης.
@@ -1471,6 +1486,11 @@
       Εάν αυτή η πολιτική οριστεί Αληθής, το <ph name="PRODUCT_OS_NAME" /> θα παρεμποδίσει την εκκίνηση της συσκευής σε λειτουργία προγραμματιστή. Το σύστημα θα αρνηθεί την εκκίνηση και θα εμφανίσει μια οθόνη σφάλματος όταν είναι ενεργοποιημένος ο διακόπτης προγραμματιστή.
 
       Εάν αυτή η πολιτική δεν οριστεί ή οριστεί Μη αληθής, η λειτουργία προγραμματιστή θα παραμείνει διαθέσιμη για τη συσκευή.</translation>
+<translation id="520403427390290017">Η λειτουργία κύκλων ζωής καρτελών ανακτά τη CPU και τελικά τη μνήμη που συσχετίζονται με τις καρτέλες εκτέλεσης οι οποίες δεν έχουν χρησιμοποιηθεί για μεγάλο χρονικό διάστημα ως εξής: Αρχικά τις ενεργοποιεί, κατόπιν τις σταθεροποιεί και τέλος τις απορρίπτει.
+
+      Εάν η πολιτική οριστεί σε ψευδή, τότε οι κύκλοι ζωής καρτελών θα απενεργοποιηθούν και όλες οι καρτέλες θα συνεχίσουν να εκτελούνται κανονικά.
+
+      Εάν η πολιτική οριστεί σε αληθή ή παραμείνει ακαθόριστη, τότε οι κύκλοι ζωής καρτελών θα ενεργοποιηθούν.</translation>
 <translation id="5208240613060747912">Σας επιτρέπει να ορίσετε μια λίστα με τα μοτίβα διευθύνσεων url που προσδιορίζουν τους ιστότοπους στους οποίους δεν επιτρέπεται να εμφανίζουν ειδοποιήσεις.
 
           Αν αυτή η πολιτική δεν οριστεί θα χρησιμοποιηθεί η καθολική προεπιλεγμένη τιμή για όλους τους ιστότοπους είτε από την πολιτική ''DefaultNotificationsSetting'' εφόσον οριστεί, είτε από την προσωπική διαμόρφωση του χρήστη.</translation>
@@ -1518,6 +1538,11 @@
 
           Εάν αυτή η πολιτική οριστεί ως False (ψευδής), οι χρήστες δεν θα μπορούν να μεταδώσουν περιεχόμενο στη συσκευή τους. Εάν αυτή η πολιτική οριστεί ως True (αληθής), επιτρέπεται η μετάδοση περιεχομένου από τους χρήστες. Εάν αυτή η πολιτική δεν οριστεί, δεν επιτρέπεται στους χρήστες να μεταδίδουν περιεχόμενο σε εγγεγραμμένες συσκευές Chrome OS, αλλά η μετάδοση περιεχομένου επιτρέπεται σε μη εγγεγραμμένες συσκευές.</translation>
 <translation id="5330684698007383292">Να επιτρέπεται στο <ph name="PRODUCT_FRAME_NAME" /> η διαχείριση των παρακάτω τύπων περιεχομένου</translation>
+<translation id="5360146044009867539">Ενεργοποιεί τη λειτουργία Αυτόματης Συμπλήρωσης του <ph name="PRODUCT_NAME" /> και επιτρέπει στους χρήστες την αυτόματη συμπλήρωση προφίλ και πληροφοριών διεύθυνσης σε φόρμες ιστού που με χρήση πληροφοριών που αποθηκεύτηκαν στο παρελθόν.
+
+      Εάν αυτή η ρύθμιση απενεργοποιηθεί, η Αυτόματη Συμπλήρωση δεν θα προτείνει ποτέ ή δεν θα συμπληρώνει τις πληροφορίες διεύθυνσης, ούτε θα αποθηκεύει επιπλέον πληροφορίες διεύθυνσης που μπορεί να υποβάλει ο χρήστης κατά την περιήγηση στον ιστό.
+
+      Εάν αυτή η ρύθμιση ενεργοποιηθεί ή δεν έχει τιμή, ο χρήστης θα έχει τη δυνατότητα να ελέγξει την Αυτόματη Συμπλήρωση για διευθύνσεις στη διεπαφή χρήστη.</translation>
 <translation id="5365946944967967336">Εμφάνιση του κουμπιού Αρχικής σελίδας στη γραμμή εργαλείων</translation>
 <translation id="5366745336748853475">Σας επιτρέπει να προσδιορίσετε μια λίστα προτύπων url που καθορίζουν ιστοτόπους για τους οποίους επιλέγεται αυτόματα ένα πιστοποιητικό πελάτη στην οθόνη σύνδεσης στο πλαίσιο που φιλοξενεί τη ροή SAML, εάν ο ιστότοπος απαιτεί κάποιο πιστοποιητικό. Ένα παράδειγμα χρήσης είναι η διαμόρφωση ενός πιστοποιητικού εύρους συσκευής προκειμένου να παρουσιάζεται στο SAML IdP.
 
@@ -2239,6 +2264,15 @@
 
           Εάν απενεργοποιηθεί αυτή η πολιτική, αυτή η λειτουργία δεν θα είναι διαθέσιμη.</translation>
 <translation id="7275334191706090484">Διαχειριζόμενοι σελιδοδείκτες</translation>
+<translation id="729492886167634859">Αυτή η πολιτική προσδιορίζει μια λίστα ποσοστών που προσδιορίζουν το κλάσμα των συσκευών <ph name="PRODUCT_OS_NAME" /> στη ΜΟ (OU) για ενημέρωση ανά εβδομάδα, με έναρξη από την ημέρα που εντοπίζεται για πρώτη φορά η ενημέρωση. Ο χρόνος εντοπισμού είναι μεταγενέστερος από τον δημοσιευμένο χρόνο ενημέρωσης, καθώς θα μπορούσε να περάσει κάποιο χρονικό διάστημα από τη δημοσίευση της ενημέρωσης ώσπου η συσκευή να πραγματοποιήσει έλεγχο για ενημερώσεις.
+
+      Η νιοστή τιμή στη λίστα θα χρησιμοποιηθεί ως το ποσοστό των συσκευών που θα πρέπει να ολοκληρώσουν την ενημέρωση στην επόμενη έκδοση, στη νιοστή εβδομάδα μετά τον εντοπισμό της ενημέρωσης. Για παράδειγμα, εάν μια ενημέρωση εντοπιστεί σήμερα, τότε η πρώτη τιμή στη λίστα προσδιορίζει το ποσοστό των συσκευών στη ΜΟ (OU) που θα πρέπει να πραγματοποιήσουν ενημέρωση στη συγκεκριμένη έκδοση μέχρι μία εβδομάδα από σήμερα. Η δεύτερη τιμή προσδιορίζει το ποσοστό των συσκευών στη ΜΟ (OU) που θα πρέπει να πραγματοποιήσουν ενημέρωση στη συγκεκριμένη έκδοση μέχρι 2 εβδομάδες από σήμερα και ούτω καθεξής.
+
+      Εάν υπάρχει τιμή που έχει καθοριστεί για αυτήν την πολιτική, οι ενημερώσεις θα παραβλέψουν την πολιτική <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> και θα ακολουθήσουν τη συγκεκριμένη πολιτική.
+
+      Εάν αυτή η λίστα είναι κενή, δεν θα υπάρχει προετοιμασία και θα εφαρμοστούν ενημερώσεις σύμφωνα με άλλες πολιτικές χρήσης συσκευής.
+
+      Αυτή η πολιτική δεν ισχύει για εναλλαγές καναλιών.</translation>
 <translation id="7295019613773647480">Ενεργοποίηση εποπτευόμενων χρηστών</translation>
 <translation id="7301543427086558500">Καθορίζει μια λίστα εναλλακτικών διευθύνσεων URL που μπορούν να χρησιμοποιηθούν για την εξαγωγή όρων αναζήτησης από τη μηχανή αναζήτησης. Οι διευθύνσεις URL πρέπει να περιλαμβάνουν τη συμβολοσειρά <ph name="SEARCH_TERM_MARKER" />, η οποία θα χρησιμοποιηθεί για να εξαχθούν οι όροι αναζήτησης
 
@@ -2710,6 +2744,12 @@
 
           Για παραδείγματα μοτίβων, ανατρέξτε στη διεύθυνση https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Απενεργοποίηση αποθήκευσης ιστορικού περιήγησης</translation>
+<translation id="8498293625012059298">Διαμορφώστε το URL αλλαγής κωδικού πρόσβασης (μόνο για συνδυασμούς HTTP και HTTPS). Η υπηρεσία προστασίας κωδικού πρόσβασης θα οδηγεί τους χρήστες σε αυτό το URL, για να αλλάξουν τον κωδικό πρόσβασής τους, αφού δουν μια προειδοποίηση στο πρόγραμμα περιήγησης.
+      Προκειμένου το <ph name="PRODUCT_NAME" /> να καταγράψει σωστά το νέο μοναδικό χαρακτηριστικό του κωδικού πρόσβασης σε αυτήν τη σελίδα αλλαγής κωδικού πρόσβασης, βεβαιωθείτε ότι η σελίδα αλλαγής κωδικού πρόσβασης ακολουθεί τις οδηγίες στη διεύθυνση https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Εάν αυτή η ρύθμιση είναι ενεργοποιημένη, τότε η υπηρεσία προστασίας κωδικού πρόσβασης θα οδηγεί τους χρήστες σε αυτό το URL, για να αλλάξουν τον κωδικό πρόσβασής τους, αφού δουν μια προειδοποίηση στο πρόγραμμα περιήγησης.
+      Εάν αυτή η ρύθμιση είναι απενεργοποιημένη ή δεν έχει οριστεί, τότε η υπηρεσία προστασίας κωδικού πρόσβασης θα οδηγεί τους χρήστες στη διεύθυνση https://myaccounts.google.com, για να αλλάξουν τον κωδικό πρόσβασής τους.
+      Αυτή η πολιτική δεν είναι διαθέσιμη σε παρουσίες Windows που δεν συμμετέχουν σε τομέα <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Προεπιλεγμένες ρυθμίσεις (οι χρήστες μπορούν να τις αλλάξουν)</translation>
 <translation id="8507835864888987300">Ορίζει μια έκδοση-στόχου για τις Αυτόματες ενημερώσεις.
 
@@ -2763,6 +2803,14 @@
       Όταν η πολιτική αλλάξει σε False, εφαρμόζεται στην έναρξη νέων εικονικών μηχανημάτων, αλλά δεν τερματίζει τη λειτουργία εικονικών μηχανημάτων που εκτελούνται ήδη.
       Εάν αυτή η πολιτική δεν οριστεί σε μια διαχειριζόμενη συσκευή, δεν επιτρέπεται στη συσκευή να εκτελεί εικονικά μηχανήματα. 
       Επιτρέπεται στις μη διαχειριζόμενες συσκευές να εκτελούν εικονικά μηχανήματα.</translation>
+<translation id="8669669491594628013">Σας δίνει τη δυνατότητα να ελέγξετε την ενεργοποίηση της προειδοποίησης προστασίας κωδικού πρόσβασης. Οι ειδοποιήσεις προστασίας κωδικού πρόσβασης ειδοποιούν τους χρήστες, όταν επαναχρησιμοποιούν τον προστατευμένο κωδικό πρόσβασής τους σε δυνητικά ύποπτους ιστοτόπους.
+
+      Μπορείτε να χρησιμοποιήσετε τις πολιτικές "PasswordProtectionLoginURLs" και "PasswordProtectionChangePasswordURL", για να διαμορφώσετε ποιος κωδικός πρόσβασης θα προστατεύεται.
+
+      Εάν αυτή η πολιτική οριστεί στην επιλογή "PasswordProtectionWarningOff", δεν θα εμφανίζεται προειδοποίηση προστασίας κωδικού πρόσβασης.
+      Εάν αυτή η πολιτική οριστεί στην επιλογή "PasswordProtectionWarningOnPasswordReuse", η προειδοποίηση προστασίας κωδικού πρόσβασης θα εμφανίζεται όταν ο χρήστης επαναχρησιμοποιεί τον προστατευμένο κωδικό πρόσβασής του σε ιστότοπο που δεν είναι στη λίστα επιτρεπόμενων.
+      Εάν αυτή η πολιτική οριστεί στην επιλογή "PasswordProtectionWarningOnPhishingReuse", η προειδοποίηση προστασίας κωδικού πρόσβασης θα εμφανίζεται όταν ο χρήστης επαναχρησιμοποιεί τον προστατευμένο κωδικό πρόσβασής του σε ιστότοπο που χρησιμοποιεί ηλεκτρονικό ψάρεμα (phishing).
+      Εάν δεν οριστεί αυτή η πολιτική, η υπηρεσία προστασίας κωδικού πρόσβασης θα προστατεύει μόνο κωδικούς πρόσβασης Google, αλλά ο χρήστης θα έχει τη δυνατότητα να αλλάξει αυτήν τη ρύθμιση.</translation>
 <translation id="8672321184841719703">Στόχευση έκδοσης αυτόματης ενημέρωσης</translation>
 <translation id="867410340948518937">U2F (Καθολικός δευτερεύων παράγοντας)</translation>
 <translation id="8685024486845674965">Η προειδοποίηση προστασίας κωδικού πρόσβασης ενεργοποιείται από την επαναχρησιμοποίηση του κωδικού πρόσβασης</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 7f3f6fd..9aa4af3 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -235,6 +235,13 @@
       De lo contrario, el valor tls 1.1 puede asignarse a la política si se debe mantener la compatibilidad con un servidor con errores. Esta es una medida provisional y el servidor debería arreglarse rápidamente.</translation>
 <translation id="1864269674877167562">Si se ha asignado una cadena en blanco a la política o si esta no se configura, <ph name="PRODUCT_OS_NAME" /> no mostrará una opción para autocompletar los datos durante el flujo de inicio de sesión del usuario.
       Si se ha asignado una cadena que representa un nombre de dominio a esta política, <ph name="PRODUCT_OS_NAME" /> mostrará dicha opción durante el inicio de sesión del usuario, por lo que este podrá introducir solo su nombre de usuario sin la extensión de nombre de dominio. El usuario podrá anular esta extensión de nombre de dominio.</translation>
+<translation id="1864382791685519617">Habilita la predicción de red en <ph name="PRODUCT_NAME" /> e impide que los usuarios cambien esta configuración.
+
+      Permite controlar tanto la precarga de DNS como la conexión previa de SSL y TCP, así como la carga previa de páginas web.
+
+      Si habilitas esta política, los usuarios no podrán cambiar ni anular esta configuración en <ph name="PRODUCT_NAME" />.
+
+      Si no se habilita, la predicción de red se habilitará, pero los usuarios podrán cambiarla.</translation>
 <translation id="1865417998205858223">Permisos clave</translation>
 <translation id="186719019195685253">Acción a emprender si se alcanza el retraso de inactividad mientras el dispositivo está conectado a la red eléctrica</translation>
 <translation id="187819629719252111">Permite que <ph name="PRODUCT_NAME" /> muestre cuadros de diálogo de selección de archivos para acceder a los archivos locales del ordenador.
@@ -716,6 +723,7 @@
       Si no se establece esta política, se utilizará <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Número máximo de conexiones simultáneas con el servidor proxy</translation>
+<translation id="2951386431828317490">Habilitar la función Autocompletar para perfiles</translation>
 <translation id="2956777931324644324">Esta política no está disponible a partir de la versión 36 de <ph name="PRODUCT_NAME" />.
 
       Especifica si se debe habilitar la extensión de certificados TLS limitados a dominios.
@@ -724,6 +732,7 @@
 <translation id="2957506574938329824">No permitir que los sitios web soliciten acceso a los dispositivos Bluetooth a través de la API Bluetooth web</translation>
 <translation id="2957513448235202597">Tipo de cuenta para la autenticación <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Reglas de omisión de proxy</translation>
+<translation id="2960128438010718932">La programación de lanzamiento progresivo para aplicar una nueva actualización</translation>
 <translation id="2960691910306063964">Habilitar o inhabilitar la autenticación sin PIN para host de acceso remoto</translation>
 <translation id="2976002782221275500">Permite especificar el tiempo transcurrido hasta la atenuación de la pantalla (sin que el usuario realice ninguna acción) cuando el dispositivo funciona con la batería.
 
@@ -763,6 +772,7 @@
       Independientemente de cómo se configure esta política o de si se configura o no, los usuarios no podrán cambiar la opción de configuración de WPAD.</translation>
 <translation id="3072045631333522102">Protector de pantalla a utilizar en la pantalla de inicio de sesión del modo de venta</translation>
 <translation id="3072847235228302527">Establecer las Condiciones de Servicio para una cuenta de dispositivo local</translation>
+<translation id="3077183141551274418">Habilita o inhabilita los ciclos de vida de las pestañas</translation>
 <translation id="3086995894968271156">Configura Cast Receiver en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Permite establecer una lista de patrones de URL para especificar los sitios web que pueden mostrar imágenes.
 
@@ -1342,6 +1352,11 @@
       Estas sugerencias se obtienen de forma remota de los servidores de Google.
 
       Si se le asigna el valor "False", no se obtendrán ni mostrarán sugerencias.</translation>
+<translation id="4788252609789586009">Habilita la función Autocompletar de <ph name="PRODUCT_NAME" /> y permite que los usuarios rellenen automáticamente formularios web con información almacenada anteriormente, como la información de la tarjeta de crédito.
+
+      Si inhabilitas esta opción, la función Autocompletar no hará sugerencias ni rellenará la información de la tarjeta de crédito, y tampoco guardará información adicional de la tarjeta de crédito que el usuario envíe cuando esté navegando por la Web.
+
+      Si habilitas esta opción o no estableces ningún valor, el usuario podrá controlar la función Autocompletar para información de la tarjeta de crédito en la IU.</translation>
 <translation id="4791031774429044540">Habilita la función de accesibilidad del cursor grande.
 
           Si el valor de esta política se establece en True, siempre se habilitará el cursor grande.
@@ -1482,6 +1497,11 @@
       Si esta política está establecida en True, <ph name="PRODUCT_OS_NAME" /> evitará que el dispositivo se inicie en modo de desarrollador. El sistema no se iniciará y mostrará una pantalla de error cuando se active la opción de desarrollador.
 
       Si no se establece esta política o se establece en False, el modo de desarrollador seguirá disponible para el dispositivo.</translation>
+<translation id="520403427390290017">La función de ciclos de vida de las pestañas reclama CPU y, finalmente, memoria asociada a pestañas en ejecución que llevan mucho tiempo sin utilizarse. Primero las limita, después las bloquea y, por último, las descarta.
+
+      Si se le asigna el valor "False" a esta política, se inhabilitarán los ciclos de vida de las pestañas y estas se ejecutarán con normalidad.
+
+      Si se le asigna el valor "True" o no se le asigna ningún valor, se habilitarán los ciclos de vida de las pestañas.</translation>
 <translation id="5208240613060747912">Permite establecer una lista de patrones de URL para especificar los sitios que no pueden mostrar notificaciones.
 
           Si no se establece esta política, se usará para todos los sitios el valor general predeterminado que se indique en la política DefaultNotificationsSetting (si se ha establecido) o el valor personalizado que haya definido el usuario (en caso contrario).</translation>
@@ -1529,6 +1549,11 @@
 
           Si se asigna el valor "False" a esta política, los usuarios no podrán enviar contenido a su dispositivo. Si se le asigna el valor "True", los usuarios podrán enviar contenido. Si no se establece esta política, los usuarios no podrán enviar contenido a los dispositivos Chrome OS registrados, pero sí lo podrán hacer a dispositivos no registrados.</translation>
 <translation id="5330684698007383292">Permitir que <ph name="PRODUCT_FRAME_NAME" /> procese los tipos de contenido que se indican a continuación</translation>
+<translation id="5360146044009867539">Habilita la función Autocompletar de <ph name="PRODUCT_NAME" /> y permite que los usuarios rellenen automáticamente formularios web con información almacenada anteriormente, como la información de la dirección o el perfil.
+
+      Si inhabilitas esta opción, la función Autocompletar no hará sugerencias ni rellenará la información de la dirección, y tampoco guardará información adicional de la dirección que el usuario envíe cuando esté navegando por la Web.
+
+      Si habilitas esta opción o no estableces ningún valor, el usuario podrá controlar la función Autocompletar para información de la dirección en la IU.</translation>
 <translation id="5365946944967967336">Mostrar botón de página principal en la barra de herramientas</translation>
 <translation id="5366745336748853475">Te permite definir una lista de patrones de URL que especifican los sitios web en los que se selecciona automáticamente un certificado de cliente (si se solicita) en la pantalla de inicio de sesión del marco en el que se aloja el flujo SAML. Un ejemplo de uso es configurar un certificado a nivel de dispositivo para presentarlo a un proveedor de identidad SAML.
 
@@ -2253,6 +2278,15 @@
 
           Si no se habilita esta opción, esta función no estará disponible.</translation>
 <translation id="7275334191706090484">Marcadores administrados</translation>
+<translation id="729492886167634859">Esta política define una lista de porcentajes que determinan qué parte de dispositivos <ph name="PRODUCT_OS_NAME" /> de la UO se actualizarán semanalmente a partir del día en el que se descubra la actualización. El momento de descubrimiento es posterior al momento de la publicación de la actualización, ya que puede haber pasado un tiempo desde que se publica la actualización hasta que el dispositivo busca actualizaciones.
+
+      El enésimo valor de la lista indicará el porcentaje de dispositivos que debe completar la actualización a la siguiente versión en la enésima semana posterior al descubrimiento de la actualización. Por ejemplo, si se descubre una actualización hoy, el primer valor de la lista definirá el porcentaje de los dispositivos de la UO que se deben actualizar a esa versión en 2 semanas a partir de hoy.
+
+      Si se ha asignado un valor a esta política, las actualizaciones ignorarán la política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> y seguirán esta.
+
+      Si esta lista está vacía, no se hará un lanzamiento progresivo y las actualizaciones se aplicarán de acuerdo con otras políticas de dispositivos.
+
+      Esta política no se aplica a los cambios de canal.</translation>
 <translation id="7295019613773647480">Habilitar usuarios supervisados</translation>
 <translation id="7301543427086558500">Permite especificar una lista de URL alternativas que se pueden utilizar para extraer términos de búsqueda del motor de búsqueda. Las URL deben incluir la cadena <ph name="SEARCH_TERM_MARKER" />, que se utilizará para extraer los términos de búsqueda.
 
@@ -2724,6 +2758,12 @@
 
           Puedes consultar ejemplos de patrones en la página https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Inhabilitar almacenamiento del historial de navegación</translation>
+<translation id="8498293625012059298">Configura la URL de cambio de contraseñas (solo esquemas HTTP y HTTPS). El servicio de protección de contraseña enviará a los usuarios a esta URL para cambiar sus contraseñas cuando hayan visto una advertencia en el navegador.
+      Para que <ph name="PRODUCT_NAME" /> capture correctamente la nueva huella digital de la contraseña en esta página de cambio de contraseña, la página debe seguir las directrices incluidas en https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Si se habilita esta opción, el servicio de protección de contraseña enviará a los usuarios a esta URL para cambiar sus contraseñas cuando hayan visto una advertencia en el navegador.
+      Si se inhabilita esta opción o no se configura, el servicio de protección de contraseña enviará a los usuarios a la página https://myaccounts.google.com para cambiar su contraseña.
+      Esta política no está disponible en las instancias de Windows que no están vinculadas a un dominio de <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Configuración predeterminada (los usuarios pueden modificarla)</translation>
 <translation id="8507835864888987300">Establece una versión de destino para las actualizaciones automáticas.
 
@@ -2777,6 +2817,14 @@
       Cuando esta política cambia al valor "False", se aplica al iniciar nuevas máquinas virtuales, pero no apaga las máquinas virtuales que ya se estén ejecutando.
       Si no se le asigna ningún valor a esta política en un dispositivo administrado, el dispositivo no puede ejecutar máquinas virtuales.
       Los dispositivos no administrados pueden ejecutar máquinas virtuales.</translation>
+<translation id="8669669491594628013">Permite controlar la activación de la advertencia de protección de contraseña. La protección de contraseña alerta a los usuarios cuando vuelven a utilizar la contraseña protegida en sitios web potencialmente sospechosos.
+
+      Las políticas "PasswordProtectionLoginURLs" y "PasswordProtectionChangePasswordURL" sirven para configurar qué contraseñas se protegen.
+
+      Si se le asigna el valor "PasswordProtectionWarningOff" a esta política, no se mostrará ninguna advertencia de protección de contraseña.
+      Si se le asigna el valor "PasswordProtectionWarningOnPasswordReuse", se mostrará la advertencia de protección de contraseña cuando los usuarios vuelvan a utilizar la contraseña protegida en cualquier sitio web que no esté incluido en la lista blanca.
+      Si se le asigna el valor "PasswordProtectionWarningOnPhishingReuse" a esta política, se mostrará la advertencia de protección de contraseña cuando los usuarios vuelvan a utilizar la contraseña protegida en los sitios web de phishing.
+      Si no se le asigna ningún valor a esta política, el servicio de protección de contraseña solo protegerá las contraseñas de Google, pero el usuario podrá cambiar esta opción.</translation>
 <translation id="8672321184841719703">Versión de destino de actualizaciones automáticas</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">La advertencia de protección de contraseña se activa al reutilizar la contraseña</translation>
diff --git a/components/policy/resources/policy_templates_et.xtb b/components/policy/resources/policy_templates_et.xtb
index c552174..acb56f1 100644
--- a/components/policy/resources/policy_templates_et.xtb
+++ b/components/policy/resources/policy_templates_et.xtb
@@ -240,6 +240,13 @@
       Kui ühilduvus vigadega serveriga peab säilima, võib valida väärtuse „tls1.1”. See on ajutine abinõu ja server tuleb kiiresti parandada.</translation>
 <translation id="1864269674877167562">Kui selle reegli jaoks valitakse tühi string või jäetakse reegel seadistamata, ei näita <ph name="PRODUCT_OS_NAME" /> kasutaja sisselogimisvoos automaatse täitmise valikut.
       Kui selleks reegliks on määratud string, mis esindab domeeni nime, kuvab <ph name="PRODUCT_OS_NAME" /> kasutaja sisselogimisel automaatse täitmise valiku, võimaldades kasutajal sisestada ainult oma kasutajanime ilma domeeninime laiendita. Kasutaja saab selle domeeninime laiendi alistada.</translation>
+<translation id="1864382791685519617">Lubab teenuses <ph name="PRODUCT_NAME" /> võrguprognoosid ja keelab kasutajatel selle seade muutmise.
+
+      See juhib DNS-i eellaadimist, TCP ja SSL-i eelühendamist ning veebilehtede eelrenderdust.
+
+      Kui määrate selle reegli, ei saa kasutajad seda seadet teenuses <ph name="PRODUCT_NAME" /> muuta ega alistada.
+
+      Kui see reegel jäetakse määramata, on võrguprognoosid lubatud, kuid kasutaja saab seda muuta.</translation>
 <translation id="1865417998205858223">Võtmeload</translation>
 <translation id="186719019195685253">Toiming, mis rakendub siis, kui tegevusetuse viivitusaeg saab täis vahelduvvoolu kasutamise ajal</translation>
 <translation id="187819629719252111">Lubab juurdepääsu seadmes olevatele kohalikele failidele, võimaldades rakendusel <ph name="PRODUCT_NAME" /> kuvada failide valimise dialoogiaknaid.
@@ -716,6 +723,7 @@
       Kui see reegel on määramata, kasutatakse väärtust <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Puhverserveri samaaegsete ühenduste maksimaalne arv</translation>
+<translation id="2951386431828317490">Automaattäite lubamine profiilidel</translation>
 <translation id="2956777931324644324">Selle reegli pakkumine lõpetati toote <ph name="PRODUCT_NAME" /> versiooniga 36.
 
       Määrab, kas TLS-i domeenisuunaline sertifikaatide laiendus peab olema lubatud.
@@ -724,6 +732,7 @@
 <translation id="2957506574938329824">Ära luba ühelgi seadmel taotleda Web Bluetooth API kaudu juurdepääsu Bluetoothi seadmetele</translation>
 <translation id="2957513448235202597">Üksuse <ph name="HTTP_NEGOTIATE" /> autentimisel kasutatava konto tüüp</translation>
 <translation id="2959898425599642200">Puhverserveri möödumisreeglid</translation>
+<translation id="2960128438010718932">Kontrollimise ajakava uue värskenduse rakendamiseks</translation>
 <translation id="2960691910306063964">Kaugjuurdepääsu hostide PIN-koodita autentimise lubamine või keelamine</translation>
 <translation id="2976002782221275500">Määrab aja, pärast mida hämardatakse akutoitega töötamisel ekraan, kui kasutaja pole midagi sisestanud.
 
@@ -766,6 +775,7 @@
       Olenemata sellest, kas ja kuidas see reegel on määratud, ei saa kasutajad WPAD-i optimeerimise seadet muuta.</translation>
 <translation id="3072045631333522102">Ekraanisäästja, mida kasutatakse jaemüügirežiimis sisselogimiskuval</translation>
 <translation id="3072847235228302527">Teenusetingimuste määramine seadmes kasutatava konto jaoks</translation>
+<translation id="3077183141551274418">Lubab või keelab vahelehtede elutsüklid</translation>
 <translation id="3086995894968271156">Cast'i vastuvõtja seadistamine teenuses <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Võimaldab määrata URL-i mustrite loendi, mis määrab saidid, millel on lubatud kuvada pilte.
 
@@ -1332,6 +1342,11 @@
       Need soovitused tuuakse kaugühenduse kaudu Google'i serveritest.
 
       Kui reegel on seatud väärtusele Väär, siis soovitusi ei tooda ega kuvata.</translation>
+<translation id="4788252609789586009">Lubab rakenduse <ph name="PRODUCT_NAME" /> automaattäite funktsiooni ja võimaldab kasutajatel veebivormidel krediitkaardiandmeid automaatselt täita, kasutades selleks varem salvestatud teavet.
+
+      Kui seade on keelatud, ei anna automaattäite funktsioon krediitkaardiandmete kohta soovitusi ega sisesta neid. Samuti ei salvesta see krediitkaardi lisateavet, mille kasutaja võib veebi sirvimisel esitada.
+
+      Kui seade on lubatud või sellel puudub väärtus, saab kasutaja kasutajaliideses juhtida krediitkaardiandmete automaattäite funktsiooni.</translation>
 <translation id="4791031774429044540">Suure kursori hõlbustusfunktsiooni lubamine.
 
           Kui reegel on seatud väärtusele Tõene, on suur kursor alati lubatud.
@@ -1469,6 +1484,11 @@
       Kui see reegel on tõene, ei luba üksus <ph name="PRODUCT_OS_NAME" /> seadmel arendaja režiimi käivitada. Süsteem keeldub käivitamisest ja kuvab arendaja lüliti sisselülitamisel veaekraani.
 
       Kui see reegel on määramata või vale, on arendaja režiim seadmes saadaval.</translation>
+<translation id="520403427390290017">Vahelehe elutsüklite funktsioon vabastab protsessoriressursid ja lõpuks ka mäluressursid, mis on seotud töötavate vahelehtedega, mida ei ole kaua kasutatud. Selleks piiratakse esmalt vahelehtede ressursikasutust, seejärel vahelehed külmutatakse ja lõpuks eemaldatakse.
+
+      Kui reegel on seatud väärtusele Väär, on vahelehtede elutsüklid keelatud ja kõik vahelehed töötavad tavapärasel moel.
+
+      Kui reegel on seatud väärtusele Tõene või jäetud määramata, on vahelehtede elutsüklid lubatud.</translation>
 <translation id="5208240613060747912">Võimaldab määrata URL-i mustrite loendi, mis määrab saidid, millel ei ole lubatud teatisi kuvada.
 
           Kui jätate selle reegli määramata, siis kasutatakse kõikide saitide puhul globaalset vaikeväärtust, mis pärineb reeglist „DefaultNotificationsSetting”, kui see on määratud, või kasutaja isiklikku konfigureerimist.</translation>
@@ -1516,6 +1536,11 @@
 
           Kui selle reegli väärtuseks on määratud Väär, ei saa kasutajad sisu oma seadmesse üle kanda. Kui selle reegli väärtuseks on määratud Tõene, lubatakse kasutajatel sisu üle kanda. Kui see reegel jäetakse määramata, ei lubata kasutajatel sisu registreeritud Chrome OS-i seadmetesse üle kanda, kuid registreerimata seadmete puhul saab seda teha.</translation>
 <translation id="5330684698007383292">Pistikprogrammil <ph name="PRODUCT_FRAME_NAME" /> järgmiste sisutüüpide töötlemise lubamine</translation>
+<translation id="5360146044009867539">Lubab rakenduse <ph name="PRODUCT_NAME" /> automaattäite funktsiooni ja võimaldab kasutajatel profiili- ja aadressiteabe automaatselt veebivormidele sisestada, kasutades varem salvestatud teavet.
+
+      Selle seade keelamisel ei anna automaattäite funktsioon soovitusi ega sisesta aadressiteavet. Samuti ei salvesta see aadressi lisateavet, mille kasutaja võib veebi sirvimisel esitada.
+
+      Selle seade lubamisel või määramata jätmisel saab kasutaja kasutajaliideses aadresside automaattäite funktsiooni juhtida.</translation>
 <translation id="5365946944967967336">Kuva tööriistaribal nuppu Avaleht</translation>
 <translation id="5366745336748853475">Võimaldab määrata URL-i mustrite loendi, mis täpsustab saidid, mille jaoks valitakse sisselogimisekraanil SAML-voogu hostivas raamis automaatselt kliendisertifikaat, kui sait nõuab sertifikaati. Näidiskasutus on seadistada seadmeülene sertifikaat, mis esitatakse SAML IdP-le.
 
@@ -2243,6 +2268,15 @@
 
           Kui see seade on keelatud, siis pole funktsioon saadaval.</translation>
 <translation id="7275334191706090484">Hallatud järjehoidjad</translation>
+<translation id="729492886167634859">See reegel määrab loendi protsentidest, mis sätestavad OU operatsioonisüsteemiga <ph name="PRODUCT_OS_NAME" /> seadmete murdosa, mida alates värskenduse leidmisest kord nädalas värskendatakse. Avastamisaeg on hilisem kui värskenduse avaldamise aeg, kuna pärast värskenduse avaldamist võib seadmel kuluda värskenduste otsimiseks pisut aega.
+
+      Loendi n-väärtust kasutatakse seadmete protsendina, mis tuleb värskendada järgmisele versioonile n. nädalal pärast värskenduse leidmist. Näiteks kui värskendus avastatakse täna, määrab loendi esimene väärtus OU seadmete protsendi, mis peaksid alates tänasest nädala jooksul sellele versioonile üle minema. Teine väärtus määrab OU seadmete protsendi, mis peaksid alates tänasest kahe nädala jooksul sellele versioonile üle minema, jne.
+
+      Kui reegli väärtus on määratud, eiravad värskendused reeglit <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> ja järgivad selle asemel seda reeglit.
+
+      Kui loend on tühi, siis kontrollimist ei kasutata ja värskendused rakendatakse seadme muude eeskirjade alusel.
+
+      Reegel ei kehti kanalivahetuste puhul.</translation>
 <translation id="7295019613773647480">Luba valvatavad kasutajad</translation>
 <translation id="7301543427086558500">Määrab asendus-URL-ide loendi, mida saab kasutada otsinguterminite ekstraktimiseks otsingumootorist. URL-id peavad sisaldama stringi <ph name="SEARCH_TERM_MARKER" />, mida kasutatakse otsinguterminite ekstraktimiseks.
 
@@ -2711,6 +2745,12 @@
 
           Vaadake näidismustreid aadressilt http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Keela brauseri ajaloo salvestamine</translation>
+<translation id="8498293625012059298">Seadistage parooli muutmise URL (ainult HTTP- ja HTTPS-skeemid). Kui kasutaja näeb brauseris hoiatust, saadab paroolikaitseteenus ta sellele URL-ile, et ta saaks oma parooli muuta.
+      Selleks et <ph name="PRODUCT_NAME" /> talletaks parooli muutmise lehel uue parooli sõrmejälje õigesti, peab teie parooli muutmise leht järgima aadressil https://www.chromium.org/developers/design-documents/create-amazing-password-forms olevaid juhiseid.
+
+      Kui see seade on lubatud, saadab paroolikaitseteenus brauseris hoiatust näinud kasutajad sellele URL-ile, et nad saaksid oma parooli muuta.
+      Kui see seade on keelatud või määramata, saadab paroolikaitseteenus kasutajad parooli muutmiseks saidile https://myaccounts.google.com.
+      See reegel ei ole saadaval Windowsi eksemplarides, mis pole domeeniga <ph name="MS_AD_NAME" /> liitunud.</translation>
 <translation id="8499172469244085141">Vaikeseaded (kasutajad saavad alistada)</translation>
 <translation id="8507835864888987300">Määrab automaatsete värskenduste sihtversiooni.
 
@@ -2764,6 +2804,15 @@
       Kui reegli seade muudetakse väärtusele Väär, kehtib see uute virtuaalsete masinate käivitamisel, ent juba töötavaid virtuaalseid masinaid välja ei lülitata.
       Kui reegel jäetakse hallatavas seadmes määramata, on seadmes virtuaalsete masinate käitamine keelatud.
       Haldamata seadmetes on virtuaalsete masinate käitamine lubatud.</translation>
+<translation id="8669669491594628013">Võimaldab teil juhtida paroolikaitse hoiatuse käivitamist. Paroolikaitse hoiatab kasutajaid, kui nad kasutavad oma kaitstud parooli potentsiaalselt kahtlastel saitidel.
+
+      Kaitstava parooli määramiseks võite kasutada reegleid „PasswordProtectionLoginURLs” ja „PasswordProtectionChangePasswordURL”.
+
+
+      Kui reegli väärtuseks määratakse „PasswordProtectionWarningOff”, siis paroolikaitse hoiatusi ei kuvata.
+      Kui reegli väärtuseks määratakse „PasswordProtectionWarningOnPasswordReuse”, kuvatakse paroolikaitse hoiatused siis, kui kasutajad kasutavad oma kaitstud parooli saitidel, mis ei kuulu lubatud saitide loendisse.
+      Kui reegli väärtuseks määratakse „PasswordProtectionWarningOnPhishingReuse”, kuvatakse paroolikaitse hoiatus siis, kui kasutajad kasutavad oma kaitstud parooli andmepüügisaitidel.
+      Kui see reegel jäetakse määramata, kaitseb paroolikaitse ainult Google'i paroole, ent kasutaja saab seda seadet muuta.</translation>
 <translation id="8672321184841719703">Automaatse värskendamise sihtversioon</translation>
 <translation id="867410340948518937">U2F (universaalne teine tegur)</translation>
 <translation id="8685024486845674965">Paroolikaitse hoiatuse käivitab parooli uuesti kasutamine</translation>
diff --git a/components/policy/resources/policy_templates_fa.xtb b/components/policy/resources/policy_templates_fa.xtb
index 3a5e1c00..bda76b24 100644
--- a/components/policy/resources/policy_templates_fa.xtb
+++ b/components/policy/resources/policy_templates_fa.xtb
@@ -234,6 +234,13 @@
      اما اگر سازگاری با یک سرور دارای اشکال باید حفظ شود، می‌توان این خط‌مشی را روی «tls1.1» تنظیم کرد. این یک چاره موقت است و اشکال سرور باید سریعاً برطرف شود.</translation>
 <translation id="1864269674877167562">اگر این خط‌مشی روی رشته‌ای خالی تنظیم شود یا پیکر‌بندی نشود، <ph name="PRODUCT_OS_NAME" />گزینه تکمیل خود‌کار را در‌حین فرآیند ورود به سیستم کاربر نشان نمی‌دهد.
       اگر این خط‌مشی روی یک رشته نشانگر نام دامنه تنظیم شود، <ph name="PRODUCT_OS_NAME" />گزینه تکمیل خودکار را در‌حین فرآیند ورود به سیستم کاربر نشان می دهد و به کاربر امکان می‌دهد فقط نام کاربری خود را بدون افزونه نام دامنه وارد کند. کاربر می‌تواند این افزونه نام دامنه را باز‌نویسی کند.</translation>
+<translation id="1864382791685519617">‏پیش‌بینی شبکه را در <ph name="PRODUCT_NAME" /> فعال می‌کند و اجازه نمی‌دهد کاربران این تنظیم را تغییر دهند.
+
+      این تنظیم، پیش‌واکشی DNS، پیش‌ارتباط TCP و SSL و پیش‌اجرای صفحات وب را کنترل می‌کند.
+
+      اگر این خط‌مشی را تنظیم کنید، کاربران نمی‌توانند این تنظیم را در <ph name="PRODUCT_NAME" /> تغییر دهند یا لغو کنند.
+
+      اگر این خط‌مشی تنظیم نشود، پیش‌بینی شبکه فعال می‌شود اما کاربر می‌تواند آن را تغییر دهد.</translation>
 <translation id="1865417998205858223">مجوزهای کلیدی</translation>
 <translation id="186719019195685253">اقدامی است که هنگام استفاده از نیروی برق متناوب، وقتی زمان تأخیر عدم فعالیت برسد انجام می‌شود</translation>
 <translation id="187819629719252111">به <ph name="PRODUCT_NAME" /> اجازهٔ دسترسی به فایل‌های محلی روی دستگاه را با نمایش پیام‌های انتخاب فایل می‌دهد. اگر این گزینه را فعال کنید کاربران در حالت عادی می‌توانند پیام‌های انتخاب فایل را باز کنند. اگر آن را غیرفعال کنید، هر زمانی که کاربری عملکردی انجام دهد که پیام انتخاب فایل را باز کند (مانند وارد کردن نشانک‌ها، بارگذاری فایل‌ها، ذخیره پیوندها و ...) یک پیام به جای آن ظاهر می‌شود و اینگونه فرض می‌شود که کاربر بر روی لغو در پیام انتخاب فایل کلیک کرده است. اگر این تنظیم تعیین نشود، کاربران می‌توانند پیام‌های انتخاب فایل را به‌صورت عادی باز کنند.</translation>
@@ -247,7 +254,7 @@
 
       تنظیم این خط‌مشی، شناسایی خودکار منطقه زمانی را با استفاده از مکان دستگاه کاملاً غیرفعال می‌کند. همچنین باعث لغو شدن خط‌مشی «SystemTimezoneAutomaticDetection» می‌شود.</translation>
 <translation id="1885782360784839335">فعال کردن نمایش محتوای تبلیغاتی تمام‌برگه</translation>
-<translation id="1888871729456797026">کد ثبت‌نام خط‌مشی ابر در رایانامه</translation>
+<translation id="1888871729456797026">کد ثبت‌نام خط‌مشی ابر در ایمیل</translation>
 <translation id="1897365952389968758">به همه سایت‌ها اجازه اجرای جاوا اسکریپت داده شود</translation>
 <translation id="1906888171268104594">‏کنترل می‌کند معیارهای استفاده و داده‌های تشخیص عیب شامل گزارش‌های خرابی به Google گزارش شود یا نه.
 
@@ -688,6 +695,7 @@
       اگر این خط‌مشی تنظیم نشده باشد، <ph name="PRINTERS_ALLOW_ALL" /> مورد استفاده قرار می‌گیرد.
       </translation>
 <translation id="2908277604670530363">حداکثر تعداد اتصالات هم‌زمان به سرور پراکسی</translation>
+<translation id="2951386431828317490">فعال کردن تکمیل خودکار برای نمایه‌ها</translation>
 <translation id="2956777931324644324">‏این خط‌مشی از زمان <ph name="PRODUCT_NAME" /> نسخه ۳۶ کنار گذاشته شده است.
 
       تعیین می‌کند آیا برنامه افزودنی مجوزهای مربوط به دامنه TLS باید فعال شوند.
@@ -695,6 +703,7 @@
 <translation id="2957506574938329824">‏به هیچ وب‌سایتی برای درخواست دسترسی به دستگاه‌های بلوتوث از طریق Web Bluetooth API اجازه داده نشود</translation>
 <translation id="2957513448235202597">نوع حساب برای احراز هویت <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">قوانین نادیده گرفتن پروکسی</translation>
+<translation id="2960128438010718932">زمان‌بندی مرحله‌ای برای اعمال به‌روزرسانی جدید</translation>
 <translation id="2960691910306063964">فعال یا غیرفعال کردن احراز هویت بدون پین برای میزبان دسترسی راه دور</translation>
 <translation id="2976002782221275500">مدت زمانی را مشخص می‌کند که اگر کاربر ورودی نداشته باشد هنگام کار با برق صفحه تار می‌شود.
 
@@ -734,6 +743,7 @@
       بدون توجه به اینکه این خط‌مشی تنظیم شود یا نه و نحوه تنظیم آن، تنظیم بهینه‌سازی WPAD نمی‌تواند توسط کاربران تغییر داده شود.</translation>
 <translation id="3072045631333522102">محافظ صفحه مورداستفاده در صفحه ورود به سیستم در حالت خرده‌فروشی</translation>
 <translation id="3072847235228302527">تنظیم شرایط خدمات برای حساب محلی دستگاه</translation>
+<translation id="3077183141551274418">فعال یا غیرفعال کردن چرخه حیات برگه</translation>
 <translation id="3086995894968271156">‏گیرنده Cast را در <ph name="PRODUCT_NAME" /> پیکربندی کنید.</translation>
 <translation id="3088796212846734853">‏به شما امکان می‌دهد فهرستی از الگوهای نشانی وب تنظیم کنید که سایت‌های مجاز به نمایش تصویر را مشخص می‌کند.
 
@@ -1284,6 +1294,11 @@
       این پیشنهادها به‌صورت از راه دور از سرورهای Google واکشی می‌شود.
 
       اگر این تنظیم روی نادرست تنظیم شود، هیچ پیشنهادی واکشی یا نمایش داده نمی‌شود.</translation>
+<translation id="4788252609789586009">قابلیت «تکمیل خودکار» <ph name="PRODUCT_NAME" /> را فعال می‌کند و به کاربران اجازه می‌دهد با استفاده از اطلاعات ذخیره‌شده قبلی، اطلاعات کارت اعتباری را به‌طور خودکار در فرم‌های وب تکمیل کنند.
+
+      اگر این تنظیم غیرفعال شود، «تکمیل خودکار» هیچ‌گاه اطلاعات کارت اعتباری را پیشنهاد یا تکمیل نمی‌کند و یا اطلاعات تکمیلی کارت اعتباری را که شاید کاربر درحین مرور وب ارسال کند ذخیره نمی‌کند.
+
+      اگر این تنظیم فعال شود یا مقداری نداشته باشد، کاربر می‌تواند قابلیت «تکمیل خودکار» را برای کارت‌های اعتباری در رابط کاربری کنترل کند.</translation>
 <translation id="4791031774429044540">قابلیت دسترس‌پذیری نشانگر موشواره بزرگ را به کار بیندازید.
 
           چنانچه این خط‌مشی روی صحیح تنظیم شده باشد، نشانگر موشواره بزرگ همیشه به کار انداخته می‌شود.
@@ -1407,6 +1422,11 @@
       اگر این خط‌مشی روی «True» تنظیم شود، <ph name="PRODUCT_OS_NAME" /> از راه‌اندازی دستگاه در حالت برنامه‌نویس جلوگیری می‌کند. هنگامی که سوئیچ برنامه‌نویس روشن شود، سیستم از راه‌اندازی امتناع کرده و یک صفحه خطا نمایش می‌دهد.
 
       اگر این خط‌مشی تنظیم نشود یا روی «False» تنظیم شود، حالت برنامه‌نویس برای این دستگاه در دسترس باقی خواهد ماند.</translation>
+<translation id="520403427390290017">‏قابلیت چرخه حیات برگه، ابتدا CPU و سپس حافظه مرتبط با برگه‌هایی را که برای مدت طولانی استفاده نشده‌اند آزاد می‌کند؛ این کار ابتدا با درجه‌بندی پویای بسامد برای برگه‌ها، سپس ثابت کردن آن‌ها و در نهایت حذف کردن آن‌ها انجام می‌شود.
+
+      اگر این خط‌مشی روی نادرست تنظیم شود، قابلیت چرخه حیات برگه غیرفعال می‌شود و همه برگه‌ها به‌طور عادی اجرا می‌شوند.
+
+      اگر خط‌مشی روی درست تنظیم شود یا تنظیم نشود، قابلیت چرخه حیات برگه فعال می‌شود.</translation>
 <translation id="5208240613060747912">‏به شما امکان می‌دهد تا لیستی از الگوهای URL تعیین کنید که سایت‌هایی را مشخص می‌کند که اجازه نمایش اعلان را ندارند. اگر این قانون تنظیم نشده باقی بماند، از مقدار عمومی پیش‌فرض برای تمام سایت‌ها، خواه برگرفته از قانون "DefaultNotificationsSetting"، در صورت تنظیم بودن، یا پیکربندی شخصی کاربر، استفاده می‌شود.</translation>
 <translation id="5219844027738217407">‏برای برنامه‌های Android، این خط‌مشی فقط بر میکروفون تأثیر می‌گذارد. وقتی این خط‌مشی روی درست تنظیم شده باشد، میکروفون برای همه برنامه‌های Android (بدون استثنا) صامت می‌شود.</translation>
 <translation id="523505283826916779">تنظیمات دسترس‌پذیری</translation>
@@ -1452,6 +1472,11 @@
 
           اگر این خط‌مشی روی نادرست تنظیم شود، کاربران نمی‌توانند محتوا را به دستگاهشان ارسال کنند. اگر این خط‌مشی روی درست تنظیم شود، کاربران اجازه دارند محتوا را ارسال کنند. اگر این خط‌مشی تنظیم نشود کاربران اجازه ندارند محتوا را به دستگاه‌های ثبت‌شده دارای سیستم‌عامل Chrome ارسال کنند اما می‌توانند به دستگاه‌های ثبت‌نشده محتوا ارسال کنند.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> بتواند با انواع محتوای زیر کار کند</translation>
+<translation id="5360146044009867539">قابلیت «تکمیل خودکار» <ph name="PRODUCT_NAME" /> را فعال می‌کند و به کاربران اجازه می‌دهد با استفاده از اطلاعات ذخیره‌شده قبلی، اطلاعات نمایه و نشانی را به‌طور خودکار در فرم‌های وب تکمیل کنند.
+
+      اگر این تنظیم غیرفعال شود، «تکمیل خودکار» هیچ‌گاه اطلاعات نشانی را پیشنهاد یا تکمیل نمی‌کند و یا اطلاعات تکمیلی نشانی را که ممکن است کاربر درحین مرور وب ارسال کند ذخیره نمی‌کند.
+
+      اگر این تنظیم فعال شود یا مقداری نداشته باشد، کاربر می‌تواند قابلیت «تکمیل خودکار» را در رابط کاربری کنترل کند.</translation>
 <translation id="5365946944967967336">نمایش دکمه صفحهٔ اصلی روی نوارابزار</translation>
 <translation id="5366745336748853475">‏به شما امکان می‌دهد فهرستی از الگوهای نشانی وب تعیین کنید که مشخص‌کننده سایت‌هایی هستند که در صورت درخواست گواهی‌ از طرف سایت، گواهی‌ کارخواه را به‌‌طور خودکار در صفحه ورود به سیستم در قاب میزبانی جریان SAML انتخاب کند.
 
@@ -2139,6 +2164,15 @@
 
  اگر این تنظیمات غیرفعال شود، این قابلیت در دسترس نخواهد بود.</translation>
 <translation id="7275334191706090484">نشانک‌های مدیریت شده</translation>
+<translation id="729492886167634859">‏این خط‌مشی فهرستی از درصدهایی را تعریف می‌کند که مشخص می‌کنند چه بخشی از دستگاه‌های <ph name="PRODUCT_OS_NAME" /> در واحد سازمانی، هر هفته به‌روزرسانی شوند (شروع این عملیات از روزی است که به‌روزرسانی شناسایی می‌شود). زمان شناسایی دیرتر از انتشار به‌روزرسانی است، زیرا ممکن است بین زمان انتشار به‌روزرسانی و زمانی که دستگاه وجود به‌روزرسانی را بررسی می‌کند فاصله وجود داشته باشد.
+
+      مقدار nاُم در این فهرست، درصد دستگاه‌هایی را نشان می‌دهد که باید تا n هفته بعد از شناسایی به‌روزرسانی، به نسخه بعدی به‌روزرسانی شوند. برای مثال، اگر به‌روزرسانی امروز شناسایی شود، اولین مقدار در فهرست، درصد دستگاه‌هایی را مشخص می‌کند که باید تا یک هفته از امروز در واحد سازمانی به‌روزرسانی شوند. مقدار دوم دستگاه‌هایی را مشخص می‌کند که باید تا ۲ هفته از امروز در واحد سازمانی به‌روزرسانی شوند و به همین ترتیب تا آخر.
+
+      اگر مقداری برای این خط‌مشی تعیین شود، به‌روزرسانی‌ها خط‌مشی <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> را نادیده می‌گیرند و به‌جای آن از این خط‌مشی پیروی می‌کنند.
+
+      اگر این فهرست خالی باشد، هیچ‌گونه مرحله‌بندی وجود نخواهد داشت و به‌روزرسانی‌ها طبق سایر خط‌مشی‌های دستگاه‌ اعمال می‌شود.
+
+      این خط‌مشی برای جابه‌جایی میان کانال‌ها کاربرد ندارد.</translation>
 <translation id="7295019613773647480">به کار انداختن کاربرهای نظارت‌شده</translation>
 <translation id="7301543427086558500">‏فهرستی از نشانی‌های وب جایگزین که می‌توانند برای استخراج عبارات جستجو از موتور جستجو مورد استفاده قرار گیرند را مشخص می‌کند. نشانی‌های وب باید شامل رشته <ph name="SEARCH_TERM_MARKER" /> باشد که برای استخراج واژه‌های جستجو استفاده خواهد شد.
 
@@ -2504,7 +2538,7 @@
 
       اگر این خط‌مشی تنظیم شود، صفحه ورود به سیستم از زنجیره مشخص در انتخابگر ورود به سیستم تصویری برای حساب موردنظر داخل دستگاه استفاده می‌کند.
 
-      اگر خط‌مشی تنظیم نشود، <ph name="PRODUCT_OS_NAME" /> از شناسه حساب رایانامه حساب داخل دستگاه بعنوان نام نمایشی در صفحه ورود به سیستم استفاده خواهد کرد.
+      اگر خط‌مشی تنظیم نشود، <ph name="PRODUCT_OS_NAME" /> از شناسه حساب ایمیل حساب داخل دستگاه بعنوان نام نمایشی در صفحه ورود به سیستم استفاده خواهد کرد.
 
       این خط‌مشی برای حساب‌های کاربر عادی لحاظ نمی‌شود.</translation>
 <translation id="8259375588339409826">‏Chromium و Google Chrome، هر دو از مجموعه یکسانی از خط‌مشی‌ها پشتیبانی می‌کنند. لطفاً توجه کنید که این سند ممکن است حاوی خط‌مشی‌های مربوط به نسخه‌های عرضه‌نشده باشد (یعنی ورودی «پشتیبانی شده در» به نسخه‌ای از <ph name="PRODUCT_NAME" /> که هنوز عرضه‌ نشده‌ است اشاره دارد) که ممکن است بدون اطلاع قبلی حذف شوند یا تغییر کنند و برای آن‌ها هیچ‌گونه ضمانتی (ازجمله ضمانت‌های مربوط به مشخصات امنیتی و حریم خصوصی) ارائه نشده است.
@@ -2587,6 +2621,13 @@
 
           برای دیدن الگوهای نمونه به https://www.chromium.org/developers/how-tos/chrome-frame-getting-started بروید.</translation>
 <translation id="8493645415242333585">غیر فعال کردن ذخیره سابقه مرور</translation>
+<translation id="8498293625012059298">‏انجام پیکربندی نشانی وب تغییر گذرواژه (فقط طرح‌های HTTP و HTTPS). اگر کاربران هشداری در مرورگر دریافت کردند، سرویس محافظت از گذرواژه آن‌ها را به این نشانی وب هدایت می‌کند تا گذرواژه‌شان را تغییر دهند.
+ 
+      برای اینکه <ph name="PRODUCT_NAME" /> اثرانگشت گذرواژه جدید را در صفحه تغییر گذرواژه درست ضبط کند، مطمئن شوید صفحه تغییر گذرواژه مطابق با دستورالعمل‌های https://www.chromium.org/developers/design-documents/create-amazing-password-forms است.
+
+      اگر این تنظیم فعال شود، در شرایطی که کاربران هشداری در مرورگر دریافت می‌کنند، سرویس محافظت از گذرواژه آن‌ها را به این نشانی وب هدایت می‌کند تا گذرواژه‌شان را تغییر دهند.
+      اگر این تنظیم غیرفعال شود یا تنظیم نشود، سرویس محافظت از گذرواژه کاربران را برای تغییر گذرواژه به https://myaccounts.google.com هدایت می‌کند.
+      این خط‌مشی برای نمونه‌های Windows که به دامنه <ph name="MS_AD_NAME" /> نپیوسته‌اند دردسترس نیست.</translation>
 <translation id="8499172469244085141">تنظیمات پیش فرض (کاربران می‌توانند در اولویت قرار دهند)</translation>
 <translation id="8507835864888987300">برای «به‌روزرسانی‌های خودکار»، نسخه هدف تعیین می‌کند.
 
@@ -2640,6 +2681,14 @@
       وقتی این خط‌مشی به «نادرست» تغییر می‌کند، بر راه‌اندازی ماشین‌های مجازی جدید اثر می‌گذارد اما ماشین‌های مجازی را که درحال اجرا شدن هستند خاموش نمی‌کند.
       وقتی این خط‌مشی در دستگاه مدیریت‌شده تنظیم نشود، دستگاه مجاز نیست ماشین‌های مجازی را اجرا کند.
       دستگاه‌های مدیریت‌نشده مجاز هستند ماشین‌های مجازی را اجرا کند.</translation>
+<translation id="8669669491594628013">‏امکان می‌دهد نمایش هشدار محافظت از گذرواژه را کنترل کنید. وقتی کاربران از گذرواژه محافظت‌شده خود در سایت‌های بالقوه مشکوک استفاده می‌کنند، محافظت از گذرواژه به آن‌ها هشدار می‌دهد.
+
+      برای پیکربندی اینکه کدام گذرواژه محافظت شود، می‌توانید از خط‌مشی‌های «PasswordProtectionLoginURLs» و «PasswordProtectionChangePasswordURL» استفاده کنید.
+
+      اگر این خط‌مشی روی «PasswordProtectionWarningOff» تنظیم شود، هیچ هشدار محافظت از گذرواژه‌ای نشان داده نخواهد شد.
+      اگر این خط‌مشی روی «PasswordProtectionWarningOnPasswordReuse» تنظیم شود، وقتی کاربر از گذرواژه محافظت‌شده خود در سایتی که در فهرست مجاز نیست استفاده کند، هشدار محافظت از گذرواژه نشان داده می‌شود.
+      اگر این خط‌مشی روی «PasswordProtectionWarningOnPhishingReuse» تنظیم شود، هشدار محافظت از گذرواژه زمانی نشان داده می‌شود که کاربر از گذرواژه محافظت‌شده خود در یک سایت فیشینگ استفاده کند.
+      اگر این خط‌مشی تنظیم نشود، سرویس محافظت از گذرواژه فقط از گذرواژه‌های Google محافظت می‌کند اما کاربر می‌تواند این تنظیم را تغییر دهد.</translation>
 <translation id="8672321184841719703">نسخه به‌روزرسانی خودکار هدف</translation>
 <translation id="867410340948518937">‏U2F (فاکتور عمومی دوم)</translation>
 <translation id="8685024486845674965">هشدار حفاظت با گذرواژه با استفاده مجدد گذرواژه راه‌اندازی شده است</translation>
diff --git a/components/policy/resources/policy_templates_fi.xtb b/components/policy/resources/policy_templates_fi.xtb
index 68f5268f..2db1335 100644
--- a/components/policy/resources/policy_templates_fi.xtb
+++ b/components/policy/resources/policy_templates_fi.xtb
@@ -238,6 +238,13 @@
       Jos yhteensopivuus virheitä sisältävän palvelimen kanssa täytyy säilyttää, tämän käytännön arvoksi voidaan määrittää tls1.1. Tämä on kuitenkin tilapäinen toimenpide, ja palvelin tulee korjata mahdollisimman pian.</translation>
 <translation id="1864269674877167562">Jos tämän käytännön arvoksi asetetaan tyhjä merkkijono tai sitä ei määritetä, <ph name="PRODUCT_OS_NAME" /> ei näytä automaattisesti täydennettyä verkkotunnusta kirjautumisen yhteydessä.
       Jos tämän käytännön arvoksi asetetaan verkkotunnusta vastaava merkkijono, <ph name="PRODUCT_OS_NAME" /> näyttää kirjautumisen yhteydessä automaattisesti täydennetyn verkkotunnuksen, jolloin käyttäjän tarvitsee kirjoittaa vain käyttäjänimi ilman verkkotunnusta. Käyttäjä voi myös korvata automaattisesti täydennetyn osan muulla verkkotunnuksella.</translation>
+<translation id="1864382791685519617">Tällä käytännöllä <ph name="PRODUCT_NAME" /> saa luvan käyttää verkon ennakointia, eivätkä käyttäjät voi muokata tätä asetusta.
+
+      Tämä käytäntö koskee DNS-esilatauksen lisäksi TCP- ja SSL-yhteyksien esimuodostusta ja verkkosivujen esirenderöintiä.
+
+      Jos asetat tälle käytännölle arvon, <ph name="PRODUCT_NAME" /> ei anna käyttäjien muuttaa tätä asetusta.
+
+      Jos tätä käytäntöä ei aseteta, verkon ennakointi otetaan käyttöön, mutta käyttäjä voi muuttaa asetusta.</translation>
 <translation id="1865417998205858223">Tärkeimmät käyttöoikeudet</translation>
 <translation id="186719019195685253">Toiminto, joka suoritetaan, jos käyttäjä ei tee mitään tietyn ajan kuluessa laitteen ollessa kytkettynä laturiin</translation>
 <translation id="187819629719252111">Myöntää tietokoneen tiedostojen käyttöoikeuden antamalla tuotteelle <ph name="PRODUCT_NAME" /> luvan näyttää tiedostonvalintaikkunoita. Jos otat tämän asetuksen käyttöön, käyttäjät voivat avata tiedostonvalintaikkunoita normaalisti. Jos poistat asetuksen käytöstä, käyttäjälle näytetään viesti ja hänen oletetaan valinneen Peruuta tiedostonvalintaikkunassa aina käyttäjän suorittaessa tiedoston avaamista vaativan toiminnon (kuten käyttäjän tuodessa kirjanmerkkejä, lähettäessä tiedostoja, tallentaessa linkkejä jne.). Jos asetusta ei ole määritetty, käyttäjät voivat avata tiedostonvalintaikkunoita normaalisti.</translation>
@@ -693,6 +700,7 @@
       Jos tätä käytäntöä ei ole määritetty, oletusarvo on <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Enimmäismäärä samanaikaisia ​​yhteyksiä välityspalvelimeen</translation>
+<translation id="2951386431828317490">Salli profiilien automaattinen täyttö</translation>
 <translation id="2956777931324644324">Tämä käytäntö on poistettu käytöstä tuotteen <ph name="PRODUCT_NAME" /> versiosta 36 alkaen.
 
       Määrittää, tuleeko TLS domain-bound -varmennelaajennuksien olla käytössä.
@@ -701,6 +709,7 @@
 <translation id="2957506574938329824">Älä salli sivustojen pyytää Bluetooth-laitteiden käyttöoikeutta Web Bluetooth ‑sovellusliittymän kautta</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> -todennuksen tilityyppi</translation>
 <translation id="2959898425599642200">Välityspalvelimen ohitussäännöt</translation>
+<translation id="2960128438010718932">Uuden päivityksen vaiheittaisen käyttöönoton aikataulu</translation>
 <translation id="2960691910306063964">Ota käyttöön tai poista käytöstä etäkäytön isäntien PIN-kooditon todennus</translation>
 <translation id="2976002782221275500">Määrittää käyttämättömyysajan, jonka kuluttua ruutu himmennetään, kun laitetta käytetään akkuvirralla.
 
@@ -741,6 +750,7 @@
       Käyttäjät eivät voi muuttaa WPAD-optimoinnin asetuksia tästä käytännöstä riippumatta.</translation>
 <translation id="3072045631333522102">Näytönsäästäjä, jota käytetään kirjautumisruudulla jälleenmyyntitilassa</translation>
 <translation id="3072847235228302527">Aseta laitteen paikallisen tilin käyttöehdot</translation>
+<translation id="3077183141551274418">Ottaa välilehtien elinkaaret käyttöön tai poistaa ne käytöstä</translation>
 <translation id="3086995894968271156">Määrittää Cast‑vastaanottimen, jota <ph name="PRODUCT_NAME" /> käyttää.</translation>
 <translation id="3088796212846734853">Voit määrittää URL-mallien luettelon, jossa määritetään sivustot, jotka saavat näyttää kuvia.
 
@@ -1294,6 +1304,11 @@
 <translation id="4757671984625088193">Jos käytännön arvoksi on asetettu Tosi tai sille ei aseteta mitään arvoa, <ph name="PRODUCT_NAME" /> ehdottaa nykyiseen sivuun liittyviä sivuja.
       Ehdotukset haetaan Googlen palvelimilta.
       Jos sen arvo on Epätosi, ehdotuksia ei haeta tai näytetä.</translation>
+<translation id="4788252609789586009">Kun tämä on käytössä, <ph name="PRODUCT_NAME" /> voi täyttää kenttiä automaattisesti. Käyttäjät voivat täyttää verkkolomakkeita aiemmin tallennetuilla luottokorttitiedoilla.
+
+      Jos asetus poistetaan käytöstä, automaattinen täyttö ei ehdota luottokorttitietoja, täytä niitä tai tallenna uusia luottokorttitietoja myöhempää käyttöä varten selailun yhteydessä.
+
+      Jos tämä asetus on käytössä tai sille ei ole määritetty arvoa, käyttäjä voi hallita luottokorttitietojen automaattista täyttöä käyttöliittymässä.</translation>
 <translation id="4791031774429044540">Ota käyttöön suuren osoittimen käytettävyysominaisuus.
 
           Jos tämän käytännön arvoksi on määritetty tosi, suuri osoitin on aina käytössä.
@@ -1418,6 +1433,11 @@
       Jos tämän käytännön arvoksi asetetaan True, <ph name="PRODUCT_OS_NAME" /> estää laitetta käynnistymästä uudelleen kehittäjätilassa. Järjestelmä ei käynnisty uudelleen ja näyttää virheilmoituksen, jos kehittäjätila on otettu käyttöön.
 
       Jos käytäntöä ei määritetä tai sen arvoksi asetetaan False, laitetta voi käyttää kehittäjätilassa.</translation>
+<translation id="520403427390290017">Välilehtien elinkaariominaisuus vapauttaa prosessointitehoa ja lopulta muistia, jos sitä käyttäviä välilehtiä ei ole käytetty pitkään aikaan. Aluksi välilehtiä rajoitetaan, sitten ne jäädytetään ja lopulta ne suljetaan.
+
+      Jos käytännön arvoksi on asetettu epätosi, välilehtien elinkaaret eivät ole käytössä ja kaikki välilehdet toimivat normaalisti.
+
+      Jos käytännön arvoksi on asetettu tosi tai sillä ei ole arvoa, välilehtien elinkaaret ovat käytössä.</translation>
 <translation id="5208240613060747912">Voit määrittää luettelon URL-malleja, joissa määritetään sivustot, jotka eivät saa näyttää ilmoituksia. Jos tätä käytäntöä ei ole määritetty, kaikille sivustoille käytetään joko DefaultNotificationsSetting-käytännön yleistä oletusarvoa, jos se on asetettu, tai käyttäjän henkilökohtaisia määrityksiä.</translation>
 <translation id="5219844027738217407">Android-sovellusten kohdalla tämä käytäntö vaikuttaa vain mikrofoniin. Kun tämän käytännön arvoksi on määritetty tosi, mikrofoni on mykistetty kaikkien Android-sovellusten kohdalla, ilman poikkeuksia.</translation>
 <translation id="523505283826916779">Käytettävyysasetukset</translation>
@@ -1463,6 +1483,11 @@
 
           Jos tämän käytännön arvo on epätosi, käyttäjät eivät voi suoratoistaa sisältöä laitteeseen. Jos arvo on tosi, käyttäjät saavat suoratoistaa sisältöä. Jos tätä käytäntöä ei ole määritetty, käyttäjät eivät voi suoratoistaa sisältöä rekisteröityihin Chrome-käyttöjärjestelmää käyttäviin laitteisiin, mutta he voivat suoratoistaa sisältöä rekisteröimättömiin laitteisiin.</translation>
 <translation id="5330684698007383292">Anna tuotteen <ph name="PRODUCT_FRAME_NAME" /> käsitellä seuraavia sisältötyyppejä</translation>
+<translation id="5360146044009867539">Kun tämä on käytössä, <ph name="PRODUCT_NAME" /> voi täyttää kenttiä automaattisesti. Käyttäjät voivat täyttää verkkolomakkeita aiemmin tallennetuilla profiili- ja osoitetiedoilla.
+
+      Jos asetus poistetaan käytöstä, automaattinen täyttö ei ehdota osoitetietoja, täytä niitä tai tallenna uusia osoitetietoja myöhempää käyttöä varten selailun yhteydessä.
+
+      Jos tämä asetus on käytössä tai sille ei ole määritetty arvoa, käyttäjä voi hallita osoitteiden automaattista täyttöä käyttöliittymässä.</translation>
 <translation id="5365946944967967336">Näytä etusivupainike työkalupalkissa</translation>
 <translation id="5366745336748853475">Antaa määrittää URL-osoitemallien luettelon, jota vastaaville sivustoille valitaan kirjautumisnäytöltä automaattisesti käyttöoikeusvarmenne SAML-työnkulkua isännöivässä kehyksessä, jos sivusto pyytää varmennetta. Tätä voidaan käyttää esimerkiksi niin, että määritetään laitteen laajuinen varmenne, joka näytetään SAML-tunnistuspalvelulle.
 
@@ -2148,6 +2173,15 @@
 
           Jos tämä asetus ei ole käytössä, tämä ominaisuus ei ole käytettävissä.</translation>
 <translation id="7275334191706090484">Hallinnoidut kirjanmerkit</translation>
+<translation id="729492886167634859">Tämä käytäntö määrittelee prosenttiosuuksien listalla, mikä osuus organisaatioyksikön <ph name="PRODUCT_OS_NAME" /> ‑laitteista päivitetään viikoittain päivityksen ensimmäisestä havaitsemispäivästä alkaen. Havaitsemishetki on päivityksen julkaisuhetken jälkeen, sillä laite saattaa tarkistaa päivitykset vasta jonkin aikaa julkaisuhetken jälkeen.
+
+      Listan n:s arvo on niiden laitteiden osuus, joiden pitäisi olla päivitettynä seuraavaan versioon, kun päivityksen havaitsemisesta on kulunut n viikkoa. Jos päivitys siis havaitaan tänään, listan ensimmäinen arvo määrittää, mikä osuus organisaatioyksikön laitteista pitäisi päivittää viikon sisällä tästä päivästä. Toinen arvo taas määrittää kahden viikon sisällä tästä hetkestä päivitettävien laitteiden osuuden, ja niin edelleen.
+
+      Jos tälle käytännölle on määritetty arvo, päivitykset eivät noudata <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />-käytäntöä vaan tätä käytäntöä.
+
+      Jos tämä lista on tyhjä, päivityksiä ei asenneta vaiheittain vaan muiden laitekäytäntöjen mukaan.
+
+      Tätä käytäntöä ei sovelleta kanavan vaihtoihin.</translation>
 <translation id="7295019613773647480">Ota käyttöön valvotut käyttäjät</translation>
 <translation id="7301543427086558500">Määrittää luettelon vaihtoehtoisia URL-osoitteita, joiden avulla voidaan noutaa hakutermejä hakukoneelta. URL-osoitteiden tulee sisältää merkkijono <ph name="SEARCH_TERM_MARKER" />, jota käytetään hakutermien noutamiseen.
 
@@ -2600,6 +2634,12 @@
  
           Esimerkkimalleja on osoitteessa http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Poista selainhistorian tallentaminen käytöstä</translation>
+<translation id="8498293625012059298">Määritä salasanan vaihtamisen URL-osoite (vain HTTP ja HTTPS). Salasanojen suojauspalvelu ohjaa käyttäjän vaihtamaan salasanansa tässä URL-osoitteessa, kun hän on nähnyt varoituksen selaimessa.
+      Jotta <ph name="PRODUCT_NAME" /> tallentaa uusien salasanojen tunnistetiedostot oikein salasanan vaihtamissivulle, varmista, että salasanan vaihtamissivu noudattaa ohjeita (https://www.chromium.org/developers/design-documents/create-amazing-password-forms).
+
+      Jos tämä asetus on käytössä, salasanojen suojauspalvelu ohjaa käyttäjän vaihtamaan salasanansa tässä URL-osoitteessa, kun hän on nähnyt varoituksen selaimessa.
+      Jos asetus on pois käytöstä tai sitä ei ole määritetty, salasanojen suojauspalvelu ohjaa käyttäjän vaihtamaan salasanansa osoitteessa https://accounts.google.com.
+      Tämä käytäntö ei ole käytettävissä Windowsin esiintymissä, joita ei ole liitetty <ph name="MS_AD_NAME" /> ‑verkkotunnukseen.</translation>
 <translation id="8499172469244085141">Oletusasetukset (käyttäjät voivat ohittaa)</translation>
 <translation id="8507835864888987300">Määrittää kohdeversion automaattisille päivityksille.
 
@@ -2653,6 +2693,14 @@
       Kun käytännön arvoksi muutetaan Epätosi, muutos koskee uusien virtuaalikoneiden käynnistämistä, mutta jo käynnissä olevia virtuaalikoneita ei sammuteta.
       Jos tätä asetusta ei ole määritetty hallinnoidulla laitteella, laitteella ei ole sallittua suorittaa virtuaalikoneita.
       Ei-hallinnoiduilla laitteilla on sallittua suorittaa virtuaalikoneita.</translation>
+<translation id="8669669491594628013">Sallii salasanasuojauksen varoituksen näyttämisen hallinnan. Salasanasuojaus ilmoittaa käyttäjille, jos nämä käyttävät suojattuja salasanoja uudelleen mahdollisesti haitallisilla sivustoilla.
+
+      PasswordProtectionLoginURLs- ja PasswordProtectionChangePasswordURL-käytäntöjen avulla voit määrittää, mitkä salasanat suojataan.
+
+      Jos tämän käytännön arvo on PasswordProtectionWarningOff, salasanasuojauksen varoitusta ei näytetä.
+      Jos tämän käytännön arvo on PasswordProtectionWarningOnPasswordReuse, salasanasuojauksen varoitus näytetään, kun käyttäjä käyttää suojattua salasanaa sivustoilla, joita ei ole lisätty sallittujen sivustojen listaan.
+      Jos tämän käytännön arvo on PasswordProtectionWarningOnPhishingReuse, salasanasuojauksen varoitus näytetään, kun käyttäjä käyttää suojattua salasanaa tietojenkalastelusivustoilla.
+      Jos tätä käytäntöä ei ole määritetty, salasanasuojaus koskee vain Google-salasanoja, ja käyttäjä voi muuttaa tämän asetuksen.</translation>
 <translation id="8672321184841719703">Automaattisen päivityksen version määrittäminen</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Salasanasuojauksen varoitus käynnistyy, kun salasanaa käytetään uudelleen</translation>
diff --git a/components/policy/resources/policy_templates_fil.xtb b/components/policy/resources/policy_templates_fil.xtb
index f13ab002..bb07396 100644
--- a/components/policy/resources/policy_templates_fil.xtb
+++ b/components/policy/resources/policy_templates_fil.xtb
@@ -238,6 +238,13 @@
       Kung hindi, kung kailangang panatilihin ang compatibility sa isang server na maraming bug, maaaring itakda ang patakarang ito sa "tls1.1". Isa itong pansamantalang solusyon at dapat na maayos kaagad ang server.</translation>
 <translation id="1864269674877167562">Kung nakatakda sa isang blangkong string o hindi naka-configure ang patakaran na ito, hindi magpapakita ang <ph name="PRODUCT_OS_NAME" /> ng isang opsyon sa pag-autocomplete sa flow ng pag-sign in ng user.
       Kung ang patakaran na ito ay nakatakda sa isang string na kumakatawan sa isang domain name, magpapakita ang <ph name="PRODUCT_OS_NAME" /> ng opsyon sa pag-autocomplete sa pag-sign in ng user na nagbibigay-daan sa user na i-type lang ang kanyang user name nang wala ang extension ng domain name. Magagawa ng user na i-overwrite ang extension ng domain name na ito.</translation>
+<translation id="1864382791685519617">Ine-enable ang panghuhula ng network sa <ph name="PRODUCT_NAME" /> at pinipigilan ang mga user na baguhin ang setting na ito.
+
+      Kinokontrol nito ang pag-prefetch ng DNS, pag-preconnect ng TCP at SSL, at pag-prerender ng mga web page.
+
+      Kung itatakda mo ang patakarang ito, hindi mababago o mao-override ng mga user ang setting na ito sa <ph name="PRODUCT_NAME" />.
+
+      Kung iiwang hindi nakatakda ang patakarang ito, mae-enable ang panghuhula ng network ngunit mababago ito ng user.</translation>
 <translation id="1865417998205858223">Mga Pangunahing Pahintulot</translation>
 <translation id="186719019195685253">Pagkilos na gagawin kapag naabot na ang pagkaantala ng idle habang tumatakbo gamit ang AC power</translation>
 <translation id="187819629719252111">Binibigyang-daan ang access sa mga lokal na file sa machine sa pamamagitan ng pagpayag sa <ph name="PRODUCT_NAME" /> na magpakita ng mga dialog ng pagpili ng file.
@@ -714,6 +721,7 @@
       Kung hindi nakatakda ang patakarang ito, ipagpapalagay na pinili ang <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Pinakamataas na bilang ng sabay-sabay na koneksyon sa proxy server</translation>
+<translation id="2951386431828317490">Ine-enable ang AutoFill para sa mga profile</translation>
 <translation id="2956777931324644324">Itinigil na ang patakarang ito simula ng bersyon 36 ng <ph name="PRODUCT_NAME" /> .
 
       Tinutukoy kung dapat i-enable ang mga extension ng TLS domain-bound na certificate.
@@ -722,6 +730,7 @@
 <translation id="2957506574938329824">Huwag payagan ang anumang site na humiling ng access sa mga Bluetooth device sa pamamagitan ng Web Bluetooth API</translation>
 <translation id="2957513448235202597">Uri ng account para sa pagpapatotoo ng <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Mga panuntunan sa pag-bypass ng proxy</translation>
+<translation id="2960128438010718932">Ang iskedyul ng pag-stage para sa paglalapat ng bagong update</translation>
 <translation id="2960691910306063964">I-enable o i-disable ang pagpapatotoo na hindi gumagamit ng PIN para sa mga host ng malayuang access</translation>
 <translation id="2976002782221275500">Tinutukoy ang tagal ng oras na walang input ng user na kapag lumipas ay idi-dim ang screen kapag tumatakbo gamit ang power ng baterya.
 
@@ -764,6 +773,7 @@
       Nakatakda man o paano man itinakda ang patakarang ito, hindi mababago ng mga user ang setting ng pag-optimize ng WPAD.</translation>
 <translation id="3072045631333522102">Screen saver na gagamitin sa screen sa pag-sign-in sa mode ng retail</translation>
 <translation id="3072847235228302527">Itakda ang Mga Tuntunin ng Serbisyo para sa isang account na lokal sa device</translation>
+<translation id="3077183141551274418">Ine-enable o dini-disable ang mga lifecycle ng tab</translation>
 <translation id="3086995894968271156">I-configure ang Cast Receiver sa <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Binibigyang-daan kang magtakda ng listahan ng mga pattern ng url na tumutukoy ng mga site na pinapayagang magpakita ng mga larawan.
 
@@ -1332,6 +1342,11 @@
       Malayuang kinuha ang mga suhestyong ito sa mga server ng Google.
 
       Kung nakatakda sa false ang setting na ito, hindi makukuha o maipapakita ang mga suhestyon.</translation>
+<translation id="4788252609789586009">Ine-enable ang feature na AutoFill ng <ph name="PRODUCT_NAME" /> at binibigyang-daan ang mga user na awtomatikong kumpletuhin ang impormasyon ng credit card sa mga web form gamit ang dati nang na-store na impormasyon.
+
+      Kung idi-disable ang setting na ito, hindi kailanman magmumungkahi o magkukumpleto ang AutoFill ng impormasyon ng credit card, o hindi nito ise-save ang karagdagang impormasyon ng credit card na maaaring isumite ng user habang nagba-browse siya sa web.
+
+      Kung ie-enable o walang value ang setting na ito, makokontrol ng user ang AutoFill para sa mga credit card sa UI.</translation>
 <translation id="4791031774429044540">I-enable ang tampok sa pagiging naa-access ng malaking cursor.
 
           Kung nakatakda sa true ang patakarang ito, palaging naka-enable ang malaking cursor.
@@ -1468,6 +1483,11 @@
       Kung itatakda sa True ang patakarang ito, pipigilan ng <ph name="PRODUCT_OS_NAME" /> ang device na ma-boot sa mode ng developer. Tatangging mag-boot ang system at magpapakita ito ng screen ng error kapag naka-on ang switch ng developer.
 
       Kung hindi nakatakda o nakatakda sa False ang patakarang ito, mananatiling available ang mode ng developer para sa device.</translation>
+<translation id="520403427390290017">Binabawi ng feature na mga lifecyle ng tab ang CPU at ang memory na nauugnay sa mga tumatakbong tab na matagal nang hindi nagagamit sa pamamagitan ng pagkontrol muna sa mga ito, at pag-freeze at pag-discard sa mga ito pagkatapos.
+
+      Kung itatakda ang patakaran sa false, madi-disable ang mga lifecycle ng tab, at maiiwang tumatakbo nang normal ang lahat ng tab.
+
+      Kung itatakda ang patakaran sa true o kung iiwan itong hindi nakatakda, mae-enable ang mga lifecycle ng tab.</translation>
 <translation id="5208240613060747912">Binibigyang-daan kang magtakda ng isang listahan ng mga pattern ng url na tumutukoy sa mga site na hindi pinapayagang magpakita ng mga notification.
 
           Kung hinayaang hindi nakatakda ang patakarang ito gagamitin ang global na default na halaga para sa lahat ng site mula sa patakarang 'DefaultNotificationsSetting' kung nakatakda ito, o kung hindi man ay sa personal na configuration ng user.</translation>
@@ -1515,6 +1535,11 @@
 
           Kung nakatakda ang patakarang ito sa False, hindi makakapag-cast ng content ang mga user sa kanilang device. Kung nakatakda ang patakarang ito sa True, pinapayagan ang mga user na mag-cast ng content. Kung hindi nakatakda ang patakarang ito, hindi pinapayagan ang mga user na mag-cast ng content sa mga naka-enroll na Chrome OS device, ngunit makakapag-cast ang mga user sa mga device na hindi naka-enroll.</translation>
 <translation id="5330684698007383292">Payagan ang <ph name="PRODUCT_FRAME_NAME" /> na pangasiwaan ang mga sumusunod na uri ng nilalaman</translation>
+<translation id="5360146044009867539">Ine-enable ang feature na AutoFill ng <ph name="PRODUCT_NAME" /> at binibigyang-daan ang mga user na awtomatikong kumpletuhin ang impormasyon ng profile at address sa mga web form gamit ang dati nang na-store na impormasyon.
+
+      Kung idi-disable ang setting na ito, hindi kailanman magmumungkahi o magkukumpleto ang AutoFill ng impormasyon ng address, o hindi nito ise-save ang karagdagang impormasyon ng address na maaaring isumite ng user habang nagba-browse siya sa web.
+
+      Kung ie-enable o walang value ang setting na ito, makokontrol ng user ang AutoFill para sa mga address sa UI.</translation>
 <translation id="5365946944967967336">Ipakita ang button na Home sa toolbar</translation>
 <translation id="5366745336748853475">Nagbibigay-daan sa iyong tumukoy ng listahan ng mga pattern ng url na tumutukoy sa mga site kung saan awtomatikong pinipili ang isang certificate ng client sa screen ng pag-sign in sa frame na nagho-host sa flow ng SAML, kung humihiling ng certificate ang site. Ang isang halimbawa ng paggamit ay ang pag-configure ng certificate para sa buong device na ipapakita sa SAML IdP.
 
@@ -2240,6 +2265,15 @@
 
           Kung naka-disable ang setting na ito, hindi magiging available ang tampok na ito.</translation>
 <translation id="7275334191706090484">Mga Pinamamahalaang Bookmark</translation>
+<translation id="729492886167634859">Naglalarawan ang patakarang ito ng listahan ng mga porsyentong maglalarawan sa bahagi ng mga <ph name="PRODUCT_OS_NAME" /> device sa OU na mag-a-update kada linggo simula sa araw ng pagkakatuklas sa update. Mahuhuli ang oras ng pagkakatuklas sa oras ng pag-publish sa update, dahil maaaring matagalan ang pagsusuri ng device para sa mga update pagkatapos ng pag-publish sa update.
+
+      Gagamitin ang n-th na value sa listahan bilang porsyento ng mga device na dapat matapos mag-update sa susunod na bersyon sa n-th na linggo pagkatapos matuklasan ang update. Halimbawa, kung may matutuklasang update ngayon, ilalarawan ng unang value sa listahan ang porsyento ng mga device sa OU na dapat mag-update sa bersyong iyon isang linggo mula ngayon. Ilalarawan ng pangalawang value ang porsyento ng mga device sa OU na dapat mag-update sa bersyong iyon 2 linggo mula ngayon, at iba pa.
+
+      Kung may inilalarawang value para sa patakarang ito, babalewalain ng mga update ang patakarang <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> at sa halip ay susundin nito ang patakarang ito.
+
+      Kung walang laman ang patakarang ito, walang magiging pag-stage at mailalapat ang mga update ayon sa iba pang patakaran sa device.
+
+      Hindi nalalapat ang patakarang ito sa mga paglipat ng channel.</translation>
 <translation id="7295019613773647480">I-enable ang mga pinangangasiwaang user</translation>
 <translation id="7301543427086558500">Tinutukoy ang isang listahan ng mga kahaliling URL na magagamit upang kumuha ng mga termino para sa paghahanap sa search engine. Nilalaman dapat ng mga URL ang string na <ph name="SEARCH_TERM_MARKER" />, na gagamitin upang kunin ang mga termino para sa paghahanap.
 
@@ -2706,6 +2740,12 @@
 
           Para sa mga halimbawang pattern, tingnan ang https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Huwag paganahin ang pag-save ng kasaysayan ng browser</translation>
+<translation id="8498293625012059298">Kino-configure ang URL para sa pagpapalit ng password (HTTP at HTTPS na scheme lang). Ididirekta ng serbisyo sa pagprotekta ng password ang mga user sa URL na ito para mapalitan nila ang kanilang password pagkatapos nilang makakita ng babala sa browser.
+      Para maayos na ma-capture ng <ph name="PRODUCT_NAME" /> ang bagong password na fingerprint sa page na ito ng pagpapalit ng password, tiyaking sumusunod ang iyong page ng pagpapalit ng password sa mga alituntunin sa https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Kung ie-enable ang setting na ito, ididirekta ng serbisyo sa pagprotekta ng password ang mga user sa URL na ito para mapalitan nila ang kanilang password pagkatapos nilang makakita ng babala sa browser.
+      Kung idi-disable o hindi itatakda ang setting na ito, ididirekta ng serbisyo sa pagprotekta ng password ang mga user sa https://myaccounts.google.com para mapalitan nila ang kanilang password.
+      Hindi available ang patakarang ito sa mga instance ng Windows na hindi kasama sa isang domain ng <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Mga Default na Setting (maaaring i-override ng mga user)</translation>
 <translation id="8507835864888987300">Nagtatakda ng target na bersyon para sa Mga Awtomatikong Pag-update.
 
@@ -2759,6 +2799,14 @@
       Kapag binago sa False ang patakarang ito, ilalapat ito sa mga nagsisimulang bagong virtual machine ngunit hindi magsa-shut down sa mga virtual machine na tumatakbo na.
       Kapag hindi nakatakda ang patakaran sa isang pinamamahalaang device, hindi pinapayagan ang device na magpatakbo ng mga virtual machine.
       Pinapayagan ang mga hindi pinamamahalaang device na magpatakbo ng mga virtual machine.</translation>
+<translation id="8669669491594628013">Nagbibigay-daan sa iyong kontrolin ang pag-trigger ng babala sa pagprotekta ng password. Aalertuhan ng pagprotekta ng password ang mga user kapag muli nilang ginamit ang kanilang pinoprotektahang password sa mga potensyal na kahina-hinalang site.
+
+      Maaari mong gamitin ang patakarang 'PasswordProtectionLoginURLs' at 'PasswordProtectionChangePasswordURL' para i-configure ang poprotektahang password.
+
+      Kung itatakda ang patakarang ito sa 'PasswordProtectionWarningOff,' walang ipapakitang babala sa pagprotekta ng password.
+      Kung itatakda ang patakarang ito sa 'PasswordProtectionWarningOnPasswordReuse,' magpapakita ng babala sa pagprotekta ng password kapag muling ginamit ng user ang kanyang pinoprotektahang password sa isang hindi naka-whitelist na site.
+      Kung itatakda ang patakarang ito sa 'PasswordProtectionWarningOnPhishingReuse,' magpapakita ng babala sa pagprotekta ng password kapag muling ginamit ng user ang kanyang pinoprotektahang password sa isang phishing site.
+      Kung iiwang hindi nakatakda ang patakarang ito, ang mga password lang sa Google ang poprotektahan ng serbisyo sa pagprotekta ng password ngunit mababago ng user ang setting na ito.</translation>
 <translation id="8672321184841719703">Target Auto Update Na Bersyon</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Ang babala ng proteksyon sa password ay nati-trigger ng muling paggamit ng password</translation>
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb
index 58ad9ef4..b781c8e7 100644
--- a/components/policy/resources/policy_templates_fr.xtb
+++ b/components/policy/resources/policy_templates_fr.xtb
@@ -242,6 +242,13 @@
       Sinon, si la compatibilité avec un serveur comportant des bugs doit être maintenue, cette règle peut être définie sur "tls1.1". Il s'agit là d'une solution provisoire qui exige parallèlement de dépanner le serveur rapidement.</translation>
 <translation id="1864269674877167562">Si cette règle est définie sur une chaîne vide ou n'est pas configurée, <ph name="PRODUCT_OS_NAME" /> n'affichera pas d'option de saisie semi-automatique lors de la procédure de connexion de l'utilisateur.
       Si cette règle est définie sur une chaîne représentant un nom de domaine, <ph name="PRODUCT_OS_NAME" /> affichera une option de saisie semi-automatique lors de la procédure de connexion. Ceci permettra à l'utilisateur de ne saisir que son nom d'utilisateur sans préciser l'extension du nom de domaine. L'utilisateur sera autorisé à modifier cette extension du nom de domaine.</translation>
+<translation id="1864382791685519617">Active la prédiction réseau dans <ph name="PRODUCT_NAME" /> et empêche les utilisateurs de modifier ce paramètre.
+
+      Cela contrôle la prélecture des DNS, ainsi que la préconnexion et le préchargement TCP et SSL des pages Web.
+
+      Si vous configurez cette règle, les utilisateurs ne peuvent pas modifier ni ignorer ce paramètre dans <ph name="PRODUCT_NAME" />.
+
+      Si vous ne configurez pas cette règle, la prédiction réseau est activée, mais les utilisateurs peuvent la modifier.</translation>
 <translation id="1865417998205858223">Autorisations de clés</translation>
 <translation id="186719019195685253">Indique l'action à effectuer lorsque le délai d'inactivité est atteint en cas de fonctionnement sur une source d'alimentation CA.</translation>
 <translation id="187819629719252111">Autorise l'accès aux fichiers locaux de la machine en autorisant <ph name="PRODUCT_NAME" /> à afficher des boîtes de dialogue de sélection de fichiers. 
@@ -726,6 +733,7 @@
       Si cette règle n'est pas définie, <ph name="PRINTERS_ALLOW_ALL" /> est supposé s'appliquer.
       </translation>
 <translation id="2908277604670530363">Nombre maximal de connexions simultanées au serveur proxy</translation>
+<translation id="2951386431828317490">Activer la saisie automatique pour les profils</translation>
 <translation id="2956777931324644324">Cette règle a été supprimée dès la version 36 de <ph name="PRODUCT_NAME" />.
 
       Elle indique si l'extension des certificats TLS liés au domaine doit être activée.
@@ -734,6 +742,7 @@
 <translation id="2957506574938329824">Interdire à tous les sites de demander l'accès à des appareils Bluetooth via l'API Web Bluetooth</translation>
 <translation id="2957513448235202597">Type de compte pour l'authentification <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Règles de contournement de proxy</translation>
+<translation id="2960128438010718932">Calendrier d'échelonnement pour l'application d'une nouvelle mise à jour</translation>
 <translation id="2960691910306063964">Activer ou désactiver l'authentification sans code d'accès pour les hôtes d'accès à distance</translation>
 <translation id="2976002782221275500">Indiquer le délai d'inactivité au terme duquel l'écran s'assombrit en cas d'utilisation de la batterie
 
@@ -776,6 +785,7 @@
       Quelle que soit la définition de cette règle, les utilisateurs n'ont pas la possibilité de modifier le paramètre d'optimisation WPAD.</translation>
 <translation id="3072045631333522102">Economiseur d'écran à utiliser sur l'écran de connexion en mode Point de vente</translation>
 <translation id="3072847235228302527">Définir les conditions d'utilisation d'un compte local de l'appareil</translation>
+<translation id="3077183141551274418">Activer ou désactiver le cycle de vie des onglets</translation>
 <translation id="3086995894968271156">Configurer le récepteur Cast dans <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Permet de définir une liste de formats d'URL spécifiant les sites autorisés à afficher des images.
 
@@ -1351,6 +1361,11 @@
       Ces suggestions sont récupérées à distance sur les serveurs Google.
 
       Si cette règle est définie sur False, aucune suggestion n'est récupérée ni affichée.</translation>
+<translation id="4788252609789586009">Active la fonctionnalité de saisie automatique de <ph name="PRODUCT_NAME" />, qui permet à l'utilisateur de remplir automatiquement des formulaires Web à partir de données stockées précédemment, telles que des informations relatives à sa carte de crédit.
+
+      Si ce paramètre est désactivé, ces informations ne sont jamais suggérées ni saisies automatiquement. De même, les informations complémentaires de carte de crédit que l'utilisateur est susceptible de fournir sur une page Web ne sont pas enregistrées.
+
+      Si ce paramètre est activé ou vide, l'utilisateur peut contrôler la saisie automatique pour les cartes de crédit dans l'interface utilisateur.</translation>
 <translation id="4791031774429044540">Active la fonctionnalité d'accessibilité de grand curseur.
 
           Si vous définissez cette règle sur "True", le grand curseur est activé en permanence.
@@ -1491,6 +1506,11 @@
       Si cette règle est associée à la valeur "True", <ph name="PRODUCT_OS_NAME" /> empêche l'appareil de démarrer en mode développeur. Le système refuse de se lancer et un écran d'erreur s'affiche lorsque le mode développeur est activé.
 
       Si cette règle n'est pas définie ou si elle est associée à la valeur "False", le mode développeur peut être sélectionné sur l'appareil.</translation>
+<translation id="520403427390290017">La fonctionnalité de cycle de vie des onglets récupère le processeur et finalement la mémoire associée aux onglets actuels qui n'ont pas été utilisés depuis longtemps, d'abord en limitant ces derniers, puis en les figeant, et enfin en les supprimant.
+
+      Si cette règle est définie sur False, cette fonctionnalité est désactivée, et tous les onglets continuent d'être utilisés normalement.
+
+      Si cette règle est définie sur True ou si elle n'est pas configurée, cette fonctionnalité est activée.</translation>
 <translation id="5208240613060747912">Permet de définir une liste de formats d'URL spécifiant les sites qui ne sont pas autorisés à afficher des notifications. 
 
 Si cette règle n'est pas configurée, la valeur par défaut globale sera utilisée pour tous les sites à partir de la règle "DefaultNotificationsSetting", si elle est définie, ou à défaut, à partir de la configuration personnelle de l'utilisateur.</translation>
@@ -1538,6 +1558,11 @@
 
           Si cette règle est définie sur "False", les utilisateurs ne peuvent pas caster de contenu sur leur appareil. Si elle est définie sur "True", les utilisateurs sont autorisés à caster du contenu. Si elle n'est pas définie, les utilisateurs ne peuvent pas caster de contenu sur les appareils Chrome OS enregistrés, mais ils peuvent le faire sur des appareils non enregistrés.</translation>
 <translation id="5330684698007383292">Autoriser <ph name="PRODUCT_FRAME_NAME" /> à gérer les types de contenu suivants</translation>
+<translation id="5360146044009867539">Active la fonctionnalité de saisie automatique de <ph name="PRODUCT_NAME" />, qui permet à l'utilisateur de remplir automatiquement des formulaires Web à partir de données stockées précédemment, telles que des informations relatives à son profil et à son adresse.
+
+      Si ce paramètre est désactivé, ces informations ne sont jamais suggérées ni saisies automatiquement. De même, les informations complémentaires relatives à l'adresse que l'utilisateur est susceptible de fournir sur une page Web ne sont pas enregistrées.
+
+      Si ce paramètre est activé ou vide, l'utilisateur peut contrôler la saisie automatique pour les adresses dans l'interface utilisateur.</translation>
 <translation id="5365946944967967336">Afficher le bouton Accueil sur la barre d'outils</translation>
 <translation id="5366745336748853475">Vous permet de spécifier une liste de formats d'URL indiquant les sites pour lesquels un certificat client est sélectionné automatiquement sur l'écran de connexion (dans le cadre où se trouve le flux SAML), lorsque le site nécessite un certificat. Par exemple, vous pouvez configurer un certificat applicable à l'intégralité de l'appareil afin de le présenter au fournisseur d'identité SAML.
 
@@ -2265,6 +2290,15 @@
 
           S'il est désactivé, cette fonctionnalité est alors indisponible.</translation>
 <translation id="7275334191706090484">Favoris gérés</translation>
+<translation id="729492886167634859">Cette règle dresse une liste de pourcentages qui définit la fraction d'appareils <ph name="PRODUCT_OS_NAME" /> de l'unité organisationnelle qui doivent être mis à jour par semaine à compter de la date où la mise à jour est détectée pour la première fois. La date de détection est postérieure à la date de publication de la mise à jour, car un certain temps peut s'écouler avant que l'appareil ne recherche des mises à jour après la publication de la mise à jour.
+
+      La valeur énième indiquée dans la liste définit le pourcentage d'appareils pour lesquels la nouvelle version doit être installée d'ici la énième semaine une fois qu'elle est détectée. Par exemple, si une mise à jour est détectée aujourd'hui, la première valeur dans la liste définit le pourcentage d'appareils de l'unité organisationnelle pour lesquels cette version doit être installée d'ici une semaine à compter d'aujourd'hui. La deuxième valeur définit le pourcentage d'appareils de l'UO pour lesquels cette version doit être installée d'ici deux semaines à compter d'aujourd'hui, et ainsi de suite.
+
+      Si cette règle est définie sur une valeur, elle s'applique à la place de la règle <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />.
+
+      Si cette liste est vide, il n'y a pas de déploiement par étapes et les mises à jour sont appliquées en fonction des autres règles des appareils.
+
+      Cette règle ne concerne pas les changements de version.</translation>
 <translation id="7295019613773647480">Activer les utilisateurs supervisés</translation>
 <translation id="7301543427086558500">Spécifie une liste d'URL alternatives pouvant être utilisées pour extraire des termes de recherche du moteur de recherche. Les URL doivent contenir la chaîne "<ph name="SEARCH_TERM_MARKER" />", qui est utilisée pour extraire les termes de recherche.
 
@@ -2732,6 +2766,12 @@
 
           Pour voir des exemples de formats, accédez à l'adresse https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Désactiver l'enregistrement de l'historique du navigateur</translation>
+<translation id="8498293625012059298">Permet de configurer l'URL de modification de mot de passe (protocoles HTTP et HTTPS uniquement). Le service de protection par mot de passe dirige les utilisateurs vers cette URL afin que ces derniers modifient leur mot de passe après avoir lu l'avertissement affiché dans le navigateur.
+      Afin que <ph name="PRODUCT_NAME" /> enregistre correctement la nouvelle empreinte numérique du mot de passe sur la page de modification de ce dernier, vérifiez si cette page respecte bien les consignes indiquées à l'adresse https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Si ce paramètre est activé, le service de protection par mot de passe dirige les utilisateurs vers cette URL afin que ces derniers modifient leur mot de passe après avoir lu l'avertissement affiché dans le navigateur.
+      Si ce paramètre est désactivé ou n'est pas défini, le service de protection par mot de passe dirige les utilisateurs vers la page https://myaccounts.google.com afin que ces derniers modifient leur mot de passe.
+      Cette règle n'est pas disponible sur les instances Windows non associées à un domaine <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Paramètres par défaut (les utilisateurs peuvent les contourner)</translation>
 <translation id="8507835864888987300">Définit une version cible pour les mises à jour automatiques.
 
@@ -2785,6 +2825,14 @@
       Si vous modifiez cette règle en la définissant sur "False", elle est appliquée aux machines virtuelles qui vont être lancées, mais elle n'arrête pas celles qui le sont déjà.
       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="8669669491594628013">Permet de contrôler le déclenchement de l'avertissement relatif à la protection par mot de passe. Le service de protection par mot de passe alerte l'utilisateur lorsque ce dernier réutilise son mot de passe protégé sur des sites potentiellement suspects.
+
+      Vous pouvez utiliser les règles "PasswordProtectionLoginURLs" et "PasswordProtectionChangePasswordURL" pour configurer le mot de passe à protéger.
+
+      Si cette règle est définie sur "PasswordProtectionWarningOff", aucun avertissement relatif à la protection par mot de passe ne s'affiche.
+      Si cette règle est définie sur "PasswordProtectionWarningOnPasswordReuse", l'avertissement s'affiche lorsque l'utilisateur réutilise son mot de passe Google sur des sites qui ne figurent pas sur la liste blanche.
+      Si cette règle est définie sur "PasswordProtectionWarningOnPhishingReuse", l'avertissement s'affiche lorsque l'utilisateur réutilise son mot de passe sur des sites d'hameçonnage.
+      Si cette règle n'est pas configurée, le service de protection par mot de passe ne protège que les mots de passe Google. Toutefois, l'utilisateur peut modifier ce paramètre.</translation>
 <translation id="8672321184841719703">Cibler une version pour les mises à jour automatiques</translation>
 <translation id="867410340948518937">U2F (Deuxième facteur universel)</translation>
 <translation id="8685024486845674965">L'avertissement relatif à la protection par mot de passe est déclenché par la réutilisation d'un mot de passe</translation>
diff --git a/components/policy/resources/policy_templates_gu.xtb b/components/policy/resources/policy_templates_gu.xtb
index 88cb236..8e0df35 100644
--- a/components/policy/resources/policy_templates_gu.xtb
+++ b/components/policy/resources/policy_templates_gu.xtb
@@ -285,6 +285,13 @@
       અન્યથા, જો બગ ધરાવતાં સર્વર માટે સુસંગતતા જાળવવી આવશ્યક હોય, તો આ નીતિ "tls1.1" પર સેટ કરવામાં આવી શકે છે. આ એક કામચલાઉ પગલું છે અને સર્વરને ઝડપથી ઠીક કરવું જોઈએ.</translation>
 <translation id="1864269674877167562">જો આ નીતિને ખાલી સ્ટ્રિંગ પર સેટ કરવામાં આવી હોય અથવા ગોઠવવામાં ન આવી હોય, તો વપરાશકર્તા સાઇન-ઇન ફ્લો દરમિયાન <ph name="PRODUCT_OS_NAME" /> સ્વતઃપૂર્ણ વિકલ્પ બતાવશે નહીં.
       જો આ નીતિને ડોમેન નામ દર્શાવતી સ્ટ્રિંગ પર સેટ કરી હોય, તો વપરાશકર્તા સાઇન-ઇન દરમિયાન <ph name="PRODUCT_OS_NAME" /> સ્વતઃપૂર્ણ વિકલ્પ બતાવશે જે દ્વારા તે વપરાશકર્તાને ડોમેન નામ એક્સ્ટેન્શન વગર માત્ર તેમના વપરાશકર્તા નામને લખવાની મંજૂરી આપશે. વપરાશકર્તા આ ડોમેન નામ એક્સ્ટેન્શનને અધિલેખિત કરવામાં સમર્થ હશે.</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" />માં નેટવર્ક અનુમાન ચાલુ કરે છે અને તેને બદલવાથી વપરાશકર્તાઓને અટકાવે છે.
+
+      આ વેબ પેજના DNS પ્રિફેચિંગ, TCP અને SSL પ્રિકનેક્શન અને પ્રિરેન્ડરિંગનું નિયંત્રણ કરે છે.
+
+      જો તમે આ નીતિ સેટ કરશો, તો વપરાશકર્તઓ તેને <ph name="PRODUCT_NAME" />માં આ સેટિંગ બદલી કે ઓવરરાઇડ નહીં કરી શકે.
+
+      જો આ નીતિ સેટ કર્યા વિનાની હશે, તો નેટવર્ક અનુમાન ચાલુ કરવામાં આવશે પણ વપરાશકર્તાઓ તેને બદલી શકશે.</translation>
 <translation id="1865417998205858223">કી પરવાનગીઓ</translation>
 <translation id="186719019195685253">AC પાવર પર ચાલુ હોવ ત્યારે નિષ્ક્રિય વિલંબ પર પહોંચવા પર લેવા માટેનું પગલું</translation>
 <translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ને ફાઇલ પસંદગી સંવાદો પ્રદર્શિત કરવાની મંજૂરી આપીને મશીન પરની સ્થાનિક ફાઇલોને ઍક્સેસ કરવાની મંજૂરી આપે છે. જો તમે આ સેટિંગને સક્ષમ કરો છો, તો વપરાશકર્તાઓ ફાઇલ પસંદગી સંવાદને સામાન્ય રીતે ખોલી શકે છે. જો તમે આ સેટિંગને અક્ષમ કરો છો, તો જ્યારે વપરાશકર્તા કોઈ ક્રિયા કરે છે જેના લીધે ફાઇલ પસંદગી સંવાદ ચાલુ થાય છે (જેમ કે બુકમાર્ક્સ આયાત કરવા, ફાઇલો અપલોડ કરવી, લિંક્સ સાચવવી વગેરે) ત્યારે તેના બદલે એક સંદેશ પ્રદર્શિત થાય છે અને વપરાશકર્તાએ ફાઇલ પસંદગી સંવાદ પર રદ કરો ક્લિક કરવું પડે છે. જો સેટિંગ સેટ નથી થતી, તો વપરાશકર્તાઓ સામાન્ય રીતે ફાઇલ પસંદગી સંવાદ ખોલી શકે છે.</translation>
@@ -799,6 +806,7 @@
       જો આ નીતિ સેટ કરેલ ન હોય, તો <ph name="PRINTERS_ALLOW_ALL" />ને માની લેવામાં આવે છે.
       </translation>
 <translation id="2908277604670530363">પ્રતિ  પ્રોક્સી સર્વર માટેના સમવર્તી કનેક્શંસની મહત્તમ સંખ્યા</translation>
+<translation id="2951386431828317490">ફૉર્મ માટે સ્વતઃભરણ ચાલુ કરો</translation>
 <translation id="2956777931324644324">આ નીતિને <ph name="PRODUCT_NAME" /> સંસ્કરણ 36 ની સાથે જ સમાપ્ત કરવામાં આવી છે.
 
       TLS ડોમેન-બાઉન્ડ પ્રમાણપત્રો એક્સ્ટેન્શનને સક્ષમ કરવું જોઈએ કે કેમ તેનો ઉલ્લેખ કરે છે.
@@ -808,6 +816,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> પ્રમાણીકરણ માટે એકાઉન્ટનો પ્રકાર</translation>
 <translation id="2959469725686993410">સમયઝોનનો ઉકેલ કરતી વખતે સર્વરને હંમેશાં WiFi ઍક્સેસ-પૉઇન્ટ મોકલો</translation>
 <translation id="2959898425599642200">પ્રોક્સી બાયપાસ નિયમો</translation>
+<translation id="2960128438010718932">નવું અપડેટ લાગુ કરવા માટેનું સ્ટેજિંગ શેડ્યૂલ</translation>
 <translation id="2960691910306063964">રિમોટ ઍક્સેસ હોસ્ટ માટે PIN-રહિત પ્રમાણીકરણ સક્ષમ અથવા અક્ષમ કરવું</translation>
 <translation id="2976002782221275500">વપરાશકર્તા ઇનપુટ વગર કેટલા સમય પછી બેટરી પાવર પર ચાલી રહેલ સ્ક્રીન મંદ થાય તે સમયની લંબાઈનો ઉલ્લેખ કરે છે. 
 
@@ -854,6 +863,7 @@
       આ નીતિને સેટ કરેલી છે કે નહી અથવા તેને કેવી રીતે સેટ કરવામાં આવે છે તે બાબતથી સ્વતંત્ર, WPAD ઓપ્ટિમાઇઝેશન સેટિંગને વપરાશકર્તાઓ દ્વારા બદલી શકાતું નથી.</translation>
 <translation id="3072045631333522102">રીટેલ મોડમાં સાઇન-ઇન સ્ક્રીન પર ઉપયોગ કરવા માટે સ્ક્રીન સેવર</translation>
 <translation id="3072847235228302527">ઉપકરણ-સ્થાનિક એકાઉન્ટ માટે સેવાની શરતો સેટ કરો</translation>
+<translation id="3077183141551274418">ટૅબ લાઇફસાઇકલ ચાલુ અથવા બંધ કરે છે</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" />માં Cast Receiverને ગોઠવો.</translation>
 <translation id="3088796212846734853">તમને URL પૅટર્નની એવી સૂચિ સેટ કરવાની મંજૂરી આપે છે જે છબી બતાવવાની મંજૂરી ધરાવતી હોય તેવી સાઇટનો ઉલ્લેખ કરતી હોય.
 
@@ -1518,6 +1528,11 @@
       આ સૂચનો Google સર્વરમાંથી રિમોટલી મેળવવામાં આવે છે.
 
       જો આ નીતિને false પર સેટ કરેલ હોય, તો સૂચનો મેળવવામાં અથવા પ્રદર્શિત કરવામાં આવશે નહીં.</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" />ની સ્વતઃભરણ સુવિધા ચાલુ કરે છે અને વપરાશકર્તાઓને પહેલાં સંગ્રહ કરેલી માહિતીનો ઉપયોગ કરીને ક્રેડિટ કાર્ડ તથા સરનામાની માહિતી આપમેળે ભરાય તે માટેની મંજૂરી આપે છે.
+
+      જો આ સેટિંગ બંધ કરેલ હશે, તો સ્વતઃભરણ ક્યારેય સૂચન નહીં આપે, ક્રેડિટ કાર્ડની માહિતી નહીં ભરે અથવા વેબને બ્રાઉઝ કરતી વખતે વપરાશકર્તાએ સબમિટ કરી હોઈ શકે તેવી ક્રેડિટ કાર્ડ વિશેની વધારાની માહિતી નહીં સાચવે.
+
+      જો આ સેટિંગ ચાલુ કરેલ હશે અથવા તેમાં કોઈ મૂલ્ય નહીં હોય, તો વપરાશકર્તા UIમાં ક્રેડિટ કાર્ડ માટે સ્વતઃભરણનું નિયંત્રણ કરી શકશે.</translation>
 <translation id="4791031774429044540">મોટું કર્સર ઍક્સેસિબિલિટી સુવિધાને સક્ષમ કરો.
 
           જો આ નીતિ ટ્રૂ પર સેટ કરેલી હોય, તો મોટું કર્સર હંમેશા સક્ષમ રહેશે.
@@ -1664,6 +1679,10 @@
       જો આ નીતિ ટ્રુ પર સેટ કરી છે, તો <ph name="PRODUCT_OS_NAME" />, ઉપકરણને વિકાસકર્તા મોડમાં બૂટ થવાથી અટકાવશે. સિસ્ટમ બૂટ થવાની ના પાડશે અને જ્યારે વિકાસકર્તા સ્વિચ ચાલુ કરી હોય ત્યારે ભૂલ સ્ક્રીન બતાવે છે.
 
       જો આ નીતિ સેટ કરેલી નથી અથવા ફોલ્સ પર સેટ કરેલી છે, તો ઉપકરણ માટે વિકાસકર્તા મોડ ઉપલબ્ધ રહેશે.</translation>
+<translation id="520403427390290017">ટૅબ લાઇફસાઇકલ સુવિધા CPU અને આખરે લાંબા સમયથી ઉપયોગમાં ન લેવાયા હોય તેવા ટૅબ ચલાવવા સાથે સંકળાયેલી મેમરી પાછી મેળવે છે, જેના માટે તે તેને પહેલા થ્રૉટલ કરે છે, પછી ફ્રીઝ કરે છે અને અંતે કાઢી નાખે છે.
+      જો નીતિ false પર સેટ કરેલી હશે, તો ટૅબ લાઇફસાઇકલ બંધ કરવામાં આવે છે અને બધાં ટૅબ સામાન્ય રૂપે ચાલતાં રાખવામાં આવશે.
+
+      જો નીતિ true પર સેટ કરેલી અથવા અસૂચિત હશે, તો ટૅબ લાઇફસાઇકલ ચાલુ કરવામાં આવે છે.</translation>
 <translation id="5208240613060747912">તમને url દાખલાઓની એક સૂચિ સેટ કરવા દે છે જે સૂચનાઓને પ્રદર્શિત કરવાની મંજૂરી ન આપતી સાઇટ્સનો ઉલ્લેખ કરે છે.
 
           જો આ નીતિ સેટ કર્યા વિના છોડી હોય તો 'DefaultNotificationsSetting' નીતિએ જો સેટ કરી હોય તો તે, અથવા વપરાશકર્તાની વ્યક્તિગત ગોઠવણીમાંથી વૈશ્વિક ડિફૉલ્ટ મૂલ્યનો ઉપયોગ તમામ સાઇટ્સ માટે કરવામાં આવશે.</translation>
@@ -1724,6 +1743,11 @@
 
           જો નીતિ False પર સેટ કરેલી હશે, તો વપરાશકર્તાઓ તેમના ઉપકરણ પર કન્ટેન્ટને કાસ્ટ નહીં કરી શકે. જો નીતિ True પર સેટ કરેલી હશે, તો વપરાશકર્તાઓ કન્ટેન્ટને કાસ્ટ કરી શકશે. જો આ નીતિ સેટ કરેલી નહીં હોય, તો વપરાશકર્તાઓને નોંધણી કરાવેલ Chrome OS ઉપકરણો પર કન્ટેન્ટને કાસ્ટ કરવાની મંજૂરી નથી, પરંતુ તેઓ નોંધણી ન કરાવેલ ઉપકરણો પર કાસ્ટ કરી શકશે.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> ને નીચે આપેલા સામગ્રી પ્રકારોને હેન્ડલ કરવાની મંજૂરી આપો</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" />ની સ્વતઃભરણ સુવિધા ચાલુ કરે છે અને વપરાશકર્તાઓને પહેલાં સંગ્રહ કરેલી માહિતીનો ઉપયોગ કરીને પ્રોફાઇલ તથા સરનામાની માહિતી આપમેળે ભરાય તે માટેની મંજૂરી આપે છે.
+
+      જો આ સેટિંગ બંધ કરેલ હશે, તો સ્વતઃભરણ ક્યારેય સૂચન નહીં આપે, સરનામાની માહિતી નહીં ભરે અથવા વેબને બ્રાઉઝ કરતી વખતે વપરાશકર્તાએ સબમિટ કરી હોઈ શકે તેવી સરનામા વિશેની વધારાની માહિતી નહીં સાચવે.
+
+      જો આ સેટિંગ ચાલુ કરેલ હશે અથવા તેમાં કોઈ મૂલ્ય નહીં હોય, તો વપરાશકર્તા UIમાં સરનામા માટે સ્વતઃભરણનું નિયંત્રણ કરી શકશે.</translation>
 <translation id="5365946944967967336">ટૂલબાર પર હોમ બટન બતાવો</translation>
 <translation id="5366745336748853475">જો સાઇટ પ્રમાણપત્રની વિનંતી કરે, તો SAML પ્રવાહ ફ્રેમ હોસ્ટિંગમાં સાઇન ઇન સ્ક્રીન પર તમને URL પૅટર્નની એક સૂચિનો ઉલ્લેખ કરવાની મંજૂરી આપે છે જે એવી સાઇટનો ઉલ્લેખ કરે છે જેના ક્લાયન્ટ પ્રમાણપત્ર આપમેળે પસંદ કરવામાં આવે છે. એક ઉદાહરણનો ઉપયોગ એ SAML IdPને પ્રસ્તુત કરતી વખતે ઉપકરણ પ્રમાણે પ્રમાણપત્ર ગોઠવવા માટે થાય છે.
 
@@ -2522,6 +2546,13 @@
       જો તમે આ સેટિંગ અક્ષમ કરો છો, તો વપરાશકર્તાઓને Smart Lock નો ઉપયોગ કરવાની મંજૂરી આપવામાં આવશે નહીં.
 
      જો આ નીતિને સેટ કર્યા વગર છોડવામાં આવે, તો ડિફૉલ્ટને એન્ટરપ્રાઇઝ-સંચાલિત વપરાશકર્તાઓ માટે મંજૂરી આપવામાં આવતી નથી અને બિન-સંચાલિત વપરાશકર્તાઓ માટે મંજૂરી આપવામાં આવે છે.</translation>
+<translation id="729492886167634859">આ નીતિ ટકાવારીની સૂચિ વ્યાખ્યાયિત કરે છે જે, અપડેટ પ્રથમ વાર શોધાયું હોય તે દિવસથી શરૂ કરીને અઠવાડિયા દીઠ અપડેટ કરવા માટે, OUમાં <ph name="PRODUCT_OS_NAME" /> ઉપકરણોનો અંશ વ્યાખ્યાયિત કરશે. અપડેટ શોધાયાનો સમય અપડેટ પ્રકાશિત થયાના સમય પછીનો હશે, કારણ કે અપડેટ પ્રકાશિત થયા પછી ઉપકરણ અપડેટ માટે તપાસ કરે તેમાં થોડો સમય લાગી શકે છે.
+      સૂચિમાંના n-મા મૂલ્યનો ઉપયોગ ઉપકરણોની ટકાવારી તરીકે કરવામાં આવશે, કે જે અપડેટ શોધાયા પછી n-મા અઠવાડિયામાં આગલા વર્ઝન પર પૂરેપૂરા અપડેટ થવા જોઈએ. ઉદાહરણ તરીકે, જો અપડેટ આજે શોધાયું હોય, તો સૂચિમાંનું પહેલું મૂલ્ય OUમાંના ઉપકરણોની એ ટકાવારી આપે છે જે આજથી એક અઠવાડિયામાં એ વર્ઝન પર અપડેટ થવા જોઈએ. બીજું મૂલ્ય OUમાંના ઉપકરણોની એ ટકાવારી આપે છે જે આજથી 2 અઠવાડિયાંમાં એ વર્ઝન પર અપડેટ થવા જોઈએ અને એ મુજબ વધુ.
+      જો આ નીતિ માટે કોઈ મૂલ્ય વ્યાખ્યાયિત કરેલું હશે, તો અપડેટ <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> નીતિને અવગણશે અને તેને બદલે આ નીતિને અનુસરશે.
+
+      જો આ સૂચિ ખાલી હશે, તો કોઈ સ્ટેજિંગ નહીં થાય અને અન્ય ઉપકરણોની નીતિઓ અનુસાર અપડેટ લાગુ કરવામાં આવશે.
+
+      આ નીતિ ચૅનલ સ્વિચો માટે લાગુ થતી નથી.</translation>
 <translation id="7295019613773647480">નિરીક્ષણ કરેલ વપરાશકર્તાઓને સક્ષમ કરો.</translation>
 <translation id="7301543427086558500">વૈકલ્પિક URL ની એક સૂચિ ઉલ્લેખિત કરે છે કે જેનો ઉપયોગ શોધ એન્જિનમાંથી શોધ શબ્દો કાઢવા માટે કરી શકાય છે. URL માં સ્ટ્રિંગ <ph name="SEARCH_TERM_MARKER" /> હોવી જોઈએ, જેનો ઉપયોગ શોધ શબ્દો કાઢવા માટે થશે.
 
@@ -3038,6 +3069,12 @@
 
            ઉદાહરણની પેટર્ન્સ માટે http://www.chromium.org/developers/how-tos/chrome-frame-getting-started જુઓ.</translation>
 <translation id="8493645415242333585">બ્રાઉઝર ઇતિહાસ સાચવવાનું અક્ષમ કરો</translation>
+<translation id="8498293625012059298">પાસવર્ડ બદલો URL (માત્ર HTTP અને HTTPS સ્કીમો) કન્ફિગર કરો. વપરાશકર્તાઓ બ્રાઉઝરમાં ચેતવણી જુએ તે પછી તેમનો પાસવર્ડ બદલવા માટે પાસવર્ડ સંરક્ષણ સેવા તેમને આ URL પર મોકલશે.
+      પાસવર્ડ બદલોના આ પેજ પર <ph name="PRODUCT_NAME" /> નવા પાસવર્ડની ફિંગરપ્રિન્ટ સાચી રીતે કૅપ્ચર કરી શકે તે માટે, કૃપા કરીને ખાતરી કરો કે તમારું પાસવર્ડ બદલો પેજ https://www.chromium.org/developers/design-documents/create-amazing-password-forms પરની માર્ગદર્શિકાઓનું પાલન કરે છે.
+
+      જો આ સેટિંગ ચાલુ કરેલી હશે, તો વપરાશકર્તાઓ બ્રાઉઝરમાં ચેતવણી જુએ તે પછી તેમનો પાસવર્ડ બદલવા માટે પાસવર્ડ સંરક્ષણ સેવા તેમને આ URL પર મોકલશે.
+      જો આ સેટિંગ બંધ કરેલી હશે અથવા સેટ નહીં કરી હોય, તો પાસવર્ડ સંરક્ષણ સેવા વપરાશકર્તાઓને તેમનો પાસવર્ડ બદલવા માટે https://myaccounts.google.com to change their password પર મોકલશે.
+      આ નીતિ <ph name="MS_AD_NAME" /> ડોમેન સાથે જોડાયેલ ન હોય તેવી Windows આવૃત્તિઓ પર ઉપલબ્ધ નથી.</translation>
 <translation id="8499172469244085141">ડિફૉલ્ટ સેટિંગ્સ (વપરાશકર્તાઓ ઓવરરાઇડ કરી શકે છે)</translation>
 <translation id="8507835864888987300">આપમેળે અપડેટ માટે લક્ષ્ય વર્ઝન સેટ કરે છે.
 
@@ -3095,6 +3132,13 @@
       જ્યારે આ નીતિ બદલીને False કરવામાં આવે, ત્યારે તે વર્ચ્યુઅલ મશીનો શરૂ કરવા માટે લાગુ થશે, પરંતુ જે વર્ચ્યુઅલ મશીનો પહેલેથી ચાલી રહ્યાં હશે તે બંધ નહીં થાય.
       જ્યારે આ નીતિ મેનેજ કરેલ ઉપકરણ પર સેટ કરવામાં આવી ન હોય, ત્યારે ઉપકરણને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી રહેશે નહીં.
       મેનેજ કર્યા વગરના ઉપકરણોને વર્ચ્યુઅલ મશીનો ચલાવવાની મંજૂરી હોય છે.</translation>
+<translation id="8669669491594628013">તમને પાસવર્ડ સંરક્ષણ ચેતવણી ટ્રિગર થવાનું નિયંત્રણ કરવાની મંજૂરી આપે છે. જ્યારે વપરાશકર્તાઓ તેમના સંરક્ષિત પાસવર્ડનો સંભવિત રૂપે શંકાસ્પદ સાઇટ પર ફરીથી ઉપયોગ કરે, ત્યારે પાસવર્ડ સંરક્ષણ તેમને ચેતવણી આપે છે.
+      કયા પાસવર્ડની સુરક્ષા કરવી તે કન્ફિગર કરવા માટે તમે 'PasswordProtectionLoginURLs' અને 'PasswordProtectionChangePasswordURL' નીતિઓનો ઉપયોગ કરી શકો છો.
+
+      જો આ નીતિ 'PasswordProtectionWarningOff' પર સેટ કરેલી હશે, તો પાસવર્ડ સંરક્ષણ સંબંધિત કોઈ ચેતવણી બતાવવામાં નહીં આવે.
+      જો આ નીતિ 'PasswordProtectionWarningOnPasswordReuse' પર સેટ કરેલી હશે, તો જ્યારે વપરાશકર્તા તેમના સંરક્ષિત પાસવર્ડનો વ્હાઇટલિસ્ટમાં ન હોય તેવી સાઇટ પર ફરીથી ઉપયોગ કરશે, ત્યારે તેમને પાસવર્ડ સંરક્ષણ ચેતવણી બતાવવામાં આવશે.
+      જો આ નીતિ 'PasswordProtectionWarningOnPhishingReuse' પર સેટ કરેલી હશે, તો જ્યારે વપરાશકર્તા તેમના સંરક્ષિત પાસવર્ડનો ફિશિંગ સાઇટ પર ફરીથી ઉપયોગ કરશે, ત્યારે તેમને પાસવર્ડ સંરક્ષણ ચેતવણી બતાવવામાં આવશે.
+      જો આ નીતિ સેટ કર્યા વિનાની હશે, તો પાસવર્ડ સંરક્ષણ સેવા માત્ર Google પાસવર્ડની સુરક્ષા કરશે, પણ વપરાશકર્તા આ સેટિંગ બદલી શકશે.</translation>
 <translation id="8672321184841719703">લક્ષ્ય સ્વતઃ અપડેટ સંસ્કરણ</translation>
 <translation id="867410340948518937">U2F (યુનિવર્સલ દ્વિતીય ફેક્ટર)</translation>
 <translation id="8685024486845674965">પાસવર્ડનો ફરી ઉપયોગ કરવાથી પાસવર્ડની સુરક્ષા ચેતવણી ટ્રિગર થઈ છે</translation>
diff --git a/components/policy/resources/policy_templates_hi.xtb b/components/policy/resources/policy_templates_hi.xtb
index 6fd784f..8f3e012a 100644
--- a/components/policy/resources/policy_templates_hi.xtb
+++ b/components/policy/resources/policy_templates_hi.xtb
@@ -241,6 +241,13 @@
       वरना, अगर बग वाले सर्वर के साथ काम करने की स्थिति बनाए रखनी ज़रूरी हो तो, इस नीति को "tls1.1" पर सेट किया जा सकता है. यह एक अस्थायी उपाय है और सर्वर को जल्दी ही ठीक किया जाना चाहिए.</translation>
 <translation id="1864269674877167562">अगर इस नीति को किसी खाली स्‍ट्रिंग पर सेट किया जाता है या कॉन्‍फ़िगर नहीं किया जाता है तो, उपयोगकर्ता के साइन इन के दौरान <ph name="PRODUCT_OS_NAME" /> अपने आप पूरा होने वाला कोई विकल्‍प नहीं दिखाएगा.
       अगर इस नीति को डोमेन नाम के बारे में बताने वाले किसी स्‍ट्रिंग पर सेट किया जाता है तो, उपयोगकर्ता के साइन इन करने पर <ph name="PRODUCT_OS_NAME" /> अपने आप पूरा होने वाला विकल्प दिखाएगा. इसकी मदद से उपयोगकर्ता डोमेन नाम एक्सेटेंशन के बिना सिर्फ़ अपना नाम लिख सकेगा. उपयोगकर्ता इस डोमेन नाम एक्‍सटेंशन को बदल सकेगा.</translation>
+<translation id="1864382791685519617">यह नीति, <ph name="PRODUCT_NAME" /> में 'नेटवर्क का पूर्वानुमान' सुविधा चालू करती है और उपयोगकर्ताओं को यह सेटिंग बदलने से रोकती है.
+
+      यह वेब पेजों की 'डीएनएस प्रीफ़ेचिंग', 'टीसीपी' और 'एसएसएल प्री-कनेक्शन' और प्रीरेंडरिंग को नियंत्रित करती है.
+
+      अगर आप इस नीति को सेट करते हैं, तो उपयोगकर्ता <ph name="PRODUCT_NAME" /> में इस सेटिंग को बदल नहीं सकेंगे या इसे ओवरराइड नहीं कर सकेंगे.
+
+      अगर यह नीति सेट नहीं की जाती है, तो 'नेटवर्क का पूर्वानुमान' सुविधा चालू हो जाएगी लेकिन उपयोगकर्ता उसे बदल सकेगा.</translation>
 <translation id="1865417998205858223">प्रमुख अनुमतियां</translation>
 <translation id="186719019195685253">AC पावर पर चलते समय प्रयोग में नहीं विलंब तक पहुंच जाने पर की जाने वाली कार्यवाही</translation>
 <translation id="187819629719252111">यह नीति, <ph name="PRODUCT_NAME" /> को 'फाइल चुनने का संवाद' दिखाने की अनुमति देकर मशीन पर मौजूद स्थानीय फ़ाइल का एक्सेस देती है. 
@@ -699,15 +706,15 @@
 <translation id="2899002520262095963">Android ऐप्लिकेशन इस नीति द्वारा सेट किए गए नेटवर्क कॉन्फ़िगरेशन और CA प्रमाणपत्रों का उपयोग कर सकते हैं, लेकिन उनके पास कुछ कॉन्फ़िगरेशन विकल्पों का एक्सेस नहीं होता.</translation>
 <translation id="290002216614278247">आपको क्लाइंट समय या दिन के इस्तेमाल कोटा के आधार पर उपयोगकर्ता का सत्र लॉक करने देती है.
 
-          |time_window_limit| ऐसी विंडो रोज़ तय करती है जिसमें उपयोगकर्ता के सत्र को लॉक किया जाना चाहिए. हम हफ़्ते के हर दिन के लिए सिर्फ़ एक नियम की सुविधा देते हैं, इसलिए |entries| सारणी का आकार 0 से सात तक अलग-अलग हो सकता है. |starts_at| और |ends_at| विंडो सीमा की शुरुआत और अंत होते हैं, जब |starts_at|के मुकाबले |ends_at| कम हो, तो इसका मतलब है कि |time_limit_window| अगले दिन खत्म होगी. |last_updated_millis| इस प्रविष्टि को आखिरी बार अपडेट किए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा.
+          |time_window_limit| ऐसी विंडो रोज़ तय करती है जिसमें उपयोगकर्ता के सत्र को लॉक किया जाना चाहिए. हम हफ़्ते के हर दिन के लिए सिर्फ़ एक नियम की सुविधा देते हैं, इसलिए |entries| सारणी का आकार 0 से सात तक अलग-अलग हो सकता है. |starts_at| और |ends_at| विंडो सीमा की शुरुआत और अंत होते हैं, जब |starts_at| के मुकाबले |ends_at| कम हो, तो इसका मतलब है कि |time_limit_window| अगले दिन खत्म होगी. |last_updated_millis| इस प्रविष्टि को आखिरी बार अपडेट किए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा.
 
-          |time_usage_limit| हर रोज़ का स्क्रीन कोटा बताती है, इसलिए जब उपयोगकर्ता उस कोटा तक पहुंचता है, तो उपयोगकर्ता का सत्र लॉक कर दिया जाता है. हफ़्ते के हर दिन के लिए एक प्रॉपर्टी होती है और उसे तभी सेट किया जाना चाहिए अगर उस दिन के लिए कोई चालू कोटा मौजूद हो. |usage_quota_mins| समय की वह मात्रा है जितनी देर तक दिनभर में प्रबंधित डिवाइस का इस्तेमाल किया जा सकता है और |reset_at| वह समय है जब इस्तेमाल का कोटा नवीनीकृत किया जाता है. |reset_at| का डिफ़ॉल्ट मान आधी रात ({'hour': 0, 'minute': 0}) होता है. |last_updated_millis| इस प्रविष्टि के आखिरी बार अपडेट किए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा.
+          |time_usage_limit| हर रोज़ का स्क्रीन कोटा बताती है, इसलिए जब उपयोगकर्ता उस कोटा तक पहुंचता है, तो उपयोगकर्ता का सत्र लॉक कर दिया जाता है. हफ़्ते के हर दिन के लिए एक प्रॉपर्टी होती है और उसे तभी सेट किया जाना चाहिए जब उस दिन के लिए कोई चालू कोटा मौजूद हो. |usage_quota_mins| समय की वह मात्रा है जितनी देर तक दिन भर में प्रबंधित डिवाइस का इस्तेमाल किया जा सकता है और |reset_at| वह समय है जब इस्तेमाल का कोटा नवीनीकृत किया जाता है. |reset_at| का डिफ़ॉल्ट मान आधी रात ({'hour': 0, 'minute': 0}) होता है. |last_updated_millis| इस प्रविष्टि के आखिरी बार अपडेट किए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा.
 
           |overrides| को पिछले एक या उससे ज़्यादा नियमों को कुछ समय के लिए अमान्य करने के लिए उपलब्ध कराया जाता है.
           * अगर time_window_limit या time_usage_limit, दोनों ही चालू न हों तो डिवाइस को लॉक करने के लिए चालू |LOCK| का इस्तेमाल किया जा सकता है.
           * |LOCK| से उपयोगकर्ता सत्र सिर्फ़ उतनी ही देर तक के लिए लॉक हो जाता है जब तक कि अगली time_window_limit या time_usage_limit शुरू नहीं हो जाए.
           * |UNLOCK| से time_window_limit या time_usage_limit के ज़रिए लॉक किया हुआ उपयोगकर्ता का सत्र अनलॉक हो जाता है.
-          |created_time_millis| ओवराइड बनाए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर इसलिए भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा. इसका इस्तेमाल यह तय करने के लिए किया जाता है कि इस ओवरराइड को अभी भी लागू किया जाना चाहिए या नहीं. अगर मौजूदा चालू समय सीमा की सुविधा (समय इस्तेमाल की सीमा या समय विंडो की सीमा) ओवरराइड बनाने के बाद शुरू हुई है, तो उसे कार्रवाई नहीं करना चाहिए. इसके साथ ही अगर ओवरराइड को चालू time_window_limit या time_usage_window के आखिरी बदलाव से पहले बनाया गया था, तो उसे लागू नहीं किया जाना चाहिए.
+          |created_time_millis| ओवरराइड बनाए जाने का UTC टाइमस्टैम्प है, इसे स्ट्रिंग के तौर पर इसलिए भेजा जाता है क्योंकि टाइमस्टैम्प किसी पूर्णांक में फ़िट नहीं बैठेगा. इसका इस्तेमाल यह तय करने के लिए किया जाता है कि इस ओवरराइड को अभी भी लागू किया जाना चाहिए या नहीं. अगर मौजूदा चालू समय सीमा की सुविधा (समय इस्तेमाल की सीमा या समय विंडो की सीमा) ओवरराइड बनाने के बाद शुरू हुई है, तो उसे कार्रवाई नहीं करना चाहिए. इसके साथ ही अगर ओवरराइड को चालू time_window_limit या time_usage_window के आखिरी बदलाव से पहले बनाया गया था, तो उसे लागू नहीं किया जाना चाहिए.
 
           एक से ज़्यादा ओवरराइड भेजे जा सकते हैं, सबसे नई प्रविष्टि वह है जिसे लागू किया जाने वाला है.</translation>
 <translation id="2906874737073861391">AppPack एक्सटेंशन की सूची</translation>
@@ -718,6 +725,7 @@
       अगर यह नीति सेट नहीं की जाती है, तो <ph name="PRINTERS_ALLOW_ALL" /> की स्थिति मानी जाती है.
       </translation>
 <translation id="2908277604670530363">प्रॉक्‍सी सर्वर के समवर्ती कनेक्‍शन की अधि‍कतम संख्‍या</translation>
+<translation id="2951386431828317490">प्रोफ़ाइल के लिए 'अपने आप भरने की सुविधा (ऑटो फ़िल)' चालू करती है</translation>
 <translation id="2956777931324644324">यह नीति <ph name="PRODUCT_NAME" /> वर्शन 36 से निकाल दी गई है.
 
       निर्दिष्ट करती है कि क्या TLS डोमेन-सीमित प्रमाणपत्रों को सक्षम किया जाना चाहिए.
@@ -726,6 +734,7 @@
 <translation id="2957506574938329824">किसी भी साइट को वेब ब्लूटूथ API (एपीआई) के ज़रिए ब्लूटूथ डिवाइस का एक्सेस न मांगने दें</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> प्रमाणीकरण के लिए खाता प्रकार</translation>
 <translation id="2959898425599642200">प्रॉक्सी बायपास नियम</translation>
+<translation id="2960128438010718932">नया अपडेट लागू करने के लिए कदम दर कदम शेड्यूल</translation>
 <translation id="2960691910306063964">रिमोट ऐक्‍सेस वाले होस्‍ट के लिए 'बिना पिन के पहचान करने की सुविधा' चालू या बंद करें</translation>
 <translation id="2976002782221275500">बैटरी पावर पर चलते समय उस समय सीमा के बारे में बताती है, जितनी देर तक उपयोगकर्ता अगर कोई भी इनपुट नहीं देता है तो, उसके बाद स्क्रीन की रोशनी कम हो जाती है.
 
@@ -767,6 +776,7 @@
       भले ही इस पॉलिसी को किसी भी तरह से सेट किया जाए, WPAD ऑप्टिमाइज़ेशन सेटिंग को उपयोगकर्ताओं के द्वारा नहीं बदला जा सकता है.</translation>
 <translation id="3072045631333522102">रिटेल मोड में साइन-इन स्‍क्रीन पर उपयोग करने के लिए स्‍क्रीन सेवर</translation>
 <translation id="3072847235228302527">डिवाइस-स्थानीय खाते के लिए सेवा की शर्तों सेट करना</translation>
+<translation id="3077183141551274418">'टैब लाइफ़ साइकल' सुविधा को चालू या बंद करती है</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> में कास्ट पाने वाले को कॉन्फ़िगर करें.</translation>
 <translation id="3088796212846734853">आपको उन साइटों के बारे में बताने वाले यूआरएल पैटर्न की सूची सेट करने देती है जिन्हें इमेज दिखाने की मंज़ूरी है.
 
@@ -1341,6 +1351,11 @@
       इन सुझावों को Google के सर्वर से दूर से ही फ़ेच किया जाएगा.
 
       अगर इस सेटिंग को गलत पर सेट किया जाता है, तो सुझावों को न तो फ़ेच किया जाएगा, न ही उन्हें दिखाया जाएगा.</translation>
+<translation id="4788252609789586009">यह नीति, <ph name="PRODUCT_NAME" /> की 'अपने आप भरने की सुविधा (ऑटो फ़िल)' चालू करती है. इसके ज़रिए उपयोगकर्ताओं को क्रेडिट कार्ड से जुड़ी जानकारी जैसी पहले से संग्रहित जानकारी की मदद से वेब फ़ॉर्म अपने आप भरने की सुविधा मिलती है.
+
+      अगर यह सेटिंग बंद होती है, तो 'अपने आप भरने की सुविधा' कभी कोई सुझाव नहीं देगी या क्रेडिट कार्ड की जानकारी अपने आप नहीं भरेगी. साथ ही यह, क्रेडिट कार्ड की उस और भी जानकारी को सेव नहीं करेगी जिसे उपयोगकर्ता ने शायद वेब ब्राउज़ करते समय सबमिट किया हो.
+
+      अगर यह सेटिंग चालू होती है या कोई मान नहीं दिया जाता है, तो उपयोगकर्ता यूज़र इंटरफ़ेस (यूआई) में क्रेडिट कार्ड के लिए 'अपने आप भरने की सुविधा' को नियंत्रित कर पाएगा.</translation>
 <translation id="4791031774429044540">'बड़े कर्सर की सुलभता सुविधा' चालू करें.
 
           अगर यह नीति 'सही' पर सेट है तो, बड़ा कर्सर हमेशा चालू रहेगा.
@@ -1481,6 +1496,11 @@
       यदि यह नीति सही पर सेट की जाती है, तो <ph name="PRODUCT_OS_NAME" /> डिवाइस को डेवलपर मोड में बूट होने से रोकेगा. डेवलपर स्विच चालू होने पर सिस्टम बूट होने से मना कर देगा और एक गड़बड़ी स्क्रीन दिखाएगा.
 
       यदि यह नीति सेट नहीं की जाती या गलत पर सेट की जाती है, तो डेवलपर मोड डिवाइस के लिए उपलब्ध रहेगा.</translation>
+<translation id="520403427390290017">'टैब लाइफ़ साइकल' सुविधा सीपीयू (CPU) पर और आखिरकार चल रहे टैब से जुड़ी ऐसी मेमोरी वापस ले लेती है जो काफ़ी समय से इस्तेमाल नहीं की गई है. इसके लिए वह सबसे पहले उन टैब को धीमा करती है, फिर उन्हें फ़्रीज़ करती है और आखिर में उन्हें निकाल देती है.
+
+      अगर नीति को गलत पर सेट किया जाता है, तो 'टैब लाइफ़ साइकल' सुविधा बंद होती है और सभी टैब सामान्य रूप से चलते रहेंगे.
+
+      अगर नीति सही पर सेट की जाती है या तय किए बिना छोड़ दी जाती है, तो 'टैब लाइफ़ साइकल' सुविधा चालू होती है.</translation>
 <translation id="5208240613060747912">यह नीति आपको उन 'यूआरएल पैटर्न' की सूची सेट करने देती है जो ऐसी साइटें बताते हैं जिनमें सूचनाएं दिखाने की अनुमति है.
 
           अगर यह नीति सेट नहीं की जाती है तो, सभी साइटों के लिए 'ग्लोबल डिफ़ॉल्ट मान' का उपयोग किया जाएगा. यह मान, 'DefaultPluginsSetting' नीति सेट होने पर उससे लिया जाएगा वरना उपयोगकर्ता के निजी कॉन्फ़िगरेशन से लिया जाएगा.</translation>
@@ -1528,6 +1548,11 @@
 
           अगर यह नीति गलत पर सेट की जाती है, तो उपयोगकर्ता उपने डिवाइस पर सामग्री कास्ट नहीं कर पाएंगे. अगर यह नीति सही पर सेट की जाती है, तो उपयोगकर्ता सामग्री कास्ट कर सकते हैं. अगर यह नीति सेट नहीं की जाती है, तो उपयोगकर्ता नामांकित Chrome OS डिवाइसों पर सामग्री कास्ट नहीं कर सकते हैं, लेकिन वे नामांकित नहीं किए गए डिवाइसों पर कास्ट कर सकते हैं.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> को सामग्री के निम्‍न प्रकारों को प्रबंधित करने दें</translation>
+<translation id="5360146044009867539">यह नीति, <ph name="PRODUCT_NAME" /> की 'अपने आप भरने की सुविधा (ऑटो फ़िल)' चालू करती है और इसके ज़रिए उपयोगकर्ताओं को प्रोफ़ाइल और पते से जुड़ी जानकारी जैसी पहले से संग्रहित जानकारी की मदद से वेब फ़ॉर्म अपने आप भरने की सुविधा मिलती है.
+
+      अगर यह सेटिंग बंद होती है, तो 'अपने आप भरने की सुविधा' कभी कोई सुझाव नहीं देगी या पते की जानकारी अपने आप नहीं भरेगी. साथ ही यह, पते की उस और भी जानकारी को सेव नहीं करेगी जिसे उपयोगकर्ता ने शायद वेब ब्राउज़ करते समय सबमिट किया हो.
+
+      अगर यह सेटिंग चालू होती है या कोई मान नहीं दिया जाता है, तो उपयोगकर्ता यूज़र इंटरफ़ेस (यूआई) में पतों के लिए 'अपने आप भरने की सुविधा' को नियंत्रित कर पाएगा.</translation>
 <translation id="5365946944967967336">टूलबार पर मुख्यपृष्ठ बटन दिखाएं</translation>
 <translation id="5366745336748853475">अगर साइट कोई प्रमाणपत्र मांगती है, तो यह आपको ऐसे यूआरएल पैटर्न की सूची तय करने देती है जिसमें ऐसी साइटें होती हैं जिनके लिए SAML फ़्लो होस्ट करने वाली फ़्रेम में साइन-इन स्क्रीन पर क्लाइंट प्रमाणपत्र अपने आप चुना जाता है. SAML IdP को प्रस्तुत किया जाने वाला डिवाइस-व्यापी प्रमाणपत्र कॉन्फ़िगर करना इसके इस्तेमाल का एक उदाहरण है.
 
@@ -2259,6 +2284,15 @@
 
           यदि यह सेटिंग अक्षम की गई हो, तो यह सुविधा उपलब्ध नहीं होगी.</translation>
 <translation id="7275334191706090484">प्रबंधित बुकमार्क</translation>
+<translation id="729492886167634859">यह नीति OU में मौजूद <ph name="PRODUCT_OS_NAME" /> डिवाइस के ऐसे हिस्से तय करने वाले प्रतिशत की सूची बताती है जिन्हें अपडेट का पहली बार पता चलने वाले दिन से शुरू करते हुए हर हफ़्ते अपडेट किया जाना है. पता चलने का समय अपडेट प्रकाशित किए जाने से बाद का समय होता है, क्योंकि अपडेट प्रकाशित करने के बाद डिवाइस पर अपडेट देखने में कुछ समय लग सकता है.
+
+      सूची में दिए गए n-वें मान का इस्तेमाल उन डिवाइस के प्रतिशत के रूप में किया जाएगा जिन्हें अपडेट का पता चलने के बाद n-वें हफ़्ते में अगले वर्शन में अपडेट करने का काम पूरा कर लेना चाहिए. उदाहरण के लिए, अगर आज किसी अपडेट का पता लगता है, तो सूची में दिया गया पहला मान OU में मौजूद उन डिवाइस का प्रतिशत तय करता है जिन्हें आज से एक हफ़्ते के अंदर उस वर्शन में अपडेट हो जाना चाहिए. दूसरा मान OU में मौजूद उन डिवाइस का प्रतिशत तय करता है जिन्हें आज से दो हफ़्ते के अंदर उस वर्शन में अपडेट हो जाना चाहिए और आगे इसी तरह बताया जाता है.
+
+      अगर इस नीति के लिए कोई मान तय किया जाता है, तो अपडेट <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> नीति को अनदेखा करेंगे और उसके बजाय इस नीति का पालन करेंगे.
+
+      अगर यह सूची खाली होती है, तो अपडेट लागू करने के लिए कोई कदम दर कदम शेड्यूल नहीं होगा और अपडेट दूसरी डिवाइस नीतियों के हिसाब से लागू किए जाएंगे.
+
+      यह नीति चैनल स्विच करने के मामले में लागू नहीं होती है.</translation>
 <translation id="7295019613773647480">पर्यवेक्षित उपयोगकर्ताओं को सक्षम करें</translation>
 <translation id="7301543427086558500">वैकल्पिक यूआरएल की उस सूची को निर्दिष्ट करती है जिसका उपयोग सर्च इंजन से सर्च के लिए इस्तेमाल किये गए शब्दों को निकालने के लिए किया जा सकता है. यूआरएल में स्ट्रिंग <ph name="SEARCH_TERM_MARKER" /> होनी चाहिए, जिसका उपयोग सर्च के लिए इस्तेमाल किये गए शब्दों को निकालने के लिए किया जाएगा.
 
@@ -2724,6 +2758,12 @@
 
           पैटर्न के उदाहरण के लिए https://www.chromium.org/developers/how-tos/chrome-frame-getting-started देखें.</translation>
 <translation id="8493645415242333585">ब्राउज़र इतिहास को सेव करना बंद करें</translation>
+<translation id="8498293625012059298">यह नीति, पासवर्ड बदलने का यूआरएल (सिर्फ़ HTTP और HTTPS योजनाएं) कॉन्फ़िगर करती है. 'पासवर्ड सुरक्षा सेवा' उपयोगकर्ताओं को इस यूआरएल पर भेजेगी ताकि वे ब्राउज़र में चेतावनी देखने के बाद अपने पासवर्ड बदल सकें.
+      पासवर्ड बदलने के इस पेज पर <ph name="PRODUCT_NAME" /> नए पासवर्ड का फ़िंगरप्रिंट सही तरीके से कैप्चर करे, इसके लिए कृपया पक्का करें कि पासवर्ड बदलने का आपका पेज https://www.chromium.org/developers/design-documents/create-amazing-password-forms पर दिए गए दिशानिर्देशों का पालन करता है.
+
+      अगर यह सेटिंग चालू होती है, तो 'पासवर्ड सुरक्षा सेवा' उपयोगकर्ताओं को इस यूआरएल पर भेजेगी ताकि वे ब्राउज़र में चेतावनी देखने के बाद अपने पासवर्ड बदल सकें.
+      अगर यह सेटिंग बंद होती है या सेट नहीं की जाती है, तो 'पासवर्ड सुरक्षा सेवा' उपयोगकर्ताओं को अपने पासवर्ड बदलने के लिए https://myaccounts.google.com पर भेजेगी.
+      यह नीति उन Windows इंस्टेंस पर उपलब्ध नहीं है जो किसी <ph name="MS_AD_NAME" /> डोमेन से जुड़े हुए नहीं हैं.</translation>
 <translation id="8499172469244085141">डिफ़ॉल्ट सेटिंग (उपयोगकर्ता ओवरराइड कर सकते हैं)</translation>
 <translation id="8507835864888987300">यह नीति अपने आप अपडेट होने के लिए टारगेट वर्शन सेट करती है.
 
@@ -2778,6 +2818,14 @@
       जब यह नीति गलत में बदल दी जाती है, तो यह नई वर्चुअल मशीनें शुरू करने पर लागू होती है लेकिन पहले से चल रही वर्चुअल मशीनें बंद नहीं करती है.
       जब यह नीति किसी प्रबंधित डिवाइस पर सेट नहीं होती है, तो डिवाइस वर्चुअल मशीनें नहीं चला सकेगा.
       प्रबंधित नहीं किए गए डिवाइस वर्चुअल मशीनें चला सकते हैं.</translation>
+<translation id="8669669491594628013">यह नीति आपको 'पासवर्ड सुरक्षा' की चेतावनी ट्रिगर करने का नियंत्रण देती है. जब उपयोगकर्ता ऐसी साइटों पर अपने सुरक्षित पासवर्ड का दोबारा इस्तेमाल करते हैं जिनसे उनकी सुरक्षा को खतरा हो सकता है तब 'पासवर्ड सुरक्षा' उन्हें चेतावनी देती है.
+
+      आप सुरक्षित किए जाने वाले पासवर्ड कॉन्फ़िगर करने के लिए 'PasswordProtectionLoginURLs' और 'PasswordProtectionChangePasswordURL' नीतियों का इस्तेमाल कर सकते हैं.
+
+      अगर इस नीति को 'PasswordProtectionWarningOff' पर सेट किया जाता है, तो 'पासवर्ड सुरक्षा' की कोई चेतावनी नहीं दिखाई जाएगी.
+      अगर इस नीति को 'PasswordProtectionWarningOnPasswordReuse' पर सेट किया जाता है, तो उपयोगकर्ता की ओर से किसी ऐसी साइट पर अपने सुरक्षित पासवर्ड का दोबारा इस्तेमाल किए जाने पर 'पासवर्ड सुरक्षा' की चेतावनी दिखाई जाएगी जिसे स्वीकृति नहीं दी गई है.
+      अगर इस नीति को 'PasswordProtectionWarningOnPhishingReuse' पर सेट किया जाता है, तो उपयोगकर्ता की ओर से किसी फ़िशिंग साइट पर अपने सुरक्षित पासवर्ड का दोबारा इस्तेमाल किए जाने पर 'पासवर्ड सुरक्षा' की चेतावनी दिखाई जाएगी.
+      अगर इस नीति को सेट किए बिना छोड़ दिया जाता है, तो 'पासवर्ड सुरक्षा सेवा' सिर्फ़ Google के पासवर्ड सुरक्षित रखेगी, लेकिन उपयोगकर्ता इस सेटिंग को बदल सकेगा.</translation>
 <translation id="8672321184841719703">स्वत: अपडेट वर्शन को लक्ष्य बनाएं</translation>
 <translation id="867410340948518937">U2F (यूनिवर्सल सेकेंड फैक्टर)</translation>
 <translation id="8685024486845674965">पासवर्ड का फिर से इस्तेमाल होने पर पासवर्ड सुरक्षा की ओर से चेतावनी ट्रिगर की गई है</translation>
diff --git a/components/policy/resources/policy_templates_hr.xtb b/components/policy/resources/policy_templates_hr.xtb
index d7b49aa..0b29e44 100644
--- a/components/policy/resources/policy_templates_hr.xtb
+++ b/components/policy/resources/policy_templates_hr.xtb
@@ -240,6 +240,13 @@
       No ako se mora održati kompatibilnost s poslužiteljem koji sadrži pogreške, pravilo se može postaviti na "tls1.1". To je samo privremena mjera i problem na poslužitelju potrebno je brzo riješiti.</translation>
 <translation id="1864269674877167562">Ako se to pravilo postavi na prazan niz ili se ne konfigurira, <ph name="PRODUCT_OS_NAME" /> neće prikazivati opciju samodovršavanja prilikom tijeka korisničke prijave.
       Ako se to pravilo postavi na niz koji predstavlja naziv domene, <ph name="PRODUCT_OS_NAME" /> prikazivat će opciju samodovršavanja prilikom korisničke prijave koja omogućuje korisniku da unese samo svoje korisničko ime bez proširenja s nazivom domene. Korisnik će moći unijeti neko drugo proširenje s nazivom domene.</translation>
+<translation id="1864382791685519617">Omogućuje mrežno predviđanje na usluzi <ph name="PRODUCT_NAME" /> i sprječava korisnike da promijene tu postavku.
+
+      Time se kontrolira prethodno dohvaćanje DNS-a, TCP i SSL pretpovezivanje i prethodno generiranje web-stranica.
+
+      Ako postavite to pravilo, korisnici ne mogu promijeniti ni nadjačati tu postavku na usluzi <ph name="PRODUCT_NAME" />.
+
+      Ako se to pravilo ne postavi, mrežno predviđanje bit će omogućeno, no korisnik će to moći promijeniti.</translation>
 <translation id="1865417998205858223">Glavna dopuštenja</translation>
 <translation id="186719019195685253">Radnja koja se poduzima kada se dosegne odgoda zbog neaktivnosti dok je računalo priključeno na struju</translation>
 <translation id="187819629719252111">Omogućuje pristup lokalnim datotekama na računalu tako da dopušta proizvodu <ph name="PRODUCT_NAME" /> prikaz dijaloških okvira za odabir datoteka. Ako omogućite ovu postavku, korisnici mogu otvarati dijaloške okvire za odabir datoteka kao i obično. Ako onemogućite ovu postavku, svaki put kad korisnik napravi neku radnju koja bi dovela do otvaranja dijaloškog okvira za odabir datoteka (poput uvoza knjižnih oznaka, prijenosa datoteka, spremanja veza itd.) umjesto dijaloškog okvira prikazat će se poruka, a za korisnika će se pretpostaviti da je kliknuo "Odustani" u dijaloškom okviru za odabir datoteka. Ako ova postavka nije postavljena, korisnici mogu otvarati dijaloške okvire za odabir datoteka kao i obično.</translation>
@@ -696,6 +703,7 @@
       Ako se to pravilo ne postavi, pretpostavlja se da vrijedi <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maksimalan broj istodobnih veza na proxy poslužitelju</translation>
+<translation id="2951386431828317490">Omogući Automatsko popunjavanje za profile</translation>
 <translation id="2956777931324644324">To je pravilo ukinuto od verzije <ph name="PRODUCT_NAME" /> 36.
 
       Određuje hoće li proširenje TLS certifikata vezanih uz domenu biti omogućeno.
@@ -704,6 +712,7 @@
 <translation id="2957506574938329824">Nemoj dopustiti nijednoj web-lokaciji da traži pristup Bluetooth uređajima putem API-ja Web Bluetooth</translation>
 <translation id="2957513448235202597">Vrsta računa za <ph name="HTTP_NEGOTIATE" /> autentifikaciju</translation>
 <translation id="2959898425599642200">Pravila zaobilaženja proxyja</translation>
+<translation id="2960128438010718932">Raspored postupnog uvođenja za primjenu novog ažuriranja</translation>
 <translation id="2960691910306063964">Omogući ili onemogući autentifikaciju bez PIN-a za hostove daljinskog pristupa</translation>
 <translation id="2976002782221275500">Određuje koliko vremena treba proteći bez aktivnosti korisnika da bi se zaslon zatamnio tijekom rada s baterijskim napajanjem.
 
@@ -744,6 +753,7 @@
       Neovisno o tome hoće li se to pravilo postaviti i na koji način, korisnici ne mogu mijenjati postavku optimizacije WPAD-a.</translation>
 <translation id="3072045631333522102">Čuvar zaslona koji će se upotrebljavati na zaslonu prijave u prodajnom načinu</translation>
 <translation id="3072847235228302527">Postavi Uvjete pružanja usluge za lokalni račun na uređaju</translation>
+<translation id="3077183141551274418">Omogućuje ili onemogućuje životne cikluse kartica</translation>
 <translation id="3086995894968271156">Konfiguriranje pravila Cast prijemnika u proizvodu <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Omogućuje vam postavljanje popisa uzoraka URL-ova koji navode web-lokacije kojima je dopušteno prikazivati slike.
 
@@ -1294,6 +1304,11 @@
       Ti se prijedlozi dohvaćaju daljinski s Googleovih poslužitelja.
 
       Ako se pravilo postavi na False, prijedlozi se neće dohvaćati ni prikazivati.</translation>
+<translation id="4788252609789586009">Omogućuje značajku Automatsko popunjavanje na usluzi <ph name="PRODUCT_NAME" /> i omogućuje korisnicima automatsko unošenje podataka o kreditnim karticama u web-obrasce pomoću prethodno pohranjenih podataka.
+
+      Ako se ta postavka onemogući, Automatsko popunjavanje nikada neće predlagati niti unositi podatke o kreditnim karticama niti će spremiti dodatne podatke o kreditnim karticama koje bi korisnik mogao unijeti tijekom pregledavanja weba.
+
+      Ako se ta postavka omogući ili nema vrijednost, korisnik će moći kontrolirati Automatsko popunjavanje za kreditne kartice na korisničkom sučelju.</translation>
 <translation id="4791031774429044540">Omogući značajku pristupačnosti velikog pokazivača.
 
           Ako se to pravilo postavi na točno, veliki će pokazivač uvijek biti omogućen.
@@ -1424,6 +1439,11 @@
       Ako se to pravilo postavi na točno, <ph name="PRODUCT_OS_NAME" /> sprječava pokretanje uređaja u načinu rada razvojnog programera. Sustav će odbiti pokretanje i prikazati zaslon pogreške kada je način rada razvojnog programera uključen.
 
       Ako se to pravilo ne postavi ili se postavi na lažno, način rada razvojnog programera bit će dostupan za uređaj.</translation>
+<translation id="520403427390290017">Značajka životnih ciklusa kartica rasterećuje procesor, a time i memoriju povezanu s izvođenjem kartica koje se dulje nisu koristile tako što ih najprije priguši, zatim zamrzne i konačno odbaci.
+
+      Ako se to pravilo postavi na False, životni su ciklusi kartica onemogućeni i sve se kartice izvode na uobičajen način.
+
+      Ako se to pravilo postavi na True ili se ne navede, životni su ciklusi kartica omogućeni.</translation>
 <translation id="5208240613060747912">Omogućuje postavljanje popisa uzoraka URL-ova koji određuju web-lokacije koje ne smiju prikazivati obavijesti. Ako ovo pravilo nije postavljeno, upotrebljavat će se globalna zadana vrijednost za sve web-lokacije iz pravila "DefaultNotificationsSetting" ako je postavljeno, odnosno iz osobne konfiguracije korisnika ako nije.</translation>
 <translation id="5219844027738217407">Za Android aplikacije to pravilo utječe samo na mikrofon. Kada se to pravilo postavi na True, mikrofon je isključen za sve Android aplikacije, bez iznimke.</translation>
 <translation id="523505283826916779">Postavke pristupačnosti</translation>
@@ -1469,6 +1489,11 @@
 
           Ako se to pravilo postavi na False, korisnici neće moći emitirati sadržaj na svom uređaju. Ako se pravilo postavi na True, korisnici će moći emitirati sadržaj. Ako se pravilo ne postavi, korisnici neće moći emitirati sadržaj na registrirane uređaje s OS-om Chrome, ali će moći emitirati na neregistrirane uređaje.</translation>
 <translation id="5330684698007383292">Dopusti proizvodu <ph name="PRODUCT_FRAME_NAME" /> rukovanje sljedećim vrstama sadržaja</translation>
+<translation id="5360146044009867539">Omogućuje značajku Automatsko popunjavanje na usluzi <ph name="PRODUCT_NAME" /> i omogućuje korisnicima automatsko unošenje podataka o profilu i adresi u web-obrasce pomoću prethodno pohranjenih podataka.
+
+      Ako se ta postavka onemogući, Automatsko popunjavanje nikad neće predlagati niti unositi podatke o adresi niti će spremati dodatne podatke o adresi koje korisnik može unijeti tijekom pregledavanja weba.
+
+      Ako se ta postavka omogući ili nema vrijednost, korisnik će moći kontrolirati Automatsko popunjavanje za adrese na korisničkom sučelju.</translation>
 <translation id="5365946944967967336">Prikaži gumb Početna na alatnoj traci</translation>
 <translation id="5366745336748853475">Omogućuje vam da navedete popis uzoraka URL-ova koji određuju web-lokacije za koje je certifikat klijenta automatski odabran na zaslonu za prijavu u okviru koji hostira SAML protok, ako web-lokacija zahtijeva certifikat. Primjer upotrebe je konfiguracija certifikata za cijeli uređaj koji će se pojaviti za SAML IdP.
 
@@ -2149,6 +2174,15 @@
 
           Ako je ta postavka onemogućena, ta značajka neće biti dostupna.</translation>
 <translation id="7275334191706090484">Upravljane oznake</translation>
+<translation id="729492886167634859">Pravilom se definira popis postotaka kojim će se definirati udio <ph name="PRODUCT_OS_NAME" /> uređaja u organizacijskoj jedinici za tjedno ažuriranje počevši od dana otkrivanja ažuriranja. Vrijeme otkrivanja kasnije je od vremena objavljivanja ažuriranja jer nakon objavljivanja ažuriranja može proći neko vrijeme dok uređaj ne potraži ažuriranja.
+
+      N-ta vrijednost na popisu upotrebljavat će se kao postotak uređaja koji bi trebali dovršiti ažuriranje na sljedeću verziju u n-tom tjednu nakon otkrivanja ažuriranja. Na primjer, ako se ažuriranje otkrije danas, prva vrijednost na popisu definira postotak uređaja u organizacijskoj jedinici koji bi se trebali ažurirati na tu verziju u roku od tjedan dana od danas. Druga vrijednost definira postotak uređaja u organizacijskoj jedinici koji bi se trebali ažurirati na tu verziju u roku od dva tjedna od danas i tako dalje.
+
+      Ako se za ovo pravilo definira vrijednost, ažuriranja će zanemariti pravilo <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> i slijediti ovo pravilo.
+
+      Ako je popis prazan, neće biti postupnog uvođenja i ažuriranja će se primijeniti u skladu s drugim pravilima za uređaje.
+
+      Pravilo se ne primjenjuje na prebacivanje kanala.</translation>
 <translation id="7295019613773647480">Omogući nadzirane korisnike</translation>
 <translation id="7301543427086558500">Navodi popis zamjenskih URL-ova koji se mogu upotrijebiti za izvlačenje pojmova pretraživanja iz tražilice. URL-ovi trebaju sadržavati niz <ph name="SEARCH_TERM_MARKER" />, koji će se upotrijebiti za izvlačenje pojmova pretraživanja.
 
@@ -2600,6 +2634,12 @@
 
           Primjere uzoraka pogledajte na https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Onemogući pohranjivanje povijesti preglednika</translation>
+<translation id="8498293625012059298">Konfigurira URL za promjenu zaporke (samo sheme HTTP i HTTPS). To je URL na koji će usluga za zaštitu zaporke slati korisnike da promijene zaporku nakon što se u pregledniku prikaže upozorenje.
+      Da bi <ph name="PRODUCT_NAME" /> pravilno snimio otisak prsta nove zaporke na toj stranici za promjenu zaporke, stranica za promjenu zaporke mora slijediti smjernice na stranici https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Ako se ta postavka omogući, usluga za zaštitu zaporke slat će korisnike na taj URL da bi promijenili zaporku nakon što se u pregledniku prikaže upozorenje.
+      Ako se ta postavka onemogući ili ne postavi, usluga za zaštitu zaporke slat će korisnike na https://myaccounts.google.com da bi promijenili zaporku.
+      To pravilo nije dostupno na instancama Windowsa koje nisu pridružene domeni <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Zadane postavke (korisnici ih mogu prebrisati)</translation>
 <translation id="8507835864888987300">Postavlja ciljnu verziju za Automatska ažuriranja.
 
@@ -2653,6 +2693,14 @@
       Kada se to pravilo promijeni na False, primjenjuje se na pokretanje novih virtualnih računala, ali ne isključuje virtualna računala koja su već pokrenuta.
       Kada to pravilo nije postavljeno na upravljanom uređaju, uređaju nije dopušteno pokretanje virtualnih računala.
       Neupravljanim je uređajima dopušteno pokretanje virtualnih računala.</translation>
+<translation id="8669669491594628013">Omogućuje vam da odredite okidač na temelju kojeg će zaštita zaporke prikazati upozorenje. Zaštita zaporke to upozorenje prikazuje korisnicima kada ponovo upotrijebe svoju zaštićenu zaporku na potencijalno sumnjivim web-lokacijama.
+
+      Da biste konfigurirali koju zaporku zaštititi, upotrijebite "PasswordProtectionLoginURLs" i "PasswordProtectionChangePasswordURL".
+
+      Ako se pravilo postavi na "PasswordProtectionWarningOff", upozorenje zaštite zaporke neće se prikazati.
+      Ako se pravilo postavi na "PasswordProtectionWarningOnPasswordReuse", upozorenje zaštite zaporke prikazat će se kada korisnik ponovo upotrijebi svoju zaštićenu zaporku na web-lokaciji koja nije dopuštena.
+      Ako se pravilo postavi na "PasswordProtectionWarningOnPhishingReuse", upozorenje zaštite zaporke prikazat će se kada korisnik ponovo upotrijebi svoju zaštićenu zaporku na web-lokaciji za krađu identiteta.
+      Ako se pravilo ne postavi, usluga zaštite zaporke štitit će samo zaporke za Google, no korisnik će moći promijeniti tu postavku.</translation>
 <translation id="8672321184841719703">Ciljna verzija automatskog ažuriranja</translation>
 <translation id="867410340948518937">U2F (univerzalna dvostruka autentifikacija)</translation>
 <translation id="8685024486845674965">Upozorenje o zaštiti zaporkom aktivira se ponovnom upotrebom zaporke</translation>
diff --git a/components/policy/resources/policy_templates_hu.xtb b/components/policy/resources/policy_templates_hu.xtb
index 4abedba..fdfef48 100644
--- a/components/policy/resources/policy_templates_hu.xtb
+++ b/components/policy/resources/policy_templates_hu.xtb
@@ -238,6 +238,13 @@
       Ha fenn kell tartani a kompatibilitást a hibásan működő szerverrel, akkor a házirend a „tls1.1” értékre állítható. Ez átmeneti intézkedés, és a szervert mielőbb meg kell javítani.</translation>
 <translation id="1864269674877167562">Ha a házirend értéke üres karakterlánc, vagy ha nincs beállítva, a <ph name="PRODUCT_OS_NAME" /> nem jelenít meg automatikus kiegészítési lehetőséget a felhasználói bejelentkezési folyamat során.
       Ha a házirend beállítása egy domainnevet jelképező karakterlánc, a <ph name="PRODUCT_OS_NAME" /> megjeleníti az automatikus kiegészítési lehetőséget a felhasználó bejelentkezése során, így annak csak a felhasználónevét kell beírnia (a domainnév nélkül). A felhasználó felülírhatja a domainnév-kiegészítést.</translation>
+<translation id="1864382791685519617">Engedélyezi a hálózati előrejelzést a <ph name="PRODUCT_NAME" /> termékben, és megakadályozza, hogy a felhasználók módosítsák ezt a beállítást.
+
+      Ez vezérli a DNS-előtöltést, az előzetes TCP- és SSL-kapcsolatokat, valamint a weboldalak előzetes megjelenítését.
+
+      Ha beállítja a házirendet, akkor a felhasználók nem módosíthatják vagy bírálhatják felül a <ph name="PRODUCT_NAME" /> termékben.
+
+      Ha nem állítja be a házirendet, a hálózati előrejelzés engedélyezve lesz, de a felhasználó módosíthatja a beállítást.</translation>
 <translation id="1865417998205858223">Kulcsengedélyek</translation>
 <translation id="186719019195685253">Végrehajtandó művelet a tétlenségi késleltetés elérésekor hálózati áramforrásról történő üzemelés során</translation>
 <translation id="187819629719252111">Lehetővé teszi a hozzáférést a gépen lévő helyi fájlokhoz azáltal, hogy engedélyezi a(z) <ph name="PRODUCT_NAME" /> számára a fájlkiválasztási párbeszédablakok megjelenítését. Ha engedélyezi ezt a beállítást, a felhasználók a szokásos módon nyithatják meg a fájlkiválasztási párbeszédablakokat. Ha letiltja a beállítást, minden alkalommal, amikor a felhasználó olyan műveletet hajt végre, amely fájlkiválasztási párbeszédablakot hívna elő (például könyvjelzők importálása, fájlok feltöltése, linkek mentése stb.), egy üzenet jelenik meg helyette, a rendszer pedig úgy tekinti, hogy a felhasználó a Mégse gombra kattintott a fájlkiválasztási párbeszédablakban. Ha ez nincs beállítva, a felhasználók a szokásos módon nyithatnak meg fájlkiválasztási párbeszédablakokat.</translation>
@@ -694,6 +701,7 @@
       Ha a házirend nincs beállítva, akkor az <ph name="PRINTERS_ALLOW_ALL" /> van érvényben.
       </translation>
 <translation id="2908277604670530363">Egyidejű kapcsolatok maximális száma a proxyszerverhez</translation>
+<translation id="2951386431828317490">Automatikus kitöltés engedélyezése profilokhoz</translation>
 <translation id="2956777931324644324">Ezt a házirendet a <ph name="PRODUCT_NAME" /> 36-os verziójától kezdve visszavontuk.
 
       Azt adja meg, hogy a TLS-domainhez kötött tanúsítványbővítmények engedélyezve legyenek-e.
@@ -702,6 +710,7 @@
 <translation id="2957506574938329824">Nem engedélyezi, hogy a webhelyek hozzáférést kérjenek a Bluetooth-eszközökhöz a Web Bluetooth API-n keresztül</translation>
 <translation id="2957513448235202597">Fióktípus a <ph name="HTTP_NEGOTIATE" /> hitelesítés egyeztetéséhez</translation>
 <translation id="2959898425599642200">Proxy figyelmen kívül hagyásának szabályai</translation>
+<translation id="2960128438010718932">Az új frissítés bevezetésének ütemterve</translation>
 <translation id="2960691910306063964">A PIN-kód nélküli hitelesítés engedélyezése vagy kikapcsolása a távoli elérésű gazdagépek számára</translation>
 <translation id="2976002782221275500">Megadja azt a felhasználói bevitel nélküli időtartamot, amely után a rendszer elsötétíti a képernyőt, ha akkumulátorról működik.
 
@@ -742,6 +751,7 @@
       A házirend beállításától függetlenül a felhasználók nem tudják módosítani a WPAD-optimalizálás beállítását.</translation>
 <translation id="3072045631333522102">A használandó képernyőkímélő a bejelentkezési képernyőn kiállító módban</translation>
 <translation id="3072847235228302527">Általános Szerződési Feltételek beállítása egy eszközszinten helyi fiók számára</translation>
+<translation id="3077183141551274418">Letiltja vagy engedélyezi a lapéletciklus funkciót</translation>
 <translation id="3086995894968271156">A Cast-erősítő konfigurálása itt: <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Lehetővé teszi, hogy megadja az URL-minták azon listáját, amely meghatározza, mely webhelyek jeleníthetnek meg képeket.
 
@@ -1290,6 +1300,11 @@
       Ezeket a javaslatokat a rendszer a Google szervereiről kéri le távolról.
 
       Ha értéke hamis, a böngésző nem kér le és nem jelenít meg javaslatokat.</translation>
+<translation id="4788252609789586009">Engedélyezi a <ph name="PRODUCT_NAME" /> automatikus kitöltés funkcióját, és lehetővé teszi a felhasználók számára az internetes űrlapok automatikus kitöltését korábban eltárolt hitelkártyaadatokkal.
+
+      Ha le van tiltva ez a beállítás, az automatikus kitöltés funkció nem ajánlja fel és nem végzi el a hitelkártyaadatok kitöltését, és nem ment további hitelkártyaadatokat, amelyeket a felhasználó az interneten való böngészés közben ad meg.
+
+      Ha engedélyezve van ez a beállítás, vagy nincs értéke, a felhasználó vezérelheti az automatikus kitöltés funkció hitelkártyákkal kapcsolatos használatát a kezelőfelületen.</translation>
 <translation id="4791031774429044540">A nagy egérmutató kisegítő lehetőség engedélyezése.
 
           Ha a házirend értéke igaz, a nagy egérmutató mindig engedélyezve lesz.
@@ -1414,6 +1429,11 @@
       Ha a szabály Igaz értékre van állítva, a(z) <ph name="PRODUCT_OS_NAME" /> megakadályozza, hogy az eszköz fejlesztői módban induljon el. A fejlesztői kapcsoló bekapcsolásakor a rendszer nem töltődik be, és hibát jelző képernyő jelenik meg.
 
       Ha a szabály nincs beállítva, illetve értéke Hamis, a fejlesztői mód elérhető marad az eszköz számára.</translation>
+<translation id="520403427390290017">A lapéletciklus funkció visszaveszi az olyan futó lapokhoz tartozó CPU- és végül memóriakapacitást, amelyeket régóta nem használtak. Ehhez először csökkenti a lapok erőforrás-használatát, majd lefagyasztja, végül pedig bezárja őket.
+
+      Ha a házirend értéke hamis, akkor le van tiltva a lapéletciklus funkció, és az összes lap a szokásos módon fut tovább.
+
+      Ha a házirend értéke igaz, vagy nincs megadva, akkor engedélyezve van a lapéletciklus funkció.</translation>
 <translation id="5208240613060747912">Lehetővé teszi, hogy megadja az URL-minták egy olyan listáját, amely meghatározza, mely webhelyek nem jeleníthetnek meg értesítéseket. Ha ez a házirend beállítatlanul marad, akkor a globális alapértelmezett érték kerül felhasználásra valamennyi webhelyre vonatkozóan; vagy -- ha be van állítva -- a "DefaultNotificationsSetting" házirendből, vagy pedig a felhasználó személyes konfigurációjából.</translation>
 <translation id="5219844027738217407">Az Android-alkalmazások esetében ez a házirend csak a mikrofonra vonatkozik. Ha a házirend beállítása igaz, a rendszer kivétel nélkül valamennyi Android-alkalmazásra vonatkozóan némítja a mikrofont.</translation>
 <translation id="523505283826916779">Kisegítő beállítások</translation>
@@ -1459,6 +1479,11 @@
 
           Ha a házirend értéke hamis, a felhasználók nem tudnak tartalmat átküldeni eszközükre. Ha a házirend értéke igaz, a felhasználók átküldhetnek tartalmat. Ha a házirend nincs beállítva, a felhasználók a regisztrált Chrome OS-t használó eszközökre nem küldhetnek át tartalmat, de a nem regisztráltakra igen.</translation>
 <translation id="5330684698007383292">A következő tartalomtípusok kezelésének engedélyezése a(z) <ph name="PRODUCT_FRAME_NAME" /> számára</translation>
+<translation id="5360146044009867539">Engedélyezi a <ph name="PRODUCT_NAME" /> automatikus kitöltés funkcióját, és lehetővé teszi a felhasználók számára az internetes űrlapok automatikus kitöltését korábban eltárolt profil- és címadatokkal.
+
+      Ha le van tiltva ez a beállítás, az automatikus kitöltés funkció nem ajánlja fel és nem végzi el a címadatok kitöltését, és nem ment további címadatokat, amelyeket a felhasználó az interneten való böngészés közben ad meg.
+
+      Ha engedélyezve van ez a beállítás, vagy nincs értéke, a felhasználó vezérelheti az automatikus kitöltés funkció címekkel kapcsolatos használatát a kezelőfelületen.</translation>
 <translation id="5365946944967967336">Kezdőoldal gomb megjelenítése az eszköztáron</translation>
 <translation id="5366745336748853475">Lehetővé teszi olyan URL-mintákból álló lista megadását, amelyek meghatározzák azokat a webhelyeket, amelyeknél automatikusan megtörténik az ügyféltanúsítvány kiválasztása a bejelentkezési képernyőn a SAML-folyamatot tároló keretben, amennyiben a webhelynek szüksége van tanúsítványra. Használati példa: eszközre vonatkozó tanúsítvány konfigurálása, amely a SAML IdP-nek lesz bemutatva.
 
@@ -2148,6 +2173,15 @@
 
           Ha a beállítás le van tiltva, akkor ez a funkció nem lesz elérhető.</translation>
 <translation id="7275334191706090484">Kezelt könyvjelzők</translation>
+<translation id="729492886167634859">Ez a házirend megadja azon százalékok listáját, amelyek meghatározzák, hogy a szervezeti egység (SZE) <ph name="PRODUCT_OS_NAME" />-eszközeinek mekkora része frissül hetente, a frissítés első észlelésétől kezdődően. Az észlelés ideje a frissítés közzététele után van, mivel a közzététel után eltarthat bizonyos ideig, mire az eszköz frissítéseket keres.
+
+      A lista n. értéke azon eszközök százalékát jelöli, amelyek elvégzik a következő verzióra való frissítést a frissítés észlelését követő n. héten. Ha például ma észleli a rendszer a frissítést, akkor a lista első helyén álló érték határozza meg az SZE azon eszközeinek százalékát, amelyek frissítenek az új verzióra mától számítva egy héten belül. A második érték határozza meg az SZE azon eszközeinek százalékát, amelyek frissítenek az új verzióra mától számítva két héten belül és így tovább.
+
+      Ha meg van adva a házirend értéke, a frissítések figyelmen kívül hagyják a <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> házirendet, és ezt a házirendet követik.
+
+      Ha a lista üres, nem lesz fokozatos frissítés, hanem a többi eszközházirendnek megfelelően telepíti a rendszer a frissítéseket.
+
+      A házirend nem vonatkozik a csatornaváltásokra.</translation>
 <translation id="7295019613773647480">Felügyelt felhasználók engedélyezése</translation>
 <translation id="7301543427086558500">Olyan alternatív URL-ek listáját adja meg, amelyekkel a keresett kifejezések nyerhetők ki a keresőmotorból. Az URL-eknek tartalmazniuk kell a keresett kifejezések kinyerésére szolgáló <ph name="SEARCH_TERM_MARKER" /> karakterláncot.
 
@@ -2600,6 +2634,12 @@
 
           Példamintákat a következő helyen talál: https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Böngészési előzmények mentésének tiltása</translation>
+<translation id="8498293625012059298">A jelszómódosítási URL (csak HTTP és HTTPS protokollokon keresztül) beállítása. A jelszóvédelmi szolgáltatás erre az URL-re küldi a felhasználókat jelszómódosítás céljából, miután figyelmeztetés jelenik meg számukra a böngészőben.
+      A <ph name="PRODUCT_NAME" /> akkor tudja megfelelően rögzíteni az új jelszavak ujjlenyomatát ezen a jelszómódosító oldalon, ha Ön gondoskodik arról, hogy a jelszómódosító oldala betartja a https://www.chromium.org/developers/design-documents/create-amazing-password-forms oldalon található irányelveket.
+
+      A beállítás engedélyezése esetén a jelszóvédelmi szolgáltatás erre az URL-re küldi a felhasználókat jelszómódosítás céljából, miután figyelmeztetés jelenik meg számukra a böngészőben.
+      Ha a beállítás le van tiltva, vagy ha nincs konfigurálva, akkor a jelszóvédelmi szolgáltatás a https://myaccounts.google.com webhelyre küldi a felhasználókat jelszómódosítás céljából.
+      Ez a házirend nem áll rendelkezésre olyan Windows-példányokon, amelyek nem csatlakoztak <ph name="MS_AD_NAME" />-domainhez.</translation>
 <translation id="8499172469244085141">Alapértelmezett beállítások (a felhasználók felülbírálhatják)</translation>
 <translation id="8507835864888987300">Célverziót állít be az automatikus frissítésekhez.
 
@@ -2653,6 +2693,14 @@
       Amikor hamis értékre állítja ezt a házirendet, a módosítás az új virtuális gépek indítására vonatkozik, de nem kapcsolja ki a már futó virtuális gépeket.
       Ha a házirend nincs beállítva kezelt eszközön, az eszköz számára nem lesz engedélyezve a virtuális gépek futtatása.
       A nem kezelt eszközök számára engedélyezett a virtuális gépek futtatása.</translation>
+<translation id="8669669491594628013">Lehetővé teszi a jelszóvédelmi figyelmeztetés aktiválásának szabályozását. A jelszóvédelem figyelmezteti a felhasználót, ha potenciálisan gyanús webhelyen próbálja újra felhasználni védett jelszavát.
+
+      A „PasswordProtectionLoginURLs” és a „PasswordProtectionChangePasswordURL” házirendeket használhatja a védendő jelszavak beállítására.
+
+      Ha a házirend értéke „PasswordProtectionWarningOff”, akkor nem jelenik meg jelszóvédelmi figyelmeztetés.
+      Ha a házirend értéke „PasswordProtectionWarningOnPasswordReuse”, akkor a jelszóvédelmi figyelmeztetés abban az esetben jelenik meg, ha a felhasználó az engedélyezőlistán nem szereplő webhelyen próbálja meg újra felhasználni védett jelszavát.
+      Ha a házirend értéke „PasswordProtectionWarningOnPhishingReuse”, akkor a jelszóvédelmi figyelmeztetés abban az esetben jelenik meg, ha a felhasználó adathalász webhelyen próbálja meg újra felhasználni védett jelszavát.
+      Ha a házirend nincs beállítva, a jelszóvédelmi szolgáltatás csak a Google-jelszavakat védi meg, de a felhasználó módosíthatja a beállítást.</translation>
 <translation id="8672321184841719703">Cél automatikus frissítési verziója</translation>
 <translation id="867410340948518937">U2F (univerzális kétlépcsős azonosítás)</translation>
 <translation id="8685024486845674965">Jelszóvédelemmel kapcsolatos figyelmeztetést aktivál a jelszó újrafelhasználása</translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb
index 68105ab..544e857 100644
--- a/components/policy/resources/policy_templates_id.xtb
+++ b/components/policy/resources/policy_templates_id.xtb
@@ -238,6 +238,13 @@
       Sebaliknya, jika kompatibilitas dengan server berisi bug harus dipertahankan, kebijakan ini akan disetel ke "tls1.1". Hal ini merupakan ukuran sementara dan server harus segera diperbaiki.</translation>
 <translation id="1864269674877167562">Jika kebijakan ini disetel sebagai string kosong atau tidak dikonfigurasi, <ph name="PRODUCT_OS_NAME" /> tidak akan menampilkan opsi pelengkapan otomatis selama alur proses masuk pengguna.
       Jika kebijakan ini disetel sebagai string yang mewakili nama domain, <ph name="PRODUCT_OS_NAME" /> akan menampilkan opsi pelengkapan otomatis selama proses masuk pengguna, sehingga pengguna dapat mengetikkan nama penggunanya tanpa ekstensi nama domain. Pengguna dapat mengganti ekstensi nama domain ini.</translation>
+<translation id="1864382791685519617">Memungkinkan prediksi jaringan dalam <ph name="PRODUCT_NAME" /> dan mencegah pengguna mengubah setelan ini.
+
+      Setelan ini mengontrol prapengambilan DNS, prakoneksi dan praperenderan TCP dan SSL halaman web.
+
+      Jika Anda menyetel kebijakan ini, pengguna tidak dapat mengubah atau mengganti setelan ini di <ph name="PRODUCT_NAME" />.
+
+      Jika kebijakan ini dibiarkan tidak disetel, predikis jaringan akan diaktifkan namun pengguna dapat mengubahnya.</translation>
 <translation id="1865417998205858223">Izin Kunci</translation>
 <translation id="186719019195685253">Kebijakan yang diambil saat penundaan nganggur tercapai ketika dijalankan pada daya AC</translation>
 <translation id="187819629719252111">Memungkinkan akses ke file lokal pada mesin dengan mengizinkan <ph name="PRODUCT_NAME" /> menampilkan dialog pemilihan file. Jika Anda mengaktifkan setelan ini, pengguna dapat membuka dialog pemilihan file seperti biasa. Jika Anda menonaktifkan setelan ini, setiap kali pengguna melakukan tindakan yang akan memicu dialog pemilihan file (seperti mengimpor bookmark, mengupload file, menyimpan link, dll.), yang akan ditampilkan adalah pesan, dan pengguna dianggap telah mengeklik Batal pada dialog pemilihan file. Jika setelan ini tidak disetel, pengguna dapat membuka dialog pemilihan file seperti biasa.</translation>
@@ -688,6 +695,7 @@
       Jika kebijakan ini tidak disetel, <ph name="PRINTERS_ALLOW_ALL" /> akan diterapkan.
       </translation>
 <translation id="2908277604670530363">Jumlah maksimal sambungan serentak ke server proxy</translation>
+<translation id="2951386431828317490">Mengaktifkan IsiOtomatis untuk profil</translation>
 <translation id="2956777931324644324">Kebijakan ini dihentikan sejak <ph name="PRODUCT_NAME" /> versi 36.
 
       Menentukan apakah ekstensi sertifikat terikat domain TLS sebaiknya diaktifkan atau tidak.
@@ -696,6 +704,7 @@
 <translation id="2957506574938329824">Jangan izinkan situs apa pun meminta akses ke perangkat Bluetooth melalui API Bluetooth Web</translation>
 <translation id="2957513448235202597">Jenis akun untuk autentikasi <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Peraturan mengabaikan proxy</translation>
+<translation id="2960128438010718932">Jadwal persiapan untuk menerapkan update baru</translation>
 <translation id="2960691910306063964">Mengaktifkan atau menonaktifkan autentikasi tanpa PIN untuk host akses jarak jauh</translation>
 <translation id="2976002782221275500">Menentukan panjang waktu tanpa masukan pengguna sebelum layar meredup saat menggunakan daya baterai.
 
@@ -736,6 +745,7 @@
       Terlepas dari apakah kebijakan ini disetel atau tidak, dan bagaimana kebijakan ini disetel, setelan pengoptimalan WPAD tidak dapat diubah oleh pengguna.</translation>
 <translation id="3072045631333522102">Tirai layar untuk digunakan pada layar masuk dalam mode eceran</translation>
 <translation id="3072847235228302527">Menyetel Persyaratan Layanan untuk akun lokal perangkat</translation>
+<translation id="3077183141551274418">Mengaktifkan atau menonaktifkan siklus pemakaian tab</translation>
 <translation id="3086995894968271156">Mengonfigurasi Penerima Cast di <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Memungkinkan Anda menyetel daftar pola URL yang menentukan situs mana yang diizinkan untuk menampilkan gambar.
 
@@ -1290,6 +1300,11 @@
       Saran ini diambil dari jarak jauh dari server Google.
 
       Jika setelan ini disetel ke false, saran tidak akan diambil atau ditampilkan.</translation>
+<translation id="4788252609789586009">Mengaktifkan fitur IsiOtomatis <ph name="PRODUCT_NAME" /> dan memungkinkan pengguna mengisi otomatis informasi kartu kredit di formulir web menggunakan informasi yang disimpan sebelumnya.
+
+      Jika setelan ini dinonaktifkan, IsiOtomatis tidak akan menyarankan atau mengisi informasi kartu kredit, serta tidak akan menyimpan informasi kartu kredit tambahan yang mungkin dikirim oleh pengguna saat browsing web.
+
+      Jika setelan ini diaktifkan atau tidak memiliki nilai, pengguna dapat mengontrol fitur IsiOtomatis untuk kartu kredit di UI.</translation>
 <translation id="4791031774429044540">Mengaktifkan fitur aksesibilitas kursor besar.
 
           Jika kebijakan ini disetel ke true, kursor besar akan selalu diaktifkan.
@@ -1414,6 +1429,11 @@
       Jika kebijakan ini disetel ke True, <ph name="PRODUCT_OS_NAME" /> akan mencegah perangkat melakukan booting ke mode pengembang. Sistem akan menolak melakukan booting dan menampilkan layar kesalahan saat pengalih pengembang diaktifkan.
 
       Jika kebijakan ini tidak disetel atau disetel ke False, mode pengembang akan tetap tersedia untuk perangkat.</translation>
+<translation id="520403427390290017">Fitur siklus pemakaian tab mengklaim kembali CPU dan memori yang terkait dengan tab yang sedang berjalan, yang belum pernah digunakan dalam waktu yang lama, dengan terlebih dahulu membatasinya, lalu membekukannya, dan terakhir membuangnya.
+
+      Jika kebijakan disetel ke false, siklus pemakaian tab dinonaktifkan, dan semua tab akan dibiarkan berjalan secara normal.
+
+      Jika kebijakan disetel ke true atau tidak ditentukan, siklus pemakaian tab diaktifkan.</translation>
 <translation id="5208240613060747912">Memungkinkan Anda menyetel daftar pola url yang menentukan situs yang tidak diizinkan untuk menampilkan pemberitahuan. Jika kebijakan ini tidak disetel, nilai default global akan digunakan untuk semua situs, baik dari kebijakan 'DefaultNotificationsSetting', jika disetel, atau konfigurasi pribadi pengguna.</translation>
 <translation id="5219844027738217407">Untuk aplikasi Android, kebijakan ini hanya memengaruhi mikrofon. Jika kebijakan disetel ke true, mikrofon akan dibisukan untuk semua aplikasi Android, tanpa pengecualian.</translation>
 <translation id="523505283826916779">Setelan aksesibilitas</translation>
@@ -1459,6 +1479,11 @@
 
           Jika kebijakan ini disetel ke False, pengguna tidak akan dapat mentransmisikan konten ke perangkat mereka. Jika kebijakan ini disetel ke True, pengguna diizinkan untuk mentransmisikan konten. Jika kebijakan ini tidak disetel, pengguna tidak diizinkan untuk mentransmisikan konten ke perangkat Chrome OS yang terdaftar, namun dapat mentransmisikan ke perangkat yang tidak terdaftar.</translation>
 <translation id="5330684698007383292">Izinkan <ph name="PRODUCT_FRAME_NAME" /> menangani jenis konten berikut</translation>
+<translation id="5360146044009867539">Mengaktifkan fitur IsiOtomatis <ph name="PRODUCT_NAME" /> dan memungkinkan pengguna mengisi otomatis profil dan informasi alamat di formulir web menggunakan informasi yang disimpan sebelumnya.
+
+      Jika setelan ini dinonaktifkan, IsiOtomatis tidak akan menyarankan atau mengisi informasi alamat, serta tidak akan menyimpan informasi alamat tambahan yang mungkin dikirim oleh pengguna saat browsing web.
+
+      Jika setelan ini diaktifkan atau tidak memiliki nilai, pengguna dapat mengontrol fitur IsiOtomatis untuk alamat di UI.</translation>
 <translation id="5365946944967967336">Tampilkan tombol Layar Utama di toolbar</translation>
 <translation id="5366745336748853475">Memungkinkan Anda menentukan daftar pola URL yang menetapkan situs tempat sertifikat klien dipilih otomatis pada layar login dalam bingkai yang menjadi host alur SAML, jika situs meminta sertifikat. Contoh penggunaan adalah mengonfigurasi sertifikat tingkat perangkat untuk dimunculkan ke SAML IdP.
 
@@ -2147,6 +2172,15 @@
 
           Jika setelan ini dinonaktifkan, fitur ini tidak akan tersedia.</translation>
 <translation id="7275334191706090484">Bookmark yang Terkelola</translation>
+<translation id="729492886167634859">Kebijakan ini menentukan daftar persentase yang akan menentukan jumlah perangkat <ph name="PRODUCT_OS_NAME" /> di OU untuk diupdate per minggu sejak hari pertama update ditemukan. Waktu penemuan lebih lama daripada waktu publikasi update, karena publikasi update mungkin agak lama hingga perangkat memeriksa apakah ada update.
+
+      Nilai n-th pada daftar akan digunakan sebagai persentase perangkat yang harus menyelesaikan update ke versi berikutnya dalam n-th minggu setelah update ditemukan. Misalnya, jika update ditemukan hari ini, nilai pertama pada daftar menentukan persentase perangkat di OU yang harus diupdate ke versi tersebut satu minggu dari hari ini. Nilai kedua menentukan persentase perangkat di OU yang harus diupdate ke versi tersebut dua minggu dari hari ini, dan sebagainya.
+
+      Jika ada nilai yang ditentukan untuk kebijakan ini, update akan mengabaikan kebijakan <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> dan mengikuti kebijakan ini.
+
+      Jika daftar ini kosong, tidak akan ada persiapan dan update akan diterapkan menurut kebijakan perangkat lain.
+
+      Kebijakan ini tidak berlaku untuk peralihan channel.</translation>
 <translation id="7295019613773647480">Aktifkan pengguna yang dilindungi</translation>
 <translation id="7301543427086558500">Menentukan daftar URL pengganti yang dapat digunakan untuk mengekstrak istilah penelusuran dari mesin telusur. URL harus berisi string <ph name="SEARCH_TERM_MARKER" />, yang akan digunakan untuk mengekstrak istilah penelusuran.
 
@@ -2599,6 +2633,12 @@
 
           Untuk melihat contoh pola, buka https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Menonaktifkan penyimpanan histori browser</translation>
+<translation id="8498293625012059298">Mengonfigurasi URL ubah sandi (khusus skema HTTP dan HTTPS). Layanan perlindungan sandi akan mengarahkan pengguna ke URL ini untuk mengubah sandinya setelah melihat peringatan di browser.
+      Agar <ph name="PRODUCT_NAME" /> dapat mengambil sidik jari sandi baru di halaman ubah sandi ini dengan benar, harap pastikan bahwa halaman ubah sandi Anda mengikuti pedoman di https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Jika setelan ini diaktifkan, layanan perlindungan sandi akan mengarahkan pengguna ke URL ini untuk mengubah sandinya setelah melihat peringatan di browser.
+      Jika setelan ini dinonaktifkan atau tidak disetel, layanan perlindungan sandi akan mengarahkan pengguna ke https://myaccounts.google.com untuk mengubah sandinya.
+      Kebijakan ini tidak tersedia di instance Windows yang tidak digabungkan ke domain <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Setelan Default (pengguna dapat menggantinya)</translation>
 <translation id="8507835864888987300">Menyetel versi target untuk Update Otomatis.
 
@@ -2646,6 +2686,14 @@
 
           Jika Anda membiarkan kebijakan ini tidak disetel, <ph name="PRODUCT_NAME" /> akan mencoba mendeteksi apakah server ada di internet dan akan menanggapi permintaan IWA setelahnya.  Jika server terdeteksi sebagai internet, permintaan IWA darinya akan diabaikan oleh <ph name="PRODUCT_NAME" />.</translation>
 <translation id="8667812577403206506">Mengizinkan Anda untuk mengontrol apakah mesin virtual diizinkan untuk berjalan di Chrome OS atau tidak. Jika kebijakan disetel ke True, perangkat diizinkan untuk menjalankan mesin virtual. Jika kebijakan disetel ke False, perangkat tidak diizinkan untuk menjalankan mesin virtual. Jika kebijakan ini diubah ke False, setelan ini berlaku untuk mesin virtual yang baru dimulai, tetapi tidak mematikan mesin virtual yang sedang berjalan. Jika kebijakan ini tidak disetel di perangkat yang dikelola, perangkat tidak diizinkan untuk menjalankan mesin virtual. Perangkat yang tidak dikelola diizinkan untuk menjalankan mesin virtual.</translation>
+<translation id="8669669491594628013">Memungkinkan Anda mengontrol pemicu peringatan perlindungan sandi. Perlindungan sandi memberi tahu pengguna saat mereka menggunakan kembali sandi yang dilindungi di situs yang berpotensi mencurigakan.
+
+      Anda dapat menggunakan kebijakan 'PasswordProtectionLoginURLs' dan 'PasswordProtectionChangePasswordURL' untuk mengonfigurasi sandi mana yang harus dilindungi.
+
+      Jika kebijakan ini disetel ke 'PasswordProtectionWarningOff', peringatan perlindungan sandi tidak akan ditampilkan.
+      Jika kebijakan ini disetel ke 'PasswordProtectionWarningOnPasswordReuse', peringatan perlindungan sandi akan ditampilkan saat pengguna menggunakan kembali sandi yang dilindungi di situs yang tidak diizinkan.
+      Jika kebijakan ini disetel ke 'PasswordProtectionWarningOnPhishingReuse', peringatan perlindungan sandi akan ditampilkan saat pengguna menggunakan kembali sandi yang dilindungi di situs phishing.
+      Jika kebijakan ini dibiarkan tidak disetel, layanan perlindungan sandi hanya akan melindungi sandi Google, namun pengguna dapat mengubah setelan ini.</translation>
 <translation id="8672321184841719703">Versi Pembaruan Otomatis Target</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Peringatan perlindungan sandi dipicu oleh penggunaan ulang sandi</translation>
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb
index b23c197..cf95411b 100644
--- a/components/policy/resources/policy_templates_it.xtb
+++ b/components/policy/resources/policy_templates_it.xtb
@@ -227,6 +227,13 @@
       In caso contrario, se è necessario mantenere la compatibilità con un server con errori, è possibile impostare la norma su "tls1.1". Si tratta di una misura temporanea ed è necessario correggere rapidamente il server.</translation>
 <translation id="1864269674877167562">Se questa norma non viene configurata o se viene impostata una stringa vuota, non verrà mostrata un'opzione di completamento automatico durante il flusso di accesso dell'utente in <ph name="PRODUCT_OS_NAME" />.
       Se per questa norma viene impostata una stringa che rappresenta un nome di dominio, durante l'accesso dell'utente in <ph name="PRODUCT_OS_NAME" /> verrà mostrata un'opzione di completamento automatico che consentirà all'utente di digitare soltanto il nome utente senza l'estensione del nome di dominio. L'utente potrà sovrascrivere l'estensione del nome di dominio.</translation>
+<translation id="1864382791685519617">Consente la previsione della rete in <ph name="PRODUCT_NAME" /> e impedisce agli utenti di modificare questa impostazione.
+
+      Controlla il precaricamento DNS, la preconnessione TCP ed SSL e il prerendering delle pagine web.
+
+      Se imposti questa norma, gli utenti non potranno modificare né sostituire questa impostazione in <ph name="PRODUCT_NAME" />.
+
+      Se questa norma non viene impostata, la previsione di rete verrà attivata ma l'utente potrà modificarla.</translation>
 <translation id="1865417998205858223">Autorizzazioni chiave</translation>
 <translation id="186719019195685253">Azione da compiere quando il ritardo di inattività viene raggiunto durante l'utilizzo della corrente CA</translation>
 <translation id="187819629719252111">Consente di accedere ai file locali presenti sul computer, permettendo a <ph name="PRODUCT_NAME" /> di visualizzare le finestre di dialogo di selezione dei file. Se attivi questa impostazione, gli utenti potranno aprire le finestre di dialogo di selezione dei file come di consueto. Se disattivi questa impostazione, ogni volta che l'utente eseguirà un'azione che apre una finestra di dialogo di selezione file (ad esempio importazione di Preferiti, caricamento di file, salvataggio di link e così via), verrà visualizzato un messaggio e il sistema presupporrà che l'utente abbia fatto clic sul pulsante Annulla della finestra di dialogo stessa. Se questa impostazione non viene impostata, gli utenti potranno aprire le finestre di dialogo di selezione file come di consueto.</translation>
@@ -677,6 +684,7 @@
       Se questa norma non viene impostata, viene usata l'opzione <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Numero massimo di connessioni simultanee al server proxy</translation>
+<translation id="2951386431828317490">Attiva la Compilazione automatica per i profili</translation>
 <translation id="2956777931324644324">Questa norma è stata ritirata a partire dalla versione 36 di <ph name="PRODUCT_NAME" />.
 
       Consente di specificare se attivare o meno l'estensione di certificati associati al dominio TLS.
@@ -685,6 +693,7 @@
 <translation id="2957506574938329824">Non consentire ad alcun sito di richiedere l'accesso ai dispositivi Bluetooth tramite l'API Web Bluetooth</translation>
 <translation id="2957513448235202597">Tipo di account per l'autenticazione <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Regole di bypass proxy</translation>
+<translation id="2960128438010718932">Il programma di gestione temporale per l'applicazione di nuovi aggiornamenti</translation>
 <translation id="2960691910306063964">Consente di attivare o disattivare l'autenticazione senza PIN per gli host di accesso remoto</translation>
 <translation id="2976002782221275500">Consente di specificare il periodo di tempo senza input dell'utente trascorso il quale lo schermo viene oscurato quando viene utilizzata la batteria.
 
@@ -722,6 +731,7 @@
       Indipendentemente da se o come questa norma è impostata, l'utente non può modificare l'impostazione di ottimizzazione di WPAD.</translation>
 <translation id="3072045631333522102">Screensaver da utilizzare nella schermata di accesso in modalità retail</translation>
 <translation id="3072847235228302527">Imposta i Termini di servizio di un account locale del dispositivo</translation>
+<translation id="3077183141551274418">Abilita o disabilita i cicli di vita delle schede</translation>
 <translation id="3086995894968271156">Consente di configurare Cast Receiver in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Questa norma consente di impostare un elenco di pattern URL che specificano i siti in cui è consentita la visualizzazione di immagini.
 
@@ -1264,6 +1274,11 @@
       Questi suggerimenti vengono recuperati da remoto dai server di Google.
 
       Se la norma è impostata su false, non verranno recuperati o mostrati suggerimenti.</translation>
+<translation id="4788252609789586009">Consente di attivare la funzione Compilazione automatica di <ph name="PRODUCT_NAME" /> e di permettere agli utenti di eseguire il completamento automatico dei moduli web utilizzando informazioni memorizzate in precedenza, come i dati della carta di credito.
+
+      Se questa impostazione è disattivata, la funzione Compilazione automatica non suggerirà o non inserirà mai i dati della carta di credito e non memorizzerà i dati di altre carte di credito che l'utente potrebbe inviare durante la navigazione sul Web.
+
+      Se questa impostazione è attivata, l'utente potrà gestire la funzione Compilazione automatica globale per le carte di credito nell'interfaccia utente.</translation>
 <translation id="4791031774429044540">Consente di attivare la funzione di accessibilità del puntatore grande.
 
 Se la norma viene impostata su true, il puntatore grande sarà sempre attivo.
@@ -1386,6 +1401,11 @@
       Se questa norma viene impostata su True, <ph name="PRODUCT_OS_NAME" /> impedirà l'avvio del dispositivo in modalità sviluppatore. Il sistema non verrà avviato e verrà visualizzata una schermata di errore quando viene attivata la modalità sviluppatore.
 
       Se questa norma non è impostata o è impostata su False, la modalità sviluppatore continuerà a essere disponibile per il dispositivo.</translation>
+<translation id="520403427390290017">La funzionalità cicli di vita della scheda reclama la CPU e le eventuali memorie associate che non sono state utilizzate per un lungo periodo di tempo, inizialmente limitandole, quindi bloccandole e infine eliminandole.
+
+      Se la norma viene impostata su false, i cicli di vita della scheda verranno disattivati e tutte le schede verranno eseguite normalmente.
+
+      Se la norma è impostata su true o non viene impostata in alcun modo, i cicli di vita della scheda verranno attivati.</translation>
 <translation id="5208240613060747912">Consente di impostare un elenco di pattern URL che specificano i siti non autorizzati a visualizzare notifiche. Se questa norma non viene impostata, per tutti i siti verrà utilizzato il valore predefinito globale della norma "DefaultNotificationsSetting", se è impostata, oppure verrà utilizzata la configurazione personale dell'utente.</translation>
 <translation id="5219844027738217407">Nell'ambito delle app Android, la norma influisce solo sul microfono. Se la norma viene impostata su true, il microfono viene disattivato per tutte le app Android, senza alcuna eccezione.</translation>
 <translation id="523505283826916779">Impostazioni di accessibilità</translation>
@@ -1431,6 +1451,11 @@
 
           Se questa norma viene impostata su False, gli utenti non potranno trasmettere contenuti al proprio dispositivo. Se questa norma viene impostata su True, gli utenti potranno trasmettere contenuti. Se questa norma non viene impostata, gli utenti non potranno trasmettere contenuti a dispositivi Chrome OS registrati, ma potranno trasmetterli a dispositivi non registrati.</translation>
 <translation id="5330684698007383292">Consenti a <ph name="PRODUCT_FRAME_NAME" /> di gestire i seguenti tipi di contenuti</translation>
+<translation id="5360146044009867539">Consente di attivare la funzione Compilazione automatica di <ph name="PRODUCT_NAME" /> e di permettere agli utenti di eseguire il completamento automatico dei moduli web utilizzando informazioni memorizzate in precedenza, come i dati del profilo e l'indirizzo.
+
+      Se questa impostazione è disattivata, la funzione Compilazione automatica non suggerirà o non inserirà mai i dati relativi all'indirizzo, né memorizzerà altre informazioni relative ad altri indirizzi che l'utente potrebbe inviare durante la navigazione sul Web.
+
+      Se questa impostazione è attivata o non vi è impostato alcun valore, l'utente potrà gestire la funzione Compilazione automatica globale per gli indirizzi nell'interfaccia utente.</translation>
 <translation id="5365946944967967336">Mostra il pulsante Pagina iniziale nella barra degli strumenti</translation>
 <translation id="5366745336748853475">Ti consente di specificare un elenco di pattern URL relativi ai siti che richiedono certificati per cui viene selezionato automaticamente un certificato client nella schermata di accesso all'interno del frame che ospita il flusso SAML. Un esempio di utilizzo è la configurazione di un certificato a livello di dispositivo da presentare all'IdP SAML.
 
@@ -2105,6 +2130,15 @@
 
 Se l'impostazione viene disattivata, questa funzione non sarà disponibile.</translation>
 <translation id="7275334191706090484">Preferiti gestiti</translation>
+<translation id="729492886167634859">Questa norma definisce un elenco di percentuali dei dispositivi di <ph name="PRODUCT_OS_NAME" /> nella UO da aggiornare ogni settimana a partire dal giorno in cui l'aggiornamento viene rilevato. L'ora del rilevamento è diversa dall'ora in cui l'aggiornamento viene pubblicato, perché potrebbe passare del tempo tra la pubblicazione dell'aggiornamento e il momento in cui il dispositivo controlla la disponibilità di aggiornamenti.
+
+      Il valore numerico nell'elenco rappresenta la percentuale di dispositivi che dovrebbero completare l'aggiornamento alla versione successiva entro una data settimana dal rilevamento dell'aggiornamento. Ad esempio, se oggi viene rilevato un aggiornamento, il primo valore nell'elenco definisce la percentuale di dispositivi nella UO che dovrebbero essere aggiornati a quella versione entro una settimana a partire da oggi. Il secondo valore definisce la percentuale di dispositivi nella UO che dovrebbero essere aggiornati a quella versione entro due settimane a partire da oggi e così via.
+
+      Se viene definito un valore per questa norma, gli aggiornamenti la applicano ignorando la norma <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />.
+
+      Se quest'elenco è vuoto, non viene eseguita alcuna gestione temporale e gli aggiornamenti vengono applicati in base alle altre norme del dispositivo.
+
+      Questa norma non viene applicata agli switch del canale.</translation>
 <translation id="7295019613773647480">Attiva utenti supervisionati</translation>
 <translation id="7301543427086558500">Specifica un elenco di URL alternativi che possono essere utilizzati per estrarre termini di ricerca dal motore di ricerca. Gli URL devono contenere la stringa <ph name="SEARCH_TERM_MARKER" />, che verrà utilizzata per estrarre i termini di ricerca.
 
@@ -2545,6 +2579,11 @@
 
           Per avere pattern di esempio, visita il sito https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Disabilita salvataggio della cronologia del browser</translation>
+<translation id="8498293625012059298">Configura l'URL di modifica della password (solo schemi HTTP e HTTPS). Il servizio di protezione tramite password invierà gli utenti a questo URL dopo la visualizzazione di un avviso sul browser.
+      Per consentire a <ph name="PRODUCT_NAME" /> di acquisire correttamente l'impronta digitale della nuova password in questa pagina di modifica della password, assicurati che la pagina di modifica della password che stai utilizzando rispetti le linee guida disponibili all'indirizzo https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+      Se questa impostazione è attiva, il servizio di protezione tramite password indirizza gli utenti a questo URL per modificare le password, dopo la visualizzazione di un avviso browser.
+      Se questa impostazione è disattivata o non configurata, il servizio di protezione tramite password indirizzerà gli utenti alla pagina https://myaccounts.google.com per modificare la password.
+      Questa norma non è disponibile su istanze Windows che non fanno parte di un dominio <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Impostazioni predefinite (gli utenti possono ignorarle)</translation>
 <translation id="8507835864888987300">Consente di impostare una versione target per gli Aggiornamenti automatici.
 
@@ -2598,6 +2637,14 @@
       Quando l'impostazione di questa norma viene modificata in false, la norma viene applicata all'avvio di nuove macchine virtuali, ma non determina l'arresto delle macchine virtuali già in esecuzione.
       Quando questa norma non è impostata su un dispositivo gestito, il dispositivo non può eseguire macchine virtuali.
       I dispositivi non gestiti sono autorizzati a eseguire macchine virtuali.</translation>
+<translation id="8669669491594628013">Ti consente di controllare l'attivazione dell'avviso di protezione tramite password. La protezione tramite password avvisa gli utenti quando riutilizzano le proprie password protette su siti potenzialmente sospetti.
+
+      Puoi utilizzare le norme 'PasswordProtectionLoginURLs' e 'PasswordProtectionChangePasswordURL' per configurare la password da proteggere.
+
+      Se questa norma è impostata su 'PasswordProtectionWarningOff', non apparirà alcun avviso di protezione tramite password.
+      Se questa norma è impostata su 'PasswordProtectionWarningOnPasswordReuse', l'avviso di protezione tramite password apparirà quando l'utente riutilizza la propria password protetta su un sito non autorizzato.
+      Se questa norma è impostata su 'PasswordProtectionWarningOnPhishingReuse', l'avviso di protezione tramite password apparirà quando l'utente riutilizza la propria password protetta su un sito di phishing.
+      Se questa norma viene lasciata non impostata, il servizio di protezione tramite password proteggerà esclusivamente le password Google, ma l'utente sarà in grado di modificare questa impostazione.</translation>
 <translation id="8672321184841719703">Scegli versione target dell'aggiornamento automatico</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">L'avviso di protezione tramite password viene attivato se vengono riutilizzate password</translation>
diff --git a/components/policy/resources/policy_templates_iw.xtb b/components/policy/resources/policy_templates_iw.xtb
index c978565..d4889576 100644
--- a/components/policy/resources/policy_templates_iw.xtb
+++ b/components/policy/resources/policy_templates_iw.xtb
@@ -234,6 +234,13 @@
       לחלופין, אם יש לשמור על תאימות לשרת שבו קיימים באגים, אפשר לקבוע את המדיניות הזו כ-"tls1.1". זהו פתרון זמני ויש לתקן במהירות את השרת.</translation>
 <translation id="1864269674877167562">אם מדיניות זו מוגדרת למחרוזת ריקה או שאינה מוגדרת כלל, <ph name="PRODUCT_OS_NAME" /> לא יציג אפשרות להשלמה אוטומטית במהלך זרימת הכניסה של משתמש.
       אם מדיניות זו מוגדרת למחרוזת המייצגת שם דומיין, <ph name="PRODUCT_OS_NAME" /> יציג אפשרות להשלמה אוטומטית בכניסה של המשתמש ויאפשר למשתמש להקליד רק את שם המשתמש שלו ללא סיומת שם הדומיין. המשתמש יוכל להחליף את הסיומת של שם דומיין זה.</translation>
+<translation id="1864382791685519617">‏מדיניות זו מאפשרת חיזוי רשת ב-<ph name="PRODUCT_NAME" /> ומונעת מהמשתמשים לשנות הגדרה זו.
+
+      מדיניות זו שולטת באחזור מראש של DNS, בחיבור מראש של TCP ו-SSL ובעיבוד מראש של דפי אינטרנט. 
+
+      אם מדיניות זו תוגדר, המשתמשים לא יוכלו לשנות או לבטל אותה ב-<ph name="PRODUCT_NAME" />.
+
+      אם מדיניות זו לא תוגדר, חיזויי רשת יופעלו, אך המשתמשים יוכלו לשנות זאת.</translation>
 <translation id="1865417998205858223">הרשאות עיקריות</translation>
 <translation id="186719019195685253">‏הפעולה שיש לנקוט כאשר יש עיכוב ללא פעילות בעת שימוש במתח AC</translation>
 <translation id="187819629719252111">המדיניות מאפשרת גישה לקבצים מקומיים במחשב בכך שהיא מאפשרת ל-<ph name="PRODUCT_NAME" /> להציג תיבות דו-שיח לבחירת קבצים. אם תהפוך הגדרה זו לפעילה, המשתמשים יוכלו לפתוח תיבות דו-שיח לבחירת קבצים כרגיל. אם תשבית הגדרה זו, בכל פעם שהמשתמש יבצע פעולה שתפעיל תיבת דו-שיח לבחירת קבצים (כגון ייבוא ​​סימניות, העלאת קבצים, שמירת קישורים וכדומה), תוצג במקום זאת הודעה והמערכת תניח שהמשתמש לחץ על 'ביטול' בתיבת הדו-שיח של בחירת הקבצים. אם הגדרה זו לא נקבעה, המשתמשים יוכלו לפתוח תיבות דו-שיח לבחירת קבצים כרגיל.</translation>
@@ -688,6 +695,7 @@
       אם המדיניות הזו לא מוגדרת, נעשה שימוש באפשרות <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">‏מספר מרבי של חיבורים בו זמניים לשרת proxy</translation>
+<translation id="2951386431828317490">הפעלת מילוי אוטומטי בשביל פרופילים</translation>
 <translation id="2956777931324644324">‏המדיניות הזו הוצאה משימוש החל מגרסה 36 של <ph name="PRODUCT_NAME" />.
 
       מציינת האם יש להפעיל את תוסף האישורים המאוגד לדומיין TLS.
@@ -696,6 +704,7 @@
 <translation id="2957506574938329824">‏אל תאפשר לאף אתר לבקש גישה אל התקני Bluetooth דרך ה-Web Bluetooth API</translation>
 <translation id="2957513448235202597">סוג חשבון לאימות <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">‏כללי עקיפת Proxy</translation>
+<translation id="2960128438010718932">לוח הזמנים של שלבי הביניים לפני החלה של עדכון חדש</translation>
 <translation id="2960691910306063964">‏הפעלה או השבתה של אימות ללא PIN עבור מארחי גישה מרחוק</translation>
 <translation id="2976002782221275500">מציינת את משך הזמן ללא קלט משתמש שלאחריו המסך מעומעם כשנעשה שימוש בסוללה.
 
@@ -735,6 +744,7 @@
       ללא קשר להגדרת המדיניות או לאופן הגדרתה, משתמשים לא יכולים לשנות את ההגדרה של אופטימיזציית WPAD.</translation>
 <translation id="3072045631333522102">שומר מסך שמשמש במסך הכניסה של מצב קמעונאי</translation>
 <translation id="3072847235228302527">הגדר את התנאים וההגבלות עבור חשבון מקומי של מכשיר</translation>
+<translation id="3077183141551274418">מפעילה או משביתה מחזורי חיים של כרטיסיות</translation>
 <translation id="3086995894968271156">‏הגדרת Cast Receiver ב-<ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">‏מאפשרת לך להגדיר רשימה של דפוסי כתובות אתר המפרטת אתרים שיכולים להציג תמונות. 
           
@@ -1288,6 +1298,11 @@
       ההצעות האלה מאוחזרות מרחוק מהשרתים של Google.
 
       אם ההגדרה הזו מקבלת את הערך 'לא_נכון', לא יאוחזרו או יוצגו הצעות.</translation>
+<translation id="4788252609789586009">המדיניות מפעילה את תכונת המילוי האוטומטי של <ph name="PRODUCT_NAME" /> ומאפשרת למשתמשים להשלים אוטומטית פרטים של כרטיס אשראי בטפסים באינטרנט, באמצעות מידע שאוחסן בעבר.
+
+      אם ההגדרה הזו מושבתת, המילוי האוטומטי לא יציע למלא פרטי כרטיס אשראי ולא יעשה זאת באופן אוטומטי. כמו כן לא יישמרו פרטים של כרטיסי אשראי נוספים שהמשתמש יזין בזמן גלישה באינטרנט.
+
+      אם ההגדרה הזו מופעלת או אם לא נקבע הערך שלה, המשתמש יוכל לקבוע דרך ממשק המשתמש את ההגדרות של תכונת המילוי האוטומטי בשביל כרטיסי אשראי.</translation>
 <translation id="4791031774429044540">‏הפעל את תכונת הנגישות של סמן גדול.
 
           אם מדיניות זו מוגדרת ל-True, הסמן הגדול יהיה מופעל תמיד.
@@ -1411,6 +1426,11 @@
       אם המדיניות הזו מוגדר כ-True‏, <ph name="PRODUCT_OS_NAME" /> ימנע מהמכשיר לבצע אתחול במצב מפתח. המערכת תסרב לבצע אתחול ותציג שגיאה כשמתג המפתח פועל.
 
       אם המדיניות הזו מוגדרת כ-False, מצב המפתח יישאר זמין עבור המכשיר.</translation>
+<translation id="520403427390290017">‏תכונת מחזורי החיים של כרטיסיות מצמצמת את השימוש ביחידת העיבוד המרכזית (CPU) ובעקבות כך את נפח הזיכרון הנחוץ להפעלת כרטיסיות שלא נעשה בהן שימוש במשך תקופה ארוכה. קודם לכן צריכת המשאבים מצומצמת, לאחר מכן הפעילות בכרטיסיות מופסקת ולבסוף הן נסגרות.
+
+      אם המדיניות מוגדרת כ-false, תכונת מחזורי החיים של כרטיסיות מושבתת וכל הכרטיסיות ימשיכו לפעול כרגיל.
+
+      אם המדיניות מוגדרת כ-true או אינה מוגדרת, תכונת מחזורי החיים של כרטיסיות מופעלת.</translation>
 <translation id="5208240613060747912">‏מאפשר לך להגדיר רשימה של דפוסי כתובות אתר המפרטת אתרים עם אישור להציג התראות. ם מדיניות זו לא הוגדרה, המערכת תשתמש בערך ברירת המחדל הכללי עבור כל האתרים לפי המדיניות 'DefaultNotificationsSetting' במקרה שהוגדרה, או לפי התצורה האישית שקבע המשתמש במקרה שלא הוגדרה.</translation>
 <translation id="5219844027738217407">‏באפליקציות Android, המדיניות הזו משפיעה רק על המיקרופון. כשהמדיניות הזו מוגדרת כ-true, המיקרופון מושתק בכל אפליקציות Android, ללא חריגים.</translation>
 <translation id="523505283826916779">הגדרות נגישות</translation>
@@ -1456,6 +1476,11 @@
 
           אם המדיניות הזו מוגדרת כ-False, המשתמשים לא יוכלו להעביר תוכן למכשיר שלהם. אם המדיניות מוגדרת כ-True, המשתמשים יוכלו להעביר תוכן. אם המדיניות לא מוגדרת, המשתמשים לא יוכלו להעביר תוכן למכשירי Chrome OS רשומים, אבל הם יוכלו להעביר תוכן למכשירים שאינם רשומים.</translation>
 <translation id="5330684698007383292">אפשר ל-<ph name="PRODUCT_FRAME_NAME" /> לטפל בסוגי התוכן הבאים.</translation>
+<translation id="5360146044009867539">המדיניות מפעילה את תכונת המילוי האוטומטי של <ph name="PRODUCT_NAME" /> ומאפשרת למשתמשים להשלים באופן אוטומטי פרטים של פרופיל וכתובת בטפסים באינטרנט, באמצעות מידע שאוחסן בעבר.
+
+      אם ההגדרה הזו מושבתת, המילוי האוטומטי לא יציע למלא פרטי פרופיל ולא יעשה זאת באופן אוטומטי. כמו כן לא יישמרו פרטי פרופיל נוספים שהמשתמש יזין בזמן גלישה באינטרנט.
+
+      אם ההגדרה הזו מופעלת או אם לא נקבע הערך שלה, המשתמש יוכל לקבוע דרך ממשק המשתמש את ההגדרות של תכונת המילוי האוטומטי לכתובות.</translation>
 <translation id="5365946944967967336">הצג את לחצן 'דף הבית' בסרגל הכלים</translation>
 <translation id="5366745336748853475">‏מאפשרת לציין רשימה של דפוסי כתובות אתרים המציינים אתרים שעבורם נבחר באופן אוטומטי אישור לקוח במסך הכניסה במסגרת שמארחת את תהליך SAML, אם האתר מבקש אישור. דוגמה למקרה שימוש היא בהגדרת אישור לכל המכשירים שיוצג ל-SAML IdP.
 
@@ -2138,6 +2163,15 @@
 
           אם הגדרה זו מושבתת, תכונה זו לא תהיה זמינה.</translation>
 <translation id="7275334191706090484">סימניות מנוהלות</translation>
+<translation id="729492886167634859">‏המדיניות הזו מגדירה רשימת של ערכי אחוזים. ערכי האחוזים האלה קובעים את שיעור מכשירי <ph name="PRODUCT_OS_NAME" />  ביחידה הארגונית שיש לעדכן בכל שבוע, החל מהיום שבו המערכת מאתרת לראשונה את העדכון. מועד האיתור חל מאוחר יותר ממועד פרסום העדכון, כי יכול לחלוף זמן מרגע פרסום העדכון ועד שהמכשיר מחפש עדכונים.
+
+      ערך n ברשימה מציין את אחוז המכשירים שישלימו עדכון גרסה בשבוע ה-n לאחר איתור העדכון. לדוגמה, אם עדכון יאותר היום, הערך הראשון ברשימה מגדיר את אחוז המכשירים ביחידה הארגונית שיעודכנו לגרסה הזו בתוך שבוע מהיום. הערך השני מגדיר את אחוז המכשירים ביחידה הארגונית שיעודכנו לגרסה הזו בתוך שבועיים מהיום, וכן הלאה.
+
+      אם הוגדר ערך בשביל המדיניות הזו, עדכונים יתעלמו מהמדיניות <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> ויפעלו במקום זאת לפי המדיניות הזו.
+
+      אם הרשימה הזו ריקה, אין שלבי ביניים והעדכונים יוחלו בהתאם לסעיפים האחרים של מדיניות המכשיר.
+
+      המדיניות הזו לא חלה על החלפת ערוצים.</translation>
 <translation id="7295019613773647480">הפעלת משתמשים בפיקוח</translation>
 <translation id="7301543427086558500">‏מדיניות זו מגדירה רשימה של כתובות אתרים חלופיות שיכולות לשמש לחילוץ מונחי חיפוש ממנוע החיפוש. כתובות האתרים יכילו את המחרוזת <ph name="SEARCH_TERM_MARKER" />, שתשמש לחילוץ מונחי החיפוש.
 
@@ -2595,6 +2629,12 @@
 
    כדי לראות דפוסים לדוגמה, עבור לכתובת http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">השבת שמירה של היסטוריית דפדפן</translation>
+<translation id="8498293625012059298">‏מגדירה את כתובת האתר לשינוי סיסמה (רק סכימות HTTP ו-HTTPS). שירות הגנת הסיסמה ישלח משתמשים אל כתובת האתר הזו על מנת לשנות את הסיסמאות שלהם אחרי שתוצג להם אזהרה בדפדפן.
+         כדי ש-<ph name="PRODUCT_NAME" /> יתעד כראוי את טביעת האצבע של הסיסמה החדשה בדף הזה לשינוי סיסמה, יש לוודא שהדף מוגדר לפי ההנחיות שבכתובת https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+          אם ההגדרה הזו מופעלת, שירות הגנת הסיסמה ישלח משתמשים אל כתובת האתר הזו כדי לשנות את הסיסמאות שלהם אחרי הצגה של אזהרה בדפדפן.
+      אם ההגדרה הזו מושבתת או לא נקבעה, שירות הגנת הסיסמה ישלח משתמשים אל https://myaccounts.google.com כדי לשנות את הסיסמה.
+      המדיניות הזו לא זמינה במופעי Windows שלא צורפו אל דומיין <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">הגדרות ברירת מחדל (המשתמשים יכולים לעקוף אותן)</translation>
 <translation id="8507835864888987300">‏קובעת גירסת יעד בשביל עדכונים אוטומטיים.
 
@@ -2649,6 +2689,14 @@
       משבית מכונות וירטואליות שכבר פועלות.
       כשהמדיניות הזו לא מוגדרת במכשיר מנוהל, הוא לא יורשה להפעיל מכונות וירטואליות.
       מכשירים שאינם מנוהלים מורשים להפעיל מכונות וירטואליות.</translation>
+<translation id="8669669491594628013">‏מאפשרת לשלוט בהפעלת האזהרה של הגנת סיסמה. הגנת סיסמה מזהירה את המשתמש כשהוא עושה שימוש חוזר בסיסמה המוגנת שלו באתרים חשודים. 
+
+       אפשר להשתמש בסעיפי המדיניות 'PasswordProtectionLoginURLs' ו-'PasswordProtectionChangePasswordURL' כדי להגדיר את הסיסמה שעליה יש להגן.
+
+      אם המדיניות הזו מוגדרת כ-'PasswordProtectionWarningOff', לא תוצג אזהרה של הגנת סיסמה. 
+      אם המדיניות הזו מוגדרת כ-'PasswordProtectionWarningOnPasswordReuse', אזהרה של הגנת סיסמה תוצג כשהמשתמש יעשה שימוש חוזר בסיסמה המוגנת באתר שאינו מופיע ברשימת ההיתרים.
+      אם המדיניות הזו מוגדרת כ-'PasswordProtectionWarningOnPhishingReuse', אזהרה של הגנת סיסמה תוצג כשהמשתמש יעשה שימוש חוזר בסיסמה המוגנת באתר דיוג.
+      אם המדיניות הזו לא מוגדרת, שירות הגנת הסיסמה יגן רק על סיסמאות Google, אבל המשתמש יוכל לשנות את ההגדרה הזו.</translation>
 <translation id="8672321184841719703">גירסת עדכון אוטומטי המוגדרת כיעד</translation>
 <translation id="867410340948518937">‏U2F (גורם שני אוניברסלי)</translation>
 <translation id="8685024486845674965">האזהרה של שירות ההגנה באמצעות סיסמה מופעלת אחרי שימוש חוזר בסיסמה</translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb
index bd10728b..7470b9d 100644
--- a/components/policy/resources/policy_templates_ja.xtb
+++ b/components/policy/resources/policy_templates_ja.xtb
@@ -239,6 +239,13 @@
       バグが発生したサーバーとの互換性を維持する必要がある場合は、このポリシーを「tls1.1」に設定します。これは暫定的な措置であり、サーバーのバグは速やかに修正する必要があります。</translation>
 <translation id="1864269674877167562">このポリシーが空の文字列または未設定の場合は、<ph name="PRODUCT_OS_NAME" /> でユーザーのログインフロー時にオートコンプリートのオプションは表示されません。
       このポリシーがドメイン名を表す文字列に設定されている場合は、<ph name="PRODUCT_OS_NAME" /> でユーザーがログインする際にオートコンプリートのオプションが表示されます。この場合、ユーザーはドメイン名の部分を省略してユーザー名を入力するだけで済みます。また、ユーザーはこのドメイン名の部分を上書きすることもできます。</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" /> でネットワーク予測を有効にして、ユーザーがこの設定を変更できないようにします。
+
+      これにより、DNS のプリフェッチ、TCP と SSL の事前接続、ウェブページの事前レンダリングが制御されます。
+
+      このポリシーを設定すると、ユーザーは <ph name="PRODUCT_NAME" /> でこの設定の変更や上書きができなくなります。
+
+      このポリシーが未設定の場合、ネットワーク予測は有効になりますが、ユーザーはこの設定を変更できます。</translation>
 <translation id="1865417998205858223">キーの権限</translation>
 <translation id="186719019195685253">AC 電源での実行時、アイドル時間に到達したときに行う操作</translation>
 <translation id="187819629719252111"><ph name="PRODUCT_NAME" /> に対してファイル選択ダイアログの表示を許可することで、コンピュータからローカル ファイルにアクセスできるようにします。この設定を有効にすると、ユーザーは通常どおりにファイル選択ダイアログを開くことができます。この設定を無効にすると、ファイル選択ダイアログを表示する操作(ブックマークのインポート、ファイルのアップロード、リンクの保存など)を実行した場合、メッセージが表示されて、ユーザーがファイル選択ダイアログで [キャンセル] をクリックした操作と同じになります。未設定の場合は、通常どおりファイル選択ダイアログが表示されます。</translation>
@@ -689,6 +696,7 @@
       このポリシーが未設定の場合は、<ph name="PRINTERS_ALLOW_ALL" /> が選択された場合と同じ動作になります。
       </translation>
 <translation id="2908277604670530363">プロキシ サーバーへの最大同時接続数</translation>
+<translation id="2951386431828317490">プロフィールの自動入力を有効にします</translation>
 <translation id="2956777931324644324">このポリシーは <ph name="PRODUCT_NAME" /> バージョン 36 で廃止されました。
 
       TLS ドメイン固定証明書の拡張機能を有効にするかどうかを指定します。
@@ -697,6 +705,7 @@
 <translation id="2957506574938329824">すべてのサイトに対して Web Bluetooth API による Bluetooth デバイスへのアクセスを許可しない</translation>
 <translation id="2957513448235202597">「<ph name="HTTP_NEGOTIATE" />」認証用のアカウントの種類</translation>
 <translation id="2959898425599642200">プロキシ バイパス ルール</translation>
+<translation id="2960128438010718932">新しいアップデートの段階的な適用スケジュール</translation>
 <translation id="2960691910306063964">リモート アクセス ホストの PIN 入力なしの認証を有効または無効にする</translation>
 <translation id="2976002782221275500">バッテリー電源での実行時に、ユーザー入力が行われなくなってから画面が暗くなるまでの時間を指定します。
 
@@ -737,6 +746,7 @@
       このポリシーの設定に関係なく、ユーザーは WPAD の最適化設定を変更できません。</translation>
 <translation id="3072045631333522102">小売りモードでのログイン画面に使用するスクリーンセーバー</translation>
 <translation id="3072847235228302527">デバイスのローカル アカウントの利用規約を設定する</translation>
+<translation id="3077183141551274418">タブのライフサイクルを有効または無効にします</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> で Cast Receiver を設定します。</translation>
 <translation id="3088796212846734853">画像の表示を許可するサイトの URL パターンリストを設定します。
 
@@ -1290,6 +1300,11 @@
       こうしたおすすめのページは、Google のサーバーからリモートで取得されます。
 
       この設定が false に設定されている場合、おすすめのページは取得されず、表示されません。</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" /> の自動入力機能を有効にし、ユーザーが以前に保存した情報を使ってウェブフォームにクレジット カードの情報を自動入力できるようにします。
+
+      この設定を無効にした場合は、クレジット カード情報が候補として表示されたり、自動入力されたりすることはありません。また、ユーザーがウェブの利用中に送信したクレジット カード情報が追加で保存されることもありません。
+
+      この設定を有効にするか、値を設定しない場合、ユーザーは UI でクレジット カードの自動入力を制御できます。</translation>
 <translation id="4791031774429044540">ユーザー補助機能の 1 つである「大きいカーソル」を有効にします。
 
           このポリシーが true に設定されている場合は、大きいカーソルが常に有効になります。
@@ -1414,6 +1429,11 @@
       このポリシーが True に設定されている場合は、<ph name="PRODUCT_OS_NAME" /> によってデベロッパー モードでのデバイスの起動が阻止されます。デベロッパー スイッチがオンになっている場合、システムは起動せず、エラー画面が表示されます。
 
       このポリシーが未設定か、False に設定されている場合、デバイスではデベロッパー モードを使用できます。</translation>
+<translation id="520403427390290017">タブのライフサイクルは、長い間使用していない実行中のタブに割り当てられている CPU と最終的にはメモリを再利用できるようにする機能です。最初は使用量を制限し、次に更新を停止して、最後に開放します。
+
+      このポリシーを false に設定した場合、タブのライフサイクルは無効になり、すべてのタブは通常どおり実行中の状態で維持されます。
+
+      このポリシーを true に設定するか、値を指定しない場合、タブのライフサイクルが有効になります。</translation>
 <translation id="5208240613060747912">通知表示を許可しないサイトを指定する URL パターンのリストを設定できます。このポリシーが未設定の場合、グローバルのデフォルト値がすべてのサイトで使用されます。グローバルのデフォルト値は「DefaultNotificationsSetting」ポリシーの値か、この値が未設定の場合はユーザーの個人設定の値です。</translation>
 <translation id="5219844027738217407">Android アプリに対しては、このポリシーはマイクにのみ適用されます。このポリシーを true に設定した場合、すべての Android アプリでは例外なくマイクがミュートされます。</translation>
 <translation id="523505283826916779">ユーザー補助の設定</translation>
@@ -1459,6 +1479,11 @@
 
           このポリシーが false に設定されている場合、ユーザーはデバイスにコンテンツをキャストできません。このポリシーが true に設定されている場合、ユーザーはコンテンツをキャストできます。このポリシーが未設定の場合、ユーザーは登録済みの Chrome OS デバイスにはコンテンツをキャストできませんが、それ以外のデバイスであればキャストできます。</translation>
 <translation id="5330684698007383292">次のコンテンツ タイプの処理を <ph name="PRODUCT_FRAME_NAME" /> に対して許可する</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" /> の自動入力機能を有効にし、ユーザーが以前に保存した情報を使ってウェブフォームにプロフィールや住所情報を自動入力できるようにします。
+
+      この設定を無効にした場合は、住所情報が候補として表示されたり、自動入力されたりすることはありません。また、ユーザーがウェブの利用中に送信した住所情報が追加で保存されることもありません。
+
+      この設定を有効にするか、値を設定しない場合、ユーザーは UI で住所の自動入力を制御できます。</translation>
 <translation id="5365946944967967336">ツールバーにホーム ボタンを表示する</translation>
 <translation id="5366745336748853475">SAML フローをホストするログイン画面のフレーム内でリクエスト時にクライアント証明書を自動的に選択するサイトを、URL パターンのリストで指定します。この設定は、SAML IdP に提示する端末全体の証明書を設定する場合などに使用します。
 
@@ -2147,6 +2172,15 @@
 
           この設定が無効な場合、この機能は利用できません。</translation>
 <translation id="7275334191706090484">管理対象のブックマーク</translation>
+<translation id="729492886167634859">このポリシーでは、アップデートが最初に検出された日から 1 週間ごとに更新する OU 内の <ph name="PRODUCT_OS_NAME" /> 端末の割合をリストで定義します。アップデートが公開されてから端末で検出されるまで少し時間がかかるため、アップデートの検出時間は公開時間より後になります。
+
+      リストの n 番目の値は、アップデートが検出されてから n 週目に次のバージョンに更新する端末の割合を示します。たとえば、アップデートが今日検出された場合、リストの 1 番目の値は、今日から 1 週目にそのバージョンに更新する OU 内の端末の割合を示します。2 番目の値は、今日から 2 週目にそのバージョンに更新する OU 内の端末の割合を示します。以降も同様です。
+ 
+      このポリシーで値が定義されている場合、アップデートは <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> ポリシーを無視して、このポリシーに沿って行われます。
+
+      このポリシーが空白の場合、段階的な適用は行われず、アップデートは他のデバイス ポリシーに沿って適用されます。
+
+      このポリシーはチャンネルの切り替えには適用されません。</translation>
 <translation id="7295019613773647480">監視対象ユーザーを有効にする</translation>
 <translation id="7301543427086558500">検索エンジンからの検索キーワードの抽出に使用できる代替 URL のリストを指定します。URL には文字列 <ph name="SEARCH_TERM_MARKER" /> が含まれている必要があります。この文字列は検索キーワードの抽出に使用されます。
 
@@ -2599,6 +2633,12 @@
 
           パターンの例については、https://www.chromium.org/developers/how-tos/chrome-frame-getting-started をご覧ください。</translation>
 <translation id="8493645415242333585">ブラウザの履歴の保存を無効にする</translation>
+<translation id="8498293625012059298">パスワード変更用の URL を設定します(HTTP と HTTPS スキームのみ)。ブラウザで警告が表示された後でパスワードを変更するユーザーは、パスワード保護サービスによってこの URL にリダイレクトされます。
+      このパスワード変更ページで、新しい指紋によるパスワード認証が <ph name="PRODUCT_NAME" /> で正しく処理されるようにするには、パスワード変更ページが https://www.chromium.org/developers/design-documents/create-amazing-password-forms のガイドラインに沿っていることを確認してください。
+
+      この設定が有効な場合、ブラウザで警告が表示された後でパスワードを変更するユーザーは、パスワード保護サービスによってこの URL にリダイレクトされます。
+      この設定が無効または未設定の場合、パスワードを変更するユーザーは、パスワード保護サービスによって https://myaccounts.google.com にリダイレクトされます。
+      このポリシーは、<ph name="MS_AD_NAME" /> ドメインに登録されていない Windows インスタンスでは使用できません。</translation>
 <translation id="8499172469244085141">デフォルト設定(ユーザーによるオーバーライド可能)</translation>
 <translation id="8507835864888987300">自動更新の対象バージョンを設定します。
 
@@ -2652,6 +2692,14 @@
       このポリシーを false に変更した場合、変更内容は以降の新しい仮想マシンの起動に対して適用されます。すでに実行中の仮想マシンは、終了されず実行を続けることができます。
       このポリシーが設定されていない場合、管理対象の端末では仮想マシンを実行できません。
       管理対象ではない端末では仮想マシンを実行できます。</translation>
+<translation id="8669669491594628013">パスワード保護の警告を表示するトリガーを制御できます。パスワード保護の警告は、不審なサイトでユーザーが保護されたパスワードを再使用したときに表示されます。
+
+      保護するパスワードを設定するには、「PasswordProtectionLoginURLs」ポリシーと「PasswordProtectionChangePasswordURL」ポリシーを使用します。
+
+      このポリシーが「PasswordProtectionWarningOff」に設定されている場合、パスワード保護の警告は表示されません。
+      このポリシーが「PasswordProtectionWarningOnPasswordReuse」に設定されている場合、ホワイトリストに登録されていないサイトでユーザーが保護されたパスワードを再使用したときに、パスワード保護の警告が表示されます。
+      このポリシーが「PasswordProtectionWarningOnPhishingReuse」に設定されている場合、フィッシング サイトでユーザーが保護されたパスワードを再使用したときに、パスワード保護の警告が表示されます。
+      このポリシーが設定されていない場合、パスワード保護サービスでは Google パスワードのみが保護されますが、ユーザーはこの設定を変更できます。</translation>
 <translation id="8672321184841719703">自動更新の対象バージョンを指定</translation>
 <translation id="867410340948518937">U2F(Universal Second Factor)</translation>
 <translation id="8685024486845674965">パスワードが再使用されたときに、パスワード保護について警告する</translation>
diff --git a/components/policy/resources/policy_templates_kn.xtb b/components/policy/resources/policy_templates_kn.xtb
index 0b6dd86..a7906e6 100644
--- a/components/policy/resources/policy_templates_kn.xtb
+++ b/components/policy/resources/policy_templates_kn.xtb
@@ -261,6 +261,13 @@
       ಇಲ್ಲವಾದರೆ, ದೋಷಯುಕ್ತ ಸರ್ವರ್‌ಗೆ ಹೊಂದಾಣಿಕೆ ಮಾಡಿದಲ್ಲಿ ನಿರ್ವಹಿಸಬೇಕಾಗುವದು, ಈ ನೀತಿಯನ್ನು "tls1.1" ಗೆ ಹೊಂದಿಸಬಹುದು. ಇದು ಸ್ಟಾಪ್‌‌ಗ್ಯಾಪ್ ಕ್ರಮವಾಗಿದೆ ಮತ್ತು ಸರ್ವರ್ ಅನ್ನು ವೇಗವಾಗಿ ಅಳವಡಿಸಬೇಕಾಗಿರುತ್ತದೆ.</translation>
 <translation id="1864269674877167562">ಈ ನೀತಿಯನ್ನು ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿಲ್ಲ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದ್ದರೆ, ಬಳಕೆದಾರ ಸೈನ್-ಇನ್ ಫ್ಲೋ ಸಂದರ್ಭದಲ್ಲಿ ಸ್ವಯಂಪೂರ್ಣತೆ ಆಯ್ಕೆಯನ್ನು <ph name="PRODUCT_OS_NAME" /> ತೋರಿಸುವುದಿಲ್ಲ.
       ಈ ನೀತಿಯನ್ನು ಡೊಮೇನ್ ಹೆಸರನ್ನು ಪ್ರತಿನಿಧಿಸುವ ಸ್ಟ್ರಿಂಗ್‌ಗೆ ಹೊಂದಿಸಿದ್ದರೆ, ಬಳಕೆದಾರ ಸೈನ್-ಇನ್ ಸಂದರ್ಭದಲ್ಲಿ ಸ್ವಯಂಪೂರ್ಣತೆ ಆಯ್ಕೆಯನ್ನು <ph name="PRODUCT_OS_NAME" /> ತೋರಿಸುತ್ತದೆ, ಈ ಮೂಲಕ ಡೊಮೇನ್ ಹೆಸರು ವಿಸ್ತರಣೆ ಇಲ್ಲದೆಯೇ ಕೇವಲ ಅವರ ಬಳಕೆದಾರ ಹೆಸರನ್ನು ಟೈಪ್ ಮಾಡಲು ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸುತ್ತದೆ.  ಬಳಕೆದಾರರಿಗೆ ಈ ಡೊಮೇನ್ ಹೆಸರು ವಿಸ್ತರಣೆಯನ್ನು ಓವರ್‌ವ್ರೈಟ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" /> ನಲ್ಲಿ ನೆಟ್‌ವರ್ಕ್ ಮುನ್ಸೂಚನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರು ಈ ಸೆಟ್ಟಿಂಗ್ ಬದಲಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ.
+
+      ಇದು DNS ಮುಂಚಿತವಾಗಿ ಪಡೆಯುವಿಕೆ, TCP ಮತ್ತು SSL ಪೂರ್ವಸಂಪರ್ಕ ಮತ್ತು ವೆಬ್ ಪುಟಗಳನ್ನು ಮುಂಚಿತವಾಗಿ ಸಲ್ಲಿಸುವುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ.
+
+      ನೀವ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಬಳಕೆದಾರರು <ph name="PRODUCT_NAME" /> ನಲ್ಲಿ ಈ ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು ಅಥವಾ ಅತಿಕ್ರಮಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
+
+      ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟರೆ, ನೆಟ್‌ವರ್ಕ್ ಮುನ್ಸೂಚನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ ಆದರೆ ಬಳಕೆದಾರರಿಗೆ ಇದನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="1865417998205858223">ಪ್ರಮುಖ ಅನುಮತಿಗಳು</translation>
 <translation id="186719019195685253">AC ವಿದ್ಯುತ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ಸಂದರ್ಭದಲ್ಲಿ ತಟಸ್ಥ ವಿಳಂಬ ತಲುಪಿದಾಗ ತೆಗೆದುಕೊಳ್ಳಬೇಕಾಗುವ ಕ್ರಮ.</translation>
 <translation id="187819629719252111">ಫೈಲ್ ಆಯ್ಕೆ ಸಂವಾದಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು <ph name="PRODUCT_NAME" /> ಅನ್ನು ಅನುಮತಿಸುವ ಮೂಲಕ ಯಂತ್ರದಲ್ಲಿನ ಸ್ಥಳೀಯ ಫೈಲ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಬಳಕೆದಾರರು ಫೈಲ್ ಆಯ್ಕೆ ಸಂವಾದಗಳನ್ನು ಸಹಜವಾಗಿ ತೆರೆಯಬಹುದಾಗಿದೆ. ಫೈಲ್ ಆಯ್ಕೆ ಸಂವಾದವನ್ನು ಪ್ರಚೋದಿಸುವಂತಹ (ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳನ್ನು ಆಮದು ಮಾಡುವುದು, ಫೈಲ್‌ಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡುವುದು, ಲಿಂಕ್‌ಗಳನ್ನು ಉಳಿಸುವುದು, ಮುಂತಾದವು) ಕ್ರಿಯೆಯನ್ನು ಬಳಕೆದಾರರು ಮಾಡಿದಾಗಲೆಲ್ಲ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಅದಕ್ಕೆ ಒಂದು ಸಂದೇಶವನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರನು ಫೈಲ್ ಆಯ್ಕೆ ಸಂವಾದದಲ್ಲಿನ ರದ್ದು ಕ್ಲಿಕ್ ಮಾಡಿರಬಹುದು ಎಂದು ಊಹಿಸಲಾಗುತ್ತದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಹೊಂದಿಸದೆ ಇದ್ದಲ್ಲಿ, ಬಳಕೆದಾರರು ಫೈಲ್ ಆಯ್ಕೆ ಸಂವಾದಗಳನ್ನು ಸಾಮಾನ್ಯದಂತೆ ತೆರೆಯಬಹುದಾಗಿದೆ.</translation>
@@ -739,6 +746,7 @@
 <translation id="2907992746861405243"><ph name="BULK_PRINTERS_POLICY" /> ಯಿಂದ ಯಾವ ಪ್ರಿಂಟರ್‌ಗಳು ಬಳಕೆದಾರರಿಗೆ ಲಭ್ಯವಿವೆ ಎನ್ನುವುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ. ದೊಡ್ಡ ಪ್ರಮಾಣದಲ್ಲಿ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಯಾವ ಪ್ರವೇಶ ಕಾರ್ಯನೀತಿಯನ್ನು ಬಳಸಬೇಕು ಎನ್ನುವುದನ್ನು ನಿಗದಿಪಡಿಸುತ್ತದೆ. <ph name="PRINTERS_ALLOW_ALL" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಎಲ್ಲ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ. <ph name="PRINTERS_BLACKLIST" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ನಿರ್ದಿಷ್ಟ ಪ್ರಿಂಟರ್‌ಗಳಿಗೆ ಪ್ರವೇಶವನ್ನು ನಿರ್ಬಂಧಿಸಲು <ph name="BULK_PRINTERS_BLACKLIST" /> ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. <ph name="PRINTERS_WHITELIST" /> ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿದರೆ, ಆಯ್ಕೆ ಮಾಡಬಹುದಾದ ಪ್ರಿಂಟರ್‌ಗಳನ್ನು ಮಾತ್ರ <ph name="BULK_PRINTERS_WHITELIST" /> ನಿಗದಿಪಡಿಸುತ್ತದೆ. ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, <ph name="PRINTERS_ALLOW_ALL" /> ಎಂದು ಭಾವಿಸಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.
       </translation>
 <translation id="2908277604670530363">ಪ್ರಾಕ್ಸಿ ಸರ್ವರ್‌ಗೆ ಏಕಕಾಲೀನ ಸಂಪರ್ಕಗಳ ಗರಿಷ್ಠ ಸಂಖ್ಯೆ</translation>
+<translation id="2951386431828317490">ಪ್ರೊಫೈಲ್‌ಗಳಿಗೆ ಸ್ವಯಂ ಭರ್ತಿಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="2956777931324644324">ಈ ನೀತಿಯನ್ನು <ph name="PRODUCT_NAME" /> ಆವೃತ್ತಿ 36 ರ ರೂಪದಲ್ಲಿ ಹಿಂತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ.
 
       TLS ಡೊಮೇನ್-ಪರಿಧಿ ಪ್ರಮಾಣಪತ್ರಗಳ ವಿಸ್ತರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕೇ ಎಂಬುದನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
@@ -748,6 +756,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಖಾತೆ ಪ್ರಕಾರ</translation>
 <translation id="2959469725686993410">ಸಮಯ ವಲಯವನ್ನು ಪರಿಹರಿಸುವಾಗ ಸರ್ವರ್‌ಗೆ ಯಾವಾಗಲೂ ವೈಫೈ ಪ್ರವೇಶ-ಬಿಂದುಗಳನ್ನು ಕಳುಹಿಸಿ</translation>
 <translation id="2959898425599642200">ಪ್ರಾಕ್ಸಿ ಬೈಪಾಸ್ ನಿಯಮಗಳು</translation>
+<translation id="2960128438010718932">ಹೊಸ ಅಪ್‌ಡೇಟ್ ಅನ್ವಯಿಸುವ ಹಂತದ ವೇಳಾಪಟ್ಟಿ</translation>
 <translation id="2960691910306063964">ರಿಮೋಟ್ ಪ್ರವೇಶ ಹೋಸ್ಟ್‌ಗಳಿಗೆ ಪಿನ್ ರಹಿತ ದೃಢೀಕರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="2976002782221275500">ಬ್ಯಾಟರಿ ಪವರ್‌ನಲ್ಲಿ ಮಂದವಾಗುವ ಪರದೆಯು ನಂತರ ಬಳಕೆದಾರ ಇನ್‌ಪುಟ್ ಇಲ್ಲದೆಯೇ ಸಮಯದ ಉದ್ದವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
           ಸೊನ್ನೆಗಿಂತ ಹೆಚ್ಚಿನದಕ್ಕೆ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದರೆ, ಪರದೆಯನ್ನು <ph name="PRODUCT_OS_NAME" /> ಮಂದಗೊಳಿಸುವ ಮುನ್ನ ಬಳಕೆದಾರ ನಿಷ್ಪಲನಾಗಿ ಉಳಿಯುವಂತಹ ಉದ್ದವನ್ನು ಇದು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ.
@@ -789,6 +798,7 @@
       ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸಲಾಗಿದೆಯೇ ಅಥವಾ ಹೊಂದಿಸಿದ್ದರೆ ಹೇಗೆ ಹೊಂದಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳದೇ WPAD ಆಪ್ಟಿಮೈಸೇಶನ್ ಸೆಟ್ಟಿಂಗ್‌ ಅನ್ನು ಬಳಕೆದಾರರ ಮೂಲಕ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.</translation>
 <translation id="3072045631333522102">ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಅನ್ನು ಸೈನ್-ಇನ್ ಪರದೆಯಲ್ಲಿ ಚಿಲ್ಲರೆ ಮೋಡ್‌ನಲ್ಲಿ ಬಳಸಲು</translation>
 <translation id="3072847235228302527">ಸಾಧನ-ಸ್ಥಳೀಯ ಖಾತೆಗಾಗಿ ಸೇವಾ ನಿಯಮಗಳನ್ನು ಹೊಂದಿಸಿ</translation>
+<translation id="3077183141551274418">ಟ್ಯಾಬ್ ಜೀವನಚಕ್ರಗಳನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> ನಲ್ಲಿ ಕ್ಯಾಸ್ಟ್‌ ರಿಸೀವರ್‌ ಅನ್ನು ಕಾನ್ಫಿಗರ್‌ ಮಾಡಿ.</translation>
 <translation id="3088796212846734853">ಚಿತ್ರಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಅನುಮತಿ ಇರುವ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ URL ಮಾದರಿಗಳ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿಸಲು ಇದು ನಿಮಗೆ ಅವಕಾಶ ನೀಡುತ್ತದೆ.
 
@@ -1409,6 +1419,11 @@
       ಈ ಸಲಹೆಗಳನ್ನು, Google ಸರ್ವರ್‌ಗಳಿಂದ, ದೂರದ ಸ್ಥಳದಲ್ಲಿ ಇದ್ದುಕೊಂಡೇ ಪಡೆದುಕೊಳ್ಳಲಾಗುತ್ತದೆ.
 
       ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು false ಎಂದು ಹೊಂದಿಸಿದರೆ, ಸಲಹೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಲಾಗುವುದಿಲ್ಲ ಅಥವಾ ಪ್ರದರ್ಶಿಸಲಾಗುವುದಿಲ್ಲ.</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" /> ನ ಸ್ವಯಂ ಭರ್ತಿ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಈ ಹಿಂದೆ ಸಂಗ್ರಹಿಸಿದ ಮಾಹಿತಿಯನ್ನು ಬಳಸಿಕೊಂಡು ವೆಬ್ ಫಾರ್ಮ್‌ಗಳಲ್ಲಿ ತಮ್ಮ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಮಾಹಿತಿಯನ್ನು ಸ್ವಯಂ ಪೂರ್ಣಗೊಳಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಅವಕಾಶ ಮಾಡಿಕೊಡುತ್ತದೆ.
+
+      ಈ ಸೆಟ್ಟಿಂಗ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ, ಸ್ವಯಂ ತುಂಬುವಿಕೆಯು ಎಂದಿಗೂ ಸಲಹೆ ನೀಡುವುದಿಲ್ಲ ಅಥವಾ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಮಾಹಿತಿಯನ್ನು ಸ್ವಯಂ ತುಂಬುವುದಿಲ್ಲ ಅಥವಾ ಬಳಕೆದಾರರು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುತ್ತಿರುವ ಸಂದರ್ಭದಲ್ಲಿ ಸಲ್ಲಿಸುವಂತಹ ಹೆಚ್ಚುವರಿ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಮಾಹಿತಿಯನ್ನು ಇದು ಉಳಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ.
+
+      ಒಂದು ವೇಳೆ ಈ ಸೆಟ್ಟಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿದಲ್ಲಿ ಅಥವಾ ಯಾವುದೇ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, UI ನಲ್ಲಿರುವ ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್‌ಗಳಿಗೆ ಸ್ವಯಂ ತುಂಬುವಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಬಳಕೆದಾರರಿಗೆ ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="4791031774429044540">ದೊಡ್ಡ ಕರ್ಸರ್ ಪ್ರವೇಶಿಸುವಿಕೆ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ.
 
           ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಯಾವಾಗಲೂ ದೊಡ್ಡ ಕರ್ಸರ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ.
@@ -1533,6 +1548,12 @@
       ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ, ಸಾಧನವನ್ನು ಡೆವಲಪರ್ ಮೋಡ್‌ಗೆ ಬೂಟ್ ಮಾಡುವುದರಿಂದ <ph name="PRODUCT_OS_NAME" /> ಅನ್ನು ತಡೆಯುತ್ತದೆ. ಡೆವಲಪರ್ ಸ್ವಿಚ್ ಆನ್ ಆಗಿರುವಾಗ, ಸಿಸ್ಟಂ ಬೂಟ್ ಮಾಡಲು ನಿರಾಕರಿಸುತ್ತದೆ ಮತ್ತು ಪರದೆಯಲ್ಲಿ ಒಂದು ದೋಷವನ್ನು ತೋರಿಸುತ್ತದೆ.
 
       ಒಂದು ವೇಳೆ ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಬಿಟ್ಟರೆ ಅಥವಾ ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ, ಡೆವಲಪರ್ ಮೋಡ್ ಸಾಧನಕ್ಕೆ ಲಭ್ಯ ಸ್ಥಿತಿಯಲ್ಲಿಯೇ ಉಳಿಯುತ್ತದೆ.</translation>
+<translation id="520403427390290017">ಟ್ಯಾಬ್ ಜೀವನಚಕ್ರಗಳ ವೈಶಿಷ್ಟ್ಯವು CPU ಅನ್ನು ಹಿಂಪಡೆಯುತ್ತದೆ ಮತ್ತು ಕೊನೆಯಲ್ಲಿ ದೀರ್ಘಕಾಲದವರೆಗೆ ಬಳಸದೆ ಇರುವ ಚಾಲನೆಯಲ್ಲಿರುವ ಟ್ಯಾಬ್‌ಗಳೊಂದಿಗೆ ಸಂಯೋಜಿತವಾದ ಮೆಮೊರಿಯನ್ನು ಪುನಃಸ್ಥಾಪಿಸುತ್ತದೆ, ಇದನ್ನು ಮೊದಲು ನಿಯಂತ್ರಿಸುವುದು, ನಂತರ ತೊರೆಯುವುದು ಮತ್ತು ಅಂತಿಮವಾಗಿ ಅಳಿಸುವುದು.
+
+
+ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದರೆ, ಟ್ಯಾಬ್‌ ಜೀವನ ಚಕ್ರವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತದೆ, ಎಲ್ಲಾ ಟ್ಯಾಬ್‌ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ರನ್ ಆಗುತ್ತವೆ.
+
+ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ ಅಥವಾ ಕಾನ್ಫಿಗರ್ ಮಾಡದಿದ್ದರೆ, ಟ್ಯಾಬ್‌ಗಳ ಜೀವನ ಚಕ್ರವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಬಹುದು.</translation>
 <translation id="5208240613060747912">ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಅನುಮತಿಸದೆ ಇರುವಂತಹ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವಂತಹ url ಪ್ರಕಾರಗಳನ್ನು ಹೊಂದಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆ ಬಿಟ್ಟಲ್ಲಿ ಜಾಗತಿಕ ಡಿಫಾಲ್ಟ್ ಮೌಲ್ಯವನ್ನು 'DefaultNotificationsSetting' ನೀತಿಯನ್ನು ಹೊಂದಿಸಿದ್ದಲ್ಲಿ ಇದನ್ನು ಬಳಸಲಾಗುತ್ತದೆ ಅಥವಾ ಬಳಕೆದಾರರ ವೈಯಕ್ತಿಕ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="5219844027738217407">Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ, ಈ ನೀತಿಯು ಮೈಕ್ರೋಫೋನ್‌ಗೆ ಮಾತ್ರ ಪರಿಣಾಮ ಬೀರುತ್ತದೆ. ಈ ನೀತಿಯನ್ನು ನಿಜ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಿದರೆ, ಯಾವುದೇ ವಿನಾಯಿತಿಗಳಿಲ್ಲದೇ, ಎಲ್ಲಾ Android ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗೆ ಮೈಕ್ರೋಫೋನ್ ಅನ್ನು ಮ್ಯೂಟ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="523505283826916779">ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
@@ -1589,6 +1610,11 @@
 <translation id="5318185076587284965">ರಿಮೋಟ್ ಪ್ರವೇಶದ ಹೋಸ್ಟ್ ಮೂಲಕ ಅವಲಂಬಿತ ಸರ್ವರ್‌ಗಳ ಬಳಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="5323128137188992869"><ph name="PRODUCT_NAME" /> ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸಾಧನಕ್ಕೆ ಬಿತ್ತರಿಸಬೇಕಾದ ವಿಷಯವನ್ನು ಅನುಮತಿಸಿ. ಈ ನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಹೊಂದಿಸಿದ್ದರೆ, ಬಳಕೆದಾರರು ತಮ್ಮ ಸಾಧನಕ್ಕೆ ವಿಷಯವನ್ನು ಬಿತ್ತರಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಈ ನೀತಿಯನ್ನು ಸರಿ ಎಂದು ಹೊಂದಿಸಿದರೆ, ಬಳಕೆದಾರರು ವಿಷಯವನ್ನು ಬಿತ್ತರಿಸಲು ಅನುಮತಿಸಲಾಗುತ್ತದೆ. ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದಿದ್ದರೆ, Chrome OS ಸಾಧನಗಳ ನೋಂದಾಯಿಸುವುದಕ್ಕೆ ವಿಷಯವನ್ನು ಬಿತ್ತರಿಸಲು ಬಳಕೆದಾರರು ಅನುಮತಿಸುವುದಿಲ್ಲ, ಆದರೆ ನೋಂದಾಯಿಸಲಾಗಿಲ್ಲದ ಸಾಧನಗಳಿಗೆ ಬಿತ್ತರಿಸಬಹುದಾಗಿದೆ.</translation>
 <translation id="5330684698007383292">ಮುಂದಿನ ವಿಷಯದ ಪ್ರಕಾರಗಳನ್ನು ನಿರ್ವಹಿಸಲು <ph name="PRODUCT_FRAME_NAME" /> ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ.</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" /> ನ ಸ್ವಯಂಭರ್ತಿ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ ಮತ್ತು ಬಳಕೆದಾರರು ಹಿಂದೆ ಸಂಗ್ರಹಿಸಿದ ಮಾಹಿತಿಯನ್ನು  ಬಳಸಿಕೊಂಡು ವೆಬ್ ಫಾರ್ಮ್‌ಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ರೊಫೈಲ್ ಮತ್ತು ವಿಳಾಸ ಡೇಟಾವನ್ನು ತುಂಬಲು ಅನುಮತಿಸುತ್ತದೆ.
+
+        ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, "ಸ್ವಯಂಭರ್ತಿ" ವಿಳಾಸಗಳಿಗೆ ಡೇಟಾವನ್ನು ಸೂಚಿಸುವುದಿಲ್ಲ ಅಥವಾ ತುಂಬುವುದಿಲ್ಲ, ಅಥವಾ ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವಾಗ ಬಳಕೆದಾರರು ಸಲ್ಲಿಸಬಹುದಾದ ವಿಳಾಸಗಳ ಬಗ್ಗೆ ಹೆಚ್ಚಿನ ಮಾಹಿತಿಯನ್ನು ಉಳಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ.
+
+       ಈ ಸೆಟ್ಟಿಂಗ್‌ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿದ್ದರೆ ಅಥವಾ ಯಾವುದೇ ಮೌಲ್ಯವನ್ನು ಹೊಂದಿಲ್ಲದಿದ್ದರೆ, ಬಳಕೆದಾರರು UI ನಲ್ಲಿರುವ ವಿಳಾಸಗಳಿಗೆ ಸ್ವಯಂಭರ್ತಿಯನ್ನು ನಿಯಂತ್ರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="5365946944967967336">ಪರಿಕರ ಪಟ್ಟಿಯಲ್ಲಿ ಮುಖಪುಟ ಬಟನ್‌ ಅನ್ನು ತೋರಿಸು</translation>
 <translation id="5366745336748853475">ಸೈಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಕೋರಿದರೆ, SAML ಹರಿವನ್ನು ಹೋಸ್ಟ್ ಮಾಡುವ ಚೌಕಟ್ಟಿನಲ್ಲಿನ ಸೈನ್-ಇನ್ ಪರದೆಯಲ್ಲಿ ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರವು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆಯ್ಕೆಮಾಡಲ್ಪಡುವ ಸೈಟ್‌ಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ url ಪ್ಯಾಟರ್ನ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. SAML IdP ಗೆ ಒದಗಿಸುವ ಸಾಧನ-ವಿಸ್ತಾರದ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಕಾನ್ಫಿಗರ್‌ ಮಾಡುವುದು ಒಂದು ಉದಾಹರಣೆಯಾಗಿದೆ.
 
@@ -2329,6 +2355,17 @@
       ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, Smart Lock ಬಳಸಲು ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ.
 
       ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೇ ಇದ್ದರೆ, ಎಂಟರ್‌ಪ್ರೈಸ್-ನಿರ್ವಹಿತ ಬಳಕೆದಾರರಿಗೆ ಡಿಫಾಲ್ಟ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗುವುದಿಲ್ಲ ಮತ್ತು ನಿರ್ವಹಿಸದ ಬಳಕೆದಾರರಿಗೆ ಅನುಮತಿಸಲಾಗುತ್ತದೆ.</translation>
+<translation id="729492886167634859">ಮೊದಲ ಬಾರಿಗೆ ಅಪ್‌ಡೇಟ್ ಕಂಡುಹಿಡಿಯಲ್ಪಟ್ಟ ದಿನಾಂಕದಿಂದ ಪ್ರತಿ ವಾರ OU ನಲ್ಲಿ ಸ್ಥಾಪಿಸಬಹುದಾದ <ph name="PRODUCT_OS_NAME" /> ಸಾಧನಗಳ ಶೇಕಡಾವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಶೇಕಡಾವಾರು ಪಟ್ಟಿಯನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಲು ಈ ನೀತಿಯನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ಅಪ್‌ಡೇಟ್ ಪ್ರಕಟಗೊಂಡ ದಿನಾಂಕ ಅಪ್‌ಡೇಟ್ ಬಿಡುಗಡೆಯ ದಿನಾಂಕದ ನಂತರ ಇರುತ್ತದೆ, ಏಕೆಂದರೆ ಅಪ್‌ಡೇಟ್ ಬಿಡುಗಡೆಗೊಂಡ ನಂತರ ಸಾಧನವನ್ನು ಪರಿಶೀಲಿಸಲು ಸ್ವಲ್ಪ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು.
+
+
+       ಪಟ್ಟಿಯಲ್ಲಿ ಕಂಡುಬರುವ nth ಮೌಲ್ಯವು ಅಪ್‌ಡೇಟ್ ಕಂಡುಬಂದ ನಂತರ nth ವಾರದೊಳಗೆ ಹೊಸ ಆವೃತ್ತಿಗೆ ಅಪ್‌ಡೇಟ್‌ ಮಾಡಬಹುದಾದ ಸಾಧನಗಳ ಶೇಕಡಾವನ್ನು ಪ್ರತಿನಿಧಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಒಂದು ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಇಂದು ಪತ್ತೆಹಚ್ಚಿದಲ್ಲಿ, ಪಟ್ಟಿಯ ಮೊದಲ ಮೌಲ್ಯವು OU ನಲ್ಲಿನ ಸಾಧನಗಳ ಶೇಕಡಾವಾರು ಆಗಿದ್ದು,  ಉದಾಹರಣೆಗೆ, ಸಿಸ್ಟಮ್ ಇಂದು ಒಂದು ಅಪ್‌ಡೇಟ್‌ ಅನ್ನು ಪತ್ತೆಹಚ್ಚಿದರೆ, ಇಂದಿನಿಂದ ಒಂದು ವಾರದವರೆಗೆ ಸಂಸ್ಥೆಯಲ್ಲಿ ಅಳವಡಿಸಬೇಕಾದ ಶೇಕಡಾವಾರು ಸಾಧನಗಳನ್ನು ಈ ಪಟ್ಟಿಯಲ್ಲಿರುವ ಮೊದಲ ಮೌಲ್ಯವು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ. ಎರಡನೆಯ ಮೌಲ್ಯವು OU ನಲ್ಲಿನ ಸಾಧನಗಳ ಶೇಕಡಾವಾರು ಪ್ರಮಾಣವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುತ್ತದೆ ಅದು ಇಂದಿನಿಂದ 2 ವಾರಗಳವರೆಗೆ ಆ ಆವೃತ್ತಿಗೆ ಅಪ್‌ಡೇಟ್ ಮಾಡಬೇಕು ಮತ್ತು ಹೀಗೆ ಮಾಡಬಹುದು
+
+      ಈ ನೀತಿಯ ಮೌಲ್ಯವನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಿದ್ದರೆ, ಅಪ್‌ಡೇಟ್ <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> ನೀತಿಯನ್ನು ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ ಮತ್ತು ಬದಲಿಗೆ ಈ ನೀತಿಯನ್ನು ಅನುಸರಿಸುತ್ತದೆ.
+
+      ಈ ಪಟ್ಟಿಯು ಖಾಲಿಇದ್ದರೆ, ಈ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದ್ದರೆ, ಯಾವುದೇ ಹಂತಗಳು ನಡೆಯುವುದಿಲ್ಲ ಮತ್ತು ಇತರ ಸಾಧನಗಳ ನೀತಿಗಳ ಪ್ರಕಾರ ಅಪ್‌ಡೇಟ್ ಅನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.
+
+
+      ಈ ನೀತಿಯು ಚಾನಲ್ ಸ್ವಿಚ್‌ಗಳಿಗೆ ಅನ್ವಯಿಸುವುದಿಲ್ಲ.</translation>
 <translation id="7295019613773647480">ಮೇಲ್ವಿಚಾರಣೆಯ ಬಳಕೆದಾರರನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="7301543427086558500">ಹುಡುಕಾಟ ಎಂಜಿನ್‌ನಿಂದ ಹುಡುಕಾಟ ಪದಗಳನ್ನು ಬೇರ್ಪಡಿಸಲು ಬಳಸಬಹುದಾದ ಪರ್ಯಾಯ URL ಗಳ ಪಟ್ಟಿಯನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತದೆ. ಹುಡುಕಾಟ ಪದಗಳನ್ನು ಬೇರ್ಪಡಿಸಲು ಬಳಸುವಂತಹ, URL ಗಳು <ph name="SEARCH_TERM_MARKER" /> ಸ್ಟ್ರಿಂಗ್ ಒಳಗೊಂಡಿರಬೇಕು.
 
@@ -2827,6 +2864,14 @@
 
           ಉದಾಹರಣೆಯ ಪ್ಯಾಟರ್ನ್‌ಗಳಿಗೆ https://www.chromium.org/developers/how-tos/chrome-frame-getting-started ಅನ್ನು ವೀಕ್ಷಿಸಿ.</translation>
 <translation id="8493645415242333585">ಉಳಿಸುವ ಬ್ರೌಸರ್ ಇತಿಹಾಸವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ</translation>
+<translation id="8498293625012059298">ಪಾಸ್‌ವರ್ಡ್ ಬದಲಿಸುವ URL (HTTP ಮತ್ತು HTTPS ಸ್ಕೀಮ್‌ಗಳು ಮಾತ್ರ) ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಿ. 
+ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿದ ನಂತರ, ಪಾಸ್‌ವರ್ಡ್ ರಕ್ಷಣಾ ಸೇವೆಯು ಅವರಿಗೆ ತಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಬದಲಾಯಿಸಲು ಈ URL ಅನ್ನು ಕಳುಹಿಸುತ್ತದೆ
+
+      ಈ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾವಣೆ ಪುಟದಲ್ಲಿ ಹೊಸ ಪಾಸ್‌ವರ್ಡ್‌ನ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌ ಅನ್ನು <ph name="PRODUCT_NAME" /> ಸರಿಯಾಗಿ ಸೆರೆಹಿಡಿಯುವ ಸಲುವಾಗಿ, ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಬದಲಾವಣೆ ಪುಟವು https://www.chromium.org/developers/design-documents/create-amazing-password-forms ನ ಮಾರ್ಗದರ್ಶಿಗಳನ್ನು ಅನುಸರಿಸುತ್ತಿದೆ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.
+
+      ಈ ಸೆಟ್ಟಿಂಗ್ ಸಕ್ರಿಯಗೊಂಡಿದ್ದರೆ, ಬಳಕೆದಾರರು ಬ್ರೌಸರ್‌ನಲ್ಲಿ ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿದ ನಂತರ ಅವರ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಬದಲಾಯಿಸಲು ಪಾಸ್‍ವರ್ಡ್ ರಕ್ಷಣಾ ಸೇವೆಯು ಅವರನ್ನು ಈ URL ಗೆ ಕಳುಹಿಸುತ್ತದೆ.
+      ಈ ಸೆಟ್ಟಿಂಗ್ ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದ್ದರೆ ಅಥವಾ ಹೊಂದಿಸದಿದ್ದರೆ, ಬಳಕೆದಾರರು ತಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಬದಲಾಯಿಸಲು, ಪಾಸ್‌ವರ್ಡ್ ರಕ್ಷಣಾ ಸೇವೆಯು ಅವರನ್ನು https://myaccounts.google.com tಗೆ ಕಳುಹಿಸುತ್ತದೆ.
+      <ph name="MS_AD_NAME" /> ಡೊಮೇನ್‌ಗೆ ಸೇರದೆ ಇರುವ Windows ನಿದರ್ಶನಗಳಲ್ಲಿ ಈ ಕಾರ್ಯನೀತಿಯು ಲಭ್ಯವಿರುವುದಿಲ್ಲ.</translation>
 <translation id="8499172469244085141">ಡಿಫಾಲ್ಟ್ ಸೆಟ್ಟಿಂಗ್‌ಗಳು (ಬಳಕೆದಾರರು ಅತಿಕ್ರಮಿಸಬಹುದು)</translation>
 <translation id="8507835864888987300">ಸ್ವಯಂ ಅಪ್‍ಡೇಟ್‍ಗಳಿಗಾಗಿ ಟಾರ್ಗೆಟ್ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿಸುತ್ತದೆ.
 
@@ -2882,6 +2927,16 @@
 ಈ ಕಾರ್ಯನೀತಿಯನ್ನು ತಪ್ಪು ಎಂದು ಬದಲಾಯಿಸಿದರೆ, ಅದು ಹೊಸ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅನ್ವಯವಾಗುತ್ತದೆ, ಮತ್ತು ಈಗಾಗಲೇ ಚಾಲನೆಯಲ್ಲಿರುವ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ಮುಚ್ಚುವುದಿಲ್ಲ.
 ಈ ಕಾರ್ಯನೀತಿಯನ್ನು, ನಿರ್ವಹಿಸಲಾದ ಸಾಧನದಲ್ಲಿ ಹೊಂದಿಸದಿದ್ದರೆ, ಸಾಧನವು ವರ್ಚುವಲ್ ಯಂತ್ರವನ್ನು ರನ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ.
 ನಿರ್ವಹಿಸದಿರುವ ಸಾಧನಗಳಿಗೆ ವರ್ಚುವಲ್ ಯಂತ್ರಗಳನ್ನು ರನ್ ಮಾಡಲು ಅನುಮತಿ ನೀಡಲಾಗುತ್ತದೆ.</translation>
+<translation id="8669669491594628013">ಪಾಸ್‌ವರ್ಡ್‌ ಸುರಕ್ಷತಾ ಎಚ್ಚರಿಕೆಯನ್ನು ಟ್ರಿಗರ್ ಮಾಡುವುದನ್ನು ನಿಯಂತ್ರಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಸಂಶಯಾಸ್ಪದ ಸೈಟ್‌ಗಳಲ್ಲಿ ಸುರಕ್ಷಿತ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದಾಗ ಬಳಕೆದಾರರಿಗೆ ಸುರಕ್ಷತೆ ಕುರಿತ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೀಡುತ್ತದೆ.
+
+      ನೀವು ಸುರಕ್ಷಿತವಾಗಿರಬೇಕಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು 'PasswordProtectionLoginURLs' ಮತ್ತು 'PasswordProtectionChangePasswordURL' ನೀತಿಗಳನ್ನು ಬಳಸಬಹುದು.
+
+      ಈ ನೀತಿಯನ್ನು 'PasswordProtectionWarningOff' ಗೆ ಹೊಂದಿಸಿದರೆ, ಯಾವುದೇ ಪಾಸ್‌ವರ್ಡ್‌ ಸುರಕ್ಷತೆ ಕುರಿತು ಯಾವುದೇ ಎಚ್ಚರಿಕೆ ತೋರಿಸಲಾಗುವುದಿಲ್ಲ.
+
+      ಈ ನೀತಿಯನ್ನು 'PasswordProtectionWarningOnPasswordReuse' ಗೆ ಹೊಂದಿಸಿದರೆ, ಬಳಕೆದಾರರು ಶ್ವೇತ ಪಟ್ಟಿಯಲ್ಲಿಲ್ಲದ ಸೈಟ್‌ನಲ್ಲಿ ಅವರ ಪಾಸ್‌ವರ್ಡ್‌ ಮರುಬಳಕೆ ಮಾಡಿದಾಗ ಸುರಕ್ಷತಾ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ.
+      ಈ ನೀತಿಯನ್ನು 'PasswordProtectionWarningOnPhishingReuse' ಗೆ ಹೊಂದಿಸಿದರೆ, ಫಿಶಿಂಗ್ ಸೈಟ್‌ನಲ್ಲಿ ಬಳಕೆದಾರರು ತಮ್ಮ ಸುರಕ್ಷಿತ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರು ಬಳಕೆ ಮಾಡಿದಾಗ ಪಾಸ್‌ವರ್ಡ್‌ ಸುರಕ್ಷತಾ ಎಚ್ಚರಿಕೆಯನ್ನು ತೋರಿಸಲಾಗುತ್ತದೆ.
+     
+         ಈ ನೀತಿಯನ್ನು ಹೊಂದಿಸದೆ ಬಿಟ್ಟರೆ, ಪಾಸ್‌ವರ್ಡ್‌ ರಕ್ಷಣೆ ಸೇವೆಯು Google ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಮಾತ್ರ ರಕ್ಷಿಸುತ್ತದೆ ಆದರೆ ಬಳಕೆದಾರರಿಗೆ ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ.</translation>
 <translation id="8672321184841719703">ಲಕ್ಷ್ಯ ಸ್ವಯಂ ಅಪ್‌ಡೇಟ್‌‌ ಆದ ಆವೃತ್ತಿ</translation>
 <translation id="867410340948518937">U2F (ಸಾರ್ವತ್ರಿಕ ಎರಡನೆಯ ಅಂಶ)</translation>
 <translation id="8685024486845674965">ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದರೆ ಪಾಸ್‌ವರ್ಡ್ ಸಂರಕ್ಷಣೆ ಎಚ್ಚರಿಕೆಯು ಟ್ರಿಗರ್ ಆಗುತ್ತದೆ</translation>
diff --git a/components/policy/resources/policy_templates_lt.xtb b/components/policy/resources/policy_templates_lt.xtb
index af41296f..0eb7893 100644
--- a/components/policy/resources/policy_templates_lt.xtb
+++ b/components/policy/resources/policy_templates_lt.xtb
@@ -240,6 +240,13 @@
       Kitu atveju, jei reikia išlaikyti suderinamumą su serveriu, kuriame yra riktų, šią politiką galima nustatyti į „tls1.1“. Tai laikina priemonė; serverį reikia greitai sutvarkyti.</translation>
 <translation id="1864269674877167562">Jei ši politika nustatyta į tuščią eilutę arba yra nesukonfigūruota, „<ph name="PRODUCT_OS_NAME" />“ nerodys automatinio užbaigimo parinkties naudotojų prisijungimo eigoje.
       Jei ši politika nustatyta į eilutę, kuri nurodo domeno pavadinimą, „<ph name="PRODUCT_OS_NAME" />“ rodys automatinio užbaigimo parinktį prisijungiant ir naudotojai galės įvesti tik savo naudotojo vardą be domeno pavadinimo plėtinio. Naudotojas galės nepaisyti šio domeno pavadinimo plėtinio.</translation>
+<translation id="1864382791685519617">Įgalinamas tinklo numatymas sistemoje „<ph name="PRODUCT_NAME" />“ ir naudotojams neleidžiama pakeisti šio nustatymo.
+
+      Naudojant šią politiką valdomas išankstinis DNS pateikimas, išankstinis TCP ir SSL ryšys bei tinklalapių pateikimas.
+
+      Jei nustatysite šią politiką, „<ph name="PRODUCT_NAME" />“ naudotojai negalės pakeisti ar nepaisyti šio nustatymo.
+
+      Jei ši politika nebus nustatyta, bus įgalintas tinklo numatymas, bet naudotojas galės jį pakeisti.</translation>
 <translation id="1865417998205858223">Raktų leidimai</translation>
 <translation id="186719019195685253">Veiksmas, kuris bus atliktas, kai bus pasiektas neaktyvumo delsos laikas, veikiant iš kintamosios srovės šaltinio</translation>
 <translation id="187819629719252111">Leidžiama pasiekti įrenginyje saugomus vietinius failus leidžiant „<ph name="PRODUCT_NAME" />“ pateikti failų pasirinkimo dialogo langus.
@@ -716,6 +723,7 @@
       Jei ši politika nenustatyta, taikoma „<ph name="PRINTERS_ALLOW_ALL" />“.
       </translation>
 <translation id="2908277604670530363">Didžiausias jungčių prie tarpinio serverio vienu metu skaičius</translation>
+<translation id="2951386431828317490">Profilių automatinio pildymo funkcijos įgalinimas</translation>
 <translation id="2956777931324644324">Ši politika nebenaudojama nuo 36 versijos „<ph name="PRODUCT_NAME" />“.
 
       Nurodoma, ar TLS domeno sertifikatų plėtinys turėtų būti įgalintas.
@@ -724,6 +732,7 @@
 <translation id="2957506574938329824">Neleisti jokiai svetainei pateikti užklausos pasiekti „Bluetooth“ įrenginių naudojant „Web Bluetooth“ API</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> autentifikavimo paskyros tipas</translation>
 <translation id="2959898425599642200">Tarpinio serverio apėjimo taisyklės</translation>
+<translation id="2960128438010718932">Naujinio etapinio pritaikymo tvarkaraštis</translation>
 <translation id="2960691910306063964">Nuotolinės prieigos prieglobų autentifikavimo be PIN kodo įjungimas arba išjungimas</translation>
 <translation id="2976002782221275500">Nurodoma laiko trukmė be naudotojo įvesties, po kurios ekranas pritemdomas, kai naudojama akumuliatoriaus energija.
 
@@ -766,6 +775,7 @@
       Neatsižvelgiant į tai, ar ši politika nustatyta ir kaip ji nustatyta, WPAD optimizavimo nustatymo negali keisti naudotojai.</translation>
 <translation id="3072045631333522102">Naudotina prisijungimo ekrano užsklanda dirbant mažmeninės prekybos režimu</translation>
 <translation id="3072847235228302527">Nustatyti vietinės įrenginio paskyros paslaugų teikimo sąlygas</translation>
+<translation id="3077183141551274418">Įgalinama arba išjungiama skirtukų naudojimo trukmė</translation>
 <translation id="3086995894968271156">Konfigūruokite „Cast Receiver“ politiką „<ph name="PRODUCT_NAME" />“.</translation>
 <translation id="3088796212846734853">Leidžiama nustatyti URL šablonų, nurodančių svetaines, kuriose leidžiama pateikti vaizdus, sąrašą.
 
@@ -1341,6 +1351,11 @@
       Šie siūlymai gaunami nuotoliniu būdu iš „Google“ serverių.
 
       Jei šis nustatymas nustatytas kaip „false“, siūlymai nebus gaunami ar pateikiami.</translation>
+<translation id="4788252609789586009">Įgalinama „<ph name="PRODUCT_NAME" />“ automatinio pildymo funkcija ir naudotojams leidžiama automatiškai užpildyti žiniatinklio formas, naudojant anksčiau išsaugotą informaciją, pvz., kredito kortelės informaciją.
+
+      Jei šis nustatymas išjungtas, Automatinio pildymo funkcija niekada nesiūlys ir automatiškai nepildys kredito kortelės informacijos, taip pat neišsaugos papildomos kredito kortelės informacijos, kurią naudotojas gali pateikti naršydamas žiniatinklyje.
+
+      Jei šis nustatymas įgalintas arba vertė nenustatyta, naudotojas galės valdyti kredito kortelių informacijos Automatinio pildymo funkciją naudotojo sąsajoje.</translation>
 <translation id="4791031774429044540">Įgalinti didelio žymeklio pasiekiamumo funkciją.
 
           Jei ši politika galioja, didelis žymeklis bus visada įgalintas.
@@ -1480,6 +1495,11 @@
       Jei šios politikos nuostata nustatyta į „Taip“, „<ph name="PRODUCT_OS_NAME" />“ neleis paleisti įrenginio kūrėjo režimu. Sistema nebus paleista ir bus rodomas klaidos ekranas, įjungus kūrėjo jungiklį.
 
       Jei ši politika nenustatyta ar nustatyta „Ne“, kūrėjo režimas liks pasiekiamas įrenginiui.</translation>
+<translation id="520403427390290017">Skirtukų naudojimo trukmės funkcija atlaisvina centrinį procesorių ir atmintį, susietą su veikiančiais skirtukais, kurie buvo nenaudojami ilgą laiką. Pirma, reguliuojamas skirtukų veikimas, tada jie sustabdomi ir galiausiai atmetami.
+
+      Jei politika nustatyta į „false“, skirtukų naudojimo trukmės funkcija bus išjungta, o visi skirtukai veiks įprastai.
+
+      Jei politika nustatyta į „true“ arba nenurodyta, skirtukų naudojimo trukmės funkcija bus įgalinta.</translation>
 <translation id="5208240613060747912">Leidžiama nustatyti URL šablonų, nurodančių svetaines, kuriose neleidžiama pateikti pranešimų, sąrašą.
 
           Nenustačius šios politikos, visose svetainėse naudojama visuotinė numatytoji vertė iš politikos „Numatytasis pranešimų nustatymas“ (jei nustatyta) arba naudotojo asmeninės konfigūracijos.</translation>
@@ -1527,6 +1547,11 @@
 
           Jei ši politika nustatyta kaip „False“ (netiesa), naudotojai negalės perduoti turinio į įrenginį. Jei ši politika nustatyta kaip „True“ (tiesa), naudotojai perduoti turinį galės. Jei ši politika nenustatyta, naudotojai negalės perduoti turinio į užregistruotus „Chrome“ OS įrenginius, bet galės perduoti į neužregistruotus įrenginius.</translation>
 <translation id="5330684698007383292">Leisti „<ph name="PRODUCT_FRAME_NAME" />“ naudoti šių tipų turinį</translation>
+<translation id="5360146044009867539">Įgalinama „<ph name="PRODUCT_NAME" />“ automatinio pildymo funkcija ir naudotojams leidžiama automatiškai užpildyti žiniatinklio formas, naudojant anksčiau išsaugotą informaciją, pvz., profilio ir adreso informaciją.
+
+      Jei šis nustatymas išjungtas, Automatinio pildymo funkcija niekada nesiūlys ir automatiškai nepildys adreso informacijos, taip pat neišsaugos papildomos adreso informacijos, kurią naudotojas gali pateikti naršydamas žiniatinklyje.
+
+      Jei šis nustatymas įgalintas arba vertė nenustatyta, naudotojas galės valdyti adreso informacijos Automatinio pildymo funkciją naudotojo sąsajoje.</translation>
 <translation id="5365946944967967336">Rodyti įrankių juostoje pagrindinio puslapio mygtuką</translation>
 <translation id="5366745336748853475">Galima sudaryti URL šablonų sąrašą, nurodantį, kurioms svetainėms prisijungimo ekrane, kur rėmelyje priglobiama SAML eiga, automatiškai pasirenkamas kliento sertifikatas (jei svetainėje jo reikalaujama). Naudojimo pavyzdys – sukonfigūruoti įrenginio sertifikatą, kad jis būtų pateiktas „SAML IdP“ eigoje.
 
@@ -2250,6 +2275,15 @@
 
           Jei šis nustatymas neleidžiamas, ši funkcija nepasiekiama.</translation>
 <translation id="7275334191706090484">Tvarkomos žymės</translation>
+<translation id="729492886167634859">Ši politika apibrėžia procentinių verčių sąrašą, kur nurodoma OV įrenginių dalis („<ph name="PRODUCT_OS_NAME" />“), kurie bus atnaujinti per savaitę nuo pirmos naujinio aptikimo dienos. Aptikimo laikas yra vėlesnis nei naujinio paskelbimo laikas, nes paskelbus naujinį įrenginys gali tikrinti, ar yra naujinių, tik po kurio laiko.
+
+      N-toji sąrašo vertė bus naudojama kaip procentinė įrenginių dalis, kurių sistema turėtų būti atnaujinta į naują versiją n-tąją savaitę po naujinio aptikimo. Pvz., jei naujinys aptiktas šiandien, pirma sąrašo vertė nurodys procentinę OV įrenginių dalį, kurių sistema turėtų būti atnaujinta į naują versiją per savaitę nuo šiandien. Antra vertė nurodo procentinę OV įrenginių dalį, kurių sistema turėtų būti atnaujinta į tą versiją per dvi savaites nuo šiandien ir t. t.
+
+      Jei šios politikos vertė nustatyta, naujiniai nepaisys politikos „<ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />“ ir vietoje to atsižvelgs į šią politiką.
+
+      Jei šis sąrašas tuščias, etapinis diegimas nebus naudojamas, o naujiniai bus pritaikyti atsižvelgiant į kitas įrenginių politikos nuostatas.
+
+      Ši politika netaikoma keičiant kanalus.</translation>
 <translation id="7295019613773647480">Įgalinti prižiūrimus naudotojus</translation>
 <translation id="7301543427086558500">Nurodomas alternatyvių URL, kuriuos galima naudoti paieškos terminams iš paieškos variklio gauti, sąrašas. URL turėtų būti eilutė „<ph name="SEARCH_TERM_MARKER" />“, kuri bus naudojama paieškos terminams gauti.
 
@@ -2715,6 +2749,12 @@
 
           Šablonų pavyzdžių galite rasti apsilankę adresu https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Neleisti išsaugoti naršyklės istorijos</translation>
+<translation id="8498293625012059298">Konfigūruojamas slaptažodžio keitimo URL (tik HTTP ir HTTPS schemos). Naudojant slaptažodžio apsaugos paslaugą naudotojai bus nukreipiami šiuo URL, kad pakeistų slaptažodžius, jei buvo rodomas įspėjimas naršyklėje.
+      Kad „<ph name="PRODUCT_NAME" />“ tinkamai užfiksuotų naujo slaptažodžio kontrolinį kodą šiame slaptažodžio keitimo puslapyje, įsitikinkite, kad slaptažodžio keitimo puslapyje laikomasi gairių, pasiekiamų adresu https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Jei šis nustatymas įgalintas, naudojant slaptažodžio apsaugos paslaugą naudotojai bus siunčiami šiuo URL, kad pakeistų slaptažodžius, jei buvo rodomas įspėjimas naršyklėje.
+      Jei šis nustatymas išjungtas arba nenustatytas, naudojant slaptažodžio apsaugos paslaugą naudotojai bus siunčiami adresu https://myaccounts.google.com, kad pakeistų slaptažodį.
+      Ši politika nepasiekiama „Windows“ objektuose, kurie nesusieti su „<ph name="MS_AD_NAME" />“ domenu.</translation>
 <translation id="8499172469244085141">Numatytieji nustatymai (naudotojai gali nepaisyti)</translation>
 <translation id="8507835864888987300">Nustatoma tikslinė automatinių naujinių versija.
 
@@ -2768,6 +2808,14 @@
       Pakeitus šios politikos nustatymą į „False“, jis taikomas paleidžiant naujus virtualiuosius įrenginius, bet jau veikiantys virtualieji įrenginiai nėra išjungiami.
       Jei ši politika nenustatyta valdomame įrenginyje, įrenginiui neleidžiama paleisti virtualiųjų įrenginių.
       Nevaldomiems įrenginiams leidžiama paleisti virtualiuosius įrenginius.</translation>
+<translation id="8669669491594628013">Galite valdyti įspėjimo dėl slaptažodžio apsaugos suaktyvinimą. Slaptažodžio apsauga įspėja naudotojus, kai jie pakartotinai naudoja apsaugotus slaptažodžius potencialiai įtartinose svetainėse.
+
+      Politiką „PasswordProtectionLoginURLs“ ir „PasswordProtectionChangePasswordURL“ galite naudoti konfigūruodami, kuriuos slaptažodžius apsaugoti.
+
+      Jei ši politika nustatyta kaip „PasswordProtectionWarningOff“, nebus rodomas įspėjimas dėl slaptažodžio apsaugos.
+      Jei ši politika nustatyta kaip „PasswordProtectionWarningOnPasswordReuse“, įspėjimas dėl slaptažodžio apsaugos bus rodomas, kai naudotojas pakartotinai naudos apsaugotą slaptažodį svetainėje, kuri neįtraukta į baltąjį sąrašą.
+      Jei ši politika nustatyta kaip „PasswordProtectionWarningOnPhishingReuse“, įspėjimas dėl slaptažodžio apsaugos bus rodomas, kai naudotojas pakartotinai naudos apsaugotą slaptažodį svetainėje, kurioje sukčiaujama.
+      Jei ši politika nenustatyta, slaptažodžio apsaugos paslauga apsaugos tik „Google“ slaptažodžius, bet naudotojas galės pakeisti šį nustatymą.</translation>
 <translation id="8672321184841719703">Taikomo automatinio naujinio versija</translation>
 <translation id="867410340948518937">U2F (universalusis antras veiksnys, angl. „Universal Second Factor“)</translation>
 <translation id="8685024486845674965">Įspėjimas dėl slaptažodžio apsaugos suaktyvinamas pakartotinai naudojant slaptažodį</translation>
diff --git a/components/policy/resources/policy_templates_lv.xtb b/components/policy/resources/policy_templates_lv.xtb
index 2a93528..c32eb4db 100644
--- a/components/policy/resources/policy_templates_lv.xtb
+++ b/components/policy/resources/policy_templates_lv.xtb
@@ -240,6 +240,13 @@
       Pretējā gadījumā, ja ir jāuztur saderība ar kļūdainu serveri, šo politiku var iestatīt uz “tls1.1”. Tas ir pagaidu risinājums, un serveris ir steidzami jālabo.</translation>
 <translation id="1864269674877167562">Ja kā šīs politikas vērtība tiek iestatīta tukša virkne vai ja politika nav konfigurēta, operētājsistēmā <ph name="PRODUCT_OS_NAME" /> lietotāja pierakstīšanās plūsmā netiks rādīta automātiskās pabeigšanas opcija.
       Ja kā šīs politikas vērtība tiek iestatīta virkne ar domēna nosaukumu, operētājsistēmā <ph name="PRODUCT_OS_NAME" /> lietotāja pierakstīšanās plūsmā tiks parādīta automātiskās pabeigšanas opcija, ļaujot lietotājam ievadīt tikai lietotājvārdu bez domēna nosaukuma paplašinājuma. Lietotājs varēs pārrakstīt šo domēna nosaukuma paplašinājumu.</translation>
+<translation id="1864382791685519617">Pārlūkā <ph name="PRODUCT_NAME" /> tiek iespējotas tīkla prognozes, un lietotājiem tiek liegta iespēja mainīt šo iestatījumu.
+
+      Šī politika kontrolē DNS pirmsielādi, iepriekšēju TCP un SSL savienojuma izveidi un tīmekļa lapu iepriekšēju atveidi.
+
+      Ja šī politika tiks iestatīta, lietotāji nevarēs mainīt vai ignorēt šo iestatījumu pārlūkā <ph name="PRODUCT_NAME" />.
+
+      Ja šī politika netiks iestatīta, tīkla prognozes tiks iespējotas, taču lietotājs varēs mainīt šo iestatījumu.</translation>
 <translation id="1865417998205858223">Atslēgu atļaujas</translation>
 <translation id="186719019195685253">Darbība, kas ir jāveic, kad ir aizritējis laiks līdz dīkstāvei un tiek izmantota maiņstrāva</translation>
 <translation id="187819629719252111">Ļauj piekļūt datora lokālajiem failiem, ļaujot produktam <ph name="PRODUCT_NAME" /> rādīt failu atlases dialoglodziņus.
@@ -719,6 +726,7 @@
       Ja šī politika nav iestatīta, tiek izmantota vērtība <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maksimālais vienlaikus iespējamais savienojumu skaits ar starpniekserveri</translation>
+<translation id="2951386431828317490">Automātiskās aizpildes iespējošana profiliem</translation>
 <translation id="2956777931324644324">Kopš <ph name="PRODUCT_NAME" /> versijas 36 izlaišanas šī politika vairs netiek izmantota.
 
       Norāda, vai jāiespējo TLS domēnam piesaistītais sertifikātu paplašinājums.
@@ -727,6 +735,7 @@
 <translation id="2957506574938329824">Neatļaut neviena vietnei pieprasīt piekļuvi Bluetooth ierīcēm, izmantojot Web Bluetooth API</translation>
 <translation id="2957513448235202597">Konta veids <ph name="HTTP_NEGOTIATE" /> autentifikācijas saskaņošanai</translation>
 <translation id="2959898425599642200">Starpniekserveru apiešanas kārtulas</translation>
+<translation id="2960128438010718932">Jauna atjauninājuma pakāpeniskās piemērošanas grafiks</translation>
 <translation id="2960691910306063964">Autentifikācijas bez PIN iespējošana vai atspējošana attālās piekļuves saimniekdatoriem</translation>
 <translation id="2976002782221275500">Tiek norādīts laika periods, kurā lietotājam ir jāveic kāda darbība, pretējā gadījumā ekrāns tiek aptumšots (ja ierīce darbojas ar akumulatora jaudu).
 
@@ -769,6 +778,7 @@
       Neatkarīgi no tā, vai šī politika ir iespējota un kā tā ir iespējota, lietotāji nevar mainīt WPAD optimizācijas iestatījumu.</translation>
 <translation id="3072045631333522102">Ekrānsaudzētājs, kas jāizmanto mazumtirdzniecības režīma pieteikšanās ekrānā</translation>
 <translation id="3072847235228302527">Ierīces lokālā konta pakalpojumu sniegšanas noteikumu iestatīšana</translation>
+<translation id="3077183141551274418">Ciļņu dzīves ciklu iespējošana vai atspējošana</translation>
 <translation id="3086995894968271156">Konfigurējiet Cast uztvērēju operētājsistēmā <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Ļauj iestatīt URL rakstu sarakstu ar vietnēm, kurām ir atļauts attēlot attēlus.
 
@@ -1338,6 +1348,11 @@
       Šie ieteikumi tiek izgūti attāli no Google serveriem.
 
       Ja šīs politikas iestatījums ir “False”, ieteikumi netiks izgūti vai parādīti.</translation>
+<translation id="4788252609789586009">Iespējo pārlūka <ph name="PRODUCT_NAME" /> funkciju Automātiskā aizpilde un ļauj lietotājiem automātiski aizpildīt kredītkaršu informāciju tīmekļa veidlapās, izmantojot iepriekš saglabāto informāciju.
+
+      Ja šis iestatījums ir atspējots, funkcija Automātiskā aizpilde nekad nerādīs kredītkaršu informācijas ieteikumus un neaizpildīs šo informāciju, kā arī nesaglabās papildu kredītkaršu informāciju, ko lietotājs var norādīt, pārlūkojot tīmekli.
+
+      Ja šis iestatījums ir iespējots vai tā vērtība nav norādīta, lietotājs varēs kontrolēt kredītkaršu informācijas automātisko aizpildi lietotāja saskarnē.</translation>
 <translation id="4791031774429044540">Iespējojiet liela kursora pieejamības funkciju.
 
           Ja šī politika ir iestatīta uz “true”, lielais kursors vienmēr būs iespējots.
@@ -1478,6 +1493,11 @@
       Ja šī politika ir iestatīta kā patiesa (“True”), <ph name="PRODUCT_OS_NAME" /> neļaus sāknēt ierīci izstrādātāja režīmā. Kad būs ieslēgts izstrādātāja slēdzis, sistēma atteiksies veikt sāknēšanu un parādīs kļūdas ekrānu.
 
       Ja šī politika nav iestatīta vai tai ir norādīta vērtība “False”, šajā ierīcē joprojām būs pieejams izstrādātāja režīms.</translation>
+<translation id="520403427390290017">Ciļņu dzīves ciklu funkcija atgūst centrālā procesora un atmiņas resursus, kas saistīti ar atvērtajām cilnēm, kuras ilgi nav lietotas. Vispirms tiek ierobežota ciļņu datu plūsma, pēc tam ciļņu darbība tiek apturēta un tās tiek atmestas.
+
+      Ja politikai ir iestatīta vērtība “False”, ciļņu dzīves cikli tiek atspējoti un ciļņu darbība netiks mainīta.
+
+      Ja politikai ir iestatīta vērtība “True” vai tā nav iestatīta, ciļņu dzīves cikli tiek iespējoti.</translation>
 <translation id="5208240613060747912">Ļauj iestatīt URL rakstu sarakstu, kurā ir norādītas vietnes, kurām nav atļauts attēlot paziņojumus.
 
           Ja šī politika nav iestatīta, visām vietnēm tiks izmantota globālā noklusējuma vērtība no politikas DefaultNotificationsSetting (ja tā ir iestatīta) vai pretējā gadījumā no lietotāja personīgās konfigurācijas.</translation>
@@ -1525,6 +1545,11 @@
 
           Ja šai politikai tiks iestatīta vērtība “False”, lietotāji nevarēs apraidīt saturu savā ierīcē. Ja šai politikai tiks iestatīta vērtība “True”, lietotājiem būs atļauts apraidīt saturu. Ja šī politika nebūs iestatīta, lietotājiem nebūs atļauts apraidīt saturu reģistrētajās Chrome OS ierīcēs, taču viņi varēs apraidīt saturu nereģistrētajās ierīcēs.</translation>
 <translation id="5330684698007383292">Atļauja produktam <ph name="PRODUCT_FRAME_NAME" /> apstrādāt tālāk norādītos satura veidus</translation>
+<translation id="5360146044009867539">Iespējo pārlūka <ph name="PRODUCT_NAME" /> funkciju Automātiskā aizpilde un ļauj lietotājiem automātiski aizpildīt profilu un adrešu informāciju tīmekļa veidlapās, izmantojot iepriekš saglabāto informāciju.
+
+      Ja šis iestatījums ir atspējots, funkcija Automātiskā aizpilde nekad nerādīs adrešu informācijas ieteikumus un neaizpildīs šo informāciju, kā arī nesaglabās papildu adrešu informāciju, ko lietotājs var norādīt, pārlūkojot tīmekli.
+
+      Ja šis iestatījums ir iespējots vai tā vērtība nav norādīta, lietotājs varēs kontrolēt adrešu informācijas automātisko aizpildi lietotāja saskarnē.</translation>
 <translation id="5365946944967967336">Rīkjoslā parāda pogu Sākums</translation>
 <translation id="5366745336748853475">Ļauj norādīt URL modeļu sarakstu ar vietnēm, kurām klienta sertifikāts tiek automātiski atlasīts pierakstīšanās ekrāna rāmī, kas mitina SAML plūsmu (ja vietne pieprasa sertifikātu). Piemēram, var konfigurēt, lai ierīces sertifikāts tiktu rādīts SAML identitātes nodrošinātājam.
 
@@ -2247,6 +2272,15 @@
 
           Ja šis iestatījums ir atspējots, šī funkcija nebūs pieejama.</translation>
 <translation id="7275334191706090484">Pārvaldītās grāmatzīmes</translation>
+<translation id="729492886167634859">Šī politika nosaka procentuālo daļu sarakstu, kas tiks izmantots to OV <ph name="PRODUCT_OS_NAME" /> ierīču procentuālās daļas definēšanai, kuras tiek atjauninātas katrā nedēļā, sākot no dienas, kad tiek konstatēts atjauninājums. Atjauninājums tiek konstatēts pēc tā publicēšanas, jo, iespējams, paiet laiks no atjauninājuma publicēšanas brīža līdz brīdim, kad ierīcē tiek pārbaudīta atjauninājumu pieejamība.
+
+      Saraksta n-tā vērtība tiks izmantota kā to ierīču procentuālā daļa, kurai jāpabeidz atjaunināšana uz nākamo versiju n-tajā nedēļā pēc atjauninājuma konstatēšanas. Piemēram, ja atjauninājums tiek konstatēts šodien, saraksta pirmā vērtība definē to OV ierīču procentuālo daļu, kuras jāatjaunina uz šo versiju nedēļas laikā kopš šodienas. Otrā vērtība definē to OV ierīču procentuālo daļu, kuras jāatjaunina uz šo versiju 2 nedēļu laikā kopš šodienas utt.
+
+      Ja politikai būs definēta vērtība, atjauninājumi ignorēs politiku “<ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" />” un tās vietā ievēros šo politiku.
+
+      Ja šis saraksts būs tukšs, pakāpeniska atjaunināšana netiks piemērota un atjaunināšana tiks veikta saskaņā ar citām ierīces politikām.
+
+      Šī politika netiek lietota kanālu pārslēgšanai.</translation>
 <translation id="7295019613773647480">Iespējot uzraudzītos lietotājus</translation>
 <translation id="7301543427086558500">Tiek norādīts to alternatīvo vietrāžu URL saraksts, kurus var izmantot meklēšanas vienumu izgūšanai no meklētājprogrammas. Vietrāžos URL ir jābūt ietvertai virknei <ph name="SEARCH_TERM_MARKER" />, kas tiek izmantota meklēšanas vienumu izgūšanai.
 
@@ -2711,6 +2745,12 @@
 
           Šablonu piemērus skatiet šeit: https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Atspējo pārlūkošanas vēstures saglabāšanu</translation>
+<translation id="8498293625012059298">Konfigurējiet paroles maiņas URL (tikai HTTP un HTTPS shēmas). Paroles aizsardzības pakalpojums novirzīs lietotājus uz šo URL, kurā varēs nomainīt paroli, kad pārlūkā būs parādīts brīdinājums.
+      Lai paroles maiņas lapā <ph name="PRODUCT_NAME" /> pareizi tvertu jaunās paroles ciparnospiedumu, lūdzu, gādājiet, lai jūsu paroles maiņas lapa atbilstu vadlīnijām, kas publicētas vietnē https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Ja šis iestatījums ir iespējots, paroles aizsardzības pakalpojums novirzīs lietotājus uz šo URL, kurā varēs nomainīt paroli, kad pārlūkā būs parādīts brīdinājums.
+      Ja šis iestatījums ir atspējots vai nav iestatīts, paroles aizsardzības pakalpojums novirzīs lietotājus uz vietni https://myaccounts.google.com, kurā varēs nomainīt paroli.
+      Šī politika nav pieejama Windows instancēs, kas nav pievienotas <ph name="MS_AD_NAME" /> domēnam.</translation>
 <translation id="8499172469244085141">Noklusējuma iestatījumi (lietotāji var ignorēt)</translation>
 <translation id="8507835864888987300">Iestata automātisko atjauninājumu mērķa versiju.
 
@@ -2763,6 +2803,14 @@
       Ja politikas vērtība tiek mainīta uz “False”, tā tiek piemērota jaunu virtuālo mašīnu palaišanai, bet neizslēdz virtuālās mašīnas, kas jau darbojas.
       Ja pārvaldītajā ierīcē politikas vērtība nav iestatīta, ierīcē nav atļauta virtuālo mašīnu palaišana.
       Nepārvaldītās ierīcēs ir atļauta virtuālo mašīnu palaišana.</translation>
+<translation id="8669669491594628013">Ļauj jums kontrolēt paroles aizsardzības brīdinājuma aktivizēšanu. Paroles aizsardzība brīdina lietotājus, ja viņi atkārtoti izmanto aizsargāto paroli aizdomīgās vietnēs.
+
+      Varat izmantot politikas “PasswordProtectionLoginURLs” un “PasswordProtectionChangePasswordURL”, lai konfigurētu, kuru paroli aizsargāt.
+
+      Ja politikai tiks iestatīta vērtība “PasswordProtectionWarningOff'”, paroles aizsardzības brīdinājums netiks rādīts.
+      Ja politikai tiks iestatīta vērtība “PasswordProtectionWarningOnPasswordReuse”, paroles aizsardzības brīdinājums tiks rādīts, kad lietotājs atkārtoti izmantos paroli vietnē, kas nav iekļauta baltajā sarakstā.
+      Ja politikai tiks iestatīta vērtība “PasswordProtectionWarningOnPhishingReuse”, paroles aizsardzības brīdinājums tiks rādīts, kad lietotājs atkārtoti izmantos aizsargāto paroli pikšķerēšanas vietnē.
+      Ja politika netiks iestatīta, paroles aizsardzības pakalpojums aizsargās tikai Google paroles, taču lietotājs varēs mainīt šo iestatījumu.</translation>
 <translation id="8672321184841719703">Automātiskā atjauninājuma vēlamā versija</translation>
 <translation id="867410340948518937">U2F (universālā divfaktoru autentificēšana)</translation>
 <translation id="8685024486845674965">Paroles aizsardzības brīdinājums ir aktivizēts, atkārtoti izmantojot paroli</translation>
diff --git a/components/policy/resources/policy_templates_ml.xtb b/components/policy/resources/policy_templates_ml.xtb
index 9d9d4ea..c097504 100644
--- a/components/policy/resources/policy_templates_ml.xtb
+++ b/components/policy/resources/policy_templates_ml.xtb
@@ -277,6 +277,13 @@
       അല്ലെങ്കിൽ, ബഗ് ഉള്ള സെർവറുമായി അനുയോജ്യമായിരിക്കേണ്ടതാണെങ്കിൽ, ഈ നയത്തെ "tls1.1" എന്ന് സജ്ജമാക്കാം. ഇതൊരു താൽക്കാലിക പരിഹാരം മാത്രമാണ്, അതിനാൽ സെർവർ പ്രശ്‌നം ഉടൻ തന്നെ പരിഹരിക്കേണ്ടതാണ്.</translation>
 <translation id="1864269674877167562">ഈ നയം ശൂന്യമായ സ്‌ട്രിംഗായി സജ്ജമാക്കുകയോ കോൺഫിഗർചെയ്യാതിരിക്കുകയോ ആണെങ്കിൽ, ഉപയോക്തൃ സൈൻ ഇൻ ഫ്ലോയുടെ സമയത്ത് <ph name="PRODUCT_OS_NAME" /> സ്വയംപൂർത്തിയാക്കൽ ഓപ്‌ഷൻ കാണിക്കില്ല.
       ഈ നയം, ഡൊമെയ്‌ൻ പേരിനെ പ്രതിനിധീകരിക്കുന്ന സ്‌ട്രിംഗിലേക്കാണ് സജ്ജമാക്കിയിരിക്കുന്നതെങ്കിൽ, ഡൊമെയ്‌ൻ പേര് വിപുലീകരണം ഇല്ലാതെ അവരുടെ ഉപയോക്തൃ നാമം മാത്രം ടൈപ്പുചെയ്യുന്നതിന് ആ ഉപയോക്താവിനെ അനുവദിക്കുന്ന ഒരു സ്വയംപൂർത്തിയാക്കൽ ഓപ്‌ഷൻ, ഉപയോക്തൃ സൈൻ ഇൻ സമയത്ത് <ph name="PRODUCT_OS_NAME" /> കാണിക്കും.  ഉപയോക്താവിന് ഈ ഡൊമെയ്‌ൻ പേര് വിപുലീകരണം തിരുത്തിയെഴുതാനാകും.</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" />-ൽ നെറ്റ്‌വർക്ക് പ്രവചനം പ്രവർത്തനക്ഷമമാക്കുകയും ഈ ക്രമീകരണം മാറ്റുന്നതിൽ നിന്ന് ഉപയോക്താക്കളെ തടയുകയും ചെയ്യുന്നു.
+
+      DNS പ്രീഫെച്ചിംഗ്, TCP, SSL എന്നിവയുടെ പ്രീകണക്ഷൻ, വെബ് പേജുകളുടെ പ്രീറെൻഡറിംഗ് എന്നിവയെ ഇത് നിയന്ത്രിക്കുന്നു.
+
+      നിങ്ങൾ ഈ നയം സജ്ജീകരിച്ചാൽ, <ph name="PRODUCT_NAME" />-ൽ ഈ ക്രമീകരണം മാറ്റാനോ അസാധുവാക്കാനോ ഉപയോക്താക്കൾക്കാവില്ല.
+
+      ഈ നയം സജ്ജീകരിക്കാതെ വിട്ടാൽ, നെറ്റ്‌വർക്ക് പ്രവചനം പ്രവർത്തനക്ഷമമാവും, എന്നാൽ ഇത് മാറ്റാൻ ഉപയോക്താവിന് കഴിയുന്നതാണ്.</translation>
 <translation id="1865417998205858223">പ്രധാന അനുമതികൾ</translation>
 <translation id="186719019195685253">AC പവറിൽ പ്രവർത്തിക്കുന്നതിനിടയിൽ നിഷ്‌ക്രിയ കാലതാമസം എത്തിച്ചേരുമ്പോൾ സ്വീകരിക്കേണ്ട നടപടി</translation>
 <translation id="187819629719252111">ഫയല്‍ തെരഞ്ഞെടുപ്പ് ഡയലോഗുകള്‍ പ്രദര്‍ശിപ്പിക്കാന്‍ <ph name="PRODUCT_NAME" />-നെ അനുവദിക്കുക വഴി മെഷീനിലെ പ്രാദേശിക ഫയലുകളിലേക്ക് പ്രവേശനം അനുവദിക്കുന്നു.
@@ -793,6 +800,7 @@
       ഈ നയം സജ്ജീകരിച്ചിട്ടില്ലെങ്കിൽ, <ph name="PRINTERS_ALLOW_ALL" /> അനുമാനിക്കപ്പെടും.
       </translation>
 <translation id="2908277604670530363">പ്രോക്സി സെർവറിനായി ഒരേ സമയമുള്ള പരമാവധി എണ്ണം കണക്ഷനുകൾ</translation>
+<translation id="2951386431828317490">പ്രൊഫൈലുകൾക്കായി സ്വമേധയാ പൂരിപ്പിക്കൽ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="2956777931324644324"><ph name="PRODUCT_NAME" /> പതിപ്പ് 36 മുതൽ ഈ നയം റദ്ദാക്കി.
 
       TLS ഡൊമെയ്‌ൻ-ബൗണ്ട് സർട്ടിഫിക്കറ്റ് വിപുലീകരണം പ്രവർത്തനക്ഷമമാക്കണോയെന്ന് വ്യക്തമാക്കുന്നു.
@@ -802,6 +810,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> പ്രാമാണീകരണത്തിനുള്ള അക്കൗണ്ട് തരം</translation>
 <translation id="2959469725686993410">സമയമേഖല സജ്ജമാക്കുമ്പോൾ, എല്ലായ്‌പ്പോഴും സെർവറിലേക്ക് വൈഫൈ ആക്‌സസ് പോയിന്റുകൾ അയയ്‌ക്കുക</translation>
 <translation id="2959898425599642200">പ്രോക്സിയെ മറികടക്കുന്നതിനുള്ള നിയമങ്ങള്‍</translation>
+<translation id="2960128438010718932">പുതിയ അപ്‌ഡേറ്റ് പ്രയോഗിക്കുന്നതിനുള്ള സ്‌റ്റേജിംഗ് ഷെഡ്യൂൾ</translation>
 <translation id="2960691910306063964">റിമോട്ട് ആക്‌സസ്സ് ഹോസ്‌റ്റുകൾക്കായി PIN-ഇതര പ്രമാണീകരണം പ്രവർത്തനക്ഷമമാക്കുക അല്ലെങ്കിൽ പ്രവർത്തനരഹിതമാക്കുക</translation>
 <translation id="2976002782221275500">ബാറ്ററി പവറിൽ പ്രവർത്തിക്കുമ്പോൾ സ്‌ക്രീൻ തെളിച്ചം കുറയുന്നതിന് മുമ്പ് ഉപയോക്തൃ ഇൻപുട്ട് ഇല്ലാത്ത സമയദൈർഘ്യം വ്യക്തമാക്കുന്നു.
 
@@ -846,6 +855,7 @@
       ഈ നയം സജ്ജമാക്കിയിട്ടുണ്ടോ അല്ലെങ്കിൽ എങ്ങനെ സജ്ജമാക്കി എന്നീ കാര്യങ്ങൾ ആശ്രയിക്കാതെ, ഉപയോക്താക്കൾക്ക് WPAD ഒപ്റ്റിമൈസേഷൻ ക്രമീകരണം മാറ്റാനാകില്ല.</translation>
 <translation id="3072045631333522102">സ്‌ക്രീൻ സേവർ റീട്ടെയ്ൽ മോഡിലെ സൈൻ-ഇൻ സ്‌ക്രീനിൽ ഉപയോഗിക്കും</translation>
 <translation id="3072847235228302527">ഒരു ഉപകരണ-പ്രാദേശിക അക്കൗണ്ടിനായി സേവന നിബന്ധനകൾ സജ്ജമാക്കുക</translation>
+<translation id="3077183141551274418">ടാബ് ലൈഫ്‌സൈക്കിളുകൾ പ്രവർത്തനക്ഷമമാക്കുന്നു അല്ലെങ്കിൽ പ്രവർത്തനരഹിതമാക്കുന്നു</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> എന്നതിൽ കാസ്‌റ്റ് റിസീവർ കോണ്‍ഫിഗര്‍ ചെയ്യുക.</translation>
 <translation id="3088796212846734853">ചിത്രങ്ങൾ പ്രദർശിപ്പിക്കാൻ അനുവദിച്ചിട്ടുള്ള സൈറ്റുകൾ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്‌റ്റ് സജ്ജീകരിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
 
@@ -1514,6 +1524,11 @@
       ഈ നിർദ്ദേശങ്ങൾ വിദൂരത്തുള്ള Google സെർവറുകളിൽനിന്ന് ലഭ്യമാക്കിയതാണ്.
 
       ഈ ക്രമീകരണം തെറ്റ് എന്നതിലേക്ക് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, നിർദേശങ്ങൾ ലഭ്യമാക്കുകയോ പ്രദർശിപ്പിക്കുകയോ ഇല്ല.</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" />-ന്റെ സ്വമേധയാ പൂരിപ്പിക്കൽ ഫീച്ചർ പ്രവർത്തനക്ഷമമാക്കുകയും മുമ്പ് സംഭരിച്ച വിവരം ഉപയോഗിച്ച് വെബ് ഫോമുകളിൽ ക്രെഡിറ്റ് കാർഡ് വിവരം സ്വമേധയാ പൂർത്തിയാക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുകയും ചെയ്യുന്നു.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയാൽ, സ്വമേധയാ പൂരിപ്പിക്കൽ, ഒരിക്കലും ക്രെഡിറ്റ് കാർഡ് വിവരം നിർദേശിക്കുകയോ പൂരിപ്പിക്കുകയോ ഇല്ല, വെബ് ബ്രൗസ് ചെയ്യുമ്പോൾ ഉപയോക്താവ് സമർപ്പിച്ചേക്കാവുന്ന അധിക ക്രെഡിറ്റ് കാർഡ് വിവരം സംരക്ഷിക്കുകയുമില്ല.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കിയാലോ അതിന് മൂല്യം ഇല്ലെങ്കിലോ, UI-യിൽ ക്രെഡിറ്റ് കാർഡുകൾക്കായുള്ള സ്വമേധയാ പൂരിപ്പിക്കൽ നിയന്ത്രിക്കാൻ ഉപയോക്താവിനാകും.</translation>
 <translation id="4791031774429044540">വലിയ കഴ്‌സർ ഉപയോഗസഹായി സവിശേഷത പ്രവർത്തനക്ഷമമാക്കുക.
 
           ഈ നയം true എന്നതായി സജ്ജമാക്കുകയാണെങ്കിൽ, വലിയ കഴ്‌സർ എല്ലായ്‌പ്പോഴും പ്രവർത്തനക്ഷമമായിരിക്കും.
@@ -1659,6 +1674,11 @@
      ഈ നയം True ആയി സജ്ജമാക്കുകയാണെങ്കിൽ, <ph name="PRODUCT_OS_NAME" /> എന്നത് ഉപകരണത്തെ ഡെവലപ്പർ മോഡിലേക്ക് ബൂട്ടുചെയ്യുന്നതിൽ നിന്ന് തടയും. ഡെവലപ്പർ സ്വിച്ച് ഓണാക്കുമ്പോൾ സിസ്‌റ്റം ബൂട്ട് ചെയ്യാൻ നിരസിക്കുകയും ഒരു പിശക് സ്‌ക്രീൻ കാണിക്കുകയും ചെയ്യും. 
 
      ഈ നയം സജ്ജമാക്കിയത് മാറ്റുകയാണെങ്കിലോ False ആയി സജ്ജമാക്കുകയാണെങ്കിലോ, ഡെവലപ്പർ മോഡ് ഉപകരണത്തിനായി തുടർന്നും ലഭിക്കും.</translation>
+<translation id="520403427390290017">CPU, ഏറെക്കാലമായി ഉപയോഗിക്കാതിരുന്ന റൺ ചെയ്യുന്ന ടാബുകളുമായി ബന്ധപ്പെട്ട മെമ്മറി എന്നിവ ആദ്യം ത്രോട്ടിൽ ചെയ്‌തും തുടർന്ന് ഫ്രീസ് ചെയ്‌തും അവസാനമായി റദ്ദാക്കിയും 'ടാബ് ലൈഫ്‌സൈക്കിളുകൾ' ഫീച്ചർ വീണ്ടെടുക്കുന്നു.
+
+      ഈ നയം തെറ്റ് ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, 'ടാബ് ലൈഫ്‌സൈക്കിളുകൾ' പ്രവർത്തനരഹിതമായിരിക്കും, എല്ലാ ടാബുകളും സാധാരണ രീതിയിൽ റൺ ചെയ്യും.
+
+      ഈ നയം ശരി ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിലോ വ്യക്തമാക്കാതെ വിട്ടാലോ 'ടാബ് ലൈഫ്‌സൈക്കിളുകൾ' പ്രവർത്തനക്ഷമമാവും.</translation>
 <translation id="5208240613060747912">അറിയിപ്പുകൾ ദൃശ്യമാക്കാൻ അനുവദിക്കാത്ത സൈറ്റുകളെ വ്യക്തമാക്കുന്ന url പാറ്റേണുകളുടെ ഒരു ലിസ്റ്റ് സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
 
           ഈ നയം ആഗോള സ്ഥിരസ്ഥിതി മൂല്യത്തെ സജ്ജീകരിക്കാത്ത നിലയിലാണെങ്കിൽ, അത് സജ്ജീകരിച്ച 'DefaultNotificationsSetting' നയത്തിലെയോ ഉപയോക്താവിന്റെ സ്വകാര്യ കോൺഫിഗറേഷനിൽ നിന്നുള്ളതോ ആയ എല്ലാ സൈറ്റുകളിലും ഉപയോഗിക്കുന്നതാണ്.</translation>
@@ -1718,6 +1738,11 @@
 
           ഈ നയം 'തെറ്റ്' എന്ന് സജ്ജീകരിച്ചാൽ, ഉപയോക്താക്കൾക്ക് അവരുടെ ഉപകരണത്തിലേക്ക് ഉള്ളടക്കം കാസ്‌റ്റ് ചെയ്യാനാകില്ല. ഈ നയം 'ശരി' എന്ന് സജ്ജീകരിച്ചാൽ ഉപയോക്താക്കൾക്ക് ഉള്ളടക്കം കാസ്‌റ്റ് ചെയ്യാൻ അനുവാദമുണ്ടാകും. ഈ നയം സജ്ജീകരിച്ചില്ലെങ്കിൽ എൻറോൾ ചെയ്‌ത Chrome OS ഉപകരണങ്ങളിലേക്ക് ഉപയോക്താക്കൾക്ക് ഉള്ളടക്കം കാസ്‌റ്റ് ചെയ്യാനാകില്ല, പക്ഷേ എൻറോൾ ചെയ്യാത്ത ഉപകരണങ്ങളിലേക്ക് ‌കാസ്‌റ്റ് ചെയ്യാനാകും.</translation>
 <translation id="5330684698007383292">ഇനിപ്പറയുന്ന ഉള്ളടക്ക തരങ്ങള്‍ കൈകാര്യം ചെയ്യാന്‍ <ph name="PRODUCT_FRAME_NAME" /> എന്നതിനെ അനുവദിക്കുക</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" />-ന്റെ സ്വമേധയാ പൂരിപ്പിക്കൽ ഫീച്ചർ പ്രവർത്തനക്ഷമമാക്കുകയും മുമ്പ് സംഭരിച്ച വിവരം ഉപയോഗിച്ച് വെബ് ഫോമുകളിൽ പ്രൊഫൈൽ, വിലാസ വിവരം എന്നിവ സ്വമേധയാ പൂർത്തിയാക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കുകയും ചെയ്യുന്നു.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയാൽ, സ്വമേധയാ പൂരിപ്പിക്കൽ ഒരിക്കലും വിലാസ വിവരം നിർദേശിക്കുകയോ പൂരിപ്പിക്കുകയോ ഇല്ല, വെബ് ബ്രൗസ് ചെയ്യുമ്പോൾ ഉപയോക്താവ് സമർപ്പിച്ചേക്കാവുന്ന അധിക വിലാസ വിവരം സംരക്ഷിക്കുകയുമില്ല.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കിയാലോ അതിന് മൂല്യം ഇല്ലെങ്കിലോ, UI-യിൽ വിലാസത്തിനായി സ്വമേധയാ പൂരിപ്പിക്കൽ നിയന്ത്രിക്കാൻ ഉപയോക്താവിന് കഴിയും.</translation>
 <translation id="5365946944967967336">ഉപകരണബാറില്‍ ഹോം ബട്ടണ്‍ കാണിക്കുക</translation>
 <translation id="5366745336748853475">സൈറ്റ് ഒരു സർട്ടിഫിക്കറ്റ് അഭ്യർത്ഥിക്കുകയാണെങ്കിൽ, SAML ഫ്ലോ ഹോസ്റ്റ് ചെയ്യുന്ന ഫ്രെയിമിലെ സൈൻ ഇൻ സ്ക്രീനിൽ ഒരു ക്ലയന്‍റ് സർട്ടിഫിക്കറ്റ് സ്വമേധയാ തിരഞ്ഞെടുക്കുന്നതിന് സൈറ്റുകൾ വ്യക്തമാക്കാൻ URL പാറ്റേണുകളുടെ ലിസ്റ്റ് നിർദ്ദേശിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. SAML IdP-യ്ക്ക് സമർപ്പിക്കേണ്ട, ഉപകരണത്തിൽ ഉടനീളം പ്രാബല്യമുള്ള സർട്ടിഫിക്കറ്റ് കോൺഫിഗർ ചെയ്യുക എന്നതാണ് ഒരു ഉദാഹരണ ഉപയോഗം.
 
@@ -2516,6 +2541,15 @@
       നിങ്ങൾ ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കുകയാണെങ്കിൽ, Smart Lock ഉപയോഗിക്കാൻ ഉപയോക്താക്കളെ അനുവദിക്കില്ല. 
 
       ഈ നയം സജ്ജമാക്കാതെ വിടുകയാണെങ്കിൽ, എന്റർപ്രൈസ്-നിയന്ത്രിത ഉപയോക്താക്കളെ സ്ഥിരമായവ ഉപയോഗിക്കാൻ അനുവദിക്കാതിരിക്കുകയും മാനേജുചെയ്യപ്പെടാത്ത ഉപയോക്താക്കളെ അനുവദിക്കുകയും ചെയ്യും.</translation>
+<translation id="729492886167634859">അപ്‌ഡേറ്റ് ആദ്യം കണ്ടെത്തിയ ദിവസം മുതലുള്ള ഓരോ ആഴ്‌ചയിലും അപ്‌ഡേറ്റ് ചെയ്യാനുള്ള, OU-വിലെ <ph name="PRODUCT_OS_NAME" /> ഉപകരണങ്ങളുടെ ഒരു ഭാഗത്തെ നിർവചിക്കുന്ന ശതമാനങ്ങളുടെ ഒരു ലിസ്‌റ്റിനെ ഈ നയം നിർവചിക്കുന്നു. അപ്‌ഡേറ്റ് പ്രസിദ്ധീകരിച്ച് അൽപ്പസമയത്തിന് ശേഷമാവും ഉപകരണം അപ്‌ഡേറ്റുകൾക്കായി പരിശോധിക്കുക എന്നതിനാൽ, അപ്‌ഡേറ്റ് കണ്ടെത്തിയ സമയം അത് പ്രസിദ്ധീകരിച്ചതിന് ശേഷമുള്ളതായിരിക്കും.
+
+      അപ്‌ഡേറ്റ് കണ്ടെത്തിയതിന് ശേഷമുള്ള n സ്ഥാനത്തുള്ള ആഴ്‌ചയിൽ അടുത്ത പതിപ്പിലേക്കുള്ള അപ്‌ഡേറ്റ് പൂർത്തിയാക്കേണ്ട ഉപകരണങ്ങളുടെ ശതമാനമായി ഈ ലിസ്‌റ്റിലെ n സ്ഥാനത്തുള്ള മൂല്യം ഉപയോഗിക്കും. ഉദാഹരണത്തിന്, ഇന്ന് ഒരു അപ്‌ഡേറ്റ് കണ്ടെത്തിയാൽ, ഒരാഴ്‌ച്ചയ്‌ക്കകം ആ പതിപ്പിലേക്ക് അപ്‌ഡേറ്റ് ചെയ്യേണ്ട, OU-വിലെ ഉപകരണങ്ങളുടെ ശതമാനത്തെ ലിസ്‌റ്റിലെ ആദ്യ മൂല്യം നിർവചിക്കുന്നു. 2 ആഴ്‌ചയ്‌ക്കകം ആ പതിപ്പിലേക്ക് അപ്‌ഡേറ്റ് ചെയ്യേണ്ട, OU-ലെ ഉപകരണങ്ങളുടെ ശതമാനത്തെ രണ്ടാമത്തെ മൂല്യം നിർവചിക്കുന്നു, ഇതേ രീതി തുടരുകയും ചെയ്യുന്നു.
+
+      ഈ നയത്തിനായി ഒരു മൂല്യം നിർവചിച്ചിട്ടുണ്ടെങ്കിൽ, അപ്‌ഡേറ്റുകൾ <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> എന്ന നയം അവഗണിക്കുകയും പകരം ഈ നയം പിന്തുടരുകയും ചെയ്യും.
+
+      ഈ ലിസ്‌റ്റ് ശൂന്യമാണെങ്കിൽ, സ്‌റ്റേജിംഗ് ഉണ്ടാവില്ല, മറ്റ് ഉപകരണ നയങ്ങൾ അനുസരിച്ച് അപ്‌ഡേറ്റുകൾ ബാധകമാക്കുകയും ചെയ്യും.
+
+      ചാനൽ സ്വിച്ചുകൾക്ക് ഈ നയം ബാധകമാവില്ല.</translation>
 <translation id="7295019613773647480">സൂപ്പർവൈസുചെയ്‌ത ഉപയോക്താക്കളെ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="7301543427086558500">തിരയൽ എഞ്ചിനിൽ നിന്നുമുള്ള തിരയൽ പദങ്ങൾ എക്‌‌സ്‌ട്രാക്റ്റുചെയ്യുന്നതിന് ഉപയോഗിക്കുന്ന ഇതര URL-കളുടെ ലിസ്റ്റ് നിർദ്ദേശിക്കുന്നു. തിരയൽ പദങ്ങൾ എക്‌സ്‌ട്രാക്റ്റുചെയ്യുന്നതിന് ഉപയോഗിക്കുന്ന സ്‌ട്രിംഗ് <ph name="SEARCH_TERM_MARKER" /> URL-കളിൽ അടങ്ങിയിരിക്കണം.
 
@@ -3036,6 +3070,12 @@
 
           ഉദാഹരണ പാറ്റേണുകൾക്കായി, https://www.chromium.org/developers/how-tos/chrome-frame-getting-started കാണുക.</translation>
 <translation id="8493645415242333585">ബ്രൌസര്‍ ചരിത്രം സം‍രക്ഷിക്കുന്നത് അപ്രാപ്തമാക്കുക</translation>
+<translation id="8498293625012059298">പാസ്‌വേഡ് മാറ്റാനുള്ള URL കോൺഫിഗർ ചെയ്യുക (HTTP, HTTPS എന്നീ സ്‌കീമുകൾ മാത്രം). ബ്രൗസറിൽ ഒരു മുന്നറിയിപ്പ് കണ്ടശേഷം, അവരുടെ പാസ്‌വേഡ് മാറ്റാനായി പാസ്‌വേഡ് പരിരക്ഷാ സേവനം ഉപയോക്താക്കളെ ഈ URL-ലേക്ക് അയയ്‌ക്കും.
+      ഈ പാസ്‌വേഡ് മാറ്റൽ പേജിലെ പുതിയ പാസ്‌വേഡ് ഫിംഗർപ്രിന്റ് <ph name="PRODUCT_NAME" /> ശരിയായി എടുക്കുന്നതിന്, https://www.chromium.org/developers/design-documents/create-amazing-password-forms എന്നതിലുള്ള മാർഗനിർദേശങ്ങൾ നിങ്ങളുടെ പാസ്‌വേഡ് മാറ്റൽ പേജ് പിന്തുടരുന്നുണ്ട് എന്ന് ഉറപ്പാക്കുക.
+
+      ഈ ക്രമീകരണം പ്രവർത്തനക്ഷമമാക്കിയാൽ, ബ്രൗസറിൽ ഒരു മുന്നറിയിപ്പ് കണ്ടശേഷം പാസ്‌വേഡ് മാറ്റാനായി പാസ്‌വേഡ് പരിരക്ഷാ സേവനം ഉപയോക്താക്കളെ ഈ URL-ലേക്ക് അയയ്ക്കും.
+      ഈ ക്രമീകരണം പ്രവർത്തനരഹിതമാക്കിയാലോ സജ്ജീകരിച്ചിട്ടില്ലെങ്കിലോ, പാസ്‌വേഡ് മാറ്റാനായി https://myaccounts.google.com എന്നതിലേക്ക് പാസ്‌വേഡ് പരിരക്ഷാ സേവനം ഉപയോക്താക്കളെ അയയ്ക്കും.
+      ഒരു <ph name="MS_AD_NAME" /> ഡൊമെയ്‌നിലേക്ക് ചേർന്നിട്ടില്ലാത്ത Windows ഇൻസ്‌റ്റൻസുകളിൽ ഈ നയം ലഭ്യമല്ല.</translation>
 <translation id="8499172469244085141">സ്ഥിരസ്ഥിതി ക്രമീകരണങ്ങൾ (ഉപയോക്താക്കൾക്ക് അസാധുവാക്കാൻ കഴിയും)</translation>
 <translation id="8507835864888987300">സ്വമേധയായുള്ള അപ്‌ഡേറ്റുകൾക്കായി ടാർഗറ്റ് പതിപ്പ് സജ്ജീകരിക്കുന്നു. 
 
@@ -3088,6 +3128,14 @@
       നയം 'ട്രൂ' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കും. നയം 'ഫാൾസ്' എന്ന് സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തെ അനുവദിക്കില്ല. നയം 'ഫാൾസ്' ആയി മാറ്റുമ്പോൾ, പുതിയ വെർച്വൽ മെഷീനുകൾ ആരംഭിക്കുന്നതുമായി ബന്ധപ്പെട്ടായിരിക്കും ഇത് ബാധകമാവുക. മുമ്പേ റൺ ചെയ്യുന്ന വെർച്വൽ മെഷീനുകളെ ഇത് ഷട്ട് ഡൗൺ ചെയ്യില്ല.
       ഒരു നിയന്ത്രിക്കപ്പെടുന്ന ഉപകരണത്തിൽ ഈ നയം സജ്ജീകരിക്കാത്തപ്പോൾ, വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ ഉപകരണത്തിന് അനുവാദമില്ല.
       നിയന്ത്രിക്കപ്പെടാത്ത ഉപകരണങ്ങളെ വെർച്വൽ മെഷീനുകൾ റൺ ചെയ്യാൻ അനുവദിക്കും.</translation>
+<translation id="8669669491594628013">പാസ്‍വേഡ് പരിരക്ഷാ മുന്നറിയിപ്പിന്റെ ട്രിഗ്ഗർ ചെയ്യൽ നിയന്ത്രിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. സംശയകരമാകാൻ സാധ്യതയുള്ള സൈറ്റുകളിൽ ഉപയോക്താക്കൾ പരിരക്ഷിത പാസ്‍വേഡ് പുനരുപയോഗിക്കുമ്പോൾ, പാസ്‍വേഡ് പരിരക്ഷ അവർക്ക് മുന്നറിയിപ്പ് നൽകുന്നു.
+
+      ഏത് പാസ്‌വേഡ് ആണ് പരിരക്ഷിക്കേണ്ടത് എന്നത് കോൺഫിഗർ ചെയ്യാൻ 'PasswordProtectionLoginURL-കൾ,' 'PasswordProtectionChangePasswordURL' എന്നിവ നിങ്ങൾക്ക് ഉപയോഗിക്കാം.
+
+      ഈ നയം 'PasswordProtectionWarningOff' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഒരു പാസ്‍വേഡ് പരിരക്ഷാ മുന്നറിയിപ്പും കാണിക്കില്ല.
+      ഈ നയം 'PasswordProtectionWarningOnPasswordReuse' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താക്കൾ ഏതെങ്കിലും വൈറ്റ്‌ലിസ്‌റ്റ് ചെയ്യാത്ത സൈറ്റുകളിൽ പരിരക്ഷിത പാസ്‍വേഡ് പുനരുപയോഗിക്കുമ്പോൾ പാസ്‍വേഡ് പരിരക്ഷാ മുന്നറിയിപ്പ് കാണിക്കും. 
+      ഈ നയം 'PasswordProtectionWarningOnPhishingReuse' ആയി സജ്ജീകരിച്ചിട്ടുണ്ടെങ്കിൽ, ഉപയോക്താക്കൾ ഫിഷിംഗ് സൈറ്റുകളിൽ പരിരക്ഷിത പാസ്‍വേഡുകൾ പുനരുപയോഗിക്കുമ്പോൾ പാസ്‍വേഡ് പരിരക്ഷാ മുന്നറിയിപ്പ് കാണിക്കും.
+      ഈ നയം സജ്ജീകരിക്കാതെ വിടുകയാണെങ്കിൽ, പാസ്‌വേഡ് പരിരക്ഷാ സേവനം Google പാസ്‌വേഡുകൾ മാത്രം പരിരക്ഷിക്കും, എന്നാൽ ഉപയോക്താവിന് ഈ ക്രമീകരണം മാറ്റാൻ കഴിയും.</translation>
 <translation id="8672321184841719703">ടാർഗെറ്റ് യാന്ത്രിക അപ്‌ഡേറ്റ് പതിപ്പ്</translation>
 <translation id="867410340948518937">U2F (യൂണിവേഴ്‌സൽ രണ്ടാം ഫാക്‌ടർ)</translation>
 <translation id="8685024486845674965">പാസ്‌വേഡ് പുനരുപയോഗിച്ച്, പാസ്‍വേഡ് പരിരക്ഷ മുന്നറിയിപ്പ് ട്രിഗ്ഗര്‍ ചെയ്‌തു</translation>
diff --git a/components/policy/resources/policy_templates_mr.xtb b/components/policy/resources/policy_templates_mr.xtb
index 70b1eda..52d0a03a 100644
--- a/components/policy/resources/policy_templates_mr.xtb
+++ b/components/policy/resources/policy_templates_mr.xtb
@@ -268,6 +268,13 @@
       अन्यथा, दोष असलेल्या सर्व्हरसह सुसंगतता राखून ठेवल्यास, हे धोरण "tls1.1" वर सेट केले जाऊ शकते. ही तात्पुरती उपाययोजना आहे आणि सर्व्हरचे जलदगतीने निराकरण केले जावे.</translation>
 <translation id="1864269674877167562">हे धोरण रिक्त स्ट्रिंगवर सेट केले असल्‍यास किंवा कॉन्फिगर केले नसल्‍यास, वापरकर्ता साइन-इन प्रवाह दरम्यान <ph name="PRODUCT_OS_NAME" /> स्वयंपूर्ण पर्याय दर्शविणार नाही.
       डोमेन नावाचे प्रतिनिधित्व करणार्‍या स्ट्रिंगवर हे धोरण सेट केले असल्‍यास, <ph name="PRODUCT_OS_NAME" /> वापरकर्त्यास केवळ त्याचे वापरकर्तानाव डोमेन नाव विस्ताराशिवाय टाइप करण्‍याची अनुमती देऊन वापरकर्ता साइन इन दरम्यान स्वयंपूर्ण पर्याय दर्शवेल. वापरकर्ता हा डोमेन नाव विस्तार अधिलिखित करण्‍यात सक्षम असेल.</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" /> मधील नेटवर्क पूर्वानुमान सुरू करते आणि हे सेटिंग बदलण्‍यापासून वापरकर्त्यांना प्रतिबंधित करते.
+
+      हे  DNS पूर्व-आनयन, वेब पेजचे TCP आणि SSL पूर्वकनेक्शन आणि पूर्वप्रस्तुतीकरण नियंत्रित करते.
+
+      तुम्ही हे धोरण सेट केल्यास, वापरकर्ते <ph name="PRODUCT_NAME" /> मध्ये हे सेटिंग बदलू किंवा अधिशून्य करू शकणार नाहीत.
+
+      हे धोरण सेट न करता सोडून दिल्यास, नेटवर्क पूर्वानुमान सुरू केले जाईल पण वापरकर्ता ते बदलू शकेल.</translation>
 <translation id="1865417998205858223">की परवानग्या</translation>
 <translation id="186719019195685253">AC ऊर्जेवर चालताना निष्क्रिय विलंब झाल्यानंतर करण्याची कारवाई</translation>
 <translation id="187819629719252111"><ph name="PRODUCT_NAME" /> ला फाइल निवड संवाद प्रदर्शित करण्याची परवानगी देऊन मशीनवरील स्थानिक फायलींना प्रवेश करण्याची परवानगी देते. आपण हे सेटिंग सक्षम केल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात. आपण हे सेटिंग अक्षम केल्यास, जेव्हा वापरकर्ता फाइल निवड संवाद ( जसे बुकमार्क आयात करणे, फायली अपलोड करणे, दुवे सेव्ह करणे इ.) उत्पन्न करण्याची क्रिया करेल तसा त्याऐवजी संदेश प्रदर्शित केला जातो आणि वापरकर्ता फाइल निवड संवादावर रद्द करा क्लिक केले असल्याचे मानतो. हे सेटिंग सेट नसल्यास, वापरकर्ते फाइल निवड संवाद सामान्यपणे उघडू शकतात.</translation>
@@ -772,6 +779,7 @@
       हे धोरण सेट केले नसल्यास, <ph name="PRINTERS_ALLOW_ALL" /> गृहित धरले जाते.
       </translation>
 <translation id="2908277604670530363">प्रॉक्सी सर्व्हरच्या सहकालिक कनेक्शनची अधिकतम संख्‍या</translation>
+<translation id="2951386431828317490">प्रोफाइलसाठी ऑटोफिल सुरू करा</translation>
 <translation id="2956777931324644324">हे धोरण <ph name="PRODUCT_NAME" /> आवृत्ती 36 प्रमाणे निवृत्त केले गेले आहे.
 
       TLS डोमेन-बद्ध प्रमाणपत्रे विस्तार सक्षम केला जावा किंवा नाही हे निर्दिष्ट करते.
@@ -781,6 +789,7 @@
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> प्रमाणीकरणासाठी खाते प्रकार</translation>
 <translation id="2959469725686993410">टाइमझोनचे निराकरण करताना नेहम‍ी सर्व्हरकडे वाय-फाय अॅक्सेस-पॉइंट पाठवा.</translation>
 <translation id="2959898425599642200">प्रॉक्सी स्थलांतर नियम</translation>
+<translation id="2960128438010718932">नवीन अपडेट लागू करण्यासाठी स्टेजिंग शेड्युल</translation>
 <translation id="2960691910306063964">दूरस्थ प्रवेश होस्टसाठी पिन नसलेले प्रमाणीकरण अक्षम किंवा सक्षम करा</translation>
 <translation id="2976002782221275500">वापरकर्ता इनपुटशिवाय वेळेची लांबी निर्दिष्ट करते ज्यानंतर बॅटरी उर्जेवर चालताना स्क्रीन अंधुक होते.
 
@@ -830,6 +839,7 @@
       हे धोरण कसे सेट केले जाते किंवा नाही त्यावर अवलंबून न राहता, वापरकर्त्यांद्वारे WPAD ऑप्टिमायझेशन सेटिंग बदलले जाऊ शकत नाही.</translation>
 <translation id="3072045631333522102">किरकोळ मोडमध्ये साइन-इन स्क्रीनवर वापरले जाण्यासाठी स्क्रीन सेव्हर</translation>
 <translation id="3072847235228302527">एका डिव्हाइस-स्थानिक खात्यासाठी सेवा अटी सेट करा</translation>
+<translation id="3077183141551274418">टॅब लाइफसायकल सुरू किंवा बंद करते</translation>
 <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> मध्ये Cast रीसीव्हर काँफिगर करा.</translation>
 <translation id="3088796212846734853">तुम्हाला इमेज दाखवण्याची अनुमती असलेल्या साइट निर्दिष्ट करणाऱ्या url पॅटर्नची सूची सेट करू देते.
 
@@ -1497,6 +1507,11 @@
       या सूचना दूरस्थपणे Google सर्व्हरद्वारे प्राप्त केल्या जातात.
 
       या सेटिंग्ज असत्यवर सेट केलेल्या असल्यास, सूचना प्राप्त केल्या जाणार नाहीत किंवा दाखवल्या जाणार नाहीत.</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" /> चे ऑटोफिल वैशिष्ट्य सुरू करते आणि यापूर्वी स्टोअर केलेली माहिती वापरून वापरकर्त्यांना वेब फॉर्ममध्ये क्रेडिट कार्ड माहिती आपोआप पूर्ण करण्याची अनुमती देते.
+
+      हे सेटिंग बंद केल्यास, ऑटोफिल कधीही क्रेडिट कार्ड माहिती सुचवणार किंवा भरणार नाही तसेच ब्राउझ करत असताना वापरकर्त्याने कदाचित सबमिट केलेली अतिरिक्त क्रेडिट कार्ड माहिती ते सेव्ह करणार नाही.
+
+      हे  सेटिंग सुरू केल्यास किंवा मूल्य नसल्यास, वापरकर्त्याला  UI मध्ये क्रेडिट कार्डसाठीचे ऑटोफिल नियंत्रित करता येईल.</translation>
 <translation id="4791031774429044540">मोठा कर्सर प्रवेशयोग्यता वैशिष्ट्य सक्षम करा.
 
           हे धोरण सत्य वर सेट असल्यास, मोठा कर्सर नेहमी सक्षम राहील.
@@ -1637,6 +1652,11 @@
       हे धोरण सत्य वर सेट केल्यास, <ph name="PRODUCT_OS_NAME" /> विकासक मोडमध्ये बूट करण्यापासून डिव्हाइसला प्रतिबंध करेल. सिस्टम बूट नाकारेल आणि विकासक स्विच चालू होते तेव्हा एरर स्क्रीन दर्शवेल.
 
       हे धोरण सेट केलेले नसल्यास किंवा असत्य वर सेट केल्यास, डिव्हाइससाठी विकासक मोड उपलब्ध राहील.</translation>
+<translation id="520403427390290017">टॅब लाइफसायकल वैशिष्टय सीपीयू आणि दीर्घकाळापासून वापरात नसलेल्या रन होत असलेल्या टॅबशी संबंधित मेमरी, प्रथम त्यांचा आकार करून, त्यानंतर गोठवून आणि शेवटी त्यांना टाकून देऊन पुन्हा हक्क सांगते.
+
+      धोरण चुकीचे सेट केले असल्यास, टॅब लाइफसायकल बंद होतात आणि सर्व टॅब सामान्यपणे सुरू राहतील.
+
+      धोरण बरोबरवर सेट केले असल्यास किंवा निर्दिष्ट न करता सोडून दिले असल्यास, टॅब लाइफसायकल सुरू होतील.</translation>
 <translation id="5208240613060747912">सूचना प्रदर्शित करण्‍याची अनुमती नसलेल्या साइट निर्दिष्‍ट करणार्‍या url नमुन्यांची सूची सेट करण्‍याची आपल्याला अनुमती देते. 
 
 
@@ -1700,6 +1720,11 @@
 
           हे धोरण असत्य वर सेट केले असल्यास, वापरकर्ते त्यांच्या डिव्हाइसवर आशय कास्ट करू शकणार नाहीत. हे धोरण सत्य वर सेट केले असल्यास, वापरकर्त्यांना आशय कास्ट करण्याची अनुमती आहे. हे धोरण सेट केलेले नसल्यास, वापरकर्त्यांना नोंदणी केलेल्या Chrome OS डिव्हाइसवर आशय कास्ट करण्याची अनुमती नाही, परंतु ते नोंदणी न केलेल्या डिव्हाइसवर कास्ट करू शकतात.</translation>
 <translation id="5330684698007383292">खालील सामग्री प्रकार हाताळण्यास <ph name="PRODUCT_FRAME_NAME" /> ला अनुमती द्या</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" /> चे ऑटोफिल वैशिष्ट्य सुरू करते आणि यापूर्वी स्टोअर केलेली माहिती वापरून वापरकर्त्यांना वेब फॉर्ममध्ये प्रोफाइल आणि पत्ता माहिती आपोआप पूर्ण करण्याची अनुमती देते.
+
+      हे सेटिंग बंद केल्यास, ऑटोफिल कधीही पत्ता माहिती सुचवणार किंवा भरणार नाही तसेच ब्राउझ करत असताना वापरकर्त्याने कदाचित सबमिट केलेली अतिरिक्त पत्त्याची माहिती ते सेव्ह करणार नाही.
+
+      हे सेटिंग सुरू केल्यास किंवा मूल्य नसल्यास, वापरकर्त्याला UI मध्ये पत्त्यांसाठी ऑटोफिल नियंत्रित करता येईल.</translation>
 <translation id="5365946944967967336">टूलबारवर मुख्यपृष्ठ बटण दर्शवा</translation>
 <translation id="5366745336748853475">तुम्‍हाला url पॅटर्नची सूची निर्दिष्‍ट करण्‍याची अनुमती दिली जाते ज्‍यासाठी फ्रेम होस्टिंग SAML फ्लोमध्‍ये साइन-इन स्‍क्रीनवर आपोआप निवडलेल्‍या क्‍लायंट सर्टिफिकेटसाठी साइट निर्दिष्‍ट केल्‍या आहेत, जर साइट सर्टिफिकेटची विनंती करत असेल.
 
@@ -2481,6 +2506,15 @@
      तुम्ही ही सेटिंग बंद केल्यास, वापरकर्त्यांना Smart Lock वापरू दिले जाणार नाही.
 
      हे धोरण सेट न करता सोडल्यास, एंटरप्राइझ-व्यवस्थापित वापरकर्त्यांसाठी डीफॉल्ट अनुमत नसेल आणि व्यवस्थापित न केलेल्या वापरकर्त्यांसाठी त्याची अनुमती असेल.</translation>
+<translation id="729492886167634859">हे धोरण टक्केवारीची सूची निर्धारित करते, जी पहिल्यांदा अपडेट शोधले त्या दिवसापासून सुरू होऊन दर आठवड्याला अपडेट करण्यासाठी OU मधील <ph name="PRODUCT_OS_NAME" /> डिव्हाइसचा अंश निर्धारित करेल.अपडेट शोधल्याची वेळ ही प्रकाशित केलेल्या वेळेनंतरची असते, कारण अपडेट शोधून ते प्रकाशित करेपर्यंत थोडा लागू शकतो.
+
+      सूचीतील पुढील मूल्य डिव्हाइसची टक्केवारी म्हणून वापरले जाईल ज्याचे अपडेट शोधल्यानंतरच्या पुढील आठवड्यात पुढील आवृत्तीवर अपडेट होणे आवश्यक आहे. उदाहरणार्थ,  एखादे अपडेट आज शोधल्यास, सूचीतील पहिले मूल्य हे OU मधील डिव्हाइसची टक्केवारी निर्धारित करते जी आजपासून एका आठवड्याच्या आत त्या आवृत्तीवर अपडेट होणे आवश्यक आहे. दुसरे मूल्य हे OU मधील डिव्हाइसची टक्केवारी निर्धारित करते जी आजपासून दोन आठवड्याच्या आत त्या आवृत्तीवर अपडेट होणे आवश्यक आहे.
+
+      या धोरणासाठी एखादे मूल्य निर्धारित केले असल्यास, अपडेट <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> धोरणाकडे दुर्लक्ष करतील आणि त्याऐवजी या धोरणाचे पालन करतील.
+
+      ही सूची रिकामी असल्यास,  कोणतेही स्टेजिंग नसेल आणि इतर डिव्हाइस धोरणांनुसार अपडेट लागू केले जातील.
+
+      हे धोरण चॅनेल स्विचसाठी लागू होत नाही.</translation>
 <translation id="7295019613773647480">पर्यवेक्षी वापरकर्ते सक्षम करा</translation>
 <translation id="7301543427086558500">शोध इंजिनमधून शोध संज्ञा विस्तृत करण्यासाठी वापरल्या जाऊ शकणाऱ्या वैकल्पिक URLs ची एक सूची निर्दिष्ट करते. URLs मध्ये <ph name="SEARCH_TERM_MARKER" /> स्ट्रींग असावी, जी शोध संज्ञा विस्तृत करण्यासाठी वापरली जाईल.
 
@@ -2980,6 +3014,12 @@
 
           उदाहरणादाखल नमुन्यांसाठी हे पहा http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">ब्राउझर इतिहास सेव्ह करणे अक्षम करा</translation>
+<translation id="8498293625012059298">पासवर्ड बदला URL (फक्त HTTP आणि HTTPS योजनांसाठी) कॉन्फिगर करा . ब्राउझरमध्ये चेतावणी पाहिल्यानंतर वापरकर्त्यांना त्यांचा पासवर्ड बदलण्यासाठी पासवर्ड संरक्षण सेवा त्यांना या URL वर पाठवेल.
+      <ph name="PRODUCT_NAME" /> द्वारे या पासवर्ड बदलण्या्साठीच्या या पेजवरील नवीन पासवर्ड फिंगरप्रिंट योग्यरीत्या कॅप्चर करण्यासाठी, कृपया तुमचे पासवर्ड बदलण्यासाठीचे पेज https://www.chromium.org/developers/design-documents/create-amazing-password-forms वरील मार्गदर्शकतत्त्वांचे पालन करत असल्याची खात्री करा.
+
+      हे सेटिंग सुरू केल्यास, ब्राउझरमध्ये चेतावणी पाहिल्यानंतर पासवर्ड संरक्षण सेवा वापरकर्त्यांना त्यांचा पासवर्ड बदलण्यासाठी या URL वर पाठवेल.
+      हे सेटिंग बंद केल्यास  किंवा सेट केले नसल्यास, पासवर्ड संरक्षण सेवा वापरकर्त्यांना त्यांचा पासवर्ड बदलण्यासाठी https://myaccounts.google.com वर पाठवेल.
+      हे धोरण <ph name="MS_AD_NAME" /> डोमेनमध्ये सामील न झालेल्या Windows इंस्टंसवर उपलब्ध नाही.</translation>
 <translation id="8499172469244085141">डीफॉल्ट सेटिंग्ज (वापरकर्ते अधिलिखित करू शकतात)</translation>
 <translation id="8507835864888987300">आपोआप अपडेटची लक्ष्य आवृत्ती सेट करते.
 
@@ -3032,6 +3072,14 @@
 जेव्हा धोरण असत्य वर सेट केले जाते, तेव्हा ते फक्त नवीन व्हर्च्युअल मशीनना लागू होते पण ते आधीपासुन सुरू असलेले व्हर्च्युअल मशीन बंद करत नाही.
 जेव्हा हे धोरण व्यवस्थापित डिव्हाइसवर सेट केलेले नसते, तेव्हा डिव्हाइसला व्हर्च्युअल मशीन रन करण्याची अनुमती नसते.
 अव्यवस्थापित डिव्हाइसना व्हर्च्युअल मशीन रन करण्याची अनुमती असते.</translation>
+<translation id="8669669491594628013">तुम्हाला पासवर्ड संरक्षण चेतावणीचे ट्रिगर नियंत्रित करण्याची अनुमती देते. जेव्हा वापरकर्ते संभाव्य संशयास्पद साइटवर त्यांचा संरक्षित पासवर्ड पुन्हा वापरतात तेव्हा पासवर्ड संरक्षण त्यांना सूचना देते.
+
+      कोणत्या पासवर्डचे संरक्षण करायचे हे कॉन्फिगर करण्यासाठी तुम्ही 'PasswordProtectionLoginURLs' आणि 'PasswordProtectionChangePasswordURL' धोरणे वापरू शकता.
+
+      हे धोरण 'PasswordProtectionWarningOff' वर सेट केल्यास, कोणतीही पासवर्ड संरक्षण चेतावणी दाखवली जाणार नाही.
+      हे धोरण 'PasswordProtectionWarningOnPasswordReuse' वर सेट केल्यास, जेव्हा वापरकर्ता व्हाइटलिस्ट नसलेल्या साइटवर त्याचा संरक्षित पासवर्ड पुन्हा वापरेल तेव्हा पासवर्ड संरक्षण चेतावणी दाखवली जाईल.
+      हे धोरण 'PasswordProtectionWarningOnPhishingReuse' वर सेट केल्यास, जेव्हा वापरकर्ता फिशिंग साइटवर त्याचा संरक्षित पासवर्ड पुन्हा वापरेल तेव्हा पासवर्ड संरक्षण चेतावणी दाखवली जाईल.
+      हे धोरण सेट न करता सोडून दिल्यास, पासवर्ड संरक्षण सेवा फक्त Google पासवर्डचे संरक्षण करेल पण वापरकर्ता हे सेटिंग बदलू शकेल.</translation>
 <translation id="8672321184841719703">लक्ष्य स्वयं अपडेट आवृत्ती</translation>
 <translation id="867410340948518937">U2F (युनिव्हर्सल सेकंड फॅक्टर)</translation>
 <translation id="8685024486845674965">पासवर्ड पुन्हा वापरला गेल्यामुळे पासवर्ड संरक्षण चेतावणी ट्रिगर होते</translation>
diff --git a/components/policy/resources/policy_templates_ms.xtb b/components/policy/resources/policy_templates_ms.xtb
index 2f1737f..9d35dba 100644
--- a/components/policy/resources/policy_templates_ms.xtb
+++ b/components/policy/resources/policy_templates_ms.xtb
@@ -240,6 +240,13 @@
       Sebaliknya, jika keserasian dengan pelayan berpepijat mesti dikekalkan, dasar ini mungkin ditetapkan kepada "tls1.1". Ini hanyalah langkah sementara dan pelayan harus dibetulkan dengan segera.</translation>
 <translation id="1864269674877167562">Jika dasar ini ditetapkan kepada rentetan kosong atau tidak dikonfigurasikan, <ph name="PRODUCT_OS_NAME" /> tidak akan memaparkan pilihan autolengkap semasa aliran log masuk pengguna.
       Jika dasar ini ditetapkan kepada rentetan yang mewakili nama domain, <ph name="PRODUCT_OS_NAME" /> akan memaparkan pilihan autolengkap semasa log masuk pengguna yang membolehkan pengguna menaip nama pengguna mereka sahaja tanpa sambungan nama domain.  Pengguna boleh menulis ganti sambungan nama domain ini.</translation>
+<translation id="1864382791685519617">Membolehkan ramalan rangkaian dalam <ph name="PRODUCT_NAME" /> dan menghalang pengguna daripada mengubah tetapan ini.
+
+      Tetapan ini akan mengawal praambilan DNS, TCP dan prasambungan dan prapemaparan SSL halaman web.
+
+      Jika anda menetapkan dasar ini, pengguna tidak boleh mengubah atau mengatasi tetapan ini dalam <ph name="PRODUCT_NAME" />.
+
+      Jika dasar ini dibiarkan tanpa ditetapkan, ramalan rangkaian akan didayakan tetapi pengguna akan dapat mengubahnya.</translation>
 <translation id="1865417998205858223">Kebenaran Utama</translation>
 <translation id="186719019195685253">Tindakan yang perlu diambil apabila kelewatan melahu dicapai semasa dijalankan menggunakan kuasa AC</translation>
 <translation id="187819629719252111">Membenarkan akses ke fail setempat pada mesin dengan membenarkan <ph name="PRODUCT_NAME" /> untuk memaparkan dialog pemilihan fail.
@@ -716,6 +723,7 @@
       Jika dasar ini tidak ditetapkan, <ph name="PRINTERS_ALLOW_ALL" /> akan digunakan.
       </translation>
 <translation id="2908277604670530363">Bilangan maksimum sambungan serentak kepada pelayan proksi</translation>
+<translation id="2951386431828317490">Dayakan Autolengkap untuk profil</translation>
 <translation id="2956777931324644324">Dasar ini telah dihentikan mengikut <ph name="PRODUCT_NAME" /> versi 36.
 
       Menyatakan sama ada sambungan sijil hala domain TLS harus didayakan.
@@ -724,6 +732,7 @@
 <translation id="2957506574938329824">Jangan benarkan mana-mana tapak meminta akses kepada peranti Bluetooth melalui API Bluetooth Web</translation>
 <translation id="2957513448235202597">Jenis akaun untuk pengesahan <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Peraturan memintas proksi</translation>
+<translation id="2960128438010718932">Jadual pemeringkatan untuk menggunakan kemas kini baharu</translation>
 <translation id="2960691910306063964">Dayakan atau lumpuhkan pengesahan tanpa PIN untuk hos akses jauh</translation>
 <translation id="2976002782221275500">Menyatakan panjang masa tanpa input pengguna dan skrin akan dimalapkan selepas tamat masa ini apabila dijalankan dengan kuasa bateri.
 
@@ -766,6 +775,7 @@
       Bergantung kepada sama ada atau cara dasar ini ditetapkan, tetapan pengoptimuman WPAD tidak boleh diubah oleh pengguna.</translation>
 <translation id="3072045631333522102">Penyelamat skrin untuk digunakan pada skrin log masuk dalam mod runcit</translation>
 <translation id="3072847235228302527">Tetapkan Syarat Perkhidmatan untuk akaun setempat peranti</translation>
+<translation id="3077183141551274418">Mendayakan atau melumpuhkan kitaran hayat tab</translation>
 <translation id="3086995894968271156">Konfigurasikan Penerima Cast dalam <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Membolehkan anda menetapkan beberapa corak url yang menentukan tapak yang dibenarkan memaparkan imej.
 
@@ -1340,6 +1350,11 @@
       Cadangan ini diambil secara jauh daripada pelayan Google.
 
       Sekiranya tetapan ini ditetapkan kepada palsu, cadangan tidak akan diambil atau dipaparkan.</translation>
+<translation id="4788252609789586009">Mendayakan ciri Autolengkap <ph name="PRODUCT_NAME" /> dan membolehkan pengguna mengisikan maklumat kad kredit dalam borang web secara automatik dengan menggunakan maklumat yang disimpan sebelum itu.
+
+      Jika tetapan ini dilumpuhkan, Autolengkap tidak akan mencadangkan atau mengisikan maklumat kad kredit atau menyimpan maklumat kad kredit tambahan yang mungkin diserahkan oleh pengguna semasa menyemak imbas web.
+
+      Jika tetapan ini didayakan atau tiada nilai, pengguna akan dapat mengawal ciri Autolengkap untuk kad kredit dalam UI.</translation>
 <translation id="4791031774429044540">Dayakan ciri kebolehcapaian kursor besar.
 
           Jika dasar ini ditetapkan kepada benar, kursor besar akan sentiasa didayakan.
@@ -1475,6 +1490,11 @@
       Jika dasar ini ditetapkan kepada Benar, <ph name="PRODUCT_OS_NAME" /> akan menghalang peranti daripada membut ke dalam mod pembangun. Sistem tidak akan but dan memaparkan skrin ralat apabila suis pembangun dihidupkan.
 
       Jika dasar ini dinyahtetapkan atau ditetapkan ke Palsu, mod pembangun akan kekal tersedia untuk peranti ini.</translation>
+<translation id="520403427390290017">Ciri kitaran hayat tab memulih guna CPU dan memori yang dikaitkan dengan tab yang sedang berjalan yang sudah lama tidak digunakan, dengan mendikitkannya terlebih dahulu, kemudian membekukannya dan akhir sekali membuangnya.
+
+      Jika dasar ini ditetapkan kepada palsu, maka kitaran hayat tab dilumpuhkan dan semua tab akan dibiarkan berjalan seperti biasa.
+
+      Jika dasar ini ditetapkan kepada benar atau dibiarkan tidak ditentukan, maka kitaran hayat tab didayakan.</translation>
 <translation id="5208240613060747912">Membolehkan anda menetapkan senarai pola url yang menentukan tapak yang tidak dibenarkan untuk memaparkan pemberitahuan.
 
           Jika dasar ini dibiarkan tanpa ditetapkan, nilai lalai global akan digunakan untuk semua tapak sama ada dari dasar 'DefaultNotificationsSetting' jika ia ditetapkan atau konfigurasi peribadi pengguna jika sebaliknya.</translation>
@@ -1522,6 +1542,11 @@
 
           Jika dasar ini ditetapkan kepada Palsu, pengguna tidak akan dapat menghantar kandungan ke peranti mereka. Jika dasar ini ditetapkan kepada Benar, pengguna dibenarkan menghantar kandungan. Jika dasar ini tidak ditetapkan, pengguna tidak dibenarkan menghantar kandungan ke peranti OS Chrome berdaftar, tetapi dibenarkan berbuat demikian ke peranti OS Chrome tidak berdaftar.</translation>
 <translation id="5330684698007383292">Benarkan <ph name="PRODUCT_FRAME_NAME" /> mengendalikan jenis kandungan berikut</translation>
+<translation id="5360146044009867539">Mendayakan ciri Autolengkap <ph name="PRODUCT_NAME" /> dan membolehkan pengguna mengisikan maklumat profil dan alamat dalam borang web secara automatik dengan menggunakan maklumat yang disimpan sebelum itu.
+
+      Jika tetapan ini dilumpuhkan, Autolengkap tidak akan mencadangkan atau mengisikan maklumat alamat atau menyimpan maklumat alamat tambahan yang mungkin diserahkan oleh pengguna semasa menyemak imbas web.
+
+      Jika tetapan ini didayakan atau tiada nilai, pengguna akan dapat mengawal ciri Autolengkap untuk alamat dalam UI.</translation>
 <translation id="5365946944967967336">Paparkan butang Halaman Utama pada bar alat</translation>
 <translation id="5366745336748853475">Membolehkan anda menentukan senarai pola url yang menentukan tapak yang sijil pelanggannya dipilih secara automatik pada skrin log masuk dalam bingkai yang mengehoskan aliran SAML, jika tapak tersebut meminta sijil. Satu contoh penggunaan adalah untuk mengkonfigurasikan sijil seluruh peranti yang akan disampaikan kepada SAML IdP.
 
@@ -2247,6 +2272,15 @@
 
           Jika tetapan ini dilumpuhkan, maka ciri ini tidak akan tersedia.</translation>
 <translation id="7275334191706090484">Penanda Halaman Terurus</translation>
+<translation id="729492886167634859">Dasar ini mentakrifkan senarai peratusan yang akan menentukan pecahan peranti <ph name="PRODUCT_OS_NAME" /> dalam OU untuk dikemas kini setiap minggu bermula dari hari kemas kini itu mula-mula ditemui. Masa penemuan adalah lebih kemudian daripada masa kemas kini diterbitkan. Ini kerana, peranti menyemak kemas kini beberapa ketika selepas kemas kini itu diterbitkan.
+
+      Nilai ke-n dalam senarai ini akan digunakan sebagai peratusan peranti yang harus selesai dikemas kini kepada versi seterusnya dalam minggu ke-n selepas kemas kini ditemui. Sebagai contoh, jika kemas kini ditemui hari ini, maka nilai pertama dalam senarai mentakrifkan peratusan peranti dalam OU yang perlu dikemas kini kepada versi itu dalam masa seminggu dari hari ini. Nilai kedua mentakrifkan peratusan peranti dalam OU yang harus dikemas kini kepada versi itu dalam masa 2 minggu dari hari ini dan seterusnya.
+
+      Jika terdapat nilai yang ditakrifkan untuk dasar ini, kemas kini akan mengabaikan dasar <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> dan mengikut dasar ini.
+
+      Jika senarai ini kosong, tidak akan ada pemeringkatan dan kemas kini akan digunakan mengikut dasar peranti lain.
+
+      Dasar ini tidak digunakan untuk penukaran saluran.</translation>
 <translation id="7295019613773647480">Dayakan pengguna diselia</translation>
 <translation id="7301543427086558500">Menetapkan senarai URL ganti yang boleh digunakan untuk mengeluarkan istilah carian daripada enjin carian. URL harus mengandungi rentetan <ph name="SEARCH_TERM_MARKER" />, yang akan digunakan untuk menyari istilah carian.
 
@@ -2713,6 +2747,12 @@
 
           Untuk melihat contoh pola, lihat http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Lumpuhkan penyimpanan sejarah penyemakan imbas</translation>
+<translation id="8498293625012059298">Konfigurasikan URL tukar kata laluan (skema HTTP dan HTTPS sahaja). Perkhidmatan perlindungan kata laluan akan menghantar pengguna ke URL ini untuk menukar kata laluan mereka selepas melihat amaran dalam penyemak imbas.
+      Untuk membolehkan <ph name="PRODUCT_NAME" /> menangkap cap jari kata laluan baharu itu dengan betul di halaman tukar kata laluan ini, sila pastikan halaman tukar kata laluan anda mematuhi garis panduan di https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Jika tetapan ini didayakan, maka perkhidmatan perlindungan kata laluan akan menghantar pengguna ke URL ini untuk menukar kata laluan mereka selepas melihat amaran dalam penyemak imbas.
+      Jika tetapan ini dilumpuhkan atau tidak ditetapkan, maka perkhidmatan perlindungan kata laluan akan menghantar pengguna ke https://myaccounts.google.com untuk menukar kata laluan mereka.
+      Dasar ini tidak tersedia pada tika Windows yang tidak dihubungkan ke domain <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Tetapan lalai (pengguna boleh mengatasi)</translation>
 <translation id="8507835864888987300">Menetapkan versi sasaran untuk Autokemas Kini.
 
@@ -2767,6 +2807,14 @@
       Apabila dasar ini ditukar kepada Palsu, dasar ini digunakan apabila memulakan mesin maya baharu tetapi tidak mematikan mesin maya yang sudah dijalankan.
       Apabila dasar ini tidak ditetapkan pada peranti terurus, peranti tidak dibenarkan untuk menjalankan mesin maya.
       Peranti yang tidak diurus dibenarkan untuk menjalankan mesin maya.</translation>
+<translation id="8669669491594628013">Membenarkan anda mengawal pencetusan amaran perlindungan kata laluan. Perlindungan kata laluan memaklumi pengguna apabila mereka menggunakan semula kata laluan yang dilindungi pada tapak yang mungkin mencurigakan.
+
+      Anda boleh menggunakan 'PasswordProtectionLoginURLs' dan 'PasswordProtectionChangePasswordURL' untuk mengkonfigurasi kata laluan yang hendak dilindungi.
+
+      Jika dasar ini ditetapkan kepada 'PasswordProtectionWarningOff', tiada amaran perlindungan kata laluan akan ditunjukkan.
+      Jika dasar ini ditetapkan kepada 'PasswordProtectionWarningOnPasswordReuse', amaran perlindungan kata laluan akan ditunjukkan apabila pengguna menggunakan semula kata laluan Google pada mana-mana tapak yang tidak disenaraiputihkan.
+      Jika dasar ini ditetapkan kepada 'PasswordProtectionWarningOnPhishingReuse', amaran perlindungan kata laluan akan ditunjukkan apabila pengguna menggunakan semula kata laluan Google pada tapak pancingan data.
+      Jika dasar ini dibiarkan tidak ditetapkan, perkhidmatan perlindungan kata laluan hanya akan melindungi kata laluan Google tetapi pengguna boleh menukar tetapan ini.</translation>
 <translation id="8672321184841719703">Versi Kemas Kini Auto Sasaran</translation>
 <translation id="867410340948518937">U2F (Faktor Kedua Universal)</translation>
 <translation id="8685024486845674965">Amaran perlindungan kata laluan dicetuskan oleh penggunaan semula kata laluan</translation>
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index 0fb6066e..0905b8b 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -232,6 +232,13 @@
       Als de compatibiliteit met een server met bugs moet worden behouden, kan dit beleid worden ingesteld op 'tls1.1'. Dit is slechts een noodoplossing. De server moet snel worden gerepareerd.</translation>
 <translation id="1864269674877167562">Als dit beleid is ingesteld op een lege tekenreeks of niet is geconfigureerd, geeft <ph name="PRODUCT_OS_NAME" /> geen optie voor Automatisch aanvullen weer tijdens het inlogproces van de gebruiker.
       Als dit beleid is ingesteld op een tekenreeks die een domeinnaam vertegenwoordigt, geeft <ph name="PRODUCT_OS_NAME" /> een optie voor Automatisch aanvullen weer tijdens het inlogproces van de gebruiker, waarbij de gebruiker alleen zijn gebruikersnaam hoeft te typen zonder de domeinnaamextensie. De gebruiker kan deze domeinnaamextensie overschrijven.</translation>
+<translation id="1864382791685519617">Hiermee wordt netwerkvoorspelling in <ph name="PRODUCT_NAME" /> ingeschakeld en wordt voorkomen dat gebruikers deze instelling kunnen wijzigen.
+
+      Hiermee wordt DNS-prefetching, vooraf verbinden met TCP en SSL en het vooraf weergeven van webpagina's beheerd.
+
+      Als je dit beleid instelt, kunnen gebruikers deze instelling niet wijzigen of overschrijven in <ph name="PRODUCT_NAME" />.
+
+      Als dit beleid niet wordt ingesteld, wordt netwerkvoorspelling ingeschakeld, maar kan de gebruiker dit wijzigen.</translation>
 <translation id="1865417998205858223">Rechten voor sleutels</translation>
 <translation id="186719019195685253">Actie die moet worden ondernomen wanneer de vertraging voor inactief wordt bereikt bij gebruik op netspanning</translation>
 <translation id="187819629719252111">Hiermee wordt toegang tot lokale bestanden op de computer toegestaan doordat <ph name="PRODUCT_NAME" /> dialoogvensters voor het selecteren van bestanden kan weergeven.
@@ -703,6 +710,7 @@
       Als dit beleid niet is ingesteld, wordt er uitgegaan van <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maximaal aantal gelijktijdige verbindingen met de proxyserver</translation>
+<translation id="2951386431828317490">Automatisch aanvullen inschakelen voor profielen</translation>
 <translation id="2956777931324644324">Dit beleid is buiten gebruik gesteld vanaf <ph name="PRODUCT_NAME" /> versie 36.
 
       Geeft aan of de extensie voor TLS-domeingebonden certificaten moet worden ingeschakeld.
@@ -711,6 +719,7 @@
 <translation id="2957506574938329824">Niet toestaan dat sites toegang tot Bluetooth-apparaten vragen via de Web Bluetooth API</translation>
 <translation id="2957513448235202597">Accounttype voor <ph name="HTTP_NEGOTIATE" />-verificatie</translation>
 <translation id="2959898425599642200">Regels voor proxyomzeiling</translation>
+<translation id="2960128438010718932">De gefaseerde planning voor het toepassen van nieuwe updates</translation>
 <translation id="2960691910306063964">Verificatie zonder pincode in- of uitschakelen voor hosts voor externe toegang</translation>
 <translation id="2976002782221275500">Hiermee wordt de tijdsduur zonder input van gebruikers gespecificeerd waarna het scherm wordt gedimd wanneer er op de batterij wordt gewerkt.
 
@@ -753,6 +762,7 @@
       Onafhankelijk van of en hoe dit beleid is ingesteld, kan de instelling voor WPAD-optimalisatie niet worden gewijzigd door gebruikers.</translation>
 <translation id="3072045631333522102">Screensaver voor gebruik in het inlogvenster in de winkelmodus</translation>
 <translation id="3072847235228302527">De Servicevoorwaarden instellen voor een apparaat-lokaal account</translation>
+<translation id="3077183141551274418">Hiermee schakel je levenscyclussen voor tabbladen in of uit</translation>
 <translation id="3086995894968271156">De Cast-receiver instellen in <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Hiermee kun je een lijst met URL-patronen instellen waarmee sites worden gespecificeerd die afbeeldingen mogen weergeven.
 
@@ -1327,6 +1337,11 @@
       Deze suggesties worden extern via Google-servers opgehaald.
 
       Als dit is ingesteld op 'false' (onwaar), kunnen er geen suggesties worden opgehaald of weergegeven.</translation>
+<translation id="4788252609789586009">Hiermee wordt de functie 'Automatisch aanvullen' van <ph name="PRODUCT_NAME" /> ingeschakeld zodat gebruikers creditcardgegevens automatisch kunnen invullen op webformulieren aan de hand van eerder opgeslagen gegevens.
+
+      Als deze instelling is uitgeschakeld, worden er nooit creditcardgegevens voorgesteld of ingevuld door 'Automatisch aanvullen'. Er worden ook geen aanvullende creditcardgegevens opgeslagen die de gebruiker mogelijk verzendt terwijl deze browset op internet.
+
+      Als deze instelling is ingeschakeld of geen waarde heeft, kan de gebruiker 'Automatisch aanvullen' voor creditcards beheren in de UI.</translation>
 <translation id="4791031774429044540">De toegankelijkheidsfunctie 'Grote muisaanwijzer' inschakelen.
 
           Als dit beleid op 'waar' is ingesteld, is de grote muisaanwijzer altijd ingeschakeld.
@@ -1461,6 +1476,11 @@
       Als dit beleid is ingesteld op Waar (True), voorkomt <ph name="PRODUCT_OS_NAME" /> dat het apparaat wordt opgestart in de ontwikkelaarsmodus. Als de schakelaar voor de ontwikkelaarsmodus op 'Aan' is gezet, wordt het systeem niet opgestart en wordt een foutscherm weergegeven.
 
       Als dit beleid niet is ingesteld of is ingesteld op Onwaar, (False) blijft de ontwikkelaarsmodus beschikbaar voor het apparaat.</translation>
+<translation id="520403427390290017">De functie voor levenscyclussen voor tabbladen bespaart CPU en uiteindelijk geheugen voor tabbladen die al langere tijd niet worden gebruikt. Eerst worden deze beperkt, vervolgens worden ze vastgezet en uiteindelijk worden ze gedeactiveerd.
+
+      Als dit beleid is ingesteld op 'false' (onwaar), zijn levenscyclussen voor tabbladen uitgeschakeld en blijven alle tabbladen gewoon actief.
+
+      Als dit beleid is ingesteld op 'true' (waar) of niet is opgegeven, zijn levenscyclussen voor tabbladen ingeschakeld.</translation>
 <translation id="5208240613060747912">Hiermee kun je een lijst met URL-patronen opgeven van sites waarop geen meldingen mogen worden weergegeven.
 
           Als dit beleid niet wordt ingesteld, wordt de algemene standaardwaarde gebruikt voor alle sites op basis van het beleid 'DefaultNotificationsSetting' (als dit is ingesteld) of anders op basis van de configuratie van de gebruiker.</translation>
@@ -1508,6 +1528,11 @@
 
           Als dit beleid is ingesteld op 'False' (Onwaar), kunnen gebruikers geen content casten naar hun apparaat. Als dit beleid is ingesteld op 'True' (Waar), mogen gebruikers content casten. Als dit beleid niet is ingesteld, mogen gebruikers geen content naar geregistreerde Chrome OS-apparaten casten, maar wel naar niet-geregistreerde apparaten.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> toestaan de volgende soorten content te verwerken.</translation>
+<translation id="5360146044009867539">Hiermee wordt de functie 'Automatisch aanvullen' van <ph name="PRODUCT_NAME" /> ingeschakeld zodat en gebruikers profiel- en adresgegevens automatisch kunnen invullen op webformulieren aan de hand van eerder opgeslagen gegevens.
+
+      Als deze instelling is uitgeschakeld, worden er nooit adresgegevens voorgesteld of ingevuld door 'Automatisch aanvullen'. Er worden ook geen aanvullende adresgegevens opgeslagen die de gebruiker mogelijk verzendt terwijl deze browset op internet.
+
+      Als deze instelling is ingeschakeld of er geen waarde is ingesteld, kan de gebruiker 'Automatisch aanvullen' voor adressen beheren in de UI.</translation>
 <translation id="5365946944967967336">Knop 'Homepage' in de werkbalk weergeven</translation>
 <translation id="5366745336748853475">Hiermee kun je een lijst met URL-patronen opgeven die sites specificeren waarvoor automatisch een clientcertificaat moet worden geselecteerd op het inlogscherm in het frame waarin de SAML-procedure wordt gehost als de site vraagt om een certificaat. Een voorbeeld van het gebruik is een certificaat voor het hele apparaat configureren om te presenteren aan de SAML IdP.
 
@@ -2224,6 +2249,15 @@
 
           Als deze instelling is uitgeschakeld, is deze functie niet beschikbaar.</translation>
 <translation id="7275334191706090484">Beheerde bladwijzers</translation>
+<translation id="729492886167634859">Dit beleid definieert een lijst van percentages. Deze percentages bepalen welk deel van <ph name="PRODUCT_OS_NAME" />-apparaten in de OE per week moet worden geüpdatet vanaf de dag waarop de update voor het eerst wordt ontdekt. De update wordt later ontdekt dan deze wordt gepubliceerd, aangezien het even kan duren voordat het apparaat controleert op updates.
+
+      De n-de waarde in de lijst wordt gebruikt als het percentage apparaten dat moet worden geüpdatet naar de volgende versie in de n-de week nadat de update voor het eerst wordt ontdekt. Als een update bijvoorbeeld vandaag wordt ontdekt, bepaalt de eerste waarde in de lijst welk percentage apparaten in de OE binnen een week moet worden geüpdatet naar die versie. De tweede waarde bepaalt het percentage apparaten in de OE dat naar die versie moet worden geüpdatet binnen twee weken vanaf vandaag, enzovoort.
+
+      Als er voor dit beleid een waarde is ingesteld, negeren updates het beleid <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> en wordt in plaats daarvan dit beleid gevolgd.
+
+      Als deze lijst leeg is, vindt het updaten niet gefaseerd plaats en worden updates toegepast volgens ander apparaatbeleid.
+
+      Dit beleid is niet van toepassing op kanaalwisselingen.</translation>
 <translation id="7295019613773647480">Gebruikers met beperkte rechten inschakelen</translation>
 <translation id="7301543427086558500">Hiermee wordt een lijst met alternatieve URL's gespecificeerd die kunnen worden gebruikt om zoektermen uit de zoekmachine te extraheren. De URL's moeten de tekenreeks <ph name="SEARCH_TERM_MARKER" /> bevatten die wordt gebruikt om de zoektermen te extraheren.
 
@@ -2685,6 +2719,12 @@
 
           Ga voor voorbeeldpatronen naar https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Opslaan van browsegeschiedenis uitschakelen</translation>
+<translation id="8498293625012059298">Hiermee stel je de URL voor het wijzigen van het wachtwoord in (alleen http- en https-schema's). De wachtwoordbeveiligingsservice stuurt gebruikers naar deze URL, waar ze hun wachtwoord kunnen wijzigen nadat ze een waarschuwing in de browser hebben gezien.
+      Als je er zeker van wilt zijn dat <ph name="PRODUCT_NAME" /> de nieuwe vingerafdruk van het wachtwoord correct vastlegt op deze pagina voor wachtwoordwijziging, moet je ervoor zorgen dat je pagina voor wachtwoordwijziging voldoet aan de richtlijnen op https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Als deze instelling is ingeschakeld, stuurt de wachtwoordbeveiligingsservice gebruikers naar deze URL, waar ze hun wachtwoord kunnen wijzigen nadat ze een waarschuwing in de browser hebben gezien.
+      Als deze instelling is uitgeschakeld of niet is ingesteld, stuurt de wachtwoordbeveiligingsservice gebruikers naar https://myaccounts.google.com, waar ze hun wachtwoord kunnen wijzigen.
+      Dit beleid is niet beschikbaar voor Windows-instanties die geen deel uitmaken van een <ph name="MS_AD_NAME" />-domein.</translation>
 <translation id="8499172469244085141">Standaardinstellingen (gebruikers kunnen overschrijven)</translation>
 <translation id="8507835864888987300">Hiermee stel je een doelversie voor 'Automatische updates' in.
 
@@ -2739,6 +2779,14 @@
       Als dit beleid wordt gewijzigd naar False (Onwaar), wordt dit toegepast op nieuwe virtuele machines, maar worden reeds uitgevoerde virtuele machines niet uitgeschakeld.
       Als dit beleid op een beheerd apparaat niet is ingesteld, mogen er geen virtuele machines worden uitgevoerd op het apparaat.
       Virtuele machines mogen worden uitgevoerd op onbeheerde apparaten.</translation>
+<translation id="8669669491594628013">Hiermee kun je de activering van een waarschuwing voor wachtwoordbeveiliging beheren. Wachtwoordbeveiliging waarschuwt gebruikers wanneer ze hun beveiligde wachtwoord hergebruiken op potentieel verdachte sites.
+
+      Je kunt het beleid 'PasswordProtectionLoginURLs' en 'PasswordProtectionChangePasswordURL' gebruiken om te configureren welk wachtwoord moet worden beveiligd.
+
+      Als dit beleid is ingesteld op 'PasswordProtectionWarningOff', wordt er geen waarschuwing voor wachtwoordbeveiliging weergegeven.
+      Als dit beleid is ingesteld op 'PasswordProtectionWarningOnPasswordReuse', wordt er een waarschuwing voor wachtwoordbeveiliging weergegeven wanneer de gebruiker het beveiligde wachtwoord hergebruikt op een site die niet op de witte lijst staat.
+      Als dit beleid is ingesteld op 'PasswordProtectionWarningOnPhishingReuse', wordt er een waarschuwing voor wachtwoordbeveiliging weergegeven wanneer de gebruiker het beveiligde wachtwoord hergebruikt op een phishingsite.
+      Als dit beleid niet is ingesteld, beschermt de wachtwoordbeveiligingsservice alleen Google-wachtwoorden, maar kan de gebruiker deze instelling wijzigen.</translation>
 <translation id="8672321184841719703">Doelversie voor automatische updates</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Waarschuwing voor wachtwoordbeveiliging wordt geactiveerd bij hergebruik van een wachtwoord</translation>
diff --git a/components/policy/resources/policy_templates_pl.xtb b/components/policy/resources/policy_templates_pl.xtb
index 923746e..cf0f3d6 100644
--- a/components/policy/resources/policy_templates_pl.xtb
+++ b/components/policy/resources/policy_templates_pl.xtb
@@ -236,6 +236,13 @@
       Jeśli utrzymanie zgodności z wadliwie działającym serwerem jest konieczne, można wybrać „tls1.1”. To jednak tylko rozwiązanie tymczasowe – serwer trzeba jak najszybciej naprawić.</translation>
 <translation id="1864269674877167562">Jeśli ta zasada jest pusta lub nieskonfigurowana, <ph name="PRODUCT_OS_NAME" /> nie będzie wyświetlać opcji autouzupełniania podczas logowania użytkownika.
       Jeśli zasada jest ustawiona na nazwę domeny, <ph name="PRODUCT_OS_NAME" /> będzie wyświetlać opcję autouzupełniania podczas logowania użytkownika, umożliwiając mu wpisanie tylko jego nazwy, bez konieczności podawania rozszerzenia nazwy domeny. Użytkownik będzie mógł zastąpić rozszerzenie nazwy domeny.</translation>
+<translation id="1864382791685519617">Włącza przewidywanie działań sieciowych w <ph name="PRODUCT_NAME" /> i uniemożliwia użytkownikom zmianę tego ustawienia.
+
+      Ta zasada kontroluje wstępne pobieranie DNS, wstępne łączenie przez TCP i SSL oraz wstępne renderowanie stron internetowych.
+
+      Jeśli ustawisz tę zasadę, użytkownicy nie będą mogli zmienić ani zastąpić tego ustawienia w <ph name="PRODUCT_NAME" />.
+
+      Jeśli ta zasada pozostanie nieustawiona, przewidywanie działań sieciowych zostanie włączone, ale użytkownicy będą mogli to zmienić.</translation>
 <translation id="1865417998205858223">Uprawnienia klucza</translation>
 <translation id="186719019195685253">Działanie, jakie ma zostać podjęte po osiągnięciu opóźnienia bezczynności przy zasilaniu prądem zmiennym</translation>
 <translation id="187819629719252111">Umożliwia dostęp do plików lokalnych na komputerze, zezwalając <ph name="PRODUCT_NAME" /> na wyświetlanie okien dialogowych wyboru pliku. Po włączeniu tego ustawienia użytkownicy mogą w normalny sposób otwierać okna dialogowe wyboru pliku. Jeśli wyłączysz ustawienie, w momencie wykonania przez użytkownika czynności powodującej wywołanie okna dialogowego wyboru pliku (np. zaimportowanie zakładek, przesłanie plików, zapisanie linków itp.) zostanie wyświetlony komunikat, a działanie przeglądarki będzie kontynuowane, tak jakby użytkownik kliknął przycisk Anuluj w oknie dialogowym wyboru pliku. Jeśli ustawienie jest nieskonfigurowane, użytkownicy mogą w normalny sposób otwierać okna dialogowe wyboru pliku.</translation>
@@ -693,6 +700,7 @@
       Jeśli ta zasada nie została skonfigurowana, domyślnie stosowana jest opcja <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maksymalna liczba jednoczesnych połączeń z serwerem proxy</translation>
+<translation id="2951386431828317490">Włącz autouzupełnianie dla profili</translation>
 <translation id="2956777931324644324">Ta zasada została wycofana w wersji 36 <ph name="PRODUCT_NAME" />.
 
       Określa, czy ma być włączone rozszerzenie certyfikatów TLS powiązanych z domeną.
@@ -701,6 +709,7 @@
 <translation id="2957506574938329824">Nie pozwalaj żadnym witrynom na wysyłanie żądań dostępu do urządzeń Bluetooth poprzez interfejs API Web Bluetooth</translation>
 <translation id="2957513448235202597">Rodzaj konta na potrzeby uwierzytelniania <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Reguły omijania serwera proxy</translation>
+<translation id="2960128438010718932">Harmonogram etapowego wdrażania nowej aktualizacji</translation>
 <translation id="2960691910306063964">Włącz lub wyłącz uwierzytelnianie hostów dostępu zdalnego bez kodu PIN</translation>
 <translation id="2976002782221275500">Określa, po jakim czasie nieaktywności użytkownika przyciemniany jest ekran przy zasilaniu z baterii.
 
@@ -738,6 +747,7 @@
       Bez względu na to, czy i jak ta zasada jest skonfigurowana, użytkownicy nie mogą jej zmienić.</translation>
 <translation id="3072045631333522102">Wygaszacz ekranu używany na ekranie logowania w trybie sklepu</translation>
 <translation id="3072847235228302527">Określ Warunki korzystania z usługi dla lokalnego konta na urządzeniu</translation>
+<translation id="3077183141551274418">Włącza lub wyłącza cykle życia kart</translation>
 <translation id="3086995894968271156">Konfigurowanie odbiornika Cast (<ph name="PRODUCT_NAME" />).</translation>
 <translation id="3088796212846734853">Umożliwia skonfigurowanie listy wzorców adresów URL określających witryny, w których mogą być wyświetlane obrazy.
 
@@ -1284,6 +1294,11 @@
       Takie propozycje są pobierane zdalnie z serwerów Google.
 
       Jeśli to ustawienie ma wartość fałsz, propozycje nie będą pobierane ani wyświetlane.</translation>
+<translation id="4788252609789586009">Włącza funkcję autouzupełniania w <ph name="PRODUCT_NAME" />, umożliwiając użytkownikom automatyczne wprowadzanie wcześniej zapisanych danych karty kredytowej w formularzach na stronach internetowych.
+
+      Jeśli to ustawienie jest wyłączone, autouzupełnianie nie będzie podpowiadać ani wypełniać danych karty kredytowej, nie będzie też zapisywać dodatkowych danych karty kredytowej, które użytkownik może podawać na stronach internetowych.
+
+      Jeśli to ustawienie jest włączone lub nieskonfigurowane, użytkownik może samodzielnie skonfigurować autouzupełnianie dla kart kredytowych w interfejsie.</translation>
 <translation id="4791031774429044540">Włącza funkcję ułatwień dostępu w postaci dużego kursora.
 
           Jeśli ta zasada ma wartość „prawda”, duży kursor jest zawsze włączony.
@@ -1408,6 +1423,11 @@
       Kiedy ta zasada jest włączona, <ph name="PRODUCT_OS_NAME" /> uniemożliwia urządzeniu uruchomienie się w trybie programisty. Gdy tryb przełączania programisty zostanie włączony, system zablokuje uruchomienie i wyświetli ekran błędu.
 
       Kiedy ta zasada jest wyłączona, tryb programisty jest normalnie dostępny na urządzeniu.</translation>
+<translation id="520403427390290017">Funkcja cykli życia kart odzyskuje zasoby procesora, a później zasoby pamięci powiązane z działającymi kartami, które nie były używane od długiego czasu. Najpierw ogranicza szybkość działania kart, później zamraża je, a na koniec zamyka.
+
+      Jeśli zasada ma ustawienie fałsz, to cykle życia kart są wyłączone i wszystkie karty będą cały czas działać normalnie.
+
+      Jeśli zasada ma ustawienie prawda lub jest nieskonfigurowana, to cykle życia kart są włączone.</translation>
 <translation id="5208240613060747912">Umożliwia skonfigurowanie listy wzorcowych URL-i określających witryny, w których nie mogą być wyświetlane powiadomienia. Jeśli ta zasada nie zostanie skonfigurowana, dla wszystkich witryn będzie używana globalna wartość domyślna pochodząca z zasady „DefaultNotificationsSetting” (jeśli została skonfigurowana) lub z osobistej konfiguracji użytkownika.</translation>
 <translation id="5219844027738217407">W przypadku aplikacji na Androida ta zasada wpływa tylko na mikrofon. Gdy jest ona włączona, mikrofon jest wyłączony dla wszystkich aplikacji na Androida bez żadnych wyjątków.</translation>
 <translation id="523505283826916779">Ustawienia ułatwień dostępu</translation>
@@ -1453,6 +1473,11 @@
 
           Jeśli ta zasada jest ustawiona na wartość fałsz, użytkownicy nie mogą przesyłać treści na urządzenie. Jeśli jest ustawiona na wartość prawda – mogą to robić. Jeśli ta zasada nie jest ustawiona, użytkownicy nie mogą przesyłać treści na zarejestrowane urządzenia z Chrome OS. Mogą przesyłać treści na urządzenia niezarejestrowane.</translation>
 <translation id="5330684698007383292">Zezwalaj <ph name="PRODUCT_FRAME_NAME" /> na obsługę tych typów treści</translation>
+<translation id="5360146044009867539">Włącza funkcję autouzupełniania w <ph name="PRODUCT_NAME" /> i umożliwia użytkownikom automatyczne wprowadzanie wcześniej zapisanych informacji profilowych i adresowych w formularzach na stronach internetowych.
+
+      Jeśli to ustawienie jest wyłączone, autouzupełnianie nie będzie podpowiadać ani wypełniać adresu, nie będzie też zapisywać dodatkowych informacji adresowych, które użytkownik może podawać na stronach internetowych.
+
+      Jeśli to ustawienie jest włączone lub nieskonfigurowane, użytkownik może samodzielnie skonfigurować autouzupełnianie dla adresów w interfejsie.</translation>
 <translation id="5365946944967967336">Pokaż przycisk strony startowej na pasku narzędzi</translation>
 <translation id="5366745336748853475">Umożliwia określenie listy wzorców adresu URL definiujących witryny, dla których jest automatycznie wybierany certyfikat klienta na ekranie logowania w ramce obsługującej proces SAML, jeśli witryna zażąda certyfikatu. Przykładowe użycie to skonfigurowanie certyfikatu dla całego urządzenia, który będzie okazywany dostawcy tożsamości SAML.
 
@@ -2133,6 +2158,15 @@
 
           Jeśli to ustawienie jest wyłączone, ta funkcja nie będzie dostępna.</translation>
 <translation id="7275334191706090484">Zakładki zarządzane</translation>
+<translation id="729492886167634859">Ta zasada zawiera listę wartości procentowych określających, ile urządzeń z <ph name="PRODUCT_OS_NAME" /> w OU ma być aktualizowanych tygodniowo, począwszy od dnia wykrycia aktualizacji. Moment wykrycia jest późniejszy niż moment opublikowania, ponieważ może minąć trochę czasu pomiędzy opublikowaniem aktualizacji a sprawdzeniem jej dostępności przez urządzenie.
+
+      Kolejne wartości na tej liście określają procent urządzeń, których aktualizacja do nowej wersji powinna zakończyć się w n-tym tygodniu po wykryciu aktualizacji. Na przykład: jeśli aktualizacja zostanie wykryta dzisiaj, pierwsza wartość na tej liście określa procent urządzeń w tej jednostce OU, które powinny zostać zaktualizowane do tej wersji w ciągu tygodnia, licząc od dzisiaj. Druga wartość określa procent urządzeń w tej jednostce OU, które powinny zostać zaktualizowane do tej wersji w ciągu dwóch tygodni, licząc od dzisiaj itd.
+
+      Jeśli zasada zawiera jakąś wartość, aktualizacje będą ignorować zasadę <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> i zamiast niej stosować tę zasadę.
+
+      Jeśli ta lista jest pusta, wdrażanie etapowe nie będzie stosowane, a aktualizacje będą instalowane zgodnie z innymi zasadami dotyczącymi urządzeń.
+
+      Ta zasada nie ma zastosowania do przełączania kanałów.</translation>
 <translation id="7295019613773647480">Włącz obsługę nadzorowanych użytkowników</translation>
 <translation id="7301543427086558500">Określa listę alternatywnych URL-i, które umożliwiają uzyskanie wyników haseł z wyszukiwarki. Adresy URL powinny zawierać łańcuch <ph name="SEARCH_TERM_MARKER" /> używany do wskazania haseł do wyszukania.
 
@@ -2590,6 +2624,12 @@
 
           Przykładowe wzorce znajdziesz na https://www.chromium.org/developers/how-tos/chrome-frame-getting-started</translation>
 <translation id="8493645415242333585">Wyłącz zapisywanie historii przeglądarki</translation>
+<translation id="8498293625012059298">Konfigurowanie adresu URL do zmiany hasła (tylko schematy HTTP i HTTPS). Usługa ochrony haseł będzie kierować użytkowników na stronę pod tym adresem URL, by zmienili hasło, po wyświetleniu ostrzeżenia w przeglądarce.
+      Jeśli <ph name="PRODUCT_NAME" /> ma poprawnie rejestrować odciski cyfrowe nowych haseł na stronie zmiany hasła, strona powinna być zgodna z wytycznymi podanymi na https://www.chromium.org/developers/design-documents/create-amazing-password-forms
+
+      Jeśli to ustawienie jest włączone, po wyświetleniu ostrzeżenia w przeglądarce usługa ochrony haseł kieruje użytkowników na stronę pod tym adresem URL, by zmienili hasło.
+      Jeśli to ustawienie jest wyłączone lub nieskonfigurowane, usługa ochrony haseł kieruje użytkowników na stronę https://myaccounts.google.com, by zmienili hasło.
+      Ta zasada nie jest dostępna w systemach Windows niepołączonych z domeną <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Ustawienia domyślne (użytkownicy mogą zmienić)</translation>
 <translation id="8507835864888987300">Ustawia wersję docelową dla automatycznych aktualizacji.
 
@@ -2644,6 +2684,15 @@
       Jeśli zmienisz wartość tej zasady na Fałsz, nie będzie można uruchamiać nowych maszyn wirtualnych, ale już działające maszyny nie zostaną zamknięte.
       Jeśli zasada nie jest ustawiona na urządzeniu zarządzanym, nie można na nim uruchamiać maszyn wirtualnych.
       Na urządzeniach niezarządzanych można uruchamiać maszyny wirtualne.</translation>
+<translation id="8669669491594628013">Umożliwia sterowanie wyzwalaniem ostrzeżenia dotyczącego ochrony hasła. 
+Alerty dotyczące ochrony hasła ostrzegają użytkowników, gdy użyją swojego chronionego hasła na potencjalnie niebezpiecznych stronach.
+
+      Zasady „PasswordProtectionLoginURLs” i „PasswordProtectionChangePasswordURL” umożliwiają wskazanie hasła, które ma być chronione.
+
+      Jeśli ta zasada jest ustawiona na „PasswordProtectionWarningOff”, nie będą wyświetlane żadne ostrzeżenia dotyczące ochrony hasła.
+      Jeśli ta zasada jest ustawiona na „PasswordProtectionWarningOnPasswordReuse”, ostrzeżenie dotyczące ochrony hasła wyświetli się, gdy użytkownik użyje swojego chronionego hasła na stronie, której nie ma na białej liście.
+      Jeśli ta zasada jest ustawiona na „PasswordProtectionWarningOnPhishingReuse”, ostrzeżenie dotyczące ochrony hasła wyświetli się, gdy użytkownik użyje chronionego hasła na stronie wyłudzającej informacje.
+      Jeśli zasada nie jest skonfigurowana, usługa ochrony haseł będzie chronić tylko hasła do kont Google, a użytkownik może zmienić to ustawienie.</translation>
 <translation id="8672321184841719703">Wersja docelowa automatycznych aktualizacji</translation>
 <translation id="867410340948518937">U2F (Uniwersalne uwierzytelnianie dwuskładnikowe)</translation>
 <translation id="8685024486845674965">Ostrzeżenie dotyczące ochrony hasłem jest wyzwalane przez użycie tego samego hasła w innym miejscu</translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb
index 42b368fd..bdbebd65 100644
--- a/components/policy/resources/policy_templates_pt-BR.xtb
+++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -234,6 +234,13 @@
       Caso contrário, se for necessário manter a compatibilidade com um servidor com bugs, esta política pode ser definida como "tls1.1". Esta é uma medida temporária, e o servidor deve ser corrigido rapidamente.</translation>
 <translation id="1864269674877167562">Se esta política for definida como uma string em branco ou não for configurada, o <ph name="PRODUCT_OS_NAME" /> não mostrará uma opção de preenchimento automático durante o fluxo de login.
       Se esta política for definida como uma string representando um nome de domínio, o <ph name="PRODUCT_OS_NAME" /> mostrará uma opção de preenchimento automático durante o login do usuário, permitindo que o mesmo digite apenas seu nome de usuário sem a extensão de nome de domínio. O usuário poderá substituir essa extensão de nome de domínio.</translation>
+<translation id="1864382791685519617">Ativa a previsão de redes no <ph name="PRODUCT_NAME" /> e impede que os usuários alterem essa configuração.
+
+      Controla a pré-chamada de DNS, a pré-conexão de SSL e TCP e o pré-processamento de páginas da Web.
+
+      Se você configurar esta política, os usuários não poderão alterá-la ou substituí-la no <ph name="PRODUCT_NAME" />.
+
+      Se esta política não for configurada, a previsão de redes ficará ativada, e o usuário poderá alterá-la.</translation>
 <translation id="1865417998205858223">Principais permissões</translation>
 <translation id="186719019195685253">Ação a ser executada quando o tempo de inatividade for atingido durante operação com alimentação CA</translation>
 <translation id="187819629719252111">Permite o acesso a arquivos locais na máquina ao possibilitar que <ph name="PRODUCT_NAME" /> exiba caixas de diálogo de seleção de arquivos. Se ativar esta configuração, os usuários poderão abrir as caixas de diálogo de seleção de arquivos normalmente. Se desativar esta configuração, sempre que o usuário executar uma ação que possa gerar uma caixa de diálogo de seleção de arquivos (como importar favoritos, fazer o upload de arquivos, salvar links etc), uma mensagem será exibida em seu lugar, e será considerado como se o usuário houvesse clicado em "Cancelar" na caixa de diálogo de seleção de arquivos. Se esta configuração não for definida, os usuários poderão abrir caixas de diálogo de seleção de arquivos normalmente.</translation>
@@ -688,6 +695,7 @@
       Se esta política não for definida, a opção <ph name="PRINTERS_ALLOW_ALL" /> será adotada.
       </translation>
 <translation id="2908277604670530363">Número máximo de conexões simultâneas ao servidor proxy</translation>
+<translation id="2951386431828317490">Ativa o preenchimento automático de perfis</translation>
 <translation id="2956777931324644324">Esta política foi retirada de circulação a partir da versão 36 do <ph name="PRODUCT_NAME" />.
 
       Especifica se a extensão dos certificados vinculados ao domínio TLS deve ser ativada.
@@ -696,6 +704,7 @@
 <translation id="2957506574938329824">Não permite que nenhum site solicite acesso a dispositivos Bluetooth por meio da API Web Bluetooth</translation>
 <translation id="2957513448235202597">Tipo de conta para autenticação <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Regras de proxies ignoráveis</translation>
+<translation id="2960128438010718932">Cronograma de testes para aplicação de uma nova atualização</translation>
 <translation id="2960691910306063964">Ativar ou desativar autenticação sem PIN para hosts de acesso remoto</translation>
 <translation id="2976002782221275500">Especifica o período de inatividade do usuário após o qual a tela é escurecida no funcionamento com a energia da bateria.
 
@@ -736,6 +745,7 @@
       Independentemente de se ou como esta política está definida, a configuração de otimização de WPAD não pode ser alterada pelos usuários.</translation>
 <translation id="3072045631333522102">Protetor de tela a ser utilizado na tela de login no modo de varejo</translation>
 <translation id="3072847235228302527">Definir os Termos de Serviço para uma conta local do dispositivo</translation>
+<translation id="3077183141551274418">Ativa ou desativa os ciclos de vida de guias</translation>
 <translation id="3086995894968271156">Configura a política Cast Receiver no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Permite que você defina uma lista de padrões de URL que especificam sites que podem exibir imagens.
 
@@ -1287,6 +1297,11 @@
       Essas sugestões são buscadas remotamente nos servidores do Google.
 
       Se esta configuração for definida como falsa, as sugestões não serão buscadas nem exibidas.</translation>
+<translation id="4788252609789586009">Ativa o recurso de preenchimento automático do <ph name="PRODUCT_NAME" /> e permite que os usuários preencham automaticamente informações sobre cartão de crédito em formulários da Web usando informações previamente armazenadas.
+
+      Se esta configuração estiver desativada, o preenchimento automático nunca sugerirá ou preencherá informações sobre cartão de crédito, nem salvará outras informações de cartão de crédito que o usuário possa enviar ao navegar na Web.
+
+      Se esta configuração estiver ativada ou não tiver um valor definido, o usuário poderá controlar o recurso de preenchimento automático para cartões de crédito na IU.</translation>
 <translation id="4791031774429044540">Ativar o recurso de acessibilidade do cursor grande.
 
           Se esta política for definida como "verdadeira", o cursor grande estará sempre ativado.
@@ -1409,6 +1424,11 @@
       Se esta política é definida como "True", o <ph name="PRODUCT_OS_NAME" /> evita que o dispositivo seja iniciado no modo de desenvolvedor. O sistema se recusa a ser iniciado e mostra uma tela de erro quando o modo de desenvolvedor é ativado.
 
       Se esta não política não é definida ou é definida como "False", o modo de desenvolvedor permanece disponível para o dispositivo.</translation>
+<translation id="520403427390290017">O recurso de ciclos de vida de guias recupera a CPU e a memória associadas à execução de guias que não foram usadas por um longo período, primeiro acelerando-as, depois congelando-as e, finalmente, descartando-as.
+
+      Se a política for definida como "falsa", os ciclos de vida de guias serão desativados, e todas as guias funcionarão normalmente.
+
+      Se a política for definida como "verdadeira" ou não for especificada, os ciclos de vida de guias serão ativados.</translation>
 <translation id="5208240613060747912">Permite que você defina uma lista de padrões de URL que especificam sites sem permissão para exibir notificações. Se esta política for deixada sem definição, o valor padrão global será utilizado para todos os sites a partir da política "DefaultNotificationsSetting", caso esta tenha sido definida, ou a partir das configurações pessoais do usuário, caso não tenha sido definida.</translation>
 <translation id="5219844027738217407">Em apps Android, esta política afeta somente o microfone. Quando esta política é definida como true, o microfone é silenciado para todos os apps Android, sem exceções.</translation>
 <translation id="523505283826916779">Configurações de acessibilidade</translation>
@@ -1454,6 +1474,11 @@
 
           Se essa política for definida como falso, os usuários não poderão transmitir conteúdo para o dispositivo deles. Se essa política for definida como verdadeiro, os usuários poderão transmitir conteúdo. Se essa política não for definida, os usuários não poderão transmitir conteúdo para dispositivos Chrome OS inscritos, mas poderão transmitir para dispositivos não inscritos.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> trabalhe com os tipos de conteúdo a seguir</translation>
+<translation id="5360146044009867539">Ativa o recurso de preenchimento automático do <ph name="PRODUCT_NAME" /> e permite que os usuários preencham automaticamente informações sobre perfil e endereço em formulários da Web usando informações previamente armazenadas.
+
+      Se essa configuração estiver desativada, o preenchimento automático nunca sugerirá ou preencherá informações sobre endereço, nem salvará outras informações de endereço que o usuário possa enviar ao navegar na Web.
+
+      Se essa configuração estiver ativada ou não tiver um valor definido, o usuário poderá controlar o recurso de preenchimento automático para endereços na IU.</translation>
 <translation id="5365946944967967336">Exibir o botão da Página inicial na barra de ferramentas</translation>
 <translation id="5366745336748853475">Permite que você defina uma lista de padrões de URL que especifique sites para os quais um certificado de cliente é selecionado automaticamente na tela de login do quadro que hospeda o fluxo SAML, se o site solicitar um certificado. Um exemplo de uso é a configuração de um certificado de dispositivos que será apresentado ao IdP SAML.
 
@@ -2138,6 +2163,15 @@
 
           Se esta definição estiver desativada, esse recurso não fica disponível.</translation>
 <translation id="7275334191706090484">Favoritos gerenciados</translation>
+<translation id="729492886167634859">Esta política define uma lista de porcentagens que determina a fração dos dispositivos <ph name="PRODUCT_OS_NAME" /> na UO a ser atualizada semanalmente a partir do dia em que a atualização é descoberta pela primeira vez. A descoberta acontece após a publicação da atualização, já que o dispositivo pode levar um tempo para procurar por atualizações.
+
+      O valor determinado na lista será usado como a porcentagem de dispositivos que devem completar a atualização para a versão seguinte na semana após a descoberta da atualização. Se uma atualização for descoberta hoje, por exemplo, o primeiro valor na lista definirá a porcentagem de dispositivos na UO que devem ser atualizados para a nova versão daqui a uma semana. O segundo valor definirá a porcentagem de dispositivos na UO que devem ser atualizados daqui a duas semanas, e assim sucessivamente.
+
+      Se houver um valor definido para esta política, as atualizações ignorarão a política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> e seguirão esta política.
+
+      Se a lista estiver vazia, não haverá uma fase de testes, e as atualizações serão aplicadas de acordo com outras políticas do dispositivo.
+
+      Esta política não se aplica a trocas de canais.</translation>
 <translation id="7295019613773647480">Ativar usuários supervisionados</translation>
 <translation id="7301543427086558500">Especifica uma lista de URLs alternativos que podem ser usados para extrair termos de pesquisa do mecanismo de pesquisa. Os URLs devem conter a sequência <ph name="SEARCH_TERM_MARKER" />, que será usada para extrair os termos de pequisa.
 
@@ -2586,6 +2620,12 @@
 
           Para ver exemplos de padrões, acesse http://www.chromium.org/developers/how-tos/chrome-frame-getting-started (link em inglês).</translation>
 <translation id="8493645415242333585">Desativar o salvamento do histórico do navegador</translation>
+<translation id="8498293625012059298">Configura o URL de alteração de senha (somente para esquemas HTTP e HTTPS). O serviço de proteção de senhas encaminhará os usuários para este URL para que alterem a própria senha após receberem um aviso no navegador.
+      Para que o <ph name="PRODUCT_NAME" /> capture corretamente a nova impressão digital de senha na página de alteração de senha, certifique-se de que sua página de alteração de senha siga as diretrizes que constam em https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Se esta configuração estiver ativada, o serviço de proteção de senhas encaminhará os usuários a este URL para que alterem a própria senha após receberem um aviso no navegador.
+      Se esta configuração estiver desativada ou não for configurada, o serviço de proteção de senhas encaminhará os usuários para https://myaccounts.google.com para a alteração da senha.
+      Esta política não está disponível em instâncias do Windows que não sejam vinculadas a um domínio <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Configurações padrão (podem ser substituídas pelos usuários)</translation>
 <translation id="8507835864888987300">Define a versão de destino para Atualizações automáticas.
 
@@ -2639,6 +2679,14 @@
       Quando esta política é alterada para falsa, ela é aplicada à inicialização de novas máquinas virtuais, mas não ao encerramento das máquinas virtuais que já estejam em execução.
       Quando esta política não é definida em um dispositivo gerenciado, o dispositivo não pode executar máquinas virtuais.
       Dispositivos não gerenciados podem executar máquinas virtuais.</translation>
+<translation id="8669669491594628013">Permite que você controle o acionamento do aviso de proteção de senha. A proteção de senha alerta o usuário quando ele reutiliza a senha protegida dele em sites possivelmente suspeitos.
+
+      Você pode usar as políticas "PasswordProtectionLoginURLs" e "PasswordProtectionChangePasswordURL" para configurar quais senhas quer proteger.
+
+      Se esta política for definida como "PasswordProtectionWarningOff", nenhum aviso de proteção de senha será exibido.
+      Se esta política for definida como "PasswordProtectionWarningOnPasswordReuse", o aviso de proteção de senha será exibido quando o usuário reutilizar as senhas do Google em sites que não estejam na lista de permissões.
+      Se esta política for definida como "PasswordProtectionWarningOnPhishingReuse", o aviso de proteção de senha será exibido quando o usuário reutilizar as senhas do Google em sites de phishing.
+      Se esta política não for definida, o serviço de proteção de senhas protegerá apenas as senhas do Google, mas o usuário poderá alterar essa configuração.</translation>
 <translation id="8672321184841719703">Versão de atualização automática de destino</translation>
 <translation id="867410340948518937">Segundo fator universal (U2F, na sigla em inglês)</translation>
 <translation id="8685024486845674965">O aviso de proteção de senha é acionado pela reutilização da senha</translation>
diff --git a/components/policy/resources/policy_templates_pt-PT.xtb b/components/policy/resources/policy_templates_pt-PT.xtb
index 6068d7c..8105d8e 100644
--- a/components/policy/resources/policy_templates_pt-PT.xtb
+++ b/components/policy/resources/policy_templates_pt-PT.xtb
@@ -239,6 +239,13 @@
       Caso contrário, se for necessário manter a compatibilidade com um servidor com erros, é possível definir esta política para "tls1.1". Esta é uma medida temporária e o servidor deve ser reparado rapidamente.</translation>
 <translation id="1864269674877167562">Se esta política for definida para uma string em branco ou não for configurada, o <ph name="PRODUCT_OS_NAME" /> não apresenta uma opção de preenchimento automático durante o fluxo de início de sessão do utilizador.
       Se esta política for definida para uma string que represente um nome de domínio, o <ph name="PRODUCT_OS_NAME" /> apresenta uma opção de preenchimento automático durante o início de sessão do utilizador, o que permite ao utilizador escrever apenas o seu nome de utilizador sem a extensão do nome do domínio. O utilizador pode substituir esta extensão do nome do domínio.</translation>
+<translation id="1864382791685519617">Ativa a previsão de rede no <ph name="PRODUCT_NAME" /> e impede que os utilizadores alterem esta definição.
+
+      Isto controla a Obtenção prévia de DNS, mas também a ligação e a composição prévias de TCP e SSL de páginas Web.
+
+      Se definir esta política, os utilizadores não podem alterar nem substituir esta definição no <ph name="PRODUCT_NAME" />.
+
+      Se esta política permanecer por definir, a previsão de rede é ativada, mas o utilizador pode alterá-la.</translation>
 <translation id="1865417998205858223">Autorizações principais</translation>
 <translation id="186719019195685253">Ação a executar quando o atraso de inatividade é atingido e estiver a ser utilizada a energia CA</translation>
 <translation id="187819629719252111">Permite aceder a ficheiros locais no computador, ao permitir que o <ph name="PRODUCT_NAME" /> apresente caixas de diálogo de seleção de ficheiros. Se ativar esta definição, os utilizadores poderão abrir caixas de diálogo de seleção de ficheiros normalmente. Se desativar esta definição, sempre que os utilizadores efetuarem uma ação que origine uma caixa de diálogo de seleção de ficheiros (como importar marcadores, carregar ficheiros, guardar links, etc.), aparecerá uma mensagem e assume-se que os utilizadores clicaram em Cancelar na caixa de diálogo. Se esta definição não for definida, os utilizadores poderão abrir as caixas de diálogo de seleção de ficheiros normalmente.</translation>
@@ -701,6 +708,7 @@
       Se esta política não estiver definida, é assumida a opção <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Número máximo de ligações simultâneas ao servidor proxy</translation>
+<translation id="2951386431828317490">Ativar o Preenchimento automático para perfis</translation>
 <translation id="2956777931324644324">Esta política foi retirada a partir da versão 36 do <ph name="PRODUCT_NAME" />.
 
       Especifica se a extensão de certificados de vinculação ao domínio TLS deveria ser ativada.
@@ -709,6 +717,7 @@
 <translation id="2957506574938329824">Não permitir que os sites solicitem acesso a dispositivos Bluetooth através da API Web Bluetooth</translation>
 <translation id="2957513448235202597">Tipo de conta para a autenticação <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Regras para ignorar o proxy</translation>
+<translation id="2960128438010718932">A agenda experimental para aplicar uma nova atualização.</translation>
 <translation id="2960691910306063964">Ativar ou desativar a autenticação sem PIN para anfitriões de acesso remoto</translation>
 <translation id="2976002782221275500">Especifica o período de tempo sem atividade por parte do utilizador após o qual o ecrã escurece quando o dispositivo está a utilizar a energia da bateria.
 
@@ -749,6 +758,7 @@
       Independentemente de a política estar definida ou de como está definida, a definição da otimização WPAD não pode ser alterada pelos utilizadores.</translation>
 <translation id="3072045631333522102">Proteção de ecrã a utilizar no ecrã de início de sessão no modo de retalho</translation>
 <translation id="3072847235228302527">Definir os Termos de Utilização para uma conta local do dispositivo</translation>
+<translation id="3077183141551274418">Ativa ou desativa os ciclos de vida dos separadores.</translation>
 <translation id="3086995894968271156">Configura o Recetor do Cast no <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Permite definir uma lista de padrões de URL que especificam os sites autorizados a apresentar imagens.
 
@@ -1302,6 +1312,11 @@
       Essas sugestões são obtidas remotamente a partir dos servidores da Google.
 
       Se esta definição estiver definida como falsa, as sugestões não serão obtidas nem apresentadas.</translation>
+<translation id="4788252609789586009">Ativa a funcionalidade de Preenchimento automático do <ph name="PRODUCT_NAME" /> e permite que os utilizadores preencham automaticamente as informações de cartões de crédito em formulários Web ao utilizar informações armazenadas anteriormente.
+
+      Se esta definição estiver desativada, o Preenchimento automático nunca sugere nem preenche com informações de cartões de crédito e também não guarda informações adicionais de cartões de crédito que o utilizador pode enviar enquanto navega na Web.
+
+      Se esta definição estiver ativada ou não tiver qualquer valor, o utilizador pode controlar a funcionalidade de preenchimento automático para os cartões de crédito na IU.</translation>
 <translation id="4791031774429044540">Ativar a funcionalidade de acessibilidade do cursor grande.
 
           Se esta política estiver definida como verdadeira, o cursor grande estará sempre ativado.
@@ -1426,6 +1441,11 @@
       Se esta política for definida como Verdadeiro, o <ph name="PRODUCT_OS_NAME" /> impedirá o dispositivo de arrancar no modo de programador. O sistema recusar-se-á a arrancar e apresentará um ecrã de erro quando o botão do programador for ligado.
 
       Se esta política não for definida ou for definida para Falso, o modo de programador continuará disponível para o dispositivo.</translation>
+<translation id="520403427390290017">A funcionalidade de ciclos de vida dos separadores recupera a CPU e, finalmente, a memória associada à execução de separadores que não são utilizados durante um longo período de tempo, ao primeiro controlá-los e, em seguida, ao bloqueá-los e, por último, ao rejeitá-los.
+
+      Se a política estiver definida como falsa, os ciclos de vida dos separadores são desativados e todos os separadores continuam a ser executados normalmente.
+
+      Se a política estiver definida como verdadeira ou não estiver especificada, os ciclos de vida dos separadores são ativados.</translation>
 <translation id="5208240613060747912">Permite definir uma lista de padrões de URL que especificam os Web sites não autorizados a apresentar notificações. Se esta política não for definida, será utilizado o valor global predefinido para todos os Web sites, seja a partir da política "DefaultNotificationsSetting", caso esteja definida, ou a partir da configuração pessoal do utilizador.</translation>
 <translation id="5219844027738217407">Para aplicações Android, esta política afeta apenas o microfone. Se esta política estiver definida como verdadeira, o som do microfone é desativado para todas as aplicações Android, sem exceções.</translation>
 <translation id="523505283826916779">Definições de acessibilidade</translation>
@@ -1471,6 +1491,11 @@
 
           Se esta política estiver definida como falsa, os utilizadores não podem transmitir conteúdo para o dispositivo. Se esta política estiver definida como verdadeira, os utilizadores podem transmitir conteúdo. Se esta política não estiver definida, os utilizadores não podem transmitir conteúdo para os dispositivos do Chrome OS inscritos, mas podem fazê-lo para dispositivos não inscritos.</translation>
 <translation id="5330684698007383292">Permitir que o <ph name="PRODUCT_FRAME_NAME" /> processe os seguintes tipos de conteúdo</translation>
+<translation id="5360146044009867539">Ativa a funcionalidade de Preenchimento automático do <ph name="PRODUCT_NAME" /> e permite que os utilizadores preencham automaticamente informações de endereços e de perfis em formulários Web ao utilizar informações armazenadas anteriormente.
+
+      Se esta definição estiver desativada, o Preenchimento automático nunca sugere nem preenche com informações de endereços e também não guarda informações adicionais de endereços que o utilizador pode enviar enquanto navega na Web.
+
+      Se esta definição estiver ativada ou não tiver qualquer valor, o utilizador pode controlar a funcionalidade de preenchimento automático para os endereços na IU.</translation>
 <translation id="5365946944967967336">Mostrar o botão Página Inicial na barra de ferramentas</translation>
 <translation id="5366745336748853475">Permite especificar uma lista de padrões do URL que especificam sites para os quais é automaticamente selecionado um certificado de cliente no ecrã de início de sessão, no frame que aloja o fluxo SAML, se o site solicitar um certificado. Serve, por exemplo, para configurar um certificado ao nível do dispositivo que deve ser apresentado ao SAML IdP.
 
@@ -2159,6 +2184,15 @@
 
           Se esta definição estiver desativada, esta funcionalidade não estará disponível.</translation>
 <translation id="7275334191706090484">Marcadores Geridos</translation>
+<translation id="729492886167634859">Esta política define uma lista de percentagens que definem a fração de dispositivos <ph name="PRODUCT_OS_NAME" /> na UO a atualizar por semana, com início a partir do dia em que a atualização é detetada pela primeira vez. A hora da deteção é posterior à hora da publicação da atualização, uma vez que pode demorar algum tempo após a publicação da atualização até que o dispositivo verifique a existência de atualizações.
+
+      O enésimo valor na lista vai ser utilizado como a percentagem de dispositivos que devem concluir a atualização para a próxima versão na enésima semana após a deteção da atualização. Por exemplo, se uma atualização for detetada hoje, o primeiro valor na lista define a percentagem de dispositivos no UO que devem atualizar para essa versão no prazo de uma semana a partir de hoje. O segundo valor define a percentagem de dispositivos na UO que devem atualizar para essa versão no prazo de duas semanas a partir de hoje, etc.
+
+      Se existir algum valor definido para esta política, as atualizações ignoram a política <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> e seguem esta política.
+
+      Se esta lista estiver vazia, as atualizações não são experimentais e são aplicadas de acordo com as outras políticas do dispositivo.
+
+      Esta política não se aplica às mudanças de canais.</translation>
 <translation id="7295019613773647480">Ativar utilizadores supervisionados</translation>
 <translation id="7301543427086558500">Especifica uma lista de URLs alternativos que podem ser utilizados para extrair termos de pesquisa do motor de pesquisa. Os URLs devem conter a cadeia <ph name="SEARCH_TERM_MARKER" />, que será utilizada para extrair os termos de pesquisa.
 
@@ -2614,6 +2648,12 @@
 
           Para obter exemplos de padrões, consulte https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Desativar armazenamento do histórico de navegação</translation>
+<translation id="8498293625012059298">Configure o URL de alteração da palavra-passe (apenas esquemas HTTP e HTTPS). O serviço de proteção por palavra-passe envia os utilizadores para este URL para alterarem as respetivas palavras-passe após ser apresentado um aviso no navegador.
+      Para que o <ph name="PRODUCT_NAME" /> capture a nova impressão digital da palavra-passe corretamente nesta página de alteração da palavra-passe, certifique-se de que a sua página de início de sessão de alteração da palavra-passe segue as diretrizes apresentadas em https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Se esta definição estiver ativada, o serviço de proteção por palavra-passe envia os utilizadores para este URL para alterarem as respetivas palavras-passe após ser apresentado um aviso no navegador.
+      Se esta definição estiver desativada ou não estiver definida, o serviço de proteção por palavra-passe envia os utilizadores para https://myaccounts.google.com para alterarem as respetivas palavras-passe.
+      Esta política não está disponível em instâncias do Windows que não pertençam a um domínio do <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Predefinições (os utilizadores podem substituir)</translation>
 <translation id="8507835864888987300">Define uma versão de destino para as Atualizações automáticas.
 
@@ -2667,6 +2707,14 @@
       Quando esta política é alterada para falsa, aplica-se à inicialização de novas máquinas virtuais e não encerra as que já se encontram em execução.
       Quando esta política não está definida num dispositivo gerido, este não tem autorização para executar máquinas virtuais.
       Os dispositivos não geridos têm autorização para executar máquinas virtuais.</translation>
+<translation id="8669669491594628013">Permite controlar o acionamento do aviso de proteção por palavra-passe. A proteção por palavra-passe alerta os utilizadores quando reutilizarem as respetivas palavras-passe protegidas em sites potencialmente suspeitos.
+
+      Pode utilizar as políticas "PasswordProtectionLoginURLs" e "PasswordProtectionChangePasswordURL" para configurar a palavra-passe a proteger.
+
+      Se esta política estiver definida como "PasswordProtectionWarningOff", não é mostrado qualquer aviso de proteção por palavra-passe.
+      Se esta política estiver definida como "PasswordProtectionWarningOnPasswordReuse", o aviso de proteção por palavra-passe é mostrado quando o utilizador reutilizar a respetiva palavra-passe protegida num site que não tenha sido adicionado à lista de autorizações.
+      Se esta política estiver definida como "PasswordProtectionWarningOnPhishingReuse", o aviso de proteção por palavra-passe é mostrado quando o utilizador reutilizar a respetiva palavra-passe protegida num site de phishing.
+      Se esta política não for definida, o serviço de proteção por palavra-passe apenas protege as palavras-passe Google, mas o utilizador pode alterar esta definição.</translation>
 <translation id="8672321184841719703">Versão de Atualização Automática de Destino</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">O aviso de proteção por palavra-passe é acionado pela reutilização da palavra-passe.</translation>
diff --git a/components/policy/resources/policy_templates_ro.xtb b/components/policy/resources/policy_templates_ro.xtb
index ef00cce..8bc19d0 100644
--- a/components/policy/resources/policy_templates_ro.xtb
+++ b/components/policy/resources/policy_templates_ro.xtb
@@ -239,6 +239,13 @@
       În caz contrar, dacă trebuie menținută compatibilitatea cu un server cu erori, politica poate fi setată la „tls1”. Aceasta este o măsură temporară, iar problemele de pe server trebuie să fie remediate rapid.</translation>
 <translation id="1864269674877167562">Dacă această politică este configurată ca un șir necompletat sau nu este configurată, <ph name="PRODUCT_OS_NAME" /> nu va afișa opțiunea de completare automată în timpul procesului de conectare a utilizatorului.
       Dacă această politică este configurată ca un șir care reprezintă un nume de domeniu, <ph name="PRODUCT_OS_NAME" /> va afișa opțiunea de completare automată în timp ce utilizatorul se conectează. Astfel, utilizatorul poate introduce doar numele său de utilizator, fără extensia numelui de domeniu. Utilizatorul va putea să suprascrie extensia numelui de domeniu.</translation>
+<translation id="1864382791685519617">Activează anticiparea în rețea în <ph name="PRODUCT_NAME" /> și împiedică utilizatorii să modifice această setare.
+
+      Aceasta controlează atât preluarea anticipată a datelor DNS, cât și conectarea anticipată TCP și SSL și încărcarea anticipată a paginilor web.
+
+      Dacă setezi această politică, utilizatorii nu pot modifica sau suprascrie această setare în <ph name="PRODUCT_NAME" />.
+
+      Dacă această politică nu este configurată, anticiparea în rețea va fi activată, dar utilizatorul o va putea modifica.</translation>
 <translation id="1865417998205858223">Permisiunile privind certificatele</translation>
 <translation id="186719019195685253">Acțiunea de urmat după trecerea intervalului de inactivitate dacă se utilizează o sursă de c.a.</translation>
 <translation id="187819629719252111">Permite accesul la fișierele locale de pe computer, permițând <ph name="PRODUCT_NAME" /> să afișeze casete de dialog pentru selectarea fișierelor. Dacă activați această setare, utilizatorii pot deschide casete de dialog pentru selectarea fișierelor ca de obicei. Dacă dezactivați această setare, ori de câte ori utilizatorul efectuează o acțiune care ar determina apariția unei casete de dialog pentru selectarea fișierelor (cum ar fi importarea marcajelor, încărcarea fișierelor, salvarea linkurilor etc.), este afișat un mesaj și se presupune că utilizatorul a făcut clic pe Anulați în caseta de dialog. Dacă această setare nu este setată, utilizatorii pot deschide ca de obicei casetele de dialog pentru selectarea fișierelor.</translation>
@@ -697,6 +704,7 @@
       Dacă politica nu este configurată, se va folosi <ph name="PRINTERS_ALLOW_ALL" /> în mod prestabilit.
       </translation>
 <translation id="2908277604670530363">Numărul maxim de conexiuni simultane la serverul proxy</translation>
+<translation id="2951386431828317490">Activează completarea automată pentru profiluri</translation>
 <translation id="2956777931324644324">Această politică a fost retrasă începând cu <ph name="PRODUCT_NAME" /> versiunea 36.
 
       Specifică dacă extensia pentru certificatele TLS legate la domeniu trebuie să fie activată.
@@ -705,6 +713,7 @@
 <translation id="2957506574938329824">Nu permite niciunui site să solicite acces la dispozitivele Bluetooth prin API-ul Web Bluetooth</translation>
 <translation id="2957513448235202597">Tipul de cont pentru autentificarea <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Reguli de ocolire a proxy-ului</translation>
+<translation id="2960128438010718932">Programul de simulare pentru aplicarea unei noi actualizări</translation>
 <translation id="2960691910306063964">Activează sau dezactivează autentificarea fără cod PIN pentru gazdele de acces la distanță</translation>
 <translation id="2976002782221275500">Indică intervalul de timp fără intervenția utilizatorului după care luminozitatea ecranului este redusă atunci când dispozitivul funcționează pe baterie.
 
@@ -745,6 +754,7 @@
       Indiferent dacă politica este configurată sau nu și indiferent de modul în care este configurată, utilizatorii nu pot să modifice setarea privind optimizarea pentru WPAD.</translation>
 <translation id="3072045631333522102">Screen saver setat pentru ecranul de conectare în modul Vânzare</translation>
 <translation id="3072847235228302527">Setați Termenii și condițiile pentru un cont local de pe dispozitiv</translation>
+<translation id="3077183141551274418">Activează sau dezactivează ciclurile de viață ale filelor</translation>
 <translation id="3086995894968271156">Configurează Cast Receiver în <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Îți permite să setezi o listă de șabloane de adrese URL care specifică site-urile care au permisiunea să afișeze imagini.
 
@@ -1304,6 +1314,11 @@
       Aceste sugestii vor fi preluate de la distanță de pe serverele Google.
 
       Dacă setarea este dezactivată, nu se vor prelua și nu se vor afișa sugestii.</translation>
+<translation id="4788252609789586009">Activează funcția de completare automată din <ph name="PRODUCT_NAME" /> și permite utilizatorilor să completeze automat informațiile despre carduri de credit în formularele web folosind informațiile stocate anterior.
+
+      Dacă această setare este dezactivată, completarea automată nu va sugera și nu va completa niciodată informațiile despre carduri de credit, nici nu va salva informații suplimentare despre carduri de credit pe care utilizatorul le-ar putea trimite când navighează pe web.
+
+      Dacă setarea este activată sau nu are nicio valoare, utilizatorul va putea controla funcția de completare automată pentru carduri de credit în interfața de utilizare.</translation>
 <translation id="4791031774429044540">Activați funcția de accesibilitate pentru cursorul mare.
 
           Dacă această politică este activată, cursorul mare va fi întotdeauna activat.
@@ -1432,6 +1447,11 @@
       Dacă politica este activată, <ph name="PRODUCT_OS_NAME" /> nu va permite pornirea dispozitivului în modul pentru dezvoltatori. Sistemul va refuza pornirea și va afișa un ecran de eroare atunci când comutatorul modului pentru dezvoltatori este pornit.
 
       Dacă politica nu este configurată sau dacă este dezactivată, modul pentru dezvoltatori va fi în continuare disponibil pe dispozitiv.</translation>
+<translation id="520403427390290017">Funcția privind ciclurile de viață ale filelor revendică unitatea CPU și, în final, memoria asociată filelor deschise care n-au fost folosite mult timp. Pentru aceasta, întâi le limitează, apoi le îngheață și în final renunță la ele.
+
+      Dacă politica este dezactivată, ciclurile de viață ale filelor sunt dezactivate și toate filele vor fi lăsate să ruleze normal.
+
+      Dacă politica este activată sau nu este specificată, ciclurile de viață ale filelor sunt activate.</translation>
 <translation id="5208240613060747912">Vă permite să setați o listă de modele pentru adresele URL ce specifică site-urile care nu au permisiunea să afișeze notificări. Dacă această politică nu este setată, valoarea prestabilită la nivel global va fi folosită pentru toate site-urile, fie din politica „DefaultNotificationsSetting”, în cazul în care aceasta este setată, fie din configurația personală a utilizatorului, în caz contrar.</translation>
 <translation id="5219844027738217407">În cazul aplicațiilor Android, această politică afectează numai microfonul. Când politica este activată, microfonul este dezactivat pentru toate aplicațiile Android, fără excepții.</translation>
 <translation id="523505283826916779">Setări de accesibilitate</translation>
@@ -1477,6 +1497,11 @@
 
           Dacă această politică este dezactivată, utilizatorii nu vor putea să proiecteze conținut pe dispozitivul lor. Dacă această politică este activată, utilizatorii pot să proiecteze conținut. Dacă această politică nu este configurată, utilizatorii nu pot să proiecteze conținut pe dispozitivele cu sistemul de operare Chrome înregistrate, însă pot să facă acest lucru pe dispozitive neînregistrate.</translation>
 <translation id="5330684698007383292">Permiteți ca <ph name="PRODUCT_FRAME_NAME" /> să gestioneze următoarele tipuri de conținut</translation>
+<translation id="5360146044009867539">Activează funcția de completare automată din <ph name="PRODUCT_NAME" /> și permite utilizatorilor să completeze automat informațiile despre carduri de credit și adrese în formularele web folosind informațiile stocate anterior.
+
+      Dacă această setare este dezactivată, completarea automată nu va sugera și nu va completa niciodată informațiile despre adrese information, nici nu va salva informațiile suplimentare despre adrese pe care utilizatorul le-ar putea trimite când navighează pe web
+
+      Dacă setarea este activată sau nu are nicio valoare, utilizatorul va putea controla funcția de completare automată pentru adrese în interfața de utilizare.</translation>
 <translation id="5365946944967967336">Afișează butonul Pagina principală în bara de instrumente</translation>
 <translation id="5366745336748853475">Îți permite să specifici o listă de șabloane de adrese URL care stabilesc site-urile pentru care este selectat automat un certificat de client pe ecranul de conectare din cadrul care găzduiește fluxul SAML, dacă site-ul solicită un astfel de certificat. Un exemplu de utilizare este configurarea unui certificat la nivel de dispozitiv care trebuie prezentat furnizorului de identitate SAML.
 
@@ -2163,6 +2188,15 @@
 
           Dacă setarea este dezactivată, această funcție nu va fi disponibilă.</translation>
 <translation id="7275334191706090484">Marcaje gestionate</translation>
+<translation id="729492886167634859">Această politică definește o listă de procente care vor defini proporția de dispozitive <ph name="PRODUCT_OS_NAME" /> din UO de actualizat pe săptămână, începând din ziua în care se descoperă actualizarea. Momentul descoperirii apare după momentul de publicare a actualizării, deoarece este posibil să treacă un timp după până când dispozitivul va căuta actualizări.
+
+      Valoarea „n” din listă va fi folosită ca procent de dispozitive care trebuie să încheie actualizarea la următoarea versiune în săptămâna „n” de după ce a fost descoperită actualizarea. De exemplu, dacă se descoperă astăzi o actualizare, prima valoare din listă definește procentul de dispozitive din UO care trebuie să treacă la versiunea respectivă în următoarea săptămână. A doua valoare definește procentul de dispozitive din UO care trebuie să treacă la versiunea respectivă în următoarele două săptămâni și așa mai departe.
+
+      Dacă există o valoare definită pentru această politică, actualizările vor ignora politica <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> și o vor urma pe aceasta.
+
+      Dacă lista este goală, nu va exista nicio simulare și actualizările vor fi aplicate conform altor politici privind dispozitivele.
+
+      Această politică nu se aplică pentru comutările de canal.</translation>
 <translation id="7295019613773647480">Activați utilizatorii monitorizați</translation>
 <translation id="7301543427086558500">Specifică o listă de adrese URL alternative care pot fi utilizate pentru a extrage termenii de căutare din motorul de căutare. Adresele URL trebuie să conțină șirul <ph name="SEARCH_TERM_MARKER" />, care va fi folosit pentru a extrage termenii de căutare.
 
@@ -2613,6 +2647,12 @@
 
           Pentru exemple de șabloane, accesează https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Dezactivează salvarea istoricului browserului</translation>
+<translation id="8498293625012059298">Configurează adresa URL de modificare a parolei (doar schemele HTTP și HTTPS). Serviciul de protecție prin parolă va direcționa utilizatorii la această adresă URL pentru a-și schimba parolele după ce au văzut un avertisment în browser.
+      Pentru ca <ph name="PRODUCT_NAME" /> să scaneze corect noua amprentă a parolei pe această pagină de schimbare a parolei, asigură-te că pagina de schimbare a parolei respectă regulile prevăzute în https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Dacă această setare este activată, serviciul de protecție prin parolă va direcționa utilizatorii la această adresă URL pentru a-și schimba parolele după ce au văzut un avertisment în browser.
+      Dacă această setare este dezactivată sau nu este configurată, serviciul de protecție prin parolă va direcționa utilizatorii la  https://myaccounts.google.com pentru a-și schimba parola.
+      Această politică nu este disponibilă în instanțele Windows care nu sunt asociate unui domeniu <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Setări prestabilite (utilizatorii le pot ignora)</translation>
 <translation id="8507835864888987300">Setează o versiune țintă pentru actualizările automate.
 
@@ -2666,6 +2706,14 @@
       Atunci când se dezactivează politica, ea se aplică mașinilor virtuale noi care pornesc, dar nu le închide pe cele care rulează deja.
       Atunci când politica nu este setată pe un dispozitiv gestionat, acesta nu are permisiunea de a rula mașini virtuale.
       Dispozitivele care nu sunt gestionate au permisiunea de a rula mașini virtuale.</translation>
+<translation id="8669669491594628013">Îți permite să controlezi declanșarea avertismentului privind protecția prin parolă. Protecția prin parolă îi avertizează pe utilizatori când refolosesc parola protejată pe site-uri potențial suspecte.
+
+      Poți folosi politicile „PasswordProtectionLoginURLs” și „PasswordProtectionChangePasswordURL” pentru a configura parola de protejat.
+
+      Dacă această politică este setată la „PasswordProtectionWarningOff”, nu se va afișa niciun avertisment privind protecția prin parolă.
+      Dacă această politică este setată la „PasswordProtectionWarningOnPasswordReuse”, avertismentul privind protecția prin parolă se va afișa când utilizatorul refolosește parola protejată pe un site care nu este trecut în lista albă.
+      Dacă această politică este setată la „PasswordProtectionWarningOnPhishingReuse”, avertismentul privind protecția prin parolă se va afișa când utilizatorul refolosește parola protejată pe un site de phishing.
+      Dacă această politică nu este configurată, serviciul de protecție prin parolă va proteja doar parolele Google, dar utilizatorul va putea modifica această setare.</translation>
 <translation id="8672321184841719703">Versiune țintă pentru actualizări automate</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Avertismentul privind protecția prin parolă este declanșat de refolosirea parolei</translation>
diff --git a/components/policy/resources/policy_templates_sk.xtb b/components/policy/resources/policy_templates_sk.xtb
index e242f38..a8e840e0 100644
--- a/components/policy/resources/policy_templates_sk.xtb
+++ b/components/policy/resources/policy_templates_sk.xtb
@@ -227,6 +227,13 @@
       Ak musí byť zachovaná kompatibilita s chybným serverom, pravidlo môže byť nastavené na hodnotu „tls1“. Ide o krátkodobé riešenie a príslušný server by mal byť urýchlene opravený.</translation>
 <translation id="1864269674877167562">Ak nie je toto pravidlo nakonfigurované alebo ak je nastavené na prázdny textový reťazec, <ph name="PRODUCT_OS_NAME" /> nezobrazí počas procesu prihlásenia možnosť automatického dopĺňania.
       Ak je toto pravidlo nastavené na textový reťazec, ktorý zastupuje názov domény, <ph name="PRODUCT_OS_NAME" /> zobrazí počas procesu prihlásenia možnosť automatického dopĺňania. Takto bude môcť používateľ zadávať iba používateľské meno bez prípony s názvom domény. Používateľ bude môcť príponu s názvom domény prepísať.</translation>
+<translation id="1864382791685519617">Povolí predpovedanie siete v prehliadači <ph name="PRODUCT_NAME" /> a zabráni používateľom toto nastavenie zmeniť.
+
+      Toto pravidlo ovláda spoločne s predbežným načítaním servera DNS aj predbežné pripojenie pomocou protokolu TCP a SSL a predbežné vykreslenie webových stránok.
+
+      Ak toto pravidlo nastavíte, používatelia ho v prehliadači <ph name="PRODUCT_NAME" /> nebudú môcť zmeniť.
+
+      Ak ho ponecháte nenastavené, predpovedanie siete bude aktívne, no používatelia budú môcť toto nastavenie zmeniť.</translation>
 <translation id="1865417998205858223">Kľúčové povolenia</translation>
 <translation id="186719019195685253">Akcia, ktorá sa má vykonať po uplynutí určitého času nečinnosti počas prevádzky s napájaním</translation>
 <translation id="187819629719252111">Umožňuje pristupovať k miestnym súborom v počítači tým, že prehliadaču <ph name="PRODUCT_NAME" /> umožní zobrazenie dialógových okien na výber súboru.
@@ -698,6 +705,7 @@
       Ak toto pravidlo nenastavíte, bude platiť možnosť <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Maximálny počet súčasných pripojení k serveru proxy</translation>
+<translation id="2951386431828317490">Povoliť Automatické dopĺňanie pre profily</translation>
 <translation id="2956777931324644324">Podpora tohto pravidla bola ukončená vo verzii 36 aplikácie <ph name="PRODUCT_NAME" />.
 
       Určuje, či má byť povolené rozšírenie pre certifikáty TLS typu domain-bound.
@@ -706,6 +714,7 @@
 <translation id="2957506574938329824">Nepovoliť žiadnemu webu požadovať prístup k zariadeniam Bluetooth prostredníctvom rozhrania Web Bluetooth API</translation>
 <translation id="2957513448235202597">Typ účtu pre overenie <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Pravidlá vynechania servera proxy</translation>
+<translation id="2960128438010718932">Rozvrh etáp zavádzania novej aktualizácie</translation>
 <translation id="2960691910306063964">Povolenie alebo zakázanie overenia totožnosti bez použitia kódu PIN pre hostiteľov vzdialeného prístupu</translation>
 <translation id="2976002782221275500">Určuje dobu nečinnosti používateľa, po ktorej sa pri napájaní z batérie zníži jas obrazovky.
 
@@ -748,6 +757,7 @@
       Bez ohľadu na to, či je toto pravidlo nastavené, alebo na spôsob, akým bolo nastavené, nemôžu používatelia nastavenie optimalizácie WPAD zmeniť.</translation>
 <translation id="3072045631333522102">Šetrič obrazovky, ktorý sa má použiť na prihlasovacej obrazovke v režime určenom pre predaj</translation>
 <translation id="3072847235228302527">Nastaviť Zmluvné podmienky pre miestny účet v zariadení</translation>
+<translation id="3077183141551274418">Povolí alebo zakáže životné cykly kariet</translation>
 <translation id="3086995894968271156">Konfigurácia prijímača Cast v systéme <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Umožňuje nastaviť zoznam vzorov webových adries určujúcich weby, ktoré môžu zobrazovať obrázky.
 
@@ -1316,6 +1326,11 @@
       Tieto návrhy sa načítajú vzdialene zo serverov Googlu.
 
       Ak toto pravidlo nastavíte na hodnotu false, návrhy sa nenačítajú ani zobrazia.</translation>
+<translation id="4788252609789586009">Povolí v prehliadači <ph name="PRODUCT_NAME" /> funkciu Automatické dopĺňanie, ktorá používateľom umožňuje automaticky dopĺňať údaje kreditných kariet do webových formulárov na základe predtým uložených informácií.
+
+      Ak toto nastavenie deaktivujete, Automatické dopĺňanie nebude nikdy navrhovať ani vyplňovať údaje kreditných kariet ani ukladať informácie o ďalších kartách, ktoré môže používateľ odoslať počas prehliadania webu.
+
+      Ak ho povolíte alebo preň nenastavíte žiadnu hodnotu, používateľ bude môcť ovládať funkciu Automatické dopĺňanie pre kreditné karty v používateľskom rozhraní.</translation>
 <translation id="4791031774429044540">Povolí veľký kurzor (funkcia na uľahčenie prístupu).
 
       Ak toto pravidlo povolíte, bude veľký kurzor vždy zapnutý.
@@ -1452,6 +1467,11 @@
 
       Ak toto pravidlo nastavíte na hodnotu Pravda, systém <ph name="PRODUCT_OS_NAME" /> zabráni zariadeniu, aby sa reštartovalo v režime pre vývojárov. Systém odmietne reštartovanie a ak je zapnutý prepínač pre vývojárov, zobrazí chybovú obrazovku.
       Ak toto pravidlo nenastavíte alebo ho nastavíte na hodnotu Nepravda, režim pre vývojárov bude na zariadení naďalej dostupný.</translation>
+<translation id="520403427390290017">Funkcia životných cyklov kariet obnovuje prostriedky procesora a nakoniec aj pamäť súvisiace s otvorenými kartami, ktoré sa veľmi dlho nepoužívali. Najprv ich spomalí, potom zmrazí a nakoniec zahodí.
+
+      Ak toto pravidlo nastavíte na hodnotu False, životné cykly kariet budú zakázané a všetky karty budú fungovať ako normálne.
+
+      Ak ho nastavíte na hodnotu True alebo ho nenastavíte, bude funkcia životných cyklov kariet povolená.</translation>
 <translation id="5208240613060747912">Umožňuje nastaviť zoznam vzorov webových adries určujúcich webové stránky, ktoré nemôžu zobrazovať upozornenia.
 
           Ak toto pravidlo ponecháte nenastavené, použije sa v prípade všetkých webových stránok globálna predvolená hodnota buď z pravidla „DefaultNotificationsSetting“ (ak je nastavené), alebo z osobnej konfigurácie používateľa.</translation>
@@ -1500,6 +1520,11 @@
 
           Ak toto pravidlo nastavíte na hodnotu False, používatelia nebudú môcť do svojho zariadenia prenášať obsah. Ak ho nastavíte na hodnotu True, používatelia budú môcť prenášať obsah. Ak ho nenastavíte, používatelia nebudú môcť prenášať obsah do registrovaných zariadení Chrome OS, ale v prípade iných zariadení to bude povolené.</translation>
 <translation id="5330684698007383292">Povoliť doplnku <ph name="PRODUCT_FRAME_NAME" /> spracovávať nasledujúce typy obsahu</translation>
+<translation id="5360146044009867539">Povolí v prehliadači <ph name="PRODUCT_NAME" /> funkciu Automatické dopĺňanie, ktorá používateľom umožňuje automaticky dopĺňať údaje profilu a adresy do webových formulárov na základe predtým uložených informácií.
+
+      Ak toto nastavenie deaktivujete, Automatické dopĺňanie nebude nikdy navrhovať ani vyplňovať údaje adresy ani ukladať informácie o ďalších adresách, ktoré môže používateľ odoslať počas prehliadania webu.
+
+      Ak ho povolíte alebo preň nenastavíte žiadnu hodnotu, používateľ bude môcť ovládať funkciu Automatické dopĺňanie pre adresy v používateľskom rozhraní.</translation>
 <translation id="5365946944967967336">Zobraziť tlačidlo Domov na paneli s nástrojmi</translation>
 <translation id="5366745336748853475">Umožňuje určiť zoznam vzorov webových adries označujúcich weby, v prípade ktorých sa na prihlasovacej obrazovke v rámci hosťujúcom postup SAML automaticky vyberie certifikát klienta, keď určitý web požaduje certifikát. Príklad využitia: Konfigurácia poskytovania certifikátu pre celé zariadenie v poskytovateľovi identity SAML.
 
@@ -2225,6 +2250,15 @@
 
           Ak je toto nastavenie zakázané, nebude táto funkcia k dispozícii.</translation>
 <translation id="7275334191706090484">Spravované záložky</translation>
+<translation id="729492886167634859">Toto pravidlo definuje zoznam percentuálnych hodnôt určujúcich časť zariadení so systémom <ph name="PRODUCT_OS_NAME" /> v organizačnej jednotke, ktorá má byť každý týždeň aktualizovaná odo dňa prvého zistenia dostupnosti aktualizácie. Čas zistenia nasleduje po čase zverejnenia aktualizácie, pretože zariadenie môže skontrolovať dostupnosť aktualizácií až s určitým časovým odstupom po ich zverejnení.
+
+      N-tá hodnota v zozname bude použitá ako percento zariadení, ktoré by malo dokončiť aktualizáciu na ďalšiu verziu v n-tom týždni po zistení dostupnosti aktualizácie. Ak sa napríklad zistí dostupnosť aktualizácie dnes, potom prvá hodnota v zozname definuje percento zariadení v organizačnej jednotke, ktoré by sa malo aktualizovať na túto verziu do jedného týždňa od dnešného dňa. Druhá hodnota definuje percento zariadení v organizačnej jednotke, ktoré by sa malo aktualizovať na túto verziu do dvoch týždňov od dnešného dňa atď.
+
+      Ak pre toto pravidlo nastavíte určitú hodnotu, aktualizácie budú ignorovať pravidlo <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> a budú sa namiesto toho riadiť týmto pravidlom.
+
+      Ak je tento zoznam prázdny, nebude dochádzať k zavádzaniu po etapách a aktualizácie sa budú zavádzať podľa iných pravidiel zariadenia.
+
+      Toto pravidlo sa netýka zmien kanálov.</translation>
 <translation id="7295019613773647480">Povoliť kontrolovaných používateľov</translation>
 <translation id="7301543427086558500">Určuje zoznam alternatívnych webových adries, ktoré sa môžu použiť na extrahovanie hľadaných výrazov z vyhľadávačov. Webové adresy by mali obsahovať značku <ph name="SEARCH_TERM_MARKER" />, ktorá sa použije na extrahovanie hľadaných výrazov.
 
@@ -2687,6 +2721,12 @@
 
           Príklady vzorov nájdete na adrese http://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Zakázať ukladanie histórie prehliadača</translation>
+<translation id="8498293625012059298">Nastavuje webovú adresu na zmenu hesla (iba schémy HTTP a HTTPS). Služba ochrany heslom odkáže používateľov na túto webovú adresu, aby si tam po zobrazení upozornenia v prehliadači zmenili heslo.
+      Na to, aby služba <ph name="PRODUCT_NAME" /> správne zaznamenala digitálny odtlačok nového hesla na tejto stránke na zmenu hesla, musí táto stránka dodržiavať pokyny uvedené na adrese https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Ak toto nastavenie aktivujete, služba ochrany heslom odkáže používateľov na túto webovú adresu, aby si tam po zobrazení upozornenia v prehliadači zmenili heslo.
+      Ak je toto nastavenie zakázané alebo nie je nastavené, služba ochrany heslom odkáže používateľov na adresu https://myaccounts.google.com, aby si tam zmenili heslo.
+      Toto pravidlo nie je k dispozícii v inštanciách systému Windows, ktoré nie sú v doméne <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Predvolené nastavenia (používatelia ich môžu nahradiť)</translation>
 <translation id="8507835864888987300">Umožňuje nastaviť cieľovú verziu automatických aktualizácií.
 
@@ -2740,6 +2780,14 @@
       Keď ho zmeníte na hodnotu False, použije sa na začínajúce nové virtuálne počítače, ale nevypne tie, ktoré sú už spustené.
       Ak toto pravidlo nenastavíte v spravovanom zariadení, nebude môcť spúšťať virtuálne počítače.
       Nespravované zariadenia môžu spúšťať virtuálne počítače.</translation>
+<translation id="8669669491594628013">Umožňuje ovládať spustenie upozornenia v rámci ochrany heslom. Ochrana heslom upozorňuje používateľov, keď svoje chránené heslo opätovne použijú na potenciálne podozrivých weboch.
+
+      Pomocou pravidiel PasswordProtectionLoginURLs a PasswordProtectionChangePasswordURL môžete nakonfigurovať, ktoré heslo chcete chrániť.
+
+      Ak toto pravidlo nastavíte na možnosť PasswordProtectionWarningOff, nezobrazí sa žiadne upozornenie v rámci ochrany heslom.
+      Ak ho nastavíte na možnosť PasswordProtectionWarningOnPasswordReuse, upozornenie v rámci ochrany heslom sa zobrazí, keď používateľ opätovne použije heslo na webe, ktorý nebol pridaný na zoznam povolených webov.
+      Ak ho nastavíte na možnosť PasswordProtectionWarningOnPhishingReuse, upozornenie v rámci ochrany heslom sa zobrazí, keď používateľ opätovne použije chránené heslo na phishingovom webe.
+      Ak toto pravidlo nenastavíte, služba ochrany heslom bude chrániť iba heslá Google. Používateľ však bude môcť toto nastavenie zmeniť.</translation>
 <translation id="8672321184841719703">Cieľová verzia automatickej aktualizácie</translation>
 <translation id="867410340948518937">U2F (univerzálny druhý faktor)</translation>
 <translation id="8685024486845674965">Upozornenie ochrany heslom sa spúšťa po opätovnom použití hesla</translation>
diff --git a/components/policy/resources/policy_templates_sl.xtb b/components/policy/resources/policy_templates_sl.xtb
index 1ed0c05..791ba6e 100644
--- a/components/policy/resources/policy_templates_sl.xtb
+++ b/components/policy/resources/policy_templates_sl.xtb
@@ -240,6 +240,13 @@
       Če je treba ohraniti združljivost s strežnikom z napakami, je pravilnik lahko nastavljen na »tls1«. To je začasen ukrep in napake v strežniku je treba hitro odpraviti.</translation>
 <translation id="1864269674877167562">Če je ta pravilnik nastavljen na prazen niz ali ni nastavljen, sistem <ph name="PRODUCT_OS_NAME" /> med potekom prijave uporabnika ne bo prikazal možnosti samodokončanja.
       Če je ta pravilnik nastavljen na niz, ki predstavlja ime domene, bo <ph name="PRODUCT_OS_NAME" /> pri prijavi uporabnika prikazal možnost samodokončanja, s čimer bo uporabniku omogočeno, da vnese samo uporabniško ime brez končnice imena domene. Uporabnik bo lahko prepisal končnico tega imena domene.</translation>
+<translation id="1864382791685519617">Omogoča omrežno predvidevanje v brskalniku <ph name="PRODUCT_NAME" /> in uporabnikom preprečuje spreminjanje te nastavitve.
+
+      Ta pravilnik nadzira vnaprejšnji prenos podatkov DNS, vnaprejšnje povezovanje TCP in SSL ter vnaprejšnje upodabljanje spletnih strani.
+
+      Če nastavite ta pravilnik, uporabniki v brskalniku <ph name="PRODUCT_NAME" /> ne morejo spremeniti ali preglasiti te nastavitve.
+
+      Če ta pravilnik ni nastavljen, bo to omogočeno, vendar bo lahko uporabnik to spremenil.</translation>
 <translation id="1865417998205858223">Glavna dovoljenja</translation>
 <translation id="186719019195685253">Dejanje, ki se izvede, ko je pri napajanju iz električnega omrežja dosežena zakasnitev zaradi nedejavnosti</translation>
 <translation id="187819629719252111">Omogoča dostop do lokalnih datotek v računalniku, tako da programu <ph name="PRODUCT_NAME" /> dovoli prikaz pogovornih oken za izbiro datotek.
@@ -718,6 +725,7 @@
       Če ta pravilnik ni nastavljen, se predvideva uporaba pravilnika <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Največje dovoljeno število hkratnih povezav s strežnikom proxy</translation>
+<translation id="2951386431828317490">Omogočanje samodejnega izpolnjevanja za profile</translation>
 <translation id="2956777931324644324">Ta pravilnik se ne uporablja od uveljavitve različice brskalnika <ph name="PRODUCT_NAME" /> 36.
 
       Določa, ali mora biti razširitev za potrdila, domensko vezana na TLS, omogočena.
@@ -726,6 +734,7 @@
 <translation id="2957506574938329824">Ne dovoli nobenemu spletnemu mestu zahtevanja dostopa do naprav Bluetooth prek API-ja za Web Bluetooth</translation>
 <translation id="2957513448235202597">Vrsta računa za preverjanje pristnosti z razširitvijo <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Pravila, kdaj se obide proxy</translation>
+<translation id="2960128438010718932">Produkcijski razpored za uveljavljanje nove posodobitve</translation>
 <translation id="2960691910306063964">Omogočanje ali onemogočanje preverjanja pristnosti brez kode PIN za gostitelje za oddaljeni dostop</translation>
 <translation id="2976002782221275500">Določa trajanje uporabnikove nedejavnosti, po preteku katere se zaslon zatemni, če se napaja iz akumulatorja.
 
@@ -768,6 +777,7 @@
       Neodvisno od tega, ali je pravilnik nastavljen oziroma kako je nastavljen, uporabniki ne morejo spremeniti nastavitve optimizacije WPAD.</translation>
 <translation id="3072045631333522102">Ohranjevalnik zaslona na zaslonu za prijavo v maloprodajnem načinu</translation>
 <translation id="3072847235228302527">Nastavitev pogojev storitve za lokalni račun v napravi.</translation>
+<translation id="3077183141551274418">Omogoči ali onemogoči življenjske cikle zavihkov</translation>
 <translation id="3086995894968271156">Konfiguriranje sprejemnika za Google Cast v sistemu <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Omogoča nastavitev seznama vzorcev za URL-je, s katerim so določena spletna mesta, ki smejo prikazati slike.
 
@@ -1347,6 +1357,11 @@
       Ti predlogi se prenesejo oddaljeno iz Googlovih strežnikov.
 
       Če je ta nastavitev onemogočena, se predlogi ne bodo prenesli ali prikazali.</translation>
+<translation id="4788252609789586009">Omogoči funkcijo za samodejno izpolnjevanje v brskalniku <ph name="PRODUCT_NAME" /> in uporabnikom omogoča samodejno izpolnjevanje podatkov o kreditni kartici v spletnih obrazcih s predhodno shranjenimi podatki.
+
+      Če je ta nastavitev onemogočena, samodejno izpolnjevanje ne bo nikoli predlagalo ali vneslo podatkov o kreditni kartici in prav tako ne bo shranilo dodatnih podatkov o kreditni kartici, ki jih uporabnik lahko pošlje med brskanjem v spletu.
+
+      Če je ta nastavitev omogočena ali nima nastavljene vrednosti, bo uporabnik lahko nadziral samodejno izpolnjevanje za kreditne kartice v uporabniškem vmesniku.</translation>
 <translation id="4791031774429044540">Omogočanje funkcije velikega kazalca za ljudi s posebnimi potrebami.
 
           Če ta pravilnik vklopite, bo prikaz velikega kazalca vedno omogočen.
@@ -1485,6 +1500,11 @@
       Če je ta pravilnik vklopljen, bo sistem <ph name="PRODUCT_OS_NAME" /> preprečil, da bi se naprava zagnala v načinu za razvijalce. Če je stikalo za razvijalce vklopljeno, sistem ne bo dovolil zagona in bo prikazal zaslon z napako.
 
       Če ta pravilnik ni nastavljen ali je izklopljen, bo način za razvijalce v napravi še naprej na voljo.</translation>
+<translation id="520403427390290017">Funkcija življenjskih ciklov povrne sredstva CPE-ja, sčasoma pa tudi pomnilnika, povezana z zavihki, ki se izvajajo, vendar že dalj časa niso bili uporabljeni, in sicer tako, da jim najprej omeji delovanje, nato jih zamrzne, na koncu pa zavrže.
+
+      Če je pravilnik onemogočen, so življenjski cikli zavihkov onemogočeni in vsi zavihki se bodo še naprej normalno izvajali.
+
+      Če je pravilnik omogočen ali ni opredeljen, so življenjski cikli zavihkov omogočeni.</translation>
 <translation id="5208240613060747912">Omogoča nastavitev seznama vzorcev URL-jev, s katerim so določena spletna mesta, ki jim ni dovoljeno prikazovati obvestil.
 
           Če ta pravilnik ni nastavljen, bo za vsa spletna mesta uporabljena splošna privzeta vrednost iz pravilnika »DefaultNotificationsSetting«, kadar je ta nastavljen, ali iz uporabnikove osebne konfiguracije, kadar pravilnik »DefaultImagesSetting« ni nastavljen.</translation>
@@ -1532,6 +1552,11 @@
 
           Če je ta pravilnik onemogočen, uporabniki ne bodo mogli predvajati vsebine v tej napravi. Če je pravilnik omogočen, je uporabnikom dovoljeno predvajanje vsebine. Če ta pravilnik ni nastavljen, uporabnikom ni dovoljeno predvajati vsebine v včlanjenih napravah OS Chrome, vendar jo lahko predvajajo v napravah, ki niso včlanjene.</translation>
 <translation id="5330684698007383292">Dovoli, da <ph name="PRODUCT_FRAME_NAME" /> obravnava te vrste vsebine.</translation>
+<translation id="5360146044009867539">Omogoči funkcijo za samodejno izpolnjevanje v brskalniku <ph name="PRODUCT_NAME" /> in uporabnikom omogoča samodejno izpolnjevanje podatkov o profilu in naslovu v spletnih obrazcih s predhodno shranjenimi podatki.
+
+      Če je ta nastavitev onemogočena, samodejno izpolnjevanje ne bo nikoli predlagalo ali vneslo podatkov o naslovu in prav tako ne bo shranilo dodatnih podatkov o naslovu, ki jih uporabnik lahko pošlje med brskanjem v spletu.
+
+      Če je ta nastavitev omogočena ali nima nastavljene vrednosti, bo uporabnik lahko nadziral samodejno izpolnjevanje za naslove v uporabniškem vmesniku.</translation>
 <translation id="5365946944967967336">V orodni vrstici pokaži gumb »Domov«</translation>
 <translation id="5366745336748853475">Omogoča, da določite seznam vzorcev URL-jev, ki določajo spletna mesta, za katera je potrdilo odjemalca samodejno izbrano na zaslonu za prijavo v okviru, v katerem gostuje potek SAML, če spletno mesto zahteva potrdilo. Primer uporabe je konfiguriranje potrdila v napravi, ki je predloženo SAML IdP.
 
@@ -2257,6 +2282,15 @@
 
           Če je ta nastavitev onemogočena, ta funkcija ne bo na voljo.</translation>
 <translation id="7275334191706090484">Upravljani zaznamki</translation>
+<translation id="729492886167634859">Ta pravilnik opredeljuje seznam odstotkov, ki določajo delež naprav s sistemom <ph name="PRODUCT_OS_NAME" /> v organizacijski enoti, ki prejmejo posodobitev tedensko od dneva, ko je posodobitev prvič odkrita. Čas odkrivanja je poznejši od časa objave posodobitve, saj lahko po objavi posodobitve preteče nekaj časa, preden naprava preveri, ali je na voljo posodobitev.
+
+      N-ta vrednost na seznamu bo uporabljena kot odstotek naprav, ki morajo opraviti posodobitev na naslednjo različico v n-tem tednu po odkritju posodobitve. Če je na primer posodobitev odkrita danes, prva vrednost na seznamu določa odstotek naprav v organizacijski enoti, ki morajo posodobiti na dano posodobitev v enem tednu od današnjega dneva. Druga vrednost določa odstotek naprav v organizacijski enoti, ki morajo posodobiti na dano posodobitev v 2 tednih od današnjega dneva in tako naprej.
+
+      Če je za ta pravilnik določena vrednost, posodobitve prezrejo pravilnik <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> in upoštevajo ta pravilnik.
+
+      Če je seznam prazen, ni priprav in posodobitve bodo uveljavljene glede na druge pravilnike naprave.
+
+      Ta pravilnik se ne uporablja pri preklapljanju med kanali.</translation>
 <translation id="7295019613773647480">Omogoči zaščitene uporabnike</translation>
 <translation id="7301543427086558500">Določa seznam nadomestnih URL-jev, ki jih je mogoče uporabiti za pridobivanje iskalnih izrazov iz iskalnika. URL-ji morajo vsebovati niz <ph name="SEARCH_TERM_MARKER" />, ki bo uporabljen za pridobivanje iskalnih izrazov.
 
@@ -2721,6 +2755,13 @@
 
           Primere vzorcev si lahko ogledate na https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Onemogoči shranjevanje zgodovine brskalnika</translation>
+<translation id="8498293625012059298">Konfiguriranje URL-ja za spreminjanje gesla (samo sheme HTTP in HTTPS). 
+Storitev za zaščito gesla po prikazu opozorila v brskalniku pošlje uporabnike na ta URL, da spremenijo geslo.
+      Če želite, da <ph name="PRODUCT_NAME" /> pravilno zajame prstni odtis novega gesla na tej strani za spreminjanje gesla, poskrbite, da je stran za spremembo gesla skladna s smernicami na naslovu https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Če je ta nastavitev omogočena, storitev za zaščito gesel po prikazu opozorila v brskalniku pošlje uporabnike na ta URL, da spremenijo gesla.
+      Če je ta nastavitev onemogočena ali ni nastavljena, storitev za zaščito gesel pošlje uporabnike na naslov https://myaccounts.google.com.
+      Ta pravilnik ni na voljo v primerkih sistema Windows, ki niso pridruženi domeni <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Privzete nastavitve (uporabniki jih lahko preglasijo)</translation>
 <translation id="8507835864888987300">Določi ciljno različico za samodejne posodobitve.
 
@@ -2774,6 +2815,14 @@
       Če je nastavitev tega pravilnika spremenjena na »False«, se uporabi pri zagonu novih navideznih računalnikov, navideznih računalnikov, ki se že izvajajo, pa ne zaustavi.
       Če ta pravilnik ni nastavljen v upravljani napravi, v napravi ni dovoljeno izvajanje navideznih računalnikov.
       V napravah, ki niso upravljane, je dovoljeno izvajanje navideznih računalnikov.</translation>
+<translation id="8669669491594628013">Omogoča, da nadzirate sprožitev opozorila zaščite z geslom. Zaščita z geslom opozori uporabnike, ko zaščiteno geslo znova uporabijo na spletnih mestih, ki so morda sumljiva.
+
+      Pravilnika »PasswordProtectionLoginURLs« in »PasswordProtectionChangePasswordURL« lahko uporabite za konfiguriranje, katero geslo naj bo zaščiteno.
+
+      Če je ta pravilnik nastavljen na »PasswordProtectionWarningOff«, ni prikazano nobeno opozorilo zaščite z geslom.
+      Če je ta pravilnik nastavljen na »PasswordProtectionWarningOnPasswordReuse«, je opozorilo zaščite z geslom prikazano, ko uporabnik znova uporabi zaščiteno geslo na spletnem mestu, ki ni uvrščeno na seznam dovoljenih.
+      Če je ta pravilnik nastavljen na »PasswordProtectionWarningOnPhishingReuse«, je opozorilo zaščite z geslom prikazano, ko uporabnik znova uporabi zaščiteno geslo na spletnem mestu z lažnim predstavljanjem.
+      Če ta pravilnik ni nastavljen, storitev zaščite z geslom ščiti samo gesla za Google, vendar lahko uporabnik to nastavitev spremeni.</translation>
 <translation id="8672321184841719703">Ciljna različica za samodejne posodobitve</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Opozorilo zaščite z geslom sproži vnovična uporaba gesla</translation>
diff --git a/components/policy/resources/policy_templates_sr.xtb b/components/policy/resources/policy_templates_sr.xtb
index 52ba1ab..882a73f 100644
--- a/components/policy/resources/policy_templates_sr.xtb
+++ b/components/policy/resources/policy_templates_sr.xtb
@@ -239,6 +239,13 @@
       У супротном, ако мора да се одржава компатибилност са сервером који садржи пуно грешака, можете да подесите ове смернице на „tls1.1“. То је привремена мера и треба брзо поправити сервер.</translation>
 <translation id="1864269674877167562">Ако подесите ове смернице на празан стринг или их не конфигуришете, <ph name="PRODUCT_OS_NAME" /> неће приказивати опцију за аутоматско довршавање у току пријављивања корисника.
       Ако подесите ове смернице на стринг који представља име домена, <ph name="PRODUCT_OS_NAME" /> ће приказивати опцију за аутоматско довршавање током пријављивања корисника, што кориснику омогућава да унесе само корисничко име без наставка са именом домена. Корисник ће моћи да замени овај наставак са именом домена.</translation>
+<translation id="1864382791685519617">Омогућавају предвиђање мреже у <ph name="PRODUCT_NAME" />-у и спречавају кориснике да мењају ово подешавање.
+
+      То контролише DNS припрему учитавања, TCP и SSL повезивање унапред и приказивање веб-страница унапред.
+
+      Ако подесите ове смернице, корисници неће моћи да промене или замене ово подешавање у <ph name="PRODUCT_NAME" />-у.
+
+      Ако нисте подесили ове смернице, предвиђање мреже ће бити омогућено, али ће корисник моћи да га промени.</translation>
 <translation id="1865417998205858223">Дозволе за шифре</translation>
 <translation id="186719019195685253">Радња коју треба предузети када истекне време до мировања док је уређај прикључен на струју</translation>
 <translation id="187819629719252111">Омогућава приступ локалним датотекама на уређају омогућавајући да <ph name="PRODUCT_NAME" /> приказује дијалоге за избор датотека.
@@ -715,6 +722,7 @@
       Ако не подесите ове смернице, подразумева се да важе смернице <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Максималан број истовремених веза са прокси сервером</translation>
+<translation id="2951386431828317490">Омогућавају Аутоматско попуњавање за профиле</translation>
 <translation id="2956777931324644324">Ове смернице су повучене од <ph name="PRODUCT_NAME" /> верзије 36.
 
       Одређују да ли треба омогућити додатак за TLS сертификате упућене на домен.
@@ -723,6 +731,7 @@
 <translation id="2957506574938329824">Не дозволи ниједном сајту да захтева приступ Bluetooth уређајима преко API-ја Bluetooth за веб</translation>
 <translation id="2957513448235202597">Тип налога за <ph name="HTTP_NEGOTIATE" /> потврду аутентичности</translation>
 <translation id="2959898425599642200">Правила за заобилажење проксија</translation>
+<translation id="2960128438010718932">Распоред постепеног представљања за примену новог ажурирања</translation>
 <translation id="2960691910306063964">Омогући или онемогући потврду аутентичности без PIN-а за хостове са даљинским приступом</translation>
 <translation id="2976002782221275500">Наводе период без корисничких уноса после кога се екран затамњује када се користи батерија.
 
@@ -765,6 +774,7 @@
       Без обзира на то како су ове смернице подешене, корисници не могу да промене подешавање оптимизације WPAD-а.</translation>
 <translation id="3072045631333522102">Чувар екрана који ће се користити на екрану за пријављивање у режиму малопродаје</translation>
 <translation id="3072847235228302527">Подешавање Услова коришћења услуге за локални налог на уређају</translation>
+<translation id="3077183141551274418">Омогућавају или онемогућавају животни циклус картица</translation>
 <translation id="3086995894968271156">Конфигуришите Cast пријемник у <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Омогућавају вам да подесите листу URL образаца који наводе сајтове којима је дозвољено да приказују слике.
 
@@ -1334,6 +1344,11 @@
       Ови предлози се даљински преузимају са Google сервера.
 
       Ако се ово подешавање подеси на „нетачно“, предлози се не преузимају и не приказују.</translation>
+<translation id="4788252609789586009">Омогућавају функцију Аутоматско попуњавање у <ph name="PRODUCT_NAME" />-у и омогућавају корисницима да аутоматски довршавају податке о кредитној картици у веб-обрасцима помоћу раније сачуваних података.
+
+      Ако је ово подешавање онемогућено, Аутоматско попуњавање никада неће предлагати или попуњавати податке о кредитној картици нити ће чувати додатне податке о кредитној картици које корисник може да пошаље док прегледа веб.
+
+      Ако је ово подешавање омогућено или није подешено, корисник ће моћи да контролише аутоматско попуњавање за кредитне картице у корисничком интерфејсу.</translation>
 <translation id="4791031774429044540">Омогућавање функције приступачности за велики курсор.
 
           Ако се ове смернице подесе на „тачно“, велики курсор ће увек бити омогућен.
@@ -1471,6 +1486,11 @@
       Ако се ова смерница подеси на True, <ph name="PRODUCT_OS_NAME" /> ће онемогућити покретање уређаја у режиму програмера. Систем неће хтети да се покрене и приказаће екран са грешком ако је режим програмера укључен.
 
       Ако се ова смерница подеси на False, режим програмера ће и даље бити доступан уређају.</translation>
+<translation id="520403427390290017">Функција животног циклуса картица растерећује процесор, а тиме и меморију повезану са покретањем картица које се нису користиле током дужег периода, тако што их прво замрзне, а затим и одбаци.
+
+      Ако су ове смернице подешене на вредност Нетачно, онда је животни циклус картица онемогућен и све картице ће наставити да раде нормално.
+
+      Ако су смернице подешене на вредност Тачно или нису подешене, онда је животни циклус картица омогућен.</translation>
 <translation id="5208240613060747912">Омогућава вам да подесите листу образаца URL адреса који наводе сајтове којима није дозвољено да приказују обавештења.
 
          Ако ове смернице нису подешене, глобална подразумевана вредност биће коришћена за све сајтове из смерница „DefaultNotificationsSetting“, уколико су оне подешене, а ако нису, из личне конфигурације корисника.</translation>
@@ -1518,6 +1538,11 @@
 
           Ако подесите ове смернице на „нетачно“, корисници неће моћи да пребацују садржај на свој уређај. Ако подесите ове смернице на „тачно“, корисницима ће бити дозвољено да пребацују садржај. Ако не подесите ове смернице, корисници неће моћи да пребацују садржај на регистроване Chrome ОС уређаје, али ће моћи да га пребацују на нерегистроване уређаје.</translation>
 <translation id="5330684698007383292">Дозволи <ph name="PRODUCT_FRAME_NAME" />-у да рукује следећим типовима садржаја</translation>
+<translation id="5360146044009867539">Омогућавају функцију Аутоматско попуњавање у <ph name="PRODUCT_NAME" />-у и омогућавају корисницима да аутоматски довршавају податке о профилу и адреси у веб-обрасцима помоћу раније сачуваних података.
+
+      Ако је ово подешавање онемогућено, Аутоматско попуњавање никада неће предлагати или попуњавати податке о адреси нити ће чувати додатне податке о адреси које корисник може да пошаље док прегледа веб. 
+
+      Ако је ово подешавање омогућено или није подешено, корисник ће моћи да контролише функцију аутоматског попуњавања за адресе у корисничком интерфејсу.</translation>
 <translation id="5365946944967967336">Прикажи дугме Почетна на траци са алаткама</translation>
 <translation id="5366745336748853475">Омогућавају вам да наведете листу URL образаца који наводе сајтове за које се сертификат клијента аутоматски бира на екрану за пријављивање у оквиру који хостује SAML ток, ако сајт захтева сертификат. Пример употребе је конфигурисање сертификата на нивоу уређаја који се приказује SAML IdP-у.
 
@@ -2236,6 +2261,15 @@
 
           Ако је ово подешавање онемогућено, ова функција неће бити доступна.</translation>
 <translation id="7275334191706090484">Обележивачи којим се управља</translation>
+<translation id="729492886167634859">Ове смернице дефинишу листу процената којим ће се дефинисати удео <ph name="PRODUCT_OS_NAME" /> уређаја у ОЈ за недељно ажурирање, почев од дана када је ажурирање први пут откривено. Време откривања је касније од времена објављивања ажурирања јер после објављивања ажурирања може да прође одређено време док уређај не провери да ли постоје ажурирања.
+
+      n-та вредност на листи ће се користити као проценат уређаја који треба да доврше ажурирање на следећу верзију у n-тој недељи од откривања ажурирања. На пример, ако је ажурирање откривено данас, онда прва вредност на листи дефинише проценат уређаја у ОЈ који треба да се ажурирају на ту верзију у року од једне недеље од данас. Друга вредност дефинише проценат уређаја у ОЈ који треба да се ажурирају на ту верзију у року од две недеље од данас и тако даље.
+
+      Ако ове смернице дефинишу вредност, ажурирања ће занемарити смернице <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> и примениће ове смернице уместо тих.
+
+      Ако је ова листа празна, неће бити постепеног представљања и ажурирања ће се примењивати у складу са другим смерницама за уређај.
+
+      Ове смернице се не примењују на пребацивање канала.</translation>
 <translation id="7295019613773647480">Омогући кориснике под надзором</translation>
 <translation id="7301543427086558500">Наводи листу алтернативних URL адреса које могу да се користе за издвајање термина за претрагу из претраживача. URL адресе треба да садрже низ <ph name="SEARCH_TERM_MARKER" />, који ће се користити за издвајање термина за претрагу.
 
@@ -2715,6 +2749,12 @@
 
           Примере образаца потражите на https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Онемогући чување историје прегледача</translation>
+<translation id="8498293625012059298">Конфигуришу URL за промену лозинке (само за HTTP и HTTPS шеме). Услуга за заштиту лозинком на овај URL шаље кориснике који виде упозорење у прегледачу ради промене лозинке.
+      Да би <ph name="PRODUCT_NAME" /> исправно снимио отисак прста за лозинку на овој страници за промену лозинке, уверите се да је страница за промену лозинке у складу са смерницама на https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Ако омогућите ово подешавање, услуга за заштиту лозинком на овај URL шаље кориснике који виде упозорење у прегледачу ради промене лозинке.
+      Ако онемогућите или не подесите ово подешавање, услуга за заштиту лозинком шаље кориснике на https://myaccounts.google.com ради промене лозинке.
+      Ове смернице нису доступне на Windows инстанцама које нису повезане са доменом <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Подразумевана подешавања (корисници могу да их замене)</translation>
 <translation id="8507835864888987300">Подешава циљану верзију за Аутоматска ажурирања.
 
@@ -2768,6 +2808,14 @@
       Ако промените подешавање смерница на Нетачно, оне се примењују на покретање нових виртуелних машина, али не искључују већ покренуте виртуелне машине.
       Ако не подесите ове смернице на уређају којим се управља, уређај не може да покреће виртуелне машине.
       Уређаји којима се не управља могу да покрећу виртуелне машине.</translation>
+<translation id="8669669491594628013">Омогућавају вам да контролишете покретање упозорења за заштиту лозинком. Заштита лозинком упозорава кориснике када користе заштићену лозинку на потенцијално сумњивим сајтовима.
+
+      Можете да конфигуришете лозинку коју желите да заштитите ако користите „PasswordProtectionLoginURLs“ и „PasswordProtectionChangePasswordURL“ смернице.
+
+      Ако подесите ове смернице на „PasswordProtectionWarningOff“, неће бити приказано никакво упозорење за заштиту лозинком.
+      Ако подесите ове смернице на „PasswordProtectionWarningOnPasswordReuse“, упозорење за заштиту лозинком ће се приказати када корисници користе поново користе заштићене лозинке на било којим сајтовима који нису на белој листи.
+       Ако подесите ове смернице на „PasswordProtectionWarningOnPhishingReuse“, упозорење за заштиту лозинком ће се приказати када корисници користе заштићене лозинке на сајтовима са „пецањем“.
+      Ако не подесите ове смернице, упозорење за заштиту лозинком ће се покренути када корисници користе Google лозинке на сајтовима са „пецањем“, али корисник може то да промени.</translation>
 <translation id="8672321184841719703">Циљана верзија Аутоматских ажурирања</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor – универзални други фактор)</translation>
 <translation id="8685024486845674965">Покретач упозорења за заштиту лозинком се активира када се лозинка поново користи</translation>
diff --git a/components/policy/resources/policy_templates_sv.xtb b/components/policy/resources/policy_templates_sv.xtb
index 9aee4eea..fb9fcca6 100644
--- a/components/policy/resources/policy_templates_sv.xtb
+++ b/components/policy/resources/policy_templates_sv.xtb
@@ -240,6 +240,13 @@
       Om kompatibiliteten med en server med fel måste upprätthållas kan den ställas in på tls1.1. Det här är en nödlösning och servern bör snabbt åtgärdas.</translation>
 <translation id="1864269674877167562">Om policyn anges som en tom sträng eller inte har konfigurerats visar inte <ph name="PRODUCT_OS_NAME" /> alternativet för autoslutför under användarens inloggningsflöde.
       Om policyn är inställd på en sträng som motsvarar ett domännamn visar <ph name="PRODUCT_OS_NAME" /> ett alternativ för autoslutför under användarens inloggning så att användaren bara kan skriva sitt användarnamn utan domännamnstillägget. Användaren kan skriva över detta domännamnstillägg.</translation>
+<translation id="1864382791685519617">Principen aktiverar nätverksförslag i <ph name="PRODUCT_NAME" /> och förhindrar att användarna ändrar inställningen.
+
+      Detta styr DNS-förhämtning, TCP- och SSL-föranslutning och förrendering av webbsidor.
+
+      När principen har ställts in kan användarna inte ändra eller åsidosätta inställningen i <ph name="PRODUCT_NAME" />.
+
+      Om principen lämnas utan inställning aktiveras nätverksförslag, men användaren kan ändra detta.</translation>
 <translation id="1865417998205858223">Nyckelbehörigheter</translation>
 <translation id="186719019195685253">Åtgärd som vidtas när fördröjning på grund av inaktivitet har uppnåtts vid anslutning till ett elnät</translation>
 <translation id="187819629719252111">Policyn tillåter åtkomst till lokala filer på datorn genom att tillåta att <ph name="PRODUCT_NAME" /> visar dialogrutor för filval.
@@ -717,6 +724,7 @@
       Om inget värde anges för principen används <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Högsta antalet samtidiga anslutningar till proxyservern</translation>
+<translation id="2951386431828317490">Aktivera autofyll för profiler</translation>
 <translation id="2956777931324644324">Den här policyn har gäller inte för version 36 och senare av <ph name="PRODUCT_NAME" />.
 
       Anger om domänbundna TLS-certifikattillägg ska aktiveras.
@@ -725,6 +733,7 @@
 <translation id="2957506574938329824">Tillåt inte att webbplatser kan begära att få tillgång till Bluetooth-enheter via Web Bluetooth API</translation>
 <translation id="2957513448235202597">Kontotyp för autentisering av <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Regler för proxybypass</translation>
+<translation id="2960128438010718932">Lanseringsschemat för att tillämpa en ny uppdatering</translation>
 <translation id="2960691910306063964">Aktivera eller inaktivera autentisering utan pinkod för fjärråtkomstvärdar</translation>
 <translation id="2976002782221275500">Anger efter hur lång tid utan åtgärd från användaren som skärmen ska dämpas när enheten drivs av batteriet.
 
@@ -767,6 +776,7 @@
       Oavsett om eller hur principen har konfigurerats kan inte WPAD-optimeringen ändras av användare.</translation>
 <translation id="3072045631333522102">Skärmsläckare att använda på inloggningsskärmen i återförsäljarläge</translation>
 <translation id="3072847235228302527">Ange användarvillkor för ett lokalt enhetskonto</translation>
+<translation id="3077183141551274418">Aktiverar eller inaktiverar en livscykel för flikar</translation>
 <translation id="3086995894968271156">Konfigurera cast-mottagaren i <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Låter dig ange en lista med webbadressmönster som styr vilka webbplatser som får visa bilder.
 
@@ -1342,6 +1352,11 @@
       Förslagen fjärrhämtas från Googles servrar.
 
       Om principen är inställd på falskt kommer inte förslag att hämtas eller visas.</translation>
+<translation id="4788252609789586009">Aktiverar funktionen Autofyll i <ph name="PRODUCT_NAME" /> så att användarna kan fylla i webbformulär automatiskt med kreditkortsuppgifter som har sparats sedan tidigare.
+
+      Om inställningen inaktiveras visas inga förslag med Autofyll och inga kreditkortsuppgifter fylls i. Ytterligare kreditkortsuppgifter som användaren kan ange på webben sparas inte heller.
+
+      Om inställningen aktiveras eller lämnas utan värde kan användarna själva styra Autofyll för kreditkort i användargränssnittet.</translation>
 <translation id="4791031774429044540">Aktivera hjälpmedelsfunktionen stor markör.
 
           Om den här principen är sann är den stora markören alltid aktiverad.
@@ -1482,6 +1497,11 @@
       Om den här principen ges värdet Sant förhindrar <ph name="PRODUCT_OS_NAME" /> att enheten startas i utvecklarläge. Om utvecklarväxeln har aktiverats vägrar systemet att starta och en felskärm visas.
 
       Om principen inte anges eller om den ges värdet Falskt förblir utvecklarläget tillgängligt på enheten.</translation>
+<translation id="520403427390290017">Funktionen med en livscykel för flikar frigör CPU och på längre sikt minne för öppna flikar som inte har använts på länge genom att först strypa resurstilldelningen till flikarna, sedan pausa dem och slutligen ta bort dem.
+
+      Om principen har ställts in på falskt inaktiveras livscykeln för flikar och alla flikar får fortsätta att köras som vanligt.
+
+      Om principen har ställts in på sant eller lämnats utan inställning aktiveras livscykeln för flikar.</translation>
 <translation id="5208240613060747912">Policyn gör att du kan ange en lista med webbadressmönster som inte får visa meddelanden.
 
           Om policyn inte anges används det globala standardvärdet för alla webbplatser. Standardvärdet hämtas från policyn DefaultNotificationsSetting om den har angetts eller användarens personliga konfiguration om den inte har det.</translation>
@@ -1529,6 +1549,11 @@
 
           Om principen är inställd på falskt kan användarna inte casta till enheten. Om principen är inställd på sant får användarna casta innehåll. Om principen lämnas utan inställning får användarna inte casta till registrerade Chrome OS-enheter, men däremot till enheter som inte är registrerade.</translation>
 <translation id="5330684698007383292">Tillåt att <ph name="PRODUCT_FRAME_NAME" /> hanterar följande innehållstyper</translation>
+<translation id="5360146044009867539">Aktiverar funktionen Autofyll i <ph name="PRODUCT_NAME" /> så att användarna kan fylla i webbformulär automatiskt med profil- och adressuppgifter som har sparats sedan tidigare.
+
+      Om inställningen inaktiveras visas inga förslag med Autofyll och inga adressuppgifter fylls i. Ytterligare adressuppgifter som användaren kan ange på webben sparas inte heller.
+
+      Om inställningen aktiveras eller lämnas utan värde kan användarna själva styra Autofyll för adresser i användargränssnittet.</translation>
 <translation id="5365946944967967336">Visa hemknappen i verktygsfältet</translation>
 <translation id="5366745336748853475">Låter dig ange en lista med webbadressmönster som anger webbplatser för vilka ett klientcertifikat väljs automatiskt på inloggningsskärmen i den ram som står värd för SAML-flödet, om webbplatsen kräver ett certifikat. Ett möjligt användningsområde är att konfigurera ett certifikat för hela enheten som ska uppvisas för SAML-identitetsleverantören.
 
@@ -2253,6 +2278,15 @@
 
           Om inställningen inaktiveras kommer inte funktionen att vara tillgänglig.</translation>
 <translation id="7275334191706090484">Hanterade bokmärken</translation>
+<translation id="729492886167634859">Med den här principen definieras en lista med procentvärden som anger hur stor andel av organisationsenhetens <ph name="PRODUCT_OS_NAME" />-enheter som ska uppdateras per vecka från den dag då uppdateringen hittades. Tiden när uppdateringen hittas är senare än uppdateringens publiceringsdatum, eftersom det kan dröja ett tag efter publiceringen innan enheten söker efter uppdateringar.
+
+      Värde nummer n i listan anger procentandelen enheter som ska uppdateras till nästa version under vecka n efter att uppdateringen hittades. Om en uppdatering hittas i dag, till exempel, anger det första värdet i listan procentandelen enheter i organisationsenheten som ska uppdateras till den versionen inom en vecka från och med i dag. Det andra värdet anger procentandelen enheter i organisationsenheten som ska uppdateras till den versionen inom två veckor från i dag, och så vidare.
+
+      Om ett värde har definierats för principen ignoreras principen <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> för uppdateringar och den här principen gäller i stället.
+
+      Om listan är tom görs ingen lansering i etapper och uppdateringarna tillämpas utifrån andra enhetsprinciper.
+
+      Principen gäller inte för kanalbyten.</translation>
 <translation id="7295019613773647480">Aktivera kontrollerade användare</translation>
 <translation id="7301543427086558500">Anger en lista med alternativa webbadresser som kan användas för att extrahera sökord från sökmotorn. Webbadresserna ska innehålla strängen <ph name="SEARCH_TERM_MARKER" />, som används för att extrahera sökorden.
 
@@ -2717,6 +2751,12 @@
 
           Exempel på mönster finns på https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Spara inte webbhistorik</translation>
+<translation id="8498293625012059298">Konfigurera webbadressen för att byta lösenord (endast HTTP och HTTPS). Användarna skickas till den här webbadressen av tjänsten för lösenordsskydd så att de kan byta lösenord efter att en varning visats i webbläsaren.
+      Se till att sidan för att byta lösenord följer riktlinjerna på https://www.chromium.org/developers/design-documents/create-amazing-password-forms så att <ph name="PRODUCT_NAME" /> kan registrera lösenordssignaturer korrekt.
+
+      Om inställningen är aktiverad skickas användarna till den här webbadressen där de får byta lösenord efter att en varning visats i webbläsaren.
+      Om inställningen är inaktiverad eller har lämnats utan inställning skickas användarna till https://myaccounts.google.com där de får byta lösenord.
+      Principen är inte tillgänglig på Windows-instanser som inte har fogats till en <ph name="MS_AD_NAME" />-domän.</translation>
 <translation id="8499172469244085141">Standardinställningar (kan åsidosättas av användare)</translation>
 <translation id="8507835864888987300">Anger en målversion för automatiska uppdateringar.
 
@@ -2770,6 +2810,14 @@
       När principen ändras till falskt tillämpas den på nya virtuella maskiner, men virtuella maskiner som redan körs avslutas inte.
       Om principen lämnas utan inställning på en hanterad enhet får virtuella maskiner inte köras på den.
       Virtuella maskiner får köras på enheter som inte hanteras.</translation>
+<translation id="8669669491594628013">Låter dig styra vad som ska utlösa en varning från lösenordsskyddet. Lösenordsskyddet varnar användarna om de återanvänder ett skyddat lösenord på en webbplats som kan vara misstänkt.
+
+      Du kan konfigurera vilket lösenord som ska skyddas med principerna PasswordProtectionLoginURLs och PasswordProtectionChangePasswordURL.
+
+      När principen är inställd på PasswordProtectionWarningOff visas inga varningar.
+      När principen är inställd på PasswordProtectionWarningOnPasswordReuse visas en varning om användaren återanvänder sitt skyddade lösenord på en webbplats som inte står med på vitlistan.
+      När principen är inställd på PasswordProtectionWarningOnPhishingReuse visas en varning om användaren återanvänder sitt skyddade lösenord på en webbplats som används för nätfiske.
+      Om principen har lämnats utan inställning skyddas endast lösenord på Google av lösenordsskyddet, men användaren kan ändra inställningen.</translation>
 <translation id="8672321184841719703">Målversion för automatisk uppdatering</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">Lösenordsskyddets varningar utlöses av att lösenordet återanvänds</translation>
diff --git a/components/policy/resources/policy_templates_sw.xtb b/components/policy/resources/policy_templates_sw.xtb
index 9f6b740d..99a1d7b 100644
--- a/components/policy/resources/policy_templates_sw.xtb
+++ b/components/policy/resources/policy_templates_sw.xtb
@@ -227,6 +227,13 @@
       Vinginevyo, ikiwa ni lazima uoanifu na seva zenye hitilafu udumishwe, hii huenda ikawekwa hadi "tls1.1". Huu ni mkakati wa muda tu na seva inapaswa kurekebishwa haraka.</translation>
 <translation id="1864269674877167562">Sera hii ikiwekwa kuwa mfuatano mtupu au isipowekwa, <ph name="PRODUCT_OS_NAME" /> haitaonyesha chaguo la kukamilisha kiotomatiki wakati wa mtiririko wa mtumiaji kuingia katika akaunti.
       Sera hii ikiwekwa kuwa mfuatano unaowakilisha jina la kikoa, <ph name="PRODUCT_OS_NAME" /> itaonyesha chaguo la kukamilisha kiotomatiki wakati wa mtumiaji kuingia katika akaunti hivyo kumruhusu kuandika jina lake la mtumiaji pekee bila kiendelezi cha jina la kikoa.  Mtumiaji ataweza kufuta jina la kiendelezi cha kikoa hiki.</translation>
+<translation id="1864382791685519617">Inawasha kipengele cha ubashiri wa mtandao katika <ph name="PRODUCT_NAME" /> na kuzuia watumiaji wasiweze kubadilisha mipangilio hii.
+
+      Hatua hii hudhibiti hali ya kuleta DNS mapema, uunganishaji na utekelezaji awali wa kurasa za wavuti za TCP na SSL.
+
+      Ukiweka sera hii, watumiaji hawawezi kubadilisha wala kubatilisha mipangilio hii katika <ph name="PRODUCT_NAME" />.
+
+      Usipoweka sera hii, kipengele cha ubashiri wa mtandao kitawashwa lakini watumiaji wataweza kukibadilisha.</translation>
 <translation id="1865417998205858223">Ruhusa za Funguo</translation>
 <translation id="186719019195685253">Kitendo cha kuchukua ucheleweshwaji wa kutulia unapofikiwa wakati inaendeshwa kutumia nishati ya AC</translation>
 <translation id="187819629719252111">Huruhusu faili zilizo kwenye mashine kufikiwa kwa kuruhusu <ph name="PRODUCT_NAME" /> kuonyesha vidadisi vya uteuzi vya faili.
@@ -695,6 +702,7 @@
       Ikiwa sera haijawekwa, <ph name="PRINTERS_ALLOW_ALL" /> itaendelea kufuatwa.
       </translation>
 <translation id="2908277604670530363">Kiwango cha juu kabisa cha miunganisho ya wakati mmoja kwenye seva ya proksi</translation>
+<translation id="2951386431828317490">Washa kipengele cha Kujaza Kiotomatiki katika wasifu</translation>
 <translation id="2956777931324644324">Sera hii imeondolewa kuanzia toleo la 36 la <ph name="PRODUCT_NAME" />.
 
       Inabainisha ikiwa kiendelezi cha vyeti vilivyo katika kikoa cha TLS kinastahili kuwashwa.
@@ -703,6 +711,7 @@
 <translation id="2957506574938329824">Usiruhusu tovuti yoyote kuomba idhini ya kufikia vifaa vya Bluetooth kupitia API ya Bluetooth ya Wavuti</translation>
 <translation id="2957513448235202597">Aina ya Akaunti kwa uthibitishaji wa <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Kanuni za ukwepaji proksi</translation>
+<translation id="2960128438010718932">Ratiba ya kuanzisha mchakato wa kutumia sasisho jipya</translation>
 <translation id="2960691910306063964">Washa au zima uthibitishaji usiotumia PIN kwa seva pangishi za uwezo wa kufikia kwa mbali</translation>
 <translation id="2976002782221275500">Hubainisha urefu wa muda bila mchango wa mtumiaji ambapo baadaye skrini hufifilizwa inapoendeshwa kwenye nishati ya betri.
 
@@ -743,6 +752,7 @@
       Kwa kutotogemea ikiwa au jinsi sera hii inavyowekwa, mipangilio ya uboreshaji wa WPAD haiwezi kubadilishwa na watumiaji.</translation>
 <translation id="3072045631333522102">Seva ya skrini kutumiwa kwenye skrini ya kuingia katika modi rejareja</translation>
 <translation id="3072847235228302527">Weka Sheria na Masharti kwa akaunti ya kifaa cha karibu nawe</translation>
+<translation id="3077183141551274418">Huwasha au kuzima muda wa matumizi ya kichupo</translation>
 <translation id="3086995894968271156">Weka mipangilio ya Kipokea Maudhui ya Google Cast katika <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Inakuruhusu kuweka orodha ya ruwaza za url zinazobainisha tovuti zinazoruhusiwa kuonyesha picha.
 
@@ -1319,6 +1329,11 @@
       Mapendekezo haya yanatafutwa kwa mbali kutoka seva za Google.
 
       Ikiwa mipangilio hii imewekwa kuwa sivyo, haitatafuta wala kuonyesha mapendekezo.</translation>
+<translation id="4788252609789586009">Huwasha kipengele cha Kujaza Kiotomatiki cha <ph name="PRODUCT_NAME" /> na kuruhusu watumiaji wajaze kiotomatiki maelezo ya kadi ya mikopo katika fomu za wavuti wakitumia maelezo waliyohifadhi awali.
+
+      Iwapo mipangilio hii imezimwa, kipengele cha Kujaza Kiotomatiki hakitawahi kupendekeza wala kujaza maelezo ya kadi ya mikopo. Pia hakitaweza kuhifadhi maelezo ya ziada ya kadi ya mikopo ambayo huenda mtumiaji atawasilisha atakapovinjari kwenye wavuti.
+
+      Iwapo mipangilio hii imewashwa au haina thamani yoyote, mtumiaji ataweza kudhibiti kipengele cha Kujaza Kiotomatiki katika kadi za mikopo kwenye kiolesura.</translation>
 <translation id="4791031774429044540">Washa kipengee cha upatikanaji cha kiteuzi kikubwa. 
 Iwapo sera hii imewekwa kuwa kweli, kiteuzi kikubwa kitawashwa kila wakati. 
 Iwapo sera hii imewekwa kuwa haitumiki, kiteuzi kikubwa kitawashwa kila wakati. 
@@ -1454,6 +1469,11 @@
       Ikiwa sera hii itawekwa kuwa Ukweli, <ph name="PRODUCT_OS_NAME" /> itazuia kifaa kuwaka katika hali ya wasanidi programu. Mfumo utakataa kuwaka na kuonyesha skrini ya hitilafu swichi ya wasanidi programu itakapowashwa.
 
       Ikiwa sera haitawekwa au itawekwa kuwa Uongo, hali ya wasanidi programu itaendelea kupatikana kwa kifaa.</translation>
+<translation id="520403427390290017">Kipengele cha muda wa matumizi ya kichupo hudhibiti CPU na baadaye hifadhi inayohusishwa na vichupo vilivyopo ambavyo havijatumika katika kipindi kirefu, kwa kuanza na kuvizuia, kisha kuvibana na baadaye kuvitupa.
+
+      Iwapo sera imewekwa kuwa sivyo, inamaanisha kuwa kipengele cha muda wa matumizi ya kichupo kitazimwa na vichupo vyote vitaendelea kutumika kama kawaida.
+
+      Iwapo sera imewekwa kuwa ndivyo au haijabainishwa, inamaanisha kuwa kipengele cha muda wa matumizi ya kichupo kitawashwa.</translation>
 <translation id="5208240613060747912">Inakuruhusu kuweka orodha ya ruwaza za url ambazo zinabainisha tovuti ambazo haziruhusiwi kuonyesha arifa.
 
           Ikiwa sera hii itasalia kama haijawekwa thamani yote chaguomsingi itatumika kwa tovuti zote kutoka katika sera ya 'DefaultNotificationsSetting' ikiwa imewekwa, au vinginevyo usanidi binafsi wa mtumiaji.</translation>
@@ -1501,6 +1521,11 @@
 
           Ikiwa sera hii imewekwa kuwa Sivyo, watumiaji hawataweza kutuma maudhui kwenye vifaa vyao. Ikiwa sera hii imewekwa kuwa Ndivyo, watumiaji wataruhusiwa kutuma maudhui. Sera hii isipowekwa, watumiaji hawataruhusiwa kutuma maudhui kwenye vifaa vya mfumo wa uendeshaji wa Chrome vilivyosajiliwa, lakini wataruhusiwa kutuma kwenye vifaa vingine ambavyo havijasajiliwa.</translation>
 <translation id="5330684698007383292">Ruhusu <ph name="PRODUCT_FRAME_NAME" /> kushughulikia aina zifuatazo za maudhui</translation>
+<translation id="5360146044009867539">Huwasha kipengele cha Kujaza Kiotomatiki cha <ph name="PRODUCT_NAME" /> na kuruhusu watumiaji wajaze kiotomatiki maelezo ya anwani na wasifu katika fomu za wavuti wakitumia maelezo waliyohifadhi awali.
+
+      Iwapo mipangilio hii imezimwa, kipengele cha kujaza kiotomatiki hakitawahi kupendekeza wala kujaza maelezo ya anwani. Pia hakitaweza kuhifadhi maelezo ya ziada ya anwani ambayo huenda mtumiaji atawasilisha anapovinjari wavuti.
+
+      Iwapo mipangilio hii imewashwa au haina thamani yoyote, mtumiaji ataweza kudhibiti kipengele cha Kujaza Kiotomatiki katika anwani kwenye kiolesura.</translation>
 <translation id="5365946944967967336">Onyesha kitufe cha Mwazo kwenye upauzana</translation>
 <translation id="5366745336748853475">Inakuruhusu kubainisha orodha ya michoro ya url inayobainsha tovuti ambazo cheti cha mteja kinachaguliwa kiotomatiki kwenye skrini ya kuingia katika akaunti katika fremu inayopangisha mtiririko wa SAML, tovuti ikiomba cheti. Mfano wa matumizi ni kusanidi cheti cha matumizi pana ya kifaa kitakachowasilishwa kwenye SAML IdP.
 
@@ -2218,6 +2243,15 @@
 
           Mpangilio huu ukizimwa, basi kipengele hiki hakitapatikana.</translation>
 <translation id="7275334191706090484">Alamisho Zinazosimamiwa</translation>
+<translation id="729492886167634859">Sera hii hubaini orodha ya asilimia ambazo zitabaini sehemu ya vifaa vya <ph name="PRODUCT_OS_NAME" /> katika OU ili visasishwe kila wiki kuanzia siku ambayo sasisho linagunduliwa. Muda wa kugundua ni wa baadaye ikilinganishwa na muda ambao sasisho lilichapishwa, kwa kuwa huenda muda ukapita baada ya chapisho kuchapishwa hadi wakati kifaa kitakapokagua masasisho.
+
+      Thamani ya n katika orodha itatumika kama asilimia ya vifaa ambavyo vinapaswa kusasishwa katika toleo lijalo kwenye wiki ya n baada ya kugundua sasisho. Kwa mfano, iwapo sasisho limegunduliwa leo, inamaanisha kuwa thamani ya kwanza katika orodha itabainisha asilimia ya vifaa katika OU ambavyo vinapaswa kusasishwa kwenye toleo hilo ndani ya wiki moja kuanzia leo. Thamani ya pili inabainisha asilimia ya vifaa katika OU ambavyo vinapaswa kusasishwa kwenye toleo hilo ndani ya wiki 2 kuanzia leo, na kadhalika.
+
+      Iwapo kuna thamani iliyobainishwa katika sera hii, masasisho hayatazingatia sera ya <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> na yatafuata sera hii badala yake.
+
+      Iwapo orodha haina kitu, mchakato hautaanzishwa na masasisho yatatumika kulingana na sera za vifaa vingine.
+
+      Sera hii haitumiki katika swichi za vituo.</translation>
 <translation id="7295019613773647480">Washa watumiaji wanaosimamiwa</translation>
 <translation id="7301543427086558500">Hubainisha orodha ya URL mbadala zinazoweza kutumiwa ili kupata taminolijia za utafutaji kutoka kwenye mtambo wa kutafuta. URL zinafaa kuwa na maneno <ph name="SEARCH_TERM_MARKER" />, ambayo yatatumika kupata taminolojia za utafutaji.
 
@@ -2668,6 +2702,12 @@
 
           Kwa mifano ya ruwaza angalia https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Lemaza kuhifadhi historia ya kivinjari</translation>
+<translation id="8498293625012059298">Weka mipangilio ya kubadilisha URL ya nenosiri (mifumo ya HTTP na HTTPS pekee). Huduma ya ulinzi wa nenosiri itaelekeza watumiaji kwenye URL hii ili wabadilishe manenosiri baada ya kuona ilani katika kivinjari.
+      Ili <ph name="PRODUCT_NAME" /> iweze kurekodi vizuri alama bainifu ya nenosiri jipya kwenye ukurasa huu wa kubadilisha nenosiri, tafadhali hakikisha kuwa ukurasa wa kubadilisha nenosiri lako unafuata mwongozo ulio kwenye https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Iwapo umewasha mipangilio hii, inamaanisha kuwa huduma ya ulinzi wa nenosiri itaelekeza watumiaji kwenye URL hii ili wabadilishe nenosiri lao baada ya kuona onyo katika kivinjari.
+      Iwapo mipangilio imezimwa au haijawekwa, inamaanisha kuwa huduma ya ulinzi wa nenosiri itaelekeza watumiaji kwenye https://myaccounts.google.com ili wabadilishe nenosiri lao.
+      Sera hii haipatikani kwenye matukio ya Windows ambayo hayajaunganishwa kwenye kikoa cha <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Mipangilio ya Chaguo-Msingi (watumiaji wanaweza kubadilisha)</translation>
 <translation id="8507835864888987300">Inawezesha toleo lengwa kupokea Masasisho ya Kiotomatiki.
 
@@ -2720,6 +2760,14 @@
       Kama sera imewekwa kuwa Sivyo, kifaa hakitaruhusiwa kutumia mashine pepe.
       Sera hii inapobadilishwa kuwa Sivyo, hutumika kwenye mashine pepe mpya lakini haizimi mashine pepe ambazo tayari zinatumika. Kama sera hii haijawekwa kwenye kifaa kinachodhibitiwa, kifaa hakiruhusiwi kutumia mashine pepe.
       Vifaa ambavyo havidhibitiwi vinaruhusiwa kutumia mashine pepe.</translation>
+<translation id="8669669491594628013">Inakuruhusu udhibiti kisababishi cha onyo la ulinzi wa nenosiri. Ulinzi wa nenosiri huonya watumiaji wakati wanatumia tena nenosiri lao linalolindwa kwenye tovuti ambazo huenda zikawa hatari.
+
+      Unaweza kutumia sera za 'PasswordProtectionLoginURLs' na 'PasswordProtectionChangePasswordURL' ili kuweka mipangilio ya nenosiri utakalolinda.
+
+      Iwapo umeweka sera hii kuwa 'PasswordProtectionWarningOff', hutaona onyo lolote la ulinzi wa nenosiri.
+      Iwapo umeweka sera hii kuwa 'PasswordProtectionWarningOnPasswordReuse', utaona onyo la ulinzi wa nenosiri wakati watumiaji watatumia tena nenosiri lao kwenye tovuti ambayo haijaidhinishwa.
+      Iwapo umeweka sera hii kuwa 'PasswordProtectionWarningOnPhishingReuse', onyo la ulinzi wa nenosiri litaonyeshwa wakati mtumiaji anatumia tena nenosiri linalolindwa kwenye tovuti inayoiba data.
+      Iwapo sera hii haijawekwa, huduma ya ulinzi wa nenosiri italinda tu manenosiri ya Google lakini mtumiaji ataweza kubadilisha mipangilio hii.</translation>
 <translation id="8672321184841719703">Toleo Lengwa la Kusasisha Otomatiki</translation>
 <translation id="867410340948518937">U2F (Uthibitishaji Jumla wa Hatua Mbili)</translation>
 <translation id="8685024486845674965">Ilani ya ulinzi wa nenosiri husababishwa na hatua ya kutumia tena nenosiri lile lile</translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb
index de5689b..7daf41c 100644
--- a/components/policy/resources/policy_templates_th.xtb
+++ b/components/policy/resources/policy_templates_th.xtb
@@ -233,6 +233,13 @@
       หรือคุณอาจตั้งค่านโยบายเป็น "tls1.1" หากต้องรักษาความเข้ากันได้กับเซิร์ฟเวอร์ที่มีข้อบกพร่อง ซึ่งการดำเนินการนี้เป็นเพียงมาตรการชั่วคราวและควรมีการแก้ไขเซิร์ฟเวอร์อย่างรวดเร็ว</translation>
 <translation id="1864269674877167562">หากตั้งค่านโนบายนี้เป็นสตริงเปล่าหรือไม่กำหนดค่า <ph name="PRODUCT_OS_NAME" /> จะไม่แสดงตัวเลือกเติมข้อความอัตโนมัติในระหว่างขั้นตอนการลงชื่อเข้าใช้ของผู้ใช้
       หากตั้งค่านโยบายนี้เป็นสตริงที่แสดงชื่อโดเมน <ph name="PRODUCT_OS_NAME" /> จะแสดงตัวเลือกเติมข้อความอัตโนมัติในขณะที่ผู้ใช้ลงชื่อเข้าใช้ ทำให้ผู้ใช้สามารถพิมพ์เฉพาะชื่อผู้ใช้โดยไม่ต้องมีส่วนขยายชื่อโดเมน  ผู้ใช้สามารถเขียนทับส่วนขยายชื่อโดเมนนี้ได้</translation>
+<translation id="1864382791685519617">เปิดใช้การคาดการณ์เครือข่ายใน <ph name="PRODUCT_NAME" /> และป้องกันไม่ให้ผู้ใช้เปลี่ยนการตั้งค่านี้
+
+      วิธีนี้จะควบคุมการโหลด DNS ล่วงหน้า, การเชื่อมต่อ TCP และ SSL ล่วงหน้า และการแสดงผลหน้าเว็บล่วงหน้า
+
+      หากคุณตั้งค่านโยบายนี้ ผู้ใช้จะเปลี่ยนหรือลบล้างการตั้งค่านี้ใน <ph name="PRODUCT_NAME" /> ไม่ได้
+
+      หากไม่ได้ตั้งค่านโยบายนี้ไว้ ระบบจะปิดใช้การคาดการณ์เครือข่าย แต่ผู้ใช้จะเปลี่ยนแปลงการตั้งค่าได้</translation>
 <translation id="1865417998205858223">สิทธิ์ของคีย์</translation>
 <translation id="186719019195685253">การกระทำที่จะดำเนินการเมื่อไม่มีการใช้งานจนถึงการหน่วงเวลาที่กำหนด ขณะที่ใช้พลังงานจากไฟฟ้า AC</translation>
 <translation id="187819629719252111">อนุญาตให้เข้าถึงไฟล์ในเครื่องโดยการอนุญาตให้ <ph name="PRODUCT_NAME" /> แสดงช่องโต้ตอบสำหรับการเลือกไฟล์ หากคุณเปิดใช้งานการตั้งค่านี้ ผู้ใช้จะเปิดช่องโต้ตอบสำหรับการเลือกไฟล์ได้ตามปกติ หากคุณปิดใช้งานการตั้งค่านี้ เมื่อใดก็ตามที่ผู้ใช้ดำเนินการที่อาจกระตุ้นให้ช่องโต้ตอบสำหรับการเลือกไฟล์ปรากฏขึ้น (เช่น การนำเข้าบุ๊กมาร์ก การอัปโหลดไฟล์ การบันทึกลิงก์ ฯลฯ) ข้อความจะปรากฏขึ้นแทนโดยถือว่าผู้ใช้ได้คลิก "ยกเลิก" ในช่องโต้ตอบสำหรับการเลือกไฟล์ไว้ หากไม่ได้ตั้งค่านี้ ผู้ใช้สามารถเปิดช่องโต้ตอบสำหรับการเลือกไฟล์ได้ตามปกติ</translation>
@@ -685,6 +692,7 @@
       ถ้าไม่ได้ตั้งค่านโยบายนี้ไว้ ระบบจะถือว่าเลือก <ph name="PRINTERS_ALLOW_ALL" />
       </translation>
 <translation id="2908277604670530363">จำนวนสูงสุดของการเชื่อมต่อพร็อกซีเซิร์ฟเวอร์พร้อมกัน</translation>
+<translation id="2951386431828317490">เปิดใช้ป้อนข้อความอัตโนมัติสำหรับโปรไฟล์</translation>
 <translation id="2956777931324644324">นโยบายนี้เลิกใช้งานแล้วตั้งแต่ <ph name="PRODUCT_NAME" /> เวอร์ชัน 36
 
       ระบุว่าควรเปิดใช้ส่วนขยายใบรับรองที่ผูกกับโดเมน TLS ไหม
@@ -693,6 +701,7 @@
 <translation id="2957506574938329824">ไม่อนุญาตให้เว็บไซต์ใดๆ ขอสิทธิ์เข้าถึงอุปกรณ์บลูทูธผ่าน Web Bluetooth API</translation>
 <translation id="2957513448235202597">ประเภทบัญชีสำหรับการตรวจสอบสิทธิ์ <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">กฎการข้ามพร็อกซี</translation>
+<translation id="2960128438010718932">กำหนดการใช้อัปเดตใหม่แบบทีละขั้น</translation>
 <translation id="2960691910306063964">เปิดหรือปิดใช้การตรวจสอบสิทธิ์โดยไม่ใช้ PIN สำหรับโฮสต์การเข้าถึงระยะไกล</translation>
 <translation id="2976002782221275500">ระบุระยะเวลาก่อนหรี่แสงหน้าจอเมื่อไม่มีการป้อนข้อมูลจากผู้ใช้ขณะทำงานโดยใช้พลังงานแบตเตอรี่
 
@@ -733,6 +742,7 @@
       ไม่ว่าจะมีการกำหนดนโยบายนี้อย่างไรก็ตาม ผู้ใช้จะไม่สามารถเปลี่ยนแปลงการตั้งค่าการเพิ่มประสิทธิภาพ WPAD ได้</translation>
 <translation id="3072045631333522102">โปรแกรมรักษาหน้าจอที่จะใช้ในหน้าจอการลงชื่อเข้าใช้ในโหมดปลีก</translation>
 <translation id="3072847235228302527">ตั้งข้อกำหนดในการให้บริการสำหรับบัญชีภายในอุปกรณ์</translation>
+<translation id="3077183141551274418">เปิดหรือปิดใช้วงจรชีวิตแท็บ</translation>
 <translation id="3086995894968271156">กำหนดค่า Cast Receiver ใน <ph name="PRODUCT_NAME" /></translation>
 <translation id="3088796212846734853">ให้คุณกำหนดรายการรูปแบบ URL ที่ระบุเว็บไซต์ซึ่งได้รับอนุญาตให้แสดงรูปภาพ
 
@@ -1281,6 +1291,11 @@
       รายการแนะนำเหล่านี้จะดึงข้อมูลแบบระยะไกลจากเซิร์ฟเวอร์ Google
 
       หากตั้งค่าเป็น "เท็จ" ระบบจะไม่ดึงข้อมูลหรือแสดงรายการแนะนำ</translation>
+<translation id="4788252609789586009">เปิดใช้ฟีเจอร์ป้อนข้อความอัตโนมัติของ <ph name="PRODUCT_NAME" /> และอนุญาตให้ผู้ใช้ป้อนข้อมูลบัตรเครดิตในแบบฟอร์มในเว็บโดยอัตโนมัติด้วยข้อมูลที่เก็บไว้ก่อนหน้านี้
+
+      หากคุณปิดใช้การตั้งค่านี้ ฟีเจอร์ป้อนข้อความอัตโนมัติจะไม่แนะนำหรือเติมข้อมูลบัตรเครดิตให้โดยอัตโนมัติ และจะไม่บันทึกข้อมูลบัตรเครดิตเพิ่มเติมที่ผู้ใช้อาจส่งมาขณะเรียกดูเว็บ
+
+      หากคุณเปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะควบคุมฟีเจอร์ป้อนข้อความอัตโนมัติสำหรับบัตรเครดิตได้ใน UI</translation>
 <translation id="4791031774429044540">เปิดใช้งานฟีเจอร์การเข้าถึงเคอร์เซอร์ขนาดใหญ่
 
           หากนโยบายนี้ถูกตั้งค่าเป็น "จริง" เคอร์เซอร์ขนาดใหญ่จะถูกเปิดใช้งานเสมอ
@@ -1405,6 +1420,11 @@
       หากตั้งค่านโยบายนี้เป็น True <ph name="PRODUCT_OS_NAME" /> จะป้องกันไม่ให้อุปกรณ์บูตเข้าสู่โหมดนักพัฒนาซอฟต์แวร์ ระบบจะปฏิเสธการบูตและแสดงหน้าจอข้อผิดพลาดเมื่อมีการเปิดโหมดนักพัฒนาซอฟต์แวร์
 
       หากไม่ตั้งค่านโยบายหรือตั้งเป็น False จะสามารถใช้โหมดนักพัฒนาซอฟต์แวร์ในอุปกรณ์ได้</translation>
+<translation id="520403427390290017">ฟีเจอร์วงจรชีวิตแท็บจะอ้างสิทธิ์ CPU ซ้ำ รวมถึงหน่วยความจำที่เกี่ยวข้องกับการเรียกใช้แท็บที่ไม่ได้ใช้มาเป็นเวลานานแล้ว โดยจะควบคุมการใช้งานก่อน จากนั้นจึงหยุดการใช้งาน และยกเลิกไป
+
+      หากตั้งค่านโยบายนี้เป็น "เท็จ" ระบบจะปิดใช้วงจรชีวิตแท็บ และแท็บทั้งหมดจะทำงานตามปกติ
+
+      หากตั้งค่านโยบายนี้เป็น "จริง" หรือไม่ได้ระบุค่า ระบบจะเปิดใช้วงจรชีวิตแท็บ</translation>
 <translation id="5208240613060747912">ช่วยให้คุณกำหนดรายการของรูปแบบ URL ที่ระบุไซต์ที่ไม่ได้รับอนุญาตให้แสดงการแจ้งเตือน หากนโยบายนี้ไม่มีการกำหนดไว้ จะใช้ค่าเริ่มต้นทั่วไปสำหรับไซต์ทั้งหมด ทั้งจากนโยบาย "DefaultNotificationsSetting" หากมีการตั้งค่าไว้หรือจากการกำหนดค่าส่วนบุคคลของผู้ใช้เอง</translation>
 <translation id="5219844027738217407">สำหรับแอป Android นโยบายนี้จะส่งผลต่อไมโครโฟนเท่านั้น เมื่อตั้งค่านโยบายเป็น True ไมโครโฟนจะปิดเสียงสำหรับแอป Android ทุกแอปโดยไม่มีข้อยกเว้น</translation>
 <translation id="523505283826916779">การตั้งค่าสำหรับการเข้าถึง</translation>
@@ -1450,6 +1470,11 @@
 
           หากตั้งค่านโยบายนี้เป็น False ผู้ใช้จะไม่สามารถแคสต์เนื้อหาไปยังอุปกรณ์ หากตั้งค่าเป็น True ผู้ใช้จะแคสต์เนื้อหาได้ และหากไม่ได้ตั้งค่านโยบาย ผู้ใช้จะไม่สามารถแคสต์เนื้อหาไปยังอุปกรณ์ที่ใช้ Chrome OS ที่ลงทะเบียนไว้ แต่จะแคสต์ไปยังอุปกรณ์ที่ไม่ได้ลงทะเบียนได้</translation>
 <translation id="5330684698007383292">อนุญาตให้ <ph name="PRODUCT_FRAME_NAME" /> จัดการประเภทเนื้อหาดังต่อไปนี้</translation>
+<translation id="5360146044009867539">เปิดใช้ฟีเจอร์ป้อนข้อความอัตโนมัติของ <ph name="PRODUCT_NAME" /> และอนุญาตให้ผู้ใช้ป้อนข้อมูลโปรไฟล์และที่อยู่ในแบบฟอร์มในเว็บโดยอัตโนมัติด้วยข้อมูลที่เก็บไว้ก่อนหน้านี้
+
+      หากคุณปิดใช้การตั้งค่านี้ ฟีเจอร์ป้อนข้อความอัตโนมัติจะไม่แนะนำหรือเติมข้อมูลที่อยู่ให้โดยอัตโนมัติ และจะไม่บันทึกข้อมูลที่อยู่เพิ่มเติมที่ผู้ใช้อาจส่งมาขณะเรียกดูเว็บ
+
+      หากคุณเปิดใช้การตั้งค่านี้หรือไม่ได้กำหนดค่าไว้ ผู้ใช้จะควบคุมฟีเจอร์ป้อนข้อความอัตโนมัติสำหรับที่อยู่ได้ใน UI</translation>
 <translation id="5365946944967967336">แสดงปุ่ม "หน้าแรก" บนแถบเครื่องมือ</translation>
 <translation id="5366745336748853475">ช่วยให้คุณระบุรายการรูปแบบ URL ซึ่งระบุเว็บไซต์ที่มีการเลือกใบรับรองไคลเอ็นต์โดยอัตโนมัติในหน้าจอลงชื่อเข้าใช้ในเฟรมที่โฮสต์ขั้นตอน SAML หากเว็บไซต์นั้นขอใบรับรอง ตัวอย่างการใช้งานคือเพื่อกำหนดค่าใบรับรองสำหรับทั้งอุปกรณ์เพื่อแสดงต่อ SAML IdP
 
@@ -2137,6 +2162,15 @@
 
           หากการตั้งค่านี้ถูกปิดใช้งาน ฟีเจอร์นี้จะไม่สามารถใช้ได้</translation>
 <translation id="7275334191706090484">บุ๊กมาร์กที่มีการจัดการ</translation>
+<translation id="729492886167634859">นโยบายนี้จะกำหนดรายการเปอร์เซ็นต์ที่จะแบ่งส่วนของอุปกรณ์ <ph name="PRODUCT_OS_NAME" /> ใน OU ที่จะอัปเดตต่อสัปดาห์ เริ่มจากวันที่พบอัปเดตเป็นครั้งแรก เวลาค้นพบจะมาทีหลังเวลาเผยแพร่การอัปเดตเพราะอาจใช้เวลาสักพักหลังการเผยแพร่การอัปเดตกว่าอุปกรณ์จะตรวจหาอัปเดต
+
+      ค่าลำดับที่ (n-th) ในรายการจะใช้เป็นเปอร์เซ็นต์ของอุปกรณ์ที่ควรอัปเดตเป็นเวอร์ชันถัดไปในสัปดาห์ที่เท่านั้นหลังจากพบการอัปเดตแล้ว เช่น หากค้นพบการอัปเดตวันนี้ ค่าแรกในรายการจะกำหนดเปอร์เซ็นต์ของอุปกรณ์ใน OU ที่ควรอัปเดตเป็นเวอร์ชันนั้นภายใน 1 สัปดาห์จากวันนี้ ค่าที่ 2 จะกำหนดเปอร์เซ็นต์ของอุปกรณ์ใน OU ที่ควรอัปเดตเป็นเวอร์ชันนั้นภายใน 2 สัปดาห์นับจากวันนี้ และเป็นแบบนี้ไปเรื่อยๆ
+
+      หากมีการกำหนดค่าไว้ในนโยบายนี้ อัปเดตจะไม่สนใจนโยบาย <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> และทำตามนโยบายนี้แทน
+
+      หากรายการนี้ว่างเปล่า จะไม่มีการกำหนดแบบทีละขั้นและระบบจะนำการอัปเดตไปใช้ตามนโยบายอื่นๆ ของอุปกรณ์
+
+      นโยบายนี้ไม่มีผลกับการเปลี่ยนช่อง</translation>
 <translation id="7295019613773647480">เปิดใช้งานผู้ใช้ภายใต้การดูแล</translation>
 <translation id="7301543427086558500">ระบุรายการ URL สำรองที่สามารถใช้ในการดึงข้อความค้นหาจากเครื่องมือค้นหา URL ควรมีสตริง <ph name="SEARCH_TERM_MARKER" /> ซึ่งจะใช้ในการดึงข้อความค้นหา
 
@@ -2594,6 +2628,12 @@
 
           สำหรับรูปแบบตัวอย่าง โปรดดูที่ https://www.chromium.org/developers/how-tos/chrome-frame-getting-started</translation>
 <translation id="8493645415242333585">ปิดใช้งานการบันทึกประวัติเบราว์เซอร์</translation>
+<translation id="8498293625012059298">กำหนดค่า URL การเปลี่ยนรหัสผ่าน (รูปแบบ HTTP และ HTTPS เท่านั้น) บริการปกป้องรหัสผ่านจะส่งผู้ใช้มาที่ URL นี้เพื่อเปลี่ยนรหัสผ่านของตนหลังจากเห็นคำเตือนในเบราว์เซอร์
+      โปรดตรวจสอบว่าหน้าเปลี่ยนรหัสผ่านของคุณเป็นไปตามหลักเกณฑ์ใน https://www.chromium.org/developers/design-documents/create-amazing-password-forms เพื่อให้ <ph name="PRODUCT_NAME" /> จับภาพลายนิ้วมือที่เป็นรหัสผ่านใหม่ได้อย่างถูกต้องในหน้าเปลี่ยนรหัสผ่านนี้
+
+      หากเปิดใช้การตั้งค่านี้ บริการปกป้องรหัสผ่านจะส่งผู้ใช้มาที่ URL นี้เพื่อเปลี่ยนรหัสผ่านของตนหลังจากเห็นคำเตือนในเบราว์เซอร์
+      หากปิดใช้การตั้งค่านี้หรือไม่ได้ตั้งค่า บริการปกป้องรหัสผ่านจะส่งผู้ใช้ไปที่ https://myaccounts.google.com เพื่อเปลี่ยนรหัสผ่าน
+      นโยบายนี้ไม่มีในเครื่อง Windows ที่ไม่ได้เข้าร่วมโดเมน <ph name="MS_AD_NAME" /></translation>
 <translation id="8499172469244085141">การตั้งค่าเริ่มต้น (ผู้ใช้แทนที่ได้)</translation>
 <translation id="8507835864888987300">ตั้งค่าเวอร์ชันเป้าหมายสำหรับการอัปเดตอัตโนมัติ
 
@@ -2647,6 +2687,14 @@
       การเปลี่ยนการตั้งค่าเป็น "เท็จ" จะส่งผลต่อการเริ่มเครื่องเสมือนรายการใหม่ แต่จะไม่ปิดเครื่องเสมือนที่เรียกใช้อยู่แล้ว
       หากไม่ได้ตั้งค่านโยบายนี้ในอุปกรณ์ที่มีการจัดการ อุปกรณ์จะไม่มีสิทธิ์เรียกใช้เครื่องเสมือน
       อุปกรณ์ที่ไม่มีการจัดการจะมีสิทธิ์เรียกใช้เครื่องเสมือน</translation>
+<translation id="8669669491594628013">อนุญาตให้คุณควบคุมการทริกเกอร์คำเตือนการปกป้องรหัสผ่าน การปกป้องรหัสผ่านจะแจ้งเตือนเมื่อผู้ใช้ใช้รหัสผ่านที่มีการปกป้องซ้ำในเว็บไซต์ที่อาจน่าสงสัย
+
+      คุณใช้นโยบาย "PasswordProtectionLoginURLs" และ "PasswordProtectionChangePasswordURL" เพื่อกำหนดค่ารหัสผ่านที่จะปกป้องได้
+
+      หากตั้งค่านโยบายนี้เป็น "PasswordProtectionWarningOff" ระบบจะไม่แสดงคำเตือนการปกป้องรหัสผ่าน
+      หากตั้งค่านโยบายนี้เป็น "PasswordProtectionWarningOnPasswordReuse" ระบบจะแสดงคำเตือนการปกป้องรหัสผ่านเมื่อผู้ใช้ใช้รหัสผ่านที่มีการปกป้องซ้ำในเว็บไซต์ที่ไม่ได้อยู่ในรายการอนุญาตพิเศษ
+      หากตั้งค่านโยบายนี้เป็น "PasswordProtectionWarningOnPhishingReuse" ระบบจะแสดงคำเตือนการปกป้องรหัสผ่านเมื่อผู้ใช้ใช้รหัสผ่านที่มีการปกป้องซ้ำในเว็บไซต์ฟิชชิง
+      หากไม่ได้ตั้งค่านโยบายนี้ บริการปกป้องรหัสผ่านจะปกป้องเฉพาะรหัสผ่าน Google แต่ผู้ใช้จะเปลี่ยนการตั้งค่านี้ได้</translation>
 <translation id="8672321184841719703">กำหนดเป้าหมายรุ่นที่อัปเดตอัตโนมัติ</translation>
 <translation id="867410340948518937">U2F (Universal Second Factor)</translation>
 <translation id="8685024486845674965">เรียกใช้การแจ้งเตือนการป้องกันด้วยรหัสผ่านเมื่อมีการใช้รหัสผ่านซ้ำ</translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb
index d085a50..475d485 100644
--- a/components/policy/resources/policy_templates_tr.xtb
+++ b/components/policy/resources/policy_templates_tr.xtb
@@ -239,6 +239,13 @@
       Yapılandırılması durumunda, hatalı bir sunucuyla uyumluluğun korunması gerekiyorsa bu politika, "tls1.1" değerine ayarlanabilir. Bu geçici bir tedbirdir ve sunucudaki sorun kısa sürede çözülmelidir.</translation>
 <translation id="1864269674877167562">Bu politika için boş bir dize ayarlanırsa veya politika hiç yapılandırılmazsa <ph name="PRODUCT_OS_NAME" />, kullanıcı oturum açma akışında bir otomatik tamamlama seçeneği görüntülemez.
       Bu politika için bir alan adına karşılık gelen dize ayarlanırsa <ph name="PRODUCT_OS_NAME" />, kullanıcı oturum açma akışı sırasında bir otomatik tamamlama seçeneği görüntüleyerek kullanıcının sadece kullanıcı adını (alan adı uzantısı olmadan) yazmasına olanak verir. Kullanıcı bu alan adı uzantısının üzerine yazabilir.</translation>
+<translation id="1864382791685519617"><ph name="PRODUCT_NAME" /> ürününde ağ tahminini etkinleştirir ve kullanıcıların bu ayarı değiştirmesini önler.
+
+      Bu politika, DNS'nin önceden getirilmesini, TCP ve SSL ön bağlantısını ve web sayfalarının önceden oluşturulmasını denetler.
+
+      Bu politikayı ayarladığınızda kullanıcılar <ph name="PRODUCT_NAME" /> ürününde bu ayarı değiştiremez veya geçersiz kılamaz.
+
+      Bu politika ayarlanmadan bırakılırsa ağ tahmini etkinleştirilir, ancak isteyen kullanıcı bu ayarı değiştirebilir.</translation>
 <translation id="1865417998205858223">Temel İzinler</translation>
 <translation id="186719019195685253">Cihaz AC güçle çalışırken boşta kalma süresine ulaşıldığında yapılacak işlem</translation>
 <translation id="187819629719252111"><ph name="PRODUCT_NAME" /> tarafından dosya seçme iletişim kutularının görüntülenmesine izin vererek makinedeki yerel dosyalara erişim olanağı sağlar.
@@ -713,6 +720,7 @@
       Bu politika ayarlanmazsa <ph name="PRINTERS_ALLOW_ALL" /> uygulanır.
       </translation>
 <translation id="2908277604670530363">Proxy sunucusuyla yapılabilecek maksimum eşzamanlı bağlantı sayısı</translation>
+<translation id="2951386431828317490">Profiller için Otomatik Doldurma özelliğini etkinleştirme</translation>
 <translation id="2956777931324644324">Bu politika, <ph name="PRODUCT_NAME" /> 36. sürümü itibariyle geri çekilmiştir.
 
       TLS alan adına bağlı sertifikalar uzantısının etkinleştirilip etkinleştirilmeyeceğini belirtir.
@@ -721,6 +729,7 @@
 <translation id="2957506574938329824">Hiçbir sitenin Web Bluetooth API'sı aracılığıyla Bluetooth hizmetlerine erişim istemesine izin verme</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> kimlik doğrulaması için hesap türü</translation>
 <translation id="2959898425599642200">Proxy atlama kuralları</translation>
+<translation id="2960128438010718932">Yeni bir güncellemenin uygulanmasına yönelik hazırlık programı</translation>
 <translation id="2960691910306063964">Uzaktan erişim ana makineleri için PIN'siz kimlik doğrulamayı etkinleştir veya devre dışı bırak</translation>
 <translation id="2976002782221275500">Pil gücüyle çalışırken, ekran karartılmadan önce kullanıcı girişi olmadan geçecek süreyi belirtir.
 
@@ -762,6 +771,7 @@
       Bu politikanın ayarlansa da ayarlanmasa da, WPAD optimizasyonu ayarı kullanıcılar tarafından değiştirilemez.</translation>
 <translation id="3072045631333522102">Perakende modunda oturum açma ekranında kullanılacak ekran koruyucu</translation>
 <translation id="3072847235228302527">Bir cihaz yerel hesabı için Hizmet Şartları'nı ayarlama</translation>
+<translation id="3077183141551274418">Sekme yaşam döngülerini etkinleştirir veya devre dışı bırakır</translation>
 <translation id="3086995894968271156">Cast Receiver'ı <ph name="PRODUCT_NAME" /> ürününde yapılandırın.</translation>
 <translation id="3088796212846734853">Resim görüntülemesine izin verilen sitelerin belirtildiği bir URL kalıpları listesini ayarlamanıza olanak tanır.
 
@@ -1327,6 +1337,11 @@
       Bu öneriler uzaktaki Google sunucularından getirilir.
 
       Bu ayar yanlış (false) değerine ayarlanırsa öneri getirilmez veya görüntülenmez.</translation>
+<translation id="4788252609789586009"><ph name="PRODUCT_NAME" /> Otomatik Doldurma özelliğini etkinleştirir ve kullanıcıların web formlarındaki kredi kartı bilgilerini önceden kaydedilmiş bilgilerle otomatik olarak doldurmasına olanak tanır.
+
+      Bu ayar devre dışı bırakılırsa Otomatik Doldurma hiçbir zaman öneride bulunmaz, kredi kartı bilgilerini doldurmaz veya kullanıcının internette gezerken gönderebileceği ek kredi kartı bilgilerini kaydetmez.
+
+      Bu ayar etkinleştirilirse veya bir değere sahip olmazsa kullanıcı, kullanıcı arayüzündeki kredi kartı Otomatik Doldurma özelliğini kontrol edebilir.</translation>
 <translation id="4791031774429044540">Büyük imleç erişilebilirlik özelliğini etkinleştir.
 
           Bu politika true (doğru) olarak ayarlanırsa, büyük imleç her zaman etkinleştirilir.
@@ -1463,6 +1478,11 @@
       Bu politika Doğru seçeneğine ayarlanırsa <ph name="PRODUCT_OS_NAME" />, cihazın geliştirici modunda başlatılmasına izin vermez. Geliştirici moduna geçiş etkinleştirildiğinde, sistem başlatma yapmayı reddeder ve bir hata ekranı gösterir.
 
       Bu politika Yanlış seçeneğine ayarlanırsa geliştirici modu cihazda kullanılmaya devam eder.</translation>
+<translation id="520403427390290017">Sekme yaşam döngüleri özelliği, uzun süredir kullanılmamış açık sekmeleri önce kısıtlayıp ardından dondurarak ve sonunda silerek bunlarla ilişkilendirilmiş CPU ve sonuç olarak belleği geri kazanır.
+
+      Politika false (yanlış) değerine ayarlanırsa sekme yaşam döngüleri devre dışı bırakılır ve tüm sekmeler normal bir şekilde çalışmaya devam eder.
+
+      Politika true (doğru) değerine ayarlanır veya değer belirtilmeden bırakılırsa sekme yaşam döngüleri etkinleştirilir.</translation>
 <translation id="5208240613060747912">Bildirim görüntülemelerine izin verilmeyen sitelerin belirtildiği bir URL kalıpları listesi ayarlamanıza olanak tanır.
 
           Bu politika ayarlanmadan bırakılırsa, 'DefaultNotificationsSetting' politikası ayarlandıysa buradaki değer, aksi takdirde kullanıcının kişisel yapılandırması tüm siteler için genel varsayılan değer olarak kullanılır.</translation>
@@ -1510,6 +1530,11 @@
 
           Bu politika False (Yanlış) değerine ayarlanırsa kullanıcılar içeriği cihazlarına yayınlayamaz. Bu politika True (Doğru) değerine ayarlanırsa kullanıcıların içerik yayınlamasına izin verilir. Bu politika ayarlanmazsa kullanıcıların kayıtlı Chrome OS cihazlarına içerik yayınlamasına izin verilmez, ancak kayıtlı olmayan cihazlara içerik yayınlamasına izin verilir.</translation>
 <translation id="5330684698007383292"><ph name="PRODUCT_FRAME_NAME" /> için aşağıdaki içerik türlerini işlemeye izin ver</translation>
+<translation id="5360146044009867539"><ph name="PRODUCT_NAME" /> Otomatik Doldurma özelliğini etkinleştirir ve kullanıcıların web formlarındaki profil ve adres bilgilerini önceden kaydedilmiş bilgilerle otomatik olarak doldurmasına olanak tanır.
+
+      Bu ayar devre dışı bırakılırsa Otomatik Doldurma hiçbir zaman öneride bulunmaz, adres bilgilerini doldurmaz veya kullanıcının internette gezerken gönderebileceği ek adres bilgilerini kaydetmez.
+
+      Bu ayar etkinleştirilirse veya bir değer ayarlanmazsa kullanıcı, kullanıcı arayüzündeki adresler için Otomatik Doldurma özelliğini kontrol edebilir.</translation>
 <translation id="5365946944967967336">Araç çubuğunda Ana Sayfa düğmesini göster</translation>
 <translation id="5366745336748853475">URL kalıpları listesi belirtmenize olanak tanır. Bu liste, site sertifika isteğinde bulunursa, SAML akışını barındıran çerçevedeki oturum açma ekranında bir istemci sertifikasının otomatik olarak seçileceği sitelerin belirtildiği bir listedir. SAML IdP'ye sunulması amacıyla cihaz genelinde bir sertifikanın yapılandırılması buna örnek olarak gösterilebilir.
 
@@ -2232,6 +2257,15 @@
 
           Bu ayar devre dışı bırakılırsa, bu özellik kullanılamaz.</translation>
 <translation id="7275334191706090484">Yönetilen Yer İşaretleri</translation>
+<translation id="729492886167634859">Bu politika, güncellemenin ilk keşfedildiği günden başlayarak kuruluş biriminde her hafta güncellenecek <ph name="PRODUCT_OS_NAME" /> cihazlarının oranını belirleyen bir yüzde listesi tanımlar. Güncellenmenin yayınlanmasıyla cihazın güncellemeleri kontrol etmesi arasında bir süre geçebileceğinden keşif zamanı, güncellemenin yayınlanma zamanından sonra olur.
+
+      Listedeki n. değer, güncellemenin keşfedilmesinden sonraki n. haftada yeni sürüme geçişlerinin tamamlanması gereken cihaz yüzdesi olarak kullanılır. Örneğin, bugün bir güncelleme keşfedilirse listedeki ilk değer, bugünden itibaren bir hafta içinde söz konusu sürüme güncellenmesi gereken kuruluş birimindeki cihaz yüzdesini tanımlar. İkinci değer, bugünden itibaren 2 hafta içinde söz konusu sürüme güncellenmesi gereken kuruluş birimindeki cihaz yüzdesini tanımlar ve listedeki değerler bu şekilde devam eder.
+
+      Bu politika için tanımlanmış bir değer varsa güncellemeler <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> politikasını yoksayar ve onun yerine bu politikayı uygular.
+
+      Bu liste boşsa hazırlık yapılmaz ve güncellemeler, diğer cihaz politikalarına göre uygulanır.
+
+      Bu politika, kanal geçişleri için uygulanmaz.</translation>
 <translation id="7295019613773647480">Denetlenen kullanıcıları etkinleştir</translation>
 <translation id="7301543427086558500">Arama motorundan arama terimlerini çıkartmak için kullanılabilecek alternatif URL'lerin bir listesini belirtir. URL'ler, arama terimlerinin çıkartılmasında kullanılacak <ph name="SEARCH_TERM_MARKER" /> dizesini içermelidir.
 
@@ -2696,6 +2730,12 @@
 
           Örnek kalıplar için https://www.chromium.org/developers/how-tos/chrome-frame-getting-started sayfasına bakın.</translation>
 <translation id="8493645415242333585">Tarayıcı geçmişini kaydetmeyi devre dışı bırak</translation>
+<translation id="8498293625012059298">Şifre değiştirme URL'sini yapılandırın (yalnızca HTTP ve HTTPS şemaları). Şifre koruma hizmeti, tarayıcıda bir uyarı gördükten sonra şifrelerini değiştirmeleri için kullanıcıları bu URL'ye gönderir.
+      <ph name="PRODUCT_NAME" /> ürününün bu şifre değiştirme sayfasında yeni şifre parmak izini doğru bir şekilde yakalayabilmesi için lütfen şifre değiştirme sayfanızın https://www.chromium.org/developers/design-documents/create-amazing-password-forms adresinde belirtilen yönergelere uygun olduğundan emin olun.
+
+      Bu ayar etkinleştirilirse şifre koruma hizmeti, tarayıcıda bir uyarı gördükten sonra şifrelerini değiştirmeleri için kullanıcıları bu URL'ye gönderir.
+      Bu ayar devre dışı bırakılır veya ayarlanmazsa şifre koruma hizmeti, şifrelerini değiştirmeleri için kullanıcıları https://myaccounts.google.com adresine gönderir.
+      Bu politika, bir <ph name="MS_AD_NAME" /> alanına katılmayan Windows örneklerinde kullanılamaz.</translation>
 <translation id="8499172469244085141">Varsayılan Ayarlar (kullanıcılar geçersiz kılabilir)</translation>
 <translation id="8507835864888987300">Otomatik Güncellemeler için bir hedef sürüm ayarlar.
 
@@ -2754,6 +2794,14 @@
       Yönetilen bir cihazda bu politika ayarlanmadığında, cihazın sanal makine
 çalıştırmasına izin verilmez.
       Yönetilmeyen cihazların sanal makineler çalıştırmasına izin verilir.</translation>
+<translation id="8669669491594628013">Şifre koruma uyarısının tetiklenmesini kontrol etmenize olanak tanır. Şifre koruma, korunan şifrelerini şüpheli olabilecek sitelerde yeniden kullandıklarında kullanıcıları uyarır.
+
+      Korunacak şifreyi yapılandırmak için "PasswordProtectionLoginURLs" ve "PasswordProtectionChangePasswordURL" politikalarını kullanabilirsiniz.
+
+      Bu politikanın "PasswordProtectionWarningOff" değerine ayarlanması halinde herhangi bir şifre koruma uyarısı gösterilmez.
+      Bu politikanın "PasswordProtectionWarningOnPasswordReuse" değerine ayarlanması halinde kullanıcı korunan şifresini beyaz listede yer almayan bir sitede yeniden kullandığında şifre koruma uyarısı gösterilir.
+      Bu politikanın "PasswordProtectionWarningOnPhishingReuse" değerine ayarlanması halinde kullanıcı korunan şifresini kimlik avı sitelerinde yeniden kullandığında şifre koruma uyarısı gösterilir.
+      Bu politikanın ayarlanmadan bırakılması halinde şifre koruma hizmeti yalnızca Google şifrelerini korur ancak kullanıcı bu ayarı değiştirebilir.</translation>
 <translation id="8672321184841719703">Hedef Otomatik Güncelleme Sürümü</translation>
 <translation id="867410340948518937">U2F (Evrensel İkinci Faktör)</translation>
 <translation id="8685024486845674965">Şifre koruma uyarısı, şifre yeniden kullanımıyla tetiklendi</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb
index f675319..fbc2438c 100644
--- a/components/policy/resources/policy_templates_uk.xtb
+++ b/components/policy/resources/policy_templates_uk.xtb
@@ -239,6 +239,13 @@
       Якщо все ж потрібно під’єднуватися до сервера з помилками, для правила потрібно вибрати значення "tls1.1". Це тимчасовий захід, і помилки на сервері буде незабаром виправлено.</translation>
 <translation id="1864269674877167562">Якщо для цього правила не вказано значення або його не налаштовано, <ph name="PRODUCT_OS_NAME" /> не показуватиме опції автозавершення під час входу.
       Якщо для цього правила вказано рядок з іменем домену, <ph name="PRODUCT_OS_NAME" /> показуватиме опцію автозавершення під час входу, і користувач зможе ввести лише власне ім’я користувача без розширення імені домену. Користувач також зможе змінити це розширення імені домену.</translation>
+<translation id="1864382791685519617">Вмикає прогнозування мережі в <ph name="PRODUCT_NAME" /> і забороняє користувачам змінювати це налаштування.
+
+      Керує попереднім викликом DNS, попереднім з’єднанням TCP й SSL і попереднім відтворення веб-сторінок.
+
+      Якщо це правило налаштовано, користувачі не зможуть змінити або замінити його в <ph name="PRODUCT_NAME" />.
+
+      Якщо це правило не налаштовано, прогнозування мережі буде ввімкнено, але користувачі не зможуть змінити його.</translation>
 <translation id="1865417998205858223">Основні дозволи</translation>
 <translation id="186719019195685253">Дія, яка має виконуватися під час живлення від електромережі, коли виникає затримка через неактивність.</translation>
 <translation id="187819629719252111">Надає доступ до локальних файлів у комп’ютері, дозволяючи <ph name="PRODUCT_NAME" /> відображати діалогові вікна вибору файлів. Якщо це налаштування ввімкнено, користувачі можуть відкривати діалогові вікна звичайним способом. Якщо це налаштування вимкнено, під час виконання дії, яка викликає діалогове вікно вибору файлу (наприклад, імпорт закладок, завантаження файлів, збереження посилань тощо), відображається повідомлення. Користувач має натиснути кнопку "Скасувати" в діалоговому вікні вибору файлу. Якщо це налаштування не встановлено, користувачі можуть відкривати діалогові вікна вибору файлу звичайним способом.</translation>
@@ -695,6 +702,7 @@
       Якщо правило не налаштовано, застосовується параметр <ph name="PRINTERS_ALLOW_ALL" />.
       </translation>
 <translation id="2908277604670530363">Максимальна кількість одночасних підключень до проксі-сервера</translation>
+<translation id="2951386431828317490">Вмикає функцію автозаповнення для профілів</translation>
 <translation id="2956777931324644324">Це правило не підтримується від 36-ї версії <ph name="PRODUCT_NAME" />.
 
       Указує, чи вмикати розширення пов’язаних із доменом сертифікатів TLS.
@@ -703,6 +711,7 @@
 <translation id="2957506574938329824">Заборонити всім сайтам запитувати доступ до пристроїв Bluetooth через API Web Bluetooth</translation>
 <translation id="2957513448235202597">Тип облікового запису для автентифікації <ph name="HTTP_NEGOTIATE" /></translation>
 <translation id="2959898425599642200">Правила обходу проксі-сервера</translation>
+<translation id="2960128438010718932">Поетапний графік застосування нового оновлення</translation>
 <translation id="2960691910306063964">Увімкнути або вимкнути автентифікацію без PIN-коду для хостів віддаленого доступу</translation>
 <translation id="2976002782221275500">Визначає період часу неактивності користувача, після якого екран затемнюється, якщо використовується заряд акумулятора.
 
@@ -743,6 +752,7 @@
       Незалежно від налаштувань правила, користувачі не можуть змінювати параметри оптимізації WPAD.</translation>
 <translation id="3072045631333522102">Заставка, яка буде відображатися на екрані входу в режимі роздрібного продажу</translation>
 <translation id="3072847235228302527">Установити Умови використання для локального облікового запису на пристрої</translation>
+<translation id="3077183141551274418">Вмикає або вимикає життєві цикли вкладок</translation>
 <translation id="3086995894968271156">Налаштування приймача Cast у <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3088796212846734853">Дає змогу налаштовувати список шаблонів URL-адрес, що визначають сайти, яким дозволено показувати зображення.
 
@@ -1293,6 +1303,11 @@
       Ці пропозиції завантажуються віддалено із серверів Google.
 
       Якщо встановлено значення false, пропозиції не завантажуватимуться чи не показуватимуться.</translation>
+<translation id="4788252609789586009">Вмикає функцію автозаповнення в <ph name="PRODUCT_NAME" /> і автоматично вводить дані кредитної картки у веб-форми, використовуючи раніше збережену інформацію.
+
+      Якщо це налаштування вимкнено, функція автозаповнення не пропонуватиме та не зберігатиме дані кредитних карток, а також не зберігатиме додаткові дані кредитних карток, які користувач може вводити під час роботи в Інтернеті.
+
+      Якщо це налаштування ввімкнено або значення не встановлено, користувачі зможуть керувати функцією автозаповнення даних кредитних карток в інтерфейсі.</translation>
 <translation id="4791031774429044540">Увімкнути функцію доступності великого курсора.
 
           Якщо для цього правила встановлено значення "true", великий курсор буде завжди ввімкнено.
@@ -1417,6 +1432,11 @@
       Якщо для цього правила встановлено значення "Застосовується", <ph name="PRODUCT_OS_NAME" /> не дозволить пристрою завантажитись у режимі розробника. Якщо режим розробника буде ввімкнено, система не завантажуватиметься, а на екрані з’явиться повідомлення про помилку.
 
       Якщо для цього правила встановлено значення "Не застосовується", режим розробника буде й надалі доступний на пристрої.</translation>
+<translation id="520403427390290017">Функція життєвих циклів вкладок звільняє ЦП й пам’ять, пов’язані з відкритими вкладками, що довго не використовувалися. Спершу вкладки стискаються, потім дезактивуються й зрештою закриваються.
+
+      Якщо для правила вибрано значення false, життєві цикли вкладок буде вимкнено. Усі вкладки працюватимуть, як зазвичай.
+
+      Якщо правило не налаштовано або для нього вибрано значення true, життєві цикли вкладок буде ввімкнено.</translation>
 <translation id="5208240613060747912">Дозволяє налаштовувати список шаблонів URL-адрес, що визначають сайти, яким заборонено показувати сповіщення. Якщо це правило не встановлено, для всіх сайтів використовується загальне значення за умовчанням – з правила "DefaultNotificationsSetting" (якщо його встановлено) або з особистих налаштувань користувача.</translation>
 <translation id="5219844027738217407">У додатках Android це правило стосується лише мікрофона. Коли для правила встановлено значення "true", мікрофон вимкнено в усіх додатках Android.</translation>
 <translation id="523505283826916779">Налаштування доступності</translation>
@@ -1462,6 +1482,11 @@
 
           Якщо для цього правила вибрано значення "False", користувачі не зможуть транслювати вміст на свої пристрої. Якщо для цього правила вибрано значення "True", користувачі зможуть транслювати вміст. Якщо це правило не налаштовано, користувачі не зможуть транслювати вміст на зареєстрованих пристроях з ОС Chrome, але матимуть змогу робити це на інших пристроях.</translation>
 <translation id="5330684698007383292">Дозволити <ph name="PRODUCT_FRAME_NAME" /> обробляти вказані типи вмісту</translation>
+<translation id="5360146044009867539">Вмикає функцію автозаповнення в <ph name="PRODUCT_NAME" /> і автоматично вводить дані профілю й адресу у веб-форми, використовуючи раніше збережену інформацію.
+
+      Якщо це налаштування вимкнено, функція автозаповнення не пропонуватиме та не зберігатиме адресу, а також не зберігатиме додаткові дані про адресу, які користувач може вводити під час роботи в Інтернеті.
+
+      Якщо це налаштування ввімкнено або значення не встановлено, користувачі зможуть керувати функцією автозаповнення адреси в інтерфейсі.</translation>
 <translation id="5365946944967967336">Показати кнопку "Головна" на панелі інструментів</translation>
 <translation id="5366745336748853475">Дозволяє вказати список шаблонів URL-адрес сайтів, для яких сертифікат клієнта автоматично вибирається на екрані входу у фреймі з процесом SAML (якщо сайт надсилає запит на сертифікат). Наприклад, можна налаштувати сертифікат для всіх пристроїв, який надається постачальнику ідентифікатора SAML.
 
@@ -2142,6 +2167,14 @@
 
           Якщо цей параметр вимкнено, ця функція недоступна.</translation>
 <translation id="7275334191706090484">Закладки, якими керує адміністратор</translation>
+<translation id="729492886167634859">Це правило надає список із відсотковою часткою пристроїв <ph name="PRODUCT_OS_NAME" /> в організаційному підрозділі, які оновлюватимуться впродовж тижня, починаючи від дня, коли оновлення вперше виявлено. Час оновлення є пізнішім за час публікації, оскільки може пройти певний час, перш ніж пристрій перевірятиме наявність оновлень.
+      Значення n у списку означає відсоток пристроїв, які повинні оновитися до наступної версії впродовж n-го тижня після виявлення оновлення. Наприклад, якщо оновлення виявлено сьогодні, то перше значення в списку визначає відсоток пристроїв в організаційному підрозділі, які повинні встановити цю версію впродовж тижня. Друге значення вказує відсоткову частку пристроїв в організаційному підрозділі, які повинні оновитися до цієї версії впродовж 2 тижнів тощо.
+
+      Якщо для цього правила встановлено значення, оновлення ігноруватимуть правило <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> і натомість застосовуватимуть це правило.
+
+      Якщо список порожній, оновлення не буде поетапним і застосовуватиметься відповідно до правил пристрою.
+
+      Це правило не застосовується до змін каналів.</translation>
 <translation id="7295019613773647480">Увімкнути контрольованих користувачів</translation>
 <translation id="7301543427086558500">Визначає список альтернативних URL-адрес, за якими можна отримувати пошукові терміни з пошукової системи. URL-адреси мають містити рядок <ph name="SEARCH_TERM_MARKER" />, який використовується для отримання пошукових термінів.
 
@@ -2598,6 +2631,12 @@
 
           Приклади шаблонів можна переглянути на сторінці https://www.chromium.org/developers/how-tos/chrome-frame-getting-started.</translation>
 <translation id="8493645415242333585">Вимкнути зберігання історії веб-переглядача</translation>
+<translation id="8498293625012059298">Налаштовує URL-адресу для змінення пароля (лише для схем HTTP та HTTPS). Служба захисту паролів спрямовуватиме користувачів на цю URL-адресу для змінення пароля після застереження у веб-переглядачі.
+      Щоб продукт <ph name="PRODUCT_NAME" /> міг правильно зберігати відбиток пароля на сторінці для його змінення, переконайтеся, що вона відповідає правилам на сайті https://www.chromium.org/developers/design-documents/create-amazing-password-forms.
+
+      Якщо цей параметр увімкнено, користувачі спрямовуватимуться на цю URL-адресу для змінення пароля після застереження у веб-переглядачі.
+      Якщо цей параметр вимкнено або не налаштовано, для змінення пароля користувачі спрямовуватимуться на сторінку https://myaccounts.google.com.
+      Це правило недоступне у версіях Windows, що не зареєстровані в домені <ph name="MS_AD_NAME" />.</translation>
 <translation id="8499172469244085141">Налаштування за умовчанням (користувачі можуть замінювати)</translation>
 <translation id="8507835864888987300">Установлює цільову версію для автоматичних оновлень.
 
@@ -2650,6 +2689,13 @@
       Якщо змінити значення цього правила на false, нові віртуальні машини не запускатимуться, але вже запущені не вимкнуться.
       Якщо це правило не налаштовано на керованому пристрої, йому заборонено запускати віртуальні машини.
       Некерованим пристроям дозволено запускати віртуальні машини.</translation>
+<translation id="8669669491594628013">Дає змогу контролювати активацію застережень про захист паролем. Користувачі отримуватимуть такі попередження, коли використовуватимуть свій захищений пароль на потенційно підозрілих сайтах.
+
+      За допомогою правил PasswordProtectionLoginURLs і PasswordProtectionChangePasswordURL можна вибрати, які паролі мають бути захищеними.
+      Якщо для цього правила вибрано значення PasswordProtectionWarningOff, застереження про захист паролем не з’являтиметься.
+      Якщо для цього правила вибрано значення PasswordProtectionWarningOnPasswordReuse, застереження про захист паролем з’являється, коли користувач вводить свій захищений пароль на сайті, якого немає в білому списку.
+      Якщо для цього правила вибрано значення PasswordProtectionWarningOnPhishingReuse, застереження про захист паролем з’являється, коли користувач вводить свій захищений пароль на фішинговому сайті.
+      Якщо це правило не налаштовано, служба захисту паролів працюватиме лише для паролів Google. Цей параметр можна змінити.</translation>
 <translation id="8672321184841719703">Цільова версія автоматичного оновлення</translation>
 <translation id="867410340948518937">U2F (універсальний другий фактор)</translation>
 <translation id="8685024486845674965">Застереження про захист паролем активується під час повторного введення пароля</translation>
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index d43513c..e9475fe8 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -237,6 +237,13 @@
       如果實際狀況與上述情形皆不相符,而必須與發生錯誤的伺服器維持相容,系統可能會將這項政策的值設為「tls1.1」。這種方法是權宜之計,伺服器錯誤應該很快就會解決。</translation>
 <translation id="1864269674877167562">如果將這項政策設為空白字串或不予設定,<ph name="PRODUCT_OS_NAME" /> 將不會在使用者登入過程中顯示自動完成選項。
       如果將這項政策設為代表網域名稱的字串,<ph name="PRODUCT_OS_NAME" /> 則會在使用者登入過程中顯示自動完成選項,讓使用者輸入自己的使用者名稱 (不含網域名稱)。不過,使用者可以覆寫您在這裡指定的網域名稱。</translation>
+<translation id="1864382791685519617">啟用 <ph name="PRODUCT_NAME" /> 的網路預測功能,並且禁止使用者變更這項設定。
+
+      這項設定是用來控制 DNS 預先擷取、TCP 和 SSL 預先連線,以及網頁預先轉譯作業。
+
+      如果設定這項政策,使用者將無法在 <ph name="PRODUCT_NAME" /> 中變更或覆寫這項設定。
+
+      如果未設定這項政策,系統會啟用網路預測功能,不過使用者可變更這項設定。</translation>
 <translation id="1865417998205858223">金鑰權限</translation>
 <translation id="186719019195685253">使用 AC 電源的情況下,系統在達到閒置延遲時間時所採取的動作</translation>
 <translation id="187819629719252111">允許「<ph name="PRODUCT_NAME" />」顯示檔案選項對話方塊,即可允許本機檔案的存取權。如果你啟用這項設定,使用者就能照常開啟檔案選項對話方塊。如果你停用這項設定,只要使用者執行的動作會開啟檔案選項對話方塊 (例如匯入書籤、上傳檔案、儲存連結等),螢幕上就會顯示訊息,並假設使用者已按下檔案選項對話方塊上的 [取消]。如果未調整這項設定,使用者就能照常開啟檔案選項對話方塊。</translation>
@@ -693,6 +700,7 @@
       如果未設定這項政策,系統會自動採用 <ph name="PRINTERS_ALLOW_ALL" />。
       </translation>
 <translation id="2908277604670530363">Proxy 伺服器的並行連線數量上限</translation>
+<translation id="2951386431828317490">啟用個人資料的自動填入功能</translation>
 <translation id="2956777931324644324">我們已於 <ph name="PRODUCT_NAME" /> 版本 36 中移除這項政策。
 
       指定是否要啟用 TLS 網域專屬憑證擴充功能。
@@ -701,6 +709,7 @@
 <translation id="2957506574938329824">不允許任何網站透過 Web Bluetooth API 要求存取藍牙裝置</translation>
 <translation id="2957513448235202597"><ph name="HTTP_NEGOTIATE" /> 驗證模式的帳戶類型</translation>
 <translation id="2959898425599642200">Proxy 略過規則</translation>
+<translation id="2960128438010718932">分階段套用更新的時程</translation>
 <translation id="2960691910306063964">針對遠端存取主機啟用或停用無 PIN 碼驗證機制</translation>
 <translation id="2976002782221275500">指定時間長度,如果系統在電池供電環境下執行且未偵測到使用者輸入行為,就會在這段時間過後將螢幕調暗。
 
@@ -741,6 +750,7 @@
       無論系統是否設定這項政策或這項政策的設定方式為何,使用者一律無法變更 WPAD 最佳化設定。</translation>
 <translation id="3072045631333522102">在零售模式下登入畫面所使用的螢幕保護程式</translation>
 <translation id="3072847235228302527">為裝置本機帳戶設定《服務條款》</translation>
+<translation id="3077183141551274418">啟用或停用分頁生命週期功能</translation>
 <translation id="3086995894968271156">設定「<ph name="PRODUCT_NAME" />」的 Cast 接收器</translation>
 <translation id="3088796212846734853">讓你設定網址模式清單,指定可顯示圖片的網站。
 
@@ -1292,6 +1302,11 @@
       這些建議是從遠端向 Google 伺服器擷取而來。
 
       如果設為 false,則不會擷取或顯示建議。</translation>
+<translation id="4788252609789586009">啟用 <ph name="PRODUCT_NAME" /> 的自動填入功能,並允許使用者使用先前儲存的信用卡資訊自動填寫網路表單。
+
+      如果停用這項設定,自動填入功能就不會提出填寫建議或填入信用卡資訊,也無法儲存使用者在瀏覽網路時提交的其他信用卡資訊。
+
+      如果啟用這項設定或未設定任何值,使用者就能透過 UI 控制信用卡資訊的自動填入功能。</translation>
 <translation id="4791031774429044540">啟用大型游標協助功能。
 
           如果你將這項政策設為 True,系統將一律啟用大型游標。
@@ -1416,6 +1431,11 @@
       如果將這項政策設為 True,<ph name="PRODUCT_OS_NAME" /> 會防止裝置在開發人員模式下啟動。嘗試切換至開發人員模式時,系統會拒絕啟動指令並顯示錯誤畫面。
 
       如未設定這項政策,或將政策設定為 False,則裝置仍可使用開發人員模式。</translation>
+<translation id="520403427390290017">如果有長時間未使用的運作中分頁,分頁生命週期功能可對這類分頁進行節流和凍結處理,然後再予以捨棄,藉此收回相關的 CPU 和記憶體。
+
+      如果將這項政策設為 false,就會停用分頁生命週期功能,且所有分頁都將繼續照常運作。
+
+      如果將這項政策設為 true 或未指定任何值,就會啟用分頁生命週期功能。</translation>
 <translation id="5208240613060747912">允許你設定網址模式清單,指定不可以展示通知的網站。如果未設定這項政策,系統會從「DefaultNotificationsSetting」政策 (如果有設定的話) 或使用者的個人設定,將通用預設值套用至所有網站。</translation>
 <translation id="5219844027738217407">這項政策對 Android 應用程式的影響僅限於麥克風。將這項政策設為 true 時,所有 Android 應用程式皆無法使用麥克風 (設為靜音),沒有任何例外。</translation>
 <translation id="523505283826916779">協助工具設定</translation>
@@ -1461,6 +1481,11 @@
 
           如果這項政策設為 False,使用者就無法將內容投放至自己的裝置。如果這項政策設為 True,則使用者可投放內容。如果未設定這項政策,使用者就無法將內容投放至已註冊的 Chrome 作業系統裝置,但可投放至未註冊的裝置。</translation>
 <translation id="5330684698007383292">允許 <ph name="PRODUCT_FRAME_NAME" /> 處理列出的內容類型</translation>
+<translation id="5360146044009867539">啟用 <ph name="PRODUCT_NAME" /> 的自動填入功能,並允許使用者使用先前儲存的個人資料和地址資訊自動填寫網路表單。
+
+      如果停用這項設定,自動填入功能就不會提出填寫建議或填入地址資訊,也無法儲存使用者在瀏覽網路時提交的其他地址資訊。
+
+      如果啟用這項設定或未設定任何值,使用者就能透過 UI 控制地址資訊的自動填入功能。</translation>
 <translation id="5365946944967967336">在工具列上顯示 [首頁] 按鈕</translation>
 <translation id="5366745336748853475">允許以清單列出網址模式,指定要在 SAML 流程代管架構的登入畫面自動選取用戶端憑證的網站 (如果網站要求憑證的話)。實際應用範例為設定要提供給 SAML IdP 的裝置通用憑證。
 
@@ -2147,6 +2172,15 @@
 
           如果你停用這項設定,使用者就無法使用這項功能。</translation>
 <translation id="7275334191706090484">受管理書籤</translation>
+<translation id="729492886167634859">這項政策是用來定義一份百分比清單,藉此指定首次偵測到更新的當天算起的每一週內,機構單位中可安裝更新的 <ph name="PRODUCT_OS_NAME" />裝置百分比。偵測到更新的時間會晚於更新發佈時間,因為更新發佈後,裝置可能要經過一段時間才會檢查是否有更新。
+
+      清單中的第 n 值代表應在偵測到更新後第 n 週內更新至新版本的裝置百分比。舉例來說,如果系統在今天偵測到更新內容,則清單中的第一個值定義的是從今天算起 1 週內,機構單位中應安裝該版本的裝置百分比,第二個值定義的則是從今天算起 2 週內,機構單位中應安裝該版本的裝置百分比,以此類推。
+
+      如果為這項政策定義了任何值,更新會忽略 <ph name="DEVICE_UPDATE_SCATTER_FACTOR_POLICY_NAME" /> 政策並改為遵循這項政策。
+
+      如果這份清單未包含任何內容,系統就不會分階段安裝更新,而會依其他裝置政策套用更新。
+
+      版本切換不適用這項政策。</translation>
 <translation id="7295019613773647480">啟用受監管的使用者</translation>
 <translation id="7301543427086558500">指定替代網址清單,以供系統從搜尋引擎擷取搜尋字詞。網址中必須包含「<ph name="SEARCH_TERM_MARKER" />」字串,才能擷取搜尋字詞。
 
@@ -2590,6 +2624,12 @@
 
           如需模式範例,請參閱 https://www.chromium.org/developers/how-tos/chrome-frame-getting-started。</translation>
 <translation id="8493645415242333585">停用儲存瀏覽記錄功能</translation>
+<translation id="8498293625012059298">設定變更密碼網址 (僅限 HTTP 和 HTTPS 配置)。一旦使用者在瀏覽器中看到警告訊息,密碼保護服務便會將其傳送到這個網址來變更密碼。
+      為了讓 <ph name="PRODUCT_NAME" /> 能在這個變更密碼頁面中正確擷取新的密碼指紋,請確認變更密碼頁面符合以下網址所述的規範:https://www.chromium.org/developers/design-documents/create-amazing-password-forms。
+
+      如果啟用這項設定,一旦使用者在瀏覽器中看到警告訊息,密碼保護服務便會將其傳送到這個網址來變更密碼。
+      如果停用這項設定或不予設定,則密碼保護服務會將使用者傳送到 https://myaccounts.google.com 來變更密碼。
+      這項政策不適用於未加入 <ph name="MS_AD_NAME" /> 網域的 Windows 執行個體。</translation>
 <translation id="8499172469244085141">預設設定 (使用者可覆寫)</translation>
 <translation id="8507835864888987300">設定自動更新的目標版本。
 
@@ -2643,6 +2683,14 @@
       當這項政策變更為 False 時,會禁止裝置啟動新的虛擬機器,但不會關閉已在執行中的虛擬機器。
       在受管理的裝置上,如果不設定這項政策,裝置將無法執行虛擬機器。
       未受管理的裝置則可執行虛擬機器。</translation>
+<translation id="8669669491594628013">讓你控制密碼保護警告訊息的觸發設定。當使用者在疑似不安全的網站上重複使用受保護的密碼時,密碼保護功能就會向使用者發出警示。
+
+      你可以使用「PasswordProtectionLoginURLs」和「PasswordProtectionChangePasswordURL」政策設定要保護的密碼。
+
+      如果將這項政策設為「PasswordProtectionWarningOff」,系統就不會顯示密碼保護警告訊息。
+      如果將這項政策設為「PasswordProtectionWarningOnPasswordReuse」,當使用者在任何非許可的網站上重複使用受保護的密碼時,系統就會顯示密碼保護警告訊息。
+      如果將這項政策設為「PasswordProtectionWarningOnPhishingReuse」,當使用者在網路詐騙網站上重複使用受保護的密碼時,系統就會顯示密碼保護警告訊息。
+      如果未設定這項政策,密碼保護服務就只會保護 Google 密碼,但使用者可以變更這項設定。</translation>
 <translation id="8672321184841719703">指定目標的自動更新版本</translation>
 <translation id="867410340948518937">U2F (通用雙重驗證)</translation>
 <translation id="8685024486845674965">密碼遭到重複使用時,會觸發密碼保護警告</translation>
diff --git a/components/safe_browsing/browser/threat_details.cc b/components/safe_browsing/browser/threat_details.cc
index 36f1bf8..eeda739 100644
--- a/components/safe_browsing/browser/threat_details.cc
+++ b/components/safe_browsing/browser/threat_details.cc
@@ -579,6 +579,7 @@
   frame->GetRemoteInterfaces()->GetInterface(&threat_reporter);
   safe_browsing::mojom::ThreatReporter* raw_threat_report =
       threat_reporter.get();
+  pending_render_frame_hosts_.insert(frame);
   raw_threat_report->GetThreatDOMDetails(
       base::BindOnce(&ThreatDetails::OnReceivedThreatDOMDetails, this,
                      base::Passed(&threat_reporter), frame));
@@ -589,6 +590,11 @@
     mojom::ThreatReporterPtr threat_reporter,
     content::RenderFrameHost* sender,
     std::vector<mojom::ThreatDOMDetailsNodePtr> params) {
+  // If the RenderFrameHost was closed between sending the IPC and this callback
+  // running, |sender| will be invalid.
+  if (pending_render_frame_hosts_.erase(sender) == 0)
+    return;
+
   // Lookup the FrameTreeNode ID of any child frames in the list of DOM nodes.
   const int sender_process_id = sender->GetProcess()->GetID();
   const int sender_frame_tree_node_id = sender->GetFrameTreeNodeId();
@@ -806,4 +812,9 @@
       content::BrowserThread::UI, FROM_HERE,
       base::Bind(done_callback_, base::Unretained(web_contents())));
 }
+
+void ThreatDetails::FrameDeleted(RenderFrameHost* render_frame_host) {
+  pending_render_frame_hosts_.erase(render_frame_host);
+}
+
 }  // namespace safe_browsing
diff --git a/components/safe_browsing/browser/threat_details.h b/components/safe_browsing/browser/threat_details.h
index 84469f5..acea93c2 100644
--- a/components/safe_browsing/browser/threat_details.h
+++ b/components/safe_browsing/browser/threat_details.h
@@ -101,6 +101,9 @@
 
   void OnRedirectionCollectionReady();
 
+  // WebContentsObserver implementation:
+  void FrameDeleted(content::RenderFrameHost* render_frame_host) override;
+
  protected:
   friend class ThreatDetailsFactoryImpl;
   friend class TestThreatDetailsFactory;
@@ -260,6 +263,10 @@
   // Whether the |done_callback_| has been invoked.
   bool is_all_done_;
 
+  // The set of RenderFrameHosts that have pending requests and haven't been
+  // deleted.
+  std::set<content::RenderFrameHost*> pending_render_frame_hosts_;
+
   FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HistoryServiceUrls);
   FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HttpsResourceSanitization);
   FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HTTPCacheNoEntries);
diff --git a/components/strings/components_strings_am.xtb b/components/strings/components_strings_am.xtb
index afe04dc..8743798 100644
--- a/components/strings/components_strings_am.xtb
+++ b/components/strings/components_strings_am.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">ተጨማሪ ዝርዝሮችን ያቅርቡ</translation>
 <translation id="1021110881106174305">ተቀባይነት ያላቸው ካርዶች</translation>
 <translation id="1032854598605920125">በሰዓት አቅጣጫ አሽከርክር</translation>
+<translation id="1035334672863811645">ወደ Chrome ይግቡ</translation>
 <translation id="1038842779957582377">ያልታወቀ ስም</translation>
 <translation id="1050038467049342496">ሌሎች መተግበሪያዎችን ይዝጉ</translation>
 <translation id="1055184225775184556">&amp;አክልን ቀልብስ</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 የአስተያየት ጥቆማ}one{# የአስተያየት ጥቆማዎች}other{# የአስተያየት ጥቆማዎች}}</translation>
 <translation id="2079545284768500474">ቀልብስ</translation>
 <translation id="20817612488360358">የስርዓት ተኪ ቅንብሮች ስራ ላይ እንዲውሉ ተቀናብረዋል ግን ግልጽ የሆነ የተኪ ውቅርም ተገልጿል።</translation>
-<translation id="2084558088529668945">የእርስዎን የይለፍ ቃል በ<ph name="ORG_NAME" /> በማይተዳደር ጣቢያ ላይ አስገብተዋል። የእርስዎን መለያ ለመጠበቅ ሲባል የእርስዎን የይለፍ ቃል በሌሎች መተግበሪያዎች እና ጣቢያዎች ላይ አይጠቀሙበት።</translation>
 <translation id="2091887806945687916">ድምፅ</translation>
 <translation id="2094505752054353250">የጎራ አለመዛመድ</translation>
 <translation id="2096368010154057602">ክፍል</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">መጥፎ የማረጋገጫ ፊርማ</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> ተጨማሪ ንጥል}one{<ph name="ITEM_COUNT" /> ተጨማሪ ንጥሎች}other{<ph name="ITEM_COUNT" /> ተጨማሪ ንጥሎች}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome የእርስዎን የ<ph name="ORG_NAME" /> የይለፍ ቃል በሌሎች ጣቢያዎች ላይ ዳግመኛ ከተጠቀሙበት እንደገና እንዲያዋቅሩት ይመክራል።</translation>
 <translation id="4196861286325780578">&amp;ውሰድን ድገም</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />የኬላ እና የጸረ-ቫይረስ ውቅረቶችን መፈተሽ<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">ብልሽቶች</translation>
@@ -584,6 +583,7 @@
 <translation id="5089810972385038852">ግዛት</translation>
 <translation id="5094747076828555589">ይህ አገልጋይ <ph name="DOMAIN" /> መሆኑን ሊያረጋግጥ አልቻለም፤ የደህንነት እውቅና ማረጋገጫው በChromium የሚታመን አይደለም። ይሄ በተሳሳተ አወቃቀር ወይም አንድ አጥቂ ግንኙነትዎን በመጥለፉ የተከሰተ ሊሆን ይችላል።</translation>
 <translation id="5095208057601539847">ጠቅላይ ግዛት</translation>
+<translation id="5098332213681597508">ይህ ስም የመጣው ከእርስዎ የGoogle መለያ ነው።</translation>
 <translation id="5115563688576182185">(64-ቢት)</translation>
 <translation id="5121084798328133320">ካረጋገጡ በኋላ የGoogle Payments መለያዎ ካርድ ዝርዝሮች ለዚህ ጣቢያ ይጋራሉ።</translation>
 <translation id="5128122789703661928">ይህ ስም ያለው ክፍለ-ጊዜ ለስረዛ ልክ ያልሆነ ነው።</translation>
@@ -669,6 +669,7 @@
 <translation id="5633066919399395251">በአሁኑ ጊዜ በ<ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ላይ የሚገኙ አጥቂዎች የእርስዎን መረጃ (ለምሳሌ፦ ፎቶዎች፣ የይለፍ ቃላት፣ መልዕክቶች እና ክሬዲት ካርዶች) የሚሰርቁ ወይም የሚሰርዙ አደገኛ ፕሮግራሞችን በእርስዎ ኮምፒውተር ላይ ለመጫን እየሞከሩ ሊሆኑ ይችላሉ። <ph name="BEGIN_LEARN_MORE_LINK" />የበለጠ ለመረዳት<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">አታላይ ይዘት ታግዷል።</translation>
 <translation id="5659593005791499971">ኢሜይል</translation>
+<translation id="5666899935841546222">ሁሉም ካርዶችዎ በአንድ ቦታ እንዲሆንልዎ ይፈልጋሉ?</translation>
 <translation id="5675650730144413517">ይህ ገጽ እየሠራ አይደለም</translation>
 <translation id="5685654322157854305">የመላኪያ አድራሻ ያክሉ</translation>
 <translation id="5689199277474810259">ወደ JSON ላክ</translation>
@@ -695,7 +696,6 @@
 <translation id="5869405914158311789">ይህ ጣቢያ ሊደረስበት አይችልም</translation>
 <translation id="5869522115854928033">የተቀመጡ የይለፍ ቃሎች</translation>
 <translation id="5893752035575986141">ክሬዲት ካርዶች ተቀባይነት አላቸው።</translation>
-<translation id="5898382028489516745">Chromium የእርስዎን የ<ph name="ORG_NAME" /> የይለፍ ቃል በሌሎች ጣቢያዎች ላይ ዳግመኛ ከተጠቀሙበት እንደገና እንዲያዋቅሩት ይመክራል።</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ሰምሯል)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ጥቅም ላይ ያለ}one{# ጥቅም ላይ ያለ}other{# ጥቅም ላይ}}</translation>
 <translation id="5939518447894949180">ዳግም አስጀምር</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">የገጹ ቋንቋ ሊታወቅ ስላልቻለ ትርጉሙ አልተሳካም።</translation>
 <translation id="8557066899867184262">CVC ከካርድዎ በስተጀርባ ላይ ይገኛል።</translation>
 <translation id="8559762987265718583">የእርስዎ መሣሪያ ቀን (<ph name="DATE_AND_TIME" />) ልክ ስላልሆነ ወደ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> የግል ግንኙነት መመስረት አይቻልም።</translation>
+<translation id="8564985650692024650">Chromium የእርስዎን የ<ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ይለፍ ቃል በሌሎች ጣቢያዎች ላይ ዳግም ከተጠቀሙበት እንደገና እንዲያዋቅሩት ይመክራል።</translation>
 <translation id="8571890674111243710">ገጽ ወደ <ph name="LANGUAGE" /> በመተርጎም ላይ...</translation>
 <translation id="858637041960032120">ስልክ ቁጥር ያክሉ
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">የመላኪያ አድራሻ</translation>
 <translation id="884923133447025588">ምንም የመሻሪያ ዘዴ አልተገኘም።</translation>
 <translation id="885730110891505394">ከGoogle ጋር ማጋራት</translation>
+<translation id="8858065207712248076">Chrome የእርስዎን የ<ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ይለፍ ቃል በሌሎች ጣቢያዎች ላይ ዳግም ከተጠቀሙበት እንደገና እንዲያዋቅሩት ይመክራል።</translation>
 <translation id="8866481888320382733">የመምሪያ ቅንብሮችን መተንተን ላይ ስህተት</translation>
 <translation id="8870413625673593573">በቅርብ ጊዜ የተዘጉ</translation>
 <translation id="8874824191258364635">የሚሰራ የካርድ ቁጥር ያስገቡ</translation>
diff --git a/components/strings/components_strings_ar.xtb b/components/strings/components_strings_ar.xtb
index 7a5b66e..496b20c 100644
--- a/components/strings/components_strings_ar.xtb
+++ b/components/strings/components_strings_ar.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">تقديم تفاصيل إضافية</translation>
 <translation id="1021110881106174305">البطاقات المقبولة</translation>
 <translation id="1032854598605920125">تدوير في اتجاه عقارب الساعة</translation>
+<translation id="1035334672863811645">‏تسجيل الدخول إلى Chrome</translation>
 <translation id="1038842779957582377">اسم غير معروف</translation>
 <translation id="1050038467049342496">إغلاق التطبيقات الأخرى</translation>
 <translation id="1055184225775184556">تراجع عن الإ&amp;ضافة</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{اقتراح واحد}zero{# اقتراح}two{اقتراحان (#)}few{# اقتراحات}many{# اقتراحًا}other{# اقتراح}}</translation>
 <translation id="2079545284768500474">تراجع</translation>
 <translation id="20817612488360358">تم تعيين إعدادات الخادم الوكيل ليتم استخدامها وتم أيضًا تحديد تهيئة صريحة للخادم الوكيل.</translation>
-<translation id="2084558088529668945">لقد أدخلت كلمة المرور في موقع ويب لا تديره <ph name="ORG_NAME" />. يجب عدم إعادة استخدام كلمة المرور في تطبيقات ومواقع ويب أخرى لحماية حسابك.</translation>
 <translation id="2091887806945687916">الصوت</translation>
 <translation id="2094505752054353250">النطاق غير متطابق</translation>
 <translation id="2096368010154057602">الإدارة</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">توقيع تحقق سيئ</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{عنصر (<ph name="ITEM_COUNT" />) آخر}zero{<ph name="ITEM_COUNT" /> عنصر آخر}two{عنصران (<ph name="ITEM_COUNT" />) آخران}few{<ph name="ITEM_COUNT" /> عناصر أخرى}many{<ph name="ITEM_COUNT" /> عنصرًا آخر}other{<ph name="ITEM_COUNT" /> عنصر آخر}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">‏يوصي Chrome بإعادة تعيين كلمة مرور <ph name="ORG_NAME" /> في حال إعادة استخدامها في مواقع ويب أخرى.</translation>
 <translation id="4196861286325780578">إ&amp;عادة النقل</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />التحقق من عمليات تهيئة الجدار الناري وبرامج مكافحة الفيروسات<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">الأعطال</translation>
@@ -696,7 +695,6 @@
 <translation id="5869405914158311789">لا يمكن الوصول إلى موقع الويب هذا</translation>
 <translation id="5869522115854928033">كلمات المرور المحفوظة</translation>
 <translation id="5893752035575986141">يتم قبول بطاقات الائتمان.</translation>
-<translation id="5898382028489516745">‏يوصي Chromium بإعادة تعيين كلمة مرور <ph name="ORG_NAME" /> في حال إعادة استخدامها في مواقع ويب أخرى.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (تمت المزامنة)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 قيد الاستخدام}zero{# قيد الاستخدام}two{# قيد الاستخدام}few{# قيد الاستخدام}many{# قيد الاستخدام}other{# قيد الاستخدام}}</translation>
 <translation id="5939518447894949180">إعادة</translation>
@@ -1040,6 +1038,7 @@
 <translation id="8553075262323480129">تعذّرت الترجمة لتعذر تحديد لغة الصفحة.</translation>
 <translation id="8557066899867184262">‏رمز التحقق من البطاقة (CVC) موجود خلف بطاقتك.</translation>
 <translation id="8559762987265718583">تعذر إنشاء اتصال خاص بـ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> نظرًا لأن التاريخ والوقت للجهاز (<ph name="DATE_AND_TIME" />) غير صحيحين.</translation>
+<translation id="8564985650692024650">‏يُوصي Chromium بإعادة تحديد كلمة المرور <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> في حال إعادة استخدامها في مواقع ويب أخرى.</translation>
 <translation id="8571890674111243710">جارٍ ترجمة الصفحة إلى <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">إضافة رقم هاتف
 </translation>
@@ -1069,6 +1068,7 @@
 <translation id="884264119367021077">عنوان الشحن</translation>
 <translation id="884923133447025588">لم يتمّ العثور على أي آلبة إبطال.</translation>
 <translation id="885730110891505394">‏مشاركة مع Google</translation>
+<translation id="8858065207712248076">‏يُوصي Chrome بإعادة تحديد كلمة المرور <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> في حال إعادة استخدامها في مواقع ويب أخرى.</translation>
 <translation id="8866481888320382733">خطأ في إعدادات تحليل السياسة</translation>
 <translation id="8870413625673593573">العناصر المغلقة مؤخرًا</translation>
 <translation id="8874824191258364635">أدخِل رقم بطاقة صحيحًا</translation>
diff --git a/components/strings/components_strings_bg.xtb b/components/strings/components_strings_bg.xtb
index 62614034..b34f24ff 100644
--- a/components/strings/components_strings_bg.xtb
+++ b/components/strings/components_strings_bg.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Въвеждане на допълнителни подробности</translation>
 <translation id="1021110881106174305">Приемани карти</translation>
 <translation id="1032854598605920125">Завъртане по часовниковата стрелка</translation>
+<translation id="1035334672863811645">Влезте в Chrome</translation>
 <translation id="1038842779957582377">неизвестно име</translation>
 <translation id="1050038467049342496">Затворете другите приложения.</translation>
 <translation id="1055184225775184556">&amp;Отмяна на добавянето</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 предложение}other{# предложения}}</translation>
 <translation id="2079545284768500474">Отмяна</translation>
 <translation id="20817612488360358">За използване са зададени системни настройки за прокси сървъра, но е посочена и изрична конфигурация.</translation>
-<translation id="2084558088529668945">Въведохте паролата си на сайт, който не се управлява от <ph name="ORG_NAME" />. За да защитите профила си, не използвайте паролата си повторно в други приложения или сайтове.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2094505752054353250">Несъответствие в домейна</translation>
 <translation id="2096368010154057602">Департамент</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Невалиден подпис за потвърждаване</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{още <ph name="ITEM_COUNT" /> елемент}other{още <ph name="ITEM_COUNT" /> елемента}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> – <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome препоръчва да зададете повторно паролата си за <ph name="ORG_NAME" />, ако сте я използвали и на други сайтове.</translation>
 <translation id="4196861286325780578">&amp;Възстановяване на преместването</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Проверете конфигурацията на защитната стена и антивирусния софтуер<ph name="END_LINK" />.</translation>
 <translation id="4220128509585149162">Сривове</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Щат</translation>
 <translation id="5094747076828555589">Сървърът не можа да докаже, че е <ph name="DOMAIN" />; Chromium няма доверие на сертификата му за сигурност. Това може да се дължи на неправилно конфигуриране или на прихващане на връзката ви от атакуващ.</translation>
 <translation id="5095208057601539847">Провинция</translation>
+<translation id="5098332213681597508">Това име е от профила ви в Google.</translation>
 <translation id="5115563688576182185">(64 бита)</translation>
 <translation id="5121084798328133320">След като потвърдите картата си, данните за нея от профила ви в Google Payments ще бъдат споделени с този сайт.</translation>
 <translation id="5128122789703661928">Сесията с това име не е валидна за изтриване.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Извършители на атака, понастоящем използващи <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, може да опитат да инсталират опасни програми на компютъра ви, които крадат или изтриват информацията ви (например снимки, пароли, съобщения и номера на кредитни карти). <ph name="BEGIN_LEARN_MORE_LINK" />Научете повече<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Блокирахме измамно съдържание.</translation>
 <translation id="5659593005791499971">Имейл</translation>
+<translation id="5666899935841546222">Искате ли да разполагате с всичките си карти на едно място?</translation>
 <translation id="5675650730144413517">Тази страница не работи</translation>
 <translation id="5685654322157854305">Добавяне на адрес за доставка</translation>
 <translation id="5689199277474810259">Експортиране във формат JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Няма достъп до този сайт</translation>
 <translation id="5869522115854928033">Запазени пароли</translation>
 <translation id="5893752035575986141">Приемат се кредитни карти.</translation>
-<translation id="5898382028489516745">Chromium препоръчва да зададете повторно паролата си за <ph name="ORG_NAME" />, ако сте я използвали и на други сайтове.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизирано)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Използва се 1}other{Използват се #}}</translation>
 <translation id="5939518447894949180">Нулиране</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Преводът не бе успешен, защото езикът на страницата не можа да бъде определен.</translation>
 <translation id="8557066899867184262">Кодът за проверка се намира на гърба на картата ви.</translation>
 <translation id="8559762987265718583">Не може да се установи частна връзка с/ъс <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, тъй като датата и часът на устройството ви (<ph name="DATE_AND_TIME" />) са неправилни.</translation>
+<translation id="8564985650692024650">Chromium препоръчва да зададете повторно паролата си за <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, ако сте я използвали и на други сайтове.</translation>
 <translation id="8571890674111243710">Превод на страницата на <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">+ тел. номер</translation>
 <translation id="859285277496340001">Сертификатът не посочва механизъм за проверка дали е бил анулиран.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Адрес за доставка</translation>
 <translation id="884923133447025588">Не е намерен механизъм за анулиране.</translation>
 <translation id="885730110891505394">Споделяне с Google</translation>
+<translation id="8858065207712248076">Chrome препоръчва да зададете повторно паролата си за <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, ако сте я използвали и на други сайтове.</translation>
 <translation id="8866481888320382733">Грешка при синтактичния анализ на настройките за правилото</translation>
 <translation id="8870413625673593573">Наскоро затворени</translation>
 <translation id="8874824191258364635">Въведете валиден номер на карта</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb
index 9ef665e..25b515a3 100644
--- a/components/strings/components_strings_bn.xtb
+++ b/components/strings/components_strings_bn.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">অতিরিক্ত বিবরণ দিন</translation>
 <translation id="1021110881106174305">এই কার্ডগুলি গ্রহণ করা হয়</translation>
 <translation id="1032854598605920125">ঘড়ির কাঁটার দিকে ঘোরান</translation>
+<translation id="1035334672863811645">Chrome এ প্রবেশ করুন</translation>
 <translation id="1038842779957582377">অজানা নাম</translation>
 <translation id="1050038467049342496">অন্যান্য অ্যাপ্লিকেশানগুলি বন্ধ করুন</translation>
 <translation id="1055184225775184556">&amp;যোগ করাকে পূর্বাবস্থায় ফেরান</translation>
@@ -165,7 +166,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{১টি প্রস্তাব}one{#টি প্রস্তাব}other{#টি প্রস্তাব}}</translation>
 <translation id="2079545284768500474">পূর্বাবস্থায় ফিরুন</translation>
 <translation id="20817612488360358">সিস্টেম প্রক্সি সেটিংস ব্যবহার করার জন্য সেট আছে কিন্তু একটি সুনির্দিষ্ট প্রক্সি কনফিগারেশনও নির্দিষ্ট করা আছে৷</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" /> এর নয় এমন একটি সাইটে আপনার পাসওয়ার্ড লিখেছেন। আপনার অ্যাকাউন্টের সুরক্ষার জন্য অন্যান্য অ্যাপ এবং সাইটগুলিতে আপনার এই পাসওয়ার্ডটি ব্যবহার করবেন না।</translation>
 <translation id="2091887806945687916">আওয়াজ</translation>
 <translation id="2094505752054353250">ডোমেন মেলেনি</translation>
 <translation id="2096368010154057602">বিভাগ</translation>
@@ -458,7 +458,6 @@
 <translation id="4171400957073367226">খারাপ যাচাইকরণের স্বাক্ষর</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{আরও <ph name="ITEM_COUNT" />টি আইটেম}one{আরও <ph name="ITEM_COUNT" />টি আইটেম}other{আরও <ph name="ITEM_COUNT" />টি আইটেম}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome-এর নীতি অনুযায়ী আপনার <ph name="ORG_NAME" /> পাসওয়ার্ড বদলে ফেলা উচিত যদি আপনি সেটি অন্য কোনও সাইটে ব্যবহার করে থাকেন।</translation>
 <translation id="4196861286325780578">&amp;সরানোর কাজটি আবার করুন</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ফায়ারওয়াল এবং অ্যান্টিভাইরাস কনফিগারেশন পরীক্ষা করে দেখুন<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">ক্র্যাশেস</translation>
@@ -697,7 +696,6 @@
 <translation id="5869405914158311789">এই সাইটটিতে পৌছানো যাচ্ছে না</translation>
 <translation id="5869522115854928033">সংরক্ষিত পাসওয়ার্ড</translation>
 <translation id="5893752035575986141">ক্রেডিট কার্ড গ্রহণ করা হয়।</translation>
-<translation id="5898382028489516745">Chromium-এর নীতি অনুযায়ী আপনার <ph name="ORG_NAME" /> পাসওয়ার্ড বদলে ফেলা উচিত যদি আপনি সেটি অন্য কোনও সাইটে ব্যবহার করে থাকেন।</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (সিঙ্ক হয়েছে)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{১টি ব্যবহৃত হচ্ছে}one{#টি ব্যবহৃত হচ্ছে}other{#টি ব্যবহৃত হচ্ছে}}</translation>
 <translation id="5939518447894949180">রিসেট করুন</translation>
@@ -1039,6 +1037,7 @@
 <translation id="8553075262323480129">পৃষ্ঠার ভাষা নির্ধারণ না করতে পারার কারণে অনুবাদ ব্যর্থ হয়েছে৷</translation>
 <translation id="8557066899867184262">আপনার কার্ডের পিছনে সিভিসি ছবিটি আছে।</translation>
 <translation id="8559762987265718583"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> এ একটি ব্যক্তিগত সংযোগ স্থাপন করা যায়নি কারণ আপনার ডিভাইসের তারিখ এবং সময় (<ph name="DATE_AND_TIME" />) সঠিক নয়৷</translation>
+<translation id="8564985650692024650">Chromium-এর নীতি অনুযায়ী আপনার <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> পাসওয়ার্ড বদলে ফেলা উচিত যদি আপনি সেটি অন্য কোনও সাইটে ব্যবহার করে থাকেন।</translation>
 <translation id="8571890674111243710">পৃষ্ঠাটি<ph name="LANGUAGE" />তে অনুবাদ করুন...</translation>
 <translation id="858637041960032120">ফোননম্বর জুড়ুন</translation>
 <translation id="859285277496340001">শংসাপত্রটি প্রত্যাহার করা হয়েছে কিনা তা যাচাই করতে শংসাপত্রটি কোনও কারিগরীকে নির্দিষ্ট করে না৷</translation>
@@ -1066,6 +1065,7 @@
 <translation id="884264119367021077">শিপিং ঠিকানা</translation>
 <translation id="884923133447025588">কোন প্রত্যাহার নির্মাণকৌশল পাওয়া যায় নি৷</translation>
 <translation id="885730110891505394">Google এর সাথে ভাগ করছে</translation>
+<translation id="8858065207712248076">Chrome-এর নীতি অনুযায়ী আপনার <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> পাসওয়ার্ড বদলে ফেলা উচিত যদি আপনি সেটি অন্য কোনও সাইটে ব্যবহার করে থাকেন।</translation>
 <translation id="8866481888320382733">নীতি সেটিংস বিশ্লেষণ করার সময় ত্রুটি</translation>
 <translation id="8870413625673593573">সম্প্রতি বন্ধ হয়েছে</translation>
 <translation id="8874824191258364635">একটি সঠিক কার্ড নম্বর লিখুন</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb
index 05b19fc8..c3f4dc5 100644
--- a/components/strings/components_strings_ca.xtb
+++ b/components/strings/components_strings_ca.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Proporcioneu més informació</translation>
 <translation id="1021110881106174305">Targetes acceptades</translation>
 <translation id="1032854598605920125">Gira en el sentit de les agulles del rellotge</translation>
+<translation id="1035334672863811645">Inicia la sessió a Chrome</translation>
 <translation id="1038842779957582377">nom desconegut</translation>
 <translation id="1050038467049342496">Tanca altres aplicacions</translation>
 <translation id="1055184225775184556">&amp;Desfés l'addició</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggeriment}other{# suggeriments}}</translation>
 <translation id="2079545284768500474">Desfés</translation>
 <translation id="20817612488360358">S'ha definit la configuració del servidor intermediari del sistema perquè es pugui utilitzar, però també s'ha especificat una configuració del servidor intermediari explícita.</translation>
-<translation id="2084558088529668945">Has introduït la contrasenya en un lloc web que no està gestionat per <ph name="ORG_NAME" />. Per protegir el teu compte, no facis servir la mateixa contrasenya en altres aplicacions ni llocs web.</translation>
 <translation id="2091887806945687916">So</translation>
 <translation id="2094505752054353250">Els dominis no coincideixen.</translation>
 <translation id="2096368010154057602">Departament</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">La signatura de verificació és incorrecta</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> element més}other{<ph name="ITEM_COUNT" /> elements més}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome et recomana que restableixis la contrasenya per a <ph name="ORG_NAME" /> si l'has fet servir en altres llocs web.</translation>
 <translation id="4196861286325780578">&amp;Refés el moviment</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Comproveu la configuració del tallafoc i de l'antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Errors</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Estat</translation>
 <translation id="5094747076828555589">Aquest servidor no ha pogut comprovar que sigui <ph name="DOMAIN" /> perquè Chromium considera que el seu certificat de seguretat no és de confiança. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió.</translation>
 <translation id="5095208057601539847">Província</translation>
+<translation id="5098332213681597508">Aquest nom prové del teu Compte de Google.</translation>
 <translation id="5115563688576182185">(64 bits)</translation>
 <translation id="5121084798328133320">Un cop confirmada, els detalls de la targeta del teu compte de pagaments de Google es compartiran amb aquest lloc web.</translation>
 <translation id="5128122789703661928">La sessió amb aquest nom no es pot suprimir.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">És possible que els atacants del lloc web <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> provin d'instal·lar programes perillosos a l'ordinador per robar o suprimir la teva informació (per exemple, les fotos, les contrasenyes, els missatges i les targetes de crèdit). <ph name="BEGIN_LEARN_MORE_LINK" />Més informació<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">S'ha bloquejat el contingut enganyós.</translation>
 <translation id="5659593005791499971">Correu electrònic</translation>
+<translation id="5666899935841546222">Vols tenir totes les targetes en un sol lloc?</translation>
 <translation id="5675650730144413517">Aquesta pàgina no funciona</translation>
 <translation id="5685654322157854305">Afegeix una adreça d'enviament</translation>
 <translation id="5689199277474810259">Exporta a JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">No es pot accedir a aquest lloc</translation>
 <translation id="5869522115854928033">Contrasenyes desades</translation>
 <translation id="5893752035575986141">S'accepten targetes de crèdit.</translation>
-<translation id="5898382028489516745">Chromium et recomana que restableixis la contrasenya per a <ph name="ORG_NAME" /> si l'has fet servir en altres llocs web.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (informació sincronitzada)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en ús}other{# en ús}}</translation>
 <translation id="5939518447894949180">Restableix</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">S'ha produït un error en fer la traducció perquè no s'ha pogut determinar l'idioma de la pàgina.</translation>
 <translation id="8557066899867184262">El CVC es troba a la part posterior de la targeta.</translation>
 <translation id="8559762987265718583">No es pot establir una connexió privada amb <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> perquè la data i l'hora (<ph name="DATE_AND_TIME" />) del dispositiu són incorrectes.</translation>
+<translation id="8564985650692024650">Chromium et recomana que restableixis la contrasenya per a <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si l'has fet servir en altres llocs web.</translation>
 <translation id="8571890674111243710">S'està traduint la pàgina a l'idioma <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Afegeix un número de telèfon</translation>
 <translation id="859285277496340001">El certificat no especifica un mecanisme per comprovar si s'ha revocat.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Adreça d’enviament</translation>
 <translation id="884923133447025588">No s'ha trobat cap mecanisme de revocació.</translation>
 <translation id="885730110891505394">Comparteix informació amb Google</translation>
+<translation id="8858065207712248076">Chrome et recomana que restableixis la contrasenya per a <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si l'has fet servir en altres llocs web.</translation>
 <translation id="8866481888320382733">S'ha produït un error en analitzar la configuració de la política</translation>
 <translation id="8870413625673593573">Tancades recentment</translation>
 <translation id="8874824191258364635">Introdueix un número de targeta vàlid</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index 3750a65..385df808 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Zadejte další podrobnosti</translation>
 <translation id="1021110881106174305">Přijímané karty</translation>
 <translation id="1032854598605920125">Otočit ve směru hodinových ručiček</translation>
+<translation id="1035334672863811645">přihlaste se do Chromu</translation>
 <translation id="1038842779957582377">neznámé jméno</translation>
 <translation id="1050038467049342496">Zavřete ostatní aplikace</translation>
 <translation id="1055184225775184556">&amp;Vrátit přidání zpět</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 návrh}few{# návrhy}many{# návrhu}other{# návrhů}}</translation>
 <translation id="2079545284768500474" />
 <translation id="20817612488360358">Jako aktivní jsou nakonfigurována systémová nastavení proxy serveru, je však určena i explicitní konfigurace proxy serveru.</translation>
-<translation id="2084558088529668945">Zadali jste heslo na webu, který není spravován organizací <ph name="ORG_NAME" />. Aby byl váš účet chráněn, nepoužívejte jeho heslo u jiných aplikací a webů.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2094505752054353250">Neshoda domén</translation>
 <translation id="2096368010154057602">Oddělení</translation>
@@ -453,7 +453,6 @@
 <translation id="4171400957073367226">Chybný ověřovací podpis</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> další položka}few{<ph name="ITEM_COUNT" /> další položky}many{<ph name="ITEM_COUNT" /> další položky}other{<ph name="ITEM_COUNT" /> dalších položek}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Pokud jste heslo organizace <ph name="ORG_NAME" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="4196861286325780578">&amp;Opakovat přesunutí</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Zkontrolovat konfiguraci firewallu a antivirového softwaru<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Selhání</translation>
@@ -581,6 +580,7 @@
 <translation id="5089810972385038852">Stát/kraj</translation>
 <translation id="5094747076828555589">Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Chromium jeho bezpečnostnímu certifikátu nedůvěřuje. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník.</translation>
 <translation id="5095208057601539847">Provincie</translation>
+<translation id="5098332213681597508">Tento název pochází z vašeho účtu Google.</translation>
 <translation id="5115563688576182185">(64bitový)</translation>
 <translation id="5121084798328133320">Po ověření budou údaje o kartě z vašeho účtu Google Payments poskytnuty tomuto webu.</translation>
 <translation id="5128122789703661928">Relace s tímto názvem není pro smazání platná.</translation>
@@ -666,6 +666,7 @@
 <translation id="5633066919399395251">Útočníci, kteří se aktuálně nacházejí na webu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, se mohou pokusit nainstalovat vám do počítače nebezpečné programy, které mohou ukrást nebo smazat vaše informace (například fotky, hesla, zprávy nebo platební karty). <ph name="BEGIN_LEARN_MORE_LINK" />Další informace<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Byl zablokován klamavý obsah.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Chcete mít všechny své karty na jednom místě?</translation>
 <translation id="5675650730144413517">Tato stránka nefunguje</translation>
 <translation id="5685654322157854305">Přidat dodací adresu</translation>
 <translation id="5689199277474810259">Exportovat do formátu JSON</translation>
@@ -692,7 +693,6 @@
 <translation id="5869405914158311789">Tento web není dostupný</translation>
 <translation id="5869522115854928033">Uložená hesla</translation>
 <translation id="5893752035575986141">Obchodník přijímá kreditní karty.</translation>
-<translation id="5898382028489516745">Pokud jste heslo organizace <ph name="ORG_NAME" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizováno)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používá se 1}few{Používají se #}many{Používá se #}other{Používá se #}}</translation>
 <translation id="5939518447894949180">Resetovat</translation>
@@ -1035,6 +1035,7 @@
 <translation id="8553075262323480129">Překlad se nezdařil. Nepodařilo se rozpoznat jazyk stránky.</translation>
 <translation id="8557066899867184262">Kód CVC je uveden na zadní straně karty.</translation>
 <translation id="8559762987265718583">Soukromé připojení k doméně <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nelze navázat, protože máte v zařízení nastaveno chybné datum a čas (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Pokud jste heslo organizace <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="8571890674111243710">Překlad stránky do jazyka: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Přidat telefon
 </translation>
@@ -1064,6 +1065,7 @@
 <translation id="884264119367021077">Dodací adresa</translation>
 <translation id="884923133447025588">Nebyl nalezen žádný mechanismus zamítnutí.</translation>
 <translation id="885730110891505394">Sdílení s Googlem</translation>
+<translation id="8858065207712248076">Pokud jste heslo organizace <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili na jiném webu, doporučujeme vám ho resetovat.</translation>
 <translation id="8866481888320382733">Při analýze nastavení zásady došlo k chybě</translation>
 <translation id="8870413625673593573">Nedávno zavřené</translation>
 <translation id="8874824191258364635">Zadejte platné číslo karty</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb
index 783143f2..067df31d 100644
--- a/components/strings/components_strings_da.xtb
+++ b/components/strings/components_strings_da.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Angiv yderligere oplysninger</translation>
 <translation id="1021110881106174305">Accepterede kort</translation>
 <translation id="1032854598605920125">Rotér med uret</translation>
+<translation id="1035334672863811645">log ind på Chrome</translation>
 <translation id="1038842779957582377">ukendt navn</translation>
 <translation id="1050038467049342496">Luk andre apps</translation>
 <translation id="1055184225775184556">&amp;Fortryd tilføjelse</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 forslag}one{# forslag}other{# forslag}}</translation>
 <translation id="2079545284768500474">Fortryd</translation>
 <translation id="20817612488360358">Indstillingerne for systemproxy er angivet at blive brugt, men en eksplicit proxykonfiguration er også angivet.</translation>
-<translation id="2084558088529668945">Du indtastede din adgangskode på et website, der ikke administreres af <ph name="ORG_NAME" />. Du kan beskytte din konto ved at undgå at bruge din adgangskode i andre apps og på andre websites.</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2094505752054353250">Uoverensstemmelse mellem domæner</translation>
 <translation id="2096368010154057602">Departement</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Ugyldig verifikationssignatur</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> element mere}one{<ph name="ITEM_COUNT" /> element mere}other{<ph name="ITEM_COUNT" /> elementer mere}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome anbefaler, at du nulstiller din adgangskode til <ph name="ORG_NAME" />, hvis du har brugt den på andre websites.</translation>
 <translation id="4196861286325780578">&amp;Annuller fortryd flytning</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Kontrollere firewall- og antiviruskonfigurationer<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Nedbrud</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Delstat</translation>
 <translation id="5094747076828555589">Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da Chromium ikke har tillid til sikkerhedscertifikatet. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse.</translation>
 <translation id="5095208057601539847">Provins</translation>
+<translation id="5098332213681597508">Dette navn er fra din Google-konto.</translation>
 <translation id="5115563688576182185">(64-bit)</translation>
 <translation id="5121084798328133320">Når du bekræfter, deles kortoplysningerne på din konto i Google Payments med dette website.</translation>
 <translation id="5128122789703661928">Sessionen med dette navn kan ikke slettes.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Brugere med ondsindede hensigter, der i øjeblikket er på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" />, kan forsøge at installere farlige programmer på din computer, der stjæler eller sletter dine oplysninger (f.eks. fotos, adgangskoder, beskeder og kreditkort). <ph name="BEGIN_LEARN_MORE_LINK" />Få flere oplysninger<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Vildledende indhold er blokeret.</translation>
 <translation id="5659593005791499971">Mail</translation>
+<translation id="5666899935841546222">Vil du samle alle dine kort ét sted?</translation>
 <translation id="5675650730144413517">Denne side virker ikke</translation>
 <translation id="5685654322157854305">Tilføj leveringsadresse</translation>
 <translation id="5689199277474810259">Eksportér i JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Der kan ikke oprettes forbindelse til dette website</translation>
 <translation id="5869522115854928033">Gemte adgangskoder</translation>
 <translation id="5893752035575986141">Kreditkort accepteres.</translation>
-<translation id="5898382028489516745">Chromium anbefaler, at du nulstiller din adgangskode til <ph name="ORG_NAME" />, hvis du har brugt den på andre websites.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniseret)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 i brug}one{# i brug}other{# i brug}}</translation>
 <translation id="5939518447894949180">Nulstil</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Oversættelsen mislykkedes, fordi sidens sprog ikke kunne fastslås.</translation>
 <translation id="8557066899867184262">Kontrolkoden findes på bagsiden af kortet.</translation>
 <translation id="8559762987265718583">Der kan ikke oprettes en privat forbindelse til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, da tid og dato (<ph name="DATE_AND_TIME" />) på din enhed er forkerte.</translation>
+<translation id="8564985650692024650">Chromium anbefaler, at du nulstiller din adgangskode til <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, hvis du har brugt den på andre websites.</translation>
 <translation id="8571890674111243710">Oversætter siden til <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Tilføj tlf.nr.
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Leveringsadresse</translation>
 <translation id="884923133447025588">Der blev ikke fundet nogen funktion til tilbagekaldelse.</translation>
 <translation id="885730110891505394">Deling med Google</translation>
+<translation id="8858065207712248076">Chrome anbefaler, at du nulstiller din adgangskode til <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, hvis du har brugt den på andre websites.</translation>
 <translation id="8866481888320382733">Der opstod en fejl ved parsing af indstillinger for politik</translation>
 <translation id="8870413625673593573">Senest lukkede</translation>
 <translation id="8874824191258364635">Angiv et gyldigt kortnummer</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb
index f7241b0..6d65a29a 100644
--- a/components/strings/components_strings_de.xtb
+++ b/components/strings/components_strings_de.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Weitere Details angeben</translation>
 <translation id="1021110881106174305">Akzeptierte Karten</translation>
 <translation id="1032854598605920125">Im Uhrzeigersinn drehen</translation>
+<translation id="1035334672863811645">In Chrome anmelden</translation>
 <translation id="1038842779957582377">Unbekannter Name</translation>
 <translation id="1050038467049342496">Andere Apps schließen</translation>
 <translation id="1055184225775184556">&amp;Hinzufügen rückgängig machen</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 Vorschlag}other{# Vorschläge}}</translation>
 <translation id="2079545284768500474">Rückgängig machen</translation>
 <translation id="20817612488360358">Die System-Proxy-Einstellungen sind zur Verwendung angegeben, gleichzeitig wurde aber auch eine explizite Proxy-Konfiguration festgelegt.</translation>
-<translation id="2084558088529668945">Sie haben Ihr Passwort auf einer Website eingegeben, die nicht von <ph name="ORG_NAME" /> verwaltet wird. Um Ihr Konto zu schützen, verwenden Sie nicht dasselbe Passwort für andere Apps und Websites.</translation>
 <translation id="2091887806945687916">Ton</translation>
 <translation id="2094505752054353250">Domains stimmen nicht überein.</translation>
 <translation id="2096368010154057602">Verwaltungsbezirk</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">Ungültige Bestätigungssignatur</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> weiteres Element}other{<ph name="ITEM_COUNT" /> weitere Elemente}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome empfiehlt, Ihr Passwort für <ph name="ORG_NAME" /> zurückzusetzen, wenn Sie es auf anderen Websites verwendet haben.</translation>
 <translation id="4196861286325780578">&amp;Verschieben wiederholen</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Firewall und Antivirenkonfiguration prüfen<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Abstürze</translation>
@@ -584,6 +583,7 @@
 <translation id="5089810972385038852">Bundesstaat/-land</translation>
 <translation id="5094747076828555589">Dieser Server konnte nicht beweisen, dass er <ph name="DOMAIN" /> ist. Sein Sicherheitszertifikat wird von Chromium als nicht vertrauenswürdig eingestuft. Mögliche Gründe sind eine fehlerhafte Konfiguration oder ein Angreifer, der Ihre Verbindung abfängt.</translation>
 <translation id="5095208057601539847">Provinz</translation>
+<translation id="5098332213681597508">Dieser Name stammt aus Ihrem Google-Konto.</translation>
 <translation id="5115563688576182185">(64-Bit)</translation>
 <translation id="5121084798328133320">Nach erfolgter Bestätigung werden die Kartendetails Ihres Google Payments-Kontos an diese Website weitergegeben.</translation>
 <translation id="5128122789703661928">Die Sitzung mit diesem Namen kann nicht gelöscht werden.</translation>
@@ -669,6 +669,7 @@
 <translation id="5633066919399395251">Zurzeit auf <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> befindliche Hacker könnten versuchen, gefährliche Programme auf Ihrem Computer zu installieren, um Daten wie Fotos, Passwörter, Nachrichten und Kreditkartendaten zu stehlen oder zu löschen. <ph name="BEGIN_LEARN_MORE_LINK" />Weitere Informationen<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Betrügerische Inhalte blockiert.</translation>
 <translation id="5659593005791499971">E-Mail-Adresse</translation>
+<translation id="5666899935841546222">Möchten Sie an einem Ort auf alle Ihre Karten zugreifen können?</translation>
 <translation id="5675650730144413517">Diese Seite funktioniert nicht</translation>
 <translation id="5685654322157854305">Versandadresse hinzufügen</translation>
 <translation id="5689199277474810259">Als JSON exportieren</translation>
@@ -695,7 +696,6 @@
 <translation id="5869405914158311789">Diese Website ist nicht erreichbar</translation>
 <translation id="5869522115854928033">Gespeicherte Passwörter</translation>
 <translation id="5893752035575986141">Kreditkarten werden akzeptiert.</translation>
-<translation id="5898382028489516745">Chromium empfiehlt, Ihr Passwort für <ph name="ORG_NAME" /> zurückzusetzen, wenn Sie es auf anderen Websites verwendet haben.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisiert)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 wird verwendet}other{# werden verwendet}}</translation>
 <translation id="5939518447894949180">Zurücksetzen</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">Die Übersetzung ist fehlgeschlagen, weil die Sprache der Seite nicht ermittelt werden konnte.</translation>
 <translation id="8557066899867184262">Der CVC befindet sich auf der Rückseite Ihrer Karte.</translation>
 <translation id="8559762987265718583">Es kann keine private Verbindung zu <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> hergestellt werden, weil Datum und Uhrzeit Ihres Geräts falsch sind (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Chromium empfiehlt, Ihr Passwort für <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> zurückzusetzen, wenn Sie es auf anderen Websites verwendet haben.</translation>
 <translation id="8571890674111243710">Seite wird in folgende Sprache übersetzt: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Weitere Nummer
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Versandadresse</translation>
 <translation id="884923133447025588">Kein Sperrmechanismus gefunden.</translation>
 <translation id="885730110891505394">Datenfreigabe an Google</translation>
+<translation id="8858065207712248076">Chrome empfiehlt, Ihr Passwort für <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> zurückzusetzen, wenn Sie es auf anderen Websites verwendet haben.</translation>
 <translation id="8866481888320382733">Fehler beim Parsen der Richtlinieneinstellungen</translation>
 <translation id="8870413625673593573">Kürzlich geschlossen</translation>
 <translation id="8874824191258364635">Geben Sie eine gültige Kartennummer ein</translation>
diff --git a/components/strings/components_strings_el.xtb b/components/strings/components_strings_el.xtb
index 79ab4a33..96fd7e8 100644
--- a/components/strings/components_strings_el.xtb
+++ b/components/strings/components_strings_el.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Καταχωρίστε επιπλέον λεπτομέρειες</translation>
 <translation id="1021110881106174305">Αποδεκτές κάρτες</translation>
 <translation id="1032854598605920125">Περιστροφή προς τα δεξιά</translation>
+<translation id="1035334672863811645">σύνδεση στο Chrome</translation>
 <translation id="1038842779957582377">άγνωστο όνομα</translation>
 <translation id="1050038467049342496">Κλείστε τις άλλες εφαρμογές</translation>
 <translation id="1055184225775184556">&amp;Αναίρεση προσθήκης</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 πρόταση}other{# προτάσεις}}</translation>
 <translation id="2079545284768500474">Αναίρεση</translation>
 <translation id="20817612488360358">Οι ρυθμίσεις διακομιστή μεσολάβησης του συστήματος έχουν οριστεί για να χρησιμοποιηθούν, αλλά καθορίζεται επίσης μια ρητή διαμόρφωση του διακομιστή μεσολάβησης.</translation>
-<translation id="2084558088529668945">Έχετε εισαγάγει τον κωδικό πρόσβασής σας σε έναν ιστότοπο τον οποίο δεν διαχειρίζεται ο οργανισμός <ph name="ORG_NAME" />. Για να προστατεύσετε τον λογαριασμό σας, μην επαναχρησιμοποιείτε τον κωδικό πρόσβασής σας σε άλλες εφαρμογές και ιστοτόπους.</translation>
 <translation id="2091887806945687916">Ήχος</translation>
 <translation id="2094505752054353250">Αναντιστοιχία τομέα</translation>
 <translation id="2096368010154057602">Νομός</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Εσφαλμένη υπογραφή επαλήθευσης</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> ακόμη στοιχείο}other{<ph name="ITEM_COUNT" /> ακόμη στοιχεία}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Το Chrome συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="ORG_NAME" /> εάν τον έχετε επαναχρησιμοποιήσει σε άλλους ιστοτόπους.</translation>
 <translation id="4196861286325780578">&amp;Επανάληψη μετακίνησης</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Ελέγξτε τις διαμορφώσεις του τείχους προστασίας και της προστασίας από ιούς<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Απότομες διακοπές λειτουργίας</translation>
@@ -586,6 +585,7 @@
 <translation id="5089810972385038852">Πολιτεία</translation>
 <translation id="5094747076828555589">Ο διακομιστής δεν μπορεί να αποδείξει ότι είναι το <ph name="DOMAIN" />. Το πιστοποιητικό ασφαλείας του δεν θεωρείται έμπιστο από το Chromium. Αυτό μπορεί να οφείλεται σε λανθασμένη ρύθμιση ή σε κάποιον τρίτο που επιτίθεται στη σύνδεσή σας.</translation>
 <translation id="5095208057601539847">Επαρχία</translation>
+<translation id="5098332213681597508">Αυτό το όνομα προέρχεται από τον Λογαριασμό σας Google.</translation>
 <translation id="5115563688576182185">(64-bit)</translation>
 <translation id="5121084798328133320">Μετά την επιβεβαίωση, τα στοιχεία της κάρτας από τον λογαριασμό πληρωμών Google θα κοινοποιηθούν σε αυτόν τον ιστότοπο.</translation>
 <translation id="5128122789703661928">Η περίοδος σύνδεσης με αυτό το όνομα δεν είναι έγκυρη για διαγραφή.</translation>
@@ -671,6 +671,7 @@
 <translation id="5633066919399395251">Οι εισβολείς που βρίσκονται αυτήν τη στιγμή στον ιστότοπο <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ενδέχεται να επιχειρήσουν να εγκαταστήσουν επικίνδυνα προγράμματα στον υπολογιστή σας, τα οποία μπορούν να υποκλέψουν ή να διαγράψουν τα δεδομένα σας (για παράδειγμα, φωτογραφίες, κωδικούς πρόσβασης, μηνύματα και στοιχεία πιστωτικών καρτών). <ph name="BEGIN_LEARN_MORE_LINK" />Μάθετε περισσότερα<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Το παραπλανητικό περιεχόμενο αποκλείστηκε.</translation>
 <translation id="5659593005791499971">Διεύθυνση ηλεκτρονικού ταχυδρομείου</translation>
+<translation id="5666899935841546222">Θέλετε να έχετε όλες τις κάρτες σας σε ένα μέρος;</translation>
 <translation id="5675650730144413517">Αυτή η σελίδα δεν λειτουργεί</translation>
 <translation id="5685654322157854305">Προσθήκη διεύθυνσης αποστολής</translation>
 <translation id="5689199277474810259">Εξαγωγή σε JSON</translation>
@@ -697,7 +698,6 @@
 <translation id="5869405914158311789">Δεν είναι δυνατή η πρόσβαση σε αυτόν τον ιστότοπο</translation>
 <translation id="5869522115854928033">Αποθηκευμένοι κωδικοί πρόσβασης</translation>
 <translation id="5893752035575986141">Οι πιστωτικές κάρτες γίνονται δεκτές.</translation>
-<translation id="5898382028489516745">Το Chromium συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="ORG_NAME" /> εάν τον έχετε επαναχρησιμοποιήσει σε άλλους ιστοτόπους.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (συγχρονισμένο)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 σε χρήση}other{# σε χρήση}}</translation>
 <translation id="5939518447894949180">Επαναφορά</translation>
@@ -1041,6 +1041,7 @@
 <translation id="8553075262323480129">Η μετάφραση απέτυχε επειδή δεν ήταν δυνατός ο προσδιορισμός της σελίδας.</translation>
 <translation id="8557066899867184262">Ο κωδικός CVC βρίσκεται στο πίσω μέρος της κάρτας.</translation>
 <translation id="8559762987265718583">Δεν είναι δυνατή η επίτευξη ιδιωτικής σύνδεσης με τον τομέα <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> επειδή η ημερομηνία και η ώρα (<ph name="DATE_AND_TIME" />) της συσκευής σας είναι λανθασμένες.</translation>
+<translation id="8564985650692024650">Το Chromium συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="8571890674111243710">Μετάφραση σελίδας σε <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Προσθ. τηλεφ.
 </translation>
@@ -1070,6 +1071,7 @@
 <translation id="884264119367021077">Διεύθυνση αποστολής</translation>
 <translation id="884923133447025588">Δεν εντοπίστηκε μηχανισμός ακύρωσης.</translation>
 <translation id="885730110891505394">Κοινοποίηση στις υπηρεσίες της Google</translation>
+<translation id="8858065207712248076">Το Chrome συνιστά την επαναφορά του κωδικού πρόσβασης <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> εάν τον έχετε χρησιμοποιήσει και σε άλλους ιστοτόπους.</translation>
 <translation id="8866481888320382733">Σφάλμα ανάλυσης ρυθμίσεων πολιτικής</translation>
 <translation id="8870413625673593573">Έκλεισαν πρόσφατα</translation>
 <translation id="8874824191258364635">Εισαγάγετε έναν έγκυρο αριθμό κάρτας</translation>
diff --git a/components/strings/components_strings_en-GB.xtb b/components/strings/components_strings_en-GB.xtb
index 3acab994..9d65128 100644
--- a/components/strings/components_strings_en-GB.xtb
+++ b/components/strings/components_strings_en-GB.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Provide additional details.</translation>
 <translation id="1021110881106174305">Accepted cards</translation>
 <translation id="1032854598605920125">Rotate clockwise</translation>
+<translation id="1035334672863811645">sign in to Chrome</translation>
 <translation id="1038842779957582377">unknown name</translation>
 <translation id="1050038467049342496">Close other apps</translation>
 <translation id="1055184225775184556">&amp;Undo Add</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggestion}other{# suggestions}}</translation>
 <translation id="2079545284768500474">Undo</translation>
 <translation id="20817612488360358">System proxy settings are set to be used but an explicit proxy configuration is also specified.</translation>
-<translation id="2084558088529668945">You entered your password on a site that’s not managed by <ph name="ORG_NAME" />. To protect your account, don’t reuse your password on other apps and sites.</translation>
 <translation id="2091887806945687916">Sound</translation>
 <translation id="2094505752054353250">Domain mismatch</translation>
 <translation id="2096368010154057602">Department</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Bad verification signature</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> more item}other{<ph name="ITEM_COUNT" /> more items}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome recommends resetting your <ph name="ORG_NAME" /> password if you reused it on other sites.</translation>
 <translation id="4196861286325780578">&amp;Redo move</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Checking firewall and antivirus configurations<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Crashes</translation>
@@ -698,7 +697,6 @@
 <translation id="5869405914158311789">This site can’t be reached</translation>
 <translation id="5869522115854928033">Saved passwords</translation>
 <translation id="5893752035575986141">Credit cards are accepted.</translation>
-<translation id="5898382028489516745">Chromium recommends resetting your <ph name="ORG_NAME" /> password if you reused it on other sites.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synced)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in use}other{# in use}}</translation>
 <translation id="5939518447894949180">Reset</translation>
@@ -1042,6 +1040,7 @@
 <translation id="8553075262323480129">The translation failed because the page's language could not be determined.</translation>
 <translation id="8557066899867184262">The CVC is located behind your card.</translation>
 <translation id="8559762987265718583">A private connection to <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> can't be established because your device's date and time (<ph name="DATE_AND_TIME" />) are incorrect.</translation>
+<translation id="8564985650692024650">Chromium recommends resetting your <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> password if you reused it on other sites.</translation>
 <translation id="8571890674111243710">Translating page into <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Add phone no.</translation>
 <translation id="859285277496340001">The certificate does not specify a mechanism to check whether it has been revoked.</translation>
@@ -1070,6 +1069,7 @@
 <translation id="884264119367021077">Delivery address</translation>
 <translation id="884923133447025588">No revocation mechanism found.</translation>
 <translation id="885730110891505394">Sharing with Google</translation>
+<translation id="8858065207712248076">Chrome recommends resetting your <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> password if you reused it on other sites.</translation>
 <translation id="8866481888320382733">Error parsing policy settings</translation>
 <translation id="8870413625673593573">Recently Closed</translation>
 <translation id="8874824191258364635">Enter a valid card number</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb
index 39abe7f7..cf2c0c6 100644
--- a/components/strings/components_strings_es-419.xtb
+++ b/components/strings/components_strings_es-419.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Proporciona más detalles</translation>
 <translation id="1021110881106174305">Tarjetas aceptadas</translation>
 <translation id="1032854598605920125">Girar a la derecha</translation>
+<translation id="1035334672863811645">acceder a Chrome</translation>
 <translation id="1038842779957582377">nombre desconocido</translation>
 <translation id="1050038467049342496">Cierra las demás apps.</translation>
 <translation id="1055184225775184556">&amp;Deshacer Agregar</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugerencia}other{# sugerencias}}</translation>
 <translation id="2079545284768500474">Deshacer</translation>
 <translation id="20817612488360358">Se ha establecido la configuración de proxy del sistema, pero también se ha especificado una configuración explícita de proxy.</translation>
-<translation id="2084558088529668945">Ingresaste tu contraseña en un sitio que no administra <ph name="ORG_NAME" />. Para proteger tu cuenta, no vuelvas a usar tu contraseña en otras apps y sitios.</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2094505752054353250">El dominio no coincide.</translation>
 <translation id="2096368010154057602">Departamento</translation>
@@ -458,7 +458,6 @@
 <translation id="4171400957073367226">La firma de verificación no es válida.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> elemento más}other{<ph name="ITEM_COUNT" /> elementos más}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome te recomienda que restablezcas la contraseña de <ph name="ORG_NAME" /> si la volviste a usar en otros sitios.</translation>
 <translation id="4196861286325780578">&amp;Rehacer Mover</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Comprobar las configuraciones de firewall y antivirus<ph name="END_LINK" />.</translation>
 <translation id="4220128509585149162">Fallos</translation>
@@ -697,7 +696,6 @@
 <translation id="5869405914158311789">No se puede acceder a este sitio</translation>
 <translation id="5869522115854928033">Contraseñas almacenadas</translation>
 <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation>
-<translation id="5898382028489516745">Chromium te recomienda que restablezcas la contraseña de <ph name="ORG_NAME" /> si la volviste a usar en otros sitios.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation>
 <translation id="5939518447894949180">Restablecer</translation>
@@ -1041,6 +1039,7 @@
 <translation id="8553075262323480129">Falló la traducción debido a que no se pudo determinar el idioma de la página.</translation>
 <translation id="8557066899867184262">El CVC se encuentra al dorso de tu tarjeta.</translation>
 <translation id="8559762987265718583">No se puede establecer una conexión privada a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque la fecha y la hora del dispositivo (<ph name="DATE_AND_TIME" />) son incorrectas.</translation>
+<translation id="8564985650692024650">Chromium te recomienda que restablezcas la contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la volviste a usar en otros sitios.</translation>
 <translation id="8571890674111243710">Traduciendo página a <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Agregar teléfono
 </translation>
@@ -1070,6 +1069,7 @@
 <translation id="884264119367021077">Dirección de envío</translation>
 <translation id="884923133447025588">No se ha encontrado ningún mecanismo de revocación.</translation>
 <translation id="885730110891505394">Compartir con Google</translation>
+<translation id="8858065207712248076">Chrome te recomienda que restablezcas la contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la volviste a usar en otros sitios.</translation>
 <translation id="8866481888320382733">Error al analizar la configuración de la política</translation>
 <translation id="8870413625673593573">Cerrado recientemente</translation>
 <translation id="8874824191258364635">Ingresa un número de tarjeta válido</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb
index b294c664..66f4163 100644
--- a/components/strings/components_strings_es.xtb
+++ b/components/strings/components_strings_es.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Proporciónanos más detalles</translation>
 <translation id="1021110881106174305">Tarjetas aceptadas</translation>
 <translation id="1032854598605920125">Girar hacia la derecha</translation>
+<translation id="1035334672863811645">iniciar sesión en Chrome</translation>
 <translation id="1038842779957582377">nombre desconocido</translation>
 <translation id="1050038467049342496">Cierra otras aplicaciones</translation>
 <translation id="1055184225775184556">&amp;Deshacer acción de añadir</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{Una sugerencia}other{# sugerencias}}</translation>
 <translation id="2079545284768500474">Deshacer</translation>
 <translation id="20817612488360358">Se ha establecido la configuración del proxy del sistema, pero también se han especificado ajustes de proxy explícitos.</translation>
-<translation id="2084558088529668945">Has introducido tu contraseña en un sitio web que no está gestionado por <ph name="ORG_NAME" />. Para proteger tu cuenta, no vuelvas a utilizar tu contraseña en otras aplicaciones ni en otros sitios web.</translation>
 <translation id="2091887806945687916">Sonido</translation>
 <translation id="2094505752054353250">El dominio no coincide</translation>
 <translation id="2096368010154057602">Departamento</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">La firma de verificación no es válida</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> elemento más}other{<ph name="ITEM_COUNT" /> elementos más}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome te recomienda que cambies tu contraseña de <ph name="ORG_NAME" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="4196861286325780578">&amp;Rehacer movimiento</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Comprobar la configuración del cortafuegos y del antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">La página no responde o se cierra</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Estado</translation>
 <translation id="5094747076828555589">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, Chromium no confía en su certificado de seguridad. Este problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation>
 <translation id="5095208057601539847">Provincia</translation>
+<translation id="5098332213681597508">Este nombre proviene de tu cuenta de Google.</translation>
 <translation id="5115563688576182185">(64 bits)</translation>
 <translation id="5121084798328133320">Una vez que confirmes esta acción, la información de la tarjeta de tu cuenta de pagos de Google se compartirá con este sitio web.</translation>
 <translation id="5128122789703661928">No se puede eliminar la sesión con este nombre.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Es posible que los atacantes que se encuentren en <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> intenten instalar programas peligrosos en tu ordenador para robar o eliminar tu información (por ejemplo, fotos, contraseñas, mensajes y tarjetas de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Más información<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Contenido engañoso bloqueado.</translation>
 <translation id="5659593005791499971">Correo electrónico</translation>
+<translation id="5666899935841546222">¿Quieres tener todas tus tarjetas en un mismo sitio?</translation>
 <translation id="5675650730144413517">Esta página no funciona</translation>
 <translation id="5685654322157854305">Añadir dirección de envío</translation>
 <translation id="5689199277474810259">Exportar a JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">No se puede acceder a este sitio web</translation>
 <translation id="5869522115854928033">Contraseñas guardadas</translation>
 <translation id="5893752035575986141">Se aceptan tarjetas de crédito.</translation>
-<translation id="5898382028489516745">Chromium te recomienda que cambies tu contraseña de <ph name="ORG_NAME" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en uso}other{# en uso}}</translation>
 <translation id="5939518447894949180">Restablecer</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">La traducción no se ha realizado correctamente porque no se ha podido determinar el idioma de la página.</translation>
 <translation id="8557066899867184262">Puedes encontrar el CVC en el reverso de la tarjeta.</translation>
 <translation id="8559762987265718583">No se puede establecer una conexión privada con <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> porque la fecha y la hora de tu dispositivo (<ph name="DATE_AND_TIME" />) no son correctas.</translation>
+<translation id="8564985650692024650">Chromium te recomienda que cambies tu contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="8571890674111243710">Traduciendo página a <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Añade un teléfono</translation>
 <translation id="859285277496340001">El certificado no especifica ningún mecanismo para comprobar si se ha revocado.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Dirección de envío</translation>
 <translation id="884923133447025588">No se ha encontrado ningún mecanismo de revocación.</translation>
 <translation id="885730110891505394">Compartir con Google</translation>
+<translation id="8858065207712248076">Chrome te recomienda que cambies tu contraseña de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si la has vuelto a utilizar en otros sitios web.</translation>
 <translation id="8866481888320382733">Error al analizar la configuración de la política</translation>
 <translation id="8870413625673593573">Cerrado recientemente</translation>
 <translation id="8874824191258364635">Introduce un número de tarjeta válido</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb
index 2c84357..7dc3c84a 100644
--- a/components/strings/components_strings_et.xtb
+++ b/components/strings/components_strings_et.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Esitage lisateavet</translation>
 <translation id="1021110881106174305">Aktsepteeritud kaardid</translation>
 <translation id="1032854598605920125">Pööra päripäeva</translation>
+<translation id="1035334672863811645">logige Chromeʼi sisse</translation>
 <translation id="1038842779957582377">tundmatu nimi</translation>
 <translation id="1050038467049342496">Sulgege muud rakendused</translation>
 <translation id="1055184225775184556">&amp;Võta lisamine tagasi</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 soovitus}other{# soovitust}}</translation>
 <translation id="2079545284768500474">Võta tagasi</translation>
 <translation id="20817612488360358">Kasutamiseks on määratud süsteemi puhverserveri seaded, kuid määratud on ka konkreetne puhverserveri konfigureerimine.</translation>
-<translation id="2084558088529668945">Sisestasite oma parooli saidile, mida ei halda <ph name="ORG_NAME" />. Oma konto kaitsmiseks ärge kasutage oma parooli muudes rakendustes ega saitidel.</translation>
 <translation id="2091887806945687916">Heli</translation>
 <translation id="2094505752054353250">Domeeni vastuolu</translation>
 <translation id="2096368010154057602">Osakond</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Sobimatu kinnitusallkiri</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Veel <ph name="ITEM_COUNT" /> üksus}other{Veel <ph name="ITEM_COUNT" /> üksust}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome soovitab teil teenuse <ph name="ORG_NAME" /> parooli lähtestada, kui kasutasite seda ka muudel saitidel.</translation>
 <translation id="4196861286325780578">&amp;Teisalda uuesti</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Kontrollige tulemüüri ja viirusetõrje seadistusi<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Krahhid</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Osariik</translation>
 <translation id="5094747076828555589">Server ei suutnud tõestada, et see on domeen <ph name="DOMAIN" />, Chromium ei usalda selle turvasertifikaati. Selle põhjuseks võib olla vale seadistus või ründaja, kes on sekkunud teie ühendusse.</translation>
 <translation id="5095208057601539847">Provints</translation>
+<translation id="5098332213681597508">Nimi pärineb teie Google'i kontolt.</translation>
 <translation id="5115563688576182185">(64-bitine)</translation>
 <translation id="5121084798328133320">Pärast kinnitamist jagatakse teie Google Paymentsi konto kaardi üksikasju selle saidiga.</translation>
 <translation id="5128122789703661928">Selle nimega seanssi ei saa kustutada.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Saidil <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> olevad ründajad võivad proovida installida teie arvutisse ohtlikke programme, mis varastavad teie teavet või kustutavad selle (nt fotod, paroolid, sõnumid ja krediitkaarditeave). <ph name="BEGIN_LEARN_MORE_LINK" />Lisateave<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Petlik sisu blokeeriti.</translation>
 <translation id="5659593005791499971">Meil</translation>
+<translation id="5666899935841546222">Kas soovite salvestada kõik oma kaardid ühte kohta?</translation>
 <translation id="5675650730144413517">See leht ei tööta</translation>
 <translation id="5685654322157854305">Lisage tarneaadress</translation>
 <translation id="5689199277474810259">Ekspordi JSON-vormingus</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Selle saidiga ei saa ühendust</translation>
 <translation id="5869522115854928033">Salvestatud paroolid</translation>
 <translation id="5893752035575986141">Kaupmees aktsepteerib krediitkaarte.</translation>
-<translation id="5898382028489516745">Chromium soovitab teil teenuse <ph name="ORG_NAME" /> parooli lähtestada, kui kasutasite seda ka muudel saitidel.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sünkroonitud)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 on kasutusel}other{# on kasutusel}}</translation>
 <translation id="5939518447894949180">Lähtesta</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Tõlkimine nurjus, kuna lehe keelt ei õnnestunud määrata.</translation>
 <translation id="8557066899867184262">CVC asub kaardi tagaküljel.</translation>
 <translation id="8559762987265718583">Privaatset ühendust ei saa domeeniga <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> luua, kuna seadme kuupäev ja kellaaeg (<ph name="DATE_AND_TIME" />) on valed.</translation>
+<translation id="8564985650692024650">Chromium soovitab teil organisatsiooni <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> parooli lähtestada, kui kasutasite seda ka muudel saitidel.</translation>
 <translation id="8571890674111243710">Lehe tõlkimine <ph name="LANGUAGE" /> keelde...</translation>
 <translation id="858637041960032120">Lisage telefoninumber</translation>
 <translation id="859285277496340001">Sertifikaat ei määratle mehhanismi enda võimaliku tühistamise kontrollimiseks.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Tarneaadress</translation>
 <translation id="884923133447025588">Tühistusmehhanismi ei leitud.</translation>
 <translation id="885730110891505394">Jagamine Google'iga</translation>
+<translation id="8858065207712248076">Chromium soovitab teil organisatsiooni <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> parooli lähtestada, kui kasutasite seda ka muudel saitidel.</translation>
 <translation id="8866481888320382733">Reegli seadete sõelumisel ilmnes viga</translation>
 <translation id="8870413625673593573">Viimati suletud</translation>
 <translation id="8874824191258364635">Sisestaeg kehtiv kaardinumber</translation>
diff --git a/components/strings/components_strings_fa.xtb b/components/strings/components_strings_fa.xtb
index 2469002d..837510f 100644
--- a/components/strings/components_strings_fa.xtb
+++ b/components/strings/components_strings_fa.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">جزئیات بیشتری ارائه دهید</translation>
 <translation id="1021110881106174305">کارت‌های قابل‌ قبول</translation>
 <translation id="1032854598605920125">چرخش در جهت عقربه‌های ساعت</translation>
+<translation id="1035334672863811645">‏ورود به سیستم Chrome</translation>
 <translation id="1038842779957582377">نام ناشناس</translation>
 <translation id="1050038467049342496">برنامه‌های دیگر را ببندید</translation>
 <translation id="1055184225775184556">&amp;واگرد افزودن</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{۱ پیشنهاد}one{# پیشنهاد}other{# پیشنهاد}}</translation>
 <translation id="2079545284768500474">لغو</translation>
 <translation id="20817612488360358">تنظیمات پروکسی سیستم تنظیم شده تا مورد استفاده قرار گیرد، اما یک پیکربندی مشخص برای پروکسی نیز تعیین شده است.</translation>
-<translation id="2084558088529668945">گذرواژه‌تان را در سایتی که توسط <ph name="ORG_NAME" /> مدیریت نمی‌شود وارد کردید. برای محافظت از حسابتان، از گذرواژه‌تان در سایر برنامه‌ها و سایت‌ها مجدداً استفاده نکنید.</translation>
 <translation id="2091887806945687916">صدا</translation>
 <translation id="2094505752054353250">عدم تطابق دامنه</translation>
 <translation id="2096368010154057602">حوزه</translation>
@@ -420,7 +420,7 @@
 <translation id="3884278016824448484">شناسه دستگاه یکسان نیست</translation>
 <translation id="3885155851504623709">استان</translation>
 <translation id="3886446263141354045">درخواست شما برای دسترسی به این سایت برای <ph name="NAME" /> ارسال شده است</translation>
-<translation id="3890664840433101773">افزودن رایانامه</translation>
+<translation id="3890664840433101773">افزودن ایمیل</translation>
 <translation id="3901925938762663762">کارت منقضی شده است</translation>
 <translation id="3909695131102177774"><ph name="LABEL" /> <ph name="ERROR" /></translation>
 <translation id="3945915738023014686">شناسه گزارش خرابی بارگذاری‌شده <ph name="CRASH_ID" /> (شناسه خرابی محلی: <ph name="CRASH_LOCAL_ID" />)</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">امضای تأیید نامناسب</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> مورد دیگر}one{<ph name="ITEM_COUNT" /> مورد دیگر}other{<ph name="ITEM_COUNT" /> مورد دیگر}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">‏Chrome توصیه می‌کند گذرواژه <ph name="ORG_NAME" /> خود را درصورت استفاده مجدد از آن در سایر سایت‌ها بازنشانی کنید.</translation>
 <translation id="4196861286325780578">&amp;انجام مجدد انتقال</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />بررسی پیکربندی آنتی‌ویروس و دیوار آتش<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">خرابی ها</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">ایالت</translation>
 <translation id="5094747076828555589">‏این سرور نتوانست اثبات کند که این <ph name="DOMAIN" /> است؛ گواهی امنیت آن مورداعتماد Chromium نیست. علت این موضوع می‌توان پیکربندی اشتباه باشد یا مهاجمی اتصال شما را قطع کرده است.</translation>
 <translation id="5095208057601539847">استان</translation>
+<translation id="5098332213681597508">‏این نام از حساب Google شما گرفته شده است.</translation>
 <translation id="5115563688576182185">(۶۴ بیت)</translation>
 <translation id="5121084798328133320">‏بعد از تأیید، جزئیات کارت از حساب «پرداخت‌های Google» با این سایت هم‌رسانی می‌شود.</translation>
 <translation id="5128122789703661928">جلسه‌ای با این نام، برای حذف معتبر نیست.</translation>
@@ -599,7 +599,7 @@
 <translation id="5190835502935405962">نوار نشانک‌ها</translation>
 <translation id="5201306358585911203">صفحه جاسازی‌شده‌ای در این صفحه می‌گوید</translation>
 <translation id="5205222826937269299">نام ضروری است</translation>
-<translation id="5222812217790122047">رایانامه ضروری است</translation>
+<translation id="5222812217790122047">ایمیل ضروری است</translation>
 <translation id="5230733896359313003">نشانی تحویل کالا</translation>
 <translation id="5250209940322997802">«به شبکه متصل شوید»</translation>
 <translation id="5251803541071282808">Cloud</translation>
@@ -649,7 +649,7 @@
 <translation id="5523118979700054094">نام خط‌مشی</translation>
 <translation id="552553974213252141">آیا نوشتار به درستی استخراج شده است؟</translation>
 <translation id="5540224163453853">مقاله درخواستی یافت نشد.</translation>
-<translation id="5541546772353173584">افزودن رایانامه</translation>
+<translation id="5541546772353173584">افزودن ایمیل</translation>
 <translation id="5545756402275714221">مقاله‌هایی برای شما</translation>
 <translation id="5556459405103347317">تازه‌سازی</translation>
 <translation id="5560088892362098740">تاریخ انقضا</translation>
@@ -669,7 +669,8 @@
 <translation id="5631439013527180824">نشانه مدیریت دستگاه نامعتبر است</translation>
 <translation id="5633066919399395251">شاید درحال‌حاضر مهاجم‌ها در <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> در تلاش باشند برنامه‌های خطرناکی در رایانه‌تان نصب کنند که اطلاعات شما (مانند عکس‌ها، گذرواژه‌ها، پیام‌ها و کارت‌های اعتباری) را به سرقت می‌برند یا حذف می‌کنند. <ph name="BEGIN_LEARN_MORE_LINK" />بیشتر بدانید<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">محتوای فریب‌دهنده مسدود شد.</translation>
-<translation id="5659593005791499971">رایانامه</translation>
+<translation id="5659593005791499971">ایمیل</translation>
+<translation id="5666899935841546222">می‌خواهید همه کارت‌هایتان را در یک مکان داشته باشید؟</translation>
 <translation id="5675650730144413517">این صفحه کار نمی‌کند</translation>
 <translation id="5685654322157854305">افزودن نشانی تحویل کالا</translation>
 <translation id="5689199277474810259">‏صادر کردن به JSON</translation>
@@ -681,7 +682,7 @@
 <translation id="5720705177508910913">کاربر کنونی</translation>
 <translation id="5730040223043577876">‏Chrome توصیه می‌کند اگر از گذرواژه‌تان در سایت‌های دیگری استفاده کردید آن را بازنشانی کنید.</translation>
 <translation id="5732392974455271431">والدینتان می‌توانند این سایت را برای شما بگشایند</translation>
-<translation id="5763042198335101085">نشانی رایانامه معتبری وارد کنید</translation>
+<translation id="5763042198335101085">نشانی ایمیل معتبری وارد کنید</translation>
 <translation id="5765072501007116331">برای دیدن روش‌های تحویل و شرایط موردنیاز، یک نشانی انتخاب کنید</translation>
 <translation id="5770114862687765385">به نظر می‌رسد فایل خراب شده باشد. برای بازنشانی جلسه، روی دکمه «بازنشانی» کلیک کنید.</translation>
 <translation id="5778550464785688721">‏کنترل کامل دستگاه‌های MIDI</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">دسترسی به این سایت امکان‌پذیر نیست</translation>
 <translation id="5869522115854928033">گذرواژه‌های ذخیره‌شده</translation>
 <translation id="5893752035575986141">کارت‌های اعتباری پذیرفته می‌شوند.</translation>
-<translation id="5898382028489516745">‏Chromium توصیه می‌کند گذرواژه <ph name="ORG_NAME" /> خود را درصورت استفاده مجدد از آن در سایر سایت‌ها بازنشانی کنید.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (همگام‌سازی‌شده)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{۱ کوکی درحال استفاده}one{# کوکی درحال استفاده}other{# کوکی درحال استفاده}}</translation>
 <translation id="5939518447894949180">بازنشانی</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">ترجمه انجام نشد زیرا زبان صفحه تعیین نشد.</translation>
 <translation id="8557066899867184262">‏CVC در پشت کارتتان قرار گرفته است.</translation>
 <translation id="8559762987265718583">اتصال خصوصی به <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> انجام نمی‌شود، زیرا تاریخ و زمان دستگاه شما (<ph name="DATE_AND_TIME" />) نادرست است.</translation>
+<translation id="8564985650692024650">‏Chromium توصیه می‌کند اگر از گذرواژه <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> خود در سایت دیگری استفاده کردید آن را بازنشانی کنید.</translation>
 <translation id="8571890674111243710">ترجمه صفحه به <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">افزودن شماره تلفن</translation>
 <translation id="859285277496340001">این مجوز هیچ مکانیزمی را برای بررسی اینکه آیا باطل شده یا نه مشخص نمی‌کند.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">اطلاعات ارسال</translation>
 <translation id="884923133447025588">هیچ مکانیزم ابطالی یافت نشد.</translation>
 <translation id="885730110891505394">‏اشتراک‌گذاری با Google</translation>
+<translation id="8858065207712248076">‏Chrome توصیه می‌کند اگر از گذرواژه <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> خود در سایت دیگری استفاده کردید آن را بازنشانی کنید.</translation>
 <translation id="8866481888320382733">خطا در تجزیه تنظیمات خط‌مشی</translation>
 <translation id="8870413625673593573">اخیراً بسته‌شده</translation>
 <translation id="8874824191258364635">شماره کارت معتبری وارد کنید</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb
index 3571ff5a..bac45c9 100644
--- a/components/strings/components_strings_fi.xtb
+++ b/components/strings/components_strings_fi.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Lisätietoja</translation>
 <translation id="1021110881106174305">Hyväksytyt kortit</translation>
 <translation id="1032854598605920125">Käännä myötäpäivään</translation>
+<translation id="1035334672863811645">Kirjaudu Chromeen</translation>
 <translation id="1038842779957582377">tuntematon nimi</translation>
 <translation id="1050038467049342496">Sulje muita sovelluksia.</translation>
 <translation id="1055184225775184556">K&amp;umoa lisäys</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 ehdotus}other{# ehdotusta}}</translation>
 <translation id="2079545284768500474">Kumoa</translation>
 <translation id="20817612488360358">Järjestelmän välityspalvelinasetukset on määritetty käytettäviksi, mutta erilliset välityspalvelimen asetukset on myös määritetty.</translation>
-<translation id="2084558088529668945">Kirjoitit salasanasi sivustolle, jota <ph name="ORG_NAME" /> ei hallinnoi. Älä käytä samaa salasanaa muissa sovelluksissa tai muilla sivustoilla tilisi turvallisuuden vuoksi.</translation>
 <translation id="2091887806945687916">Ääni</translation>
 <translation id="2094505752054353250">Verkkotunnukset eivät ole yhteensopivat</translation>
 <translation id="2096368010154057602">Osasto</translation>
@@ -458,7 +458,6 @@
 <translation id="4171400957073367226">Virheellinen vahvistusallekirjoitus.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> toinen kohde}other{<ph name="ITEM_COUNT" /> muuta kohdetta}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome suosittelee palvelun <ph name="ORG_NAME" /> salasanan vaihtamista, jos olet käyttänyt sitä muilla sivustoilla.</translation>
 <translation id="4196861286325780578">&amp;Toista siirto</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Tarkista palomuurin ja virustorjuntaohjelmiston määritykset.<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Kaatuu</translation>
@@ -586,6 +585,7 @@
 <translation id="5089810972385038852">Osavaltio/alue</translation>
 <translation id="5094747076828555589">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; Chromium ei luota sen suojausvarmenteeseen. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation>
 <translation id="5095208057601539847">Provinssi</translation>
+<translation id="5098332213681597508">Tämä on nimi Google-tililtäsi.</translation>
 <translation id="5115563688576182185">(64-bittinen)</translation>
 <translation id="5121084798328133320">Vahvistamisen jälkeen Google-maksutilisi korttitiedot jaetaan tämän sivuston kanssa.</translation>
 <translation id="5128122789703661928">Tämännimistä käyttökertaa ei voi poistaa.</translation>
@@ -671,6 +671,7 @@
 <translation id="5633066919399395251">Sivustolle <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> hyökännyt taho voi yrittää asentaa tietokoneellesi vaarallisia ohjelmia, jotka varastavat tai poistavat tietojasi, esimerkiksi kuvia, salasanoja, viestejä tai luottokorttitietoja. <ph name="BEGIN_LEARN_MORE_LINK" />Lisätietoja<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Harhaanjohtava sisältö estetty</translation>
 <translation id="5659593005791499971">Sähköposti</translation>
+<translation id="5666899935841546222">Haluatko säilyttää kaikkia korttejasi yhdessä paikassa?</translation>
 <translation id="5675650730144413517">Sivu ei toimi</translation>
 <translation id="5685654322157854305">Lisää toimitusosoite</translation>
 <translation id="5689199277474810259">Vie JSON-tiedostoon</translation>
@@ -697,7 +698,6 @@
 <translation id="5869405914158311789">Sivustoon ei saada yhteyttä</translation>
 <translation id="5869522115854928033">Tallennetut salasanat</translation>
 <translation id="5893752035575986141">Luottokortit hyväksytään.</translation>
-<translation id="5898382028489516745">Chromium suosittelee palvelun <ph name="ORG_NAME" /> salasanan vaihtamista, jos olet käyttänyt sitä muilla sivustoilla.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronoitu)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 käytössä}other{# käytössä}}</translation>
 <translation id="5939518447894949180">Tyhjennä</translation>
@@ -1041,6 +1041,7 @@
 <translation id="8553075262323480129">Käännös epäonnistui, sillä sivun kieltä ei voitu määrittää.</translation>
 <translation id="8557066899867184262">CVC sijaitsee kortin takapuolella.</translation>
 <translation id="8559762987265718583">Verkkotunnukseen <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ei voi muodostaa salattua yhteyttä, koska laitteesi aika ja päivämäärä (<ph name="DATE_AND_TIME" />) ovat virheelliset.</translation>
+<translation id="8564985650692024650">Chromium suosittelee organisaation <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> salasanasi vaihtamista, jos olet käyttänyt sitä myös muilla sivustoilla.</translation>
 <translation id="8571890674111243710">Käännetään sivua kielelle <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Lisää puh.nro
 </translation>
@@ -1070,6 +1071,7 @@
 <translation id="884264119367021077">Toimitusosoite</translation>
 <translation id="884923133447025588">Kumoamisjärjestelmää ei löytynyt.</translation>
 <translation id="885730110891505394">Googlen kanssa jakaminen</translation>
+<translation id="8858065207712248076">Chrome suosittelee organisaation <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> salasanasi vaihtamista, jos olet käyttänyt sitä myös muilla sivustoilla.</translation>
 <translation id="8866481888320382733">Virhe jäsennettäessä käytännön asetuksia</translation>
 <translation id="8870413625673593573">Hiljattain suljetut</translation>
 <translation id="8874824191258364635">Anna kelvollinen kortin numero.</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb
index de29bce..dcb2eff 100644
--- a/components/strings/components_strings_fil.xtb
+++ b/components/strings/components_strings_fil.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Magbigay ng mga karagdagang detalye</translation>
 <translation id="1021110881106174305">Mga tinatanggap na card</translation>
 <translation id="1032854598605920125">I-rotate pakanan</translation>
+<translation id="1035334672863811645">mag-sign in sa Chrome</translation>
 <translation id="1038842779957582377">Hindi kilalang pangalan</translation>
 <translation id="1050038467049342496">Isara ang iba pang app</translation>
 <translation id="1055184225775184556">&amp;I-undo ang Pagdagdag</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suhestyon}one{# suhestyon}other{# na suhestyon}}</translation>
 <translation id="2079545284768500474">I-undo</translation>
 <translation id="20817612488360358">Itinatakda ang mga setting ng proxy ng system upang magamit ngunit tinutukoy rin ang isang tahasang configuration ng proxy.</translation>
-<translation id="2084558088529668945">Inilagay mo sa site na hindi pinamamahalaan ng <ph name="ORG_NAME" /> ang iyong password. Para protektahan ang iyong account, huwag gamiting muli ang password mo sa iba pang app at site.</translation>
 <translation id="2091887806945687916">Tunog</translation>
 <translation id="2094505752054353250">Maling pagtutugma sa domain</translation>
 <translation id="2096368010154057602">Departamento</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Hindi wasto ang signature sa pag-verify</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> pang item}one{<ph name="ITEM_COUNT" /> pang item}other{<ph name="ITEM_COUNT" /> pang item}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Inirerekomenda ng Chrome na i-reset ang iyong password sa <ph name="ORG_NAME" /> kung ginamit mo ito sa iba pang site.</translation>
 <translation id="4196861286325780578">&amp;Gawing muli ang paglilipat</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Suriin ang mga configuration ng firewall at antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Mga Pag-crash</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Estado</translation>
 <translation id="5094747076828555589">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; hindi pinagkakatiwalaan ng Chromium ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation>
 <translation id="5095208057601539847">Probinsya</translation>
+<translation id="5098332213681597508">Nagmula ang pangalang ito sa iyong Google Account.</translation>
 <translation id="5115563688576182185">(64-bit)</translation>
 <translation id="5121084798328133320">Pagkatapos mong magkumpirma, ibabahagi sa site na ito ang mga detalye ng card mula sa iyong Google Payments account.</translation>
 <translation id="5128122789703661928">Hindi valid ang session na may ganitong pangalan upang ma-delete.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Maaaring magtangka ang mga attacker na kasalukuyang nasa <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> na mag-install ng mga mapanganib na program sa iyong computer na magnanakaw o magde-delete ng impormasyon mo (halimbawa, mga larawan, password, mensahe, at credit card). <ph name="BEGIN_LEARN_MORE_LINK" />Matuto pa<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Na-block ang mapanlinlang na content.</translation>
 <translation id="5659593005791499971">Email</translation>
+<translation id="5666899935841546222">Gusto mo bang makita ang lahat ng iyong card sa iisang lugar?</translation>
 <translation id="5675650730144413517">Hindi gumagana ang page na ito</translation>
 <translation id="5685654322157854305">Magdagdag ng Address sa Pagpapadala</translation>
 <translation id="5689199277474810259">I-export sa JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Hindi makakonekta sa site na ito</translation>
 <translation id="5869522115854928033">Mga naka-save na password</translation>
 <translation id="5893752035575986141">Tinatanggap ang mga credit card.</translation>
-<translation id="5898382028489516745">Inirerekomenda ng Chromium na i-reset ang iyong password sa <ph name="ORG_NAME" /> kung ginamit mo ito sa iba pang site.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (naka-sync)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ang ginagamit}one{# ang ginagamit}other{# ang ginagamit}}</translation>
 <translation id="5939518447894949180">I-reset</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Nabigo ang pag-translate dahil hindi matukoy ang wika ng pahina.</translation>
 <translation id="8557066899867184262">Makikita ang CVC sa likod ng iyong card.</translation>
 <translation id="8559762987265718583">Hindi makapagtatag ng pribadong koneksyon sa <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> dahil mali ang petsa at oras ng iyong device (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Inirerekomenda ng Chromium na i-reset ang iyong password sa <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> kung ginamit mo ito sa iba pang site.</translation>
 <translation id="8571890674111243710">Tina-translate ang pahina sa <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Magdagdag ng numero ng telepono</translation>
 <translation id="859285277496340001">Hindi tumutukoy ang certificate na ito ng mekanismo upang masuri kung nabawi ito.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Shipping address</translation>
 <translation id="884923133447025588">Walang nahanap na mekanismo ng pagpapawalang-bisa.</translation>
 <translation id="885730110891505394">Pagbabahagi sa Google</translation>
+<translation id="8858065207712248076">Inirerekomenda ng Chrome na i-reset ang iyong password sa <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> kung ginamit mo ito sa iba pang site.</translation>
 <translation id="8866481888320382733">Error sa pag-parse ng mga setting ng patakaran</translation>
 <translation id="8870413625673593573">Recently Closed</translation>
 <translation id="8874824191258364635">Maglagay ng wastong numero ng card</translation>
diff --git a/components/strings/components_strings_fr.xtb b/components/strings/components_strings_fr.xtb
index c7b92d3..6767748 100644
--- a/components/strings/components_strings_fr.xtb
+++ b/components/strings/components_strings_fr.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Fournir des informations supplémentaires</translation>
 <translation id="1021110881106174305">Cartes acceptées</translation>
 <translation id="1032854598605920125">Faire pivoter vers la droite</translation>
+<translation id="1035334672863811645">connectez-vous à Chrome</translation>
 <translation id="1038842779957582377">Nom inconnu</translation>
 <translation id="1050038467049342496">Fermez les autres applications</translation>
 <translation id="1055184225775184556">&amp;Annuler l'ajout</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggestion}one{# suggestion}other{# suggestions}}</translation>
 <translation id="2079545284768500474">Annuler</translation>
 <translation id="20817612488360358">Les paramètres de proxy du système sont configurés pour être utilisés, mais une configuration de proxy explicite est également spécifiée.</translation>
-<translation id="2084558088529668945">Vous avez saisi votre mot de passe sur un site qui n'est pas géré par <ph name="ORG_NAME" />. Pour protéger votre compte, ne réutilisez pas ce mot de passe dans d'autres applications ni sur d'autres sites.</translation>
 <translation id="2091887806945687916">Son</translation>
 <translation id="2094505752054353250">Le domaine ne correspond pas</translation>
 <translation id="2096368010154057602">Département</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Signature de validation non valide.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> élément supplémentaire}one{<ph name="ITEM_COUNT" /> élément supplémentaire}other{<ph name="ITEM_COUNT" /> éléments supplémentaires}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">L'équipe Chrome vous recommande de réinitialiser votre mot de passe <ph name="ORG_NAME" /> si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="4196861286325780578">&amp;Rétablir le déplacement</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Vérifier les configurations du pare-feu et de l'antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Plantages</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">État</translation>
 <translation id="5094747076828555589">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 Chromium. Cela peut être dû à une mauvaise configuration ou bien à l'interception de votre connexion par un pirate informatique.</translation>
 <translation id="5095208057601539847">Province</translation>
+<translation id="5098332213681597508">Ce nom provient de votre compte Google.</translation>
 <translation id="5115563688576182185">(64 bits)</translation>
 <translation id="5121084798328133320">Une fois la validation terminée, les informations relatives à la carte de votre compte Google Payments seront partagées avec ce site.</translation>
 <translation id="5128122789703661928">Impossible de supprimer la session qui porte ce nom.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Des individus malveillants à l'œuvre sur le site <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pourraient tenter d'installer des programmes dangereux sur votre ordinateur afin de récupérer ou de supprimer certaines informations (photos, mots de passe, messages ou numéros de carte de crédit, par exemple). <ph name="BEGIN_LEARN_MORE_LINK" />En savoir plus<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Contenu trompeur bloqué.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Voulez-vous avoir toutes vos cartes au même endroit ?</translation>
 <translation id="5675650730144413517">Cette page ne fonctionne pas</translation>
 <translation id="5685654322157854305">Ajouter une adresse de livraison</translation>
 <translation id="5689199277474810259">Exporter au format JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Ce site est inaccessible</translation>
 <translation id="5869522115854928033">Mots de passe enregistrés</translation>
 <translation id="5893752035575986141">Les cartes de crédit sont acceptées.</translation>
-<translation id="5898382028489516745">L'équipe Chromium vous recommande de réinitialiser votre mot de passe <ph name="ORG_NAME" /> si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronisés)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 en cours d'utilisation}one{# en cours d'utilisation}other{# en cours d'utilisation}}</translation>
 <translation id="5939518447894949180">Réinitialiser</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">La traduction a échoué, car nous n'avons pas pu déterminer la langue de la page.</translation>
 <translation id="8557066899867184262">Le code CVC figure au recto de votre carte.</translation>
 <translation id="8559762987265718583">Impossible d'établir une connexion privée à <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> : la date et l'heure de votre appareil (<ph name="DATE_AND_TIME" />) sont incorrectes.</translation>
+<translation id="8564985650692024650">L'équipe Chromium vous recommande de réinitialiser votre mot de passe <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="8571890674111243710">Traduction de la page en <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Saisir num tél</translation>
 <translation id="859285277496340001">Le certificat n'indique aucun mécanisme permettant de vérifier s'il a été révoqué.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Adresse de livraison</translation>
 <translation id="884923133447025588">Aucun système de révocation trouvé</translation>
 <translation id="885730110891505394">Partage avec Google</translation>
+<translation id="8858065207712248076">L'équipe Chrome vous recommande de réinitialiser votre mot de passe <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> si vous l'avez réutilisé sur d'autres sites.</translation>
 <translation id="8866481888320382733">Erreur d'analyse des paramètres de la règle.</translation>
 <translation id="8870413625673593573">Récemment fermés</translation>
 <translation id="8874824191258364635">Saisissez un numéro de carte valide</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 5e0f64d7..07e23fe 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">અતિરિક્ત વિગતો પ્રદાન કરો</translation>
 <translation id="1021110881106174305">સ્વીકારેલ કાર્ડ</translation>
 <translation id="1032854598605920125">ઘડિયાળની દિશામાં ફેરવો</translation>
+<translation id="1035334672863811645">Chrome માં સાઇન ઇન કરો</translation>
 <translation id="1038842779957582377">અજ્ઞાત નામ</translation>
 <translation id="1050038467049342496">અન્ય ઍપ્લિકેશનો બંધ કરો</translation>
 <translation id="1055184225775184556">&amp;ઉમેરવું પૂર્વવત્ કરો</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 સૂચન}one{# સૂચન}other{# સૂચન}}</translation>
 <translation id="2079545284768500474">પૂર્વવત કરો</translation>
 <translation id="20817612488360358">સિસ્ટમ પ્રોક્સી સેટિંગ્સ ઉપયોગમાં લેવા માટે સેટ છે પણ એક સ્પષ્ટ પ્રોક્સી ગોઠવણી પણ ઉલ્લેખિત કરેલી છે.</translation>
-<translation id="2084558088529668945">તમે એવી સાઇટ પર તમારો પાસવર્ડ દાખલ કર્યો કે જે <ph name="ORG_NAME" /> દ્વારા મેનેજ કરવામાં આવતી નથી. તમારા એકાઉન્ટને સુરક્ષિત કરવા માટે, અન્ય ઍપ અને સાઇટ પર તમારા પાસવર્ડનો ફરી ઉપયોગ કરશો નહીં.</translation>
 <translation id="2091887806945687916">ધ્વનિ</translation>
 <translation id="2094505752054353250">ડોમેન મેળ ખાતું નથી</translation>
 <translation id="2096368010154057602">વિભાગ</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">ખોટી ચકાસણી સહી</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{વધુ <ph name="ITEM_COUNT" /> આઇટમ}one{વધુ <ph name="ITEM_COUNT" /> આઇટમ}other{વધુ <ph name="ITEM_COUNT" /> આઇટમ}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">જો તમે અન્ય સાઇટ પર <ph name="ORG_NAME" /> પાસવર્ડનો ફરી ઉપયોગ કર્યો હોય, તો Chrome તેને રીસેટ કરવાની ભલામણ કરે છે.</translation>
 <translation id="4196861286325780578">&amp;ખસેડવું ફરી કરો</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ફાયરવોલ અને એન્ટીવાઇરસ ગોઠવણી તપાસીને<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">ક્રેશેસ</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">રાજ્ય</translation>
 <translation id="5094747076828555589">આ સર્વર સાબિત કરી શક્યું નથી કે તે <ph name="DOMAIN" /> છે; તેનું સુરક્ષા પ્રમાણપત્ર Chromium દ્વારા વિશ્વસનીય નથી. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation>
 <translation id="5095208057601539847">પ્રાંત</translation>
+<translation id="5098332213681597508">આ નામ તમારા Google એકાઉન્ટમાંથી લીધું છે.</translation>
 <translation id="5115563688576182185">(64-બિટ)</translation>
 <translation id="5121084798328133320">તમે પુષ્ટિ કરી લો પછી, આ સાઇટ સાથે તમારા Google Payments એકાઉન્ટમાંથી કાર્ડની વિગતો શેર કરવામાં આવશે.</translation>
 <translation id="5128122789703661928">આ નામવાળું સત્ર ડિલીટ કરવા માટે માન્ય નથી.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> પરના હુમલાખોરો કદાચ હાલમાં તમારા કમ્પ્યુટર પર જોખમી પ્રોગ્રામ ઇન્સ્ટૉલ કરવાનો પ્રયાસ કરે છે કે જે તમારી માહિતી (ઉદાહરણ તરીકે, ફોટો, પાસવર્ડ, સંદેશા અને ક્રેડિટ કાર્ડ) ચોરી અથવા કાઢી નાખી શકે છે. <ph name="BEGIN_LEARN_MORE_LINK" />વધુ જાણો<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">ભ્રામક કન્ટેન્ટ અવરોધિત કરી</translation>
 <translation id="5659593005791499971">ઇમેઇલ</translation>
+<translation id="5666899935841546222">શું તમે તમારાં બધાં કાર્ડ એક જ સ્થાને રાખવા માગો છો?</translation>
 <translation id="5675650730144413517">આ પૃષ્ઠ કામ કરી રહ્યું નથી</translation>
 <translation id="5685654322157854305">વિતરણ માટેનું સરનામું ઉમેરો</translation>
 <translation id="5689199277474810259">JSON પર નિકાસ કરો</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">આ સાઇટ પર પહોંચી શકાતું નથી</translation>
 <translation id="5869522115854928033">સાચવેલા પાસવર્ડ્સ</translation>
 <translation id="5893752035575986141">ક્રેડિટ કાર્ડ સ્વીકારવામાં આવે છે.</translation>
-<translation id="5898382028489516745">જો તમે અન્ય સાઇટ પર <ph name="ORG_NAME" /> પાસવર્ડનો ફરી ઉપયોગ કર્યો હોય, તો Chromium તેને રીસેટ કરવાની ભલામણ કરે છે.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (સમન્વયિત)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ઉપયોગમાં છે}one{# ઉપયોગમાં છે}other{# ઉપયોગમાં છે}}</translation>
 <translation id="5939518447894949180">રીસેટ કરો</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">ભાષાંતર નિષ્ફળ રહ્યું કારણ કે પૃષ્ઠની ભાષા નિર્ધારિત થઈ શકી નથી.</translation>
 <translation id="8557066899867184262">CVC તમારા કાર્ડની પાછળ હોય છે.</translation>
 <translation id="8559762987265718583"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> પર ખાનગી કનેક્શન સ્થાપિત કરી શકાતું નથી કારણ કે તમારા ઉપકરણની તારીખ અને સમય (<ph name="DATE_AND_TIME" />) અયોગ્ય છે.</translation>
+<translation id="8564985650692024650">જો તમે અન્ય સાઇટ પર <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> પાસવર્ડનો ફરી ઉપયોગ કર્યો હોય, તો Chromium તેને રીસેટ કરવાનો સુઝાવ આપે છે.</translation>
 <translation id="8571890674111243710">પૃષ્ઠને <ph name="LANGUAGE" /> માં અનુવાદિત કરી રહ્યું છે...</translation>
 <translation id="858637041960032120">ફોન નંબર ઉમેરો</translation>
 <translation id="859285277496340001">પ્રમાણપત્રને રદ કરવામાં આવ્યું છે કે નહિ તે તપાસવા માટે કોઈપણ મેકેનિઝમ નિર્દિષ્ટ કરતું નથી.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">શિપિંગ સરનામું</translation>
 <translation id="884923133447025588">રદ કરવાની કોઈ મેકેનિઝમ મળી નથી.</translation>
 <translation id="885730110891505394">Google સાથે શેર કરવું</translation>
+<translation id="8858065207712248076">જો તમે અન્ય સાઇટ પર <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> પાસવર્ડનો ફરી ઉપયોગ કર્યો હોય, તો Chrome તેને રીસેટ કરવાનો સુઝાવ આપે છે.</translation>
 <translation id="8866481888320382733">ભૂલ વિશ્લેષણ નીતિ સેટિંગ્સ</translation>
 <translation id="8870413625673593573">તાજેતરમાં બંધ કરેલા</translation>
 <translation id="8874824191258364635">એક માન્ય કાર્ડ નંબર દાખલ કરો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 7f1bb3d..a0871499 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">अतिरिक्त विवरण प्रदान करें</translation>
 <translation id="1021110881106174305">स्वीकार्य कार्ड</translation>
 <translation id="1032854598605920125">घड़ी की दिशा में घुमाएं</translation>
+<translation id="1035334672863811645">Chrome में प्रवेश करें</translation>
 <translation id="1038842779957582377">अज्ञात नाम</translation>
 <translation id="1050038467049342496">दूूूूसरे ऐप्लिकेशन बंद करें</translation>
 <translation id="1055184225775184556">&amp;जोड़ना वापस लाएं</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 सुझाव}one{# सुझाव}other{# सुझाव}}</translation>
 <translation id="2079545284768500474">वापस लाएं</translation>
 <translation id="20817612488360358">सिस्‍टम प्रॉक्‍सी सेटिंग उपयोग किए जाने के लिए सेट हैं लेकिन कोई स्पष्‍ट प्रॉक्‍सी कॉन्फ़िगरेशन भी निर्दिष्ट है.</translation>
-<translation id="2084558088529668945">आपने एक ऐसी साइट पर अपना पासवर्ड डाला है जिसे <ph name="ORG_NAME" /> प्रबंधित नहीं करता है. अपने खाते को सुरक्षित रखने के लिए, दूसरे ऐप्लिकेशन और साइटों पर अपने पासवर्ड का दोबारा इस्तेमाल नहीं करें.</translation>
 <translation id="2091887806945687916">ध्वनि</translation>
 <translation id="2094505752054353250">डोमेन का गलत-मिलान</translation>
 <translation id="2096368010154057602">विभाग</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">गलत सत्यापन हस्ताक्षर</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> और आइटम}one{<ph name="ITEM_COUNT" /> और आइटम}other{<ph name="ITEM_COUNT" /> और आइटम}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">अगर आपने अपने <ph name="ORG_NAME" /> पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो Chrome आपको उसे रीसेट करने का सुझाव देता है.</translation>
 <translation id="4196861286325780578">&amp;ले जाना फिर से करें</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />फायरवॉल और एंटीवायरस कॉन्फ़िगरेशन की जाँच करें<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">क्रैश</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">राज्य</translation>
 <translation id="5094747076828555589">यह सर्वर यह नहीं प्रमाणित कर सका कि यह <ph name="DOMAIN" /> है; इसका सुरक्षा प्रमाणपत्र Chromium द्वारा विश्वसनीय नहीं है. ऐसा गलत कॉन्फ़िगरेशन या किसी आक्रमणकर्ता द्वारा आपके कनेक्शन में अवरोध डालने के कारण हो सकता है.</translation>
 <translation id="5095208057601539847">प्रांत</translation>
+<translation id="5098332213681597508">यह नाम आपके Google खाते से संबंधित है.</translation>
 <translation id="5115563688576182185">(64-बिट)</translation>
 <translation id="5121084798328133320">आपकी ओर से पुष्टि होने के बाद, आपके Google Payments खाते में मौजूद कार्ड के विवरण इस साइट से शेयर किए जाएंगे.</translation>
 <translation id="5128122789703661928">इस नाम वाला सीज़न मिटाने के लिए मान्य नहीं है.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">इस समय <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> पर मौजूद हमलावर आपके कंप्यूटर पर ऐसे खतरनाक प्रोग्राम इंस्टॉल करने की कोशिश कर सकते हैं जो आपकी जानकारी (उदाहरण के लिए, फ़ोटो, पासवर्ड, संदेश और क्रेडिट कार्ड) चुराते हैं या उसे हटा देते हैं. <ph name="BEGIN_LEARN_MORE_LINK" />अधिक जानें<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">भ्रामक सामग्री ब्लॉक की गई.</translation>
 <translation id="5659593005791499971">ईमेल</translation>
+<translation id="5666899935841546222">क्या आप अपने सभी कार्ड एक ही जगह पर रखना चाहते हैं?</translation>
 <translation id="5675650730144413517">यह पेज काम नहीं कर रहा है</translation>
 <translation id="5685654322157854305">शिपिंग पता जोड़ें</translation>
 <translation id="5689199277474810259">JSON में निर्यात करें</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">इस साइट तक नहीं पहुंचा जा सकता</translation>
 <translation id="5869522115854928033">सहेजे गए पासवर्ड</translation>
 <translation id="5893752035575986141">क्रेडिट कार्ड स्वीकार किए जाते हैं.</translation>
-<translation id="5898382028489516745">अगर आपने अपने <ph name="ORG_NAME" /> पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो क्रोमियम आपको उसे रीसेट करने का सुझाव देता है.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक किया गया)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 उपयोग में है}one{# उपयोग में हैं}other{# उपयोग में हैं}}</translation>
 <translation id="5939518447894949180">रीसेट करें</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">अनुवाद विफल हो गया क्योंकि पेज की भाषा निर्धारित नहीं की जा सकी.</translation>
 <translation id="8557066899867184262">कार्ड वेरीफ़िकेशन कोड (सीवीसी) आपके कार्ड के पीछे मौजूद होता है.</translation>
 <translation id="8559762987265718583"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> से एक निजी कनेक्‍शन स्‍थापित नहीं किया जा सकता क्‍योंकि आपके डिवाइस का दिनांक और समय (<ph name="DATE_AND_TIME" />) गलत है.</translation>
+<translation id="8564985650692024650">अगर आपने अपने <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो क्रोमियम आपको उसे रीसेट करने का सुझाव देता है.</translation>
 <translation id="8571890674111243710">पेज का अनुवाद <ph name="LANGUAGE" /> में कर रहा है...</translation>
 <translation id="858637041960032120">फ़ोन नंबर जोड़ें
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">शिपिंग पता</translation>
 <translation id="884923133447025588">कोई निरस्तीकरण प्रक्रिया प्राप्त नहीं हुई.</translation>
 <translation id="885730110891505394">Google के साथ शेयर करना</translation>
+<translation id="8858065207712248076">अगर आपने अपने <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्ड का दूसरी साइटों पर दोबारा इस्तेमाल किया है, तो Chrome आपको उसे रीसेट करने का सुझाव देता है.</translation>
 <translation id="8866481888320382733">नीति सेटिंग पार्स करने में गड़बड़ी</translation>
 <translation id="8870413625673593573">हाल ही में बंद किए गए</translation>
 <translation id="8874824191258364635">मान्य कार्ड संख्या डालें</translation>
diff --git a/components/strings/components_strings_hr.xtb b/components/strings/components_strings_hr.xtb
index 034745a..45a42a5 100644
--- a/components/strings/components_strings_hr.xtb
+++ b/components/strings/components_strings_hr.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Navedite dodatne pojedinosti</translation>
 <translation id="1021110881106174305">Prihvaćene kartice</translation>
 <translation id="1032854598605920125">Zakretanje u smjeru kazaljke na satu</translation>
+<translation id="1035334672863811645">prijavite se na Chrome</translation>
 <translation id="1038842779957582377">nepoznati naziv</translation>
 <translation id="1050038467049342496">Zatvorite ostale aplikacije</translation>
 <translation id="1055184225775184556">&amp;Poništi dodavanje</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 prijedlog}one{# prijedlog}few{# prijedloga}other{# prijedloga}}</translation>
 <translation id="2079545284768500474">Poništi</translation>
 <translation id="20817612488360358">Postavljena je upotreba sistemskih postavki proxy poslužitelja, ali također je određena izričita konfiguracija proxy poslužitelja.</translation>
-<translation id="2084558088529668945">Unijeli ste zaporku na stranicu kojom ne upravlja <ph name="ORG_NAME" />. Da biste zaštitili račun, nemojte upotrebljavati tu zaporku za druge aplikacije i web-lokacije.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2094505752054353250">Domena se ne podudara</translation>
 <translation id="2096368010154057602">Departman</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">Potpis za potvrdu nije ispravan.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Još <ph name="ITEM_COUNT" /> stavka}one{Još <ph name="ITEM_COUNT" /> stavka}few{Još <ph name="ITEM_COUNT" /> stavke}other{Još <ph name="ITEM_COUNT" /> stavki}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome preporučuje poništavanje zaporke za <ph name="ORG_NAME" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="4196861286325780578">&amp;Ponovi premještanje</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />provjerite vatrozid i konfiguraciju antivirusnog programa<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Padovi programa</translation>
@@ -584,6 +583,7 @@
 <translation id="5089810972385038852">Država</translation>
 <translation id="5094747076828555589">Poslužitelj nije mogao dokazati da je <ph name="DOMAIN" />; Chromium smatra da njegov sigurnosni certifikat nije pouzdan. To može biti uzrokovano pogrešnom konfiguracijom ili napadom na vašu vezu.</translation>
 <translation id="5095208057601539847">Provincija</translation>
+<translation id="5098332213681597508">To je ime s vašeg Google računa.</translation>
 <translation id="5115563688576182185">(64-bitni)</translation>
 <translation id="5121084798328133320">Nakon što ih potvrdite, podaci o kartici s računa usluge Google podijelit će se s ovom web-lokacijom.</translation>
 <translation id="5128122789703661928">Brisanje sesije nije uspjelo jer naziv sesije nije važeći.</translation>
@@ -669,6 +669,7 @@
 <translation id="5633066919399395251">Napadači koji su trenutačno na web-lokaciji <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogu pokušati instalirati opasne programe na vaše računalo radi krađe ili brisanja vaših podataka (na primjer fotografija, zaporki, poruka i brojeva kreditnih kartica). <ph name="BEGIN_LEARN_MORE_LINK" />Saznajte više<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Blokiran je obmanjujući sadržaj.</translation>
 <translation id="5659593005791499971">E-pošta</translation>
+<translation id="5666899935841546222">Želite li da sve vaše kartice budu na jednom mjestu?</translation>
 <translation id="5675650730144413517">Stranica ne funkcionira</translation>
 <translation id="5685654322157854305">Dodajte adresu za dostavu</translation>
 <translation id="5689199277474810259">Izvezi u JSON</translation>
@@ -695,7 +696,6 @@
 <translation id="5869405914158311789">Web-lokacija ne može se dohvatiti</translation>
 <translation id="5869522115854928033">Spremljene zaporke</translation>
 <translation id="5893752035575986141">Prihvaćaju se kreditne kartice.</translation>
-<translation id="5898382028489516745">Chromium preporučuje poništavanje zaporke za <ph name="ORG_NAME" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinkronizirano)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 u upotrebi}one{# u upotrebi}few{# u upotrebi}other{# u upotrebi}}</translation>
 <translation id="5939518447894949180">Ponovno postavi</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">Prijevod nije uspio jer nije bilo moguće odrediti jezik stranice.</translation>
 <translation id="8557066899867184262">CVC možete pronaći na poleđini kartice.</translation>
 <translation id="8559762987265718583">Sigurnu vezu s domenom <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nije moguće uspostaviti jer datum i vrijeme (<ph name="DATE_AND_TIME" />) na vašem uređaju nisu točni.</translation>
+<translation id="8564985650692024650">Chromium preporučuje poništavanje zaporke za organizaciju <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="8571890674111243710">Prijevod stranice na <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Dodaj tel. broj
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Adresa za dostavu</translation>
 <translation id="884923133447025588">Nije pronađen mehanizam za opoziv.</translation>
 <translation id="885730110891505394">Dijeljenje s Googleom</translation>
+<translation id="8858065207712248076">Chrome preporučuje poništavanje zaporke za organizaciju <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ako ste je upotrebljavali za druge web-lokacije.</translation>
 <translation id="8866481888320382733">Pogreška pri analizi postavki pravila</translation>
 <translation id="8870413625673593573">Nedavno zatvoreno</translation>
 <translation id="8874824191258364635">Unesite važeći broj kreditne kartice</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb
index 212afb3..0ce4c2b 100644
--- a/components/strings/components_strings_hu.xtb
+++ b/components/strings/components_strings_hu.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">További részletek megadása</translation>
 <translation id="1021110881106174305">Elfogadott kártyák</translation>
 <translation id="1032854598605920125">Forgatás jobbra</translation>
+<translation id="1035334672863811645">bejelentkezés a Chrome-ba</translation>
 <translation id="1038842779957582377">Ismeretlen név</translation>
 <translation id="1050038467049342496">Zárja be a többi alkalmazást</translation>
 <translation id="1055184225775184556">&amp;Hozzáadás visszavonása</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 javaslat}other{# javaslat}}</translation>
 <translation id="2079545284768500474">Visszavonás</translation>
 <translation id="20817612488360358">A rendszer proxybeállításai konfigurálva vannak a használathoz, de kifejezett proxykonfiguráció is meg van adva.</translation>
-<translation id="2084558088529668945">Olyan webhelyen adta meg a jelszavát, amelyet nem a(z) <ph name="ORG_NAME" /> kezel. Jelszava védelme érdekében ne adja meg újra a jelszót más alkalmazásokban és webhelyeken.</translation>
 <translation id="2091887806945687916">Hang</translation>
 <translation id="2094505752054353250">Domainkeveredés</translation>
 <translation id="2096368010154057602">Megye</translation>
@@ -455,7 +455,6 @@
 <translation id="4171400957073367226">Hibás igazoló aláírás.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{ még <ph name="ITEM_COUNT" /> elem}other{ még <ph name="ITEM_COUNT" /> elem}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">A Chrome azt javasolja, hogy adjon meg új <ph name="ORG_NAME" />-jelszavat a régi helyett, ha azt más webhelyeken is használta.</translation>
 <translation id="4196861286325780578">&amp;Áthelyezés újra</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />A tűzfal és a vírusirtó konfigurációjának ellenőrzése<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Összeomlások</translation>
@@ -583,6 +582,7 @@
 <translation id="5089810972385038852">Állam</translation>
 <translation id="5094747076828555589">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa a Chromium szerint nem megbízható. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation>
 <translation id="5095208057601539847">Tartomány</translation>
+<translation id="5098332213681597508">Ez a név a Google-fiókjából származik.</translation>
 <translation id="5115563688576182185">(64 bites)</translation>
 <translation id="5121084798328133320">A megerősítést követően a böngésző megosztja az Ön Google Payments-fiókjából származó kártyaadatokat ezzel a webhellyel.</translation>
 <translation id="5128122789703661928">Ez a munkamenetnév nem érvényes, ezért nem törölhető.</translation>
@@ -668,6 +668,7 @@
 <translation id="5633066919399395251">Előfordulhat, hogy a(z) <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> webhely támadói veszélyes programokat kísérelnek meg telepíteni számítógépére, amelyek ellopják vagy törlik az Ön adatait (például fotóit, jelszavait, üzeneteit és hitelkártyaadatait). <ph name="BEGIN_LEARN_MORE_LINK" />További információ<ph name="END_LEARN_MORE_LINK" />.</translation>
 <translation id="563324245173044180">Megtévesztő tartalom letiltva.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Szeretné, ha az összes kártyája egy helyen lenne?</translation>
 <translation id="5675650730144413517">Az oldal nem működik</translation>
 <translation id="5685654322157854305">Szállítási cím hozzáadása</translation>
 <translation id="5689199277474810259">Exportálás JSON formátumba</translation>
@@ -694,7 +695,6 @@
 <translation id="5869405914158311789">A webhely nem érhető el</translation>
 <translation id="5869522115854928033">Mentett jelszavak</translation>
 <translation id="5893752035575986141">Elfogadott hitelkártyák.</translation>
-<translation id="5898382028489516745">A Chromium azt javasolja, hogy adjon meg új <ph name="ORG_NAME" />-jelszavat a régi helyett, ha azt más webhelyeken is használta.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (szinkronizálva)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 van használatban}other{# van használatban}}</translation>
 <translation id="5939518447894949180">Visszaállítás</translation>
@@ -1038,6 +1038,7 @@
 <translation id="8553075262323480129">A fordítás nem sikerült, mivel az oldal nyelvét nem lehet megállapítani.</translation>
 <translation id="8557066899867184262">A CVC-kód a kártya hátulján található.</translation>
 <translation id="8559762987265718583">Nem hozható létre privát kapcsolat a következővel: <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, mert az eszköz dátum- és időbeállítása helytelen (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">A Chromium azt javasolja, hogy adjon meg új <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />-jelszót a régi helyett, ha azt más webhelyeken is használta.</translation>
 <translation id="8571890674111243710">Oldal fordítása erre a nyelvre: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Szám hozzáadása
 </translation>
@@ -1067,6 +1068,7 @@
 <translation id="884264119367021077">Szállítási cím</translation>
 <translation id="884923133447025588">Nem található visszavonási mechanizmus.</translation>
 <translation id="885730110891505394">Megosztás a Google-lal</translation>
+<translation id="8858065207712248076">A Chrome azt javasolja, hogy adjon meg új <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />-jelszót a régi helyett, ha azt más webhelyeken is használta.</translation>
 <translation id="8866481888320382733">Irányelv-beállítások előfeldolgozási hibája</translation>
 <translation id="8870413625673593573">Mostanában bezárt</translation>
 <translation id="8874824191258364635">Érvényes kártyaszámot adjon meg</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb
index ff67168..c9a60b4 100644
--- a/components/strings/components_strings_id.xtb
+++ b/components/strings/components_strings_id.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Berikan detail tambahan</translation>
 <translation id="1021110881106174305">Kartu yang diterima</translation>
 <translation id="1032854598605920125">Putar searah jarum jam</translation>
+<translation id="1035334672863811645">masuk ke Chrome</translation>
 <translation id="1038842779957582377">nama tidak diketahui</translation>
 <translation id="1050038467049342496">Tutup aplikasi lain</translation>
 <translation id="1055184225775184556">&amp;Urungkan Penambahan</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 saran}other{# saran}}</translation>
 <translation id="2079545284768500474">Urungkan</translation>
 <translation id="20817612488360358">Setelan proxy sistem disetel untuk digunakan namun konfigurasi proxy eksplisit juga ditentukan.</translation>
-<translation id="2084558088529668945">Anda memasukkan sandi di situs yang tidak dikelola oleh <ph name="ORG_NAME" />. Untuk melindungi akun, jangan gunakan sandi yang sama di aplikasi dan situs lain.</translation>
 <translation id="2091887806945687916">Suara</translation>
 <translation id="2094505752054353250">Ketidakcocokan domain</translation>
 <translation id="2096368010154057602">Departemen</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Tanda tangan verifikasi tidak valid</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> item lainnya}other{<ph name="ITEM_COUNT" /> item lainnya}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome menyarankan untuk menyetel ulang sandi <ph name="ORG_NAME" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="4196861286325780578">&amp;Ulangi pemindahan</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Periksa konfigurasi antivirus dan firewall<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Kerusakan</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Negara bagian</translation>
 <translation id="5094747076828555589">Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; sertifikat keamanannya tidak dipercaya oleh Chromium. Hal ini dapat disebabkan oleh kesalahan konfigurasi atau penyerang memotong sambungan Anda.</translation>
 <translation id="5095208057601539847">Provinsi</translation>
+<translation id="5098332213681597508">Nama ini dari Akun Google Anda.</translation>
 <translation id="5115563688576182185">(64 bit)</translation>
 <translation id="5121084798328133320">Setelah mengonfirmasi, detail kartu dari akun Pembayaran Google Anda akan dibagikan dengan situs ini.</translation>
 <translation id="5128122789703661928">Sesi dengan nama ini tidak valid untuk dihapus.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Saat ini, penyerang di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin berusaha menginstal program berbahaya di komputer Anda yang dapat mencuri atau menghapus informasi Anda (misalnya, foto, sandi, pesan, dan kartu kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Pelajari lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Konten penipuan diblokir.</translation>
 <translation id="5659593005791499971">Email</translation>
+<translation id="5666899935841546222">Ingin memiliki semua kartu di satu tempat?</translation>
 <translation id="5675650730144413517">Halaman ini tidak berfungsi</translation>
 <translation id="5685654322157854305">Tambahkan Alamat Pengiriman</translation>
 <translation id="5689199277474810259">Ekspor ke JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Situs ini tidak dapat dijangkau</translation>
 <translation id="5869522115854928033">Sandi tersimpan</translation>
 <translation id="5893752035575986141">Kartu kredit diterima.</translation>
-<translation id="5898382028489516745">Chromium menyarankan untuk menyetel ulang sandi <ph name="ORG_NAME" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (disinkronkan)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 terpakai}other{# terpakai}}</translation>
 <translation id="5939518447894949180">Setel ulang</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Terjemahan gagal karena bahasa halaman tidak dapat ditentukan.</translation>
 <translation id="8557066899867184262">CVC terletak di bagian belakang kartu Anda.</translation>
 <translation id="8559762987265718583">Sambungan pribadi ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tidak dapat dibuat karena tanggal dan waktu (<ph name="DATE_AND_TIME" />) perangkat tidak benar.</translation>
+<translation id="8564985650692024650">Chromium menyarankan untuk menyetel ulang sandi <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="8571890674111243710">Menerjemahkan halaman ke <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">+ nomor telepon</translation>
 <translation id="859285277496340001">Sertifikat tidak menetapkan mekanisme untuk memeriksa apakah sertifikat telah ditarik.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Alamat pengiriman</translation>
 <translation id="884923133447025588">Tidak ditemukan mekanisme pembatalan.</translation>
 <translation id="885730110891505394">Berbagi dengan Google</translation>
+<translation id="8858065207712248076">Chrome menyarankan untuk menyetel ulang sandi <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika Anda juga menggunakannya di situs lain.</translation>
 <translation id="8866481888320382733">Kesalahan saat menguraikan setelan kebijakan</translation>
 <translation id="8870413625673593573">Barusan Ditutup</translation>
 <translation id="8874824191258364635">Masukkan nomor kartu yang valid</translation>
diff --git a/components/strings/components_strings_it.xtb b/components/strings/components_strings_it.xtb
index 1e6d283..f2a3b71 100644
--- a/components/strings/components_strings_it.xtb
+++ b/components/strings/components_strings_it.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Fornisci ulteriori dettagli</translation>
 <translation id="1021110881106174305">Carte di credito accettate</translation>
 <translation id="1032854598605920125">Ruota in senso orario</translation>
+<translation id="1035334672863811645">accedi a Chrome</translation>
 <translation id="1038842779957582377">nome sconosciuto</translation>
 <translation id="1050038467049342496">Chiudi altre app</translation>
 <translation id="1055184225775184556">&amp;Annulla aggiunta</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggerimento}other{# suggerimenti}}</translation>
 <translation id="2079545284768500474">Annulla</translation>
 <translation id="20817612488360358">Devono essere utilizzate le impostazioni del proxy di sistema ma è stata specificata anche una configurazione proxy esplicita.</translation>
-<translation id="2084558088529668945">Hai inserito la password su un sito non gestito da <ph name="ORG_NAME" />. Per proteggere il tuo account, non riutilizzare la password su altri siti e app.</translation>
 <translation id="2091887806945687916">Audio</translation>
 <translation id="2094505752054353250">Dominio non corrispondente</translation>
 <translation id="2096368010154057602">Dipartimento</translation>
@@ -454,7 +454,6 @@
 <translation id="4171400957073367226">Firma di verifica non valida</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> altro elemento}other{Altri <ph name="ITEM_COUNT" /> elementi}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome ti consiglia di reimpostare la password di <ph name="ORG_NAME" /> se l'hai utilizzata su altri siti.</translation>
 <translation id="4196861286325780578">&amp;Ripeti spostamento</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Controllare le configurazioni del firewall e antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Arresti anomali</translation>
@@ -582,6 +581,7 @@
 <translation id="5089810972385038852">Provincia</translation>
 <translation id="5094747076828555589">Questo server non è riuscito a dimostrare che si tratta di <ph name="DOMAIN" />; il relativo certificato di sicurezza non è considerato attendibile da Chromium. Il problema potrebbe essere dovuto a un'errata configurazione o a un malintenzionato che intercetta la connessione.</translation>
 <translation id="5095208057601539847">Provincia</translation>
+<translation id="5098332213681597508">Questo nome proviene dal tuo account Google.</translation>
 <translation id="5115563688576182185">(a 64 bit)</translation>
 <translation id="5121084798328133320">Dopo essere stati confermati, i dati della carta del tuo account Google Payments saranno condivisi con questo sito.</translation>
 <translation id="5128122789703661928">Impossibile eliminare la sessione perché il nome specificato non è valido.</translation>
@@ -667,6 +667,7 @@
 <translation id="5633066919399395251">Gli utenti malintenzionati attualmente presenti sul sito <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> potrebbero cercare di installare sul tuo computer programmi pericolosi che carpiscono o eliminano le tue informazioni (ad esempio, foto, password, messaggi e carte di credito). <ph name="BEGIN_LEARN_MORE_LINK" />Ulteriori informazioni<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Contenuti ingannevoli bloccati.</translation>
 <translation id="5659593005791499971">Email</translation>
+<translation id="5666899935841546222">Vuoi tenere tutte le schede in un unico posto?</translation>
 <translation id="5675650730144413517">La pagina non funziona</translation>
 <translation id="5685654322157854305">Aggiungi l'indirizzo di spedizione</translation>
 <translation id="5689199277474810259">Esporta in JSON</translation>
@@ -693,7 +694,6 @@
 <translation id="5869405914158311789">Impossibile raggiungere il sito</translation>
 <translation id="5869522115854928033">Password salvate</translation>
 <translation id="5893752035575986141">Le carte di credito sono accettate.</translation>
-<translation id="5898382028489516745">Chromium ti consiglia di reimpostare la password di <ph name="ORG_NAME" /> se l'hai utilizzata su altri siti.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizzati)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in uso}other{# in uso}}</translation>
 <translation id="5939518447894949180">Ripristina</translation>
@@ -1036,6 +1036,7 @@
 <translation id="8553075262323480129">La traduzione non è riuscita perché non è stato possibile determinare la lingua della pagina.</translation>
 <translation id="8557066899867184262">Il codice CVC si trova sul lato posteriore della carta.</translation>
 <translation id="8559762987265718583">Impossibile stabilire una connessione privata con il sito <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> perché data e ora del dispositivo (<ph name="DATE_AND_TIME" />) sono sbagliate.</translation>
+<translation id="8564985650692024650">Chromium ti consiglia di reimpostare la password di <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, se l'hai utilizzata su altri siti.</translation>
 <translation id="8571890674111243710">Traduzione della pagina in <ph name="LANGUAGE" /> in corso...</translation>
 <translation id="858637041960032120">Aggiungi telefono</translation>
 <translation id="859285277496340001">Il certificato non specifica un meccanismo per il controllo della sua revoca.</translation>
@@ -1064,6 +1065,7 @@
 <translation id="884264119367021077">Indirizzo di spedizione</translation>
 <translation id="884923133447025588">Nessun sistema di revoca trovato.</translation>
 <translation id="885730110891505394">Condivisione con Google</translation>
+<translation id="8858065207712248076">Chrome ti consiglia di reimpostare la password di <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, se l'hai utilizzata su altri siti.</translation>
 <translation id="8866481888320382733">Errore durante l'analisi delle impostazioni criterio</translation>
 <translation id="8870413625673593573">Chiusi di recente</translation>
 <translation id="8874824191258364635">Inserisci un numero di carta di credito valido</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 91f6321..74d5a670 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">ספק פרטים נוספים</translation>
 <translation id="1021110881106174305">כרטיסים מאושרים</translation>
 <translation id="1032854598605920125">סובב בכיוון השעון</translation>
+<translation id="1035334672863811645">‏היכנס ל-Chrome</translation>
 <translation id="1038842779957582377">שם לא ידוע</translation>
 <translation id="1050038467049342496">סגירת יישומים אחרים</translation>
 <translation id="1055184225775184556">&amp;ביטול הוספה</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{הצעה אחת}two{שתי הצעות}many{# הצעות}other{# הצעות}}</translation>
 <translation id="2079545284768500474">בטל פעולה</translation>
 <translation id="20817612488360358">‏נקבע שימוש בהגדרות שרת Proxy של מערכת אך בנוסף מצוינת גם תצורה מפורשת של שרת Proxy.</translation>
-<translation id="2084558088529668945">הזנת את הסיסמה באתר שלא מנוהל על ידי <ph name="ORG_NAME" />. כדי להגן על החשבון שלך, מומלץ לא להזין את הסיסמה באפליקציות ובאתרים אחרים.</translation>
 <translation id="2091887806945687916">צליל</translation>
 <translation id="2094505752054353250">אי התאמה בדומיינים</translation>
 <translation id="2096368010154057602">מחלקה</translation>
@@ -221,7 +221,7 @@
 <translation id="2491120439723279231">אישור השרת מכיל שגיאות.</translation>
 <translation id="2495083838625180221">‏מנתח JSON</translation>
 <translation id="2495093607237746763">‏אם האפשרות תסומן, Chromium ישמור עותק של הכרטיס במכשיר הזה כדי למלא טפסים במהירות רבה יותר.</translation>
-<translation id="2498091847651709837">סרוק כרטיס חדש</translation>
+<translation id="2498091847651709837">סריקת כרטיס חדש</translation>
 <translation id="2501278716633472235">חזור</translation>
 <translation id="2503184589641749290">כרטיסי חיוב וכרטיסים משולמים מראש שהסוחר מקבל</translation>
 <translation id="2515629240566999685">לבדוק את האות באזור שלך</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">חתימת אימות לא חוקית</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{פריט אחד (<ph name="ITEM_COUNT" />) נוסף}two{<ph name="ITEM_COUNT" /> פריטים נוספים}many{<ph name="ITEM_COUNT" /> פריטים נוספים}other{<ph name="ITEM_COUNT" /> פריטים נוספים}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">‏אם הזנת את הסיסמה של <ph name="ORG_NAME" /> באתרים אחרים, ההמלצה של Chrome היא לאפס אותה.</translation>
 <translation id="4196861286325780578">&amp;ביצוע מחדש של העברה</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />לבדוק את תצורת האנטי-וירוס וחומת האש<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">קריסה</translation>
@@ -589,6 +588,7 @@
 <translation id="5089810972385038852">מדינה</translation>
 <translation id="5094747076828555589">‏השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. אישור האבטחה שלו לא נחשב כמהימן על ידי Chromium. ייתכן שהסיבה לכך היא תצורה שגויה או תוקף המיירט את החיבור שלך.</translation>
 <translation id="5095208057601539847">פרובינציה</translation>
+<translation id="5098332213681597508">‏השם הזה הוא מחשבון Google שלך.</translation>
 <translation id="5115563688576182185">(64 סיביות)</translation>
 <translation id="5121084798328133320">‏אחרי שנקבל ממך אישור, נשתף עם האתר הזה את פרטי הכרטיס מחשבון תשלומי Google.</translation>
 <translation id="5128122789703661928">שם ההפעלה למחיקה אינו חוקי.</translation>
@@ -675,6 +675,7 @@
 <translation id="5633066919399395251">תוקפים שנמצאים כרגע באתר <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> עלולים להתקין במחשב שלך תוכנות מסוכנות שגונבות מידע או מוחקות אותו (למשל, תמונות, סיסמאות, הודעות וכרטיסי אשראי). <ph name="BEGIN_LEARN_MORE_LINK" />מידע נוסף<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">תוכן מטעה נחסם</translation>
 <translation id="5659593005791499971">אימייל</translation>
+<translation id="5666899935841546222">להציג את כל הכרטיסים שלך במקום אחד?</translation>
 <translation id="5675650730144413517">הדף הזה לא עובד</translation>
 <translation id="5685654322157854305">הוספת כתובת למשלוח</translation>
 <translation id="5689199277474810259">‏ייצוא אל JSON</translation>
@@ -701,7 +702,6 @@
 <translation id="5869405914158311789">לא ניתן לגשת לאתר הזה</translation>
 <translation id="5869522115854928033">סיסמאות שמורות</translation>
 <translation id="5893752035575986141">אפשר לשלם באמצעות כרטיסי אשראי.</translation>
-<translation id="5898382028489516745">‏אם הזנת את הסיסמה של <ph name="ORG_NAME" /> באתרים אחרים, ההמלצה של Chromium היא לאפס אותה.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (מסונכרנים)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{אחד נמצא בשימוש}two{שניים נמצאים בשימוש}many{# נמצאים בשימוש}other{# נמצאים בשימוש}}</translation>
 <translation id="5939518447894949180">אפס</translation>
@@ -1045,6 +1045,7 @@
 <translation id="8553075262323480129">התרגום נכשל כיוון שלא הייתה אפשרות לקבוע את שפת הדף.</translation>
 <translation id="8557066899867184262">קוד האימות נמצא בגב הכרטיס.</translation>
 <translation id="8559762987265718583">לא ניתן ליצור חיבור פרטי אל <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> מפני שהתאריך והשעה (<ph name="DATE_AND_TIME" />) במכשיר שלך שגויים.</translation>
+<translation id="8564985650692024650">‏אם הזנת את הסיסמה של <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> באתרים אחרים, ההמלצה של Chromium היא לאפס אותה.</translation>
 <translation id="8571890674111243710">מתרגם דף ל<ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">הוסף מספר טלפון
 </translation>
@@ -1074,6 +1075,7 @@
 <translation id="884264119367021077">כתובת למשלוח</translation>
 <translation id="884923133447025588">לא נמצא מנגנון ביטול</translation>
 <translation id="885730110891505394">‏שיתוף עם Google</translation>
+<translation id="8858065207712248076">‏אם הזנת את הסיסמה של <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> באתרים אחרים, ההמלצה של Chrome היא לאפס אותה.</translation>
 <translation id="8866481888320382733">שגיאה בניתוח הגדרות המדיניות</translation>
 <translation id="8870413625673593573">נסגרו לאחרונה</translation>
 <translation id="8874824191258364635">עליך להזין מספר כרטיס חוקי</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb
index 5355875..4560746d 100644
--- a/components/strings/components_strings_ja.xtb
+++ b/components/strings/components_strings_ja.xtb
@@ -6,13 +6,14 @@
 <translation id="1015730422737071372">詳細を報告する</translation>
 <translation id="1021110881106174305">利用可能なカード</translation>
 <translation id="1032854598605920125">時計回りに回転</translation>
+<translation id="1035334672863811645">Chrome にログイン</translation>
 <translation id="1038842779957582377">不明な名前</translation>
 <translation id="1050038467049342496">他のアプリを終了する</translation>
 <translation id="1055184225775184556">追加の取り消し(&amp;U)</translation>
 <translation id="10614374240317010">常に保存しない</translation>
 <translation id="1066396345355680611"><ph name="SITE" /> と他の一部のサイトで、保護されたコンテンツにアクセスできなくなる可能性があります。</translation>
 <translation id="106701514854093668">パソコンのブックマーク</translation>
-<translation id="1074497978438210769">保護されていません</translation>
+<translation id="1074497978438210769">保護されていない通信</translation>
 <translation id="1080116354587839789">ウィンドウ幅に合わせる</translation>
 <translation id="1088860948719068836">名義人名の追加</translation>
 <translation id="1103523840287552314"><ph name="LANGUAGE" />を常に翻訳</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 件の候補}other{# 件の候補}}</translation>
 <translation id="2079545284768500474">元に戻す</translation>
 <translation id="20817612488360358">システム プロキシ設定を使用するように設定されていますが、明示的なプロキシの設定も指定されています。</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" /> が管理していないサイトでパスワードを入力しました。アカウントを保護するには、他のアプリやサイトでパスワードを再使用しないでください。</translation>
 <translation id="2091887806945687916">音声</translation>
 <translation id="2094505752054353250">ドメインが一致しません</translation>
 <translation id="2096368010154057602">県</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">確認用の署名に問題があります</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{他 <ph name="ITEM_COUNT" /> 件のアイテム}other{他 <ph name="ITEM_COUNT" /> 件のアイテム}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268"><ph name="ORG_NAME" /> パスワードを他のサイトで再使用した場合、Chrome ではパスワードの再設定を促すメッセージが表示されます。</translation>
 <translation id="4196861286325780578">移動のやり直し(&amp;R)</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ファイアウォールとウイルス対策の設定を確認する<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">クラッシュ</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">都道府県 / 州</translation>
 <translation id="5094747076828555589">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は Chromium によって信頼されているものではありません。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation>
 <translation id="5095208057601539847">地方</translation>
+<translation id="5098332213681597508">Google アカウントで設定されている名前です。</translation>
 <translation id="5115563688576182185">(64 ビット)</translation>
 <translation id="5121084798328133320">確認後、Google Payments アカウントのカード情報がこのサイトと共有されます。</translation>
 <translation id="5128122789703661928">セッションの名前が有効でないため、削除できません。</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> では現在、悪意のあるユーザーによって、お使いのパソコン上に危険なプログラム(写真、パスワード、メッセージ、クレジット カードなどの情報を盗んだり削除したりするプログラム)がインストールされる可能性があります。<ph name="BEGIN_LEARN_MORE_LINK" />詳細<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">不正の可能性があるコンテンツがブロックされました。</translation>
 <translation id="5659593005791499971">メール</translation>
+<translation id="5666899935841546222">すべてのカードを 1 か所で管理しますか?</translation>
 <translation id="5675650730144413517">このページは動作していません</translation>
 <translation id="5685654322157854305">配送先住所を追加</translation>
 <translation id="5689199277474810259">JSON にエクスポート</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">このサイトにアクセスできません</translation>
 <translation id="5869522115854928033">保存したパスワード</translation>
 <translation id="5893752035575986141">クレジット カードをご利用いただけます。</translation>
-<translation id="5898382028489516745"><ph name="ORG_NAME" /> パスワードを他のサイトで再使用した場合、Chromium ではパスワードの再設定を促すメッセージが表示されます。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(同期済み)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 個が使用中}other{# 個が使用中}}</translation>
 <translation id="5939518447894949180">リセット</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">ページの言語を検出できないため翻訳できません。</translation>
 <translation id="8557066899867184262">CVC はカードの裏面に記載されています。</translation>
 <translation id="8559762987265718583">デバイスの日時(<ph name="DATE_AND_TIME" />)が正しくないため、<ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> へのプライベート接続を確立できません。</translation>
+<translation id="8564985650692024650"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> パスワードを他のサイトで再使用した場合、Chromium ではパスワードの再設定を促すメッセージが表示されます。</translation>
 <translation id="8571890674111243710">ページを<ph name="LANGUAGE" />に翻訳しています...</translation>
 <translation id="858637041960032120">電話番号を追加
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">配送先住所</translation>
 <translation id="884923133447025588">取り消し機構が見つかりません。</translation>
 <translation id="885730110891505394">Google との共有</translation>
+<translation id="8858065207712248076"><ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> パスワードを他のサイトで再使用した場合、Chrome ではパスワードの再設定を促すメッセージが表示されます。</translation>
 <translation id="8866481888320382733">ポリシー設定の解析中にエラーが発生しました</translation>
 <translation id="8870413625673593573">最近閉じたタブ</translation>
 <translation id="8874824191258364635">有効なクレジット カード番号を入力してください</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb
index 841f480..b6bcc7c3 100644
--- a/components/strings/components_strings_kn.xtb
+++ b/components/strings/components_strings_kn.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">ಹೆಚ್ಚುವರಿ ವಿವರಗಳನ್ನು ಒದಗಿಸಿ</translation>
 <translation id="1021110881106174305">ಸ್ವೀಕೃತ ಕಾರ್ಡ್‌ಗಳು</translation>
 <translation id="1032854598605920125">ಪ್ರದಕ್ಷಿಣಾಕಾರದಲ್ಲಿ ತಿರುಗಿಸು</translation>
+<translation id="1035334672863811645">Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="1038842779957582377">ಆಜ್ಞಾತ ಹೆಸರು</translation>
 <translation id="1050038467049342496">ಇತರ ಅಪ್ಲಿಕೇಶನ್‍ಗಳನ್ನು ಮುಚ್ಚಿ</translation>
 <translation id="1055184225775184556">&amp;ಸೇರಿಸುವುದನ್ನು ರದ್ದುಗೊಳಿಸಿ</translation>
@@ -163,7 +164,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 ಸಲಹೆ}one{# ಸಲಹೆಗಳು}other{# ಸಲಹೆಗಳು}}</translation>
 <translation id="2079545284768500474">ರದ್ದುಮಾಡಿ</translation>
 <translation id="20817612488360358">ಸಿಸ್ಟಂ ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬಳಸಲು ಹೊಂದಿಸಲಾಗಿದೆ ಆದರೆ ಬಹಿರಂಗವಾದ ಪ್ರಾಕ್ಸಿ ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸಹ ನಿರ್ದಿಷ್ಟಪಡಿಸಲಾಗಿದೆ.</translation>
-<translation id="2084558088529668945">ನೀವು ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ಅನ್ನು <ph name="ORG_NAME" /> ನಿರ್ವಹಣೆ ಮಾಡದ ಸೈಟ್‌ನಲ್ಲಿ ನಮೂದಿಸಿದ್ದೀರಿ. ನಿಮ್ಮ ಖಾತೆಯನ್ನು ರಕ್ಷಿಸಲು, ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಮತ್ತು ಸೈಟ್‌ಗಳಲ್ಲಿ ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಬೇಡಿ.</translation>
 <translation id="2091887806945687916">ಶಬ್ಧ</translation>
 <translation id="2094505752054353250">ಡೊಮೇನ್ ಹೊಂದುತ್ತಿಲ್ಲ</translation>
 <translation id="2096368010154057602">ವಿಭಾಗ</translation>
@@ -453,7 +453,6 @@
 <translation id="4171400957073367226">ತಪ್ಪು ಪರಿಶೀಲನೆ ಸಹಿ</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> ಹೆಚ್ಚಿನ ಐಟಂ}one{<ph name="ITEM_COUNT" /> ಹೆಚ್ಚಿನ ಐಟಂಗಳು}other{<ph name="ITEM_COUNT" /> ಹೆಚ್ಚಿನ ಐಟಂಗಳು}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">ನೀವು ಇತರ ಸೈಟ್‌ಗಳಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದ್ದಲ್ಲಿ Chrome ನಿಮ್ಮ <ph name="ORG_NAME" /> ಪಾಸವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="4196861286325780578">&amp;ಸರಿಸುವುದನ್ನು ಮತ್ತೆಮಾಡು</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ಫೈರ್‌ವಾಲ್ ಮತ್ತು ಆಂಟಿವೈರಸ್ ಕಾನ್ಫಿಗರೇಶನ್‌‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">ವಿಫಲತೆಗಳು</translation>
@@ -581,6 +580,7 @@
 <translation id="5089810972385038852">ರಾಜ್ಯ</translation>
 <translation id="5094747076828555589">ಈ ಸರ್ವರ್ <ph name="DOMAIN" /> ಆಗಿದೆ ಎಂಬುದನ್ನು ಸಾಬೀತುಪಡಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ; ಅದರ ಸುರಕ್ಷತಾ ಪ್ರಮಾಣಪತ್ರವು Chromium ಮೂಲಕ ವಿಶ್ವಾಸಾರ್ಹವಾಗಿಲ್ಲ. ಇದು ತಪ್ಪು ಕಾನ್ಫಿಗರೇಶನ್‌ನಿಂದ ಅಥವಾ ಆಕ್ರಮಣಕಾರರು ನಿಮ್ಮ ಸಂಪರ್ಕದಲ್ಲಿ ಒಳನುಸುಳಿರುವುದರಿಂದ ಆಗಿರಬಹುದು.</translation>
 <translation id="5095208057601539847">ಪ್ರಾಂತ್ಯ</translation>
+<translation id="5098332213681597508">ಈ ಹೆಸರು ನಿಮ್ಮ Google ಖಾತೆಯಿಂದ ಬಂದಿದೆ.</translation>
 <translation id="5115563688576182185">(64-ಬಿಟ್)</translation>
 <translation id="5121084798328133320">ನೀವು ಖಚಿತಪಡಿಸಿದ ನಂತರ, ನಿಮ್ಮ Google ಪಾವತಿಗಳ ಖಾತೆಯಿಂದ ಕಾರ್ಡ್ ವಿವರಗಳನ್ನು ಈ ಸೈಟ್ ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತದೆ.</translation>
 <translation id="5128122789703661928">ಈ ಹೆಸರಿನ ಸೆಶನ್ ಅಳಿಸಲು ಮಾನ್ಯವಾಗಿಲ್ಲ.</translation>
@@ -665,6 +665,7 @@
 <translation id="5633066919399395251"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ನ ದಾಳಿಕೋರರು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ನಲ್ಲಿ ಮಾಹಿತಿಯನ್ನು (ಉದಾಹರಣೆಗೆ, ಫೋಟೋಗಳು, ಪಾಸ್‌ವರ್ಡ್‌ಗಳು ಮತ್ತು ಕ್ರೆಡಿಟ್ ಕಾರ್ಡ್ ಮಾಹಿತಿಗಳು) ಕದಿಯಲು ಇಲ್ಲವೇ ಅಳಿಸಲು ಅಪಾಯಕಾರಿ ಪ್ರೋಗ್ರಾಂಗಳನ್ನು ಸ್ಥಾಪಿಸಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರಬಹುದು. <ph name="BEGIN_LEARN_MORE_LINK" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">ವಂಚನೀಯ ವಿಷಯವನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation>
 <translation id="5659593005791499971">ಇಮೇಲ್</translation>
+<translation id="5666899935841546222">ನಿಮ್ಮ ಎಲ್ಲಾ ಕಾರ್ಡ್‌ಗಳನ್ನು ಒಂದೇ ಸ್ಥಳದಲ್ಲಿ ಹೊಂದಲು ನೀವು ಬಯಸುತ್ತೀರಾ?</translation>
 <translation id="5675650730144413517">ಈ ಪುಟ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿಲ್ಲ</translation>
 <translation id="5685654322157854305">ಶಿಪ್ಪಿಂಗ್ ವಿಳಾಸವನ್ನು ಸೇರಿಸಿ</translation>
 <translation id="5689199277474810259">JSON ಗೆ ರಫ್ತು ಮಾಡಿ</translation>
@@ -691,7 +692,6 @@
 <translation id="5869405914158311789">ಈ ಸೈಟ್ ತಲುಪಲಾಗುವುದಿಲ್ಲ</translation>
 <translation id="5869522115854928033">ಉಳಿಸಲಾದ ಪಾಸ್‌ವರ್ಡ್‌ಗಳು</translation>
 <translation id="5893752035575986141">ಕ್ರೆಡಿಟ್‌ ಕಾರ್ಡ್‌ಗಳನ್ನು ಸಮ್ಮತಿಸಲಾಗಿದೆ.</translation>
-<translation id="5898382028489516745">ನೀವು ಇತರ ಸೈಟ್‌ಗಳಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದ್ದಲ್ಲಿ Chromium ನಿಮ್ಮ <ph name="ORG_NAME" /> ಪಾಸವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ಸಿಂಕ್‌ ಮಾಡಲಾಗಿದೆ)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 ಬಳಕೆಯಲ್ಲಿದೆ}one{# ಬಳಕೆಯಲ್ಲಿದೆ}other{# ಬಳಕೆಯಲ್ಲಿದೆ}}</translation>
 <translation id="5939518447894949180">ಮರುಹೊಂದಿಸು</translation>
@@ -1033,6 +1033,7 @@
 <translation id="8553075262323480129">ಪುಟದ ಭಾಷೆಯನ್ನು ಗುರುತಿಸಲು ಅಸಾಧ್ಯವಾದ ಕಾರಣ ಭಾಷಾಂತರವು ವಿಫಲವಾಗಿದೆ.</translation>
 <translation id="8557066899867184262">ನಿಮ್ಮ ಕಾರ್ಡ್ ಹಿಂಬದಿಯಲ್ಲಿ CVC ಇರುತ್ತದೆ.</translation>
 <translation id="8559762987265718583"><ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ಗೆ ಖಾಸಗಿ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಏಕೆಂದರೆ ನಿಮ್ಮ ಸಾಧನದ ದಿನಾಂಕ ಮತ್ತು ಸಮಯ (<ph name="DATE_AND_TIME" />) ತಪ್ಪಾಗಿದೆ.</translation>
+<translation id="8564985650692024650">ನೀವು ಇತರ ಸೈಟ್‌ಗಳಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದ್ದಲ್ಲಿ ನಿಮ್ಮ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ಪಾಸವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು Chromium ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="8571890674111243710"><ph name="LANGUAGE" /> ಗೆ ಪುಟವನ್ನು ಭಾಷಾಂತರಿಸಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="858637041960032120">ಫೋನ್ ಸಂ. ಸೇರಿಸಿ
 </translation>
@@ -1062,6 +1063,7 @@
 <translation id="884264119367021077">ಶಿಪ್ಪಿಂಗ್‌ ವಿಳಾಸ</translation>
 <translation id="884923133447025588">ವಿಫಲವಾದ ಕಾರ್ಯತಂತ್ರ ಪತ್ತೆಯಾಗಿಲ್ಲ.</translation>
 <translation id="885730110891505394">Google ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳುವುದು</translation>
+<translation id="8858065207712248076">ನೀವು ಇತರ ಸೈಟ್‌ಗಳಲ್ಲಿ ಪಾಸ್‌ವರ್ಡ್‌ ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡಿದ್ದಲ್ಲಿ Chrome ನಿಮ್ಮ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ಪಾಸವರ್ಡ್ ಅನ್ನು ಮರುಹೊಂದಿಸಲು ಶಿಫಾರಸು ಮಾಡುತ್ತದೆ.</translation>
 <translation id="8866481888320382733">ನೀತಿಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಪಾಸ್ ಮಾಡುವಲ್ಲಿ ದೋಷ</translation>
 <translation id="8870413625673593573">ಇತ್ತೀಚೆಗೆ ಮುಚ್ಚಿರುವುದು</translation>
 <translation id="8874824191258364635">ಮಾನ್ಯವಾದ ಕಾರ್ಡ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb
index 4693c8d..67e3f91 100644
--- a/components/strings/components_strings_ko.xtb
+++ b/components/strings/components_strings_ko.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">추가 세부정보 제공</translation>
 <translation id="1021110881106174305">사용할 수 있는 카드</translation>
 <translation id="1032854598605920125">시계 방향으로 회전</translation>
+<translation id="1035334672863811645">Chrome에 로그인</translation>
 <translation id="1038842779957582377">알 수 없는 이름</translation>
 <translation id="1050038467049342496">다른 앱 닫기</translation>
 <translation id="1055184225775184556">추가 실행 취소(&amp;U)</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{제안 1개}other{제안 #개}}</translation>
 <translation id="2079545284768500474">실행취소</translation>
 <translation id="20817612488360358">시스템 프록시 설정이 사용하도록 설정되었지만 명시적 프록시 설정도 지정되어 있습니다.</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" />에서 관리하지 않는 사이트에 내 비밀번호를 입력했습니다. 다른 앱과 사이트에서 비밀번호를 재사용하면 계정을 안전하게 보호할 수 없습니다.</translation>
 <translation id="2091887806945687916">소리</translation>
 <translation id="2094505752054353250">도메인이 일치하지 않음</translation>
 <translation id="2096368010154057602">자치구</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">잘못된 인증 서명입니다.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{그 외 <ph name="ITEM_COUNT" />개 항목}other{그 외 <ph name="ITEM_COUNT" />개 항목}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">다른 사이트에서 비밀번호를 재사용했다면 <ph name="ORG_NAME" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="4196861286325780578">이동 다시 실행(&amp;R)</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />방화벽 및 바이러스 백신 소프트웨어 설정 확인<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">비정상 종료</translation>
@@ -696,7 +695,6 @@
 <translation id="5869405914158311789">사이트에 연결할 수 없음</translation>
 <translation id="5869522115854928033">저장된 비밀번호</translation>
 <translation id="5893752035575986141">신용카드를 사용할 수 있습니다.</translation>
-<translation id="5898382028489516745">다른 사이트에서 비밀번호를 재사용했다면 <ph name="ORG_NAME" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(동기화됨)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1개 사용 중}other{#개 사용 중}}</translation>
 <translation id="5939518447894949180">초기화</translation>
@@ -1039,6 +1037,7 @@
 <translation id="8553075262323480129">페이지의 언어를 결정할 수 없으므로 번역하지 못했습니다.</translation>
 <translation id="8557066899867184262">CVC는 카드 뒷면에 있습니다.</translation>
 <translation id="8559762987265718583">기기의 날짜와 시간(<ph name="DATE_AND_TIME" />)이 잘못되어 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />에 대한 비공개 연결을 설정할 수 없습니다.</translation>
+<translation id="8564985650692024650">다른 사이트에서 비밀번호를 재사용했다면 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="8571890674111243710">페이지를 <ph name="LANGUAGE" />(으)로 번역 중...</translation>
 <translation id="858637041960032120">번호 추가</translation>
 <translation id="859285277496340001">인증서는 취소 여부를 확인하는 매커니즘을 지정하지 않습니다.</translation>
@@ -1067,6 +1066,7 @@
 <translation id="884264119367021077">배송지 주소</translation>
 <translation id="884923133447025588">폐기 매커니즘을 찾을 수 없습니다.</translation>
 <translation id="885730110891505394">Google과 공유</translation>
+<translation id="8858065207712248076">다른 사이트에서 비밀번호를 재사용했다면 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 비밀번호를 재설정하는 것이 좋습니다.</translation>
 <translation id="8866481888320382733">정책 설정을 파싱하는 중 오류 발생</translation>
 <translation id="8870413625673593573">최근에 닫은 탭</translation>
 <translation id="8874824191258364635">올바른 카드 번호를 입력하세요.</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb
index 5fac0b0..53ef677 100644
--- a/components/strings/components_strings_lt.xtb
+++ b/components/strings/components_strings_lt.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Pateikti papildomos išsamios informacijos</translation>
 <translation id="1021110881106174305">Tinkamos kortelės</translation>
 <translation id="1032854598605920125">Pasukti pagal laikrodžio rodyklę</translation>
+<translation id="1035334672863811645">prisijunkite prie „Chrome“</translation>
 <translation id="1038842779957582377">nežinomas pavadinimas</translation>
 <translation id="1050038467049342496">Uždarykite kitas programas</translation>
 <translation id="1055184225775184556">&amp;Anuliuoti pridėjimą</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 pasiūlymas}one{# pasiūlymas}few{# pasiūlymai}many{# pasiūlymo}other{# pasiūlymų}}</translation>
 <translation id="2079545284768500474">Anuliuoti</translation>
 <translation id="20817612488360358">Sistemos įgaliotojo serverio nustatymai nustatyti kaip naudotini, bet taip pat nurodyta tiksli įgaliotojo serverio konfigūracija.</translation>
-<translation id="2084558088529668945">Įvedėte slaptažodį svetainėje, kurios netvarko „<ph name="ORG_NAME" />“. Kad apsaugotumėte paskyrą, nenaudokite to paties slaptažodžio kitose programose ir svetainėse.</translation>
 <translation id="2091887806945687916">Garsas</translation>
 <translation id="2094505752054353250">Domeno neatitikimas</translation>
 <translation id="2096368010154057602">Departamentas</translation>
@@ -458,7 +458,6 @@
 <translation id="4171400957073367226">Netinkamas patvirtinimo parašas</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Dar <ph name="ITEM_COUNT" /> elementas}one{Dar <ph name="ITEM_COUNT" /> elementas}few{Dar <ph name="ITEM_COUNT" /> elementai}many{Dar <ph name="ITEM_COUNT" /> elemento}other{Dar <ph name="ITEM_COUNT" /> elementų}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">„Chrome“ rekomenduoja iš naujo nustatyti „<ph name="ORG_NAME" />“ slaptažodį, jei naudojate jį kitose svetainėse.</translation>
 <translation id="4196861286325780578">&amp;Perkelti dar kartą</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Patikrinti užkardos ir antivirusinės sistemos konfigūracijas<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Gedimai</translation>
@@ -586,6 +585,7 @@
 <translation id="5089810972385038852">Valstija</translation>
 <translation id="5094747076828555589">Šiam serveriui nepavyko patvirtinti, kad tai yra <ph name="DOMAIN" />; jo saugos sertifikatas nėra patikimas „Chromium“. Taip gali nutikti dėl netinkamos konfigūracijos ar dėl ryšį pertraukusio užgrobėjo.</translation>
 <translation id="5095208057601539847">Provincija</translation>
+<translation id="5098332213681597508">Šis vardas yra iš jūsų „Google“ paskyros.</translation>
 <translation id="5115563688576182185">(64 bitų)</translation>
 <translation id="5121084798328133320">Kai patvirtinsite, „Google“ mokamojoje paskyroje nurodyta išsami kortelės informacija bus bendrinama su šia svetaine.</translation>
 <translation id="5128122789703661928">Sesijos šiuo pavadinimu negalima ištrinti.</translation>
@@ -671,6 +671,7 @@
 <translation id="5633066919399395251">Šiuo metu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> užpuolikai gali jūsų kompiuteryje bandyti įdiegti pavojingas programas, kurios vagia arba ištrina informaciją (pvz., nuotraukas, slaptažodžius, pranešimus ir kredito kortelių duomenis). <ph name="BEGIN_LEARN_MORE_LINK" />Sužinokite daugiau<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Klaidinantis turinys užblokuotas.</translation>
 <translation id="5659593005791499971">El. paštas</translation>
+<translation id="5666899935841546222">Ar norite visas korteles matyti vienoje vietoje?</translation>
 <translation id="5675650730144413517">Šis puslapis neveikia</translation>
 <translation id="5685654322157854305">Pridėti pristatymo adresą</translation>
 <translation id="5689199277474810259">Eksportuoti kaip JSON</translation>
@@ -697,7 +698,6 @@
 <translation id="5869405914158311789">Nepavyksta pasiekti šios svetainės</translation>
 <translation id="5869522115854928033">Išsaugoti slaptažodžiai</translation>
 <translation id="5893752035575986141">Kredito kortelės tinkamos.</translation>
-<translation id="5898382028489516745">„Chromium“ rekomenduoja iš naujo nustatyti „<ph name="ORG_NAME" />“ slaptažodį, jei naudojate jį kitose svetainėse.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinchronizuota)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Naudojamas 1 slapukas}one{Naudojamas # slapukas}few{Naudojami # slapukai}many{Naudojama # slapuko}other{Naudojama # slapukų}}</translation>
 <translation id="5939518447894949180">Nustatyti iš naujo</translation>
@@ -1041,6 +1041,7 @@
 <translation id="8553075262323480129">Išversti negalima, nes nepavyko nustatyti puslapio kalbos.</translation>
 <translation id="8557066899867184262">Kortelės saugos kodas (CVC) nurodytas kitoje kortelės pusėje.</translation>
 <translation id="8559762987265718583">Nepavyksta užmegzti privataus ryšio su <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, nes įrenginio data ir laikas (<ph name="DATE_AND_TIME" />) yra netinkami.</translation>
+<translation id="8564985650692024650">„Chromium“ rekomenduoja iš naujo nustatyti <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> slaptažodį, jei naudojate jį kitose svetainėse.</translation>
 <translation id="8571890674111243710">Puslapis verčiamas į <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Pridėti tel. nr.
 </translation>
@@ -1070,6 +1071,7 @@
 <translation id="884264119367021077">Siuntimo adresas</translation>
 <translation id="884923133447025588">Nerasta atšaukimo mechanizmo.</translation>
 <translation id="885730110891505394">Bendrinimas su „Google“</translation>
+<translation id="8858065207712248076">„Chrome“ rekomenduoja iš naujo nustatyti <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> slaptažodį, jei naudojate jį kitose svetainėse.</translation>
 <translation id="8866481888320382733">Analizuojant politikos nustatymus įvyko klaida</translation>
 <translation id="8870413625673593573">Neseniai uždaryta</translation>
 <translation id="8874824191258364635">Įveskite tinkamą kortelės numerį</translation>
diff --git a/components/strings/components_strings_lv.xtb b/components/strings/components_strings_lv.xtb
index 20a5926c..9d3be7f 100644
--- a/components/strings/components_strings_lv.xtb
+++ b/components/strings/components_strings_lv.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Sniegt papildu informāciju</translation>
 <translation id="1021110881106174305">Pieņemtās kartes</translation>
 <translation id="1032854598605920125">Pagriezt pulksteņrādītāju kustības virzienā</translation>
+<translation id="1035334672863811645">pierakstieties pārlūkā Chrome</translation>
 <translation id="1038842779957582377">nezināms nosaukums</translation>
 <translation id="1050038467049342496">Aizveriet citas lietotnes</translation>
 <translation id="1055184225775184556">&amp;Pievienošanas atsaukšana</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 ieteikums}zero{# ieteikumi}one{# ieteikums}other{# ieteikumi}}</translation>
 <translation id="2079545284768500474">Atsaukt</translation>
 <translation id="20817612488360358">Ir iestatīta datora starpniekserveru iestatījumu lietošana, bet ir norādīta arī atklāta starpniekservera konfigurācija.</translation>
-<translation id="2084558088529668945">Jūs ievadījāt paroli vietnē, kuru nepārvalda <ph name="ORG_NAME" />. Lai aizsargātu savu kontu, neizmantojiet šo paroli citās lietotnēs un vietnēs.</translation>
 <translation id="2091887806945687916">Signāls</translation>
 <translation id="2094505752054353250">Domēni nesaskan</translation>
 <translation id="2096368010154057602">Departaments</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">Verifikācijas paraksts nav derīgs.</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Vēl <ph name="ITEM_COUNT" /> vienums}zero{Vēl <ph name="ITEM_COUNT" /> vienumi}one{Vēl <ph name="ITEM_COUNT" /> vienums}other{Vēl <ph name="ITEM_COUNT" /> vienumi}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome iesaka atiestatīt jūsu <ph name="ORG_NAME" /> paroli, ja tā tiek izmantota citās vietnēs.</translation>
 <translation id="4196861286325780578">&amp;Atcelt pārvietošanas atsaukšanu</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Pārbaudiet ugunsmūri un pretvīrusu programmu konfigurācijas<ph name="END_LINK" />.</translation>
 <translation id="4220128509585149162">Avārijas</translation>
@@ -584,6 +583,7 @@
 <translation id="5089810972385038852">Štats</translation>
 <translation id="5094747076828555589">Šis serveris nevarēja pierādīt, ka šī ir vietne <ph name="DOMAIN" />; tās drošības sertifikāts netiek uzskatīts par uzticamu Chromium sistēmā. Iespējams, tas ir nepareizas konfigurācijas dēļ vai arī kāds ir ļaunprātīgi izmantojis jūsu savienojumu.</translation>
 <translation id="5095208057601539847">Province</translation>
+<translation id="5098332213681597508">Šis vārds ir iegūts no jūsu Google konta.</translation>
 <translation id="5115563688576182185">(64 bitu)</translation>
 <translation id="5121084798328133320">Pēc apstiprināšanas kartes informācija no Google maksājumu konta tiks kopīgota ar šo vietni.</translation>
 <translation id="5128122789703661928">Sesija ar šādu nosaukumu nav dzēšama.</translation>
@@ -669,6 +669,7 @@
 <translation id="5633066919399395251">Uzbrucēji vietnē <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> var mēģināt jūsu datorā instalēt bīstamas programmas, kas zog vai izdzēš informāciju (piemēram, fotoattēlus, paroles, ziņojumus un kredītkaršu datus). <ph name="BEGIN_LEARN_MORE_LINK" />Uzziniet vairāk<ph name="END_LEARN_MORE_LINK" />.</translation>
 <translation id="563324245173044180">Bloķēts maldinošs saturs</translation>
 <translation id="5659593005791499971">E-pasts</translation>
+<translation id="5666899935841546222">Vai vēlaties piekļūt visām kartēm vienuviet?</translation>
 <translation id="5675650730144413517">Šī lapa nedarbojas</translation>
 <translation id="5685654322157854305">Pievienot nosūtīšanas adresi</translation>
 <translation id="5689199277474810259">Eksportēt JSON formātā</translation>
@@ -695,7 +696,6 @@
 <translation id="5869405914158311789">Šī vietne nav sasniedzama</translation>
 <translation id="5869522115854928033">Saglabātās paroles</translation>
 <translation id="5893752035575986141">Tiek pieņemtas kredītkartes.</translation>
-<translation id="5898382028489516745">Chromium iesaka atiestatīt jūsu <ph name="ORG_NAME" /> paroli, ja izmantojāt to citās vietnēs.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (veikta sinhronizācija)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 tiek lietots}zero{# tiek lietoti}one{# tiek lietots}other{# tiek lietoti}}</translation>
 <translation id="5939518447894949180">Atiestatīt</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">Tulkošana neizdevās, jo lapas valoda nav nosakāma.</translation>
 <translation id="8557066899867184262">CVC kods ir norādīts jūsu kartes aizmugurē.</translation>
 <translation id="8559762987265718583">Nevar izveidot privātu savienojumu ar <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, jo jūsu ierīces datums un laiks (<ph name="DATE_AND_TIME" />) nav pareizs.</translation>
+<translation id="8564985650692024650">Chromium iesaka atiestatīt jūsu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> paroli, ja izmantojāt to citās vietnēs.</translation>
 <translation id="8571890674111243710">Notiek lapas tulkošana uz <ph name="LANGUAGE" /> valodu...</translation>
 <translation id="858637041960032120">Piev. tālr. nr.
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Piegādes adrese</translation>
 <translation id="884923133447025588">Nav atrasts atsaukšanas mehānisms.</translation>
 <translation id="885730110891505394">Kopīgošana ar Google</translation>
+<translation id="8858065207712248076">Chrome iesaka atiestatīt jūsu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> paroli, ja izmantojāt to citās vietnēs.</translation>
 <translation id="8866481888320382733">Parsējot politikas iestatījumus, radās kļūda.</translation>
 <translation id="8870413625673593573">Nesen aizvērtas</translation>
 <translation id="8874824191258364635">Ievadiet derīgu kartes numuru</translation>
diff --git a/components/strings/components_strings_ml.xtb b/components/strings/components_strings_ml.xtb
index d9a8611..a60241a 100644
--- a/components/strings/components_strings_ml.xtb
+++ b/components/strings/components_strings_ml.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">കൂടുതൽ വിശദാംശങ്ങൾ നൽകുക</translation>
 <translation id="1021110881106174305">സ്വീകരിച്ച കാർഡുകൾ</translation>
 <translation id="1032854598605920125">ഘടികാരദിശയിൽ‌ തിരിക്കുക</translation>
+<translation id="1035334672863811645">Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="1038842779957582377">അജ്ഞാത നാമം</translation>
 <translation id="1050038467049342496">മറ്റ് ആപ്പുകൾ അടയ്‌ക്കുക</translation>
 <translation id="1055184225775184556">&amp;ചേർക്കുന്നത് പഴയപടിയാക്കുക</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{ഒരു നിർദ്ദേശം}other{# നിർദ്ദേശങ്ങൾ}}</translation>
 <translation id="2079545284768500474">പഴയപടിയാക്കുക</translation>
 <translation id="20817612488360358">സിസ്റ്റം പ്രോക്‌സി ക്രമീകരണം ഉപയോഗിക്കുന്നതിനായി സജ്ജമാക്കി, പക്ഷെ ഒരു സ്‌പഷ്‌ടമായ പ്രോക്‌സി കോൺഫിഗറേഷനും അതോടൊപ്പം നിർദ്ദേശിച്ചിരിക്കുന്നു.</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" /> നിയന്ത്രിക്കാത്ത ഒരു സൈറ്റിലാണ് നിങ്ങൾ പാസ്‌വേഡ് നൽകിയിരിക്കുന്നത്. അക്കൗണ്ട് പരിരക്ഷിക്കാൻ, മറ്റ് ആപ്പുകളിലും സൈറ്റുകളിലും നിങ്ങളുടെ പാസ്‌വേഡ് വീണ്ടും ഉപയോഗിക്കരുത്.</translation>
 <translation id="2091887806945687916">ശബ്‌ദം</translation>
 <translation id="2094505752054353250">ഡൊമെയ്‌ൻ പൊരുത്തമില്ലായ്‌മ</translation>
 <translation id="2096368010154057602">വകുപ്പ്</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">മോശം പരിശോധിച്ചുറപ്പിക്കൽ സിഗ്‌നേച്ചർ</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> ഇനം കൂടി}other{<ph name="ITEM_COUNT" /> ഇനങ്ങൾ കൂടി}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">മറ്റ് സൈറ്റുകളിൽ നിങ്ങളുടെ <ph name="ORG_NAME" /> പാസ്‌വേഡ് വീണ്ടും ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, അത് റീസെറ്റ് ചെയ്യാൻ Chrome ശുപാർശ ചെയ്യുന്നു.</translation>
 <translation id="4196861286325780578">&amp;നീക്കുന്നത് വീണ്ടും ചെയ്യുക</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ഫയർവാളും ആന്റിവൈറസ് കോൺഫിഗറേഷനുകളും പരിശോധിക്കുന്നു<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">ക്രാഷുകള്‍</translation>
@@ -584,6 +583,7 @@
 <translation id="5089810972385038852">സ്റ്റേറ്റ്</translation>
 <translation id="5094747076828555589">ഈ സെർവറിന് അത് <ph name="DOMAIN" /> ആണെന്ന് തെളിയിക്കാനായില്ല; അതിന്റെ സുരക്ഷ സർട്ടിഫിക്കറ്റിനെ Chromium-ത്തിന്ന് പരിചയമില്ല. തെറ്റായ കോൺഫിഗറേഷൻ കാരണമോ ഒരു അക്രമണകാരി നിങ്ങളുടെ കണക്ഷനെ തടസ്സപ്പെടുത്തുന്നത് കൊണ്ടോ ആയിരിക്കാം ഇത് സംഭവിച്ചത്.</translation>
 <translation id="5095208057601539847">പ്രവിശ്യ</translation>
+<translation id="5098332213681597508">ഈ പേര് നിങ്ങളുടെ Google അക്കൗണ്ടിൽ നിന്നുള്ളതാണ്.</translation>
 <translation id="5115563688576182185">(64-ബിറ്റ്)</translation>
 <translation id="5121084798328133320">സ്ഥിരീകരിച്ച് കഴിഞ്ഞാൽ, നിങ്ങളുടെ Google പേയ്‌മെന്‍റ് അക്കൗണ്ടിൽ നിന്നുള്ള കാർഡ് വിശദാംശങ്ങൾ ഈ സൈറ്റുമായി പങ്കിടും.</translation>
 <translation id="5128122789703661928">സെഷന്‍റെ പേര് തെറ്റായതിനാൽ ഇല്ലാതാക്കാനായില്ല.</translation>
@@ -669,6 +669,7 @@
 <translation id="5633066919399395251"><ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> എന്ന സൈറ്റിലെ നിലവിലുള്ള ആക്രമികൾ നിങ്ങളുടെ വിവരങ്ങൾ മോഷ്‌ടിക്കാനോ ഇല്ലാതാക്കാനോ ഇടയുള്ള (ഉദാഹരണത്തിന്, ഫോട്ടോകൾ, പാസ്‌വേഡുകൾ, സന്ദേശങ്ങൾ, ക്രെഡിറ്റ് കാർഡുകൾ എന്നിവ) അപകടകരമായ പ്രോഗ്രാമുകൾ കമ്പ്യൂട്ടറിൽ ഇൻസ്‌റ്റാൾ ചെയ്യാൻ ശ്രമിച്ചേക്കാം. <ph name="BEGIN_LEARN_MORE_LINK" />കൂടുതലറിയുക<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">തെറ്റിദ്ധരിപ്പിക്കുന്ന ഉള്ളടക്കം ബ്ലോക്കുചെയ്‌തു.</translation>
 <translation id="5659593005791499971">ഇമെയില്‍</translation>
+<translation id="5666899935841546222">എല്ലാ കാർഡുകളും നിങ്ങൾക്ക് ഒരു സ്ഥലത്ത് സൂക്ഷിക്കണോ?</translation>
 <translation id="5675650730144413517">ഈ പേജ് പ്രവർത്തിക്കുന്നില്ല</translation>
 <translation id="5685654322157854305">ഷിപ്പിംഗ് വിലാസം ചേർക്കുക</translation>
 <translation id="5689199277474810259">JSON-ലേക്ക് ‌എക്‌സ്‌പോർട്ട് ചെയ്യുക</translation>
@@ -695,7 +696,6 @@
 <translation id="5869405914158311789">ഈ സൈറ്റ് ലഭ്യമാക്കാനാകുന്നില്ല</translation>
 <translation id="5869522115854928033">സംരക്ഷിച്ച പാസ്‌വേഡുകള്‍</translation>
 <translation id="5893752035575986141">ക്രെഡിറ്റ് കാർഡുകൾ സ്വീകരിക്കുന്നു.</translation>
-<translation id="5898382028489516745">മറ്റ് സൈറ്റുകളിൽ നിങ്ങളുടെ <ph name="ORG_NAME" /> പാസ്‌വേഡ് വീണ്ടും ഉപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, അത് റീസെറ്റ് ചെയ്യാൻ Chromium ശുപാർശ ചെയ്യുന്നു.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (സമന്വയിപ്പിച്ചത്)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ഒരെണ്ണം ഉപയോഗത്തിലുണ്ട്}other{# എണ്ണം ഉപയോഗത്തിലുണ്ട്}}</translation>
 <translation id="5939518447894949180">വീണ്ടും സജ്ജീകരിക്കുക</translation>
@@ -1037,6 +1037,7 @@
 <translation id="8553075262323480129">പേജിന്‍റെ ഭാഷ നിര്‍‌ണ്ണയിക്കാന്‍‌ കഴിയാത്തതിനാല്‍‌ വിവര്‍‌ത്തനം പരാജയപ്പെട്ടു.</translation>
 <translation id="8557066899867184262">കാർഡിന് പിന്നിലാണ് CVC രേഖപ്പെടുത്തിയിരിക്കുന്നത്.</translation>
 <translation id="8559762987265718583">നിങ്ങളുടെ ഉപകരണത്തിന്റെ തീയതിയും സമയവും (<ph name="DATE_AND_TIME" />) തെറ്റായതിനാൽ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> എന്നതിലേക്കുള്ള സ്വകാര്യ കണക്ഷൻ സ്ഥാപിക്കാനാവില്ല.</translation>
+<translation id="8564985650692024650">മറ്റ് സൈറ്റുകളിൽ നിങ്ങൾ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> പാസ്‌വേഡ് പുനരുപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, അത് റീസെറ്റ് ചെയ്യാൻ Chromium ശുപാർ‌ശ ചെയ്യുന്നു.</translation>
 <translation id="8571890674111243710"><ph name="LANGUAGE" /> ലേക്ക് പേജ് വിവര്‍‌ത്തനം ചെയ്യുന്നു...</translation>
 <translation id="858637041960032120">ഫോൺ നം. ചേർക്കൂ
 </translation>
@@ -1066,6 +1067,7 @@
 <translation id="884264119367021077">ഷിപ്പിംഗ് വിലാസം</translation>
 <translation id="884923133447025588">അസാധുവാക്കല്‍ പ്രവര്‍ത്തനം കണ്ടെത്തിയിട്ടില്ല.</translation>
 <translation id="885730110891505394">Google-മായി പങ്കിടുന്നു</translation>
+<translation id="8858065207712248076">മറ്റ് സൈറ്റുകളിൽ നിങ്ങൾ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> പാസ്‌വേഡ് പുനരുപയോഗിച്ചിട്ടുണ്ടെങ്കിൽ, അത് പുനഃസജ്ജീകരിക്കാൻ Chrome ശുപാർ‌ശ ചെയ്യുന്നു.</translation>
 <translation id="8866481888320382733">നയ ക്രമീകരണങ്ങൾ പാഴ്‌സുചെയ്യുന്നതിൽ പിശക്</translation>
 <translation id="8870413625673593573">സമീപകാലത്ത് അടച്ചവ</translation>
 <translation id="8874824191258364635">ശരിയായ കാർഡ് നമ്പർ നൽകുക</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 8082262..0fb9f41 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">अतिरिक्त तपशील प्रदान करा</translation>
 <translation id="1021110881106174305">स्वीकारलेली कार्ड</translation>
 <translation id="1032854598605920125">घड्याळाच्या दिशेने फिरवा</translation>
+<translation id="1035334672863811645">Chrome मध्ये साइन इन करा</translation>
 <translation id="1038842779957582377">अज्ञात नाव</translation>
 <translation id="1050038467049342496">अन्य अॅप्स बंद करा</translation>
 <translation id="1055184225775184556">&amp;जोडा पूर्ववत करा</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 सूचना}one{# सूचना}other{# सूचना}}</translation>
 <translation id="2079545284768500474">पूर्ववत करा</translation>
 <translation id="20817612488360358">सिस्टम प्रॉक्सी सेटिंग्ज वापरण्‍यास सेट करण्‍यात आल्या परंतु एक सुस्पष्‍ट प्रॉक्सी कॉन्फिगरेशन देखील निर्दिष्‍ट करण्‍यात आले.</translation>
-<translation id="2084558088529668945">तुम्ही साइटवर एंटर केलेला पासवर्ड <ph name="ORG_NAME" /> ने व्यवस्थापित केलेला नाही. तुमचा पासवर्ड संरक्षित करण्यासाठी, अन्य अ‍ॅप्स आणि साइटवर तुमचा पासवर्ड पुन्हा वापरू नका.</translation>
 <translation id="2091887806945687916">ध्वनी</translation>
 <translation id="2094505752054353250">डोमेन जुळत नाही</translation>
 <translation id="2096368010154057602">विभाग</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">खराब पडताळणी स्वाक्षरी</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{आणखी <ph name="ITEM_COUNT" /> आयटम}one{आणखी <ph name="ITEM_COUNT" /> आयटम}other{आणखी <ph name="ITEM_COUNT" /> आयटम}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">अन्य साइटवर तुमचा <ph name="ORG_NAME" /> पासवर्ड पुन्हा वापरल्यास Chrome तो रीसेट करण्याची शिफारस करतो.</translation>
 <translation id="4196861286325780578">&amp;हलवा पुन्हा करा</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />फायरवॉल आणि अँटीव्हायरस कॉन्फिगरेशन तपासणे<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">क्रॅश होते</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">राज्य</translation>
 <translation id="5094747076828555589">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र Chromium द्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने आपले कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
 <translation id="5095208057601539847">प्रांत</translation>
+<translation id="5098332213681597508">हे नाव तुमच्या Google खात्यावरून आहे.</translation>
 <translation id="5115563688576182185">(64-बिट)</translation>
 <translation id="5121084798328133320">तुम्ही निश्चित केल्यानंतर, तुमच्या Google पेमेंट खात्यावरील कार्ड तपशील या साइटसोबत शेअर केले जातील.</translation>
 <translation id="5128122789703661928">हे नाव असलेले सेशन हटवण्यासाठी वैध नाही.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">सध्या <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> वर असलेले हल्लेखोर कदाचित तुमच्या काँप्युटरमधील तुमची माहिती चोरू किंवा हटवू शकणारे धोकादायक प्रोग्राम (उदाहरणार्थ, फोटो, पासवर्ड, संदेश आणि क्रेडिट कार्डे) इंस्टॉल करण्याचा प्रयत्न करू शकतील. <ph name="BEGIN_LEARN_MORE_LINK" />आणखी जाणून घ्या<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">फसवणारा आशय ब्लॉक केला.</translation>
 <translation id="5659593005791499971">ईमेल</translation>
+<translation id="5666899935841546222">तुम्हाला तुमची सर्व कार्डे एका ठिकाणी हवी आहेत का?</translation>
 <translation id="5675650730144413517">हे पृष्ठ कार्य करीत नाही</translation>
 <translation id="5685654322157854305">पाठवण्याचा पत्ता जोडा</translation>
 <translation id="5689199277474810259">JSON वर निर्यात करा</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">या साइटवर पोहचणे शक्य नाही</translation>
 <translation id="5869522115854928033">सेव्ह केलेले पासवर्ड</translation>
 <translation id="5893752035575986141">क्रेडिट कार्डे स्वीकारली जातात.</translation>
-<translation id="5898382028489516745">अन्य साइटवर तुमचा <ph name="ORG_NAME" /> पासवर्ड पुन्हा वापरल्यास Chromium तो रीसेट करण्याची शिफारस करतो.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (सिंक केलेले)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 वापरात आहे}one{# वापरात आहे}other{# वापरात आहेत}}</translation>
 <translation id="5939518447894949180">रीसेट करा</translation>
@@ -1041,6 +1041,7 @@
 <translation id="8553075262323480129">भाषांतर करण्यात अयशस्वी कारण पृष्ठाची भाषा निर्धारित करणे शक्य नाही.</translation>
 <translation id="8557066899867184262">CVV तुमच्या कार्डाच्या मागील बाजूस दिलेला असतो.</translation>
 <translation id="8559762987265718583">आपल्या डिव्हाइसची तारीख आणि वेळ (<ph name="DATE_AND_TIME" />) चुकीची असल्याने <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> सह खाजगी कनेक्शन इंस्टॉल केले जाऊ शकले नाही.</translation>
+<translation id="8564985650692024650">जर तुम्ही तुमच्या <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्डचा इतर साइटवर पुन्हा वापर केला असेल तर Chromium तुम्हाला तो रीसेट करण्याची शिफारस करतो.</translation>
 <translation id="8571890674111243710"><ph name="LANGUAGE" /> मध्ये पृष्ठ अनुवादित करत आहे...</translation>
 <translation id="858637041960032120">फोन नंबर जोडा</translation>
 <translation id="859285277496340001">प्रमाणपत्र निरस्त झाले आहे किंवा नाही हे तपासण्यासाठी प्रणाली निर्दिष्ट करत नाही.</translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">वहनावळ पत्ता</translation>
 <translation id="884923133447025588">कोणतीही निरस्त करण्याची प्रणाली आढळली नाही.</translation>
 <translation id="885730110891505394">Google सह सामायिकरण</translation>
+<translation id="8858065207712248076">जर तुम्ही तुमच्या <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> पासवर्डचा इतर साइटवर पुन्हा वापर केला असेल तर Chrome तुम्हाला तो रीसेट करण्याची शिफारस करतो.</translation>
 <translation id="8866481888320382733">धोरण सेटिंग्ज विश्लेषित करताना एरर</translation>
 <translation id="8870413625673593573">अलीकडे बंद</translation>
 <translation id="8874824191258364635">वैध कार्ड नंबर एंटर करा</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb
index 4d962db..4cd12a7 100644
--- a/components/strings/components_strings_ms.xtb
+++ b/components/strings/components_strings_ms.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Berikan butiran tambahan</translation>
 <translation id="1021110881106174305">Kad diterima</translation>
 <translation id="1032854598605920125">Putar ikut arah jam</translation>
+<translation id="1035334672863811645">log masuk ke Chrome</translation>
 <translation id="1038842779957582377">nama tidak diketahui</translation>
 <translation id="1050038467049342496">Tutup apl lain</translation>
 <translation id="1055184225775184556">&amp;Buat Asal Tambahkan</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 cadangan}other{# cadangan}}</translation>
 <translation id="2079545284768500474">Buat asal</translation>
 <translation id="20817612488360358">Tetapan proksi sistem telah sedia untuk digunakan tetapi konfigurasi proksi jelas juga telah ditentukan.</translation>
-<translation id="2084558088529668945">Anda memasukkan kata laluan pada tapak yang tidak diurus oleh <ph name="ORG_NAME" />. Untuk melindungi akaun anda, jangan gunakan semula kata laluan pada apl dan tapak lain.</translation>
 <translation id="2091887806945687916">Bunyi</translation>
 <translation id="2094505752054353250">Domain tidak padan</translation>
 <translation id="2096368010154057602">Jabatan</translation>
@@ -458,7 +458,6 @@
 <translation id="4171400957073367226">Tandatangan pengesahan tidak sah</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> lagi item}other{<ph name="ITEM_COUNT" /> lagi item}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome mengesyorkan anda supaya menetapkan semula kata laluan <ph name="ORG_NAME" /> jika anda menggunakan kata laluan itu semula pada tapak lain.</translation>
 <translation id="4196861286325780578">&amp;Buat semula pindahkan</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Menyemak konfigurasi tembok api dan antivirus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Nahas</translation>
@@ -586,6 +585,7 @@
 <translation id="5089810972385038852">Negeri</translation>
 <translation id="5094747076828555589">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya tidak dipercayai oleh Chromium. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation>
 <translation id="5095208057601539847">Wilayah</translation>
+<translation id="5098332213681597508">Nama ini daripada Akaun Google anda.</translation>
 <translation id="5115563688576182185">(64-bit)</translation>
 <translation id="5121084798328133320">Setelah anda mengesahkan, butiran kad daripada akaun Google Payments anda akan dikongsi dengan tapak ini.</translation>
 <translation id="5128122789703661928">Sesi dengan nama ini tidak sah untuk pemadaman.</translation>
@@ -671,6 +671,7 @@
 <translation id="5633066919399395251">Penyerang yang sedang berada di <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mungkin cuba memasang atur cara berbahaya pada komputer anda. Atur cara tersebut boleh mencuri atau memadamkan maklumat anda (contohnya, foto, kata laluan, mesej dan kad kredit). <ph name="BEGIN_LEARN_MORE_LINK" />Ketahui lebih lanjut<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Kandungan mengelirukan disekat.</translation>
 <translation id="5659593005791499971">E-mel</translation>
+<translation id="5666899935841546222">Adakah anda mahu mendapatkan semua kad anda di satu tempat?</translation>
 <translation id="5675650730144413517">Halaman ini tidak berfungsi</translation>
 <translation id="5685654322157854305">Tambahkan Alamat Penghantaran</translation>
 <translation id="5689199277474810259">Eksport ke JSON</translation>
@@ -697,7 +698,6 @@
 <translation id="5869405914158311789">Tapak ini tidak dapat dicapai</translation>
 <translation id="5869522115854928033">Kata laluan disimpan</translation>
 <translation id="5893752035575986141">Kad kredit diterima.</translation>
-<translation id="5898382028489516745">Chromium mengesyorkan anda supaya menetapkan semula kata laluan <ph name="ORG_NAME" /> jika anda menggunakan kata laluan itu semula pada tapak lain.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (disegerakkan)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 sedang digunakan}other{# sedang digunakan}}</translation>
 <translation id="5939518447894949180">Tetapkan semula</translation>
@@ -1041,6 +1041,7 @@
 <translation id="8553075262323480129">Gagal terjemahan kerana bahasa halaman tidak dapat ditentukan.</translation>
 <translation id="8557066899867184262">CVC terletak di belakang kad anda.</translation>
 <translation id="8559762987265718583">Sambungan peribadi ke <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tidak boleh diwujudkan kerana tarikh dan masa peranti anda (<ph name="DATE_AND_TIME" />) tidak betul.</translation>
+<translation id="8564985650692024650">Chromium mengesyorkan penetapan semula kata laluan <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika anda menggunakan semula kata laluan itu di tapak lain.</translation>
 <translation id="8571890674111243710">Menterjemah halaman ke <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Tambah no. tel.
 </translation>
@@ -1070,6 +1071,7 @@
 <translation id="884264119367021077">Alamat penghantaran</translation>
 <translation id="884923133447025588">Tiada mekanisme pembatalan dijumpai.</translation>
 <translation id="885730110891505394">Berkongsi dengan Google</translation>
+<translation id="8858065207712248076">Chrome mengesyorkan penetapan semula kata laluan <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> jika anda menggunakan semula kata laluan itu di tapak lain.</translation>
 <translation id="8866481888320382733">Ralat semasa menghuraikan tetapan dasar</translation>
 <translation id="8870413625673593573">Ditutup Baru-baru Ini</translation>
 <translation id="8874824191258364635">Masukkan nombor kad yang sah</translation>
diff --git a/components/strings/components_strings_nl.xtb b/components/strings/components_strings_nl.xtb
index b98099a..bf0f8ba 100644
--- a/components/strings/components_strings_nl.xtb
+++ b/components/strings/components_strings_nl.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Aanvullende gegevens verzenden</translation>
 <translation id="1021110881106174305">Geaccepteerde kaarten</translation>
 <translation id="1032854598605920125">Rechtsom draaien</translation>
+<translation id="1035334672863811645">inloggen bij Chrome</translation>
 <translation id="1038842779957582377">onbekende naam</translation>
 <translation id="1050038467049342496">Andere apps sluiten</translation>
 <translation id="1055184225775184556">&amp;Toevoegen ongedaan maken</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 suggestie}other{# suggesties}}</translation>
 <translation id="2079545284768500474">Ongedaan maken</translation>
 <translation id="20817612488360358">De proxyinstellingen van het systeem moeten worden gebruikt, maar er is ook een expliciete proxyconfiguratie opgegeven.</translation>
-<translation id="2084558088529668945">Je hebt je wachtwoord ingevoerd op een site die niet wordt beheerd door <ph name="ORG_NAME" />. Hergebruik je wachtwoord niet voor andere apps en sites om je account te beschermen.</translation>
 <translation id="2091887806945687916">Geluid</translation>
 <translation id="2094505752054353250">Domeinen komen niet overeen</translation>
 <translation id="2096368010154057602">Departement</translation>
@@ -453,7 +453,6 @@
 <translation id="4171400957073367226">Onjuiste verificatiehandtekening</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Nog <ph name="ITEM_COUNT" /> item}other{Nog <ph name="ITEM_COUNT" /> items}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome raadt je aan het wachtwoord voor je account <ph name="ORG_NAME" /> opnieuw in te stellen als je het voor andere sites hebt hergebruikt.</translation>
 <translation id="4196861286325780578">&amp;Opnieuw verplaatsen</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Controleer firewall- en antivirusconfiguraties<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Crashes</translation>
@@ -581,6 +580,7 @@
 <translation id="5089810972385038852">Staat</translation>
 <translation id="5094747076828555589">De server kan niet bewijzen dat dit <ph name="DOMAIN" /> is. Het beveiligingscertificaat van de server wordt niet vertrouwd door Chromium. Dit kan worden veroorzaakt door een verkeerde configuratie of een aanvaller die je verbinding onderschept.</translation>
 <translation id="5095208057601539847">Provincie</translation>
+<translation id="5098332213681597508">Dit is de naam die in je Google-account staat.</translation>
 <translation id="5115563688576182185">(64-bits)</translation>
 <translation id="5121084798328133320">Nadat je hebt bevestigd, worden de kaartgegevens van je Google-betalingsaccount gedeeld met deze site.</translation>
 <translation id="5128122789703661928">De naam van deze sessie die je wilt verwijderen, is ongeldig.</translation>
@@ -666,6 +666,7 @@
 <translation id="5633066919399395251">Cybercriminelen op <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> proberen mogelijk gevaarlijke programma's op je computer te installeren waarmee je gegevens kunnen worden gestolen of verwijderd (bijvoorbeeld foto's, wachtwoorden, berichten en creditcardgegevens). <ph name="BEGIN_LEARN_MORE_LINK" />Meer informatie<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Misleidende content geblokkeerd.</translation>
 <translation id="5659593005791499971">E-mailadres</translation>
+<translation id="5666899935841546222">Wil je alle kaarten bij elkaar hebben?</translation>
 <translation id="5675650730144413517">Deze pagina werkt niet</translation>
 <translation id="5685654322157854305">Verzendadres toevoegen</translation>
 <translation id="5689199277474810259">Exporteren naar JSON</translation>
@@ -692,7 +693,6 @@
 <translation id="5869405914158311789">Deze site is niet bereikbaar</translation>
 <translation id="5869522115854928033">Opgeslagen wachtwoorden</translation>
 <translation id="5893752035575986141">Creditcards worden geaccepteerd.</translation>
-<translation id="5898382028489516745">Chromium raadt je aan het wachtwoord voor <ph name="ORG_NAME" /> te resetten als je het voor andere sites hebt hergebruikt.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (gesynchroniseerd)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 in gebruik}other{# in gebruik}}</translation>
 <translation id="5939518447894949180">Resetten</translation>
@@ -1035,6 +1035,7 @@
 <translation id="8553075262323480129">De vertaling is mislukt omdat de taal van de pagina niet kan worden bepaald.</translation>
 <translation id="8557066899867184262">De CVC-code staat op de achterkant van je kaart.</translation>
 <translation id="8559762987265718583">Er kan geen privéverbinding met <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> tot stand worden gebracht, omdat de datum en tijd van je apparaat (<ph name="DATE_AND_TIME" />) onjuist zijn.</translation>
+<translation id="8564985650692024650">Chromium raadt je aan het wachtwoord voor <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> opnieuw in te stellen als je het voor andere sites hebt hergebruikt.</translation>
 <translation id="8571890674111243710">Pagina wordt vertaald in het <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Telnr. toevoegen</translation>
 <translation id="859285277496340001">Er wordt in het certificaat geen methode gespecificeerd waarmee kan worden gecontroleerd of het certificaat is ingetrokken.</translation>
@@ -1063,6 +1064,7 @@
 <translation id="884264119367021077">Verzendadres</translation>
 <translation id="884923133447025588">Geen intrekkingsmechanisme gevonden.</translation>
 <translation id="885730110891505394">Delen met Google</translation>
+<translation id="8858065207712248076">Chrome raadt je aan het wachtwoord voor <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> opnieuw in te stellen als je het voor andere sites hebt hergebruikt.</translation>
 <translation id="8866481888320382733">Fout bij het parseren van beleidsinstellingen</translation>
 <translation id="8870413625673593573">Recent gesloten</translation>
 <translation id="8874824191258364635">Geef een geldig kaartnummer op</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb
index c39be1a..89d72d9 100644
--- a/components/strings/components_strings_no.xtb
+++ b/components/strings/components_strings_no.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Oppgi flere detaljer</translation>
 <translation id="1021110881106174305">Godkjente kort</translation>
 <translation id="1032854598605920125">Rotér med klokken</translation>
+<translation id="1035334672863811645">logg på Chrome</translation>
 <translation id="1038842779957582377">ukjent navn</translation>
 <translation id="1050038467049342496">Lukk andre apper</translation>
 <translation id="1055184225775184556">&amp;Angre tilleggingen</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 forslag}other{# forslag}}</translation>
 <translation id="2079545284768500474">Angre</translation>
 <translation id="20817612488360358">Innstillinger for systemmellomtjener er stilt inn på å brukes, men en uttrykkelig mellomtjenerkonfigurasjon er også angitt.</translation>
-<translation id="2084558088529668945">Du har skrevet inn passordet ditt på et nettsted som ikke administreres av <ph name="ORG_NAME" />. For å beskytte kontoen din må du ikke bruke det samme passordet i andre apper og på andre nettsteder.</translation>
 <translation id="2091887806945687916">Lyd</translation>
 <translation id="2094505752054353250">Domenene samsvarer ikke</translation>
 <translation id="2096368010154057602">Avdeling</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Ugyldig bekreftelsessignatur</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> element til}other{<ph name="ITEM_COUNT" /> elementer til}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome anbefaler at du tilbakestiller passordet ditt for <ph name="ORG_NAME" /> hvis du også har brukt det på andre nettsteder.</translation>
 <translation id="4196861286325780578">&amp;Flytt likevel</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Sjekk brannmur- og antiviruskonfigurasjonen<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Kræsj</translation>
@@ -696,7 +695,6 @@
 <translation id="5869405914158311789">Dette nettstedet er ikke tilgjengelig</translation>
 <translation id="5869522115854928033">Lagrede passord</translation>
 <translation id="5893752035575986141">Kredittkort godtas.</translation>
-<translation id="5898382028489516745">Chromium anbefaler at du tilbakestiller passordet ditt for <ph name="ORG_NAME" /> hvis du også har brukt det på andre nettsteder.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkronisert)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 er i bruk}other{# er i bruk}}</translation>
 <translation id="5939518447894949180">Tilbakestill</translation>
@@ -1040,6 +1038,7 @@
 <translation id="8553075262323480129">Oversettelsen mislyktes fordi sidens språk ikke kunne fastslås.</translation>
 <translation id="8557066899867184262">CVC-koden finner du på baksiden av kortet.</translation>
 <translation id="8559762987265718583">En privat tilkobling til <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> kunne ikke etableres fordi datoen og klokkeslettet (<ph name="DATE_AND_TIME" />) er feil på enheten.</translation>
+<translation id="8564985650692024650">Chromium anbefaler at du tilbakestiller passordet ditt for <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> hvis du også har brukt det på andre nettsteder.</translation>
 <translation id="8571890674111243710">Oversett siden til <ph name="LANGUAGE" /></translation>
 <translation id="858637041960032120">Legg til telefonnummer</translation>
 <translation id="859285277496340001">Sertifikatet spesifiserer ikke en mekanisme for å kontrollere hvorvidt det har blitt tilbakekalt.</translation>
@@ -1068,6 +1067,7 @@
 <translation id="884264119367021077">Leveringsadresse</translation>
 <translation id="884923133447025588">Finner ingen tilbakekallingsmekanisme.</translation>
 <translation id="885730110891505394">Deling med Google</translation>
+<translation id="8858065207712248076">Chrome anbefaler at du tilbakestiller passordet ditt for <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> hvis du også har brukt det på andre nettsteder.</translation>
 <translation id="8866481888320382733">Analysefeil i angivelsen av enhetrsinnstillinger</translation>
 <translation id="8870413625673593573">Nylig lukket</translation>
 <translation id="8874824191258364635">Angi et gyldig kortnummer</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb
index edf135ef..6899579 100644
--- a/components/strings/components_strings_pl.xtb
+++ b/components/strings/components_strings_pl.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Podaj dodatkowe informacje</translation>
 <translation id="1021110881106174305">Akceptowane karty</translation>
 <translation id="1032854598605920125">Obróć w prawo</translation>
+<translation id="1035334672863811645">zaloguj się w Chrome</translation>
 <translation id="1038842779957582377">nieznana nazwa</translation>
 <translation id="1050038467049342496">Zamknij inne aplikacje</translation>
 <translation id="1055184225775184556">&amp;Cofnij dodanie</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 podpowiedź}few{# podpowiedzi}many{# podpowiedzi}other{# podpowiedzi}}</translation>
 <translation id="2079545284768500474">Cofnij</translation>
 <translation id="20817612488360358">Skonfigurowano używanie systemowych ustawień proxy, ale podano też jawną konfigurację proxy.</translation>
-<translation id="2084558088529668945">Wpisałeś swoje hasło na stronie, którą nie zarządza <ph name="ORG_NAME" />. Aby chronić konto, nie używaj swojego hasła w innych aplikacjach ani na innych stronach.</translation>
 <translation id="2091887806945687916">Dźwięk</translation>
 <translation id="2094505752054353250">Niewłaściwa domena</translation>
 <translation id="2096368010154057602">Departament</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Nieprawidłowy podpis weryfikujący</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Jeszcze <ph name="ITEM_COUNT" /> element}few{Jeszcze <ph name="ITEM_COUNT" /> elementy}many{Jeszcze <ph name="ITEM_COUNT" /> elementów}other{Jeszcze <ph name="ITEM_COUNT" /> elementu}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome zaleca zresetowanie hasła, którego używasz w: <ph name="ORG_NAME" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="4196861286325780578">&amp;Ponów przeniesienie</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Sprawdź konfigurację zapory sieciowej i oprogramowania antywirusowego<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Awarie</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Stan</translation>
 <translation id="5094747076828555589">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa nie jest zaufany w Chromium. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation>
 <translation id="5095208057601539847">Prowincja</translation>
+<translation id="5098332213681597508">Ta nazwa pochodzi z Twojego konta Google.</translation>
 <translation id="5115563688576182185">(64-bitowa)</translation>
 <translation id="5121084798328133320">Po potwierdzeniu szczegółowe dane karty z Twojego konta Google Payments zostaną udostępnione tej stronie.</translation>
 <translation id="5128122789703661928">Nie możesz usunąć tej sesji, bo jej nazwa jest nieprawidłowa.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Osoby obecnie atakujące stronę <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> mogą próbować zainstalować na Twoim komputerze niebezpieczne programy, które wykradają lub usuwają informacje (na przykład zdjęcia, hasła, wiadomości lub dane kart kredytowych). <ph name="BEGIN_LEARN_MORE_LINK" />Więcej informacji<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Zablokowano treści wprowadzające w błąd.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Czy chcesz mieć wszystkie swoje karty w jednym miejscu?</translation>
 <translation id="5675650730144413517">Ta strona nie działa</translation>
 <translation id="5685654322157854305">Dodaj adres wysyłki</translation>
 <translation id="5689199277474810259">Eksportuj w formacie JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Ta witryna jest nieosiągalna</translation>
 <translation id="5869522115854928033">Zapisane hasła</translation>
 <translation id="5893752035575986141">Karty kredytowe są akceptowane.</translation>
-<translation id="5898382028489516745">Chromium zaleca zresetowanie hasła, którego używasz w: <ph name="ORG_NAME" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (zsynchronizowane)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{W użyciu: 1}few{W użyciu: #}many{W użyciu: #}other{W użyciu: #}}</translation>
 <translation id="5939518447894949180">Resetuj</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Tłumaczenie nie powiodło się, ponieważ nie można określić języka strony.</translation>
 <translation id="8557066899867184262">Kod CVC znajduje się na odwrocie karty.</translation>
 <translation id="8559762987265718583">Nie można nawiązać prywatnego połączenia z <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, ponieważ data i godzina (<ph name="DATE_AND_TIME" />) ustawione na urządzeniu są nieprawidłowe.</translation>
+<translation id="8564985650692024650">Chromium zaleca zresetowanie hasła, którego używasz w: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="8571890674111243710">Trwa tłumaczenie strony na język: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Dodaj numer telefonu</translation>
 <translation id="859285277496340001">Certyfikat nie określa mechanizmu do sprawdzania, czy został on unieważniony.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Adres wysyłki</translation>
 <translation id="884923133447025588">Nie znaleziono mechanizmu unieważniania.</translation>
 <translation id="885730110891505394">Udostępnianie Google</translation>
+<translation id="8858065207712248076">Chrome zaleca zresetowanie hasła, którego używasz w: <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, jeśli zostało użyte na innej stronie.</translation>
 <translation id="8866481888320382733">Podczas przetwarzania ustawień zasady wystąpił błąd</translation>
 <translation id="8870413625673593573">Ostatnio zamknięte</translation>
 <translation id="8874824191258364635">Wpisz prawidłowy numer karty</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb
index e6fadda8..f9b2b52 100644
--- a/components/strings/components_strings_pt-BR.xtb
+++ b/components/strings/components_strings_pt-BR.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Forneça detalhes adicionais</translation>
 <translation id="1021110881106174305">Cartões aceitos</translation>
 <translation id="1032854598605920125">Girar no sentido horário</translation>
+<translation id="1035334672863811645">fazer login no Chrome</translation>
 <translation id="1038842779957582377">nome desconhecido</translation>
 <translation id="1050038467049342496">Fechar outros apps</translation>
 <translation id="1055184225775184556">&amp;Desfazer adicionar</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugestão}one{# sugestão}other{# sugestões}}</translation>
 <translation id="2079545284768500474">Desfazer</translation>
 <translation id="20817612488360358">As configurações de proxy do sistema são definidas para serem utilizadas, mas uma configuração explícita de proxy também foi especificada.</translation>
-<translation id="2084558088529668945">Você informou sua senha em um site que não é gerenciado por <ph name="ORG_NAME" />. Para proteger sua conta, não reutilize sua senha em outros apps e sites.</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2094505752054353250">Incompatibilidade de domínio</translation>
 <translation id="2096368010154057602">Departamento</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Assinatura de verificação inválida</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Mais <ph name="ITEM_COUNT" /> item}one{Mais <ph name="ITEM_COUNT" /> item}other{Mais <ph name="ITEM_COUNT" /> itens}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">O Chrome recomenda redefinir sua senha de <ph name="ORG_NAME" /> se você a reutilizou em outros sites.</translation>
 <translation id="4196861286325780578">&amp;Refazer mover</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Verificar as configurações do antivírus e firewall<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Falhas</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Estado</translation>
 <translation id="5094747076828555589">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança não é confiável para o Chromium. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation>
 <translation id="5095208057601539847">Província</translation>
+<translation id="5098332213681597508">Este nome é da sua Conta do Google.</translation>
 <translation id="5115563688576182185">64 bits</translation>
 <translation id="5121084798328133320">Depois da confirmação, os detalhes do cartão da sua conta do Google Payments serão compartilhados com esse site.</translation>
 <translation id="5128122789703661928">A sessão com este nome não é válida para exclusão.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Invasores que estão em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> no momento podem tentar instalar programas perigosos no seu computador e roubar ou excluir suas informações (por exemplo, fotos, senhas, mensagens e cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Conteúdo enganoso bloqueado.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Você quer manter todos os seus cartões em um só lugar?</translation>
 <translation id="5675650730144413517">Esta página não está funcionando</translation>
 <translation id="5685654322157854305">Adicionar endereço de entrega</translation>
 <translation id="5689199277474810259">Exportar para JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Não é possível acessar esse site</translation>
 <translation id="5869522115854928033">Senhas salvas</translation>
 <translation id="5893752035575986141">Cartões de crédito são aceitos.</translation>
-<translation id="5898382028489516745">O Chromium recomenda redefinir sua senha de <ph name="ORG_NAME" /> se você a reutilizou em outros sites.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizado)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 em uso}one{# em uso}other{# em uso}}</translation>
 <translation id="5939518447894949180">Redefinir</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">A tradução falhou porque não foi possível determinar o idioma da página.</translation>
 <translation id="8557066899867184262">O CVC está localizado atrás do seu cartão.</translation>
 <translation id="8559762987265718583">Não é possível estabelecer uma conexão privada com <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, porque a data e a hora do seu dispositivo (<ph name="DATE_AND_TIME" />) estão incorretas.</translation>
+<translation id="8564985650692024650">O Chromium recomenda redefinir sua senha de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se você a reutilizou em outros sites.</translation>
 <translation id="8571890674111243710">Traduzindo página para <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Ad. nº. telefone
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Endereço de entrega</translation>
 <translation id="884923133447025588">Nenhum mecanismo de revogação encontrado.</translation>
 <translation id="885730110891505394">Compartilhar com o Google</translation>
+<translation id="8858065207712248076">O Chrome recomenda redefinir sua senha de <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se você a reutilizou em outros sites.</translation>
 <translation id="8866481888320382733">Configurações da política de análise de erros</translation>
 <translation id="8870413625673593573">Recentemente fechadas</translation>
 <translation id="8874824191258364635">Informe um número de cartão válido</translation>
diff --git a/components/strings/components_strings_pt-PT.xtb b/components/strings/components_strings_pt-PT.xtb
index 258c234..9dd9adbbe 100644
--- a/components/strings/components_strings_pt-PT.xtb
+++ b/components/strings/components_strings_pt-PT.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Forneça mais detalhes</translation>
 <translation id="1021110881106174305">Cartões admitidos</translation>
 <translation id="1032854598605920125">Rodar para a direita</translation>
+<translation id="1035334672863811645">inicie sessão no Chrome</translation>
 <translation id="1038842779957582377">nome desconhecido</translation>
 <translation id="1050038467049342496">Fechar outras aplicações</translation>
 <translation id="1055184225775184556">&amp;Anular adição</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugestão}other{# sugestões}}</translation>
 <translation id="2079545284768500474">Anular</translation>
 <translation id="20817612488360358">As definições de proxy do sistema estão definidas para serem utilizadas, mas também está especificada uma configuração de proxy explícita.</translation>
-<translation id="2084558088529668945">Introduziu a palavra-passe num site que não é gerido pelo serviço <ph name="ORG_NAME" />. Para proteger a sua conta, não reutilize a sua palavra-passe noutros sites e aplicações.</translation>
 <translation id="2091887806945687916">Som</translation>
 <translation id="2094505752054353250">Falta de correspondência de domínio</translation>
 <translation id="2096368010154057602">Departamento</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Assinatura de verificação incorreta</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Mais <ph name="ITEM_COUNT" /> item}other{Mais <ph name="ITEM_COUNT" /> itens}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">O Chrome recomenda a reposição da palavra-passe do serviço <ph name="ORG_NAME" /> se a tiver reutilizado noutros sites.</translation>
 <translation id="4196861286325780578">&amp;Refazer movimentação</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Verificar as configurações da firewall e de antivírus<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Erros</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Estado</translation>
 <translation id="5094747076828555589">Este servidor não conseguiu provar que é o domínio <ph name="DOMAIN" />; o Chromium não confia no respetivo certificado de segurança. Isto pode ser o resultado de uma configuração incorreta ou de um invasor a intercetar a sua ligação.</translation>
 <translation id="5095208057601539847">Província</translation>
+<translation id="5098332213681597508">Este nome é proveniente da sua Conta Google.</translation>
 <translation id="5115563688576182185">(64 bits)</translation>
 <translation id="5121084798328133320">Depois de confirmar, os detalhes do cartão da conta do Google Payments são partilhados com este site.</translation>
 <translation id="5128122789703661928">A sessão com este nome não é válida para eliminação.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Os atacantes atualmente em <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> podem tentar instalar programas perigosos no seu computador que roubem ou eliminem as suas informações (por exemplo, fotos, palavras-passe, mensagens e cartões de crédito). <ph name="BEGIN_LEARN_MORE_LINK" />Saiba mais<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Conteúdo fraudulento bloqueado.</translation>
 <translation id="5659593005791499971">Email</translation>
+<translation id="5666899935841546222">Pretende ter todos os seus cartões num só local?</translation>
 <translation id="5675650730144413517">Esta página não está a funcionar</translation>
 <translation id="5685654322157854305">Adicionar morada para envio</translation>
 <translation id="5689199277474810259">Exportar para JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Não é possível aceder a este site</translation>
 <translation id="5869522115854928033">Palavras-passe guardadas</translation>
 <translation id="5893752035575986141">Os cartões de crédito são admitidos.</translation>
-<translation id="5898382028489516745">O Chromium recomenda a reposição da palavra-passe do serviço <ph name="ORG_NAME" /> se a tiver reutilizado noutros sites.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizados)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 em utilização}other{# em utilização}}</translation>
 <translation id="5939518447894949180">Repor</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">A tradução falhou porque não foi possível determinar o idioma da página.</translation>
 <translation id="8557066899867184262">O Código de Segurança/CVC está localizado no verso do cartão.</translation>
 <translation id="8559762987265718583">Não é possível estabelecer uma ligação privada a <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, porque a data e a hora do seu dispositivo (<ph name="DATE_AND_TIME" />) estão incorretas.</translation>
+<translation id="8564985650692024650">O Chromium recomenda a reposição da palavra-passe da <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se a tiver reutilizado noutros sites.</translation>
 <translation id="8571890674111243710">A traduzir a página para <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Adic. n.º telef.
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Endereço para envio</translation>
 <translation id="884923133447025588">Não foi encontrado qualquer mecanismo de revogação.</translation>
 <translation id="885730110891505394">Partilha com a Google</translation>
+<translation id="8858065207712248076">O Chrome recomenda a reposição da palavra-passe da <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> se a tiver reutilizado noutros sites.</translation>
 <translation id="8866481888320382733">Erro ao analisar as definições da política</translation>
 <translation id="8870413625673593573">Fechadas recentemente</translation>
 <translation id="8874824191258364635">Introduza um número de cartão válido</translation>
diff --git a/components/strings/components_strings_ro.xtb b/components/strings/components_strings_ro.xtb
index 2fb7645..9b3ac0a 100644
--- a/components/strings/components_strings_ro.xtb
+++ b/components/strings/components_strings_ro.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Specifică detalii suplimentare</translation>
 <translation id="1021110881106174305">Carduri acceptate</translation>
 <translation id="1032854598605920125">Rotește în sensul acelor de ceasornic</translation>
+<translation id="1035334672863811645">conectează-te la Chrome</translation>
 <translation id="1038842779957582377">nume necunoscut</translation>
 <translation id="1050038467049342496">închide celelalte aplicații;</translation>
 <translation id="1055184225775184556">&amp;Anulați adăugarea</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 sugestie}few{# sugestii}other{# de sugestii}}</translation>
 <translation id="2079545284768500474">Anulează</translation>
 <translation id="20817612488360358">Setările proxy de sistem sunt setate pentru a fi utilizate, dar o configurație explicită pentru proxy este, de asemenea, specificată.</translation>
-<translation id="2084558088529668945">Ai introdus parola pe un site care nu este gestionat de <ph name="ORG_NAME" />. Pentru a proteja contul, nu folosi aceeași parolă pentru alte aplicații și site-uri.</translation>
 <translation id="2091887806945687916">Sunet</translation>
 <translation id="2094505752054353250">Nepotrivire domeniu</translation>
 <translation id="2096368010154057602">Departament</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Semnătură de verificare nevalidă</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Încă <ph name="ITEM_COUNT" /> articol}few{Încă <ph name="ITEM_COUNT" /> articole}other{Încă <ph name="ITEM_COUNT" /> de articole}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome îți recomandă să resetezi parola pentru <ph name="ORG_NAME" /> dacă ai folosit-o și pe alte site-uri.</translation>
 <translation id="4196861286325780578">&amp;Repetați mutarea</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />să verifici configurarea pentru firewall și antivirus;<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Blocări</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Stat</translation>
 <translation id="5094747076828555589">Acest server nu a putut dovedi că este <ph name="DOMAIN" />; Chromium nu consideră că certificatul său de securitate este de încredere. Cauza poate fi o configurare greșită sau interceptarea conexiunii de către un atacator.</translation>
 <translation id="5095208057601539847">Provincie</translation>
+<translation id="5098332213681597508">Acest nume provine din Contul tău Google.</translation>
 <translation id="5115563688576182185">(64 de biți)</translation>
 <translation id="5121084798328133320">După ce confirmi, acest site va avea acces la detaliile cardului tău din contul Google Payments.</translation>
 <translation id="5128122789703661928">Sesiunea cu acest nume nu este validă pentru ștergere.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Atacatorii de pe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> pot încerca să instaleze programe periculoase pe computerul tău, care să îți fure sau să îți șteargă informațiile (de exemplu, fotografii, parole, mesaje sau date despre cardurile de credit). <ph name="BEGIN_LEARN_MORE_LINK" />Află mai multe<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Conținutul înșelător a fost blocat.</translation>
 <translation id="5659593005791499971">Adresă de e-mail</translation>
+<translation id="5666899935841546222">Vrei să ai toate cardurile într-un singur loc?</translation>
 <translation id="5675650730144413517">Pagina nu funcționează</translation>
 <translation id="5685654322157854305">Adaugă adresa de expediere</translation>
 <translation id="5689199277474810259">Exportă în format JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Acest site nu poate fi accesat</translation>
 <translation id="5869522115854928033">Parole salvate</translation>
 <translation id="5893752035575986141">Se acceptă carduri de credit.</translation>
-<translation id="5898382028489516745">Chromium îți recomandă să resetezi parola pentru <ph name="ORG_NAME" /> dacă ai folosit-o și pe alte site-uri.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sincronizat)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 în uz}few{# în uz}other{# în uz}}</translation>
 <translation id="5939518447894949180">Resetează</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Traducerea nu a reușit, deoarece nu a putut fi stabilită limba paginii.</translation>
 <translation id="8557066899867184262">Codul CVC se află pe spatele cardului.</translation>
 <translation id="8559762987265718583">O conexiune privată la <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> nu poate fi stabilită, deoarece data și ora dispozitivului (<ph name="DATE_AND_TIME" />) sunt incorecte.</translation>
+<translation id="8564985650692024650">Chromium îți recomandă să resetezi parola pentru <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> dacă ai folosit-o și pe alte site-uri.</translation>
 <translation id="8571890674111243710">Se traduce pagina în <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Adăugați telefon
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Adresa de expediere</translation>
 <translation id="884923133447025588">Nu a fost găsit niciun mecanism de revocare.</translation>
 <translation id="885730110891505394">Permiterea accesului pentru Google</translation>
+<translation id="8858065207712248076">Chrome îți recomandă să resetezi parola pentru <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> dacă ai folosit-o și pe alte site-uri.</translation>
 <translation id="8866481888320382733">Eroare la analizarea setărilor pentru politică</translation>
 <translation id="8870413625673593573">Închise recent</translation>
 <translation id="8874824191258364635">Introdu un număr de card valid</translation>
diff --git a/components/strings/components_strings_ru.xtb b/components/strings/components_strings_ru.xtb
index f11d74a4..c2086a8 100644
--- a/components/strings/components_strings_ru.xtb
+++ b/components/strings/components_strings_ru.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Сообщить дополнительную информацию</translation>
 <translation id="1021110881106174305">Карты, которые принимаются к оплате</translation>
 <translation id="1032854598605920125">Повернуть по часовой стрелке</translation>
+<translation id="1035334672863811645">войдите в Chrome</translation>
 <translation id="1038842779957582377">неизвестное имя</translation>
 <translation id="1050038467049342496">Закройте другие приложения.</translation>
 <translation id="1055184225775184556">&amp;Отменить добавление</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 вариант}one{# вариант}few{# варианта}many{# вариантов}other{# варианта}}</translation>
 <translation id="2079545284768500474">Отмена</translation>
 <translation id="20817612488360358">Включены системные настройки прокси-сервера, но при этом его конфигурация задана явным образом.</translation>
-<translation id="2084558088529668945">Вы ввели пароль на сайте, которым не управляет <ph name="ORG_NAME" />. Чтобы защитить свой аккаунт, не используйте этот пароль для других приложений и сайтов.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2094505752054353250">Несоответствие домена</translation>
 <translation id="2096368010154057602">Округ</translation>
@@ -456,7 +456,6 @@
 <translation id="4171400957073367226">Подтверждающая подпись недействительна</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Ещё <ph name="ITEM_COUNT" /> товар}one{Ещё <ph name="ITEM_COUNT" /> товар}few{Ещё <ph name="ITEM_COUNT" /> товара}many{Ещё <ph name="ITEM_COUNT" /> товаров}other{Ещё <ph name="ITEM_COUNT" /> товара}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" />: <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Рекомендуем сбросить пароль в домене <ph name="ORG_NAME" />, если вы используете его на других сайтах.</translation>
 <translation id="4196861286325780578">&amp;Повторить перемещение</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Проверьте настройки брандмауэра и антивирусного ПО<ph name="END_LINK" />.</translation>
 <translation id="4220128509585149162">Сбои в работе Chrome</translation>
@@ -695,7 +694,6 @@
 <translation id="5869405914158311789">Не удается получить доступ к сайту</translation>
 <translation id="5869522115854928033">Сайты с сохраненными паролями</translation>
 <translation id="5893752035575986141">Принимаются кредитные карты.</translation>
-<translation id="5898382028489516745">Рекомендуем сбросить пароль в домене <ph name="ORG_NAME" />, если вы используете его на других сайтах.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (данные синхронизируются)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Используется 1 файл cookie}one{Используется # файл cookie}few{Используется # файла cookie}many{Используется # файлов cookie}other{Используется # файла cookie}}</translation>
 <translation id="5939518447894949180">Сбросить</translation>
@@ -1039,6 +1037,7 @@
 <translation id="8553075262323480129">Перевод не удался, так как не удается определить язык страницы.</translation>
 <translation id="8557066899867184262">CVC-код указан на обратной стороне карты.</translation>
 <translation id="8559762987265718583">Не удалось установить защищенное соединение с доменом <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> из-за неверных настроек системных часов и календаря (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Chromium рекомендует сбросить пароль, используемый в подразделении <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, если вы указывали его на других сайтах.</translation>
 <translation id="8571890674111243710">Перевод страницы на <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Добавьте номер</translation>
 <translation id="859285277496340001">Этот сертификат не определяет механизм проверки отзыва.</translation>
@@ -1067,6 +1066,7 @@
 <translation id="884264119367021077">Адрес доставки</translation>
 <translation id="884923133447025588">Не обнаружен механизм отзыва.</translation>
 <translation id="885730110891505394">Доступ Google</translation>
+<translation id="8858065207712248076">Chrome рекомендует сбросить пароль, используемый в подразделении <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, если вы указывали его на других сайтах.</translation>
 <translation id="8866481888320382733">Не удалось выполнить анализ настроек политики</translation>
 <translation id="8870413625673593573">Недавно закрытые</translation>
 <translation id="8874824191258364635">Введите действительный номер карты.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index 42043ab..6445bef 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Poskytnite ďalšie podrobnosti</translation>
 <translation id="1021110881106174305">Prijímané karty</translation>
 <translation id="1032854598605920125">Otočiť v smere hodinových ručičiek</translation>
+<translation id="1035334672863811645">prihláste sa do prehliadača Chrome</translation>
 <translation id="1038842779957582377">neznámy názov</translation>
 <translation id="1050038467049342496">Zavrite ostatné aplikácie</translation>
 <translation id="1055184225775184556">&amp;Vrátiť späť pridanie</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 návrh}few{# návrhy}many{# návrhu}other{# návrhov}}</translation>
 <translation id="2079545284768500474">Späť</translation>
 <translation id="20817612488360358">Používanie systémových nastavení servera proxy je nastavené, avšak je určená aj explicitná konfigurácia servera proxy.</translation>
-<translation id="2084558088529668945">Zadali ste heslo na webe, ktorý nie je spravovaný organizáciou <ph name="ORG_NAME" />. Ak chcete, aby bol váš účet chránený, nepoužívajte jeho heslo pre iné aplikácie a weby.</translation>
 <translation id="2091887806945687916">Zvuk</translation>
 <translation id="2094505752054353250">Domény sa nezhodujú</translation>
 <translation id="2096368010154057602">Správna oblasť</translation>
@@ -453,7 +453,6 @@
 <translation id="4171400957073367226">Nesprávny overovací podpis</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> ďalšia položka}few{<ph name="ITEM_COUNT" /> ďalšie položky}many{<ph name="ITEM_COUNT" /> ďalšej položky}other{<ph name="ITEM_COUNT" /> ďalších položiek}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Ak ste heslo organizácie <ph name="ORG_NAME" /> použili na inom webe, Chrome odporúča, aby ste ho obnovili.</translation>
 <translation id="4196861286325780578">&amp;Znova presunúť</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Skontrolovať konfiguráciu brány firewall a antivírusového softvéru<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Zlyhania</translation>
@@ -581,6 +580,7 @@
 <translation id="5089810972385038852">Štát</translation>
 <translation id="5094747076828555589">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, Chromium nedôveruje jej bezpečnostnému certifikátu. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation>
 <translation id="5095208057601539847">Provincia</translation>
+<translation id="5098332213681597508">Tento názov pochádza z vášho účtu Google.</translation>
 <translation id="5115563688576182185">(64-bitová verzia)</translation>
 <translation id="5121084798328133320">Po potvrdení sa budú podrobnosti z účtu Google Payments zdieľať s týmto webom.</translation>
 <translation id="5128122789703661928">Relácia s týmto názvom je neplatná a nedá sa odstrániť.</translation>
@@ -666,6 +666,7 @@
 <translation id="5633066919399395251">Útočníci na webe <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> sa môžu pokúsiť nainštalovať nebezpečné programy vo vašom počítači, pomocou ktorých ukradnú alebo odstránia informácie (napríklad fotky, heslá, správy a kreditné karty). <ph name="BEGIN_LEARN_MORE_LINK" />Ďalšie informácie<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Klamlivý obsah bol zablokovaný.</translation>
 <translation id="5659593005791499971">E-mail</translation>
+<translation id="5666899935841546222">Chcete mať všetky svoje karty na jednom mieste?</translation>
 <translation id="5675650730144413517">Táto stránka nefunguje</translation>
 <translation id="5685654322157854305">Pridať dodaciu adresu</translation>
 <translation id="5689199277474810259">Exportovať vo formáte JSON</translation>
@@ -692,7 +693,6 @@
 <translation id="5869405914158311789">K tomuto webu sa nedá pripojiť</translation>
 <translation id="5869522115854928033">Uložené heslá</translation>
 <translation id="5893752035575986141">Kreditné karty sú akceptované.</translation>
-<translation id="5898382028489516745">Ak ste heslo organizácie <ph name="ORG_NAME" /> použili na inom webe, Chromium odporúča, aby ste ho obnovili.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synchronizované)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Používa sa 1}few{Používajú sa #}many{Používa sa #}other{Používa sa #}}</translation>
 <translation id="5939518447894949180">Resetovať</translation>
@@ -1035,6 +1035,7 @@
 <translation id="8553075262323480129">Prekladanie zlyhalo, pretože sa nepodarilo určiť jazyk stránky.</translation>
 <translation id="8557066899867184262">Kód CVC nájdete na zadnej strane karty.</translation>
 <translation id="8559762987265718583">Súkromné pripojenie k doméne <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> sa nedá nadviazať, pretože dátum a čas (<ph name="DATE_AND_TIME" />) vášho zariadenia sú nesprávne.</translation>
+<translation id="8564985650692024650">Ak ste heslo organizácie <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili aj na iných weboch, Chromium ho odporúča obnoviť.</translation>
 <translation id="8571890674111243710">Prebieha preklad stránky do jazyka: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Pridať telefón
 </translation>
@@ -1064,6 +1065,7 @@
 <translation id="884264119367021077">Dodacia adresa</translation>
 <translation id="884923133447025588">Nenašiel sa žiadny mechanizmus rušenia certifikátov.</translation>
 <translation id="885730110891505394">Zdieľanie s Googlom</translation>
+<translation id="8858065207712248076">Ak ste heslo organizácie <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> použili aj na iných weboch, Chrome ho odporúča obnoviť.</translation>
 <translation id="8866481888320382733">Pri analýze nastavení pravidla sa vyskytla chyba</translation>
 <translation id="8870413625673593573">Naposledy zatvorené</translation>
 <translation id="8874824191258364635">Zadajte platné číslo karty</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb
index bf373321..b69a5096 100644
--- a/components/strings/components_strings_sl.xtb
+++ b/components/strings/components_strings_sl.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Navedite dodatne podrobnosti</translation>
 <translation id="1021110881106174305">Sprejete kartice</translation>
 <translation id="1032854598605920125">Sukanje v smeri urnega kazalca</translation>
+<translation id="1035334672863811645">se prijavite v Chrome</translation>
 <translation id="1038842779957582377">neznano ime</translation>
 <translation id="1050038467049342496">Zaprite druge aplikacije</translation>
 <translation id="1055184225775184556">&amp;Razveljavi dodajanje</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 predlog}one{# predlog}two{# predloga}few{# predlogi}other{# predlogov}}</translation>
 <translation id="2079545284768500474">Razveljavi</translation>
 <translation id="20817612488360358">Za uporabo so nastavljene sistemske nastavitve strežnika proxy, vendar je navedena tudi izrecna konfiguracija proxyja.</translation>
-<translation id="2084558088529668945">Vnesli ste geslo na spletnem mestu, ki ga ne upravlja <ph name="ORG_NAME" />. Zaradi zaščite računa gesla ne uporabljajte za druge aplikacije in spletna mesta.</translation>
 <translation id="2091887806945687916">Zvok</translation>
 <translation id="2094505752054353250">Neujemanje domen</translation>
 <translation id="2096368010154057602">Departma</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Neveljavni podpis za preverjanje</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Še <ph name="ITEM_COUNT" /> element}one{Še <ph name="ITEM_COUNT" /> element}two{Še <ph name="ITEM_COUNT" /> elementa}few{Še <ph name="ITEM_COUNT" /> elementi}other{Še <ph name="ITEM_COUNT" /> elementov}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome priporoča, da ponastavite geslo za <ph name="ORG_NAME" />, če ste ga uporabljali na drugih spletnih mestih.</translation>
 <translation id="4196861286325780578">&amp;Uveljavi premik</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />preveriti požarni zid in konfiguracije protivirusnega programa<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Zrušitve</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Zvezna država</translation>
 <translation id="5094747076828555589">Strežniku ni uspelo dokazati, da je <ph name="DOMAIN" />; Chromium ne zaupa njegovemu varnostnemu potrdilu. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave.</translation>
 <translation id="5095208057601539847">Provinca</translation>
+<translation id="5098332213681597508">To ime je iz vašega Google Računa.</translation>
 <translation id="5115563688576182185">(64-bitno)</translation>
 <translation id="5121084798328133320">Ko potrdite, bodo temu spletnemu mestu razkriti podatki o kreditni kartici iz računa za Google Payments.</translation>
 <translation id="5128122789703661928">Seja s tem imenom ni veljavna za izbris.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Napadalci na spletnem mestu <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> lahko poskusijo v vašem računalniku namestiti nevarne programe, ki kradejo ali brišejo podatke (na primer fotografije, gesla, sporočila in podatke kreditnih kartic). <ph name="BEGIN_LEARN_MORE_LINK" />Več o tem<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Zavajajoča vsebina blokirana.</translation>
 <translation id="5659593005791499971">E-pošta</translation>
+<translation id="5666899935841546222">Ali želite imeti vse kartice na enem mestu?</translation>
 <translation id="5675650730144413517">Ta stran ne deluje</translation>
 <translation id="5685654322157854305">Dodajanje naslova za pošiljanje</translation>
 <translation id="5689199277474810259">Izvozi v JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Tega spletnega mesta ni mogoče doseči</translation>
 <translation id="5869522115854928033">Shranjena gesla</translation>
 <translation id="5893752035575986141">Sprejema kreditne kartice.</translation>
-<translation id="5898382028489516745">Chromium priporoča, da ponastavite geslo za <ph name="ORG_NAME" />, če ste ga uporabljali tudi na drugih spletnih mestih.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (sinhronizirano)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 v uporabi}one{# v uporabi}two{# v uporabi}few{# v uporabi}other{# v uporabi}}</translation>
 <translation id="5939518447894949180">Ponastavi</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Prevod ni uspel, ker ni mogoče določiti jezika strani.</translation>
 <translation id="8557066899867184262">CVC je na zadnji strani kartice.</translation>
 <translation id="8559762987265718583">Zasebne povezave z domeno <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ni mogoče vzpostaviti, ker sta datum in ura (<ph name="DATE_AND_TIME" />) v napravi nepravilna.</translation>
+<translation id="8564985650692024650">Chromium priporoča, da ponastavite geslo za <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, če ste ga uporabljali tudi na drugih spletnih mestih.</translation>
 <translation id="8571890674111243710">Prevajanje strani v jezik <ph name="LANGUAGE" /> ...</translation>
 <translation id="858637041960032120">Dodajte tel. št. </translation>
 <translation id="859285277496340001">Potrdilo ne navaja mehanizma za preverjanje tega, ali je bilo preklicano.</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Naslov za pošiljanje</translation>
 <translation id="884923133447025588">Najden ni bil noben mehanizem za preklic.</translation>
 <translation id="885730110891505394">Deljenje z Googlom</translation>
+<translation id="8858065207712248076">Chrome priporoča, da ponastavite geslo za <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, če ste ga uporabljali na drugih spletnih mestih.</translation>
 <translation id="8866481888320382733">Napaka pri razčlenjevanju nastavitev pravilnika</translation>
 <translation id="8870413625673593573">Nedavno zaprto</translation>
 <translation id="8874824191258364635">Vnesite veljavno številko kartice</translation>
diff --git a/components/strings/components_strings_sr.xtb b/components/strings/components_strings_sr.xtb
index 2518002..92cade3a 100644
--- a/components/strings/components_strings_sr.xtb
+++ b/components/strings/components_strings_sr.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Наведите додатне детаље</translation>
 <translation id="1021110881106174305">Прихваћене картице</translation>
 <translation id="1032854598605920125">Окрените у смеру казаљке на сату</translation>
+<translation id="1035334672863811645">пријавите се у Chrome</translation>
 <translation id="1038842779957582377">непознато име</translation>
 <translation id="1050038467049342496">Затворите друге апликације</translation>
 <translation id="1055184225775184556">&amp;Опозови додавање</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 предлог}one{# предлог}few{# предлога}other{# предлога}}</translation>
 <translation id="2079545284768500474">Опозови</translation>
 <translation id="20817612488360358">Подешено је да се користе системска подешавања проксија, али је наведена експлицитна конфигурација проксија.</translation>
-<translation id="2084558088529668945">Унели сте лозинку на сајту којим не управља <ph name="ORG_NAME" />. Да бисте заштитили налог, не користите лозинку поново у другим апликацијама ни на другим сајтовима.</translation>
 <translation id="2091887806945687916">Звук</translation>
 <translation id="2094505752054353250">Домени се не подударају</translation>
 <translation id="2096368010154057602">Департман</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Неисправан потпис за верификацију</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{још <ph name="ITEM_COUNT" /> ставка}one{још <ph name="ITEM_COUNT" /> ставка}few{још <ph name="ITEM_COUNT" /> ставке}other{још <ph name="ITEM_COUNT" /> ставки}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome вам препоручује да ресетујете лозинку за <ph name="ORG_NAME" /> ако сте је користили на другим сајтовима.</translation>
 <translation id="4196861286325780578">&amp;Понови премештање</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />да проверите конфигурацију заштитног зида и антивируса<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Отказивања</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Држава</translation>
 <translation id="5094747076828555589">Овај сервер не може да докаже да је <ph name="DOMAIN" />; Chromium нема поверења у његов безбедносни сертификат. Узрок томе је можда погрешна конфигурација или нападач који је прекинуо везу.</translation>
 <translation id="5095208057601539847">Провинција</translation>
+<translation id="5098332213681597508">То је име са вашег Google налога.</translation>
 <translation id="5115563688576182185">(64-битни)</translation>
 <translation id="5121084798328133320">Када будете потврдили, подаци о картици са налога за Google плаћања ће бити послати овом сајту.</translation>
 <translation id="5128122789703661928">Сесија са овим називом није доступна за брисање.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Нападачи на <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> ће можда покушати да инсталирају опасне програме на рачунару који краду или бришу информације (на пример, слике, лозинке, поруке и бројеве кредитних картица). <ph name="BEGIN_LEARN_MORE_LINK" />Сазнајте више<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Обмањујући садржај је блокиран.</translation>
 <translation id="5659593005791499971">Имејл</translation>
+<translation id="5666899935841546222">Да ли желите да све картице буду на једном месту?</translation>
 <translation id="5675650730144413517">Ова страница не функционише</translation>
 <translation id="5685654322157854305">Додај адресу за испоруку</translation>
 <translation id="5689199277474810259">Извези у JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Овај сајт није доступан</translation>
 <translation id="5869522115854928033">Сачуване лозинке</translation>
 <translation id="5893752035575986141">Прихватају се кредитне картице.</translation>
-<translation id="5898382028489516745">Chromium вам препоручује да ресетујете лозинку за <ph name="ORG_NAME" /> ако сте је користили на другим сајтовима.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронизовано)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Користи се 1}one{Користи се #}few{Користе се #}other{Користи се #}}</translation>
 <translation id="5939518447894949180">Ресетуј</translation>
@@ -1039,6 +1039,7 @@
 <translation id="8553075262323480129">Превод није успео јер језик странице није могао да буде утврђен.</translation>
 <translation id="8557066899867184262">CVC је на полеђини картице.</translation>
 <translation id="8559762987265718583">Није могуће успоставити приватну везу са доменом <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> јер датум и време на уређају (<ph name="DATE_AND_TIME" />) нису тачни.</translation>
+<translation id="8564985650692024650">Chromium вам препоручује да ресетујете лозинку за <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ако сте је користили на другим сајтовима.</translation>
 <translation id="8571890674111243710">Превођење странице на <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Додај тел. број
 </translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">Адреса за слање</translation>
 <translation id="884923133447025588">Није пронађен ниједан механизам опозива.</translation>
 <translation id="885730110891505394">Дељење са Google-ом</translation>
+<translation id="8858065207712248076">Chrome вам препоручује да ресетујете лозинку за <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ако сте је користили на другим сајтовима.</translation>
 <translation id="8866481888320382733">Грешка при рашчлањивању подешавања смерница</translation>
 <translation id="8870413625673593573">Недавно затворено</translation>
 <translation id="8874824191258364635">Унесите важећи број картице</translation>
diff --git a/components/strings/components_strings_sv.xtb b/components/strings/components_strings_sv.xtb
index ff399a7..96c555b 100644
--- a/components/strings/components_strings_sv.xtb
+++ b/components/strings/components_strings_sv.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Ange ytterligare information</translation>
 <translation id="1021110881106174305">Godkända kort</translation>
 <translation id="1032854598605920125">Rotera medurs</translation>
+<translation id="1035334672863811645">Logga in i Chrome</translation>
 <translation id="1038842779957582377">okänt namn</translation>
 <translation id="1050038467049342496">Stäng andra appar</translation>
 <translation id="1055184225775184556">&amp;Ångra Lägg till</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 förslag}other{# förslag}}</translation>
 <translation id="2079545284768500474">Ångra</translation>
 <translation id="20817612488360358">Datorns proxyinställningar är inställda på att användas, men det finns också en explicit proxykonfiguration.</translation>
-<translation id="2084558088529668945">Du har angett ditt lösenord på en webbplats som inte hanteras av <ph name="ORG_NAME" />. Skydda kontot genom att inte återanvända lösenordet för andra appar och webbplatser.</translation>
 <translation id="2091887806945687916">Ljud</translation>
 <translation id="2094505752054353250">Domänen matchar inte</translation>
 <translation id="2096368010154057602">Departement</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Felaktig verifieringssignatur</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> objekt till}other{<ph name="ITEM_COUNT" /> objekt till}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Du rekommenderas att återställa lösenordet för <ph name="ORG_NAME" /> om du har återanvänt det på andra webbplatser.</translation>
 <translation id="4196861286325780578">&amp;Gör om Flytta</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />kontrollera konfigureringarna för brandväggen och antivirusprogram<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Kraschar</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Delstat</translation>
 <translation id="5094747076828555589">Servern kunde inte bevisa att den är <ph name="DOMAIN" /> eftersom Chromium inte litar på dess säkerhetscertifikat. Detta kan orsakas av en felaktig konfigurering eller att någon spärrar anslutningen.</translation>
 <translation id="5095208057601539847">Provins</translation>
+<translation id="5098332213681597508">Det här namnet har hämtats från Google-kontot.</translation>
 <translation id="5115563688576182185">(64 bitar)</translation>
 <translation id="5121084798328133320">När du bekräftar delas kortuppgifter från Google Payments-konto med webbplatsen.</translation>
 <translation id="5128122789703661928">Sessionen med det här namnet går inte att radera.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Angripare på <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> kan försöka installera skadliga program som stjäl eller raderar information (t.ex. foton, lösenord, meddelanden och kreditkortsuppgifter) på datorn. <ph name="BEGIN_LEARN_MORE_LINK" />Läs mer<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Bedrägligt innehåll har blockerats.</translation>
 <translation id="5659593005791499971">E-post</translation>
+<translation id="5666899935841546222">Vill du samla alla kort på ett ställe?</translation>
 <translation id="5675650730144413517">Sidan fungerar inte</translation>
 <translation id="5685654322157854305">Lägg till leveransadress</translation>
 <translation id="5689199277474810259">Exportera som JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Webbplatsen kan inte nås</translation>
 <translation id="5869522115854928033">Sparade lösenord</translation>
 <translation id="5893752035575986141">Kreditkort får användas.</translation>
-<translation id="5898382028489516745">Du rekommenderas att återställa lösenordet för <ph name="ORG_NAME" /> om du har återanvänt det på andra webbplatser.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (synkroniserade)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 används}other{# används}}</translation>
 <translation id="5939518447894949180">Återställ</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Det gick inte att översätta eftersom det inte gick att avgöra vilket språk som användes på sidan.</translation>
 <translation id="8557066899867184262">CVC-koden finns på baksidan av kortet.</translation>
 <translation id="8559762987265718583">Det gick inte att upprätta en privat anslutning till <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> eftersom enhetens datum och tid (<ph name="DATE_AND_TIME" />) inte stämmer.</translation>
+<translation id="8564985650692024650">Du rekommenderas att återställa lösenordet för <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> om du har återanvänt det på andra webbplatser.</translation>
 <translation id="8571890674111243710">Översätter sidan till <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Ange telefonnr
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Leveransadress</translation>
 <translation id="884923133447025588">Ingen återkallningsmekanism har hittats.</translation>
 <translation id="885730110891505394">Delar med Google</translation>
+<translation id="8858065207712248076">Du rekommenderas att återställa lösenordet för <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> om du har återanvänt det på andra webbplatser.</translation>
 <translation id="8866481888320382733">Det uppstod ett fel när policyinställningarna analyserades</translation>
 <translation id="8870413625673593573">Nyligen stängda</translation>
 <translation id="8874824191258364635">Ange ett giltigt kortnummer</translation>
diff --git a/components/strings/components_strings_sw.xtb b/components/strings/components_strings_sw.xtb
index cab7f31d..03032b2 100644
--- a/components/strings/components_strings_sw.xtb
+++ b/components/strings/components_strings_sw.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Toa maelezo ya ziada</translation>
 <translation id="1021110881106174305">Kadi zinazokubaliwa</translation>
 <translation id="1032854598605920125">Zungusha kwenye mwendo wa saa</translation>
+<translation id="1035334672863811645">ingia katika Chrome</translation>
 <translation id="1038842779957582377">jina lisilojulikana</translation>
 <translation id="1050038467049342496">Funga programu nyingine</translation>
 <translation id="1055184225775184556">Tendua Kuongeza</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{Pendekezo 1}other{Mapendekezo #}}</translation>
 <translation id="2079545284768500474">Tendua</translation>
 <translation id="20817612488360358">Mipangilio ya mfumo ya proksi imewekwa ili kutumiwa lakini usanidi dhahiri wa proksi pia umebainishwa.</translation>
-<translation id="2084558088529668945">Umeweka nenosiri kwenye tovuti ambayo haisimamiwi na <ph name="ORG_NAME" />. Ili ulinde akaunti yako, usitumie tena nenosiri lako kwenye tovuti na programu zingine.</translation>
 <translation id="2091887806945687916">Sauti</translation>
 <translation id="2094505752054353250">Kitolingana kwa kikoa</translation>
 <translation id="2096368010154057602">Idara</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Sahihi mbaya ya uthibitishaji</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{Kipengee kingine <ph name="ITEM_COUNT" />}other{Vipengee vingine <ph name="ITEM_COUNT" />}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome inapendekeza ubadilishe nenosiri lako la <ph name="ORG_NAME" /> ikiwa ulilitumia tena kwenye tovuti zingine.</translation>
 <translation id="4196861286325780578">Rudia hatua</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Kuangalia mipangilio ya kinga-mtandao na kinga-virusi<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Mivurugo</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Jimbo</translation>
 <translation id="5094747076828555589">Seva hii haikuweza kuthibitisha kuwa ni <ph name="DOMAIN" />; cheti chake cha usalama hakiaminiwi na Chromium. Hii inaweza kusababishwa na kusanidi kusikofaa au mvamizi kuingilia muunganisho wako.</translation>
 <translation id="5095208057601539847">Mkoa</translation>
+<translation id="5098332213681597508">Jina hili linatoka kwenye Akaunti yako ya Google.</translation>
 <translation id="5115563688576182185">(biti 64)</translation>
 <translation id="5121084798328133320">Baada ya kuthibitisha, maelezo ya kadi kutoka akaunti yako ya malipo ya Google yatashirikiwa na tovuti hii.</translation>
 <translation id="5128122789703661928">Huruhusiwi kufuta kipindi kilicho na jina hili.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Wavamizi ambao sasa wako kwenye <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> huenda wakajaribu kusakinisha programu hatari kwenye kompyuta yako ambazo zinaiba au kufuta maelezo yako (kwa mfano, picha, manenosiri, ujumbe na kadi za mikopo). <ph name="BEGIN_LEARN_MORE_LINK" />Pata maelezo zaidi<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Maudhui ya udanganyifu yamezuiwa.</translation>
 <translation id="5659593005791499971">Barua pepe</translation>
+<translation id="5666899935841546222">Ungependa kupata kadi zako zote katika sehemu moja?</translation>
 <translation id="5675650730144413517">Ukurasa huu haufanyi kazi</translation>
 <translation id="5685654322157854305">Ongeza mahali zitakapopelekwa</translation>
 <translation id="5689199277474810259">Tuma katika mfumo wa JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Imeshindwa kufungua tovuti hii</translation>
 <translation id="5869522115854928033">Manenosiri yaliyohifadhiwa</translation>
 <translation id="5893752035575986141">Kadi za mikopo zinakubaliwa.</translation>
-<translation id="5898382028489516745">Chromium inapendekeza ubadilishe nenosiri lako la <ph name="ORG_NAME" /> ikiwa ulilitumia tena kwenye tovuti zingine.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (imesawazishwa)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 kinatumika}other{ # vinatumika}}</translation>
 <translation id="5939518447894949180">Weka upya</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Tafsiri imeshindwa kwa sababu lugha ya ukurasa isingeweza kuthibitishwa.</translation>
 <translation id="8557066899867184262">CVC inapatikana nyuma ya kadi yako.</translation>
 <translation id="8559762987265718583">Muunganisho wa faragha kwenye <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> hauwezi kupatikana kwa sababu tarehe na wakati wa kifaa chako (<ph name="DATE_AND_TIME" />) si sahihi.</translation>
+<translation id="8564985650692024650">Chromium inapendekeza ubadilishe nenosiri lako la <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ikiwa ulilitumia tena kwenye tovuti zingine.</translation>
 <translation id="8571890674111243710">Inatafsiri ukurasa katika <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Ongeza simu
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Anwani ya kusafirisha</translation>
 <translation id="884923133447025588">Mbinu ya ubatilishaji haikupatikana.</translation>
 <translation id="885730110891505394">Kushiriki kwenye Google</translation>
+<translation id="8858065207712248076">Chrome inapendekeza ubadilishe nenosiri lako la <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> ikiwa ulilitumia tena kwenye tovuti zingine.</translation>
 <translation id="8866481888320382733">Hitilafu wakati wa kuchanganua mipangilio ya sera</translation>
 <translation id="8870413625673593573">Zilizofungwa Hivi Karibuni</translation>
 <translation id="8874824191258364635">Andika nambari sahihi ya kadi</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb
index 6c04cb39..77202cc 100644
--- a/components/strings/components_strings_ta.xtb
+++ b/components/strings/components_strings_ta.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">கூடுதல் விவரங்களை வழங்கவும்</translation>
 <translation id="1021110881106174305">ஏற்கப்படும் கார்டுகள்</translation>
 <translation id="1032854598605920125">கடிகாரத்திசையில் சுழற்று</translation>
+<translation id="1035334672863811645">Chrome இல் உள்நுழைக</translation>
 <translation id="1038842779957582377">அறியப்படாத பெயர்</translation>
 <translation id="1050038467049342496">பிற பயன்பாடுகளை மூடவும்</translation>
 <translation id="1055184225775184556">&amp;சேர்த்தலைச் செயல்தவிர்</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 பரிந்துரை}other{# பரிந்துரைகள்}}</translation>
 <translation id="2079545284768500474">செயல்தவிர்</translation>
 <translation id="20817612488360358">கணினி ப்ராக்ஸி அமைப்புகள் பயன்படுத்த அமைக்கப்பட்டுள்ளது. வெளிப்படையான ப்ராக்ஸி உள்ளமைவும் குறிப்பிடப்பட்டுள்ளது.</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" /> நிர்வகிக்காத தளத்தில் உங்கள் கடவுச்சொல்லை உள்ளிட்டுள்ளீர்கள். உங்கள் கணக்கைப் பாதுகாக்க, பிற பயன்பாடுகள் மற்றும் தளங்களில் உங்கள் கடவுச்சொல்லை மீண்டும் பயன்படுத்த வேண்டாம்.</translation>
 <translation id="2091887806945687916">ஒலி</translation>
 <translation id="2094505752054353250">டொமைன் பொருந்தவில்லை</translation>
 <translation id="2096368010154057602">துறை</translation>
@@ -454,7 +454,6 @@
 <translation id="4171400957073367226">தவறான சரிபார்ப்பு கையொப்பம்</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{மேலும் <ph name="ITEM_COUNT" /> உருப்படி}other{மேலும் <ph name="ITEM_COUNT" /> உருப்படிகள்}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">பிற தளங்களில் உங்கள் <ph name="ORG_NAME" /> கடவுச்சொல்லை மீண்டும் பயன்படுத்தினால், அதை மீட்டமைக்கும்படி Chrome பரிந்துரைக்கும்.</translation>
 <translation id="4196861286325780578">&amp;நகர்த்தலை மீண்டும் செய்</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ஃபயர்வால் மற்றும் ஆண்டிவைரஸ் உள்ளமைவைச் சரிபார்த்தல்<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">செயலிழப்புகள்</translation>
@@ -693,7 +692,6 @@
 <translation id="5869405914158311789">இந்தத் தளத்தை அணுக முடியவில்லை</translation>
 <translation id="5869522115854928033">சேமிக்கப்பட்ட கடவுச்சொற்கள்</translation>
 <translation id="5893752035575986141">கிரெடிட் கார்டுகள் ஏற்கப்படுகின்றன.</translation>
-<translation id="5898382028489516745">பிற தளங்களில் உங்கள் <ph name="ORG_NAME" /> கடவுச்சொல்லை மீண்டும் பயன்படுத்தினால், அதை மீட்டமைக்கும்படி Chromium பரிந்துரைக்கும்.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ஒத்திசைக்கப்பட்டது)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ஒரு குக்கீ பயன்படுத்தப்படுகிறது}other{# குக்கீகள் பயன்படுத்தப்படுகின்றன}}</translation>
 <translation id="5939518447894949180">மீட்டமை</translation>
@@ -1036,6 +1034,7 @@
 <translation id="8553075262323480129">பக்கத்தின் மொழியைத் தீர்மானிக்க முடியாததால் மொழிபெயர்ப்பு தோல்வியடைந்தது.</translation>
 <translation id="8557066899867184262">உங்கள் கார்டின் பின்புறத்தில் CVC எண் இருக்கும்.</translation>
 <translation id="8559762987265718583">உங்கள் சாதனத்தின் தேதி மற்றும் நேரம் (<ph name="DATE_AND_TIME" />) தவறாக உள்ளதால் <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> க்கான தனிப்பட்ட இணைப்பை ஏற்படுத்த முடியவில்லை.</translation>
+<translation id="8564985650692024650">பிற தளங்களில் உங்கள் <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> கடவுச்சொல்லை மீண்டும் பயன்படுத்தினால், அதை மீட்டமைக்கும்படி Chromium பரிந்துரைக்கிறது.</translation>
 <translation id="8571890674111243710"><ph name="LANGUAGE" /> க்கு பக்கத்தை மொழிபெயர்க்கிறது...</translation>
 <translation id="858637041960032120">தொலைபேசி எண்</translation>
 <translation id="859285277496340001">இந்த சான்றிதழ் திரும்பப்பெறப்பட்டதா என்பதைச் சரிபார்ப்பதற்கான செயல்முறை இதில் இல்லை.</translation>
@@ -1064,6 +1063,7 @@
 <translation id="884264119367021077">ஷிப்பிங் முகவரி</translation>
 <translation id="884923133447025588">திரும்பப்பெறுதல் செயல்முறை காணப்படவில்லை.</translation>
 <translation id="885730110891505394">Google உடன் பகிர்பவை</translation>
+<translation id="8858065207712248076">பிற தளங்களில் உங்கள் <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> கடவுச்சொல்லை மீண்டும் பயன்படுத்தினால், அதை மீட்டமைக்கும்படி Chrome பரிந்துரைக்கிறது.</translation>
 <translation id="8866481888320382733">கொள்கை அமைப்புகளை அலசுவதில் பிழை</translation>
 <translation id="8870413625673593573">சமீபத்தில் மூடியவை</translation>
 <translation id="8874824191258364635">சரியான கார்டு எண்ணை உள்ளிடவும்</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb
index cbae0173..140e3c9 100644
--- a/components/strings/components_strings_te.xtb
+++ b/components/strings/components_strings_te.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">అదనపు వివరాలను అందించండి</translation>
 <translation id="1021110881106174305">ఆమోదించబడే కార్డ్‌లు</translation>
 <translation id="1032854598605920125">సవ్యదిశలో తిప్పు</translation>
+<translation id="1035334672863811645">Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="1038842779957582377">తెలియని పేరు</translation>
 <translation id="1050038467049342496">ఇతర అనువర్తనాలను మూసివేయండి</translation>
 <translation id="1055184225775184556">&amp;జోడించడాన్ని రద్దు చేయి</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 సూచన}other{# సూచనలు}}</translation>
 <translation id="2079545284768500474">చర్య రద్దు</translation>
 <translation id="20817612488360358">సిస్టమ్ ప్రాక్సీ సెట్టింగ్‌లు ఉపయోగించడానికి సెట్ చేయబడ్డాయి కానీ స్పష్టమైన ప్రాక్సీ కాన్ఫిగరేషన్ కూడా పేర్కొనబడింది.</translation>
-<translation id="2084558088529668945"><ph name="ORG_NAME" /> నిర్వహించని ఒక సైట్‌లో మీరు మీ పాస్‌వర్డ్‌ని నమోదు చేసారు. మీ ఖాతాని రక్షించాలంటే, ఇతర యాప్‌లు మరియు సైట్‌లలో మీ పాస్‌వర్డ్‌ని తిరిగి ఉపయోగించవద్దు.</translation>
 <translation id="2091887806945687916">ధ్వని</translation>
 <translation id="2094505752054353250">డొమైన్ సరిపోలలేదు</translation>
 <translation id="2096368010154057602">శాఖ</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">ధృవీకరణ సంతకం చెల్లదు</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{మరో <ph name="ITEM_COUNT" /> అంశం}other{మరో <ph name="ITEM_COUNT" /> అంశాలు}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">మీరు మీ <ph name="ORG_NAME" /> పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించి ఉంటే దీనిని రీసెట్ చేయాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="4196861286325780578">&amp;తరలించడాన్ని పునరావృతం చేయి</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ఫైర్‌వాల్ మరియు యాంటీవైరస్ కాన్ఫిగరేషన్‌లను తనిఖీ చేయడం<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">క్రాష్‌లు</translation>
@@ -696,7 +695,6 @@
 <translation id="5869405914158311789">ఈ సైట్‌ను చేరుకోలేకపోయాము</translation>
 <translation id="5869522115854928033">సేవ్  చేసిన పాస్‌వర్డ్‌లు</translation>
 <translation id="5893752035575986141">క్రెడిట్ కార్డ్‌లు ఆమోదించబడతాయి.</translation>
-<translation id="5898382028489516745">మీరు మీ <ph name="ORG_NAME" /> పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించి ఉంటే దీనిని రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (సమకాలీకరించబడింది)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 వినియోగంలో ఉంది}other{# వినియోగంలో ఉన్నాయి}}</translation>
 <translation id="5939518447894949180">రీసెట్ చేయి</translation>
@@ -1039,6 +1037,7 @@
 <translation id="8553075262323480129">పేజీ భాష నిర్థారించలేకపోయినందున అనువాదం విఫలమైంది.</translation>
 <translation id="8557066899867184262">మీ కార్డు వెనుకవైపు CVC ఉంటుంది.</translation>
 <translation id="8559762987265718583">మీ పరికరం తేదీ మరియు సమయం (<ph name="DATE_AND_TIME" />) తప్పుగా ఉన్నందున <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />కి ప్రైవేట్ కనెక్షన్ ఏర్పాటు చేయబడదు.</translation>
+<translation id="8564985650692024650">మీరు మీ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించినట్లయితే దీనిని రీసెట్ చేయాల్సిందిగా Chromium సిఫార్సు చేస్తోంది.</translation>
 <translation id="8571890674111243710">పేజీని <ph name="LANGUAGE" />కు అనువదిస్తోంది...</translation>
 <translation id="858637041960032120">ఫోన్ నం. జోడిం.
 </translation>
@@ -1067,6 +1066,7 @@
 <translation id="884264119367021077">షిప్పింగ్ చిరునామా</translation>
 <translation id="884923133447025588">ఏ రద్దు విధానం కనుగొనబడలేదు.</translation>
 <translation id="885730110891505394">Googleతో భాగస్వామ్యం</translation>
+<translation id="8858065207712248076">మీరు మీ <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> పాస్‌వర్డ్‌ని ఇతర సైట్‌లలో తిరిగి ఉపయోగించినట్లయితే దీనిని రీసెట్ చేయాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation>
 <translation id="8866481888320382733">విధాన సెట్టింగ్‌లను అన్వయించడంలో లోపం</translation>
 <translation id="8870413625673593573">ఇటీవల మూసివేసినవి</translation>
 <translation id="8874824191258364635">చెల్లుబాటు అయ్యే కార్డ్ నంబర్‌ను నమోదు చేయండి</translation>
diff --git a/components/strings/components_strings_th.xtb b/components/strings/components_strings_th.xtb
index 25edbebe..94a5664b 100644
--- a/components/strings/components_strings_th.xtb
+++ b/components/strings/components_strings_th.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">ให้รายละเอียดเพิ่มเติม</translation>
 <translation id="1021110881106174305">บัตรที่ยอมรับ</translation>
 <translation id="1032854598605920125">หมุนตามเข็มนาฬิกา</translation>
+<translation id="1035334672863811645">ลงชื่อเข้าใช้ Chrome</translation>
 <translation id="1038842779957582377">ไม่ทราบชื่อ</translation>
 <translation id="1050038467049342496">ปิดแอปอื่นๆ</translation>
 <translation id="1055184225775184556">&amp;เลิกทำการเพิ่ม</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 คำแนะนำ}other{# คำแนะนำ}}</translation>
 <translation id="2079545284768500474">เลิกทำ</translation>
 <translation id="20817612488360358">มีการกำหนดให้ใช้การตั้งค่าพร็อกซีระบบ แต่ก็มีการระบุการกำหนดค่าพร็อกซีอย่างชัดเจนไว้ด้วยเช่นกัน</translation>
-<translation id="2084558088529668945">คุณป้อนรหัสผ่านในเว็บไซต์ที่ <ph name="ORG_NAME" /> ไม่ได้จัดการ เพื่อปกป้องบัญชี โปรดอย่าใช้รหัสผ่านซ้ำในแอปและเว็บไซต์อื่นๆ</translation>
 <translation id="2091887806945687916">เสียง</translation>
 <translation id="2094505752054353250">โดเมนไม่ตรง</translation>
 <translation id="2096368010154057602">จังหวัด</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">ลายเซ็นยืนยันไม่ถูกต้อง</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{อีก <ph name="ITEM_COUNT" /> รายการ}other{อีก <ph name="ITEM_COUNT" /> รายการ}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome ขอแนะนำให้รีเซ็ตรหัสผ่าน <ph name="ORG_NAME" /> หากคุณใช้รหัสผ่านนี้ซ้ำในเว็บไซต์อื่น</translation>
 <translation id="4196861286325780578">&amp;ทำซ้ำการย้าย</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />ตรวจสอบไฟร์วอลล์และการกำหนดค่าการป้องกันไวรัส<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">การขัดข้อง</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">รัฐ</translation>
 <translation id="5094747076828555589">เซิร์ฟเวอร์นี้ไม่สามารถพิสูจน์ได้ว่าเป็น <ph name="DOMAIN" /> เพราะ Chromium ไม่เชื่อถือใบรับรองความปลอดภัย โดยอาจเกิดจากการกำหนดค่าผิดหรือผู้บุกรุกที่ขัดขวางการเชื่อมต่อของคุณ</translation>
 <translation id="5095208057601539847">จังหวัด</translation>
+<translation id="5098332213681597508">ชื่อนี้มาจากบัญชี Google ของคุณ</translation>
 <translation id="5115563688576182185">(64 บิต)</translation>
 <translation id="5121084798328133320">เมื่อยืนยันแล้ว ระบบจะแชร์รายละเอียดของบัตรจากบัญชี Google Payments กับเว็บไซต์นี้</translation>
 <translation id="5128122789703661928">ลบเซสชันที่ใช้ชื่อนี้ไม่ได้</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">ผู้โจมตีที่กำลังอยู่ใน <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> อาจพยายามติดตั้งโปรแกรมอันตรายซึ่งจะขโมยหรือลบข้อมูล (ตัวอย่างเช่น รูปภาพ รหัสผ่าน ข้อความ และบัตรเครดิต) ลงในคอมพิวเตอร์ของคุณ <ph name="BEGIN_LEARN_MORE_LINK" />ดูข้อมูลเพิ่มเติม<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">บล็อกเนื้อหาที่หลอกลวงแล้ว</translation>
 <translation id="5659593005791499971">อีเมล</translation>
+<translation id="5666899935841546222">คุณต้องการเก็บบัตรทั้งหมดไว้ในที่เดียวไหม</translation>
 <translation id="5675650730144413517">หน้านี้ใช้ไม่ได้</translation>
 <translation id="5685654322157854305">เพิ่มที่อยู่สำหรับจัดส่ง</translation>
 <translation id="5689199277474810259">ส่งออกไปยัง JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">ไม่สามารถเข้าถึงเว็บไซต์นี้</translation>
 <translation id="5869522115854928033">รหัสผ่านที่บันทึกไว้</translation>
 <translation id="5893752035575986141">รับบัตรเครดิต</translation>
-<translation id="5898382028489516745">Chromium ขอแนะนำให้รีเซ็ตรหัสผ่าน <ph name="ORG_NAME" /> หากคุณใช้รหัสผ่านนี้ซ้ำในเว็บไซต์อื่น</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (ซิงค์แล้ว)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{ใช้งานอยู่ 1 รายการ}other{ใช้งานอยู่ # รายการ}}</translation>
 <translation id="5939518447894949180">รีเซ็ต</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">การแปลล้มเหลวเนื่องจากไม่สามารถระบุภาษาของหน้าเว็บนี้ได้</translation>
 <translation id="8557066899867184262">CVC จะอยู่ที่ด้านหลังบัตร</translation>
 <translation id="8559762987265718583">ไม่สามารถเริ่มการเชื่อมต่อส่วนตัวกับ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ได้เนื่องจากวันที่และเวลาของอุปกรณ์ (<ph name="DATE_AND_TIME" />) ไม่ถูกต้อง</translation>
+<translation id="8564985650692024650">Chromium ขอแนะนำให้รีเซ็ตรหัสผ่าน <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> หากคุณใช้รหัสผ่านนี้ซ้ำในเว็บไซต์อื่น</translation>
 <translation id="8571890674111243710">กำลังแปลหน้าเว็บนี้เป็นภาษา<ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">เพิ่มเบอร์โทร
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">ที่อยู่จัดส่ง</translation>
 <translation id="884923133447025588">ไม่พบกระบวนการเพิกถอน</translation>
 <translation id="885730110891505394">การแชร์กับ Google</translation>
+<translation id="8858065207712248076">Chrome ขอแนะนำให้รีเซ็ตรหัสผ่าน <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> หากคุณใช้รหัสผ่านนี้ซ้ำในเว็บไซต์อื่น</translation>
 <translation id="8866481888320382733">ข้อผิดพลาดในการแยกวิเคราะห์การตั้งค่านโยบาย</translation>
 <translation id="8870413625673593573">เพิ่งปิด</translation>
 <translation id="8874824191258364635">ป้อนหมายเลขบัตรที่ถูกต้อง</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb
index 79ebd37..28a06d4 100644
--- a/components/strings/components_strings_tr.xtb
+++ b/components/strings/components_strings_tr.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Diğer ayrıntıları sağlayın</translation>
 <translation id="1021110881106174305">Kabul edilen kartlar</translation>
 <translation id="1032854598605920125">Saat yönünde döndür</translation>
+<translation id="1035334672863811645">Chrome'da oturum açın</translation>
 <translation id="1038842779957582377">bilinmeyen ad</translation>
 <translation id="1050038467049342496">Diğer uygulamaları kapatın</translation>
 <translation id="1055184225775184556">Eklemeyi &amp;Geri Al</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 öneri}other{# öneri}}</translation>
 <translation id="2079545284768500474">Geri al</translation>
 <translation id="20817612488360358">Sistem proxy ayarları kullanılmak üzere ayarlandı, ancak açık bir proxy yapılandırması da belirtildi.</translation>
-<translation id="2084558088529668945">Şifrenizi <ph name="ORG_NAME" /> tarafından yönetilmeyen bir sitede girdiniz. Hesabınızı korumak için şifrenizi diğer uygulama ve sitelerde tekrar kullanmayın.</translation>
 <translation id="2091887806945687916">Ses</translation>
 <translation id="2094505752054353250">Alan adı uyuşmazlığı</translation>
 <translation id="2096368010154057602">Bölüm</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Geçersiz doğrulama imzası</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> öğe daha}other{<ph name="ITEM_COUNT" /> öğe daha}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome, <ph name="ORG_NAME" /> şifrenizi başka sitelerde kullandıysanız sıfırlamanızı önerir.</translation>
 <translation id="4196861286325780578">Taşımayı &amp;yeniden yap</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Güvenlik duvarı ve virüsten korunma yapılandırmalarını kontrol etme<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Kilitlenmeler</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Eyalet</translation>
 <translation id="5094747076828555589">Bu sunucu <ph name="DOMAIN" /> olduğunu kanıtlayamadı; Chromium, sunucunun güvenlik sertifikasına güvenmiyor. Bu durum, bir yanlış yapılandırmadan veya bağlantıya müdahale eden bir saldırgandan kaynaklanıyor olabilir.</translation>
 <translation id="5095208057601539847">Bölge</translation>
+<translation id="5098332213681597508">Bu ad Google Hesabınızdan gelmektedir.</translation>
 <translation id="5115563688576182185">(64 bit)</translation>
 <translation id="5121084798328133320">Onayladığınızda Google Payments hesabınızdaki kart bilgileriniz bu siteyle paylaşılır.</translation>
 <translation id="5128122789703661928">Silmek üzere gönderilen bu oturum adı geçerli değil.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Şu anda <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> sitesindeki saldırganlar, bilgilerinizi (örneğin, fotoğraflar, şifreler, mesajlar ve kredi kartları) çalabilecek veya silebilecek tehlikeli programları bilgisayarınıza yüklemeye çalışabilir. <ph name="BEGIN_LEARN_MORE_LINK" />Daha fazla bilgi<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Yanıltıcı içerik engellendi.</translation>
 <translation id="5659593005791499971">E-posta</translation>
+<translation id="5666899935841546222">Tüm kartlarınızı tek bir yerde tutmak istiyor musunuz?</translation>
 <translation id="5675650730144413517">Bu sayfa çalışmıyor</translation>
 <translation id="5685654322157854305">Gönderim Adresi Ekle</translation>
 <translation id="5689199277474810259">JSON'a aktar</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Bu siteye ulaşılamıyor</translation>
 <translation id="5869522115854928033">Kayıtlı şifreler</translation>
 <translation id="5893752035575986141">Kredi kartları kabul edilir.</translation>
-<translation id="5898382028489516745">Chromium, <ph name="ORG_NAME" /> şifrenizi başka sitelerde kullandıysanız sıfırlamanızı önerir.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (senkronize edildi)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{1 çerez kullanımda}other{# çerez kullanımda}}</translation>
 <translation id="5939518447894949180">Sıfırla</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Sayfanın dili belirlenemediğinden çeviri başarısız oldu.</translation>
 <translation id="8557066899867184262">CVC, kartınızın arkasında bulunur.</translation>
 <translation id="8559762987265718583">Cihazınızın tarih ve saati (<ph name="DATE_AND_TIME" />) yanlış olduğundan <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> alan adına gizli bir bağlantı kurulamıyor.</translation>
+<translation id="8564985650692024650">Chromium, <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> şifrenizi başka sitelerde kullandıysanız sıfırlamanızı önerir.</translation>
 <translation id="8571890674111243710">Sayfa <ph name="LANGUAGE" /> diline çevriliyor...</translation>
 <translation id="858637041960032120">Telefon no ekle
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Gönderim adresi</translation>
 <translation id="884923133447025588">İptal mekanizması bulunamadı.</translation>
 <translation id="885730110891505394">Google ile Paylaşma</translation>
+<translation id="8858065207712248076">Chrome, <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> şifrenizi başka sitelerde kullandıysanız sıfırlamanızı önerir.</translation>
 <translation id="8866481888320382733">Politika ayarlarını ayrıştırma hatası</translation>
 <translation id="8870413625673593573">Son Kapatılan</translation>
 <translation id="8874824191258364635">Geçerli bir kart numarası girin</translation>
diff --git a/components/strings/components_strings_uk.xtb b/components/strings/components_strings_uk.xtb
index 2728435a..1c3ae1c 100644
--- a/components/strings/components_strings_uk.xtb
+++ b/components/strings/components_strings_uk.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Надати додаткову інформацію</translation>
 <translation id="1021110881106174305">Прийняті картки</translation>
 <translation id="1032854598605920125">Обернути за годинниковою стрілкою</translation>
+<translation id="1035334672863811645">увійдіть в обліковий запис Chrome</translation>
 <translation id="1038842779957582377">Невідоме ім’я</translation>
 <translation id="1050038467049342496">Закрийте інші додатки</translation>
 <translation id="1055184225775184556">&amp;Відмінити додавання</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 пропозиція}one{# пропозиція}few{# пропозиції}many{# пропозицій}other{# пропозиції}}</translation>
 <translation id="2079545284768500474">Відмінити</translation>
 <translation id="20817612488360358">Системні параметри проксі-сервера налаштовано для використання, але чітко вказано налаштування проксі-сервера.</translation>
-<translation id="2084558088529668945">Ви ввели пароль на сайті, яким не керує <ph name="ORG_NAME" />. Щоб захистити свій обліковий запис, не використовуйте цей пароль для інших додатків і сайтів.</translation>
 <translation id="2091887806945687916">Сигнал</translation>
 <translation id="2094505752054353250">Невідповідність домену</translation>
 <translation id="2096368010154057602">Департамент</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Недійсний підпис для підтвердження</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{ще <ph name="ITEM_COUNT" /> елемент}one{ще <ph name="ITEM_COUNT" /> елемент}few{ще <ph name="ITEM_COUNT" /> елементи}many{ще <ph name="ITEM_COUNT" /> елементів}other{ще <ph name="ITEM_COUNT" /> елемента}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome радить скинути пароль, який приймає <ph name="ORG_NAME" />, якщо ви використовували його на інших сайтах.</translation>
 <translation id="4196861286325780578">&amp;Повторити переміщення</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />перевірити конфігурацію брандмауера й антивірусної програми<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Збої в роботі</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">Штат</translation>
 <translation id="5094747076828555589">Цей сервер не зміг довести, що він – домен <ph name="DOMAIN" />. Chromium не вважає його сертифікат безпеки надійним. Імовірні причини: неправильна конфігурація або хтось намагається перехопити ваше з’єднання.</translation>
 <translation id="5095208057601539847">Провінція чи область</translation>
+<translation id="5098332213681597508">Це ім’я з вашого облікового запису Google.</translation>
 <translation id="5115563688576182185">(64-розрядна версія)</translation>
 <translation id="5121084798328133320">Щойно ви підтвердите дані картки з облікового запису Google Payments, цей сайт отримає доступ до них.</translation>
 <translation id="5128122789703661928">Сеанс із цією назвою не можна видалити.</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">Зловмисники на сайті <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> можуть установити на ваш комп’ютер небезпечні програми, що викрадають або видаляють інформацію (як-от фотографії, паролі, повідомлення та дані кредитних карток). <ph name="BEGIN_LEARN_MORE_LINK" />Докладніше<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">Заблоковано оманливий вміст.</translation>
 <translation id="5659593005791499971">Електронна пошта</translation>
+<translation id="5666899935841546222">Хочете зберігати всі свої картки в одному додатку?</translation>
 <translation id="5675650730144413517">Сторінка не працює</translation>
 <translation id="5685654322157854305">Додати адресу доставки</translation>
 <translation id="5689199277474810259">Експортувати у формат JSON</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">Немає зв’язку із сайтом</translation>
 <translation id="5869522115854928033">Збережені паролі</translation>
 <translation id="5893752035575986141">Кредитні картки, які приймаються.</translation>
-<translation id="5898382028489516745">Chromium радить скинути пароль, який приймає <ph name="ORG_NAME" />, якщо ви використовували його на інших сайтах.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (синхронізовано)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Використовується 1 файл}one{Використовується # файл}few{Використовуються # файли}many{Використовуються # файлів}other{Використовуються # файлу}}</translation>
 <translation id="5939518447894949180">Скинути</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">Помилка перекладу. Неможливо визначити мову сторінки.</translation>
 <translation id="8557066899867184262">Код CVC розташований на зворотному боці картки.</translation>
 <translation id="8559762987265718583">Не вдається встановити конфіденційне з’єднання з <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" />, оскільки на пристрої встановлено неправильні дату й час (<ph name="DATE_AND_TIME" />).</translation>
+<translation id="8564985650692024650">Chromium радить скинути пароль <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, якщо ви застосовували його на інших сайтах.</translation>
 <translation id="8571890674111243710">Виконується переклад сторінки такою мовою: <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Додати тел.номер
 </translation>
@@ -1069,6 +1070,7 @@
 <translation id="884264119367021077">Адреса доставки</translation>
 <translation id="884923133447025588">Не знайдено механізм відкликання.</translation>
 <translation id="885730110891505394">Надання інформації службам Google</translation>
+<translation id="8858065207712248076">Chrome радить скинути пароль <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" />, якщо ви застосовували його на інших сайтах.</translation>
 <translation id="8866481888320382733">Помилка аналізу налаштувань правила</translation>
 <translation id="8870413625673593573">Нещодавно закриті</translation>
 <translation id="8874824191258364635">Введіть дійсний номер картки</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb
index 8580488..35c4a92 100644
--- a/components/strings/components_strings_vi.xtb
+++ b/components/strings/components_strings_vi.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">Cung cấp chi tiết bổ sung</translation>
 <translation id="1021110881106174305">Thẻ được chấp nhận</translation>
 <translation id="1032854598605920125">Xoay theo chiều kim đồng hồ</translation>
+<translation id="1035334672863811645">đăng nhập vào Chrome</translation>
 <translation id="1038842779957582377">tên không biết</translation>
 <translation id="1050038467049342496">Đóng các ứng dụng khác</translation>
 <translation id="1055184225775184556">&amp;Hoàn tác thêm</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 đề xuất}other{# đề xuất}}</translation>
 <translation id="2079545284768500474">Hoàn tác</translation>
 <translation id="20817612488360358">Cài đặt proxy hệ thống được đặt để sử dụng nhưng cấu hình proxy rõ ràng cũng được chỉ định.</translation>
-<translation id="2084558088529668945">Bạn đã nhập mật khẩu của mình trên một trang web không phải do <ph name="ORG_NAME" /> quản lý. Để bảo vệ tài khoản, không sử dụng lại mật khẩu của bạn trên các ứng dụng và trang web khác.</translation>
 <translation id="2091887806945687916">Âm thanh</translation>
 <translation id="2094505752054353250">Miền không khớp</translation>
 <translation id="2096368010154057602">Khu hành chính</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">Chữ ký xác minh không hợp lệ</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{<ph name="ITEM_COUNT" /> mục khác}other{<ph name="ITEM_COUNT" /> mục khác}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">Chrome khuyên bạn nên đặt lại mật khẩu <ph name="ORG_NAME" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
 <translation id="4196861286325780578">&amp;Làm lại di chuyển</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />Kiểm tra tường lửa và cấu hình diệt vi-rút<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">Sự cố</translation>
@@ -696,7 +695,6 @@
 <translation id="5869405914158311789">Không thể truy cập trang web này</translation>
 <translation id="5869522115854928033">Mật khẩu đã lưu</translation>
 <translation id="5893752035575986141">Thẻ tín dụng được chấp nhận.</translation>
-<translation id="5898382028489516745">Chromium khuyên bạn nên đặt lại mật khẩu <ph name="ORG_NAME" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (được đồng bộ hóa)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{Đang sử dụng 1 cookie}other{Đang sử dụng # cookie}}</translation>
 <translation id="5939518447894949180">Đặt lại</translation>
@@ -1040,6 +1038,7 @@
 <translation id="8553075262323480129">Dịch thất bại do ngôn ngữ của trang không được xác định.</translation>
 <translation id="8557066899867184262">CVC nằm ở mặt sau thẻ của bạn.</translation>
 <translation id="8559762987265718583">Không thể thiết lập kết nối riêng tư với <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> vì ngày và giờ (<ph name="DATE_AND_TIME" />) trên thiết bị của bạn không đúng.</translation>
+<translation id="8564985650692024650">Chromium khuyên bạn nên đặt lại mật khẩu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
 <translation id="8571890674111243710">Đang dịch trang sang <ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">Thêm số đ.thoại
 </translation>
@@ -1069,6 +1068,7 @@
 <translation id="884264119367021077">Ðịa chỉ giao hàng</translation>
 <translation id="884923133447025588">Không tìm thấy cơ chế thu hồi.</translation>
 <translation id="885730110891505394">Chia sẻ với Google</translation>
+<translation id="8858065207712248076">Chrome khuyên bạn nên đặt lại mật khẩu <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> của mình nếu đã sử dụng lại mật khẩu này trên các trang web khác.</translation>
 <translation id="8866481888320382733">Lỗi phân tích cú pháp cài đặt chính sách</translation>
 <translation id="8870413625673593573">Các tab đã Đóng gần đây</translation>
 <translation id="8874824191258364635">Nhập số thẻ hợp lệ</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb
index 3b9c812..133b773 100644
--- a/components/strings/components_strings_zh-CN.xtb
+++ b/components/strings/components_strings_zh-CN.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">提供其他详细信息</translation>
 <translation id="1021110881106174305">接受的信用卡</translation>
 <translation id="1032854598605920125">顺时针旋转</translation>
+<translation id="1035334672863811645">登录 Chrome</translation>
 <translation id="1038842779957582377">未知名称</translation>
 <translation id="1050038467049342496">关闭其他应用</translation>
 <translation id="1055184225775184556">撤消添加(&amp;U)</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 条建议}other{# 条建议}}</translation>
 <translation id="2079545284768500474">撤消</translation>
 <translation id="20817612488360358">已设置为使用系统代理设置,但同时指定了一个明确的代理配置。</translation>
-<translation id="2084558088529668945">您在一个不受 <ph name="ORG_NAME" /> 管理的网站上输入了您的密码。为了保护您的帐号,请不要在其他应用和网站上重复使用您的密码。</translation>
 <translation id="2091887806945687916">声音</translation>
 <translation id="2094505752054353250">网域不匹配</translation>
 <translation id="2096368010154057602">省</translation>
@@ -454,7 +454,6 @@
 <translation id="4171400957073367226">验证签名无效</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{另外 <ph name="ITEM_COUNT" /> 项}other{另外 <ph name="ITEM_COUNT" /> 项}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> - <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">如果您在其他网站上重复使用了您的 <ph name="ORG_NAME" /> 密码,Chrome 建议您重置该密码。</translation>
 <translation id="4196861286325780578">恢复移动(&amp;R)</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />检查防火墙和防病毒配置<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">崩溃</translation>
@@ -693,7 +692,6 @@
 <translation id="5869405914158311789">无法访问此网站</translation>
 <translation id="5869522115854928033">已保存的密码</translation>
 <translation id="5893752035575986141">接受信用卡。</translation>
-<translation id="5898382028489516745">如果您在其他网站上重复使用了您的 <ph name="ORG_NAME" /> 密码,Chromium 建议您重置该密码。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" />(已同步)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{正在使用 1 个}other{正在使用 # 个}}</translation>
 <translation id="5939518447894949180">重置</translation>
@@ -1036,6 +1034,7 @@
 <translation id="8553075262323480129">系统无法确定该网页的语言,因此无法进行翻译。</translation>
 <translation id="8557066899867184262">银行卡验证码 (CVC) 位于银行卡背面。</translation>
 <translation id="8559762987265718583">您设备的日期和时间(<ph name="DATE_AND_TIME" />)不正确,因此无法与 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私密连接。</translation>
+<translation id="8564985650692024650">如果您在其他网站上重复使用了您的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密码,Chromium 建议您重置该密码。</translation>
 <translation id="8571890674111243710">正在将网页翻译成<ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">添加电话号码
 </translation>
@@ -1065,6 +1064,7 @@
 <translation id="884264119367021077">送货地址</translation>
 <translation id="884923133447025588">未找到任何吊销机制。</translation>
 <translation id="885730110891505394">与 Google 分享</translation>
+<translation id="8858065207712248076">如果您在其他网站上重复使用了您的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密码,Chrome 建议您重置该密码。</translation>
 <translation id="8866481888320382733">解析策略设置时出错</translation>
 <translation id="8870413625673593573">最近关闭的标签页</translation>
 <translation id="8874824191258364635">请输入有效的信用卡号</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb
index 8a3fd59..2b71fb6 100644
--- a/components/strings/components_strings_zh-TW.xtb
+++ b/components/strings/components_strings_zh-TW.xtb
@@ -6,6 +6,7 @@
 <translation id="1015730422737071372">提供其他詳細資訊</translation>
 <translation id="1021110881106174305">接受的信用卡</translation>
 <translation id="1032854598605920125">順時針旋轉</translation>
+<translation id="1035334672863811645">登入 Chrome</translation>
 <translation id="1038842779957582377">不明名稱</translation>
 <translation id="1050038467049342496">關閉其他應用程式</translation>
 <translation id="1055184225775184556">復原新增(&amp;U)</translation>
@@ -164,7 +165,6 @@
 <translation id="2064691555167957331">{COUNT,plural, =1{1 個建議項目}other{# 個建議項目}}</translation>
 <translation id="2079545284768500474">復原</translation>
 <translation id="20817612488360358">雖然系統 Proxy 設定已設為使用,不過也指定了明確 Proxy 設定。</translation>
-<translation id="2084558088529668945">你在不是由 <ph name="ORG_NAME" /> 管理的網站上輸入了你的密碼。為確保帳戶安全,請勿在其他應用程式和網站上重複使用你的密碼。</translation>
 <translation id="2091887806945687916">音訊</translation>
 <translation id="2094505752054353250">網域不符</translation>
 <translation id="2096368010154057602">省</translation>
@@ -457,7 +457,6 @@
 <translation id="4171400957073367226">驗證簽名無效</translation>
 <translation id="4173827307318847180">{MORE_ITEMS,plural, =1{還有另外 <ph name="ITEM_COUNT" /> 個項目}other{還有另外 <ph name="ITEM_COUNT" /> 個項目}}</translation>
 <translation id="4179515394835346607"><ph name="ROW_NAME" /> <ph name="ROW_CONTENT" /></translation>
-<translation id="4192549185358213268">如果你在其他網站上重複使用過你的 <ph name="ORG_NAME" /> 密碼,Chrome 建議你重設密碼。</translation>
 <translation id="4196861286325780578">重做移動(&amp;R)</translation>
 <translation id="4203896806696719780"><ph name="BEGIN_LINK" />檢查防火牆和防毒軟體設定<ph name="END_LINK" /></translation>
 <translation id="4220128509585149162">當機</translation>
@@ -585,6 +584,7 @@
 <translation id="5089810972385038852">州</translation>
 <translation id="5094747076828555589">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證未取得 Chromium 的信任。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation>
 <translation id="5095208057601539847">省</translation>
+<translation id="5098332213681597508">這是你在 Google 帳戶中設定的名稱。</translation>
 <translation id="5115563688576182185">(64 位元)</translation>
 <translation id="5121084798328133320">完成驗證後,這個網站就會取得你 Google 付款帳戶中的信用卡詳細資料。</translation>
 <translation id="5128122789703661928">無法將使用這個名稱的工作階段刪除。</translation>
@@ -670,6 +670,7 @@
 <translation id="5633066919399395251">攻擊者目前可能會試圖透過 <ph name="BEGIN_BOLD" /><ph name="SITE" /><ph name="END_BOLD" /> 在你的電腦上安裝危險程式,藉此竊取或刪除你的資訊 (例如相片、密碼、郵件和信用卡資料)。<ph name="BEGIN_LEARN_MORE_LINK" />瞭解詳情<ph name="END_LEARN_MORE_LINK" /></translation>
 <translation id="563324245173044180">已封鎖欺騙性內容。</translation>
 <translation id="5659593005791499971">電子郵件</translation>
+<translation id="5666899935841546222">想要集中管理所有的卡片嗎?</translation>
 <translation id="5675650730144413517">這個網頁無法正常運作</translation>
 <translation id="5685654322157854305">新增運送地址</translation>
 <translation id="5689199277474810259">以 JSON 格式匯出</translation>
@@ -696,7 +697,6 @@
 <translation id="5869405914158311789">無法連上這個網站</translation>
 <translation id="5869522115854928033">已儲存的密碼</translation>
 <translation id="5893752035575986141">接受簽帳金融卡。</translation>
-<translation id="5898382028489516745">如果你在其他網站上重複使用過你的 <ph name="ORG_NAME" /> 密碼,Chromium 建議你重設密碼。</translation>
 <translation id="5908541034548427511"><ph name="TYPE_1" /> (已同步)</translation>
 <translation id="5920262536204764679">{NUM_COOKIES,plural, =1{目前使用 1 個 Cookie}other{目前使用 # 個 Cookie}}</translation>
 <translation id="5939518447894949180">重設</translation>
@@ -1040,6 +1040,7 @@
 <translation id="8553075262323480129">無法判定網頁的語言,翻譯作業失敗。</translation>
 <translation id="8557066899867184262">信用卡安全碼位於信用卡背面。</translation>
 <translation id="8559762987265718583">你裝置的日期和時間 (<ph name="DATE_AND_TIME" />) 不正確,因此無法與 <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> 建立私人連線。</translation>
+<translation id="8564985650692024650">如果你在其他網站上重複使用過你的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密碼,Chromium 會建議你重設密碼。</translation>
 <translation id="8571890674111243710">正在將網頁翻譯成<ph name="LANGUAGE" />...</translation>
 <translation id="858637041960032120">新增電話號碼</translation>
 <translation id="859285277496340001">憑證未指定負責檢查其本身是否已遭到撤銷的機制。</translation>
@@ -1068,6 +1069,7 @@
 <translation id="884264119367021077">運送地址</translation>
 <translation id="884923133447025588">未發現撤銷機制。</translation>
 <translation id="885730110891505394">與 Google 分享</translation>
+<translation id="8858065207712248076">如果你在其他網站上重複使用過你的 <ph name="BEGIN_BOLD" /><ph name="ORG_NAME" /><ph name="END_BOLD" /> 密碼,Chrome 會建議你重設密碼。</translation>
 <translation id="8866481888320382733">解析政策設定時發生錯誤</translation>
 <translation id="8870413625673593573">最近關閉的分頁</translation>
 <translation id="8874824191258364635">請輸入有效的信用卡號碼</translation>
diff --git a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
index 63af6deb..bbde8c3 100644
--- a/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
+++ b/components/sync_bookmarks/bookmark_model_type_processor_unittest.cc
@@ -101,6 +101,11 @@
   for (BookmarkInfo bookmark : bookmarks) {
     updates.push_back(CreateUpdateData(bookmark));
   }
+  // TODO(crbug.com/516866): Remove after a proper positioning for remote
+  // updates is implemented. Reversing the updates because the sorting algorithm
+  // isn't stable. This is OK for now because once proper positioning is
+  // implemented, the siblings update requests order would be irrelvant.
+  std::reverse(updates.begin(), updates.end());
   processor->OnUpdateReceived(CreateDummyModelTypeState(), updates);
   AssertState(processor, bookmarks);
 }
@@ -314,82 +319,6 @@
               Eq(ASCIIToUTF16(kTitle3)));
 }
 
-TEST_F(BookmarkModelTypeProcessorTest, ShouldEncodeSyncMetadata) {
-  const std::string kNodeId1 = "node_id1";
-  const std::string kTitle1 = "title1";
-  const std::string kUrl1 = "http://www.url1.com";
-
-  const std::string kNodeId2 = "node_id2";
-  const std::string kTitle2 = "title2";
-  const std::string kUrl2 = "http://www.url2.com";
-
-  std::vector<BookmarkInfo> bookmarks = {
-      {kNodeId1, kTitle1, kUrl1, kBookmarkBarId, /*server_tag=*/std::string()},
-      {kNodeId2, kTitle2, kUrl2, kBookmarkBarId,
-       /*server_tag=*/std::string()}};
-
-  InitWithSyncedBookmarks(bookmarks, processor());
-
-  // Make sure original bookmark exists.
-  const bookmarks::BookmarkNode* bookmark_bar =
-      bookmark_model()->bookmark_bar_node();
-  const bookmarks::BookmarkNode* bookmark_node1 = bookmark_bar->GetChild(0);
-  const bookmarks::BookmarkNode* bookmark_node2 = bookmark_bar->GetChild(1);
-  ASSERT_THAT(bookmark_node1, NotNull());
-  ASSERT_THAT(bookmark_node2, NotNull());
-
-  std::string metadata_str = processor()->EncodeSyncMetadata();
-  sync_pb::BookmarkModelMetadata model_metadata;
-  EXPECT_TRUE(model_metadata.ParseFromString(metadata_str));
-  // There should be 3 entries now, one for the bookmark bar, and the other 2
-  // nodes.
-  ASSERT_THAT(model_metadata.bookmarks_metadata().size(), Eq(3));
-
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(0).id(),
-              Eq(bookmark_bar->id()));
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(0).metadata().server_id(),
-              Eq(kBookmarkBarId));
-  EXPECT_THAT(
-      model_metadata.bookmarks_metadata().Get(0).metadata().is_deleted(),
-      Eq(false));
-
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(1).id(),
-              Eq(bookmark_node1->id()));
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(1).metadata().server_id(),
-              Eq(kNodeId1));
-  EXPECT_THAT(
-      model_metadata.bookmarks_metadata().Get(1).metadata().is_deleted(),
-      Eq(false));
-
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(2).id(),
-              Eq(bookmark_node2->id()));
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(2).metadata().server_id(),
-              Eq(kNodeId2));
-  EXPECT_THAT(
-      model_metadata.bookmarks_metadata().Get(2).metadata().is_deleted(),
-      Eq(false));
-
-  // Process a remote delete for the first node.
-  syncer::UpdateResponseDataList updates;
-  updates.push_back(CreateTombstone(kNodeId1));
-
-  processor()->OnUpdateReceived(CreateDummyModelTypeState(), updates);
-
-  metadata_str = processor()->EncodeSyncMetadata();
-  model_metadata.ParseFromString(metadata_str);
-  // There should be 3 entries now, one for the bookmark bar, and the remaning
-  // bookmark node.
-  ASSERT_THAT(model_metadata.bookmarks_metadata().size(), Eq(2));
-
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(1).id(),
-              Eq(bookmark_node2->id()));
-  EXPECT_THAT(model_metadata.bookmarks_metadata().Get(1).metadata().server_id(),
-              Eq(kNodeId2));
-  EXPECT_THAT(
-      model_metadata.bookmarks_metadata().Get(1).metadata().is_deleted(),
-      Eq(false));
-}
-
 TEST_F(BookmarkModelTypeProcessorTest, ShouldDecodeSyncMetadata) {
   const std::string kNodeId = "node_id1";
   const std::string kTitle = "title1";
diff --git a/components/sync_bookmarks/bookmark_remote_updates_handler.cc b/components/sync_bookmarks/bookmark_remote_updates_handler.cc
index 13e75cb9..14431c78 100644
--- a/components/sync_bookmarks/bookmark_remote_updates_handler.cc
+++ b/components/sync_bookmarks/bookmark_remote_updates_handler.cc
@@ -4,6 +4,12 @@
 
 #include "components/sync_bookmarks/bookmark_remote_updates_handler.h"
 
+#include <set>
+#include <string>
+#include <unordered_map>
+#include <utility>
+
+#include "base/strings/string_piece.h"
 #include "base/strings/utf_string_conversions.h"
 #include "components/bookmarks/browser/bookmark_model.h"
 #include "components/bookmarks/browser/bookmark_node.h"
@@ -104,6 +110,31 @@
   return true;
 }
 
+// Recursive method to traverse a forest created by ReorderUpdates() to to
+// emit updates in top-down order. |ordered_updates| must not be null because
+// traversed updates are appended to |*ordered_updates|.
+void TraverseAndAppendChildren(
+    const base::StringPiece& node_id,
+    const std::unordered_map<base::StringPiece,
+                             const syncer::UpdateResponseData*,
+                             base::StringPieceHash>& id_to_updates,
+    const std::unordered_map<base::StringPiece,
+                             std::vector<base::StringPiece>,
+                             base::StringPieceHash>& node_to_children,
+    std::vector<const syncer::UpdateResponseData*>* ordered_updates) {
+  // If no children to traverse, we are done.
+  if (node_to_children.count(node_id) == 0) {
+    return;
+  }
+  // Recurse over all children.
+  for (const base::StringPiece& child : node_to_children.at(node_id)) {
+    DCHECK_NE(id_to_updates.count(child), 0U);
+    ordered_updates->push_back(id_to_updates.at(child));
+    TraverseAndAppendChildren(child, id_to_updates, node_to_children,
+                              ordered_updates);
+  }
+}
+
 }  // namespace
 
 BookmarkRemoteUpdatesHandler::BookmarkRemoteUpdatesHandler(
@@ -116,7 +147,7 @@
 
 void BookmarkRemoteUpdatesHandler::Process(
     const syncer::UpdateResponseDataList& updates) {
-  for (const syncer::UpdateResponseData* update : ReorderUpdates(updates)) {
+  for (const syncer::UpdateResponseData* update : ReorderUpdates(&updates)) {
     const syncer::EntityData& update_entity = update->entity.value();
     // TODO(crbug.com/516866): Check |update_entity| for sanity.
     // 1. Has bookmark specifics or no specifics in case of delete.
@@ -143,49 +174,86 @@
 // static
 std::vector<const syncer::UpdateResponseData*>
 BookmarkRemoteUpdatesHandler::ReorderUpdatesForTest(
-    const syncer::UpdateResponseDataList& updates) {
+    const syncer::UpdateResponseDataList* updates) {
   return ReorderUpdates(updates);
 }
 
 // static
 std::vector<const syncer::UpdateResponseData*>
 BookmarkRemoteUpdatesHandler::ReorderUpdates(
-    const syncer::UpdateResponseDataList& updates) {
-  // TODO(crbug.com/516866): This is a very simple (hacky) reordering algorithm
-  // that assumes no folders exist except the top level permanent ones. This
-  // should be fixed before enabling USS for bookmarks.
-  std::vector<const syncer::UpdateResponseData*> ordered_updates;
-  for (const syncer::UpdateResponseData& update : updates) {
+    const syncer::UpdateResponseDataList* updates) {
+  // This method sorts the remote updates according to the following rules:
+  // 1. Creations and updates come before deletions.
+  // 2. Parent creation/update should come before child creation/update.
+  // 3. No need to further order deletions. Parent deletions can happen before
+  //    child deletions. This is safe because all updates (e.g. moves) should
+  //    have been processed already.
+
+  // The algorithm works by constructing a forest of all non-deletion updates
+  // and then traverses each tree in the forest recursively: Forest
+  // Construction:
+  // 1. Iterate over all updates and construct the |parent_to_children| map and
+  //    collect all parents in |roots|.
+  // 2. Iterate over all updates again and drop any parent that has a
+  //    coressponding update. What's left in |roots| are the roots of the
+  //    forest.
+  // 3. Start at each root in |roots|, emit the update and recurse over its
+  //    children.
+
+  std::unordered_map<base::StringPiece, const syncer::UpdateResponseData*,
+                     base::StringPieceHash>
+      id_to_updates;
+  std::set<base::StringPiece> roots;
+  std::unordered_map<base::StringPiece, std::vector<base::StringPiece>,
+                     base::StringPieceHash>
+      parent_to_children;
+
+  // Add only non-deletions to |id_to_updates|.
+  for (const syncer::UpdateResponseData& update : *updates) {
     const syncer::EntityData& update_entity = update.entity.value();
+    // Ignore updates to root nodes.
     if (update_entity.parent_id == "0") {
       continue;
     }
-    if (update_entity.parent_id == kBookmarksRootId) {
-      ordered_updates.push_back(&update);
-    }
-  }
-  for (const syncer::UpdateResponseData& update : updates) {
-    const syncer::EntityData& update_entity = update.entity.value();
-    // Deletions should come last.
     if (update_entity.is_deleted()) {
       continue;
     }
-    if (update_entity.parent_id != "0" &&
-        update_entity.parent_id != kBookmarksRootId) {
-      ordered_updates.push_back(&update);
+    id_to_updates[update_entity.id] = &update;
+  }
+  // Iterate over |id_to_updates| and construct |roots| and
+  // |parent_to_children|.
+  for (const std::pair<base::StringPiece, const syncer::UpdateResponseData*>&
+           pair : id_to_updates) {
+    const syncer::EntityData& update_entity = pair.second->entity.value();
+    parent_to_children[update_entity.parent_id].push_back(update_entity.id);
+    // If this entity's parent has no pending update, add it to |roots|.
+    if (id_to_updates.count(update_entity.parent_id) == 0) {
+      roots.insert(update_entity.parent_id);
     }
   }
-  // Now add deletions.
-  for (const syncer::UpdateResponseData& update : updates) {
+  // |roots| contains only root of all trees in the forest all of which are
+  // ready to be processed because none has a pending update.
+  std::vector<const syncer::UpdateResponseData*> ordered_updates;
+  for (const base::StringPiece& root : roots) {
+    TraverseAndAppendChildren(root, id_to_updates, parent_to_children,
+                              &ordered_updates);
+  }
+
+  int root_node_updates_count = 0;
+  // Add deletions.
+  for (const syncer::UpdateResponseData& update : *updates) {
     const syncer::EntityData& update_entity = update.entity.value();
-    if (!update_entity.is_deleted()) {
+    // Ignore updates to root nodes.
+    if (update_entity.parent_id == "0") {
+      root_node_updates_count++;
       continue;
     }
-    if (update_entity.parent_id != "0" &&
-        update_entity.parent_id != kBookmarksRootId) {
+    if (update_entity.is_deleted()) {
       ordered_updates.push_back(&update);
     }
   }
+  // All non root updates should have been included in |ordered_updates|.
+  DCHECK_EQ(updates->size(), ordered_updates.size() + root_node_updates_count);
   return ordered_updates;
 }
 
@@ -302,8 +370,10 @@
 
   // Handle corner cases first.
   if (tracked_entity == nullptr) {
-    // Local entity doesn't exist and update is tombstone.
-    DLOG(WARNING) << "Received remote delete for a non-existing item.";
+    // Process deletion only if the entity is still tracked. It could have
+    // been recursively deleted already with an earlier deletion of its
+    // parent.
+    DVLOG(1) << "Received remote delete for a non-existing item.";
     return;
   }
 
@@ -313,15 +383,23 @@
   if (bookmark_model_->is_permanent_node(node)) {
     return;
   }
-  // TODO(crbug.com/516866): Allow deletions of non-empty direcoties if makes
-  // sense, and recursively delete children.
-  if (node->child_count() > 0) {
-    DLOG(WARNING) << "Trying to delete a non-empty folder.";
-    return;
-  }
-
+  // Remove the entities of |node| and its children.
+  RemoveEntityAndChildrenFromTracker(node);
+  // Remove the node and its children from the model.
   bookmark_model_->Remove(node);
-  bookmark_tracker_->Remove(update_entity.id);
+}
+
+void BookmarkRemoteUpdatesHandler::RemoveEntityAndChildrenFromTracker(
+    const bookmarks::BookmarkNode* node) {
+  const SyncedBookmarkTracker::Entity* entity =
+      bookmark_tracker_->GetEntityForBookmarkNode(node);
+  DCHECK(entity);
+  bookmark_tracker_->Remove(entity->metadata()->server_id());
+
+  for (int i = 0; i < node->child_count(); ++i) {
+    const bookmarks::BookmarkNode* child = node->GetChild(i);
+    RemoveEntityAndChildrenFromTracker(child);
+  }
 }
 
 const bookmarks::BookmarkNode* BookmarkRemoteUpdatesHandler::GetParentNode(
diff --git a/components/sync_bookmarks/bookmark_remote_updates_handler.h b/components/sync_bookmarks/bookmark_remote_updates_handler.h
index ed6ad22..9890a41 100644
--- a/components/sync_bookmarks/bookmark_remote_updates_handler.h
+++ b/components/sync_bookmarks/bookmark_remote_updates_handler.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_REMOTE_UPDATES_HANDLER_H_
 #define COMPONENTS_SYNC_BOOKMARKS_BOOKMARK_REMOTE_UPDATES_HANDLER_H_
 
+#include <map>
+#include <string>
 #include <vector>
 
 #include "components/sync/engine/non_blocking_sync_common.h"
@@ -17,7 +19,8 @@
 
 namespace sync_bookmarks {
 
-// Responsible for processing remote updates received from the sync server.
+// Responsible for processing one batch of remote updates received from the sync
+// server.
 class BookmarkRemoteUpdatesHandler {
  public:
   // |bookmark_model| and |bookmark_tracker| must not be null and most outlive
@@ -30,7 +33,7 @@
 
   // Public for testing.
   static std::vector<const syncer::UpdateResponseData*> ReorderUpdatesForTest(
-      const syncer::UpdateResponseDataList& updates);
+      const syncer::UpdateResponseDataList* updates);
 
  private:
   // Reorders incoming updates such that parent creation is before child
@@ -38,7 +41,7 @@
   // come last. The returned pointers point to the elements in the original
   // |updates|.
   static std::vector<const syncer::UpdateResponseData*> ReorderUpdates(
-      const syncer::UpdateResponseDataList& updates);
+      const syncer::UpdateResponseDataList* updates);
 
   // Given a remote update entity, it returns the parent bookmark node of the
   // corresponding node. It returns null if the parent node cannot be found.
@@ -70,6 +73,10 @@
   void ProcessRemoteDelete(const syncer::EntityData& update_entity,
                            const SyncedBookmarkTracker::Entity* tracked_entity);
 
+  // Recursively removes the entities corresponding to |node| and its children
+  // from |bookmark_tracker_|.
+  void RemoveEntityAndChildrenFromTracker(const bookmarks::BookmarkNode* node);
+
   // Associates the permanent bookmark folders with the corresponding server
   // side ids and registers the association in |bookmark_tracker_|.
   // |update_entity| must contain server_defined_unique_tag that is used to
diff --git a/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc b/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc
index b641fa1..05085bc 100644
--- a/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc
+++ b/components/sync_bookmarks/bookmark_remote_updates_handler_unittest.cc
@@ -4,12 +4,19 @@
 
 #include "components/sync_bookmarks/bookmark_remote_updates_handler.h"
 
+#include <memory>
 #include <string>
+#include <utility>
 
+#include "base/strings/string_number_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/test/test_bookmark_client.h"
 #include "components/sync/base/model_type.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
+using base::ASCIIToUTF16;
 using testing::Eq;
 
 namespace sync_bookmarks {
@@ -19,32 +26,26 @@
 // The parent tag for children of the root entity. Entities with this parent are
 // referred to as top level enities.
 const char kRootParentTag[] = "0";
+const char kBookmarkBarId[] = "bookmark_bar_id";
 const char kBookmarkBarTag[] = "bookmark_bar";
 const char kBookmarksRootId[] = "32904_google_chrome_bookmarks";
 
-struct BookmarkInfo {
-  std::string server_id;
-  std::string title;
-  std::string url;  // empty for folders.
-  std::string parent_id;
-  std::string server_tag;
-};
-
-syncer::UpdateResponseData CreateUpdateData(const BookmarkInfo& bookmark_info) {
+syncer::UpdateResponseData CreateUpdateResponseData(
+    const std::string& server_id,
+    const std::string& parent_id,
+    bool is_deletion) {
   syncer::EntityData data;
-  data.id = bookmark_info.server_id;
-  data.parent_id = bookmark_info.parent_id;
-  data.server_defined_unique_tag = bookmark_info.server_tag;
+  data.id = server_id;
+  data.parent_id = parent_id;
 
-  sync_pb::BookmarkSpecifics* bookmark_specifics =
-      data.specifics.mutable_bookmark();
-  bookmark_specifics->set_title(bookmark_info.title);
-  if (bookmark_info.url.empty()) {
-    data.is_folder = true;
-  } else {
-    bookmark_specifics->set_url(bookmark_info.url);
+  // EntityData would be considered a deletion if its specifics hasn't been set.
+  if (!is_deletion) {
+    sync_pb::BookmarkSpecifics* bookmark_specifics =
+        data.specifics.mutable_bookmark();
+    // Use the server id as the title for simplicity.
+    bookmark_specifics->set_title(server_id);
   }
-
+  data.is_folder = true;
   syncer::UpdateResponseData response_data;
   response_data.entity = data.PassToPtr();
   // Similar to what's done in the loopback_server.
@@ -53,41 +54,218 @@
 }
 
 syncer::UpdateResponseData CreateBookmarkRootUpdateData() {
-  return CreateUpdateData({syncer::ModelTypeToRootTag(syncer::BOOKMARKS),
-                           std::string(), std::string(), kRootParentTag,
-                           syncer::ModelTypeToRootTag(syncer::BOOKMARKS)});
+  syncer::EntityData data;
+  data.id = syncer::ModelTypeToRootTag(syncer::BOOKMARKS);
+  data.parent_id = kRootParentTag;
+  data.server_defined_unique_tag =
+      syncer::ModelTypeToRootTag(syncer::BOOKMARKS);
+
+  data.specifics.mutable_bookmark();
+
+  syncer::UpdateResponseData response_data;
+  response_data.entity = data.PassToPtr();
+  // Similar to what's done in the loopback_server.
+  response_data.response_version = 0;
+  return response_data;
+}
+
+syncer::UpdateResponseData CreateBookmarkBarNodeUpdateData() {
+  syncer::EntityData data;
+  data.id = kBookmarkBarId;
+  data.parent_id = kBookmarksRootId;
+  data.server_defined_unique_tag = kBookmarkBarTag;
+
+  data.specifics.mutable_bookmark();
+
+  syncer::UpdateResponseData response_data;
+  response_data.entity = data.PassToPtr();
+  // Similar to what's done in the loopback_server.
+  response_data.response_version = 0;
+  return response_data;
 }
 
 TEST(BookmarkRemoteUpdatesHandlerReorderUpdatesTest, ShouldIgnoreRootNodes) {
   syncer::UpdateResponseDataList updates;
   updates.push_back(CreateBookmarkRootUpdateData());
   std::vector<const syncer::UpdateResponseData*> ordered_updates =
-      BookmarkRemoteUpdatesHandler::ReorderUpdatesForTest(updates);
+      BookmarkRemoteUpdatesHandler::ReorderUpdatesForTest(&updates);
   // Root node update should be filtered out.
   EXPECT_THAT(ordered_updates.size(), Eq(0U));
 }
 
-// TODO(crbug.com/516866): This should change to cover the general case of
-// parents before children for non-deletions, and another test should be added
-// for children before parents for deletions.
 TEST(BookmarkRemoteUpdatesHandlerReorderUpdatesTest,
-     ShouldPlacePermanentNodesFirstForNonDeletions) {
-  const std::string kNode1Id = "node1";
-  const std::string kNode2Id = "node2";
+     ShouldReorderParentsUpdateBeforeChildrenAndBothBeforeDeletions) {
+  // Prepare creation updates to build this structure:
+  // bookmark_bar
+  //  |- node0
+  //    |- node1
+  //      |- node2
+  // and another sub hierarchy under node3 that won't receive any update.
+  // node4
+  //  |- node5
+  // and a deletion for node6 under node3.
+
+  // Constuct the updates list to have deletion first, and then all creations in
+  // reverse shuffled order (from child to parent).
+
+  std::vector<std::string> ids;
+  for (int i = 0; i < 7; i++) {
+    ids.push_back("node" + base::NumberToString(i));
+  }
+  // Construct updates list
   syncer::UpdateResponseDataList updates;
-  updates.push_back(CreateUpdateData(
-      {kNode1Id, std::string(), std::string(), kNode2Id, std::string()}));
-  updates.push_back(CreateUpdateData({kNode2Id, std::string(), std::string(),
-                                      kBookmarksRootId, kBookmarkBarTag}));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[6],
+                                             /*parent_id=*/ids[3],
+                                             /*is_deletion=*/true));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[5],
+                                             /*parent_id=*/ids[4],
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[2],
+                                             /*parent_id=*/ids[1],
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[1],
+                                             /*parent_id=*/ids[0],
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[4],
+                                             /*parent_id=*/ids[3],
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/ids[0],
+                                             /*parent_id=*/kBookmarksRootId,
+                                             /*is_deletion=*/false));
+
   std::vector<const syncer::UpdateResponseData*> ordered_updates =
-      BookmarkRemoteUpdatesHandler::ReorderUpdatesForTest(updates);
+      BookmarkRemoteUpdatesHandler::ReorderUpdatesForTest(&updates);
 
   // No update should be dropped.
-  ASSERT_THAT(ordered_updates.size(), Eq(2U));
+  ASSERT_THAT(ordered_updates.size(), Eq(6U));
 
-  // Updates should be ordered such that parent node update comes first.
-  EXPECT_THAT(ordered_updates[0]->entity.value().id, Eq(kNode2Id));
-  EXPECT_THAT(ordered_updates[1]->entity.value().id, Eq(kNode1Id));
+  // Updates should be ordered such that parent node update comes first, and
+  // deletions come last.
+  // node0 --> node1 --> node2 --> node4 --> node5 --> node6.
+  // This is test is over verifying since the order requirements are
+  // within subtrees only. (e.g it doesn't matter whether node1 comes before or
+  // after node4). However, it's implemented this way for simplicity.
+  EXPECT_THAT(ordered_updates[0]->entity.value().id, Eq(ids[0]));
+  EXPECT_THAT(ordered_updates[1]->entity.value().id, Eq(ids[1]));
+  EXPECT_THAT(ordered_updates[2]->entity.value().id, Eq(ids[2]));
+  EXPECT_THAT(ordered_updates[3]->entity.value().id, Eq(ids[4]));
+  EXPECT_THAT(ordered_updates[4]->entity.value().id, Eq(ids[5]));
+  EXPECT_THAT(ordered_updates[5]->entity.value().id, Eq(ids[6]));
+}
+
+TEST(BookmarkRemoteUpdatesHandlerReorderUpdatesTest,
+     ShouldProcessRandomlyOrderedCreations) {
+  // Prepare creation updates to construct this structure:
+  // bookmark_bar
+  //  |- node0
+  //    |- node1
+  //      |- node2
+
+  std::unique_ptr<bookmarks::BookmarkModel> bookmark_model =
+      bookmarks::TestBookmarkClient::CreateModel();
+  SyncedBookmarkTracker tracker(std::vector<NodeMetadataPair>(),
+                                std::make_unique<sync_pb::ModelTypeState>());
+
+  const std::string kId0 = "id0";
+  const std::string kId1 = "id1";
+  const std::string kId2 = "id2";
+
+  // Constuct the updates list to have creations randomly ordered.
+  syncer::UpdateResponseDataList updates;
+  updates.push_back(CreateBookmarkBarNodeUpdateData());
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId2,
+                                             /*parent_id=*/kId1,
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId0,
+                                             /*parent_id=*/kBookmarkBarId,
+                                             /*is_deletion=*/false));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId1,
+                                             /*parent_id=*/kId0,
+                                             /*is_deletion=*/false));
+
+  BookmarkRemoteUpdatesHandler updates_handler(bookmark_model.get(), &tracker);
+  updates_handler.Process(updates);
+
+  // All nodes should be tracked including the bookmark_bar.
+  EXPECT_THAT(tracker.TrackedEntitiesCountForTest(), Eq(4U));
+
+  // All nodes should have been added to the model.
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model->bookmark_bar_node();
+  ASSERT_THAT(bookmark_bar_node->child_count(), Eq(1));
+  EXPECT_THAT(bookmark_bar_node->GetChild(0)->GetTitle(),
+              Eq(ASCIIToUTF16(kId0)));
+  ASSERT_THAT(bookmark_bar_node->GetChild(0)->child_count(), Eq(1));
+  EXPECT_THAT(bookmark_bar_node->GetChild(0)->GetChild(0)->GetTitle(),
+              Eq(ASCIIToUTF16(kId1)));
+  ASSERT_THAT(bookmark_bar_node->GetChild(0)->GetChild(0)->child_count(),
+              Eq(1));
+  EXPECT_THAT(
+      bookmark_bar_node->GetChild(0)->GetChild(0)->GetChild(0)->GetTitle(),
+      Eq(ASCIIToUTF16(kId2)));
+  EXPECT_THAT(
+      bookmark_bar_node->GetChild(0)->GetChild(0)->GetChild(0)->child_count(),
+      Eq(0));
+}
+
+TEST(BookmarkRemoteUpdatesHandlerReorderUpdatesTest,
+     ShouldProcessRandomlyOrderedDeletions) {
+  // Prepare deletion updates for this structure:
+  // bookmark_bar
+  //  |- node0
+  //    |- node1
+  //      |- node2
+
+  std::unique_ptr<bookmarks::BookmarkModel> bookmark_model =
+      bookmarks::TestBookmarkClient::CreateModel();
+
+  const bookmarks::BookmarkNode* bookmark_bar_node =
+      bookmark_model->bookmark_bar_node();
+  const bookmarks::BookmarkNode* node0 = bookmark_model->AddFolder(
+      /*parent=*/bookmark_bar_node, /*index=*/0, base::UTF8ToUTF16("node0"));
+  const bookmarks::BookmarkNode* node1 = bookmark_model->AddFolder(
+      /*parent=*/node0, /*index=*/0, base::UTF8ToUTF16("node1"));
+  const bookmarks::BookmarkNode* node2 = bookmark_model->AddFolder(
+      /*parent=*/node1, /*index=*/0, base::UTF8ToUTF16("node2"));
+
+  const std::string kId0 = "id0";
+  const std::string kId1 = "id1";
+  const std::string kId2 = "id2";
+
+  auto metadata0 = std::make_unique<sync_pb::EntityMetadata>();
+  metadata0->set_server_id(kId0);
+
+  auto metadata1 = std::make_unique<sync_pb::EntityMetadata>();
+  metadata1->set_server_id(kId1);
+
+  auto metadata2 = std::make_unique<sync_pb::EntityMetadata>();
+  metadata2->set_server_id(kId2);
+
+  std::vector<NodeMetadataPair> node_metadata_pairs;
+  node_metadata_pairs.emplace_back(node0, std::move(metadata0));
+  node_metadata_pairs.emplace_back(node1, std::move(metadata1));
+  node_metadata_pairs.emplace_back(node2, std::move(metadata2));
+
+  SyncedBookmarkTracker tracker(std::move(node_metadata_pairs),
+                                std::make_unique<sync_pb::ModelTypeState>());
+
+  // Constuct the updates list to have random deletions order.
+  syncer::UpdateResponseDataList updates;
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId1,
+                                             /*parent_id=*/kId0,
+                                             /*is_deletion=*/true));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId0,
+                                             /*parent_id=*/kBookmarksRootId,
+                                             /*is_deletion=*/true));
+  updates.push_back(CreateUpdateResponseData(/*server_id=*/kId2,
+                                             /*parent_id=*/kId1,
+                                             /*is_deletion=*/true));
+
+  BookmarkRemoteUpdatesHandler updates_handler(bookmark_model.get(), &tracker);
+  updates_handler.Process(updates);
+
+  // |tracker| should be empty now.
+  EXPECT_THAT(tracker.TrackedEntitiesCountForTest(), Eq(0U));
 }
 
 }  // namespace
diff --git a/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc b/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc
index 4db9e25..c432191 100644
--- a/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc
+++ b/components/sync_bookmarks/synced_bookmark_tracker_unittest.cc
@@ -97,6 +97,35 @@
   EXPECT_THAT(tracker.GetEntityForSyncId(kSyncId), IsNull());
 }
 
+TEST(SyncedBookmarkTrackerTest, ShouldBuildBookmarkModelMetadata) {
+  SyncedBookmarkTracker tracker(std::vector<NodeMetadataPair>(),
+                                std::make_unique<sync_pb::ModelTypeState>());
+  const std::string kSyncId = "SYNC_ID";
+  const std::string kTitle = "Title";
+  const GURL kUrl("http://www.foo.com");
+  const int64_t kId = 1;
+  const int64_t kServerVersion = 1000;
+  const base::Time kCreationTime(base::Time::Now() -
+                                 base::TimeDelta::FromSeconds(1));
+  const syncer::UniquePosition unique_position =
+      syncer::UniquePosition::InitialPosition(
+          syncer::UniquePosition::RandomSuffix());
+  const sync_pb::EntitySpecifics specifics =
+      GenerateSpecifics(/*title=*/std::string(), /*url=*/std::string());
+
+  bookmarks::BookmarkNode node(kId, kUrl);
+  tracker.Add(kSyncId, &node, kServerVersion, kCreationTime,
+              unique_position.ToProto(), specifics);
+
+  sync_pb::BookmarkModelMetadata bookmark_model_metadata =
+      tracker.BuildBookmarkModelMetadata();
+
+  ASSERT_THAT(bookmark_model_metadata.bookmarks_metadata().size(), Eq(1));
+  EXPECT_THAT(
+      bookmark_model_metadata.bookmarks_metadata(0).metadata().server_id(),
+      Eq(kSyncId));
+}
+
 TEST(SyncedBookmarkTrackerTest,
      ShouldRequireCommitRequestWhenSequenceNumberIsIncremented) {
   SyncedBookmarkTracker tracker(std::vector<NodeMetadataPair>(),
diff --git a/components/url_formatter/idn_spoof_checker.cc b/components/url_formatter/idn_spoof_checker.cc
index df6adec..602c1f45 100644
--- a/components/url_formatter/idn_spoof_checker.cc
+++ b/components/url_formatter/idn_spoof_checker.cc
@@ -56,9 +56,15 @@
     if (current_search_offset == 0) {
       *out_found = true;
       DCHECK(!top_domain.empty());
+      result_ = top_domain;
     }
     return true;
   }
+
+  std::string matching_top_domain() const { return result_; }
+
+ private:
+  std::string result_;
 };
 
 void OnThreadTermination(void* regex_matcher) {
@@ -80,7 +86,7 @@
     kTopDomainsHuffmanTree, sizeof(kTopDomainsHuffmanTree), kTopDomainsTrie,
     kTopDomainsTrieBits, kTopDomainsRootPosition};
 
-bool LookupMatchInTopDomains(const icu::UnicodeString& ustr_skeleton) {
+std::string LookupMatchInTopDomains(const icu::UnicodeString& ustr_skeleton) {
   TopDomainPreloadDecoder preload_decoder(
       g_trie_params.huffman_tree, g_trie_params.huffman_tree_size,
       g_trie_params.trie, g_trie_params.trie_bits,
@@ -102,14 +108,14 @@
     bool decoded = preload_decoder.Decode(partial_skeleton, &match);
     DCHECK(decoded);
     if (!decoded)
-      return false;
+      return std::string();
 
     if (match)
-      return true;
+      return preload_decoder.matching_top_domain();
 
     labels.erase(labels.begin());
   }
-  return false;
+  return std::string();
 }
 
 }  // namespace
@@ -359,7 +365,7 @@
   return !dangerous_pattern->find();
 }
 
-bool IDNSpoofChecker::SimilarToTopDomains(base::StringPiece16 hostname) {
+std::string IDNSpoofChecker::GetSimilarTopDomain(base::StringPiece16 hostname) {
   size_t hostname_length = hostname.length() - (hostname.back() == '.' ? 1 : 0);
   icu::UnicodeString host(FALSE, hostname.data(), hostname_length);
   // If input has any characters outside Latin-Greek-Cyrillic and [0-9._-],
@@ -385,12 +391,15 @@
     }
     host_alt.releaseBuffer(length);
     uspoof_getSkeletonUnicodeString(checker_, 0, host_alt, skeleton, &status);
-    if (U_SUCCESS(status) && LookupMatchInTopDomains(skeleton))
-      return true;
+    if (U_SUCCESS(status)) {
+      std::string match = LookupMatchInTopDomains(skeleton);
+      if (!match.empty())
+        return match;
+    }
   }
 
   uspoof_getSkeletonUnicodeString(checker_, 0, host, skeleton, &status);
-  return U_SUCCESS(status) && LookupMatchInTopDomains(skeleton);
+  return U_SUCCESS(status) ? LookupMatchInTopDomains(skeleton) : std::string();
 }
 
 bool IDNSpoofChecker::IsMadeOfLatinAlikeCyrillic(
diff --git a/components/url_formatter/idn_spoof_checker.h b/components/url_formatter/idn_spoof_checker.h
index ea235ad..7c7d722 100644
--- a/components/url_formatter/idn_spoof_checker.h
+++ b/components/url_formatter/idn_spoof_checker.h
@@ -44,6 +44,7 @@
     size_t trie_bits;
     size_t trie_root_position;
   };
+
   IDNSpoofChecker();
   ~IDNSpoofChecker();
 
@@ -52,15 +53,16 @@
   // See the function body for details on the specific safety checks performed.
   bool SafeToDisplayAsUnicode(base::StringPiece16 label, bool is_tld_ascii);
 
-  // Returns true if |hostname| or the last few components of |hostname| looks
-  // similar to one of top domains listed in top_domains/alexa_domains.list. Two
-  // checks are done:
+  // Returns the matching top domain if |hostname| or the last few components of
+  // |hostname| looks similar to one of top domains listed i
+  // top_domains/alexa_domains.list.
+  // Two checks are done:
   //   1. Calculate the skeleton of |hostname| based on the Unicode confusable
   //   character list and look it up in the pre-calculated skeleton list of
   //   top domains.
   //   2. Look up the diacritic-free version of |hostname| in the list of
   //   top domains. Note that non-IDN hostnames will not get here.
-  bool SimilarToTopDomains(base::StringPiece16 hostname);
+  std::string GetSimilarTopDomain(base::StringPiece16 hostname);
 
  private:
   // Sets allowed characters in IDN labels and turns on USPOOF_CHAR_LIMIT.
diff --git a/components/url_formatter/url_formatter.cc b/components/url_formatter/url_formatter.cc
index 37ff5e6..b044716c 100644
--- a/components/url_formatter/url_formatter.cc
+++ b/components/url_formatter/url_formatter.cc
@@ -28,13 +28,24 @@
 
 namespace {
 
-base::string16 IDNToUnicodeWithAdjustments(
+enum IDNConversionStatus {
+  // The input has no IDN component.
+  NO_IDN,
+  // The input has an IDN component but it's unsafe to display
+  // so was not converted.
+  UNSAFE_IDN,
+  // The input was successfully converted to IDN.
+  IDN_CONVERTED,
+};
+
+IDNConversionResult IDNToUnicodeWithAdjustments(
     base::StringPiece host,
     base::OffsetAdjuster::Adjustments* adjustments);
-bool IDNToUnicodeOneComponent(const base::char16* comp,
-                              size_t comp_len,
-                              bool is_tld_ascii,
-                              base::string16* out);
+
+IDNConversionStatus IDNToUnicodeOneComponent(const base::char16* comp,
+                                             size_t comp_len,
+                                             bool is_tld_ascii,
+                                             base::string16* out);
 
 class AppendComponentTransform {
  public:
@@ -60,7 +71,7 @@
       const std::string& component_text,
       base::OffsetAdjuster::Adjustments* adjustments) const override {
     if (!trim_trivial_subdomains_)
-      return IDNToUnicodeWithAdjustments(component_text, adjustments);
+      return IDNToUnicodeWithAdjustments(component_text, adjustments).result;
 
     // Exclude the registry and domain from trivial subdomain stripping.
     // To get the adjustment offset calculations correct, we need to transform
@@ -73,7 +84,7 @@
     // If there is no domain and registry, we may be looking at an intranet
     // or otherwise non-standard host. Leave those alone.
     if (domain_and_registry.empty())
-      return IDNToUnicodeWithAdjustments(component_text, adjustments);
+      return IDNToUnicodeWithAdjustments(component_text, adjustments).result;
 
     base::OffsetAdjuster::Adjustments trivial_subdomains_adjustments;
     base::StringTokenizer tokenizer(
@@ -103,8 +114,10 @@
       DCHECK(tokenizer.token_is_delim());
     }
 
-    base::string16 unicode_result = IDNToUnicodeWithAdjustments(
-        transformed_subdomain + domain_and_registry, adjustments);
+    base::string16 unicode_result =
+        IDNToUnicodeWithAdjustments(transformed_subdomain + domain_and_registry,
+                                    adjustments)
+            .result;
     base::OffsetAdjuster::MergeSequentialAdjustments(
         trivial_subdomains_adjustments, adjustments);
     return unicode_result;
@@ -246,8 +259,9 @@
 
 // TODO(brettw): We may want to skip this step in the case of file URLs to
 // allow unicode UNC hostnames regardless of encodings.
-base::string16 IDNToUnicodeWithAdjustments(
-    base::StringPiece host, base::OffsetAdjuster::Adjustments* adjustments) {
+IDNConversionResult IDNToUnicodeWithAdjustments(
+    base::StringPiece host,
+    base::OffsetAdjuster::Adjustments* adjustments) {
   if (adjustments)
     adjustments->clear();
   // Convert the ASCII input to a base::string16 for ICU.
@@ -262,10 +276,10 @@
     is_tld_ascii = false;
   }
 
+  IDNConversionResult result;
   // Do each component of the host separately, since we enforce script matching
   // on a per-component basis.
   base::string16 out16;
-  bool has_idn_component = false;
   for (size_t component_start = 0, component_end;
        component_start < input16.length();
        component_start = component_end + 1) {
@@ -278,10 +292,12 @@
     bool converted_idn = false;
     if (component_end > component_start) {
       // Add the substring that we just found.
-      converted_idn =
+      IDNConversionStatus status =
           IDNToUnicodeOneComponent(input16.data() + component_start,
                                    component_length, is_tld_ascii, &out16);
-      has_idn_component |= converted_idn;
+      converted_idn = (status == IDN_CONVERTED);
+      result.has_idn_component |=
+          (status == IDN_CONVERTED || status == UNSAFE_IDN);
     }
     size_t new_component_length = out16.length() - new_component_start;
 
@@ -295,15 +311,20 @@
       out16.push_back('.');
   }
 
+  result.result = out16;
+
   // Leave as punycode any inputs that spoof top domains.
-  if (has_idn_component &&
-      g_idn_spoof_checker.Get().SimilarToTopDomains(out16)) {
-    if (adjustments)
-      adjustments->clear();
-    return input16;
+  if (result.has_idn_component) {
+    result.matching_top_domain =
+        g_idn_spoof_checker.Get().GetSimilarTopDomain(out16);
+    if (!result.matching_top_domain.empty()) {
+      if (adjustments)
+        adjustments->clear();
+      result.result = input16;
+    }
   }
 
-  return out16;
+  return result;
 }
 
 // Returns true if the given Unicode host component is safe to display to the
@@ -354,14 +375,15 @@
 // same as the input if it is not IDN in ACE/punycode or the IDN is unsafe to
 // display.
 // Returns whether any conversion was performed.
-bool IDNToUnicodeOneComponent(const base::char16* comp,
-                              size_t comp_len,
-                              bool is_tld_ascii,
-                              base::string16* out) {
+IDNConversionStatus IDNToUnicodeOneComponent(const base::char16* comp,
+                                             size_t comp_len,
+                                             bool is_tld_ascii,
+                                             base::string16* out) {
   DCHECK(out);
   if (comp_len == 0)
-    return false;
+    return NO_IDN;
 
+  IDNConversionStatus idn_status = NO_IDN;
   // Only transform if the input can be an IDN component.
   static const base::char16 kIdnPrefix[] = {'x', 'n', '-', '-'};
   if ((comp_len > arraysize(kIdnPrefix)) &&
@@ -390,8 +412,10 @@
       if (IsIDNComponentSafe(
               base::StringPiece16(out->data() + original_length,
                                   base::checked_cast<size_t>(output_length)),
-              is_tld_ascii))
-        return true;
+              is_tld_ascii)) {
+        return IDN_CONVERTED;
+      }
+      idn_status = UNSAFE_IDN;
     }
 
     // Something went wrong. Revert to original string.
@@ -401,7 +425,7 @@
   // We get here with no IDN or on error, in which case we just append the
   // literal input.
   out->append(comp, comp_len);
-  return false;
+  return idn_status;
 }
 
 }  // namespace
@@ -657,10 +681,14 @@
       HostComponentTransform(false), output, nullptr, nullptr);
 }
 
-base::string16 IDNToUnicode(base::StringPiece host) {
+IDNConversionResult IDNToUnicodeWithDetails(base::StringPiece host) {
   return IDNToUnicodeWithAdjustments(host, nullptr);
 }
 
+base::string16 IDNToUnicode(base::StringPiece host) {
+  return IDNToUnicodeWithAdjustments(host, nullptr).result;
+}
+
 base::string16 StripWWW(const base::string16& text) {
   const base::string16 www(base::ASCIIToUTF16("www."));
   return base::StartsWith(text, www, base::CompareCase::SENSITIVE)
diff --git a/components/url_formatter/url_formatter.h b/components/url_formatter/url_formatter.h
index ce68c716..82a5589f 100644
--- a/components/url_formatter/url_formatter.h
+++ b/components/url_formatter/url_formatter.h
@@ -38,6 +38,22 @@
 typedef uint32_t FormatUrlType;
 typedef uint32_t FormatUrlTypes;
 
+// The result of an IDN to Unicode conversion.
+struct IDNConversionResult {
+  // The result of the conversion. If the input is a safe-to-display IDN encoded
+  // as punycode, this will be its unicode representation. Otherwise, it'll be
+  // the same as input.
+  base::string16 result;
+  // True if the hostname of the input has an IDN component, even if the result
+  // wasn't converted.
+  bool has_idn_component = false;
+  // The top domain that the hostname of the input is visually similar to. Is
+  // empty if the input didn't match any top domain.
+  // E.g. IDNToUnicodeWithDetails("googlé.com") will fill |result| with
+  // "xn--googl-fsa.com" and |matching_top_domain| with "google.com".
+  std::string matching_top_domain;
+};
+
 // Nothing is ommitted.
 extern const FormatUrlType kFormatUrlOmitNothing;
 
@@ -153,6 +169,9 @@
 // function does NOT accept UTF-8!
 base::string16 IDNToUnicode(base::StringPiece host);
 
+// Same as IDNToUnicode, but returns more details.
+IDNConversionResult IDNToUnicodeWithDetails(base::StringPiece host);
+
 // If |text| starts with "www." it is removed, otherwise |text| is returned
 // unmodified.
 base::string16 StripWWW(const base::string16& text);
diff --git a/components/vector_icons/BUILD.gn b/components/vector_icons/BUILD.gn
index 3653ec1..89ca0207 100644
--- a/components/vector_icons/BUILD.gn
+++ b/components/vector_icons/BUILD.gn
@@ -21,6 +21,7 @@
     "folder_managed_touch.icon",
     "folder_touch.icon",
     "forward_arrow.icon",
+    "headset.icon",
     "help_outline.icon",
     "info_outline.icon",
     "location_on.icon",
diff --git a/components/vector_icons/headset.icon b/components/vector_icons/headset.icon
new file mode 100644
index 0000000..8746c73
--- /dev/null
+++ b/components/vector_icons/headset.icon
@@ -0,0 +1,37 @@
+// 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.
+
+CANVAS_DIMENSIONS, 20,
+MOVE_TO, 16, 15,
+R_CUBIC_TO, 0, 0.55f, -0.45f, 1, -1, 1,
+R_H_LINE_TO, -1,
+R_V_LINE_TO, -3,
+R_H_LINE_TO, 2,
+R_V_LINE_TO, 2,
+CLOSE,
+MOVE_TO, 6, 16,
+H_LINE_TO, 5,
+R_CUBIC_TO, -0.55f, 0, -1, -0.45f, -1, -1,
+R_V_LINE_TO, -2,
+R_H_LINE_TO, 2,
+R_V_LINE_TO, 3,
+CLOSE,
+MOVE_TO, 2, 9,
+R_V_LINE_TO, 6,
+R_CUBIC_TO, 0, 1.66f, 1.34f, 3, 3, 3,
+R_H_LINE_TO, 3,
+R_V_LINE_TO, -7,
+H_LINE_TO, 4,
+V_LINE_TO, 9,
+R_CUBIC_TO, 0, -3.87f, 2.13f, -5, 6, -5,
+R_CUBIC_TO, 3.87f, 0, 6, 1.13f, 6, 5,
+R_V_LINE_TO, 2,
+R_H_LINE_TO, -4,
+R_V_LINE_TO, 7,
+R_H_LINE_TO, 3,
+R_CUBIC_TO, 1.66f, 0, 3, -1.34f, 3, -3,
+V_LINE_TO, 9,
+R_CUBIC_TO, 0, -4.97f, -3.03f, -7, -8, -7,
+R_CUBIC_TO, -4.97f, 0, -8, 2.03f, -8, 7,
+CLOSE
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn
index 44853d5..44ea7ef9 100644
--- a/components/viz/common/BUILD.gn
+++ b/components/viz/common/BUILD.gn
@@ -215,6 +215,7 @@
     "surfaces/local_surface_id_unittest.cc",
     "surfaces/parent_local_surface_id_allocator_unittest.cc",
     "surfaces/scoped_surface_id_allocator_unittest.cc",
+    "surfaces/surface_range_unittest.cc",
     "yuv_readback_unittest.cc",
   ]
 
diff --git a/components/viz/common/surfaces/local_surface_id.cc b/components/viz/common/surfaces/local_surface_id.cc
index 2cab009..6a127ea 100644
--- a/components/viz/common/surfaces/local_surface_id.cc
+++ b/components/viz/common/surfaces/local_surface_id.cc
@@ -23,10 +23,6 @@
   return out << local_surface_id.ToString();
 }
 
-bool LocalSurfaceId::IsSameOrNewerThan(const LocalSurfaceId& other) const {
-  return IsNewerThan(other) || *this == other;
-}
-
 bool LocalSurfaceId::IsNewerThan(const LocalSurfaceId& other) const {
   // Sequence numbers can wrap around so look at their difference instead of
   // their absolute values.
@@ -38,4 +34,8 @@
           parent_sequence_number_ != other.parent_sequence_number_);
 }
 
+bool LocalSurfaceId::IsSameOrNewerThan(const LocalSurfaceId& other) const {
+  return IsNewerThan(other) || *this == other;
+}
+
 }  // namespace viz
diff --git a/components/viz/common/surfaces/surface_id.cc b/components/viz/common/surfaces/surface_id.cc
index a9068c2..45b8850 100644
--- a/components/viz/common/surfaces/surface_id.cc
+++ b/components/viz/common/surfaces/surface_id.cc
@@ -2,7 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include <algorithm>
+
 #include "components/viz/common/surfaces/surface_id.h"
+#include "components/viz/common/surfaces/surface_range.h"
 
 #include "base/strings/stringprintf.h"
 
@@ -14,8 +17,29 @@
                             local_surface_id_.ToString().c_str());
 }
 
+uint32_t SurfaceId::ManhattanDistanceTo(const SurfaceId& other) const {
+  DCHECK_EQ(frame_sink_id_, other.frame_sink_id());
+  DCHECK_EQ(local_surface_id_.embed_token(),
+            other.local_surface_id().embed_token());
+
+  return (std::max(local_surface_id_.parent_sequence_number(),
+                   other.local_surface_id().parent_sequence_number()) -
+          std::min(local_surface_id_.parent_sequence_number(),
+                   other.local_surface_id().parent_sequence_number())) +
+         (std::max(local_surface_id_.child_sequence_number(),
+                   other.local_surface_id().child_sequence_number()) -
+          std::min(local_surface_id_.child_sequence_number(),
+                   other.local_surface_id().child_sequence_number()));
+}
+
 std::ostream& operator<<(std::ostream& out, const SurfaceId& surface_id) {
   return out << surface_id.ToString();
 }
 
+bool SurfaceId::IsNewerThan(const SurfaceId& other) const {
+  if (frame_sink_id_ != other.frame_sink_id())
+    return false;
+  return local_surface_id_.IsNewerThan(other.local_surface_id());
+}
+
 }  // namespace viz
diff --git a/components/viz/common/surfaces/surface_id.h b/components/viz/common/surfaces/surface_id.h
index b61c347..a1ddf17 100644
--- a/components/viz/common/surfaces/surface_id.h
+++ b/components/viz/common/surfaces/surface_id.h
@@ -59,6 +59,13 @@
 
   std::string ToString() const;
 
+  // Returns whether this SurfaceId was generated after |other|.
+  bool IsNewerThan(const SurfaceId& other) const;
+
+  // Compare this SurfaceId with |other| and returns the difference between the
+  // parent sequence numbers plus the difference between child sequence numbers.
+  uint32_t ManhattanDistanceTo(const SurfaceId& other) const;
+
   bool operator==(const SurfaceId& other) const {
     return frame_sink_id_ == other.frame_sink_id_ &&
            local_surface_id_ == other.local_surface_id_;
diff --git a/components/viz/common/surfaces/surface_range.cc b/components/viz/common/surfaces/surface_range.cc
index 4868767..9e8ed7e 100644
--- a/components/viz/common/surfaces/surface_range.cc
+++ b/components/viz/common/surfaces/surface_range.cc
@@ -31,6 +31,12 @@
   return std::tie(end_, start_) < std::tie(other.end(), other.start());
 }
 
+bool SurfaceRange::IsInRangeExclusive(const SurfaceId& surface_id) const {
+  if (!start_)
+    return end_.IsNewerThan(surface_id);
+  return surface_id.IsNewerThan(*start_) && end_.IsNewerThan(surface_id);
+}
+
 bool SurfaceRange::IsValid() const {
   if (!end_.is_valid())
     return false;
diff --git a/components/viz/common/surfaces/surface_range.h b/components/viz/common/surfaces/surface_range.h
index b062cfc..f4164e0 100644
--- a/components/viz/common/surfaces/surface_range.h
+++ b/components/viz/common/surfaces/surface_range.h
@@ -35,6 +35,10 @@
 
   bool operator<(const SurfaceRange& other) const;
 
+  // Check if |surface_id| is in the surface range and match the frame sink id
+  // of start and end.
+  bool IsInRangeExclusive(const SurfaceId& surface_id) const;
+
   bool IsValid() const;
 
   const base::Optional<SurfaceId>& start() const { return start_; }
diff --git a/components/viz/common/surfaces/surface_range_unittest.cc b/components/viz/common/surfaces/surface_range_unittest.cc
new file mode 100644
index 0000000..a19d09725
--- /dev/null
+++ b/components/viz/common/surfaces/surface_range_unittest.cc
@@ -0,0 +1,52 @@
+// 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.
+
+#include "components/viz/common/surfaces/surface_range.h"
+#include "components/viz/common/surfaces/surface_id.h"
+
+#include "base/logging.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+// Verifying that SurfaceId::IsInRangeExclusive works properly.
+TEST(SurfaceRangeTest, VerifyInRange) {
+  viz::FrameSinkId FrameSink1(65564, 0);
+  viz::FrameSinkId FrameSink2(65565, 0);
+  const base::UnguessableToken token1 = base::UnguessableToken::Create();
+  const base::UnguessableToken token2 = base::UnguessableToken::Create();
+
+  const viz::SurfaceId start(FrameSink1, viz::LocalSurfaceId(1, 1, token1));
+  const viz::SurfaceId end(FrameSink1, viz::LocalSurfaceId(2, 2, token1));
+
+  const viz::SurfaceRange surface_range1(start, end);
+  const viz::SurfaceRange surface_range2(base::nullopt, end);
+
+  const viz::SurfaceId surface_id1(FrameSink1,
+                                   viz::LocalSurfaceId(1, 2, token1));
+  const viz::SurfaceId surface_id2(FrameSink2,
+                                   viz::LocalSurfaceId(1, 2, token2));
+  const viz::SurfaceId surface_id3(FrameSink1,
+                                   viz::LocalSurfaceId(2, 2, token1));
+  const viz::SurfaceId surface_id4(FrameSink1,
+                                   viz::LocalSurfaceId(3, 3, token1));
+
+  // |surface_id1| has the right embed token and is inside the range
+  // (Start,end).
+  EXPECT_TRUE(surface_range1.IsInRangeExclusive(surface_id1));
+
+  // |surface_id1| has the right embed token and inside the range
+  // (base::nullopt,end).
+  EXPECT_TRUE(surface_range2.IsInRangeExclusive(surface_id1));
+
+  // |surface_id2| has the wrong embed token/FrameSinkId so should be refused.
+  EXPECT_FALSE(surface_range1.IsInRangeExclusive(surface_id2));
+  EXPECT_FALSE(surface_range2.IsInRangeExclusive(surface_id2));
+
+  // |surface_id3| is not included in the range exclusively.
+  EXPECT_FALSE(surface_range1.IsInRangeExclusive(surface_id3));
+  EXPECT_FALSE(surface_range2.IsInRangeExclusive(surface_id3));
+
+  // |surface_id4| is not included in the range.
+  EXPECT_FALSE(surface_range1.IsInRangeExclusive(surface_id4));
+  EXPECT_FALSE(surface_range2.IsInRangeExclusive(surface_id4));
+}
diff --git a/components/viz/service/display/gl_renderer.cc b/components/viz/service/display/gl_renderer.cc
index f0af92a3..f37adb8 100644
--- a/components/viz/service/display/gl_renderer.cc
+++ b/components/viz/service/display/gl_renderer.cc
@@ -13,6 +13,7 @@
 #include <numeric>
 #include <set>
 #include <string>
+#include <utility>
 #include <vector>
 
 #include "base/bind.h"
@@ -1268,7 +1269,7 @@
                                    const gfx::ColorSpace& target_color_space) {
   TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
       gl_, &highp_threshold_cache_, settings_->highp_threshold_min,
-      params->quad->shared_quad_state->visible_quad_layer_rect.bottom_right());
+      params->quad->shared_quad_state->visible_quad_layer_rect.size());
 
   BlendMode shader_blend_mode =
       params->use_shaders_for_blending
@@ -2056,7 +2057,7 @@
 
   TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
       gl_, &highp_threshold_cache_, settings_->highp_threshold_min,
-      quad->shared_quad_state->visible_quad_layer_rect.bottom_right());
+      quad->shared_quad_state->visible_quad_layer_rect.size());
   YUVAlphaTextureMode alpha_texture_mode = quad->a_plane_resource_id()
                                                ? YUV_HAS_ALPHA_TEXTURE
                                                : YUV_NO_ALPHA_TEXTURE;
@@ -2227,7 +2228,7 @@
 
   TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
       gl_, &highp_threshold_cache_, settings_->highp_threshold_min,
-      quad->shared_quad_state->visible_quad_layer_rect.bottom_right());
+      quad->shared_quad_state->visible_quad_layer_rect.size());
 
   DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_,
                                                  quad->resource_id());
@@ -2368,12 +2369,15 @@
     FlushTextureQuadCache(SHARED_BINDING);
   }
 
-  TexCoordPrecision tex_coord_precision = TexCoordPrecisionRequired(
-      gl_, &highp_threshold_cache_, settings_->highp_threshold_min,
-      quad->shared_quad_state->visible_quad_layer_rect.bottom_right());
-
   DisplayResourceProvider::ScopedReadLockGL lock(resource_provider_,
                                                  quad->resource_id());
+  // ScopedReadLockGL contains the correct texture size, even when
+  // quad->resource_size_in_pixesl() is empty.
+  const gfx::Size texture_size = lock.size();
+  TexCoordPrecision tex_coord_precision =
+      TexCoordPrecisionRequired(gl_, &highp_threshold_cache_,
+                                settings_->highp_threshold_min, texture_size);
+
   const SamplerType sampler = SamplerTypeFromTextureTarget(lock.target());
 
   bool need_tex_clamp_rect = !quad->resource_size_in_pixels().IsEmpty() &&
@@ -2408,7 +2412,6 @@
     uv_transform = UVTransform(quad);
   if (sampler == SAMPLER_TYPE_2D_RECT) {
     // Un-normalize the texture coordiantes for rectangle targets.
-    gfx::Size texture_size = lock.size();
     uv_transform.data[0] *= texture_size.width();
     uv_transform.data[2] *= texture_size.width();
     uv_transform.data[1] *= texture_size.height();
@@ -2418,7 +2421,8 @@
 
   if (need_tex_clamp_rect) {
     DCHECK_EQ(1u, draw_cache_.uv_xform_data.size());
-    gfx::Size texture_size = quad->resource_size_in_pixels();
+    DCHECK_EQ(texture_size.ToString(),
+              quad->resource_size_in_pixels().ToString());
     DCHECK(!texture_size.IsEmpty());
     gfx::RectF uv_visible_rect(
         quad->uv_top_left.x(), quad->uv_top_left.y(),
diff --git a/components/viz/service/display/gl_renderer.h b/components/viz/service/display/gl_renderer.h
index 2fb2675..ac15162 100644
--- a/components/viz/service/display/gl_renderer.h
+++ b/components/viz/service/display/gl_renderer.h
@@ -5,6 +5,8 @@
 #ifndef COMPONENTS_VIZ_SERVICE_DISPLAY_GL_RENDERER_H_
 #define COMPONENTS_VIZ_SERVICE_DISPLAY_GL_RENDERER_H_
 
+#include <map>
+#include <memory>
 #include <unordered_map>
 #include <vector>
 
diff --git a/components/viz/service/display/gl_renderer_unittest.cc b/components/viz/service/display/gl_renderer_unittest.cc
index d1f3838..448dbfe 100644
--- a/components/viz/service/display/gl_renderer_unittest.cc
+++ b/components/viz/service/display/gl_renderer_unittest.cc
@@ -9,6 +9,7 @@
 #include <memory>
 #include <set>
 #include <tuple>
+#include <utility>
 #include <vector>
 
 #include "base/location.h"
@@ -81,6 +82,11 @@
     return renderer->current_program_;
   }
 
+  static TexCoordPrecision get_cached_tex_coord_precision(
+      GLRenderer* renderer) {
+    return renderer->draw_cache_.program_key.tex_coord_precision();
+  }
+
   RenderPassList render_passes_in_draw_order_;
 };
 
@@ -483,9 +489,6 @@
   // GLRenderer methods.
 
   // Changing visibility to public.
-  using GLRenderer::DoDrawQuad;
-  using GLRenderer::BeginDrawingFrame;
-  using GLRenderer::FinishDrawingQuadList;
   using GLRenderer::stencil_enabled;
 };
 
@@ -656,6 +659,128 @@
   EXPECT_TRUE(renderer_->stencil_enabled());
 }
 
+TEST_F(GLRendererWithDefaultHarnessTest, TextureDrawQuadShaderPrecisionHigh) {
+  // TestContextProvider, used inside FakeOuputSurfaceClient, redefines
+  // GetShaderPrecisionFormat() and sets the resolution of mediump with
+  // 10-bits (1024). So any value higher than 1024 should use highp.
+  // The goal is to make sure the fragment shaders used in DoDrawQuad() use
+  // the correct precision qualifier.
+
+  const gfx::Size viewport_size(1, 1);
+  RenderPass* root_pass = cc::AddRenderPass(
+      &render_passes_in_draw_order_, 1, gfx::Rect(viewport_size),
+      gfx::Transform(), cc::FilterOperations());
+
+  const bool needs_blending = false;
+  const bool premultiplied_alpha = false;
+  const bool flipped = false;
+  const bool nearest_neighbor = false;
+  const float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+  const gfx::PointF uv_top_left(0, 0);
+  const gfx::PointF uv_bottom_right(1, 1);
+
+  auto child_context_provider = TestContextProvider::Create();
+  child_context_provider->BindToCurrentThread();
+
+  auto child_resource_provider = std::make_unique<ClientResourceProvider>(true);
+
+  // Here is where the texture is created. Any value bigger than 1024 should use
+  // a highp.
+  auto transfer_resource = TransferableResource::MakeGLOverlay(
+      gpu::Mailbox::Generate(), GL_LINEAR, GL_TEXTURE_2D, gpu::SyncToken(),
+      gfx::Size(1025, 1025), true);
+  ResourceId client_resource_id = child_resource_provider->ImportResource(
+      transfer_resource, SingleReleaseCallback::Create(base::DoNothing()));
+
+  std::unordered_map<ResourceId, ResourceId> resource_map =
+      cc::SendResourceAndGetChildToParentMap(
+          {client_resource_id}, resource_provider_.get(),
+          child_resource_provider.get(), child_context_provider.get());
+  unsigned resource_id = resource_map[client_resource_id];
+
+  // The values defined here should not alter the size of the already created
+  // texture.
+  TextureDrawQuad* overlay_quad =
+      root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
+  SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState();
+  shared_state->SetAll(gfx::Transform(), gfx::Rect(viewport_size),
+                       gfx::Rect(1023, 1023), gfx::Rect(1023, 1023), false,
+                       false, 1, SkBlendMode::kSrcOver, 0);
+  overlay_quad->SetNew(shared_state, gfx::Rect(1023, 1023),
+                       gfx::Rect(1023, 1023), needs_blending, resource_id,
+                       premultiplied_alpha, uv_top_left, uv_bottom_right,
+                       SK_ColorTRANSPARENT, vertex_opacity, flipped,
+                       nearest_neighbor, false);
+
+  DrawFrame(renderer_.get(), viewport_size);
+
+  TexCoordPrecision precision = get_cached_tex_coord_precision(renderer_.get());
+  EXPECT_EQ(precision, TEX_COORD_PRECISION_HIGH);
+
+  child_resource_provider->ShutdownAndReleaseAllResources();
+}
+
+TEST_F(GLRendererWithDefaultHarnessTest, TextureDrawQuadShaderPrecisionMedium) {
+  // TestContextProvider, used inside FakeOuputSurfaceClient, redefines
+  // GetShaderPrecisionFormat() and sets the resolution of mediump with
+  // 10-bits (1024). So any value higher than 1024 should use highp.
+  // The goal is to make sure the fragment shaders used in DoDrawQuad() use
+  // the correct precision qualifier.
+
+  const gfx::Size viewport_size(1, 1);
+  RenderPass* root_pass = cc::AddRenderPass(
+      &render_passes_in_draw_order_, 1, gfx::Rect(viewport_size),
+      gfx::Transform(), cc::FilterOperations());
+
+  const bool needs_blending = false;
+  const bool premultiplied_alpha = false;
+  const bool flipped = false;
+  const bool nearest_neighbor = false;
+  const float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+  const gfx::PointF uv_top_left(0, 0);
+  const gfx::PointF uv_bottom_right(1, 1);
+
+  auto child_context_provider = TestContextProvider::Create();
+  child_context_provider->BindToCurrentThread();
+
+  auto child_resource_provider = std::make_unique<ClientResourceProvider>(true);
+
+  // Here is where the texture is created. Any value smaller than 1024 should
+  // use a mediump.
+  auto transfer_resource = TransferableResource::MakeGLOverlay(
+      gpu::Mailbox::Generate(), GL_LINEAR, GL_TEXTURE_2D, gpu::SyncToken(),
+      gfx::Size(1023, 1023), true);
+  ResourceId client_resource_id = child_resource_provider->ImportResource(
+      transfer_resource, SingleReleaseCallback::Create(base::DoNothing()));
+
+  std::unordered_map<ResourceId, ResourceId> resource_map =
+      cc::SendResourceAndGetChildToParentMap(
+          {client_resource_id}, resource_provider_.get(),
+          child_resource_provider.get(), child_context_provider.get());
+  unsigned resource_id = resource_map[client_resource_id];
+
+  // The values defined here should not alter the size of the already created
+  // texture.
+  TextureDrawQuad* overlay_quad =
+      root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
+  SharedQuadState* shared_state = root_pass->CreateAndAppendSharedQuadState();
+  shared_state->SetAll(gfx::Transform(), gfx::Rect(viewport_size),
+                       gfx::Rect(1025, 1025), gfx::Rect(1025, 1025), false,
+                       false, 1, SkBlendMode::kSrcOver, 0);
+  overlay_quad->SetNew(shared_state, gfx::Rect(1025, 1025),
+                       gfx::Rect(1025, 1025), needs_blending, resource_id,
+                       premultiplied_alpha, uv_top_left, uv_bottom_right,
+                       SK_ColorTRANSPARENT, vertex_opacity, flipped,
+                       nearest_neighbor, false);
+
+  DrawFrame(renderer_.get(), viewport_size);
+
+  TexCoordPrecision precision = get_cached_tex_coord_precision(renderer_.get());
+  EXPECT_EQ(precision, TEX_COORD_PRECISION_MEDIUM);
+
+  child_resource_provider->ShutdownAndReleaseAllResources();
+}
+
 class ForbidSynchronousCallGLES2Interface : public TestGLES2Interface {
  public:
   ForbidSynchronousCallGLES2Interface() = default;
diff --git a/components/viz/service/display/program_binding.h b/components/viz/service/display/program_binding.h
index 8b28c57..2a8fb9f 100644
--- a/components/viz/service/display/program_binding.h
+++ b/components/viz/service/display/program_binding.h
@@ -118,6 +118,7 @@
   void set_has_output_color_matrix(bool value) {
     has_output_color_matrix_ = value;
   }
+  TexCoordPrecision tex_coord_precision() const { return precision_; }
 
  private:
   friend struct ProgramKeyHash;
diff --git a/components/viz/service/display/surface_aggregator.cc b/components/viz/service/display/surface_aggregator.cc
index 60b32ff60..b3b74a3 100644
--- a/components/viz/service/display/surface_aggregator.cc
+++ b/components/viz/service/display/surface_aggregator.cc
@@ -48,6 +48,9 @@
     "Compositing.SurfaceAggregator.SurfaceDrawQuad.NoActiveFrame";
 const char kUmaUsingFallbackSurface[] =
     "Compositing.SurfaceAggregator.SurfaceDrawQuad.UsingFallbackSurface";
+const char kUmaManhattanDistanceToPrimary[] =
+    "Compositing.SurfaceAggregator.LatestInFlightSurface."
+    "ManhattanDistanceToPrimary";
 
 void MoveMatchingRequests(
     RenderPassId render_pass_id,
@@ -217,25 +220,33 @@
                                    dest_pass);
     return;
   }
-
-  Surface* fallback_surface = manager_->GetLatestInFlightSurface(
+  Surface* latest_surface = manager_->GetLatestInFlightSurface(
       primary_surface_id, *surface_quad->surface_range.start());
 
+  if (latest_surface &&
+      primary_surface_id.frame_sink_id() ==
+          latest_surface->surface_id().frame_sink_id() &&
+      primary_surface_id.local_surface_id().embed_token() ==
+          latest_surface->surface_id().local_surface_id().embed_token()) {
+    UMA_HISTOGRAM_COUNTS_100(
+        kUmaManhattanDistanceToPrimary,
+        latest_surface->surface_id().ManhattanDistanceTo(primary_surface_id));
+  }
+
   // If the fallback is specified and missing then that's an error. Report the
   // error to console, and log the UMA.
-  if (!fallback_surface || !fallback_surface->HasActiveFrame()) {
+  if (!latest_surface || !latest_surface->HasActiveFrame()) {
     ReportMissingFallbackSurface(*surface_quad->surface_range.start(),
-                                 fallback_surface);
+                                 latest_surface);
     EmitDefaultBackgroundColorQuad(surface_quad, target_transform, clip_rect,
                                    dest_pass);
     return;
   }
 
   if (!surface_quad->stretch_content_to_fill_bounds) {
-    const CompositorFrame& fallback_frame = fallback_surface->GetActiveFrame();
+    const CompositorFrame& fallback_frame = latest_surface->GetActiveFrame();
 
-    gfx::Rect fallback_rect(
-        fallback_surface->GetActiveFrame().size_in_pixels());
+    gfx::Rect fallback_rect(latest_surface->GetActiveFrame().size_in_pixels());
 
     float scale_ratio =
         parent_device_scale_factor / fallback_frame.device_scale_factor();
@@ -251,7 +262,7 @@
 
   ++uma_stats_.using_fallback_surface;
 
-  EmitSurfaceContent(fallback_surface, parent_device_scale_factor,
+  EmitSurfaceContent(latest_surface, parent_device_scale_factor,
                      surface_quad->shared_quad_state, surface_quad->rect,
                      surface_quad->visible_rect, target_transform, clip_rect,
                      surface_quad->stretch_content_to_fill_bounds, dest_pass,
diff --git a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
index dff9593..81218655 100644
--- a/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
+++ b/components/viz/service/frame_sinks/surface_synchronization_unittest.cc
@@ -1646,7 +1646,7 @@
   // while the parent CompositorFrame is blocked.
   parent_support().SubmitCompositorFrame(
       parent_id1.local_surface_id(),
-      MakeCompositorFrame({child_id2}, {SurfaceRange(child_id1)},
+      MakeCompositorFrame({child_id2}, {SurfaceRange(child_id1, child_id2)},
                           std::vector<TransferableResource>(),
                           MakeDefaultDeadline()));
   EXPECT_TRUE(parent_surface()->has_deadline());
diff --git a/components/viz/service/surfaces/surface.cc b/components/viz/service/surfaces/surface.cc
index dc9c682..813bd4a8 100644
--- a/components/viz/service/surfaces/surface.cc
+++ b/components/viz/service/surfaces/surface.cc
@@ -122,29 +122,19 @@
 }
 
 void Surface::RejectCompositorFramesToFallbackSurfaces() {
-  const std::vector<SurfaceId>& activation_dependencies =
-      GetPendingFrame().metadata.activation_dependencies;
-
   for (const SurfaceRange& surface_range :
        GetPendingFrame().metadata.referenced_surfaces) {
-    if (!surface_range.start())
+    // Only close the fallback surface if it exists, has a different
+    // LocalSurfaceId than the primary surface but has the same FrameSinkId
+    // as the primary surface.
+    if (!surface_range.start() ||
+        surface_range.start() == surface_range.end() ||
+        surface_range.start()->frame_sink_id() !=
+            surface_range.end().frame_sink_id()) {
       continue;
-    const SurfaceId& surface_id = *surface_range.start();
-    // A surface ID in |referenced_surfaces| that has a corresponding surface
-    // ID in |activation_dependencies| with the same frame sink ID is said to
-    // be a fallback surface that can be used in place of the primary surface
-    // if the deadline passes before the dependency becomes available.
-    auto it = std::find_if(
-        activation_dependencies.begin(), activation_dependencies.end(),
-        [surface_id](const SurfaceId& dependency) {
-          return dependency.frame_sink_id() == surface_id.frame_sink_id();
-        });
-    bool is_fallback_surface = it != activation_dependencies.end();
-    if (!is_fallback_surface)
-      continue;
-
-    Surface* fallback_surface =
-        surface_manager_->GetLatestInFlightSurface(*it, surface_id);
+    }
+    Surface* fallback_surface = surface_manager_->GetLatestInFlightSurface(
+        surface_range.end(), *surface_range.start());
 
     // A misbehaving client may report a non-existent surface ID as a
     // |referenced_surface|. In that case, |surface| would be nullptr, and
diff --git a/components/viz/service/surfaces/surface_manager.cc b/components/viz/service/surfaces/surface_manager.cc
index ff9617a4..561a5bae 100644
--- a/components/viz/service/surfaces/surface_manager.cc
+++ b/components/viz/service/surfaces/surface_manager.cc
@@ -28,6 +28,11 @@
 namespace viz {
 namespace {
 
+const char kUmaAliveSurfaces[] = "Compositing.SurfaceManager.AliveSurfaces";
+
+const char kUmaTemporarySurfaces[] =
+    "Compositing.SurfaceManager.TemporarySurfaces";
+
 constexpr base::TimeDelta kExpireInterval = base::TimeDelta::FromSeconds(10);
 
 const char kUmaRemovedTemporaryReference[] =
@@ -228,6 +233,13 @@
 
   SurfaceIdSet reachable_surfaces = GetLiveSurfacesForReferences();
 
+  // Log the number of reachable surfaces after a garbage collection.
+  UMA_HISTOGRAM_CUSTOM_COUNTS(kUmaAliveSurfaces, reachable_surfaces.size(), 1,
+                              200, 50);
+  // Log the number of temporary references after a garbage collection.
+  UMA_HISTOGRAM_CUSTOM_COUNTS(kUmaTemporarySurfaces,
+                              temporary_references_.size(), 1, 200, 50);
+
   std::vector<SurfaceId> surfaces_to_delete;
 
   // Delete all destroyed and unreachable surfaces.
diff --git a/content/app/strings/translations/content_strings_am.xtb b/content/app/strings/translations/content_strings_am.xtb
index eb84521..e68c2ac 100644
--- a/content/app/strings/translations/content_strings_am.xtb
+++ b/content/app/strings/translations/content_strings_am.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">ተንሸራታች</translation>
 <translation id="1211441953136645838">የግርጌ ማስታወሻ</translation>
 <translation id="1281252709823657822">መገናኛ</translation>
+<translation id="1289247557029249093">ከሥዕል-ውስጥ-ሥዕል ሁነታ ውጣ</translation>
 <translation id="1335095011850992622">ክሬዲቶች</translation>
 <translation id="1342835525016946179">ጽሑፍ</translation>
 <translation id="1359897965706325498">ሰንደቅ</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">አስገባ</translation>
 <translation id="2657045182931379222">ግራፊካዊ ነገር</translation>
 <translation id="2674318244760992338">ግርጌ</translation>
+<translation id="2706474812903655270">ይህ ቪዲዮ ስዕል-በስዕል ላይ እያጫወተ ነው</translation>
 <translation id="2709516037105925701">ራስ-ሙላ</translation>
 <translation id="2723001399770238859">ድምጽ</translation>
 <translation id="2746543609216772311">ዋጋ <ph name="MINIMUM_DATE_OR_TIME" /> ወይም ከዚያ በኋላ መሆን አለበት።</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">ቀሪ ጊዜ</translation>
 <translation id="7740016676195725605">የተዘጉ የስዕል መግለጫዎችን ማሳየት አቁም</translation>
 <translation id="7740050170769002709">የኤች ቲ ኤም ኤል ይዘት</translation>
+<translation id="7750228210027921155">በሥዕል ውስጥ ሥዕል</translation>
 <translation id="7789962463072032349">ላፍታ አቁም</translation>
 <translation id="7802800022689234070">ይፋ ማሳወቂያ ሶስት ማዕዘን</translation>
 <translation id="7888071071722539607">እባክዎ በኢሜይል አድራሻው ውስጥ «<ph name="ATSIGN" />» ያካትቱ። «<ph name="INVALIDADDRESS" />» ውስጥ «<ph name="ATSIGN" />» ይጎድላል።</translation>
diff --git a/content/app/strings/translations/content_strings_bg.xtb b/content/app/strings/translations/content_strings_bg.xtb
index 8001f48..a9d48c86 100644
--- a/content/app/strings/translations/content_strings_bg.xtb
+++ b/content/app/strings/translations/content_strings_bg.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">плъзгач</translation>
 <translation id="1211441953136645838">бележка в края</translation>
 <translation id="1281252709823657822">диалогов прозорец</translation>
+<translation id="1289247557029249093">Изход от режима „Картина в картината“</translation>
 <translation id="1335095011850992622">признания за източника</translation>
 <translation id="1342835525016946179">статия</translation>
 <translation id="1359897965706325498">банер</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Изпращане</translation>
 <translation id="2657045182931379222">графичен обект</translation>
 <translation id="2674318244760992338">долен колонтитул</translation>
+<translation id="2706474812903655270">Този видеоклип се възпроизвежда в режим „Картина в картината“</translation>
 <translation id="2709516037105925701">Автоматично попълване</translation>
 <translation id="2723001399770238859">звук</translation>
 <translation id="2746543609216772311">Стойността трябва да е <ph name="MINIMUM_DATE_OR_TIME" /> или по-късно.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">оставащо време</translation>
 <translation id="7740016676195725605">спиране на показването на надписите</translation>
 <translation id="7740050170769002709">HTML съдържание</translation>
+<translation id="7750228210027921155">Картина в картината</translation>
 <translation id="7789962463072032349">поставяне на пауза</translation>
 <translation id="7802800022689234070">триъгълник за разкриване на съдържание</translation>
 <translation id="7888071071722539607">Моля, включете „<ph name="ATSIGN" />“ в имейл адреса. В/ъв „<ph name="INVALIDADDRESS" />“ липсва „<ph name="ATSIGN" />“.</translation>
diff --git a/content/app/strings/translations/content_strings_ca.xtb b/content/app/strings/translations/content_strings_ca.xtb
index b91b469d..e051775 100644
--- a/content/app/strings/translations/content_strings_ca.xtb
+++ b/content/app/strings/translations/content_strings_ca.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">control lliscant</translation>
 <translation id="1211441953136645838">nota final</translation>
 <translation id="1281252709823657822">quadre de diàleg</translation>
+<translation id="1289247557029249093">Surt del mode de pantalla en pantalla</translation>
 <translation id="1335095011850992622">crèdits</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">bàner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Envia</translation>
 <translation id="2657045182931379222">objecte gràfic</translation>
 <translation id="2674318244760992338">peu</translation>
+<translation id="2706474812903655270">Aquest vídeo s'està reproduint en mode de pantalla en pantalla</translation>
 <translation id="2709516037105925701">Emplenament autom.</translation>
 <translation id="2723001399770238859">àudio</translation>
 <translation id="2746543609216772311">El valor ha de ser <ph name="MINIMUM_DATE_OR_TIME" /> o posterior.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">temps restant</translation>
 <translation id="7740016676195725605">deixa de mostrar subtítols ocults</translation>
 <translation id="7740050170769002709">Contingut HTML</translation>
+<translation id="7750228210027921155">Pantalla en pantalla</translation>
 <translation id="7789962463072032349">posa en pausa</translation>
 <translation id="7802800022689234070">triangle desplegable</translation>
 <translation id="7888071071722539607">Incloeu el símbol "<ph name="ATSIGN" />" a l'adreça electrònica. Al camp "<ph name="INVALIDADDRESS" />" falta el símbol "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_cs.xtb b/content/app/strings/translations/content_strings_cs.xtb
index beac6d5..f6e35d6f 100644
--- a/content/app/strings/translations/content_strings_cs.xtb
+++ b/content/app/strings/translations/content_strings_cs.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">posuvník</translation>
 <translation id="1211441953136645838">koncová poznámka</translation>
 <translation id="1281252709823657822">dialogové okno</translation>
+<translation id="1289247557029249093">Ukončit režim obrazu v obraze</translation>
 <translation id="1335095011850992622">poděkování</translation>
 <translation id="1342835525016946179">čl</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Odeslat</translation>
 <translation id="2657045182931379222">grafický objekt</translation>
 <translation id="2674318244760992338">zápatí</translation>
+<translation id="2706474812903655270">Toto video se přehrává v režimu obrazu v obraze</translation>
 <translation id="2709516037105925701">Automatické vyplňování</translation>
 <translation id="2723001399770238859">zvuk</translation>
 <translation id="2746543609216772311">Datum musí být <ph name="MINIMUM_DATE_OR_TIME" /> nebo později.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">zbývající čas</translation>
 <translation id="7740016676195725605">ukončit zobrazování titulků</translation>
 <translation id="7740050170769002709">Obsah ve formátu HTML</translation>
+<translation id="7750228210027921155">Obraz v obraze</translation>
 <translation id="7789962463072032349">pozastavit</translation>
 <translation id="7802800022689234070">tlačítko k zobrazení skrytého obsahu</translation>
 <translation id="7888071071722539607">Do e-mailové adresy zahrňte znak <ph name="ATSIGN" />. V adrese <ph name="INVALIDADDRESS" /> chybí znak <ph name="ATSIGN" />.</translation>
diff --git a/content/app/strings/translations/content_strings_da.xtb b/content/app/strings/translations/content_strings_da.xtb
index 2128488a..836c37f 100644
--- a/content/app/strings/translations/content_strings_da.xtb
+++ b/content/app/strings/translations/content_strings_da.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">skyder</translation>
 <translation id="1211441953136645838">slutnote</translation>
 <translation id="1281252709823657822">dialogboks</translation>
+<translation id="1289247557029249093">Afslut tilstanden med integreret billede</translation>
 <translation id="1335095011850992622">anerkendelser</translation>
 <translation id="1342835525016946179">artikel</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Indsend</translation>
 <translation id="2657045182931379222">grafikobjekt</translation>
 <translation id="2674318244760992338">sidefod</translation>
+<translation id="2706474812903655270">Denne video afspilles i tilstanden med integreret billede</translation>
 <translation id="2709516037105925701">AutoFyld</translation>
 <translation id="2723001399770238859">lyd</translation>
 <translation id="2746543609216772311">Værdien må ikke være tidligere end <ph name="MINIMUM_DATE_OR_TIME" />.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">resterende tid</translation>
 <translation id="7740016676195725605">stop visning af undertekster</translation>
 <translation id="7740050170769002709">HTML-indhold</translation>
+<translation id="7750228210027921155">Integreret billede</translation>
 <translation id="7789962463072032349">pause</translation>
 <translation id="7802800022689234070">Trekant til at vise eller skjule indhold</translation>
 <translation id="7888071071722539607">Mailadressen skal indeholde et "<ph name="ATSIGN" />". "<ph name="INVALIDADDRESS" />" mangler et "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_de.xtb b/content/app/strings/translations/content_strings_de.xtb
index f99cefd..f2f2ca890 100644
--- a/content/app/strings/translations/content_strings_de.xtb
+++ b/content/app/strings/translations/content_strings_de.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">Schieberegler</translation>
 <translation id="1211441953136645838">Endnote</translation>
 <translation id="1281252709823657822">Kleines Fenster</translation>
+<translation id="1289247557029249093">Bild-im-Bild-Modus beenden</translation>
 <translation id="1335095011850992622">Mitwirkende</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">Banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Senden</translation>
 <translation id="2657045182931379222">Grafikobjekt</translation>
 <translation id="2674318244760992338">Fußzeile</translation>
+<translation id="2706474812903655270">Dieses Video wird im Bild-in-Bild-Modus wiedergegeben</translation>
 <translation id="2709516037105925701">AutoFill</translation>
 <translation id="2723001399770238859">Audio</translation>
 <translation id="2746543609216772311">Verwenden Sie <ph name="MINIMUM_DATE_OR_TIME" /> oder einen späteren Wert.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">Verbleibende Zeit</translation>
 <translation id="7740016676195725605">Keine Untertitel mehr anzeigen</translation>
 <translation id="7740050170769002709">HTML-Inhalte</translation>
+<translation id="7750228210027921155">Bild-in-Bild</translation>
 <translation id="7789962463072032349">Pausieren</translation>
 <translation id="7802800022689234070">Aufklappdreieck</translation>
 <translation id="7888071071722539607">Die E-Mail-Adresse muss ein <ph name="ATSIGN" />-Zeichen enthalten. In der Angabe "<ph name="INVALIDADDRESS" />" fehlt ein <ph name="ATSIGN" />-Zeichen.</translation>
diff --git a/content/app/strings/translations/content_strings_el.xtb b/content/app/strings/translations/content_strings_el.xtb
index 05bc6e0f..5d16e52 100644
--- a/content/app/strings/translations/content_strings_el.xtb
+++ b/content/app/strings/translations/content_strings_el.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">ρυθμιστικό</translation>
 <translation id="1211441953136645838">σημείωση τέλους</translation>
 <translation id="1281252709823657822">παράθυρο διαλόγου</translation>
+<translation id="1289247557029249093">Έξοδος από τη λειτουργία picture-in-picture</translation>
 <translation id="1335095011850992622">συντελεστές</translation>
 <translation id="1342835525016946179">άρθρο</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Υποβολή</translation>
 <translation id="2657045182931379222">αντικείμενο γραφικών</translation>
 <translation id="2674318244760992338">υποσέλιδο</translation>
+<translation id="2706474812903655270">Η αναπαραγωγή αυτού του βίντεο γίνεται στη λειτουργία picture-in-picture</translation>
 <translation id="2709516037105925701">Αυτόματη συμπλήρωση</translation>
 <translation id="2723001399770238859">ήχος</translation>
 <translation id="2746543609216772311">Η τιμή πρέπει να είναι <ph name="MINIMUM_DATE_OR_TIME" /> ή μεταγενέστερη.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">χρόνος που απομένει</translation>
 <translation id="7740016676195725605">διακοπή προβολής υπότιτλων</translation>
 <translation id="7740050170769002709">Περιεχόμενο HTML</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7789962463072032349">παύση</translation>
 <translation id="7802800022689234070">τρίγωνο εμφάνισης/απόκρυψης</translation>
 <translation id="7888071071722539607">Συμπεριλάβετε το σύμβολο "<ph name="ATSIGN" />" στη διεύθυνση ηλεκτρονικού ταχυδρομείου. Από τη διεύθυνση "<ph name="INVALIDADDRESS" />" λείπει το σύμβολο "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_es.xtb b/content/app/strings/translations/content_strings_es.xtb
index c3a46c20..4c542b6b 100644
--- a/content/app/strings/translations/content_strings_es.xtb
+++ b/content/app/strings/translations/content_strings_es.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">control deslizante</translation>
 <translation id="1211441953136645838">nota final</translation>
 <translation id="1281252709823657822">cuadro de diálogo</translation>
+<translation id="1289247557029249093">Salir del modo imagen en imagen</translation>
 <translation id="1335095011850992622">créditos</translation>
 <translation id="1342835525016946179">artículo</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Enviar</translation>
 <translation id="2657045182931379222">objeto gráfico</translation>
 <translation id="2674318244760992338">pie de página</translation>
+<translation id="2706474812903655270">Este vídeo se está reproduciendo en modo imagen en imagen</translation>
 <translation id="2709516037105925701">Autocompletar</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">El valor debe ser igual o posterior a <ph name="MINIMUM_DATE_OR_TIME" />.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">tiempo restante</translation>
 <translation id="7740016676195725605">dejar de mostrar subtítulos</translation>
 <translation id="7740050170769002709">Contenido HTML</translation>
+<translation id="7750228210027921155">Imagen en imagen</translation>
 <translation id="7789962463072032349">pausar</translation>
 <translation id="7802800022689234070">triángulo de revelación</translation>
 <translation id="7888071071722539607">Incluye un signo "<ph name="ATSIGN" />" en la dirección de correo electrónico. La dirección "<ph name="INVALIDADDRESS" />" no incluye el signo "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_et.xtb b/content/app/strings/translations/content_strings_et.xtb
index 3ecccea7..0490fd1 100644
--- a/content/app/strings/translations/content_strings_et.xtb
+++ b/content/app/strings/translations/content_strings_et.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">liugur</translation>
 <translation id="1211441953136645838">järelmärkus</translation>
 <translation id="1281252709823657822">dialoog</translation>
+<translation id="1289247557029249093">Välju režiimist Pilt pildis</translation>
 <translation id="1335095011850992622">tiitrid</translation>
 <translation id="1342835525016946179">artikkel</translation>
 <translation id="1359897965706325498">bänner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Esita</translation>
 <translation id="2657045182931379222">graafika objekt</translation>
 <translation id="2674318244760992338">jalus</translation>
+<translation id="2706474812903655270">Videot esitatakse režiimis Pilt pildis</translation>
 <translation id="2709516037105925701">Automaatne täitmine</translation>
 <translation id="2723001399770238859">heli</translation>
 <translation id="2746543609216772311">Väärtus peab olema <ph name="MINIMUM_DATE_OR_TIME" /> või hilisem.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">järelejäänud aeg</translation>
 <translation id="7740016676195725605">subtiitrite kuvamise peatamine</translation>
 <translation id="7740050170769002709">HTML-sisu</translation>
+<translation id="7750228210027921155">Pilt pildis</translation>
 <translation id="7789962463072032349">peata</translation>
 <translation id="7802800022689234070">avalikustamise kolmnurk</translation>
 <translation id="7888071071722539607">Lisage e-posti aadressile märk „<ph name="ATSIGN" />”. Aadressist „<ph name="INVALIDADDRESS" />” puudub märk „<ph name="ATSIGN" />”.</translation>
diff --git a/content/app/strings/translations/content_strings_fa.xtb b/content/app/strings/translations/content_strings_fa.xtb
index 7f96e84a..6a0cbe1 100644
--- a/content/app/strings/translations/content_strings_fa.xtb
+++ b/content/app/strings/translations/content_strings_fa.xtb
@@ -5,13 +5,14 @@
 <translation id="1020833440720551630">بیصداکردن تراک صوتی</translation>
 <translation id="10623998915015855">دکمه تغییر حالت</translation>
 <translation id="1088086359088493902">ثانیه</translation>
-<translation id="1171774979989969504">لطفاً یک نشانی رایانامه وارد کنید.</translation>
+<translation id="1171774979989969504">لطفاً یک نشانی ایمیل وارد کنید.</translation>
 <translation id="1178581264944972037">مکث</translation>
 <translation id="1188858454923323853">تکمیلی</translation>
 <translation id="1206619573307042055">نوشتار متحرک روی صفحه</translation>
 <translation id="1206693055195146388">لغزنده</translation>
 <translation id="1211441953136645838">ته‌نویس</translation>
 <translation id="1281252709823657822">کادر گفتگو</translation>
+<translation id="1289247557029249093">خروج از حالت تصویردرتصویر</translation>
 <translation id="1335095011850992622">دست‌اندرکاران</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">برنما</translation>
@@ -20,7 +21,7 @@
 <translation id="1591562245178063882">این ماه</translation>
 <translation id="1637811476055996098">انتخاب فایل‌ها</translation>
 <translation id="1650423536718072820">نقل‌قول</translation>
-<translation id="1729654308190250600">لطفاً یک نشانی رایانامه غیرخالی وارد کنید.</translation>
+<translation id="1729654308190250600">لطفاً یک نشانی ایمیل غیرخالی وارد کنید.</translation>
 <translation id="1758486001363313524">موارد دیگر...</translation>
 <translation id="1806710327868736751">alert_dialog</translation>
 <translation id="1821985195704844674">شبکه درختی</translation>
@@ -51,13 +52,14 @@
 <translation id="2653659639078652383">ارائه</translation>
 <translation id="2657045182931379222">شیء گرافیکی</translation>
 <translation id="2674318244760992338">پانویس</translation>
+<translation id="2706474812903655270">این ویدیو درحال پخش درحالت تصویردرتصویر است</translation>
 <translation id="2709516037105925701">تکمیل خودکار</translation>
 <translation id="2723001399770238859">صدا</translation>
 <translation id="2746543609216772311">مقدار باید <ph name="MINIMUM_DATE_OR_TIME" /> یا بعد از آن باشد.</translation>
 <translation id="2759744352195237655">دکمه بازشو</translation>
 <translation id="2761667185364618470">درصورتی‌که می‌خواهید ادامه دهید، این کادر را انتخاب کنید.</translation>
 <translation id="2896972712917208084">گروه رادیویی</translation>
-<translation id="2908441821576996758">لطفاً لیستی از آدرس‌های رایانامه که با کاما از هم جدا شده‌اند را وارد کنید.</translation>
+<translation id="2908441821576996758">لطفاً لیستی از آدرس‌های ایمیل که با کاما از هم جدا شده‌اند را وارد کنید.</translation>
 <translation id="2940813599313844715">شیء</translation>
 <translation id="2942448076852699108">محتوای برجسته شده</translation>
 <translation id="3040011195152428237">پیوند</translation>
@@ -189,9 +191,10 @@
 <translation id="7720026100085573005">زمان باقی‌مانده</translation>
 <translation id="7740016676195725605">توقف نمایش زیرنویس ناشنوایان</translation>
 <translation id="7740050170769002709">‏محتوای HTML</translation>
+<translation id="7750228210027921155">تصویردرتصویر</translation>
 <translation id="7789962463072032349">مکث</translation>
 <translation id="7802800022689234070">مثلث افشا</translation>
-<translation id="7888071071722539607">لطفاً نماد «<ph name="ATSIGN" />» را به نشانی رایانامه اضافه کنید. «<ph name="INVALIDADDRESS" />» در «<ph name="ATSIGN" />» موجود نیست.</translation>
+<translation id="7888071071722539607">لطفاً نماد «<ph name="ATSIGN" />» را به نشانی ایمیل اضافه کنید. «<ph name="INVALIDADDRESS" />» در «<ph name="ATSIGN" />» موجود نیست.</translation>
 <translation id="7891486169920085145">تقسیم‌کننده</translation>
 <translation id="795667975304826397">فایلی انتخاب نشده است</translation>
 <translation id="8053789581856978548">فیلد نوشتاری جستجو</translation>
diff --git a/content/app/strings/translations/content_strings_fi.xtb b/content/app/strings/translations/content_strings_fi.xtb
index 909e5cc..4207c01 100644
--- a/content/app/strings/translations/content_strings_fi.xtb
+++ b/content/app/strings/translations/content_strings_fi.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">liukusäädin</translation>
 <translation id="1211441953136645838">loppuhuomautus</translation>
 <translation id="1281252709823657822">valintaikkuna</translation>
+<translation id="1289247557029249093">Sulje kuva kuvassa ‑tila</translation>
 <translation id="1335095011850992622">tunnustukset</translation>
 <translation id="1342835525016946179">artikkeli</translation>
 <translation id="1359897965706325498">banneri</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Lähetä</translation>
 <translation id="2657045182931379222">grafiikkaobjekti</translation>
 <translation id="2674318244760992338">alaviite</translation>
+<translation id="2706474812903655270">Video toistetaan Kuva kuvassa ‑tilassa</translation>
 <translation id="2709516037105925701">Automaattinen täyttö</translation>
 <translation id="2723001399770238859">ääni</translation>
 <translation id="2746543609216772311">Arvon on oltava <ph name="MINIMUM_DATE_OR_TIME" /> tai myöhempi.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">jäljellä oleva aika</translation>
 <translation id="7740016676195725605">älä näytä tekstityksiä</translation>
 <translation id="7740050170769002709">HTML-sisältö</translation>
+<translation id="7750228210027921155">Kuva kuvassa</translation>
 <translation id="7789962463072032349">tauko</translation>
 <translation id="7802800022689234070">näyttämiskolmio</translation>
 <translation id="7888071071722539607">Sähköpostiosoitteeseen kuuluu <ph name="ATSIGN" />-osa. Osoitteesta <ph name="INVALIDADDRESS" /> puuttuu <ph name="ATSIGN" />.</translation>
diff --git a/content/app/strings/translations/content_strings_fil.xtb b/content/app/strings/translations/content_strings_fil.xtb
index 7602285..1630404 100644
--- a/content/app/strings/translations/content_strings_fil.xtb
+++ b/content/app/strings/translations/content_strings_fil.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">slider</translation>
 <translation id="1211441953136645838">endnote</translation>
 <translation id="1281252709823657822">dialog</translation>
+<translation id="1289247557029249093">Lumabas sa picture-in-picture mode</translation>
 <translation id="1335095011850992622">mga credit</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Isumite</translation>
 <translation id="2657045182931379222">object ng graphics</translation>
 <translation id="2674318244760992338">footer</translation>
+<translation id="2706474812903655270">Nagpe-play ang video na ito sa picture-in-picture mode</translation>
 <translation id="2709516037105925701">AutoFill</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Dapat <ph name="MINIMUM_DATE_OR_TIME" /> o mas bago ang value.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">natitirang oras</translation>
 <translation id="7740016676195725605">ihinto ang pagpapakita ng mga nakasarang caption</translation>
 <translation id="7740050170769002709">HTML na nilalaman</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7789962463072032349">i-pause</translation>
 <translation id="7802800022689234070">disclosure triangle</translation>
 <translation id="7888071071722539607">Mangyaring magsama ng '<ph name="ATSIGN" />' sa email address. Kulang ng '<ph name="ATSIGN" />' ang '<ph name="INVALIDADDRESS" />.'</translation>
diff --git a/content/app/strings/translations/content_strings_fr.xtb b/content/app/strings/translations/content_strings_fr.xtb
index 041f864..f7877500 100644
--- a/content/app/strings/translations/content_strings_fr.xtb
+++ b/content/app/strings/translations/content_strings_fr.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">curseur</translation>
 <translation id="1211441953136645838">note de fin</translation>
 <translation id="1281252709823657822">boîte de dialogue</translation>
+<translation id="1289247557029249093">Quitter le mode PIP</translation>
 <translation id="1335095011850992622">crédits</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">bannière</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Valider</translation>
 <translation id="2657045182931379222">objet graphique</translation>
 <translation id="2674318244760992338">pied de page</translation>
+<translation id="2706474812903655270">Cette vidéo est diffusée en mode PIP</translation>
 <translation id="2709516037105925701">Saisie automatique</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">La date ou l'heure doit être égale ou postérieure à "<ph name="MINIMUM_DATE_OR_TIME" />".</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">temps restant</translation>
 <translation id="7740016676195725605">ne plus afficher les sous-titres</translation>
 <translation id="7740050170769002709">Contenu HTML</translation>
+<translation id="7750228210027921155">Mode PIP (Picture-in-Picture)</translation>
 <translation id="7789962463072032349">pause</translation>
 <translation id="7802800022689234070">triangle d'expansion</translation>
 <translation id="7888071071722539607">Veuillez inclure "<ph name="ATSIGN" />" dans l'adresse e-mail. Il manque un symbole "<ph name="ATSIGN" />" dans "<ph name="INVALIDADDRESS" />".</translation>
diff --git a/content/app/strings/translations/content_strings_gu.xtb b/content/app/strings/translations/content_strings_gu.xtb
index cc354e1..b5465b6 100644
--- a/content/app/strings/translations/content_strings_gu.xtb
+++ b/content/app/strings/translations/content_strings_gu.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">સ્લાઇડર</translation>
 <translation id="1211441953136645838">અંતિમ નોંધ</translation>
 <translation id="1281252709823657822">સંવાદ</translation>
+<translation id="1289247557029249093">ચિત્રમાં ચિત્ર મોડમાંથી બહાર નીકળો</translation>
 <translation id="1335095011850992622">ક્રેડિટ</translation>
 <translation id="1342835525016946179">લેખ</translation>
 <translation id="1359897965706325498">બેનર</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">સબમિટ કરો</translation>
 <translation id="2657045182931379222">ગ્રાફિક્સ ઑબ્જેક્ટ</translation>
 <translation id="2674318244760992338">ફૂટર</translation>
+<translation id="2706474812903655270">આ વીડિઓ ચિત્રમાં ચિત્ર મોડમાં ચાલી રહ્યો છે</translation>
 <translation id="2709516037105925701">સ્વતઃભરો</translation>
 <translation id="2723001399770238859">ઑડિઓ</translation>
 <translation id="2746543609216772311">મૂલ્ય <ph name="MINIMUM_DATE_OR_TIME" /> અથવા પછીનું હોવું આવશ્યક છે.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">બાકીનો સમય</translation>
 <translation id="7740016676195725605">વિગતવાર ઉપશીર્ષકનું પ્રદર્શન અટકાવો</translation>
 <translation id="7740050170769002709">HTML સામગ્રી</translation>
+<translation id="7750228210027921155">ચિત્રમાં ચિત્ર</translation>
 <translation id="7789962463072032349">થોભો</translation>
 <translation id="7802800022689234070">પ્રકટીકરણ ત્રિકોણ</translation>
 <translation id="7888071071722539607">કૃપા કરીને ઇમેઇલ સરનામાંમાં '<ph name="ATSIGN" />' શામેલ કરો. '<ph name="INVALIDADDRESS" />' માં '<ph name="ATSIGN" />' ખૂટી રહ્યું છે.</translation>
diff --git a/content/app/strings/translations/content_strings_hi.xtb b/content/app/strings/translations/content_strings_hi.xtb
index 2e8e0f1..6a1fc5c 100644
--- a/content/app/strings/translations/content_strings_hi.xtb
+++ b/content/app/strings/translations/content_strings_hi.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">स्लाइडर</translation>
 <translation id="1211441953136645838">एंड नोट</translation>
 <translation id="1281252709823657822">संवाद</translation>
+<translation id="1289247557029249093">'पिक्चर में पिक्चर' मोड से बाहर निकलें</translation>
 <translation id="1335095011850992622">क्रेडिट</translation>
 <translation id="1342835525016946179">लेख</translation>
 <translation id="1359897965706325498">बैनर</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">सबमिट करें</translation>
 <translation id="2657045182931379222">ग्राफ़िक्स ऑब्जेक्ट</translation>
 <translation id="2674318244760992338">पाद लेख</translation>
+<translation id="2706474812903655270">यह वीडियो 'पिक्चर में पिक्चर' मोड में चल रहा है</translation>
 <translation id="2709516037105925701">ऑटोमैटिक भरना</translation>
 <translation id="2723001399770238859">ऑडियो</translation>
 <translation id="2746543609216772311">मान <ph name="MINIMUM_DATE_OR_TIME" /> या बाद का होना चाहिए.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">शेष समय</translation>
 <translation id="7740016676195725605">बंद कैप्शन दिखाना रोकें</translation>
 <translation id="7740050170769002709">HTML सामग्री</translation>
+<translation id="7750228210027921155">पिक्चर में पिक्चर</translation>
 <translation id="7789962463072032349">पॉज़ करें</translation>
 <translation id="7802800022689234070">प्रकटीकरण त्रिकोण</translation>
 <translation id="7888071071722539607">कृपया ईमेल पते में '<ph name="ATSIGN" />' शामिल करें. '<ph name="INVALIDADDRESS" />' में '<ph name="ATSIGN" />' नहीं है.</translation>
diff --git a/content/app/strings/translations/content_strings_hr.xtb b/content/app/strings/translations/content_strings_hr.xtb
index 31b0dfaa..bbf4478 100644
--- a/content/app/strings/translations/content_strings_hr.xtb
+++ b/content/app/strings/translations/content_strings_hr.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">klizač</translation>
 <translation id="1211441953136645838">završna napomena</translation>
 <translation id="1281252709823657822">dijalog</translation>
+<translation id="1289247557029249093">Izlaz iz načina slike u slici</translation>
 <translation id="1335095011850992622">zasluge</translation>
 <translation id="1342835525016946179">članak</translation>
 <translation id="1359897965706325498">natpis</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Pošalji</translation>
 <translation id="2657045182931379222">grafički objekt</translation>
 <translation id="2674318244760992338">podnožje</translation>
+<translation id="2706474812903655270">Ovaj se videozapis prikazuje u načinu slike u slici</translation>
 <translation id="2709516037105925701">Automatsko popunjavanje</translation>
 <translation id="2723001399770238859">zvuk</translation>
 <translation id="2746543609216772311">Vrijednost mora biti <ph name="MINIMUM_DATE_OR_TIME" /> ili nakon toga.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">preostalo vrijeme</translation>
 <translation id="7740016676195725605">zaustavljanje prikazivanja titlova</translation>
 <translation id="7740050170769002709">HTML sadržaj</translation>
+<translation id="7750228210027921155">Slika u slici</translation>
 <translation id="7789962463072032349">pauziraj</translation>
 <translation id="7802800022689234070">trokut za otkrivanje</translation>
 <translation id="7888071071722539607">Uključite znak "<ph name="ATSIGN" />" u e-adresu. U adresi "<ph name="INVALIDADDRESS" />" nedostaje znak "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_hu.xtb b/content/app/strings/translations/content_strings_hu.xtb
index cbc800f..a5ba319 100644
--- a/content/app/strings/translations/content_strings_hu.xtb
+++ b/content/app/strings/translations/content_strings_hu.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">csúszka</translation>
 <translation id="1211441953136645838">záró jegyzet</translation>
 <translation id="1281252709823657822">párbeszédpanel</translation>
+<translation id="1289247557029249093">Kilépés a kép a képben módból</translation>
 <translation id="1335095011850992622">készítők</translation>
 <translation id="1342835525016946179">cikk</translation>
 <translation id="1359897965706325498">szalaghirdetés</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Elküldés</translation>
 <translation id="2657045182931379222">grafikus objektum</translation>
 <translation id="2674318244760992338">lábléc</translation>
+<translation id="2706474812903655270">A videó lejátszása kép a képben módban történik</translation>
 <translation id="2709516037105925701">Automatikus kitöltés</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Az érték <ph name="MINIMUM_DATE_OR_TIME" /> vagy azt követő kell, hogy legyen.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">hátralévő idő</translation>
 <translation id="7740016676195725605">feliratok elrejtése</translation>
 <translation id="7740050170769002709">HTML-tartalom</translation>
+<translation id="7750228210027921155">Kép a képben</translation>
 <translation id="7789962463072032349">szüneteltetés</translation>
 <translation id="7802800022689234070">plusz tartalom kibontására szolgáló háromszög</translation>
 <translation id="7888071071722539607">Kérjük, írjon egy „<ph name="ATSIGN" />” karaktert az e-mail címbe. A(z) „<ph name="INVALIDADDRESS" />” címből hiányzik a „<ph name="ATSIGN" />” jel.</translation>
diff --git a/content/app/strings/translations/content_strings_id.xtb b/content/app/strings/translations/content_strings_id.xtb
index 64a2c7f..e1c21fd0 100644
--- a/content/app/strings/translations/content_strings_id.xtb
+++ b/content/app/strings/translations/content_strings_id.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">penggeser</translation>
 <translation id="1211441953136645838">catatan akhir</translation>
 <translation id="1281252709823657822">dialog</translation>
+<translation id="1289247557029249093">Keluar dari mode picture-in-picture</translation>
 <translation id="1335095011850992622">daftar penghargaan</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">spanduk</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Kirim</translation>
 <translation id="2657045182931379222">objek grafis</translation>
 <translation id="2674318244760992338">footer</translation>
+<translation id="2706474812903655270">Video ini diputar dalam mode picture-in-picture</translation>
 <translation id="2709516037105925701">Isi-Otomatis</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Tanggal harus <ph name="MINIMUM_DATE_OR_TIME" /> atau setelahnya.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">sisa waktu</translation>
 <translation id="7740016676195725605">berhenti menampilkan teks</translation>
 <translation id="7740050170769002709">Konten HTML</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7789962463072032349">jeda</translation>
 <translation id="7802800022689234070">segitiga pengungkapan</translation>
 <translation id="7888071071722539607">Sertakan '<ph name="ATSIGN" />' pada alamat email. '<ph name="INVALIDADDRESS" />' tidak memiliki '<ph name="ATSIGN" />'.</translation>
diff --git a/content/app/strings/translations/content_strings_it.xtb b/content/app/strings/translations/content_strings_it.xtb
index db7b7a0..283ac3b 100644
--- a/content/app/strings/translations/content_strings_it.xtb
+++ b/content/app/strings/translations/content_strings_it.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">dispositivo di scorrimento</translation>
 <translation id="1211441953136645838">nota finale</translation>
 <translation id="1281252709823657822">finestra di dialogo</translation>
+<translation id="1289247557029249093">Esci dalla modalità Picture-in-picture</translation>
 <translation id="1335095011850992622">ringraziamenti</translation>
 <translation id="1342835525016946179">articolo</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Invia</translation>
 <translation id="2657045182931379222">oggetto grafico</translation>
 <translation id="2674318244760992338">piè di pagina</translation>
+<translation id="2706474812903655270">Questo video è riprodotto in modalità Picture in picture</translation>
 <translation id="2709516037105925701">Compilazione automatica</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Il valore deve essere <ph name="MINIMUM_DATE_OR_TIME" /> o successivo.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">tempo rimanente</translation>
 <translation id="7740016676195725605">interrompi la visualizzazione dei sottotitoli</translation>
 <translation id="7740050170769002709">Contenuti HTML</translation>
+<translation id="7750228210027921155">Picture in picture</translation>
 <translation id="7789962463072032349">pausa</translation>
 <translation id="7802800022689234070">triangolo descrittivo</translation>
 <translation id="7888071071722539607">Aggiungi un simbolo "<ph name="ATSIGN" />" nell'indirizzo email. In "<ph name="INVALIDADDRESS" />" manca un simbolo "<ph name="ATSIGN" />".</translation>
diff --git a/content/app/strings/translations/content_strings_iw.xtb b/content/app/strings/translations/content_strings_iw.xtb
index 2f56b4c..c13b61d 100644
--- a/content/app/strings/translations/content_strings_iw.xtb
+++ b/content/app/strings/translations/content_strings_iw.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">מחוון</translation>
 <translation id="1211441953136645838">הערת סיום</translation>
 <translation id="1281252709823657822">דו-שיח</translation>
+<translation id="1289247557029249093">יציאה ממצב 'תמונה בתוך תמונה'</translation>
 <translation id="1335095011850992622">קרדיטים</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">מודעת באנר</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">שלח</translation>
 <translation id="2657045182931379222">אובייקט גרפי</translation>
 <translation id="2674318244760992338">כותרת תחתונה</translation>
+<translation id="2706474812903655270">הסרטון הזה פועל במצב 'תמונה בתוך תמונה'</translation>
 <translation id="2709516037105925701">מילוי אוטומטי</translation>
 <translation id="2723001399770238859">אודיו</translation>
 <translation id="2746543609216772311">על הערך להיות <ph name="MINIMUM_DATE_OR_TIME" /> ומעלה.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">זמן שנותר</translation>
 <translation id="7740016676195725605">הפסק להציג כתוביות סגורות</translation>
 <translation id="7740050170769002709">‏תוכן HTML</translation>
+<translation id="7750228210027921155">תמונה בתוך תמונה</translation>
 <translation id="7789962463072032349">השהה</translation>
 <translation id="7802800022689234070">משולש הצגה/הסתרה</translation>
 <translation id="7888071071722539607">כלול '<ph name="ATSIGN" />' בכתובת האימייל. ב-'<ph name="INVALIDADDRESS" />' חסר '<ph name="ATSIGN" />'.</translation>
diff --git a/content/app/strings/translations/content_strings_ja.xtb b/content/app/strings/translations/content_strings_ja.xtb
index 8f29ed5..c8de147 100644
--- a/content/app/strings/translations/content_strings_ja.xtb
+++ b/content/app/strings/translations/content_strings_ja.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">スライダ</translation>
 <translation id="1211441953136645838">巻末注</translation>
 <translation id="1281252709823657822">ダイアログ</translation>
+<translation id="1289247557029249093">ピクチャー イン ピクチャー モードを終了する</translation>
 <translation id="1335095011850992622">クレジット</translation>
 <translation id="1342835525016946179">記事</translation>
 <translation id="1359897965706325498">バナー</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">送信</translation>
 <translation id="2657045182931379222">図形オブジェクト</translation>
 <translation id="2674318244760992338">フッター</translation>
+<translation id="2706474812903655270">この動画はピクチャー イン ピクチャー モードで再生されています</translation>
 <translation id="2709516037105925701">自動入力</translation>
 <translation id="2723001399770238859">音声</translation>
 <translation id="2746543609216772311"><ph name="MINIMUM_DATE_OR_TIME" /> 以降の値を指定する必要があります。</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">残り時間</translation>
 <translation id="7740016676195725605">クローズド キャプションの表示を終了</translation>
 <translation id="7740050170769002709">HTML コンテンツ</translation>
+<translation id="7750228210027921155">ピクチャー イン ピクチャー</translation>
 <translation id="7789962463072032349">一時停止</translation>
 <translation id="7802800022689234070">三角形の展開ボタン</translation>
 <translation id="7888071071722539607">メール アドレスに「<ph name="ATSIGN" />」を挿入してください。「<ph name="INVALIDADDRESS" />」内に「<ph name="ATSIGN" />」がありません。</translation>
diff --git a/content/app/strings/translations/content_strings_kn.xtb b/content/app/strings/translations/content_strings_kn.xtb
index 6bd1770a..0783881 100644
--- a/content/app/strings/translations/content_strings_kn.xtb
+++ b/content/app/strings/translations/content_strings_kn.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">ಸ್ಲೈಡರ್</translation>
 <translation id="1211441953136645838">ಮುಕ್ತಾಯ ಟಿಪ್ಪಣಿ</translation>
 <translation id="1281252709823657822">ಸಂವಾದ</translation>
+<translation id="1289247557029249093">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೋಡ್ ಅನ್ನು ನಿರ್ಗಮಿಸಿ</translation>
 <translation id="1335095011850992622">ಕ್ರೆಡಿಟ್‌ಗಳು</translation>
 <translation id="1342835525016946179">ಲೇಖನ</translation>
 <translation id="1359897965706325498">ಬ್ಯಾನರ್</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">ಸಲ್ಲಿಸು</translation>
 <translation id="2657045182931379222">ಗ್ರಾಫಿಕ್ಸ್ ವಸ್ತು</translation>
 <translation id="2674318244760992338">ಅಡಿಟಿಪ್ಪಣಿ</translation>
+<translation id="2706474812903655270">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ ಮೋಡ್‌ನಲ್ಲಿ ಈ ವೀಡಿಯೊ ಪ್ಲೇ ಆಗುತ್ತಿದೆ</translation>
 <translation id="2709516037105925701">ಸ್ವಯಂತುಂಬುವಿಕೆ</translation>
 <translation id="2723001399770238859">ಆಡಿಯೋ</translation>
 <translation id="2746543609216772311">ಮೌಲ್ಯವು <ph name="MINIMUM_DATE_OR_TIME" /> ಅಥವಾ ನಂತರದ್ದಾಗಿರಬೇಕು.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">ಉಳಿದಿರುವ ಸಮಯ</translation>
 <translation id="7740016676195725605">ಮುಚ್ಚಲಾಗಿರುವ ಶೀರ್ಷಿಕೆಗಳ ಪ್ರದರ್ಶಿಸುವಿಕೆಯನ್ನು ನಿಲ್ಲಿಸಿ</translation>
 <translation id="7740050170769002709">HTML ವಿಷಯ</translation>
+<translation id="7750228210027921155">ಚಿತ್ರದಲ್ಲಿ ಚಿತ್ರ</translation>
 <translation id="7789962463072032349">ವಿರಾಮ</translation>
 <translation id="7802800022689234070">ತ್ರಿಕೋನ ಪ್ರಕಟಣೆ</translation>
 <translation id="7888071071722539607">ಇಮೇಲ್ ವಿಳಾಸದಲ್ಲಿ ಒಂದು '<ph name="ATSIGN" />' ಅನ್ನು ಸೇರಿಸಿ. '<ph name="ATSIGN" />' ನಲ್ಲಿ '<ph name="INVALIDADDRESS" />' ಕಾಣೆಯಾಗಿದೆ.</translation>
diff --git a/content/app/strings/translations/content_strings_lt.xtb b/content/app/strings/translations/content_strings_lt.xtb
index 0ff84e2..d3c6446 100644
--- a/content/app/strings/translations/content_strings_lt.xtb
+++ b/content/app/strings/translations/content_strings_lt.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">šliaužiklis</translation>
 <translation id="1211441953136645838">išnaša</translation>
 <translation id="1281252709823657822">dialogo langas</translation>
+<translation id="1289247557029249093">Išeiti iš vaizdo vaizde režimo</translation>
 <translation id="1335095011850992622">titrai</translation>
 <translation id="1342835525016946179">artikelis</translation>
 <translation id="1359897965706325498">reklamjuostė</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Pateikti</translation>
 <translation id="2657045182931379222">grafikos objektas</translation>
 <translation id="2674318244760992338">poraštė</translation>
+<translation id="2706474812903655270">Šis vaizdo įrašas leidžiamas vaizdo vaizde režimu</translation>
 <translation id="2709516037105925701">Automatinis pildymas</translation>
 <translation id="2723001399770238859">garso įrašas</translation>
 <translation id="2746543609216772311">Vertė turi būti <ph name="MINIMUM_DATE_OR_TIME" /> ar vėlesnė data.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">likęs laikas</translation>
 <translation id="7740016676195725605">nebepateikti subtitrų</translation>
 <translation id="7740050170769002709">HTML turinys</translation>
+<translation id="7750228210027921155">Vaizdas vaizde</translation>
 <translation id="7789962463072032349">pristabdyti</translation>
 <translation id="7802800022689234070">paskelbimo trikampis</translation>
 <translation id="7888071071722539607">Į el. pašto adresą įtraukite „<ph name="ATSIGN" />“. „<ph name="INVALIDADDRESS" />“ trūksta „<ph name="ATSIGN" />“.</translation>
diff --git a/content/app/strings/translations/content_strings_lv.xtb b/content/app/strings/translations/content_strings_lv.xtb
index 6264e802..cadacb3f 100644
--- a/content/app/strings/translations/content_strings_lv.xtb
+++ b/content/app/strings/translations/content_strings_lv.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">slīdnis</translation>
 <translation id="1211441953136645838">beigu vēre</translation>
 <translation id="1281252709823657822">dialoglodziņš</translation>
+<translation id="1289247557029249093">Iziet no režīma “Attēls attēlā”</translation>
 <translation id="1335095011850992622">pateicības</translation>
 <translation id="1342835525016946179">raksts</translation>
 <translation id="1359897965706325498">reklāmkarogs</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Iesniegt</translation>
 <translation id="2657045182931379222">grafiskais objekts</translation>
 <translation id="2674318244760992338">kājene</translation>
+<translation id="2706474812903655270">Videoklips tiek atskaņots režīmā “Attēls attēlā”</translation>
 <translation id="2709516037105925701">Automātiskā aizpilde</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Vērtībai ir jābūt “<ph name="MINIMUM_DATE_OR_TIME" />” vai vēlākam datumam vai laikam.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">atlikušais laiks</translation>
 <translation id="7740016676195725605">apturēt slēgto parakstu rādīšanu</translation>
 <translation id="7740050170769002709">HTML saturs</translation>
+<translation id="7750228210027921155">Attēls attēlā</translation>
 <translation id="7789962463072032349">pauzēt</translation>
 <translation id="7802800022689234070">satura atklāšanas trijstūris</translation>
 <translation id="7888071071722539607">E-pasta adresē ietveriet zīmi <ph name="ATSIGN" />. Adresē “<ph name="INVALIDADDRESS" />” trūkst zīmes <ph name="ATSIGN" />.</translation>
diff --git a/content/app/strings/translations/content_strings_ml.xtb b/content/app/strings/translations/content_strings_ml.xtb
index 6122ada..dc74067 100644
--- a/content/app/strings/translations/content_strings_ml.xtb
+++ b/content/app/strings/translations/content_strings_ml.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">സ്ലൈഡർ</translation>
 <translation id="1211441953136645838">അന്തിമ കുറിപ്പ്</translation>
 <translation id="1281252709823657822">ഡയലോഗ്</translation>
+<translation id="1289247557029249093">ചിത്രത്തിനുള്ളിലെ ചിത്രം മോഡിന് പുറത്ത് കടക്കുക</translation>
 <translation id="1335095011850992622">ക്രെഡിറ്റുകൾ</translation>
 <translation id="1342835525016946179">ലേഖനം</translation>
 <translation id="1359897965706325498">ബാനർ</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">സമര്‍പ്പിക്കൂ</translation>
 <translation id="2657045182931379222">ഗ്രാഫിക്‌സ് ഒബ്‌ജക്‌റ്റ്</translation>
 <translation id="2674318244760992338">അടിക്കുറിപ്പ്</translation>
+<translation id="2706474812903655270">ചിത്രത്തിനുള്ളിലെ ചിത്രം മോഡിലാണ് ഈ വീഡിയോ പ്ലേ ചെയ്യുന്നത്</translation>
 <translation id="2709516037105925701">ഓട്ടോഫില്‍</translation>
 <translation id="2723001399770238859">ഓഡിയോ</translation>
 <translation id="2746543609216772311">മൂല്യം <ph name="MINIMUM_DATE_OR_TIME" /> എന്നതോ അതിനുശേഷമുള്ള തീയതിയോ ആയിരിക്കണം.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">അവശേഷിക്കുന്ന സമയം</translation>
 <translation id="7740016676195725605">അടച്ച അടിക്കുറിപ്പുകൾ പ്രദർശിപ്പിക്കുന്നത് നിർത്തുക</translation>
 <translation id="7740050170769002709">HTML ഉള്ളടക്കം</translation>
+<translation id="7750228210027921155">ചിത്രത്തിനുള്ളിലെ ചിത്രം</translation>
 <translation id="7789962463072032349">താല്‍‌ക്കാലികമായി നിര്‍‌ത്തുക</translation>
 <translation id="7802800022689234070">ഡിസ്‌ക്ലോഷർ ത്രികോണം</translation>
 <translation id="7888071071722539607">ഇമെയിൽ വിലാസത്തിൽ '<ph name="ATSIGN" />' ഉൾപ്പെടുത്തുക. '<ph name="INVALIDADDRESS" />' എന്നതിൽ ഒരു '<ph name="ATSIGN" />' കാണുന്നില്ല.</translation>
diff --git a/content/app/strings/translations/content_strings_mr.xtb b/content/app/strings/translations/content_strings_mr.xtb
index b3ae9790..60b8d16 100644
--- a/content/app/strings/translations/content_strings_mr.xtb
+++ b/content/app/strings/translations/content_strings_mr.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">स्लायडर</translation>
 <translation id="1211441953136645838">तळटीप</translation>
 <translation id="1281252709823657822">संवाद</translation>
+<translation id="1289247557029249093">चित्रात-चित्र मोडमधून बाहेर पडा</translation>
 <translation id="1335095011850992622">श्रेय</translation>
 <translation id="1342835525016946179">लेख</translation>
 <translation id="1359897965706325498">बॅनर</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">सबमिट करा</translation>
 <translation id="2657045182931379222">ग्राफिक्स ऑब्जेक्ट</translation>
 <translation id="2674318244760992338">अधोलेख</translation>
+<translation id="2706474812903655270">हा व्हिडिओ चित्रात-चित्र मोडमध्ये प्ले होत आहे</translation>
 <translation id="2709516037105925701">ऑटोफिल</translation>
 <translation id="2723001399770238859">ऑडिओ</translation>
 <translation id="2746543609216772311">मूल्य <ph name="MINIMUM_DATE_OR_TIME" /> किंवा नंतरचे असणे आवश्यक आहे.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">शिल्लक वेळ</translation>
 <translation id="7740016676195725605">बंद मथळा प्रदर्शित करणे थांबवा</translation>
 <translation id="7740050170769002709">HTML सामुग्री</translation>
+<translation id="7750228210027921155">चित्रात-चित्र</translation>
 <translation id="7789962463072032349">विराम द्या</translation>
 <translation id="7802800022689234070">त्रिकोण प्रकटन</translation>
 <translation id="7888071071722539607">कृपया ईमेल पत्त्यामध्ये '<ph name="ATSIGN" />' समाविष्ट करा. '<ph name="INVALIDADDRESS" />' '<ph name="ATSIGN" />' गमावत आहे.</translation>
diff --git a/content/app/strings/translations/content_strings_ms.xtb b/content/app/strings/translations/content_strings_ms.xtb
index ab6e6e90..4a46a11 100644
--- a/content/app/strings/translations/content_strings_ms.xtb
+++ b/content/app/strings/translations/content_strings_ms.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">peluncur</translation>
 <translation id="1211441953136645838">nota hujung</translation>
 <translation id="1281252709823657822">dialog</translation>
+<translation id="1289247557029249093">Keluar daripada mod gambar dalam gambar</translation>
 <translation id="1335095011850992622">kredit</translation>
 <translation id="1342835525016946179">artikel</translation>
 <translation id="1359897965706325498">sepanduk</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Serah</translation>
 <translation id="2657045182931379222">objek grafik</translation>
 <translation id="2674318244760992338">pembawah</translation>
+<translation id="2706474812903655270">Video ini dimainkan dalam mod gambar dalam gambar</translation>
 <translation id="2709516037105925701">Autoisi</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Nilai mestilah <ph name="MINIMUM_DATE_OR_TIME" /> atau kemudian.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">masa yang tinggal</translation>
 <translation id="7740016676195725605">berhenti memaparkan kapsyen tertutup</translation>
 <translation id="7740050170769002709">Kandungan HTML</translation>
+<translation id="7750228210027921155">Gambar dalam gambar</translation>
 <translation id="7789962463072032349">jeda</translation>
 <translation id="7802800022689234070">segi tiga pendedahan</translation>
 <translation id="7888071071722539607">Sila masukkan '<ph name="ATSIGN" />' dalam alamat e-mel. '<ph name="INVALIDADDRESS" />' tiada '<ph name="ATSIGN" />'.</translation>
diff --git a/content/app/strings/translations/content_strings_nl.xtb b/content/app/strings/translations/content_strings_nl.xtb
index 7c4071d..8d1cea6 100644
--- a/content/app/strings/translations/content_strings_nl.xtb
+++ b/content/app/strings/translations/content_strings_nl.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">schuifregelaar</translation>
 <translation id="1211441953136645838">eindnoot</translation>
 <translation id="1281252709823657822">dialoogvenster</translation>
+<translation id="1289247557029249093">Scherm-in-scherm-modus afsluiten</translation>
 <translation id="1335095011850992622">bronvermelding</translation>
 <translation id="1342835525016946179">artikel</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Verzenden</translation>
 <translation id="2657045182931379222">grafisch object</translation>
 <translation id="2674318244760992338">voettekst</translation>
+<translation id="2706474812903655270">Deze video wordt in de scherm-in-scherm-modus afgespeeld</translation>
 <translation id="2709516037105925701">Automatisch aanvullen</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Waarde moet <ph name="MINIMUM_DATE_OR_TIME" /> of later zijn.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">resterende tijd</translation>
 <translation id="7740016676195725605">het weergeven van ondertiteling stoppen</translation>
 <translation id="7740050170769002709">HTML-content</translation>
+<translation id="7750228210027921155">Scherm-in-scherm</translation>
 <translation id="7789962463072032349">onderbreken</translation>
 <translation id="7802800022689234070">driehoek voor samen-/uitvouwen</translation>
 <translation id="7888071071722539607">Gebruik een '<ph name="ATSIGN" />' in thet e-mailadres. In '<ph name="INVALIDADDRESS" />' ontbreekt een '<ph name="ATSIGN" />'.</translation>
diff --git a/content/app/strings/translations/content_strings_pl.xtb b/content/app/strings/translations/content_strings_pl.xtb
index 00b12c24..95213b7 100644
--- a/content/app/strings/translations/content_strings_pl.xtb
+++ b/content/app/strings/translations/content_strings_pl.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">suwak</translation>
 <translation id="1211441953136645838">przypis końcowy</translation>
 <translation id="1281252709823657822">okno dialogowe</translation>
+<translation id="1289247557029249093">Wyłącz tryb obrazu w obrazie</translation>
 <translation id="1335095011850992622">autorzy</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">baner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Prześlij</translation>
 <translation id="2657045182931379222">obiekt graficzny</translation>
 <translation id="2674318244760992338">stopka</translation>
+<translation id="2706474812903655270">Ten film jest odtwarzany w trybie obrazu w obrazie</translation>
 <translation id="2709516037105925701">Autouzupełnianie</translation>
 <translation id="2723001399770238859">dźwięk</translation>
 <translation id="2746543609216772311">Musisz podać wartość <ph name="MINIMUM_DATE_OR_TIME" /> lub późniejszą.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">pozostały czas</translation>
 <translation id="7740016676195725605">przestań pokazywać napisy</translation>
 <translation id="7740050170769002709">Treść HTML</translation>
+<translation id="7750228210027921155">Obraz w obrazie</translation>
 <translation id="7789962463072032349">wstrzymaj</translation>
 <translation id="7802800022689234070">trójkąt rozwinięcia</translation>
 <translation id="7888071071722539607">Uwzględnij znak „<ph name="ATSIGN" />” w adresie e-mail. W adresie „<ph name="INVALIDADDRESS" />” brakuje znaku „<ph name="ATSIGN" />”.</translation>
diff --git a/content/app/strings/translations/content_strings_pt-BR.xtb b/content/app/strings/translations/content_strings_pt-BR.xtb
index a421cd8..1f50ea1 100644
--- a/content/app/strings/translations/content_strings_pt-BR.xtb
+++ b/content/app/strings/translations/content_strings_pt-BR.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">controle deslizante</translation>
 <translation id="1211441953136645838">nota final</translation>
 <translation id="1281252709823657822">caixa de diálogo</translation>
+<translation id="1289247557029249093">Sair do modo picture-in-picture</translation>
 <translation id="1335095011850992622">créditos</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Enviar</translation>
 <translation id="2657045182931379222">objeto gráfico</translation>
 <translation id="2674318244760992338">rodapé</translation>
+<translation id="2706474812903655270">Este vídeo está sendo reproduzido em picture-in-picture</translation>
 <translation id="2709516037105925701">Preenchimento automático</translation>
 <translation id="2723001399770238859">áudio</translation>
 <translation id="2746543609216772311">O valor deve ser <ph name="MINIMUM_DATE_OR_TIME" /> ou posterior.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">tempo restante</translation>
 <translation id="7740016676195725605">parar de exibir legendas ocultas</translation>
 <translation id="7740050170769002709">Conteúdo HTML</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7789962463072032349">pausar</translation>
 <translation id="7802800022689234070">triângulo de divulgação</translation>
 <translation id="7888071071722539607">Inclua um "<ph name="ATSIGN" />" no endereço de e-mail. "<ph name="INVALIDADDRESS" />" está com um "<ph name="ATSIGN" />" faltando.</translation>
diff --git a/content/app/strings/translations/content_strings_pt-PT.xtb b/content/app/strings/translations/content_strings_pt-PT.xtb
index ec6a868..5407012 100644
--- a/content/app/strings/translations/content_strings_pt-PT.xtb
+++ b/content/app/strings/translations/content_strings_pt-PT.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">controlo de deslize</translation>
 <translation id="1211441953136645838">nota final</translation>
 <translation id="1281252709823657822">caixa de diálogo</translation>
+<translation id="1289247557029249093">Sair do modo ecrã no ecrã</translation>
 <translation id="1335095011850992622">créditos</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Submeter</translation>
 <translation id="2657045182931379222">objeto de gráficos</translation>
 <translation id="2674318244760992338">rodapé</translation>
+<translation id="2706474812903655270">Este vídeo está a ser reproduzido no modo ecrã no ecrã.</translation>
 <translation id="2709516037105925701">Preenchimento automático</translation>
 <translation id="2723001399770238859">áudio</translation>
 <translation id="2746543609216772311">O valor tem de ser <ph name="MINIMUM_DATE_OR_TIME" /> ou posterior.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">tempo restante</translation>
 <translation id="7740016676195725605">parar de apresentar legendas ocultas</translation>
 <translation id="7740050170769002709">Conteúdo HTML</translation>
+<translation id="7750228210027921155">Ecrã no ecrã</translation>
 <translation id="7789962463072032349">pausa</translation>
 <translation id="7802800022689234070">triângulo de divulgação</translation>
 <translation id="7888071071722539607">Inclua um "<ph name="ATSIGN" />" no endereço de email. Falta um "<ph name="ATSIGN" />" em "<ph name="INVALIDADDRESS" />".</translation>
diff --git a/content/app/strings/translations/content_strings_ro.xtb b/content/app/strings/translations/content_strings_ro.xtb
index 14e4691..50d67946 100644
--- a/content/app/strings/translations/content_strings_ro.xtb
+++ b/content/app/strings/translations/content_strings_ro.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">glisor</translation>
 <translation id="1211441953136645838">notă de final</translation>
 <translation id="1281252709823657822">dialog</translation>
+<translation id="1289247557029249093">Ieși din modul picture-in-picture</translation>
 <translation id="1335095011850992622">mulțumiri</translation>
 <translation id="1342835525016946179">articol</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Trimite</translation>
 <translation id="2657045182931379222">obiect grafic</translation>
 <translation id="2674318244760992338">notă de subsol</translation>
+<translation id="2706474812903655270">Videoclipul se redă în modul picture-in-picture</translation>
 <translation id="2709516037105925701">Completare automată</translation>
 <translation id="2723001399770238859">audio</translation>
 <translation id="2746543609216772311">Valoarea pentru dată/oră trebuie să fie <ph name="MINIMUM_DATE_OR_TIME" /> sau una ulterioară.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">timp rămas</translation>
 <translation id="7740016676195725605">nu mai afișați subtitrările</translation>
 <translation id="7740050170769002709">Conținut HTML</translation>
+<translation id="7750228210027921155">Picture-in-picture</translation>
 <translation id="7789962463072032349">întrerupe</translation>
 <translation id="7802800022689234070">triunghi pentru afișare</translation>
 <translation id="7888071071722539607">Includeți semnul „<ph name="ATSIGN" />” în adresa de e-mail. Din adresa „<ph name="INVALIDADDRESS" />” lipsește semnul „<ph name="ATSIGN" />”.</translation>
diff --git a/content/app/strings/translations/content_strings_sk.xtb b/content/app/strings/translations/content_strings_sk.xtb
index 15fa13f8..799bcaff 100644
--- a/content/app/strings/translations/content_strings_sk.xtb
+++ b/content/app/strings/translations/content_strings_sk.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">posúvač</translation>
 <translation id="1211441953136645838">vysvetlivka</translation>
 <translation id="1281252709823657822">dialóg</translation>
+<translation id="1289247557029249093">Ukončiť režim obraz v obraze</translation>
 <translation id="1335095011850992622">titulky</translation>
 <translation id="1342835525016946179">článok</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Odoslať</translation>
 <translation id="2657045182931379222">grafický objekt</translation>
 <translation id="2674318244760992338">päta</translation>
+<translation id="2706474812903655270">Toto video sa prehráva v režime obraz v obraze</translation>
 <translation id="2709516037105925701">Automatické dopĺňanie</translation>
 <translation id="2723001399770238859">zvuk</translation>
 <translation id="2746543609216772311">Hodnota musí byť <ph name="MINIMUM_DATE_OR_TIME" /> alebo neskôr.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">zostávajúci čas</translation>
 <translation id="7740016676195725605">ukončiť zobrazovanie skrytých titulkov</translation>
 <translation id="7740050170769002709">Obsah HTML</translation>
+<translation id="7750228210027921155">Obraz v obraze</translation>
 <translation id="7789962463072032349">pozastaviť</translation>
 <translation id="7802800022689234070">trojuholníkové tlačidlo na zobrazenie skrytého obsahu</translation>
 <translation id="7888071071722539607">Uveďte v e-mailovej adrese znak <ph name="ATSIGN" />. V adrese <ph name="INVALIDADDRESS" /> znak <ph name="ATSIGN" /> chýba.</translation>
diff --git a/content/app/strings/translations/content_strings_sl.xtb b/content/app/strings/translations/content_strings_sl.xtb
index a31af02..56db58d 100644
--- a/content/app/strings/translations/content_strings_sl.xtb
+++ b/content/app/strings/translations/content_strings_sl.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">drsnik</translation>
 <translation id="1211441953136645838">končna opomba</translation>
 <translation id="1281252709823657822">pogovorno okno</translation>
+<translation id="1289247557029249093">Zapri način slike v sliki</translation>
 <translation id="1335095011850992622">seznam sodelujočih</translation>
 <translation id="1342835525016946179">člnk</translation>
 <translation id="1359897965706325498">pasica</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Pošlji</translation>
 <translation id="2657045182931379222">grafični predmet</translation>
 <translation id="2674318244760992338">noga</translation>
+<translation id="2706474812903655270">Ta videoposnetek se predvaja v načinu slike v sliki</translation>
 <translation id="2709516037105925701">Samodejno izpolnjevanje</translation>
 <translation id="2723001399770238859">zvok</translation>
 <translation id="2746543609216772311">Vrednost mora biti <ph name="MINIMUM_DATE_OR_TIME" /> ali pozneje.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">preostali čas</translation>
 <translation id="7740016676195725605">ustavitev prikazovanja podnapisov</translation>
 <translation id="7740050170769002709">Vsebina HTML</translation>
+<translation id="7750228210027921155">Slika v sliki</translation>
 <translation id="7789962463072032349">premor</translation>
 <translation id="7802800022689234070">trikotnik z dodatno vsebino</translation>
 <translation id="7888071071722539607">V e-poštnem naslovu mora biti znak »<ph name="ATSIGN" />«. V naslovu »<ph name="INVALIDADDRESS" />« manjka »<ph name="ATSIGN" />«.</translation>
diff --git a/content/app/strings/translations/content_strings_sr.xtb b/content/app/strings/translations/content_strings_sr.xtb
index e40ecbc..676581cd 100644
--- a/content/app/strings/translations/content_strings_sr.xtb
+++ b/content/app/strings/translations/content_strings_sr.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">клизач</translation>
 <translation id="1211441953136645838">завршна напомена</translation>
 <translation id="1281252709823657822">дијалог</translation>
+<translation id="1289247557029249093">Изађи из режима слике у слици</translation>
 <translation id="1335095011850992622">заслуге</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">банер</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Пошаљи</translation>
 <translation id="2657045182931379222">графички објекат</translation>
 <translation id="2674318244760992338">подножје</translation>
+<translation id="2706474812903655270">Видео се репродукује у режиму слике у слици</translation>
 <translation id="2709516037105925701">Аутоматско попуњавање</translation>
 <translation id="2723001399770238859">аудио</translation>
 <translation id="2746543609216772311">Вредност мора да буде <ph name="MINIMUM_DATE_OR_TIME" /> или новија.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">преостало време</translation>
 <translation id="7740016676195725605">зауставите приказивање опционалног титла</translation>
 <translation id="7740050170769002709">HTML садржај</translation>
+<translation id="7750228210027921155">Слика у слици</translation>
 <translation id="7789962463072032349">паузирај</translation>
 <translation id="7802800022689234070">троугао за откривање</translation>
 <translation id="7888071071722539607">Уврстите „<ph name="ATSIGN" />“ у имејл адресу. У адреси е-поште „<ph name="INVALIDADDRESS" />“ недостаје „<ph name="ATSIGN" />“.</translation>
diff --git a/content/app/strings/translations/content_strings_sv.xtb b/content/app/strings/translations/content_strings_sv.xtb
index 12d7b16..3f94cd1 100644
--- a/content/app/strings/translations/content_strings_sv.xtb
+++ b/content/app/strings/translations/content_strings_sv.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">skjutreglage</translation>
 <translation id="1211441953136645838">slutnot</translation>
 <translation id="1281252709823657822">dialogruta</translation>
+<translation id="1289247557029249093">Avsluta bild-i-bild-läge</translation>
 <translation id="1335095011850992622">medverkande</translation>
 <translation id="1342835525016946179">artikel</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Skicka</translation>
 <translation id="2657045182931379222">grafiskt objekt</translation>
 <translation id="2674318244760992338">sidfot</translation>
+<translation id="2706474812903655270">Videon spelas upp i bild-i-bild-läge</translation>
 <translation id="2709516037105925701">Autofyll</translation>
 <translation id="2723001399770238859">ljud</translation>
 <translation id="2746543609216772311">Värdet måste vara <ph name="MINIMUM_DATE_OR_TIME" /> eller senare.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">återstående tid</translation>
 <translation id="7740016676195725605">sluta visa textning</translation>
 <translation id="7740050170769002709">HTML-innehåll</translation>
+<translation id="7750228210027921155">Bild-i-bild</translation>
 <translation id="7789962463072032349">paus</translation>
 <translation id="7802800022689234070">expanderingstriangel</translation>
 <translation id="7888071071722539607">Inkludera ett <ph name="ATSIGN" /> i e-postadressen. <ph name="INVALIDADDRESS" /> saknar ett <ph name="ATSIGN" />.</translation>
diff --git a/content/app/strings/translations/content_strings_sw.xtb b/content/app/strings/translations/content_strings_sw.xtb
index 39b73f9..686d61b6 100644
--- a/content/app/strings/translations/content_strings_sw.xtb
+++ b/content/app/strings/translations/content_strings_sw.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">kitelezi</translation>
 <translation id="1211441953136645838">maelezo ya mwisho wa kitabu</translation>
 <translation id="1281252709823657822">kidirisha</translation>
+<translation id="1289247557029249093">Funga hali ya picha ndani ya picha</translation>
 <translation id="1335095011850992622">walioshiriki</translation>
 <translation id="1342835525016946179">makala</translation>
 <translation id="1359897965706325498">bango</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Wasilisha</translation>
 <translation id="2657045182931379222">kipengee cha michoro</translation>
 <translation id="2674318244760992338">kijachini</translation>
+<translation id="2706474812903655270">Video hii inacheza katika hali ya picha ndani ya picha</translation>
 <translation id="2709516037105925701">Kujaza Kiotomatiki</translation>
 <translation id="2723001399770238859">sauti</translation>
 <translation id="2746543609216772311">Thamani lazima iwe <ph name="MINIMUM_DATE_OR_TIME" /> au baadaye.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">muda unaosalia</translation>
 <translation id="7740016676195725605">koma kuonyesha manukuu yanaweza kufichwa</translation>
 <translation id="7740050170769002709">Maudhui ya HTML</translation>
+<translation id="7750228210027921155">Picha ndani ya picha</translation>
 <translation id="7789962463072032349">Sitisha</translation>
 <translation id="7802800022689234070">pembe tatu ya ufafanuzi</translation>
 <translation id="7888071071722539607">Tafadhali jumuisha '<ph name="ATSIGN" />' katika anwani ya barua pepe. '<ph name="INVALIDADDRESS" />' inakosa '<ph name="ATSIGN" />'.</translation>
diff --git a/content/app/strings/translations/content_strings_th.xtb b/content/app/strings/translations/content_strings_th.xtb
index a7cfa7b..c805447d 100644
--- a/content/app/strings/translations/content_strings_th.xtb
+++ b/content/app/strings/translations/content_strings_th.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">แถบเลื่อน</translation>
 <translation id="1211441953136645838">อ้างอิงท้ายเรื่อง</translation>
 <translation id="1281252709823657822">กล่องโต้ตอบ</translation>
+<translation id="1289247557029249093">ออกจากโหมดการแสดงภาพซ้อนภาพ</translation>
 <translation id="1335095011850992622">เครดิต</translation>
 <translation id="1342835525016946179">บทความ</translation>
 <translation id="1359897965706325498">แบนเนอร์</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">ส่ง</translation>
 <translation id="2657045182931379222">ออบเจ็กต์กราฟิก</translation>
 <translation id="2674318244760992338">ส่วนท้าย</translation>
+<translation id="2706474812903655270">กำลังเล่นวิดีโอในโหมดการแสดงภาพซ้อนภาพ</translation>
 <translation id="2709516037105925701">ป้อนอัตโนมัติ</translation>
 <translation id="2723001399770238859">เสียง</translation>
 <translation id="2746543609216772311">ค่าต้องเป็น <ph name="MINIMUM_DATE_OR_TIME" /> หรือหลังจากนั้น</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">เวลาที่เหลือ</translation>
 <translation id="7740016676195725605">หยุดแสดงคำอธิบายภาพ</translation>
 <translation id="7740050170769002709">เนื้อหา HTML</translation>
+<translation id="7750228210027921155">การแสดงภาพซ้อนภาพ</translation>
 <translation id="7789962463072032349">หยุดชั่วคราว</translation>
 <translation id="7802800022689234070">สามเหลี่ยมซ่อนเนื้อหา</translation>
 <translation id="7888071071722539607">โปรดใส่ "<ph name="ATSIGN" />" ในที่อยู่อีเมล "<ph name="INVALIDADDRESS" />" ขาด "<ph name="ATSIGN" />"</translation>
diff --git a/content/app/strings/translations/content_strings_tr.xtb b/content/app/strings/translations/content_strings_tr.xtb
index 48eea3f..3f4ee073 100644
--- a/content/app/strings/translations/content_strings_tr.xtb
+++ b/content/app/strings/translations/content_strings_tr.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">kaydırma çubuğu</translation>
 <translation id="1211441953136645838">son not</translation>
 <translation id="1281252709823657822">iletişim kutusu</translation>
+<translation id="1289247557029249093">Pencere içinde pencere modundan çık</translation>
 <translation id="1335095011850992622">katkıda bulunanlar</translation>
 <translation id="1342835525016946179">article</translation>
 <translation id="1359897965706325498">banner</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Gönder</translation>
 <translation id="2657045182931379222">grafik nesnesi</translation>
 <translation id="2674318244760992338">altbilgi</translation>
+<translation id="2706474812903655270">Bu video pencere içinde pencere modunda oynatılıyor</translation>
 <translation id="2709516037105925701">Otomatik doldurma</translation>
 <translation id="2723001399770238859">ses</translation>
 <translation id="2746543609216772311">Değer <ph name="MINIMUM_DATE_OR_TIME" /> veya daha ileri olmalıdır.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">kalan süre</translation>
 <translation id="7740016676195725605">altyazıların görüntülenmesini durdur</translation>
 <translation id="7740050170769002709">HTML içeriği</translation>
+<translation id="7750228210027921155">Pencere içinde pencere</translation>
 <translation id="7789962463072032349">duraklat</translation>
 <translation id="7802800022689234070">açıklama üçgeni</translation>
 <translation id="7888071071722539607">Lütfen e-posta adresine bir "<ph name="ATSIGN" />" işareti ekleyin. "<ph name="INVALIDADDRESS" />" adresinde "<ph name="ATSIGN" />" eksik.</translation>
diff --git a/content/app/strings/translations/content_strings_uk.xtb b/content/app/strings/translations/content_strings_uk.xtb
index e02bf69..0b0bfbb 100644
--- a/content/app/strings/translations/content_strings_uk.xtb
+++ b/content/app/strings/translations/content_strings_uk.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">повзунок</translation>
 <translation id="1211441953136645838">кінцева виноска</translation>
 <translation id="1281252709823657822">діалогове вікно</translation>
+<translation id="1289247557029249093">Вийти з режиму "картинка в картинці"</translation>
 <translation id="1335095011850992622">подяки</translation>
 <translation id="1342835525016946179">стаття</translation>
 <translation id="1359897965706325498">банер</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">Надіслати</translation>
 <translation id="2657045182931379222">графічний об’єкт</translation>
 <translation id="2674318244760992338">нижній колонтитул</translation>
+<translation id="2706474812903655270">Це відео відтворюється в режимі "картинка в картинці"</translation>
 <translation id="2709516037105925701">Автозаповнення</translation>
 <translation id="2723001399770238859">аудіо</translation>
 <translation id="2746543609216772311">Має бути <ph name="MINIMUM_DATE_OR_TIME" /> або пізніша дата.</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">залишилось часу</translation>
 <translation id="7740016676195725605">сховати приховані субтитри</translation>
 <translation id="7740050170769002709">Вміст HTML</translation>
+<translation id="7750228210027921155">Картинка в картинці</translation>
 <translation id="7789962463072032349">призупинити</translation>
 <translation id="7802800022689234070">трикутник відкривання</translation>
 <translation id="7888071071722539607">Електронна адреса має містити знак "<ph name="ATSIGN" />". В електронній адресі "<ph name="INVALIDADDRESS" />" знака "<ph name="ATSIGN" />" немає.</translation>
diff --git a/content/app/strings/translations/content_strings_zh-TW.xtb b/content/app/strings/translations/content_strings_zh-TW.xtb
index fb969c3c..0f1c535 100644
--- a/content/app/strings/translations/content_strings_zh-TW.xtb
+++ b/content/app/strings/translations/content_strings_zh-TW.xtb
@@ -12,6 +12,7 @@
 <translation id="1206693055195146388">滑桿</translation>
 <translation id="1211441953136645838">章節附註</translation>
 <translation id="1281252709823657822">對話方塊</translation>
+<translation id="1289247557029249093">離開子母畫面模式</translation>
 <translation id="1335095011850992622">參與名單</translation>
 <translation id="1342835525016946179">文章</translation>
 <translation id="1359897965706325498">橫幅</translation>
@@ -51,6 +52,7 @@
 <translation id="2653659639078652383">提交</translation>
 <translation id="2657045182931379222">圖形物件</translation>
 <translation id="2674318244760992338">頁尾</translation>
+<translation id="2706474812903655270">目前在子母畫面模式中播放這部影片</translation>
 <translation id="2709516037105925701">自動填入</translation>
 <translation id="2723001399770238859">音訊</translation>
 <translation id="2746543609216772311">必須輸入 <ph name="MINIMUM_DATE_OR_TIME" /> 或之後的值。</translation>
@@ -189,6 +191,7 @@
 <translation id="7720026100085573005">剩餘時間</translation>
 <translation id="7740016676195725605">停止顯示字幕</translation>
 <translation id="7740050170769002709">HTML 內容</translation>
+<translation id="7750228210027921155">子母畫面</translation>
 <translation id="7789962463072032349">暫停</translation>
 <translation id="7802800022689234070">顯示/隱藏三角標記</translation>
 <translation id="7888071071722539607">請在電子郵件地址中包含「<ph name="ATSIGN" />」。「<ph name="INVALIDADDRESS" />」未包含「<ph name="ATSIGN" />」。</translation>
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index d8b7416..c89e41f 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -178,6 +178,7 @@
     "//third_party/icu",
     "//third_party/libyuv",
     "//third_party/re2",
+    "//third_party/sqlite",
     "//third_party/webrtc/media:rtc_media_base",
     "//third_party/webrtc/modules/desktop_capture:primitives",
     "//third_party/webrtc/rtc_base:rtc_base",
@@ -273,8 +274,6 @@
     "accessibility/accessibility_tree_formatter_utils_win.cc",
     "accessibility/accessibility_tree_formatter_utils_win.h",
     "accessibility/accessibility_tree_formatter_win.cc",
-    "accessibility/accessibility_ui.cc",
-    "accessibility/accessibility_ui.h",
     "accessibility/browser_accessibility.cc",
     "accessibility/browser_accessibility.h",
     "accessibility/browser_accessibility_cocoa.h",
@@ -423,6 +422,8 @@
     "background_fetch/background_fetch_request_info.cc",
     "background_fetch/background_fetch_request_info.h",
     "background_fetch/background_fetch_request_manager.h",
+    "background_fetch/background_fetch_request_match_params.cc",
+    "background_fetch/background_fetch_request_match_params.h",
     "background_fetch/background_fetch_scheduler.cc",
     "background_fetch/background_fetch_scheduler.h",
     "background_fetch/background_fetch_service_impl.cc",
@@ -757,6 +758,8 @@
     "download/drag_download_util.h",
     "download/file_download_url_loader_factory_getter.cc",
     "download/file_download_url_loader_factory_getter.h",
+    "download/file_system_download_url_loader_factory_getter.cc",
+    "download/file_system_download_url_loader_factory_getter.h",
     "download/mhtml_extra_parts_impl.cc",
     "download/mhtml_extra_parts_impl.h",
     "download/mhtml_generation_manager.cc",
@@ -1511,6 +1514,8 @@
     "sandbox_parameters_mac.mm",
     "scheduler/responsiveness/calculator.cc",
     "scheduler/responsiveness/calculator.h",
+    "scheduler/responsiveness/watcher.cc",
+    "scheduler/responsiveness/watcher.h",
     "scoped_active_url.cc",
     "scoped_active_url.h",
     "screen_orientation/screen_orientation_provider.cc",
diff --git a/content/browser/accessibility/accessibility_tree_formatter.cc b/content/browser/accessibility/accessibility_tree_formatter.cc
index 5236a97e..d095d80b 100644
--- a/content/browser/accessibility/accessibility_tree_formatter.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter.cc
@@ -15,6 +15,7 @@
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
 #include "content/browser/accessibility/browser_accessibility_manager.h"
 #include "content/browser/renderer_host/render_widget_host_view_base.h"
 #include "content/browser/web_contents/web_contents_impl.h"
@@ -50,6 +51,23 @@
   RecursiveFormatAccessibilityTree(dict, contents);
 }
 
+base::string16 AccessibilityTreeFormatter::DumpAccessibilityTreeFromManager(
+    BrowserAccessibilityManager* ax_mgr,
+    bool internal) {
+  std::unique_ptr<AccessibilityTreeFormatter> formatter;
+  if (internal)
+    formatter.reset(new AccessibilityTreeFormatterBlink());
+  else
+    formatter.reset(Create());
+  base::string16 accessibility_contents_utf16;
+  std::vector<Filter> filters;
+  filters.push_back(Filter(base::ASCIIToUTF16("*"), Filter::ALLOW));
+  formatter->SetFilters(filters);
+  formatter->FormatAccessibilityTree(ax_mgr->GetRoot(),
+                                     &accessibility_contents_utf16);
+  return accessibility_contents_utf16;
+}
+
 std::unique_ptr<base::DictionaryValue>
 AccessibilityTreeFormatter::FilterAccessibilityTree(
     const base::DictionaryValue& dict) {
diff --git a/content/browser/accessibility/accessibility_tree_formatter.h b/content/browser/accessibility/accessibility_tree_formatter.h
index 536fcb6..51b8bc5 100644
--- a/content/browser/accessibility/accessibility_tree_formatter.h
+++ b/content/browser/accessibility/accessibility_tree_formatter.h
@@ -99,6 +99,10 @@
   void FormatAccessibilityTree(const base::DictionaryValue& tree_node,
                                base::string16* contents);
 
+  static base::string16 DumpAccessibilityTreeFromManager(
+      BrowserAccessibilityManager* ax_mgr,
+      bool internal);
+
   // Set regular expression filters that apply to each component of every
   // line before it's output.
   void SetFilters(const std::vector<Filter>& filters);
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index 4ab51921..943b5c8 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -1290,16 +1290,12 @@
       EXPECT_EQ(previous_height, height) << "at offset " << offset;
     }
 
-    // Vertically offscreen objects should have a height of 1px so that if an
-    // assistive aid ignores the offscreen state, they will still be too small
-    // to be visible and thus not appear outside the window. Note that a height
-    // of 0 is not used because it signifies an invalid size.
     EXPECT_HRESULT_SUCCEEDED(editable_container->get_characterExtents(
         last_line_start, coordinate_type, &x, &y, &width, &height));
     EXPECT_LT(0, x) << "at offset " << last_line_start;
     EXPECT_LT(previous_y, y) << "at offset " << last_line_start;
     EXPECT_LT(1, width) << "at offset " << last_line_start;
-    EXPECT_EQ(1, height) << "at offset " << last_line_start;
+    EXPECT_EQ(previous_height, height) << "at offset " << last_line_start;
 
     for (LONG offset = last_line_start + 1; offset < n_characters; ++offset) {
       previous_x = x;
@@ -1310,7 +1306,7 @@
       EXPECT_LT(previous_x, x) << "at offset " << offset;
       EXPECT_EQ(previous_y, y) << "at offset " << offset;
       EXPECT_LT(1, width) << "at offset " << offset;
-      EXPECT_EQ(1, height) << "at offset " << offset;
+      EXPECT_EQ(previous_height, height) << "at offset " << offset;
     }
   }
 }
@@ -1334,21 +1330,13 @@
        coordinate <= IA2_COORDTYPE_PARENT_RELATIVE; ++coordinate) {
     auto coordinate_type = static_cast<IA2CoordinateType>(coordinate);
 
-    // Horizontally offscreen objects should have a width of 1px so that if an
-    // assistive aid ignores the offscreen state, they will still be too small
-    // to be visible and thus not appear outside the window. Note that a width
-    // of 0 is not used because it signifies an invalid size.
     EXPECT_HRESULT_SUCCEEDED(input_text->get_characterExtents(
         0, coordinate_type, &x, &y, &width, &height));
-    EXPECT_LT(0, x + width) << "at offset 0";
+    EXPECT_GT(0, x + width) << "at offset 0";
     EXPECT_LT(0, y) << "at offset 0";
-    EXPECT_EQ(1, width) << "at offset 0";
+    EXPECT_LT(1, width) << "at offset 0";
     EXPECT_LT(1, height) << "at offset 0";
 
-    // Test that characters at the start of the input field are offscreen by
-    // checking that their x coordinate is at the start of the field and their
-    // width is 1.
-    // Exclude the character that is partly visible.
     for (LONG offset = 1; offset < (visible_characters_start - 1); ++offset) {
       previous_x = x;
       previous_y = y;
@@ -1356,9 +1344,9 @@
 
       EXPECT_HRESULT_SUCCEEDED(input_text->get_characterExtents(
           offset, coordinate_type, &x, &y, &width, &height));
-      EXPECT_EQ(previous_x, x) << "at offset " << offset;
+      EXPECT_LT(previous_x, x) << "at offset " << offset;
       EXPECT_EQ(previous_y, y) << "at offset " << offset;
-      EXPECT_EQ(1, width) << "at offset " << offset;
+      EXPECT_LT(1, width) << "at offset " << offset;
       EXPECT_EQ(previous_height, height) << "at offset " << offset;
     }
 
@@ -1366,7 +1354,7 @@
     // width that is greater than 1px.
     EXPECT_HRESULT_SUCCEEDED(input_text->get_characterExtents(
         visible_characters_start, coordinate_type, &x, &y, &width, &height));
-    EXPECT_EQ(previous_x, x) << "at offset " << visible_characters_start;
+    EXPECT_LT(previous_x, x) << "at offset " << visible_characters_start;
     EXPECT_EQ(previous_y, y) << "at offset " << visible_characters_start;
     EXPECT_LT(1, width) << "at offset " << visible_characters_start;
     EXPECT_EQ(previous_height, height)
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 68e62b1..7c190d9 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -343,8 +343,9 @@
   return RelativeToAbsoluteBounds(gfx::RectF(), false, offscreen, clip_bounds);
 }
 
-gfx::Rect BrowserAccessibility::GetPageBoundsForRange(int start, int len)
-    const {
+gfx::Rect BrowserAccessibility::GetPageBoundsForRange(int start,
+                                                      int len,
+                                                      bool clipped) const {
   DCHECK_GE(start, 0);
   DCHECK_GE(len, 0);
 
@@ -464,9 +465,11 @@
       }
     }
 
+    // Don't clip bounds. Some screen magnifiers (e.g. ZoomText) prefer to
+    // get unclipped bounds so that they can make smooth scrolling calculations.
     gfx::Rect absolute_child_rect = child->RelativeToAbsoluteBounds(
         child_overlap_rect, false /* frame_only */, nullptr /* offscreen */,
-        true /* clip_bounds */);
+        clipped /* clip_bounds */);
     if (bounds.width() == 0 && bounds.height() == 0) {
       bounds = absolute_child_rect;
     } else {
@@ -477,9 +480,10 @@
   return bounds;
 }
 
-gfx::Rect BrowserAccessibility::GetScreenBoundsForRange(int start, int len)
-    const {
-  gfx::Rect bounds = GetPageBoundsForRange(start, len);
+gfx::Rect BrowserAccessibility::GetScreenBoundsForRange(int start,
+                                                        int len,
+                                                        bool clipped) const {
+  gfx::Rect bounds = GetPageBoundsForRange(start, len, clipped);
 
   // Adjust the bounds by the top left corner of the containing view's bounds
   // in screen coordinates.
diff --git a/content/browser/accessibility/browser_accessibility.h b/content/browser/accessibility/browser_accessibility.h
index f3d85b3..a953e561 100644
--- a/content/browser/accessibility/browser_accessibility.h
+++ b/content/browser/accessibility/browser_accessibility.h
@@ -160,10 +160,14 @@
   // Returns the bounds of the given range in coordinates relative to the
   // top-left corner of the overall web area. Only valid when the
   // role is WebAXRoleStaticText.
-  gfx::Rect GetPageBoundsForRange(int start, int len) const;
+  gfx::Rect GetPageBoundsForRange(int start,
+                                  int len,
+                                  bool clipped = false) const;
 
   // Same as |GetPageBoundsForRange| but in screen coordinates.
-  gfx::Rect GetScreenBoundsForRange(int start, int len) const;
+  gfx::Rect GetScreenBoundsForRange(int start,
+                                    int len,
+                                    bool clipped = false) const;
 
   // Convert a bounding rectangle from this node's coordinate system
   // (which is relative to its nearest scrollable ancestor) to
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc
index 0c5ec83a..a496fc4f 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.cc
+++ b/content/browser/accessibility/browser_accessibility_state_impl.cc
@@ -106,6 +106,11 @@
   ResetAccessibilityMode();
 }
 
+bool BrowserAccessibilityStateImpl::IsRendererAccessibilityEnabled() {
+  return !base::CommandLine::ForCurrentProcess()->HasSwitch(
+      switches::kDisableRendererAccessibility);
+}
+
 void BrowserAccessibilityStateImpl::ResetAccessibilityModeValue() {
   accessibility_mode_ = ui::AXMode();
   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
@@ -120,7 +125,7 @@
   std::vector<WebContentsImpl*> web_contents_vector =
       WebContentsImpl::GetAllWebContents();
   for (size_t i = 0; i < web_contents_vector.size(); ++i)
-    web_contents_vector[i]->SetAccessibilityMode(accessibility_mode());
+    web_contents_vector[i]->SetAccessibilityMode(accessibility_mode_);
 }
 
 bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() {
@@ -157,6 +162,10 @@
   AddAccessibilityModeFlags(mode);
 }
 
+ui::AXMode BrowserAccessibilityStateImpl::GetAccessibilityMode() const {
+  return accessibility_mode_;
+}
+
 #if !defined(OS_WIN) && !defined(OS_MACOSX)
 void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
 }
@@ -207,7 +216,7 @@
   std::vector<WebContentsImpl*> web_contents_vector =
       WebContentsImpl::GetAllWebContents();
   for (size_t i = 0; i < web_contents_vector.size(); ++i)
-    web_contents_vector[i]->SetAccessibilityMode(accessibility_mode());
+    web_contents_vector[i]->SetAccessibilityMode(accessibility_mode_);
 }
 
 }  // namespace content
diff --git a/content/browser/accessibility/browser_accessibility_state_impl.h b/content/browser/accessibility/browser_accessibility_state_impl.h
index 1eb3033..9b57bbd 100644
--- a/content/browser/accessibility/browser_accessibility_state_impl.h
+++ b/content/browser/accessibility/browser_accessibility_state_impl.h
@@ -44,6 +44,10 @@
 
   void EnableAccessibility() override;
   void DisableAccessibility() override;
+  bool IsRendererAccessibilityEnabled() override;
+  ui::AXMode GetAccessibilityMode() const override;
+  void AddAccessibilityModeFlags(ui::AXMode mode) override;
+  void RemoveAccessibilityModeFlags(ui::AXMode mode) override;
   void ResetAccessibilityMode() override;
   void OnScreenReaderDetected() override;
   bool IsAccessibleBrowser() override;
@@ -54,16 +58,6 @@
   // AXModeObserver
   void OnAXModeAdded(ui::AXMode mode) override;
 
-  ui::AXMode accessibility_mode() const { return accessibility_mode_; };
-
-  // Adds the given accessibility mode flags to the current accessibility
-  // mode bitmap.
-  void AddAccessibilityModeFlags(ui::AXMode mode);
-
-  // Remove the given accessibility mode flags from the current accessibility
-  // mode bitmap.
-  void RemoveAccessibilityModeFlags(ui::AXMode mode);
-
   // Accessibility objects can have the "hot tracked" state set when
   // the mouse is hovering over them, but this makes tests flaky because
   // the test behaves differently when the mouse happens to be over an
diff --git a/content/browser/accessibility/web_contents_accessibility_android.cc b/content/browser/accessibility/web_contents_accessibility_android.cc
index ee2bfb2..cd44cdf2 100644
--- a/content/browser/accessibility/web_contents_accessibility_android.cc
+++ b/content/browser/accessibility/web_contents_accessibility_android.cc
@@ -1189,7 +1189,7 @@
   gfx::Rect object_bounds = node->GetPageBoundsRect();
   int coords[4 * len];
   for (int i = 0; i < len; i++) {
-    gfx::Rect char_bounds = node->GetPageBoundsForRange(start + i, 1);
+    gfx::Rect char_bounds = node->GetPageBoundsForRange(start + i, 1, false);
     if (char_bounds.IsEmpty())
       char_bounds = object_bounds;
     coords[4 * i + 0] = char_bounds.x();
diff --git a/content/browser/appcache/appcache_histograms.cc b/content/browser/appcache/appcache_histograms.cc
index 6027c8c6..110ffdf5 100644
--- a/content/browser/appcache/appcache_histograms.cc
+++ b/content/browser/appcache/appcache_histograms.cc
@@ -132,21 +132,6 @@
   UMA_HISTOGRAM_TIMES("appcache.CompletionRunTime", duration);
 }
 
-void AppCacheHistograms::AddNetworkJobStartDelaySample(
-    const base::TimeDelta& duration) {
-  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.Network", duration);
-}
-
-void AppCacheHistograms::AddErrorJobStartDelaySample(
-    const base::TimeDelta& duration) {
-  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.Error", duration);
-}
-
-void AppCacheHistograms::AddAppCacheJobStartDelaySample(
-    const base::TimeDelta& duration) {
-  UMA_HISTOGRAM_TIMES("appcache.JobStartDelay.AppCache", duration);
-}
-
 void AppCacheHistograms::AddMissingManifestEntrySample() {
   UMA_HISTOGRAM_BOOLEAN("appcache.MissingManifestEntry", true);
 }
diff --git a/content/browser/appcache/appcache_histograms.h b/content/browser/appcache/appcache_histograms.h
index 043d6d9..6414d9f 100644
--- a/content/browser/appcache/appcache_histograms.h
+++ b/content/browser/appcache/appcache_histograms.h
@@ -46,9 +46,6 @@
   static void AddTaskRunTimeSample(const base::TimeDelta& duration);
   static void AddCompletionQueueTimeSample(const base::TimeDelta& duration);
   static void AddCompletionRunTimeSample(const base::TimeDelta& duration);
-  static void AddNetworkJobStartDelaySample(const base::TimeDelta& duration);
-  static void AddErrorJobStartDelaySample(const base::TimeDelta& duration);
-  static void AddAppCacheJobStartDelaySample(const base::TimeDelta& duration);
   static void AddMissingManifestEntrySample();
 
   enum MissingManifestCallsiteType {
diff --git a/content/browser/appcache/appcache_url_loader_job.cc b/content/browser/appcache/appcache_url_loader_job.cc
index 1455c9f3..14ddade 100644
--- a/content/browser/appcache/appcache_url_loader_job.cc
+++ b/content/browser/appcache/appcache_url_loader_job.cc
@@ -44,9 +44,6 @@
   load_timing_info_.request_start_time = base::Time::Now();
   load_timing_info_.request_start = base::TimeTicks::Now();
 
-  AppCacheHistograms::AddAppCacheJobStartDelaySample(base::TimeTicks::Now() -
-                                                     start_time_tick_);
-
   manifest_url_ = manifest_url;
   cache_id_ = cache_id;
   entry_ = entry;
@@ -66,9 +63,6 @@
   if (AppCacheRequestHandler::IsRunningInTests())
     return;
 
-  AppCacheHistograms::AddNetworkJobStartDelaySample(base::TimeTicks::Now() -
-                                                    start_time_tick_);
-
   // We signal our caller with an empy callback that it needs to perform
   // the network load.
   DCHECK(loader_callback_ && !binding_.is_bound());
@@ -88,9 +82,6 @@
   if (loader_callback_)
     CallLoaderCallback();
   NotifyCompleted(net::ERR_FAILED);
-
-  AppCacheHistograms::AddErrorJobStartDelaySample(base::TimeTicks::Now() -
-                                                  start_time_tick_);
 }
 
 AppCacheURLLoaderJob* AppCacheURLLoaderJob::AsURLLoaderJob() {
diff --git a/content/browser/appcache/appcache_url_request_job.cc b/content/browser/appcache/appcache_url_request_job.cc
index 70fd566..fc032a4 100644
--- a/content/browser/appcache/appcache_url_request_job.cc
+++ b/content/browser/appcache/appcache_url_request_job.cc
@@ -138,8 +138,6 @@
 
   switch (delivery_type_) {
     case NETWORK_DELIVERY:
-      AppCacheHistograms::AddNetworkJobStartDelaySample(
-          base::TimeTicks::Now() - start_time_tick_);
       // To fallthru to the network, we restart the request which will
       // cause a new job to be created to retrieve the resource from the
       // network. Our caller is responsible for arranging to not re-intercept
@@ -148,8 +146,6 @@
       break;
 
     case ERROR_DELIVERY:
-      AppCacheHistograms::AddErrorJobStartDelaySample(
-          base::TimeTicks::Now() - start_time_tick_);
       request()->net_log().AddEvent(
           net::NetLogEventType::APPCACHE_DELIVERING_ERROR_RESPONSE);
       NotifyStartError(net::URLRequestStatus(net::URLRequestStatus::FAILED,
@@ -157,8 +153,6 @@
       break;
 
     case APPCACHED_DELIVERY:
-      AppCacheHistograms::AddAppCacheJobStartDelaySample(
-          base::TimeTicks::Now() - start_time_tick_);
       request()->net_log().AddEvent(
           is_fallback_
               ? net::NetLogEventType::APPCACHE_DELIVERING_FALLBACK_RESPONSE
diff --git a/content/browser/background_fetch/background_fetch_context.cc b/content/browser/background_fetch/background_fetch_context.cc
index 38bdb10..4aaa80c 100644
--- a/content/browser/background_fetch/background_fetch_context.cc
+++ b/content/browser/background_fetch/background_fetch_context.cc
@@ -12,6 +12,7 @@
 #include "content/browser/background_fetch/background_fetch_metrics.h"
 #include "content/browser/background_fetch/background_fetch_registration_id.h"
 #include "content/browser/background_fetch/background_fetch_registration_notifier.h"
+#include "content/browser/background_fetch/background_fetch_request_match_params.h"
 #include "content/browser/background_fetch/background_fetch_scheduler.h"
 #include "content/browser/service_worker/service_worker_context_wrapper.h"
 #include "content/public/browser/background_fetch_delegate.h"
@@ -364,6 +365,7 @@
       // This will send a BackgroundFetchFetched or BackgroundFetchFail event.
       data_manager_->GetSettledFetchesForRegistration(
           registration_id,
+          std::make_unique<BackgroundFetchRequestMatchParams>(),
           base::BindOnce(&BackgroundFetchContext::DidGetSettledFetches,
                          weak_factory_.GetWeakPtr(), registration_id));
       return;
diff --git a/content/browser/background_fetch/background_fetch_data_manager.cc b/content/browser/background_fetch/background_fetch_data_manager.cc
index c326cdc..97fa8390 100644
--- a/content/browser/background_fetch/background_fetch_data_manager.cc
+++ b/content/browser/background_fetch/background_fetch_data_manager.cc
@@ -213,11 +213,12 @@
 
 void BackgroundFetchDataManager::GetSettledFetchesForRegistration(
     const BackgroundFetchRegistrationId& registration_id,
+    std::unique_ptr<BackgroundFetchRequestMatchParams> match_params,
     SettledFetchesCallback callback) {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
 
   AddDatabaseTask(std::make_unique<background_fetch::GetSettledFetchesTask>(
-      this, registration_id, std::move(callback)));
+      this, registration_id, std::move(match_params), std::move(callback)));
 }
 
 void BackgroundFetchDataManager::MarkRegistrationForDeletion(
diff --git a/content/browser/background_fetch/background_fetch_data_manager.h b/content/browser/background_fetch/background_fetch_data_manager.h
index 5611929..fd6d233d 100644
--- a/content/browser/background_fetch/background_fetch_data_manager.h
+++ b/content/browser/background_fetch/background_fetch_data_manager.h
@@ -36,6 +36,7 @@
 
 class BackgroundFetchDataManagerObserver;
 class BackgroundFetchRequestInfo;
+class BackgroundFetchRequestMatchParams;
 struct BackgroundFetchSettledFetch;
 class BrowserContext;
 class CacheStorageManager;
@@ -122,11 +123,13 @@
       const std::string& title,
       blink::mojom::BackgroundFetchService::UpdateUICallback callback);
 
-  // Reads all settled fetches for the given |registration_id|. Both the Request
-  // and Response objects will be initialised based on the stored data. Will
-  // invoke the |callback| when the list of fetches has been compiled.
+  // Reads the settled fetches for the given |registration_id| based on
+  // |match_params|. Both the Request and Response objects will be initialised
+  // based on the stored data. Will invoke the |callback| when the list of
+  // fetches has been compiled.
   void GetSettledFetchesForRegistration(
       const BackgroundFetchRegistrationId& registration_id,
+      std::unique_ptr<BackgroundFetchRequestMatchParams> match_params,
       SettledFetchesCallback callback);
 
   // Marks that the backgroundfetched/backgroundfetchfail/backgroundfetchabort
diff --git a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
index acd1d25..27540a5 100644
--- a/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
+++ b/content/browser/background_fetch/background_fetch_data_manager_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/strings/string_number_conversions.h"
 #include "content/browser/background_fetch/background_fetch_data_manager_observer.h"
 #include "content/browser/background_fetch/background_fetch_request_info.h"
+#include "content/browser/background_fetch/background_fetch_request_match_params.h"
 #include "content/browser/background_fetch/background_fetch_test_base.h"
 #include "content/browser/background_fetch/background_fetch_test_data_manager.h"
 #include "content/browser/background_fetch/storage/database_helpers.h"
@@ -26,6 +27,7 @@
 #include "content/public/browser/background_fetch_response.h"
 #include "content/public/browser/browser_thread.h"
 #include "content/public/browser/storage_partition.h"
+#include "services/network/public/mojom/fetch_api.mojom.h"
 #include "storage/browser/blob/blob_data_handle.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/skia/include/core/SkBitmap.h"
@@ -334,6 +336,7 @@
   // BackgroundFetchDataManager::GetSettledFetchesForRegistration().
   void GetSettledFetchesForRegistration(
       const BackgroundFetchRegistrationId& registration_id,
+      base::Optional<ServiceWorkerFetchRequest> request_to_match,
       blink::mojom::BackgroundFetchError* out_error,
       bool* out_succeeded,
       std::vector<BackgroundFetchSettledFetch>* out_settled_fetches) {
@@ -342,8 +345,10 @@
     DCHECK(out_settled_fetches);
 
     base::RunLoop run_loop;
+    auto match_params = std::make_unique<BackgroundFetchRequestMatchParams>(
+        request_to_match, nullptr /* cache_query_params */);
     background_fetch_data_manager_->GetSettledFetchesForRegistration(
-        registration_id,
+        registration_id, std::move(match_params),
         base::BindOnce(&BackgroundFetchDataManagerTest::
                            DidGetSettledFetchesForRegistration,
                        base::Unretained(this), run_loop.QuitClosure(),
@@ -1091,8 +1096,9 @@
   // Nothing is downloaded yet.
   bool succeeded = false;
   std::vector<BackgroundFetchSettledFetch> settled_fetches;
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   EXPECT_TRUE(succeeded);
   EXPECT_EQ(settled_fetches.size(), 0u);
@@ -1112,8 +1118,9 @@
       (ResponseStateStats{0 /* pending_requests */, 0 /* active_requests */,
                           requests.size() /* completed_requests */}));
 
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
 
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   // We are marking the responses as failed in Download Manager.
@@ -1137,8 +1144,9 @@
   bool succeeded = false;
   std::vector<BackgroundFetchSettledFetch> settled_fetches;
   // Nothing is downloaded yet.
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   EXPECT_TRUE(succeeded);
   EXPECT_EQ(settled_fetches.size(), 0u);
@@ -1150,8 +1158,9 @@
                                                  true /* success */);
   MarkRequestAsComplete(registration_id, request_info.get());
 
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   EXPECT_TRUE(succeeded);
   EXPECT_EQ(settled_fetches.size(), 1u);
@@ -1162,8 +1171,9 @@
                                                  true /* success */);
   MarkRequestAsComplete(registration_id, request_info.get());
 
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   EXPECT_TRUE(succeeded);
   ASSERT_EQ(settled_fetches.size(), 2u);
@@ -1178,13 +1188,92 @@
 
   RestartDataManagerFromPersistentStorage();
 
-  GetSettledFetchesForRegistration(registration_id, &error, &succeeded,
-                                   &settled_fetches);
+  GetSettledFetchesForRegistration(registration_id,
+                                   base::nullopt /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
   EXPECT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
   EXPECT_TRUE(succeeded);
   EXPECT_EQ(settled_fetches.size(), 2u);
 }
 
+TEST_F(BackgroundFetchDataManagerTest, GetSettledFetchesForASpecificRequest) {
+  int64_t sw_id = RegisterServiceWorker();
+  ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id);
+
+  auto requests = CreateValidRequests(origin(), 2u /* num_requests */);
+  BackgroundFetchOptions options;
+  blink::mojom::BackgroundFetchError error;
+  BackgroundFetchRegistrationId registration_id(
+      sw_id, origin(), kExampleDeveloperId, kExampleUniqueId);
+
+  CreateRegistration(registration_id, requests, options, SkBitmap(), &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+
+  for (size_t i = 0; i < requests.size(); i++) {
+    SCOPED_TRACE(i);
+    scoped_refptr<BackgroundFetchRequestInfo> request_info;
+    PopNextRequest(registration_id, &request_info);
+    ASSERT_TRUE(request_info);
+    AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get());
+    MarkRequestAsComplete(registration_id, request_info.get());
+  }
+
+  EXPECT_EQ(
+      GetRequestStats(sw_id),
+      (ResponseStateStats{0 /* pending_requests */, 0 /* active_requests */,
+                          requests.size() /* completed_requests */}));
+
+  bool succeeded = false;
+  std::vector<BackgroundFetchSettledFetch> settled_fetches;
+  GetSettledFetchesForRegistration(registration_id,
+                                   requests[0] /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
+
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  // We are marking the responses as failed in Download Manager.
+  EXPECT_FALSE(succeeded);
+  EXPECT_EQ(settled_fetches.size(), 1u);
+}
+
+TEST_F(BackgroundFetchDataManagerTest,
+       GetSettledFetchesForANonMatchingRequest) {
+  int64_t sw_id = RegisterServiceWorker();
+  ASSERT_NE(blink::mojom::kInvalidServiceWorkerRegistrationId, sw_id);
+
+  auto requests = CreateValidRequests(origin(), 3u /* num_requests */);
+  BackgroundFetchOptions options;
+  blink::mojom::BackgroundFetchError error;
+  BackgroundFetchRegistrationId registration_id(
+      sw_id, origin(), kExampleDeveloperId, kExampleUniqueId);
+
+  CreateRegistration(registration_id, requests, options, SkBitmap(), &error);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+
+  for (size_t i = 0; i < requests.size() - 1; i++) {
+    SCOPED_TRACE(i);
+    scoped_refptr<BackgroundFetchRequestInfo> request_info;
+    PopNextRequest(registration_id, &request_info);
+    ASSERT_TRUE(request_info);
+    AnnotateRequestInfoWithFakeDownloadManagerData(request_info.get());
+    MarkRequestAsComplete(registration_id, request_info.get());
+  }
+
+  EXPECT_EQ(
+      GetRequestStats(sw_id),
+      (ResponseStateStats{1 /* pending_requests */, 0 /* active_requests */,
+                          requests.size() - 1 /* completed_requests */}));
+
+  bool succeeded = false;
+  std::vector<BackgroundFetchSettledFetch> settled_fetches;
+  GetSettledFetchesForRegistration(registration_id,
+                                   requests[2] /* request_to_match */, &error,
+                                   &succeeded, &settled_fetches);
+  ASSERT_EQ(error, blink::mojom::BackgroundFetchError::NONE);
+  EXPECT_EQ(settled_fetches.size(), 1u);
+  EXPECT_EQ(settled_fetches[0].response.response_type,
+            network::mojom::FetchResponseType::kError);
+}
+
 TEST_F(BackgroundFetchDataManagerTest, Cleanup) {
   // Tests that the BackgroundFetchDataManager cleans up registrations
   // marked for deletion.
diff --git a/content/browser/background_fetch/background_fetch_request_match_params.cc b/content/browser/background_fetch/background_fetch_request_match_params.cc
new file mode 100644
index 0000000..2c75179
--- /dev/null
+++ b/content/browser/background_fetch/background_fetch_request_match_params.cc
@@ -0,0 +1,20 @@
+// 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.
+
+#include "content/browser/background_fetch/background_fetch_request_match_params.h"
+
+namespace content {
+
+BackgroundFetchRequestMatchParams::BackgroundFetchRequestMatchParams(
+    base::Optional<ServiceWorkerFetchRequest> request_to_match,
+    blink::mojom::QueryParamsPtr cache_query_params)
+    : request_to_match_(std::move(request_to_match)),
+      cache_query_params_(std::move(cache_query_params)) {}
+
+BackgroundFetchRequestMatchParams::BackgroundFetchRequestMatchParams() =
+    default;
+BackgroundFetchRequestMatchParams::~BackgroundFetchRequestMatchParams() =
+    default;
+
+}  // namespace content
\ No newline at end of file
diff --git a/content/browser/background_fetch/background_fetch_request_match_params.h b/content/browser/background_fetch/background_fetch_request_match_params.h
new file mode 100644
index 0000000..7e1d167
--- /dev/null
+++ b/content/browser/background_fetch/background_fetch_request_match_params.h
@@ -0,0 +1,54 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MATCH_PARAMS_H_
+#define CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MATCH_PARAMS_H_
+
+#include "base/optional.h"
+#include "content/common/service_worker/service_worker_types.h"
+#include "third_party/blink/public/platform/modules/cache_storage/cache_storage.mojom.h"
+
+namespace content {
+
+class CONTENT_EXPORT BackgroundFetchRequestMatchParams {
+ public:
+  // TODO(crbug.com/863852): Add boolean to differentiate between match vs
+  // matchAll.
+  BackgroundFetchRequestMatchParams();
+  BackgroundFetchRequestMatchParams(
+      base::Optional<ServiceWorkerFetchRequest> request_to_match,
+      blink::mojom::QueryParamsPtr cache_query_params);
+  ~BackgroundFetchRequestMatchParams();
+
+  bool FilterByRequest() const {
+    return request_to_match_.has_value();
+  }
+
+  // Only call this method if a valid request_to_match was previously provided.
+  const ServiceWorkerFetchRequest& request_to_match() const {
+    DCHECK(request_to_match_.has_value());
+    return request_to_match_.value();
+  }
+
+  blink::mojom::QueryParamsPtr cloned_cache_query_params() const {
+    if (!cache_query_params_)
+      return nullptr;
+    return cache_query_params_->Clone();
+  }
+
+ private:
+  // If |request_to_match| is present, we get response(s) only for this request.
+  // If not present, response(s) for all requests (contained in the fetch) will
+  // be returned.
+  base::Optional<ServiceWorkerFetchRequest> request_to_match_;
+
+  // When nullptr, this has no effect on the response(s) returned.
+  blink::mojom::QueryParamsPtr cache_query_params_;
+
+  DISALLOW_COPY_AND_ASSIGN(BackgroundFetchRequestMatchParams);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_BACKGROUND_FETCH_BACKGROUND_FETCH_REQUEST_MATCH_PARAMS_H_
diff --git a/content/browser/background_fetch/storage/get_settled_fetches_task.cc b/content/browser/background_fetch/storage/get_settled_fetches_task.cc
index d74d797..21677fe 100644
--- a/content/browser/background_fetch/storage/get_settled_fetches_task.cc
+++ b/content/browser/background_fetch/storage/get_settled_fetches_task.cc
@@ -17,9 +17,11 @@
 GetSettledFetchesTask::GetSettledFetchesTask(
     DatabaseTaskHost* host,
     BackgroundFetchRegistrationId registration_id,
+    std::unique_ptr<BackgroundFetchRequestMatchParams> match_params,
     SettledFetchesCallback callback)
     : DatabaseTask(host),
       registration_id_(registration_id),
+      match_params_(std::move(match_params)),
       settled_fetches_callback_(std::move(callback)),
       weak_factory_(this) {}
 
@@ -101,12 +103,39 @@
     return;
   }
 
+  if (match_params_->FilterByRequest()) {
+    // Get a response only for the relevant fetch.
+    settled_fetches_.emplace_back();
+    settled_fetches_.back().request = match_params_->request_to_match();
+    for (const auto& completed_request : completed_requests_) {
+      if (completed_request.serialized_request() !=
+          match_params_->request_to_match().Serialize()) {
+        continue;
+      }
+      // A matching request!
+      FillResponse(&settled_fetches_.back(),
+                   base::BindOnce(&GetSettledFetchesTask::FinishWithError,
+                                  weak_factory_.GetWeakPtr(),
+                                  blink::mojom::BackgroundFetchError::NONE));
+      // TODO(crbug.com/863852): Add support for matchAll();
+      return;
+    }
+
+    // No matching request found.
+    FillUncachedResponse(
+        &settled_fetches_.back(),
+        base::BindOnce(&GetSettledFetchesTask::FinishWithError,
+                       weak_factory_.GetWeakPtr(),
+                       blink::mojom::BackgroundFetchError::NONE));
+    return;
+  }
+
+  // Process all completed requests.
   base::RepeatingClosure barrier_closure = base::BarrierClosure(
       completed_requests_.size(),
       base::BindOnce(&GetSettledFetchesTask::FinishWithError,
                      weak_factory_.GetWeakPtr(),
                      blink::mojom::BackgroundFetchError::NONE));
-
   settled_fetches_.reserve(completed_requests_.size());
   for (const auto& completed_request : completed_requests_) {
     settled_fetches_.emplace_back();
@@ -125,8 +154,8 @@
 
   auto request =
       std::make_unique<ServiceWorkerFetchRequest>(settled_fetch->request);
-
-  handle_.value()->Match(std::move(request), nullptr /* match_params */,
+  handle_.value()->Match(std::move(request),
+                         match_params_->cloned_cache_query_params(),
                          base::BindOnce(&GetSettledFetchesTask::DidMatchRequest,
                                         weak_factory_.GetWeakPtr(),
                                         settled_fetch, std::move(callback)));
@@ -143,6 +172,7 @@
     return;
   }
   settled_fetch->response = std::move(*cache_response);
+
   std::move(callback).Run();
 }
 
diff --git a/content/browser/background_fetch/storage/get_settled_fetches_task.h b/content/browser/background_fetch/storage/get_settled_fetches_task.h
index 6830c21..b76465f 100644
--- a/content/browser/background_fetch/storage/get_settled_fetches_task.h
+++ b/content/browser/background_fetch/storage/get_settled_fetches_task.h
@@ -8,6 +8,7 @@
 #include "base/callback_forward.h"
 #include "base/memory/scoped_refptr.h"
 #include "content/browser/background_fetch/background_fetch.pb.h"
+#include "content/browser/background_fetch/background_fetch_request_match_params.h"
 #include "content/browser/background_fetch/storage/database_task.h"
 #include "content/browser/cache_storage/cache_storage_cache_handle.h"
 #include "storage/browser/blob/blob_data_handle.h"
@@ -15,6 +16,8 @@
 
 namespace content {
 
+class BackgroundFetchRequestMatchParams;
+
 namespace background_fetch {
 
 class GetSettledFetchesTask : public DatabaseTask {
@@ -25,9 +28,13 @@
       std::vector<BackgroundFetchSettledFetch>,
       std::vector<std::unique_ptr<storage::BlobDataHandle>>)>;
 
-  GetSettledFetchesTask(DatabaseTaskHost* host,
-                        BackgroundFetchRegistrationId registration_id,
-                        SettledFetchesCallback callback);
+  // Gets settled fetches from cache storage, filtered according to
+  // |match_params|.
+  GetSettledFetchesTask(
+      DatabaseTaskHost* host,
+      BackgroundFetchRegistrationId registration_id,
+      std::unique_ptr<BackgroundFetchRequestMatchParams> match_params,
+      SettledFetchesCallback callback);
 
   ~GetSettledFetchesTask() override;
 
@@ -59,6 +66,7 @@
   void FinishWithError(blink::mojom::BackgroundFetchError error) override;
 
   BackgroundFetchRegistrationId registration_id_;
+  std::unique_ptr<BackgroundFetchRequestMatchParams> match_params_;
   SettledFetchesCallback settled_fetches_callback_;
 
   // SettledFetchesCallback params.
diff --git a/content/browser/devtools/browser_devtools_agent_host.cc b/content/browser/devtools/browser_devtools_agent_host.cc
index 5bdec4f..a83315a 100644
--- a/content/browser/devtools/browser_devtools_agent_host.cc
+++ b/content/browser/devtools/browser_devtools_agent_host.cc
@@ -111,14 +111,15 @@
 bool BrowserDevToolsAgentHost::DispatchProtocolMessage(
     DevToolsAgentHostClient* client,
     const std::string& message,
-    base::DictionaryValue* parsed_message) {
+    std::unique_ptr<base::DictionaryValue> parsed_message) {
   auto it = target_registries_.find(client);
   if (it != target_registries_.end() &&
-      it->second->DispatchMessageOnAgentHost(message, parsed_message)) {
+      it->second->CanDispatchMessageOnAgentHost(parsed_message.get())) {
+    it->second->DispatchMessageOnAgentHost(message, std::move(parsed_message));
     return true;
   }
-  return DevToolsAgentHostImpl::DispatchProtocolMessage(client, message,
-                                                        parsed_message);
+  return DevToolsAgentHostImpl::DispatchProtocolMessage(
+      client, message, std::move(parsed_message));
 }
 
 }  // content
diff --git a/content/browser/devtools/browser_devtools_agent_host.h b/content/browser/devtools/browser_devtools_agent_host.h
index 2996348..0bdd0bc 100644
--- a/content/browser/devtools/browser_devtools_agent_host.h
+++ b/content/browser/devtools/browser_devtools_agent_host.h
@@ -25,9 +25,10 @@
   bool AttachSession(DevToolsSession* session,
                      TargetRegistry* registry) override;
   void DetachSession(DevToolsSession* session) override;
-  bool DispatchProtocolMessage(DevToolsAgentHostClient* client,
-                               const std::string& message,
-                               base::DictionaryValue* parsed_message) override;
+  bool DispatchProtocolMessage(
+      DevToolsAgentHostClient* client,
+      const std::string& message,
+      std::unique_ptr<base::DictionaryValue> parsed_message) override;
 
   // DevToolsAgentHost implementation.
   std::string GetType() override;
diff --git a/content/browser/devtools/devtools_agent_host_impl.cc b/content/browser/devtools/devtools_agent_host_impl.cc
index 273ca40..0efffb5 100644
--- a/content/browser/devtools/devtools_agent_host_impl.cc
+++ b/content/browser/devtools/devtools_agent_host_impl.cc
@@ -231,20 +231,18 @@
     DevToolsAgentHostClient* client,
     const std::string& message) {
   std::unique_ptr<base::Value> value = base::JSONReader::Read(message);
-  if (value && !value->is_dict())
-    value.reset();
-  return DispatchProtocolMessage(
-      client, message, static_cast<base::DictionaryValue*>(value.get()));
+  return DispatchProtocolMessage(client, message,
+                                 base::DictionaryValue::From(std::move(value)));
 }
 
 bool DevToolsAgentHostImpl::DispatchProtocolMessage(
     DevToolsAgentHostClient* client,
     const std::string& message,
-    base::DictionaryValue* parsed_message) {
+    std::unique_ptr<base::DictionaryValue> parsed_message) {
   DevToolsSession* session = SessionByClient(client);
   if (!session)
     return false;
-  session->DispatchProtocolMessage(message, parsed_message);
+  session->DispatchProtocolMessage(message, std::move(parsed_message));
   return true;
 }
 
diff --git a/content/browser/devtools/devtools_agent_host_impl.h b/content/browser/devtools/devtools_agent_host_impl.h
index b258f84..0910548 100644
--- a/content/browser/devtools/devtools_agent_host_impl.h
+++ b/content/browser/devtools/devtools_agent_host_impl.h
@@ -70,9 +70,10 @@
                              TargetRegistry* registry);
   virtual void DetachSession(DevToolsSession* session);
 
-  virtual bool DispatchProtocolMessage(DevToolsAgentHostClient* client,
-                                       const std::string& message,
-                                       base::DictionaryValue* parsed_message);
+  virtual bool DispatchProtocolMessage(
+      DevToolsAgentHostClient* client,
+      const std::string& message,
+      std::unique_ptr<base::DictionaryValue> parsed_message);
 
   void NotifyCreated();
   void NotifyNavigated();
diff --git a/content/browser/devtools/devtools_session.cc b/content/browser/devtools/devtools_session.cc
index a82213af..360bae78 100644
--- a/content/browser/devtools/devtools_session.cc
+++ b/content/browser/devtools/devtools_session.cc
@@ -125,19 +125,19 @@
 
 void DevToolsSession::DispatchProtocolMessage(
     const std::string& message,
-    base::DictionaryValue* parsed_message) {
+    std::unique_ptr<base::DictionaryValue> parsed_message) {
   DevToolsManagerDelegate* delegate =
       DevToolsManager::GetInstance()->delegate();
   if (delegate && parsed_message &&
-      delegate->HandleCommand(agent_host_, client_, parsed_message)) {
+      delegate->HandleCommand(agent_host_, client_, parsed_message.get())) {
     return;
   }
 
   int call_id;
   std::string method;
-  if (dispatcher_->dispatch(protocol::toProtocolValue(parsed_message, 1000),
-                            &call_id,
-                            &method) != protocol::Response::kFallThrough) {
+  if (dispatcher_->dispatch(
+          protocol::toProtocolValue(parsed_message.get(), 1000), &call_id,
+          &method) != protocol::Response::kFallThrough) {
     return;
   }
 
diff --git a/content/browser/devtools/devtools_session.h b/content/browser/devtools/devtools_session.h
index 2b2bccf..9b1b0768 100644
--- a/content/browser/devtools/devtools_session.h
+++ b/content/browser/devtools/devtools_session.h
@@ -43,8 +43,9 @@
   void SetRenderer(int process_host_id, RenderFrameHostImpl* frame_host);
 
   void AttachToAgent(const blink::mojom::DevToolsAgentAssociatedPtr& agent);
-  void DispatchProtocolMessage(const std::string& message,
-                               base::DictionaryValue* parsed_message);
+  void DispatchProtocolMessage(
+      const std::string& message,
+      std::unique_ptr<base::DictionaryValue> parsed_message);
   void SuspendSendingMessagesToAgent();
   void ResumeSendingMessagesToAgent();
 
diff --git a/content/browser/devtools/devtools_url_interceptor_request_job.cc b/content/browser/devtools/devtools_url_interceptor_request_job.cc
index 6532979..d07eca50 100644
--- a/content/browser/devtools/devtools_url_interceptor_request_job.cc
+++ b/content/browser/devtools/devtools_url_interceptor_request_job.cc
@@ -566,7 +566,6 @@
     net::NetworkDelegate* original_network_delegate,
     const base::UnguessableToken& devtools_token,
     DevToolsNetworkInterceptor::RequestInterceptedCallback callback,
-    bool is_redirect,
     ResourceType resource_type,
     InterceptionStage stage_to_intercept)
     : net::URLRequestJob(original_request, original_network_delegate),
@@ -584,7 +583,6 @@
       owning_entry_id_(owning_entry_id),
       devtools_token_(devtools_token),
       callback_(callback),
-      is_redirect_(is_redirect),
       resource_type_(resource_type),
       stage_to_intercept_(stage_to_intercept),
       weak_ptr_factory_(this) {
@@ -635,26 +633,6 @@
     return;
   }
 
-  if (is_redirect_) {
-    if (stage_to_intercept_ == InterceptionStage::REQUEST) {
-      // If we are a redirect and we do not plan on grabbing the response we are
-      // done. If we are here this means we must have already sent an
-      // intercepted event to front-end for this redirect and the front-end
-      // allowed it. Since we have already allowed the redirect and we are only
-      // intercepting the request, we only need to catch it again if it's
-      // another redirect, which SubRequest will send the
-      // OnSubRequestRedirectReceived event.
-      sub_request_.reset(new SubRequest(request_details_, this, interceptor_));
-    } else {
-      // Otherwise we have already issued the request interception and had a
-      // continue and now we must issue a response interception for the
-      // redirect.
-      sub_request_.reset(
-          new InterceptedRequest(request_details_, this, interceptor_));
-    }
-    return;
-  }
-
   if (stage_to_intercept_ == InterceptionStage::RESPONSE) {
     // We are only a response interception, we go right to dispatching the
     // request.
@@ -821,8 +799,7 @@
 
   // If we're not intercepting results or are a response then cancel this
   // redirect and tell the parent request it was redirected through |redirect_|.
-  if (stage_to_intercept_ == InterceptionStage::DONT_INTERCEPT ||
-      stage_to_intercept_ == InterceptionStage::RESPONSE) {
+  if (!(stage_to_intercept_ & InterceptionStage::RESPONSE)) {
     *defer_redirect = false;
     ProcessRedirect(redirectinfo.status_code, redirectinfo.new_url.spec());
     redirect_.reset();
@@ -1045,7 +1022,6 @@
       base::MakeRefCounted<net::HttpResponseHeaders>(raw_headers), "", 0,
       base::TimeTicks::Now()));
 
-  interceptor_->ExpectRequestAfterRedirect(request(), interception_id_);
   NotifyHeadersComplete();
 }
 
@@ -1124,11 +1100,6 @@
     mock_response_details_.reset(new MockResponseDetails(
         std::move(*modifications->raw_response), base::TimeTicks::Now()));
 
-    std::string value;
-    if (mock_response_details_->response_headers()->IsRedirect(&value)) {
-      interceptor_->ExpectRequestAfterRedirect(request(), interception_id_);
-    }
-
     // Set cookies in the network stack.
     net::CookieOptions options;
     options.set_include_httponly();
diff --git a/content/browser/devtools/devtools_url_interceptor_request_job.h b/content/browser/devtools/devtools_url_interceptor_request_job.h
index e7531a1..ac37f72 100644
--- a/content/browser/devtools/devtools_url_interceptor_request_job.h
+++ b/content/browser/devtools/devtools_url_interceptor_request_job.h
@@ -37,7 +37,6 @@
       net::NetworkDelegate* original_network_delegate,
       const base::UnguessableToken& devtools_token,
       DevToolsNetworkInterceptor::RequestInterceptedCallback callback,
-      bool is_redirect,
       ResourceType resource_type,
       DevToolsNetworkInterceptor::InterceptionStage stage_to_intercept);
 
@@ -157,7 +156,6 @@
   const intptr_t owning_entry_id_;
   const base::UnguessableToken devtools_token_;
   DevToolsNetworkInterceptor::RequestInterceptedCallback callback_;
-  const bool is_redirect_;
   const ResourceType resource_type_;
   InterceptionStage stage_to_intercept_;
   std::vector<std::unique_ptr<GetResponseBodyForInterceptionCallback>>
diff --git a/content/browser/devtools/devtools_url_loader_interceptor.cc b/content/browser/devtools/devtools_url_loader_interceptor.cc
index 6d4201ba..fa63a56 100644
--- a/content/browser/devtools/devtools_url_loader_interceptor.cc
+++ b/content/browser/devtools/devtools_url_loader_interceptor.cc
@@ -252,8 +252,9 @@
   void OnComplete(const network::URLLoaderCompletionStatus& status) override;
 
   bool CanGetResponseBody(std::string* error_reason);
+  void UpdateIdAndRegister();
 
-  const std::string id_;
+  const std::string id_prefix_;
   const GlobalRequestId global_req_id_;
   const base::UnguessableToken frame_token_;
   const base::TimeTicks start_ticks_;
@@ -277,6 +278,7 @@
     kNotStarted,
     kRequestSent,
     kRedirectReceived,
+    kFollowRedirect,
     kAuthRequired,
     kResponseReceived,
     kResponseTaken,
@@ -284,6 +286,8 @@
 
   State state_;
   bool waiting_for_resolution_;
+  int redirect_count_;
+  std::string current_id_;
 
   std::unique_ptr<BodyReader> body_reader_;
   std::unique_ptr<ResponseMetadata> response_metadata_;
@@ -320,11 +324,11 @@
     static int last_id = 0;
 
     std::string id = base::StringPrintf("interception-job-%d", ++last_id);
-    InterceptionJob* job = new InterceptionJob(
-        this, id, frame_token, process_id, std::move(create_params),
-        is_download, std::move(loader_request), std::move(client),
-        std::move(target_factory));
-    jobs_.emplace(std::move(id), job);
+    // This class will manage its own life time to match the loader client.
+    new InterceptionJob(this, std::move(id), frame_token, process_id,
+                        std::move(create_params), is_download,
+                        std::move(loader_request), std::move(client),
+                        std::move(target_factory));
   }
 
   void SetPatterns(std::vector<DevToolsNetworkInterceptor::Pattern> patterns) {
@@ -392,6 +396,9 @@
   }
 
   void RemoveJob(const std::string& id) { jobs_.erase(id); }
+  void AddJob(const std::string& id, InterceptionJob* job) {
+    jobs_.emplace(id, job);
+  }
 
   std::map<std::string, InterceptionJob*> jobs_;
   RequestInterceptedCallback request_intercepted_callback_;
@@ -627,7 +634,7 @@
     network::mojom::URLLoaderRequest loader_request,
     network::mojom::URLLoaderClientPtr client,
     network::mojom::URLLoaderFactoryPtr target_factory)
-    : id_(std::move(id)),
+    : id_prefix_(id),
       global_req_id_(
           std::make_tuple(process_id,
                           create_loader_params->request.render_frame_id,
@@ -644,7 +651,9 @@
       client_(std::move(client)),
       target_factory_(std::move(target_factory)),
       state_(kNotStarted),
-      waiting_for_resolution_(false) {
+      waiting_for_resolution_(false),
+      redirect_count_(0) {
+  UpdateIdAndRegister();
   const network::ResourceRequest& request = create_loader_params_->request;
   stage_ = interceptor_->GetInterceptionStage(
       request.url, static_cast<ResourceType>(request.resource_type));
@@ -665,6 +674,11 @@
   StartRequest();
 }
 
+void InterceptionJob::UpdateIdAndRegister() {
+  current_id_ = id_prefix_ + base::StringPrintf(".%d", redirect_count_);
+  interceptor_->AddJob(current_id_, this);
+}
+
 bool InterceptionJob::CanGetResponseBody(std::string* error_reason) {
   if (!(stage_ & InterceptionStage::RESPONSE)) {
     *error_reason =
@@ -786,6 +800,18 @@
   if (modifications->raw_response)
     return ProcessResponseOverride(*modifications->raw_response);
 
+  if (state_ == State::kFollowRedirect) {
+    if (modifications->modified_url.isJust()) {
+      CancelRequest();
+      // Fall through to the generic logic of re-starting the request
+      // at the bottom of the method.
+    } else {
+      // TODO(caseq): report error if other modifications are present.
+      state_ = State::kRequestSent;
+      loader_->FollowRedirect(base::nullopt, base::nullopt);
+      return Response::OK();
+    }
+  }
   if (state_ == State::kRedirectReceived) {
     // TODO(caseq): report error if other modifications are present.
     if (modifications->modified_url.isJust()) {
@@ -1037,7 +1063,7 @@
 std::unique_ptr<InterceptedRequestInfo> InterceptionJob::BuildRequestInfo(
     const network::ResourceResponseHead* head) {
   auto result = std::make_unique<InterceptedRequestInfo>();
-  result->interception_id = id_;
+  result->interception_id = current_id_;
   result->network_request =
       protocol::NetworkHandler::CreateRequestFromResourceRequest(
           create_loader_params_->request);
@@ -1078,7 +1104,7 @@
 
 void InterceptionJob::Shutdown() {
   if (interceptor_)
-    interceptor_->RemoveJob(id_);
+    interceptor_->RemoveJob(current_id_);
   delete this;
 }
 
@@ -1100,9 +1126,24 @@
   request->referrer_policy = info.new_referrer_policy;
   request->referrer = GURL(info.new_referrer);
   response_metadata_.reset();
+
   if (interceptor_) {
+    // Pretend that each redirect hop is a new request -- this is for
+    // compatibilty with URLRequestJob-based interception implementation.
+    interceptor_->RemoveJob(current_id_);
+    redirect_count_++;
+    UpdateIdAndRegister();
+
     stage_ = interceptor_->GetInterceptionStage(
         request->url, static_cast<ResourceType>(request->resource_type));
+    if (stage_ & InterceptionStage::REQUEST) {
+      if (state_ == State::kRedirectReceived)
+        state_ = State::kFollowRedirect;
+      else
+        DCHECK_EQ(State::kNotStarted, state_);
+      NotifyClient(BuildRequestInfo(nullptr));
+      return;
+    }
   }
   if (state_ == State::kRedirectReceived) {
     state_ = State::kRequestSent;
@@ -1168,7 +1209,7 @@
   response_metadata_->redirect_info =
       std::make_unique<net::RedirectInfo>(redirect_info);
 
-  if (!(stage_ & InterceptionStage::REQUEST)) {
+  if (!(stage_ & InterceptionStage::RESPONSE)) {
     client_->OnReceiveRedirect(redirect_info, head);
     return;
   }
diff --git a/content/browser/devtools/devtools_url_request_interceptor.cc b/content/browser/devtools/devtools_url_request_interceptor.cc
index 0a02236..e6bf677 100644
--- a/content/browser/devtools/devtools_url_request_interceptor.cc
+++ b/content/browser/devtools/devtools_url_request_interceptor.cc
@@ -141,8 +141,7 @@
     return nullptr;
   DCHECK(interception_stage != DONT_INTERCEPT);
 
-  bool is_redirect;
-  std::string interception_id = GetIdForRequest(request, &is_redirect);
+  std::string interception_id = base::StringPrintf("id-%zu", ++next_id_);
 
   if (IsNavigationRequest(resource_type)) {
     BrowserThread::PostTask(
@@ -155,8 +154,7 @@
   DevToolsURLInterceptorRequestJob* job = new DevToolsURLInterceptorRequestJob(
       this, interception_id, reinterpret_cast<intptr_t>(entry), request,
       network_delegate, target_info->devtools_token, entry->callback,
-      is_redirect, resource_request_info->GetResourceType(),
-      interception_stage);
+      resource_request_info->GetResourceType(), interception_stage);
   interception_id_to_job_map_[interception_id] = job;
   return job;
 }
@@ -261,28 +259,6 @@
   sub_requests_.erase(sub_request);
 }
 
-void DevToolsURLRequestInterceptor::ExpectRequestAfterRedirect(
-    const net::URLRequest* request,
-    std::string id) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  expected_redirects_[request] = id;
-}
-
-std::string DevToolsURLRequestInterceptor::GetIdForRequest(
-    const net::URLRequest* request,
-    bool* is_redirect) {
-  DCHECK_CURRENTLY_ON(BrowserThread::IO);
-  auto find_it = expected_redirects_.find(request);
-  if (find_it == expected_redirects_.end()) {
-    *is_redirect = false;
-    return base::StringPrintf("id-%zu", ++next_id_);
-  }
-  *is_redirect = true;
-  std::string id = find_it->second;
-  expected_redirects_.erase(find_it);
-  return id;
-}
-
 DevToolsURLInterceptorRequestJob* DevToolsURLRequestInterceptor::GetJob(
     const std::string& interception_id) const {
   DCHECK_CURRENTLY_ON(BrowserThread::IO);
diff --git a/content/browser/devtools/devtools_url_request_interceptor.h b/content/browser/devtools/devtools_url_request_interceptor.h
index 96bb378..397dd66 100644
--- a/content/browser/devtools/devtools_url_request_interceptor.h
+++ b/content/browser/devtools/devtools_url_request_interceptor.h
@@ -66,10 +66,6 @@
   // Registers a |sub_request| that should not be intercepted.
   void RegisterSubRequest(const net::URLRequest* sub_request);
   void UnregisterSubRequest(const net::URLRequest* sub_request);
-  // To make the user's life easier we make sure requests in a redirect chain
-  // all have the same id.
-  void ExpectRequestAfterRedirect(const net::URLRequest* request,
-                                  std::string id);
   void JobFinished(const std::string& interception_id, bool is_navigation);
 
  private:
@@ -85,8 +81,6 @@
   const DevToolsTargetRegistry::TargetInfo* TargetInfoForRequestInfo(
       const ResourceRequestInfo* request_info) const;
 
-  std::string GetIdForRequest(const net::URLRequest* request,
-                              bool* is_redirect);
   // Returns a WeakPtr to the DevToolsURLInterceptorRequestJob corresponding
   // to |interception_id|.
   DevToolsURLInterceptorRequestJob* GetJob(
@@ -107,9 +101,6 @@
   // requests.
   base::flat_set<const net::URLRequest*> sub_requests_;
 
-  // To simplify handling of redirect chains for the end user, we arrange for
-  // all requests in the chain to have the same interception id.
-  base::flat_map<const net::URLRequest*, std::string> expected_redirects_;
   size_t next_id_;
 
   base::WeakPtrFactory<DevToolsURLRequestInterceptor> weak_factory_;
diff --git a/content/browser/devtools/target_registry.cc b/content/browser/devtools/target_registry.cc
index 07d168a..aa783b0 100644
--- a/content/browser/devtools/target_registry.cc
+++ b/content/browser/devtools/target_registry.cc
@@ -24,20 +24,28 @@
   sessions_.erase(session_id);
 }
 
-bool TargetRegistry::DispatchMessageOnAgentHost(
-    const std::string& message,
+bool TargetRegistry::CanDispatchMessageOnAgentHost(
     base::DictionaryValue* parsed_message) {
+  return parsed_message->FindKeyOfType("sessionId",
+                                       base::DictionaryValue::Type::STRING);
+}
+
+void TargetRegistry::DispatchMessageOnAgentHost(
+    const std::string& message,
+    std::unique_ptr<base::DictionaryValue> parsed_message) {
   std::string session_id;
-  if (!parsed_message->GetString("sessionId", &session_id))
-    return false;
+  bool result = parsed_message->GetString("sessionId", &session_id);
+  DCHECK(result);
+
   auto it = sessions_.find(session_id);
   if (it == sessions_.end()) {
     LOG(ERROR) << "Unknown session " << session_id;
-    return true;
+    return;
   }
   scoped_refptr<DevToolsAgentHostImpl> agent_host = it->second.first;
   DevToolsAgentHostClient* client = it->second.second;
-  return agent_host->DispatchProtocolMessage(client, message, parsed_message);
+  agent_host->DispatchProtocolMessage(client, message,
+                                      std::move(parsed_message));
 }
 
 void TargetRegistry::SendMessageToClient(const std::string& session_id,
diff --git a/content/browser/devtools/target_registry.h b/content/browser/devtools/target_registry.h
index d915e1f..5b12d858 100644
--- a/content/browser/devtools/target_registry.h
+++ b/content/browser/devtools/target_registry.h
@@ -25,8 +25,10 @@
                               DevToolsAgentHostImpl* agent_host,
                               DevToolsAgentHostClient* client);
   void DetachSubtargetSession(const std::string& session_id);
-  bool DispatchMessageOnAgentHost(const std::string& message,
-                                  base::DictionaryValue* parsed_message);
+  bool CanDispatchMessageOnAgentHost(base::DictionaryValue* parsed_message);
+  void DispatchMessageOnAgentHost(
+      const std::string& message,
+      std::unique_ptr<base::DictionaryValue> parsed_message);
   void SendMessageToClient(const std::string& session_id,
                            const std::string& message);
 
diff --git a/content/browser/dom_storage/dom_storage_database.cc b/content/browser/dom_storage/dom_storage_database.cc
index b260d7f3..7d5b034 100644
--- a/content/browser/dom_storage/dom_storage_database.cc
+++ b/content/browser/dom_storage/dom_storage_database.cc
@@ -186,12 +186,8 @@
     // and whether it's usable (i.e. not corrupted).
     SchemaVersion current_version = DetectSchemaVersion();
 
-    if (current_version == V2) {
+    if (current_version == V2)
       return true;
-    } else if (current_version == V1) {
-      if (UpgradeVersion1To2())
-        return true;
-    }
   }
 
   // This is the exceptional case - to try and recover we'll attempt
@@ -218,20 +214,7 @@
       !db_->DoesColumnExist("ItemTable", "value"))
     return INVALID;
 
-  // We must use a unique statement here as we aren't going to step it.
-  sql::Statement statement(
-      db_->GetUniqueStatement("SELECT key,value from ItemTable LIMIT 1"));
-  if (statement.DeclaredColumnType(0) != sql::COLUMN_TYPE_TEXT)
-    return INVALID;
-
-  switch (statement.DeclaredColumnType(1)) {
-    case sql::COLUMN_TYPE_BLOB:
-      return V2;
-    case sql::COLUMN_TYPE_TEXT:
-      return V1;
-    default:
-      return INVALID;
-  }
+  return V2;
 }
 
 bool DOMStorageDatabase::CreateTableV2() {
@@ -263,32 +246,6 @@
   return false;
 }
 
-bool DOMStorageDatabase::UpgradeVersion1To2() {
-  DCHECK(IsOpen());
-  DCHECK(DetectSchemaVersion() == V1);
-
-  sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE,
-      "SELECT * FROM ItemTable"));
-  DCHECK(statement.is_valid());
-
-  // Need to migrate from TEXT value column to BLOB.
-  // Store the current database content so we can re-insert
-  // the data into the new V2 table.
-  DOMStorageValuesMap values;
-  while (statement.Step()) {
-    base::string16 key = statement.ColumnString16(0);
-    base::NullableString16 value(statement.ColumnString16(1), false);
-    values[key] = value;
-  }
-
-  sql::Transaction migration(db_.get());
-  return migration.Begin() &&
-      db_->Execute("DROP TABLE ItemTable") &&
-      CreateTableV2() &&
-      CommitChanges(false, values) &&
-      migration.Commit();
-}
-
 void DOMStorageDatabase::Close() {
   db_.reset(nullptr);
 }
diff --git a/content/browser/dom_storage/dom_storage_database.h b/content/browser/dom_storage/dom_storage_database.h
index 5ea7d79..255d038 100644
--- a/content/browser/dom_storage/dom_storage_database.h
+++ b/content/browser/dom_storage/dom_storage_database.h
@@ -80,8 +80,11 @@
 
   enum SchemaVersion {
     INVALID,
-    V1,
-    V2
+
+    // V1 is deprecated.
+
+    // 2011-07-15 - https://bugs.webkit.org/show_bug.cgi?id=58762
+    V2,
   };
 
   // Open the database at file_path_ if it exists already and creates it if
@@ -105,12 +108,6 @@
   // scratch.
   bool DeleteFileAndRecreate();
 
-  // Version 1 -> 2 migrates the value column in the ItemTable from a TEXT
-  // to a BLOB. Exisitng data is preserved on success. Returns false if the
-  // upgrade failed. If true is returned, the database is guaranteed to be at
-  // version 2.
-  bool UpgradeVersion1To2();
-
   void Close();
   bool IsOpen() const { return db_.get() ? db_->is_open() : false; }
 
diff --git a/content/browser/dom_storage/dom_storage_database_unittest.cc b/content/browser/dom_storage/dom_storage_database_unittest.cc
index d3b199a..fedc3a4 100644
--- a/content/browser/dom_storage/dom_storage_database_unittest.cc
+++ b/content/browser/dom_storage/dom_storage_database_unittest.cc
@@ -18,15 +18,6 @@
 
 namespace content {
 
-void CreateV1Table(sql::Connection* db) {
-  ASSERT_TRUE(db->is_open());
-  ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable"));
-  ASSERT_TRUE(db->Execute(
-      "CREATE TABLE ItemTable ("
-      "key TEXT UNIQUE ON CONFLICT REPLACE, "
-      "value TEXT NOT NULL ON CONFLICT FAIL)"));
-}
-
 void CreateV2Table(sql::Connection* db) {
   ASSERT_TRUE(db->is_open());
   ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable"));
@@ -36,37 +27,15 @@
       "value BLOB NOT NULL ON CONFLICT FAIL)"));
 }
 
-void CreateInvalidKeyColumnTable(sql::Connection* db) {
-  // Create a table with the key type as FLOAT - this is "invalid"
+void CreateInvalidTable(sql::Connection* db) {
+  // Create a table with out a key column - this is "invalid"
   // as far as the DOM Storage db is concerned.
   ASSERT_TRUE(db->is_open());
   ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable"));
   ASSERT_TRUE(db->Execute(
       "CREATE TABLE IF NOT EXISTS ItemTable ("
-      "key FLOAT UNIQUE ON CONFLICT REPLACE, "
       "value BLOB NOT NULL ON CONFLICT FAIL)"));
 }
-void CreateInvalidValueColumnTable(sql::Connection* db) {
-  // Create a table with the value type as FLOAT - this is "invalid"
-  // as far as the DOM Storage db is concerned.
-  ASSERT_TRUE(db->is_open());
-  ASSERT_TRUE(db->Execute("DROP TABLE IF EXISTS ItemTable"));
-  ASSERT_TRUE(db->Execute(
-      "CREATE TABLE IF NOT EXISTS ItemTable ("
-      "key TEXT UNIQUE ON CONFLICT REPLACE, "
-      "value FLOAT NOT NULL ON CONFLICT FAIL)"));
-}
-
-void InsertDataV1(sql::Connection* db,
-                  const base::string16& key,
-                  const base::string16& value) {
-  sql::Statement statement(db->GetCachedStatement(SQL_FROM_HERE,
-      "INSERT INTO ItemTable VALUES (?,?)"));
-  statement.BindString16(0, key);
-  statement.BindString16(1, value);
-  ASSERT_TRUE(statement.is_valid());
-  statement.Run();
-}
 
 void CheckValuesMatch(DOMStorageDatabase* db,
                       const DOMStorageValuesMap& expected) {
@@ -201,39 +170,13 @@
   db.db_.reset(new sql::Connection());
   ASSERT_TRUE(db.db_->OpenInMemory());
 
-  CreateInvalidValueColumnTable(db.db_.get());
+  CreateInvalidTable(db.db_.get());
   EXPECT_EQ(DOMStorageDatabase::INVALID, db.DetectSchemaVersion());
 
-  CreateInvalidKeyColumnTable(db.db_.get());
-  EXPECT_EQ(DOMStorageDatabase::INVALID, db.DetectSchemaVersion());
-
-  CreateV1Table(db.db_.get());
-  EXPECT_EQ(DOMStorageDatabase::V1, db.DetectSchemaVersion());
-
   CreateV2Table(db.db_.get());
   EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
 }
 
-TEST(DOMStorageDatabaseTest, TestLazyOpenUpgradesDatabase) {
-  // This test needs to operate with a file on disk so that we
-  // can create a table at version 1 and then close it again
-  // so that LazyOpen sees there is work to do (LazyOpen will return
-  // early if the database is already open).
-  base::ScopedTempDir temp_dir;
-  ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-  base::FilePath file_name =
-      temp_dir.GetPath().AppendASCII("TestDOMStorageDatabase.db");
-
-  DOMStorageDatabase db(file_name);
-  db.db_.reset(new sql::Connection());
-  ASSERT_TRUE(db.db_->Open(file_name));
-  CreateV1Table(db.db_.get());
-  db.Close();
-
-  EXPECT_TRUE(db.LazyOpen(true));
-  EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
-}
-
 TEST(DOMStorageDatabaseTest, SimpleWriteAndReadBack) {
   DOMStorageDatabase db;
 
@@ -266,25 +209,6 @@
   CheckValuesMatch(&db, storage);
 }
 
-TEST(DOMStorageDatabaseTest, UpgradeFromV1ToV2WithData) {
-  const base::string16 kCannedKey = ASCIIToUTF16("foo");
-  const base::NullableString16 kCannedValue(ASCIIToUTF16("bar"), false);
-  DOMStorageValuesMap expected;
-  expected[kCannedKey] = kCannedValue;
-
-  DOMStorageDatabase db;
-  db.db_.reset(new sql::Connection());
-  ASSERT_TRUE(db.db_->OpenInMemory());
-  CreateV1Table(db.db_.get());
-  InsertDataV1(db.db_.get(), kCannedKey, kCannedValue.string());
-
-  ASSERT_TRUE(db.UpgradeVersion1To2());
-
-  EXPECT_EQ(DOMStorageDatabase::V2, db.DetectSchemaVersion());
-
-  CheckValuesMatch(&db, expected);
-}
-
 TEST(DOMStorageDatabaseTest, TestSimpleRemoveOneValue) {
   DOMStorageDatabase db;
 
diff --git a/content/browser/dom_storage/dom_storage_namespace.cc b/content/browser/dom_storage/dom_storage_namespace.cc
index e83a735..d78f30f 100644
--- a/content/browser/dom_storage/dom_storage_namespace.cc
+++ b/content/browser/dom_storage/dom_storage_namespace.cc
@@ -64,11 +64,11 @@
   return nullptr;
 }
 
-DOMStorageNamespace* DOMStorageNamespace::Clone(
+scoped_refptr<DOMStorageNamespace> DOMStorageNamespace::Clone(
     const std::string& clone_namespace_id) {
   DCHECK(!namespace_id_.empty());
   DCHECK(!clone_namespace_id.empty());
-  DOMStorageNamespace* clone = new DOMStorageNamespace(
+  auto clone = base::MakeRefCounted<DOMStorageNamespace>(
       clone_namespace_id, session_storage_database_.get(), task_runner_.get());
   AreaMap::const_iterator it = areas_.begin();
   // Clone the in-memory structures.
diff --git a/content/browser/dom_storage/dom_storage_namespace.h b/content/browser/dom_storage/dom_storage_namespace.h
index 60c1a83..fc2a5c68 100644
--- a/content/browser/dom_storage/dom_storage_namespace.h
+++ b/content/browser/dom_storage/dom_storage_namespace.h
@@ -63,7 +63,8 @@
   // Creates a clone of |this| namespace including
   // shallow copies of all contained areas.
   // Should only be called for session storage namespaces.
-  DOMStorageNamespace* Clone(const std::string& clone_namespace_id);
+  scoped_refptr<DOMStorageNamespace> Clone(
+      const std::string& clone_namespace_id);
 
   void DeleteSessionStorageOrigin(const url::Origin& origin);
   void PurgeMemory(bool aggressively);
diff --git a/content/browser/download/download_manager_impl.cc b/content/browser/download/download_manager_impl.cc
index 9724de8..a04987f 100644
--- a/content/browser/download/download_manager_impl.cc
+++ b/content/browser/download/download_manager_impl.cc
@@ -44,6 +44,7 @@
 #include "content/browser/download/download_url_loader_factory_getter_impl.h"
 #include "content/browser/download/download_utils.h"
 #include "content/browser/download/file_download_url_loader_factory_getter.h"
+#include "content/browser/download/file_system_download_url_loader_factory_getter.h"
 #include "content/browser/download/network_download_url_loader_factory_getter.h"
 #include "content/browser/download/url_downloader.h"
 #include "content/browser/download/url_downloader_factory.h"
@@ -1140,6 +1141,24 @@
     url_loader_factory_getter =
         base::MakeRefCounted<WebUIDownloadURLLoaderFactoryGetter>(
             rfh, params->url());
+  } else if (rfh && params->url().SchemeIsFileSystem()) {
+    StoragePartitionImpl* storage_partition =
+        static_cast<StoragePartitionImpl*>(
+            BrowserContext::GetStoragePartitionForSite(browser_context_,
+                                                       site_url));
+    std::string storage_domain;
+    auto* site_instance = rfh->GetSiteInstance();
+    if (site_instance) {
+      std::string partition_name;
+      bool in_memory;
+      GetContentClient()->browser()->GetStoragePartitionConfigForSite(
+          browser_context_, site_url, true, &storage_domain, &partition_name,
+          &in_memory);
+    }
+    url_loader_factory_getter =
+        base::MakeRefCounted<FileSystemDownloadURLLoaderFactoryGetter>(
+            params->url(), rfh, /*is_navigation=*/false,
+            storage_partition->GetFileSystemContext(), storage_domain);
   } else {
     StoragePartitionImpl* storage_partition =
         static_cast<StoragePartitionImpl*>(
@@ -1210,7 +1229,7 @@
                        std::move(blob_data_handle),
                        browser_context_->GetResourceContext(), is_new_download,
                        weak_factory_.GetWeakPtr()));
-   }
+  }
 }
 
 }  // namespace content
diff --git a/content/browser/download/file_system_download_url_loader_factory_getter.cc b/content/browser/download/file_system_download_url_loader_factory_getter.cc
new file mode 100644
index 0000000..ca21d0cf
--- /dev/null
+++ b/content/browser/download/file_system_download_url_loader_factory_getter.cc
@@ -0,0 +1,52 @@
+// 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.
+
+#include "content/browser/download/file_system_download_url_loader_factory_getter.h"
+
+#include "base/task_scheduler/post_task.h"
+#include "base/task_scheduler/task_traits.h"
+#include "components/download/public/common/download_task_runner.h"
+#include "content/browser/fileapi/file_system_url_loader_factory.h"
+#include "content/browser/url_loader_factory_getter.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h"
+#include "services/network/public/mojom/url_loader_factory.mojom.h"
+
+namespace content {
+
+FileSystemDownloadURLLoaderFactoryGetter::
+    FileSystemDownloadURLLoaderFactoryGetter(
+        const GURL& url,
+        RenderFrameHost* rfh,
+        bool is_navigation,
+        scoped_refptr<storage::FileSystemContext> file_system_context,
+        const std::string& storage_domain)
+    : rfh_(rfh),
+      is_navigation_(is_navigation),
+      file_system_context_(file_system_context),
+      storage_domain_(storage_domain) {
+  DCHECK(url.SchemeIs(url::kFileSystemScheme));
+  DCHECK(rfh);
+}
+
+FileSystemDownloadURLLoaderFactoryGetter::
+    ~FileSystemDownloadURLLoaderFactoryGetter() = default;
+
+scoped_refptr<network::SharedURLLoaderFactory>
+FileSystemDownloadURLLoaderFactoryGetter::GetURLLoaderFactory() {
+  DCHECK(download::GetIOTaskRunner()->BelongsToCurrentThread());
+
+  std::unique_ptr<network::mojom::URLLoaderFactory> factory =
+      CreateFileSystemURLLoaderFactory(rfh_, is_navigation_,
+                                       file_system_context_, storage_domain_);
+
+  network::mojom::URLLoaderFactoryPtrInfo url_loader_factory_ptr_info;
+  mojo::MakeStrongBinding(std::move(factory),
+                          MakeRequest(&url_loader_factory_ptr_info));
+
+  return base::MakeRefCounted<network::WrapperSharedURLLoaderFactory>(
+      std::move(url_loader_factory_ptr_info));
+}
+
+}  // namespace content
diff --git a/content/browser/download/file_system_download_url_loader_factory_getter.h b/content/browser/download/file_system_download_url_loader_factory_getter.h
new file mode 100644
index 0000000..422a6e9ab
--- /dev/null
+++ b/content/browser/download/file_system_download_url_loader_factory_getter.h
@@ -0,0 +1,50 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_DOWNLOAD_FILE_SYSTEM_DOWNLOAD_URL_LOADER_FACTORY_GETTER_H_
+#define CONTENT_BROWSER_DOWNLOAD_FILE_SYSTEM_DOWNLOAD_URL_LOADER_FACTORY_GETTER_H_
+
+#include <string>
+
+#include "base/memory/scoped_refptr.h"
+#include "components/download/public/common/download_url_loader_factory_getter.h"
+#include "url/gurl.h"
+
+namespace storage {
+class FileSystemContext;
+}
+
+namespace content {
+
+class RenderFrameHost;
+
+// Class for retrieving the URLLoaderFactory for a file URL.
+class FileSystemDownloadURLLoaderFactoryGetter
+    : public download::DownloadURLLoaderFactoryGetter {
+ public:
+  FileSystemDownloadURLLoaderFactoryGetter(
+      const GURL& url,
+      RenderFrameHost* rfh,
+      bool is_navigation,
+      scoped_refptr<storage::FileSystemContext> file_system_context,
+      const std::string& storage_domain);
+
+  // download::DownloadURLLoaderFactoryGetter implementation.
+  scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
+
+ protected:
+  ~FileSystemDownloadURLLoaderFactoryGetter() override;
+
+ private:
+  RenderFrameHost* rfh_;
+  const bool is_navigation_;
+  scoped_refptr<storage::FileSystemContext> file_system_context_;
+  const std::string storage_domain_;
+
+  DISALLOW_COPY_AND_ASSIGN(FileSystemDownloadURLLoaderFactoryGetter);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_DOWNLOAD_FILE_SYSTEM_DOWNLOAD_URL_LOADER_FACTORY_GETTER_H_
diff --git a/content/browser/frame_host/frame_tree_browsertest.cc b/content/browser/frame_host/frame_tree_browsertest.cc
index 13d191c..54e286e 100644
--- a/content/browser/frame_host/frame_tree_browsertest.cc
+++ b/content/browser/frame_host/frame_tree_browsertest.cc
@@ -688,7 +688,7 @@
   ShellAddedObserver new_shell_observer;
   GURL popup_url(embedded_test_server()->GetURL("foo.com", "/title1.html"));
   EXPECT_TRUE(ExecuteScript(root->child_at(0),
-                            "window.open('" + popup_url.spec() + "');"));
+                            JsReplace("window.open($1);", popup_url)));
   Shell* new_shell = new_shell_observer.GetShell();
   WebContents* new_contents = new_shell->web_contents();
   WaitForLoadStop(new_contents);
diff --git a/content/browser/frame_host/interstitial_page_impl.cc b/content/browser/frame_host/interstitial_page_impl.cc
index f839f62..04922e2 100644
--- a/content/browser/frame_host/interstitial_page_impl.cc
+++ b/content/browser/frame_host/interstitial_page_impl.cc
@@ -750,6 +750,8 @@
 }
 
 RenderFrameHost* InterstitialPageImpl::GetMainFrame() const {
+  if (!render_view_host_)
+    return nullptr;
   return render_view_host_->GetMainFrame();
 }
 
diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
index b1ed11f..e9d435c 100644
--- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc
+++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc
@@ -325,8 +325,7 @@
   // Navigate with Javascript.
   {
     GURL navigate_url = embedded_test_server()->base_url();
-    std::string script = "document.location = '" +
-                         navigate_url.spec() + "';";
+    std::string script = JsReplace("document.location = $1", navigate_url);
     TestNavigationObserver same_tab_observer(shell()->web_contents(), 1);
     EXPECT_TRUE(ExecuteScript(shell(), script));
     same_tab_observer.Wait();
@@ -508,7 +507,7 @@
   WaitForLoadStop(web_contents);
   TestNavigationObserver same_tab_observer(web_contents, 1);
   EXPECT_TRUE(
-      ExecuteScript(shell, "window.location.replace('" + url.spec() + "');"));
+      ExecuteScript(shell, JsReplace("window.location.replace($1)", url)));
   same_tab_observer.Wait();
   if (!IsLastCommittedEntryOfPageType(web_contents, PAGE_TYPE_NORMAL))
     return false;
@@ -576,10 +575,12 @@
             shell()->web_contents()->GetMainFrame()->GetEnabledBindings());
 
   ShellAddedObserver observer;
-  std::string page_url = embedded_test_server()->GetURL(
-      "/navigation_controller/simple_page_1.html").spec();
-  EXPECT_TRUE(
-      ExecuteScript(shell(), "window.open('" + page_url + "', '_blank')"));
+  GURL page_url = embedded_test_server()->GetURL(
+      "/navigation_controller/simple_page_1.html");
+  {
+    EXPECT_TRUE(ExecuteScript(
+        shell(), JsReplace("window.open($1, '_blank');", page_url)));
+  }
   Shell* shell2 = observer.GetShell();
   EXPECT_TRUE(WaitForLoadStop(shell2->web_contents()));
 
@@ -879,7 +880,7 @@
       "foo.com", "/navigation_controller/simple_page_2.html");
   {
     LoadCommittedCapturer capturer(new_shell->web_contents());
-    std::string script = "location.assign('" + frame_url.spec() + "')";
+    std::string script = JsReplace("location.assign($1);", frame_url);
     EXPECT_TRUE(ExecuteScript(new_root->child_at(0), script));
     capturer.Wait();
   }
@@ -930,9 +931,11 @@
   // Make a new iframe in it using document.write from the opener.
   {
     LoadCommittedCapturer capturer(new_shell->web_contents());
-    std::string script = "w.document.write("
-                         "\"<iframe src='" + url1.spec() + "'></iframe>\");"
-                         "w.document.close();";
+    std::string html = "<iframe src='" + url1.spec() + "'></iframe>";
+    std::string script = JsReplace(
+        "w.document.write($1);"
+        "w.document.close();",
+        html);
     EXPECT_TRUE(ExecuteScript(root->current_frame_host(), script));
     capturer.Wait();
   }
@@ -1118,7 +1121,7 @@
     FrameNavigateParamsCapturer capturer(root);
     GURL frame_url(embedded_test_server()->GetURL(
         "/navigation_controller/simple_page_2.html"));
-    std::string script = "location.assign('" + frame_url.spec() + "')";
+    std::string script = JsReplace("location.assign($1);", frame_url);
     EXPECT_TRUE(ExecuteScript(root, script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1148,7 +1151,7 @@
   FrameNavigateParamsCapturer capturer(root);
   GURL frame_url(embedded_test_server()->GetURL(
       "foo.com", "/navigation_controller/simple_page_1.html"));
-  std::string script = "location.replace('" + frame_url.spec() + "')";
+  std::string script = JsReplace("location.replace($1);", frame_url);
   EXPECT_TRUE(ExecuteScript(root, script));
   capturer.Wait();
   EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1288,7 +1291,7 @@
     FrameNavigateParamsCapturer capturer(root);
     GURL frame_url(embedded_test_server()->GetURL(
         "/navigation_controller/simple_page_1.html"));
-    std::string script = "location.replace('" + frame_url.spec() + "')";
+    std::string script = JsReplace("location.replace($1);", frame_url);
     EXPECT_TRUE(ExecuteScript(root, script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1611,7 +1614,7 @@
     FrameNavigateParamsCapturer capturer(root->child_at(0));
     GURL frame_url(embedded_test_server()->GetURL(
         "/navigation_controller/simple_page_1.html"));
-    std::string script = "location.assign('" + frame_url.spec() + "')";
+    std::string script = JsReplace("location.assign($1);", frame_url);
     EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1624,7 +1627,7 @@
     LoadCommittedCapturer capturer(root->child_at(0));
     GURL frame_url(embedded_test_server()->GetURL(
         "/navigation_controller/simple_page_2.html"));
-    std::string script = "location.replace('" + frame_url.spec() + "')";
+    std::string script = JsReplace("location.replace($1);", frame_url);
     EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1875,10 +1878,13 @@
   // 3. A real same-site navigation in the nested iframe should be AUTO.
   GURL frame_url(embedded_test_server()->GetURL(
       "/navigation_controller/simple_page_1.html"));
+
   {
     LoadCommittedCapturer capturer(root->child_at(0)->child_at(0));
-    std::string script = "var frames = document.getElementsByTagName('iframe');"
-                         "frames[0].src = '" + frame_url.spec() + "';";
+    std::string script = JsReplace(
+        "var frames = document.getElementsByTagName('iframe');"
+        "frames[0].src = $1;",
+        frame_url);
     EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1903,8 +1909,10 @@
       "foo.com", "/navigation_controller/simple_page_2.html"));
   {
     LoadCommittedCapturer capturer(root->child_at(1));
-    std::string script = "var frames = document.getElementsByTagName('iframe');"
-                         "frames[1].src = '" + foo_url.spec() + "';";
+    std::string script = JsReplace(
+        "var frames = document.getElementsByTagName('iframe');"
+        "frames[1].src = $1;",
+        foo_url);
     EXPECT_TRUE(ExecuteScript(root, script));
     capturer.Wait();
     EXPECT_TRUE(ui::PageTransitionTypeIncludingQualifiersIs(
@@ -1980,12 +1988,12 @@
   GURL slow_url(embedded_test_server()->GetURL(
       "/navigation_controller/simple_page_2.html"));
   TestNavigationManager subframe_delayer(shell()->web_contents(), slow_url);
-  {
-    std::string script = "var iframe = document.createElement('iframe');"
-                         "iframe.src = '" + slow_url.spec() + "';"
-                         "document.body.appendChild(iframe);";
-    EXPECT_TRUE(ExecuteScript(root, script));
-  }
+  std::string script_template =
+      "var iframe = document.createElement('iframe');"
+      "iframe.src = $1;"
+      "document.body.appendChild(iframe);";
+
+  EXPECT_TRUE(ExecuteScript(root, JsReplace(script_template, slow_url)));
   EXPECT_TRUE(subframe_delayer.WaitForRequestStart());
 
   // Stop the request so that we can wait for load stop below, without ending up
@@ -1995,13 +2003,9 @@
   // 2. A nested iframe with a cross-site URL should be able to commit.
   GURL foo_url(embedded_test_server()->GetURL(
       "foo.com", "/navigation_controller/simple_page_1.html"));
-  {
-    std::string script = "var iframe = document.createElement('iframe');"
-                         "iframe.src = '" + foo_url.spec() + "';"
-                         "document.body.appendChild(iframe);";
-    EXPECT_TRUE(ExecuteScript(root->child_at(0), script));
-    WaitForLoadStopWithoutSuccessCheck(shell()->web_contents());
-  }
+  EXPECT_TRUE(
+      ExecuteScript(root->child_at(0), JsReplace(script_template, foo_url)));
+  WaitForLoadStopWithoutSuccessCheck(shell()->web_contents());
 
   // TODO(creis): Check subframe entries once we create them in this case.
   // See https://crbug.com/608402.
@@ -5915,11 +5919,12 @@
   EXPECT_EQ(blank_url, frame->current_url());
 
   // Do a document.write in the subframe to create a link to click.
-  std::string document_write_script =
+  std::string html = "<a id='fraglink' href='#frag'>fragment link</a>";
+  std::string document_write_script = JsReplace(
       "var iframe = document.getElementById('frame');"
-      "iframe.contentWindow.document.write("
-      "    \"<a id='fraglink' href='#frag'>fragment link</a>\");"
-      "iframe.contentWindow.document.close();";
+      "iframe.contentWindow.document.write($1);"
+      "iframe.contentWindow.document.close();",
+      html);
   EXPECT_TRUE(ExecuteScript(root->current_frame_host(), document_write_script));
 
   // Click the link to do a same document navigation.  Due to the
diff --git a/content/browser/frame_host/render_frame_host_manager_browsertest.cc b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
index 154813bb..6224225 100644
--- a/content/browser/frame_host/render_frame_host_manager_browsertest.cc
+++ b/content/browser/frame_host/render_frame_host_manager_browsertest.cc
@@ -2370,7 +2370,7 @@
   GURL url1(std::string(kChromeUIScheme) + "://" +
             std::string(kChromeUIGpuHost));
   GURL url2(std::string(kChromeUIScheme) + "://" +
-            std::string(kChromeUIAccessibilityHost));
+            std::string(kChromeUIHistogramHost));
 
   // Visit a WebUI page with bindings.
   NavigateToURL(shell(), url1);
diff --git a/content/browser/network_service_browsertest.cc b/content/browser/network_service_browsertest.cc
index e8e70eb..25c031a1 100644
--- a/content/browser/network_service_browsertest.cc
+++ b/content/browser/network_service_browsertest.cc
@@ -126,20 +126,19 @@
   bool FetchResource(const GURL& url) {
     if (!url.is_valid())
       return false;
-    std::string script(
+    std::string script = JsReplace(
         "var xhr = new XMLHttpRequest();"
-        "xhr.open('GET', '");
-    script += url.spec() +
-              "', true);"
-              "xhr.onload = function (e) {"
-              "  if (xhr.readyState === 4) {"
-              "    window.domAutomationController.send(xhr.status === 200);"
-              "  }"
-              "};"
-              "xhr.onerror = function () {"
-              "  window.domAutomationController.send(false);"
-              "};"
-              "xhr.send(null)";
+        "xhr.open('GET', $1, true);"
+        "xhr.onload = function (e) {"
+        "  if (xhr.readyState === 4) {"
+        "    window.domAutomationController.send(xhr.status === 200);"
+        "  }"
+        "};"
+        "xhr.onerror = function () {"
+        "  window.domAutomationController.send(false);"
+        "};"
+        "xhr.send(null);",
+        url);
     return ExecuteScript(script);
   }
 
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.h b/content/browser/renderer_host/browser_compositor_view_mac.h
index 8c2adbe1..46be85e 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.h
+++ b/content/browser/renderer_host/browser_compositor_view_mac.h
@@ -52,7 +52,6 @@
       ui::AcceleratedWidgetMacNSView* accelerated_widget_mac_ns_view,
       BrowserCompositorMacClient* client,
       bool render_widget_host_is_hidden,
-      bool ns_view_attached_to_window,
       const display::Display& initial_display,
       const viz::FrameSinkId& frame_sink_id);
   ~BrowserCompositorMac() override;
@@ -106,6 +105,9 @@
   // hidden (e.g, because it is occluded by another window).
   void SetNSViewAttachedToWindow(bool attached);
 
+  // Specify if the ui::Layer should be visible or not.
+  void SetViewVisible(bool visible);
+
   // Sets or clears the parent ui::Layer and updates state to reflect that
   // we are now using the ui::Compositor from |parent_ui_layer| (if non-nullptr)
   // or one from |recyclable_compositor_| (if a compositor is needed).
diff --git a/content/browser/renderer_host/browser_compositor_view_mac.mm b/content/browser/renderer_host/browser_compositor_view_mac.mm
index 1b20500..9bb2156 100644
--- a/content/browser/renderer_host/browser_compositor_view_mac.mm
+++ b/content/browser/renderer_host/browser_compositor_view_mac.mm
@@ -47,7 +47,6 @@
     ui::AcceleratedWidgetMacNSView* accelerated_widget_mac_ns_view,
     BrowserCompositorMacClient* client,
     bool render_widget_host_is_hidden,
-    bool ns_view_attached_to_window,
     const display::Display& initial_display,
     const viz::FrameSinkId& frame_sink_id)
     : client_(client),
@@ -66,7 +65,7 @@
       true /* should_register_frame_sink_id */));
 
   SetRenderWidgetHostIsHidden(render_widget_host_is_hidden);
-  SetNSViewAttachedToWindow(ns_view_attached_to_window);
+  SetNSViewAttachedToWindow(false);
 }
 
 BrowserCompositorMac::~BrowserCompositorMac() {
@@ -215,6 +214,10 @@
   UpdateState();
 }
 
+void BrowserCompositorMac::SetViewVisible(bool visible) {
+  root_layer_->SetVisible(visible);
+}
+
 void BrowserCompositorMac::UpdateState() {
   // Always use the parent ui::Layer's ui::Compositor if available.
   if (parent_ui_layer_) {
diff --git a/content/browser/renderer_host/input/fling_controller.cc b/content/browser/renderer_host/input/fling_controller.cc
index ef40b4f..2729115 100644
--- a/content/browser/renderer_host/input/fling_controller.cc
+++ b/content/browser/renderer_host/input/fling_controller.cc
@@ -16,12 +16,23 @@
 using blink::WebGestureEvent;
 
 namespace {
+constexpr base::TimeDelta kFrameDelta =
+    base::TimeDelta::FromSecondsD(1.0 / 60.0);
+
 // Maximum time between a fling event's timestamp and the first |Progress| call
 // for the fling curve to use the fling timestamp as the initial animation time.
 // Two frames allows a minor delay between event creation and the first
 // progress.
 constexpr base::TimeDelta kMaxMicrosecondsFromFlingTimestampToFirstProgress =
-    base::TimeDelta::FromMicroseconds(33333);
+    base::TimeDelta::FromSecondsD(2.0 / 60.0);
+
+// Since the progress fling is called in ProcessGestureFlingStart right after
+// processing the GFS, it is possible to have a very small delta for the first
+// event. Don't send an event with deltas smaller than the
+// |kMinInertialScrollDelta| since the renderer ignores it and the fling gets
+// cancelled in FlingController::OnGestureEventAck due to an inertial GSU with
+// ack ignored.
+const float kMinInertialScrollDelta = 0.1f;
 
 const char* kFlingTraceName = "FlingController::HandlingGestureFling";
 }  // namespace
@@ -177,7 +188,7 @@
       current_fling_parameters_.velocity,
       current_fling_parameters_.source_device,
       current_fling_parameters_.modifiers);
-  ScheduleFlingProgress();
+  ProgressFling(base::TimeTicks::Now());
 }
 
 void FlingController::ScheduleFlingProgress() {
@@ -206,16 +217,34 @@
   }
 
   if (!has_fling_animation_started_) {
-    // Guard against invalid, future or sufficiently stale start times, as there
-    // are no guarantees fling event and progress timestamps are compatible.
-    if (current_fling_parameters_.start_time.is_null() ||
-        current_time <= current_fling_parameters_.start_time ||
-        current_time >= current_fling_parameters_.start_time +
-                            kMaxMicrosecondsFromFlingTimestampToFirstProgress) {
+    // Guard against invalid as there are no guarantees fling event and progress
+    // timestamps are compatible.
+    if (current_fling_parameters_.start_time.is_null()) {
       current_fling_parameters_.start_time = current_time;
       ScheduleFlingProgress();
       return;
     }
+
+    // If the first time that progressFling is called is more than two frames
+    // later than the fling start time, delay the fling start time to one frame
+    // prior to the current time. This makes sure that at least one progress
+    // event is sent while the fling is active even when the fling duration is
+    // short (samll velocity) and the time delta between its timestamp and its
+    // processing time is big (e.g. When a GFS gets bubbled from an oopif).
+    if (current_time >= current_fling_parameters_.start_time +
+                            kMaxMicrosecondsFromFlingTimestampToFirstProgress) {
+      current_fling_parameters_.start_time = current_time - kFrameDelta;
+    }
+  }
+
+  // ProgressFling is called inside FlingScheduler::OnAnimationStep. Sometimes
+  // the first OnAnimationStep call has the time of the last frame before
+  // AddAnimationObserver call rather than time of the first frame after
+  // AddAnimationObserver call. Do not advance the fling when current_time is
+  // less than the GFS event timestamp.
+  if (current_time <= current_fling_parameters_.start_time) {
+    ScheduleFlingProgress();
+    return;
   }
 
   gfx::Vector2dF delta_to_scroll;
@@ -223,7 +252,8 @@
       (current_time - current_fling_parameters_.start_time).InSecondsF(),
       current_fling_parameters_.velocity, delta_to_scroll);
   if (fling_is_active) {
-    if (delta_to_scroll != gfx::Vector2d()) {
+    if (std::abs(delta_to_scroll.x()) > kMinInertialScrollDelta ||
+        std::abs(delta_to_scroll.y()) > kMinInertialScrollDelta) {
       GenerateAndSendFlingProgressEvents(delta_to_scroll);
       has_fling_animation_started_ = true;
     }
diff --git a/content/browser/renderer_host/input/fling_controller_unittest.cc b/content/browser/renderer_host/input/fling_controller_unittest.cc
index 9f658ac..6d423d9 100644
--- a/content/browser/renderer_host/input/fling_controller_unittest.cc
+++ b/content/browser/renderer_host/input/fling_controller_unittest.cc
@@ -62,9 +62,14 @@
   void SendGeneratedWheelEvent(
       const MouseWheelEventWithLatencyInfo& wheel_event) override {
     last_sent_wheel_ = wheel_event.event;
+    first_wheel_event_sent_ = true;
+
+    if (wheel_event.event.momentum_phase == WebMouseWheelEvent::kPhaseEnded)
+      first_wheel_event_sent_ = false;
   }
   void SendGeneratedGestureScrollEvents(
       const GestureEventWithLatencyInfo& gesture_event) override {
+    sent_scroll_gesture_count_++;
     last_sent_gesture_ = gesture_event.event;
   }
 
@@ -82,6 +87,7 @@
   void SimulateFlingStart(blink::WebGestureDevice source_device,
                           const gfx::Vector2dF& velocity) {
     scheduled_next_fling_progress_ = false;
+    sent_scroll_gesture_count_ = 0;
     WebGestureEvent fling_start(WebInputEvent::kGestureFlingStart, 0,
                                 base::TimeTicks::Now(), source_device);
     fling_start.data.fling_start.velocity_x = velocity.x();
@@ -121,6 +127,8 @@
   bool last_fling_cancel_filtered_;
   bool scheduled_next_fling_progress_;
   bool notified_client_after_fling_stop_;
+  bool first_wheel_event_sent_ = false;
+  int sent_scroll_gesture_count_ = 0;
 
  private:
   base::test::ScopedTaskEnvironment scoped_task_environment_;
@@ -150,10 +158,20 @@
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchpad, gfx::Vector2dF(1000, 0));
   EXPECT_TRUE(FlingInProgress());
-  // The first wheel event must have momentum_phase == KPhaseBegan.
+  // Processing GFS will send the first fling prgoress event if the time delta
+  // between the timestamp of the GFS and the time that ProcessGestureFlingStart
+  // is called is large enough.
+  bool process_GFS_sent_first_event = first_wheel_event_sent_;
+
   progress_time += base::TimeDelta::FromMilliseconds(17);
   ProgressFling(progress_time);
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+
+  if (!process_GFS_sent_first_event) {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  } else {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged,
+              last_sent_wheel_.momentum_phase);
+  }
   EXPECT_GT(last_sent_wheel_.delta_x, 0.f);
 
   // The rest of the wheel events must have momentum_phase == KPhaseChanged.
@@ -206,9 +224,19 @@
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchpad, gfx::Vector2dF(100, 0));
   EXPECT_TRUE(FlingInProgress());
+  // Processing GFS will send the first fling prgoress event if the time delta
+  // between the timestamp of the GFS and the time that ProcessGestureFlingStart
+  // is called is large enough.
+  bool process_GFS_sent_first_event = first_wheel_event_sent_;
+
   progress_time += base::TimeDelta::FromMilliseconds(17);
   ProgressFling(progress_time);
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  if (!process_GFS_sent_first_event) {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  } else {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged,
+              last_sent_wheel_.momentum_phase);
+  }
   EXPECT_GT(last_sent_wheel_.delta_x, 0.f);
 
   progress_time += base::TimeDelta::FromMilliseconds(17);
@@ -252,9 +280,19 @@
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchpad, gfx::Vector2dF(1000, 0));
   EXPECT_TRUE(FlingInProgress());
+  // Processing GFS will send the first fling prgoress event if the time delta
+  // between the timestamp of the GFS and the time that ProcessGestureFlingStart
+  // is called is large enough.
+  bool process_GFS_sent_first_event = first_wheel_event_sent_;
+
   progress_time += base::TimeDelta::FromMilliseconds(17);
   ProgressFling(progress_time);
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  if (!process_GFS_sent_first_event) {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  } else {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged,
+              last_sent_wheel_.momentum_phase);
+  }
   EXPECT_GT(last_sent_wheel_.delta_x, 0.f);
 
   // A non-consumed GSU ack in inertial state cancels out the rest of the fling.
@@ -302,9 +340,19 @@
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchpad, gfx::Vector2dF(1000, 0));
   EXPECT_TRUE(FlingInProgress());
+  // Processing GFS will send the first fling prgoress event if the time delta
+  // between the timestamp of the GFS and the time that ProcessGestureFlingStart
+  // is called is large enough.
+  bool process_GFS_sent_first_event = first_wheel_event_sent_;
+
   progress_time += base::TimeDelta::FromMilliseconds(17);
   ProgressFling(progress_time);
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  if (!process_GFS_sent_first_event) {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  } else {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged,
+              last_sent_wheel_.momentum_phase);
+  }
   EXPECT_GT(last_sent_wheel_.delta_x, 0.f);
 
   fling_controller_->StopFling();
@@ -382,14 +430,14 @@
   SimulateFlingStart(blink::kWebGestureDeviceTouchscreen,
                      gfx::Vector2dF(1000, 0));
   EXPECT_TRUE(FlingInProgress());
+  int current_sent_scroll_gesture_count = sent_scroll_gesture_count_;
 
   // If we get a negative time delta, that is, the Progress tick time happens
   // before the fling's start time then we should *not* try progressing the
-  // fling and instead reset the fling start time.
+  // fling.
   progress_time -= base::TimeDelta::FromMilliseconds(5);
   ProgressFling(progress_time);
-  EXPECT_EQ(blink::kWebGestureDeviceUninitialized,
-            last_sent_gesture_.SourceDevice());
+  EXPECT_EQ(current_sent_scroll_gesture_count, sent_scroll_gesture_count_);
 
   // The rest of the progress flings must advance the fling normally.
   progress_time += base::TimeDelta::FromMilliseconds(17);
@@ -406,10 +454,19 @@
   base::TimeTicks progress_time = base::TimeTicks::Now();
   SimulateFlingStart(blink::kWebGestureDeviceTouchpad, gfx::Vector2dF(1000, 0));
   EXPECT_TRUE(FlingInProgress());
-  // The first wheel event must have momentum_phase == KPhaseBegan.
+  // Processing GFS will send the first fling prgoress event if the time delta
+  // between the timestamp of the GFS and the time that ProcessGestureFlingStart
+  // is called is large enough.
+  bool process_GFS_sent_first_event = first_wheel_event_sent_;
+
   progress_time += base::TimeDelta::FromMilliseconds(17);
   ProgressFling(progress_time);
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  if (!process_GFS_sent_first_event) {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, last_sent_wheel_.momentum_phase);
+  } else {
+    EXPECT_EQ(WebMouseWheelEvent::kPhaseChanged,
+              last_sent_wheel_.momentum_phase);
+  }
   EXPECT_GT(last_sent_wheel_.delta_x, 0.f);
 
   // The rest of the wheel events must have momentum_phase == KPhaseChanged.
diff --git a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
index a977b19..aee20ab 100644
--- a/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/gesture_event_queue_unittest.cc
@@ -213,6 +213,9 @@
   }
 
   bool FlingInProgress() { return queue()->fling_in_progress_; }
+  bool FlingCancellationIsDeferred() {
+    return queue()->FlingCancellationIsDeferred();
+  }
 
   bool WillIgnoreNextACK() {
     return queue()->ignore_next_ack_;
@@ -1100,7 +1103,9 @@
 // suppressed when tap suppression is enabled.
 TEST_F(GestureEventQueueTest, TapGetsSuppressedAfterTapDownCancellsFling) {
   SetUpForTapSuppression(400);
-  SimulateGestureFlingStartEvent(0, -10, blink::kWebGestureDeviceTouchscreen);
+  // The velocity of the event must be large enough to make sure that the fling
+  // is still active when the tap down happens.
+  SimulateGestureFlingStartEvent(0, -1000, blink::kWebGestureDeviceTouchscreen);
   EXPECT_TRUE(FlingInProgress());
   // The fling start event is not sent to the renderer.
   EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
@@ -1111,7 +1116,7 @@
   // fling cancel event is not sent to the renderer.
   SimulateGestureEvent(WebInputEvent::kGestureFlingCancel,
                        blink::kWebGestureDeviceTouchscreen);
-  EXPECT_FALSE(FlingInProgress());
+  EXPECT_TRUE(FlingCancellationIsDeferred());
   EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
   EXPECT_EQ(0U, GestureEventQueueSize());
   RunUntilIdle();
diff --git a/content/browser/renderer_host/input/input_router_impl_unittest.cc b/content/browser/renderer_host/input/input_router_impl_unittest.cc
index 5ff4766f..faa3314 100644
--- a/content/browser/renderer_host/input/input_router_impl_unittest.cc
+++ b/content/browser/renderer_host/input/input_router_impl_unittest.cc
@@ -292,8 +292,13 @@
                !gesture.data.fling_start.velocity_x &&
                !gesture.data.fling_start.velocity_y) {
       // Ensure non-zero touchscreen fling velocities, as the router will
-      // validate against such.
-      gesture.data.fling_start.velocity_x = 5.f;
+      // validate against such. The velocity should be large enough to make
+      // sure that the fling is still active while sending the GFC.
+      gesture.data.fling_start.velocity_x = 500.f;
+    } else if (gesture.GetType() == WebInputEvent::kGestureFlingCancel) {
+      // Set prevent boosting to make sure that the GFC cancels the active
+      // fling.
+      gesture.data.fling_cancel.prevent_boosting = true;
     }
 
     input_router_->SendGestureEvent(GestureEventWithLatencyInfo(gesture));
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
index 7029157..db69b0d9 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue.cc
@@ -6,6 +6,7 @@
 
 #include "base/metrics/histogram_macros.h"
 #include "base/trace_event/trace_event.h"
+#include "build/build_config.h"
 #include "content/common/input/input_event_dispatch_type.h"
 #include "content/public/common/content_features.h"
 #include "ui/events/base_event_utils.h"
@@ -126,6 +127,7 @@
         event_sent_for_gesture_ack_->event.PositionInScreen());
     scroll_update.resending_plugin_id = -1;
 
+#if !defined(OS_MACOSX)
     // Swap X & Y if Shift is down and when there is no horizontal movement.
     if ((event_sent_for_gesture_ack_->event.GetModifiers() &
          WebInputEvent::kShiftKey) != 0 &&
@@ -134,7 +136,9 @@
           event_sent_for_gesture_ack_->event.delta_y;
       scroll_update.data.scroll_update.delta_y =
           event_sent_for_gesture_ack_->event.delta_x;
-    } else {
+    } else
+#endif  // OS_MACOSX
+    {
       scroll_update.data.scroll_update.delta_x =
           event_sent_for_gesture_ack_->event.delta_x;
       scroll_update.data.scroll_update.delta_y =
diff --git a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
index b8f0067..51ca2ed 100644
--- a/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_event_queue_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "build/build_config.h"
 #include "content/browser/renderer_host/input/timeout_monitor.h"
 #include "content/common/input/synthetic_web_input_event_builders.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -621,4 +622,29 @@
     histogram_tester.ExpectBucketCount(latching_histogram_name, 1, 1);
 }
 
+#if defined(OS_MACOSX)
+TEST_F(MouseWheelEventQueueTest, DoNotSwapXYForShiftScroll) {
+  // Send an event with shift modifier, zero value for delta X, and no direction
+  // for |rails_mode|. Do not swap the scroll direction.
+  SendMouseWheel(kWheelScrollX, kWheelScrollY, kWheelScrollGlobalX,
+                 kWheelScrollGlobalY, 0.0, 1.0, WebInputEvent::kShiftKey, false,
+                 WebMouseWheelEvent::kPhaseBegan,
+                 WebMouseWheelEvent::kPhaseNone, WebInputEvent::kRailsModeFree);
+  EXPECT_EQ(0U, queued_event_count());
+  EXPECT_TRUE(event_in_flight());
+  EXPECT_EQ(1U, GetAndResetSentEventCount());
+
+  // Receive an ACK for the mouse wheel event.
+  SendMouseWheelEventAck(INPUT_EVENT_ACK_STATE_NOT_CONSUMED);
+  EXPECT_EQ(0U, queued_event_count());
+  EXPECT_FALSE(event_in_flight());
+  EXPECT_EQ(WebInputEvent::kMouseWheel, acked_event().GetType());
+  EXPECT_EQ(1U, GetAndResetAckedEventCount());
+
+  EXPECT_EQ(2U, all_sent_events().size());
+  EXPECT_EQ(0U, sent_gesture_event(1)->data.scroll_update.delta_x);
+  EXPECT_EQ(1U, sent_gesture_event(1)->data.scroll_update.delta_y);
+  EXPECT_EQ(2U, GetAndResetSentEventCount());
+}
+#endif
 }  // namespace content
diff --git a/content/browser/renderer_host/input/mouse_wheel_rails_filter_mac.cc b/content/browser/renderer_host/input/mouse_wheel_rails_filter_mac.cc
index 78d9411..db224ee 100644
--- a/content/browser/renderer_host/input/mouse_wheel_rails_filter_mac.cc
+++ b/content/browser/renderer_host/input/mouse_wheel_rails_filter_mac.cc
@@ -17,6 +17,15 @@
 
 WebInputEvent::RailsMode MouseWheelRailsFilterMac::UpdateRailsMode(
     const WebMouseWheelEvent& event) {
+  if (event.phase == WebMouseWheelEvent::kPhaseNone &&
+      event.momentum_phase == WebMouseWheelEvent::kPhaseNone) {
+    // We should only set the rails mode for trackpad wheel events. The AppKit
+    // documentation state that legacy mouse events (legacy mouse) do not have
+    // |phase| and |momentum_phase|.
+    // https://developer.apple.com/documentation/appkit/nsevent/1533550-phase.
+    return WebInputEvent::kRailsModeFree;
+  }
+
   // A somewhat-arbitrary decay constant for hysteresis.
   const float kDecayConstant = 0.8f;
 
diff --git a/content/browser/renderer_host/legacy_render_widget_host_win.cc b/content/browser/renderer_host/legacy_render_widget_host_win.cc
index 30b95a5d..c99c1bc 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -182,7 +182,7 @@
   DCHECK(SUCCEEDED(hr));
 
   ui::AXMode mode =
-      BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode();
+      BrowserAccessibilityStateImpl::GetInstance()->GetAccessibilityMode();
   if (!mode.has_mode(ui::AXMode::kNativeAPIs)) {
     // Attempt to detect screen readers or other clients who want full
     // accessibility support, by seeing if they respond to this event.
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 3887d68c..60ece39 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -149,6 +149,7 @@
 #include "content/common/view_messages.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/content_browser_client.h"
+#include "content/public/browser/network_service_instance.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_types.h"
 #include "content/public/browser/render_process_host_factory.h"
@@ -1152,6 +1153,12 @@
     dest->AppendSwitchASCII(switch_name, base::JoinString(features, ","));
 }
 
+void GetNetworkChangeManager(
+    network::mojom::NetworkChangeManagerRequest request) {
+  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+  GetNetworkService()->GetNetworkChangeManager(std::move(request));
+}
+
 }  // namespace
 
 // Held by the RPH and used to control an (unowned) ConnectionFilterImpl from
@@ -2058,6 +2065,9 @@
   registry->AddInterface(base::BindRepeating(&KeySystemSupportImpl::Create));
 #endif  // BUILDFLAG(ENABLE_LIBRARY_CDMS)
 
+  AddUIThreadInterface(registry.get(),
+                       base::BindRepeating(&GetNetworkChangeManager));
+
   // ---- Please do not register interfaces below this line ------
   //
   // This call should be done after registering all interfaces above, so that
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index fb5f5b734..16dcf99 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -2230,15 +2230,22 @@
   EXPECT_EQ(15U, gesture_event->data.scroll_update.delta_y);
 
   // A GFS is received showing that the user has lifted their fingers. This will
-  // reset the scroll state of the wheel phase handler.
+  // reset the scroll state of the wheel phase handler. The velocity should be
+  // big enough to make sure that fling is still active while sending the scroll
+  // event.
   ui::ScrollEvent fling_start(ui::ET_SCROLL_FLING_START, gfx::Point(2, 2),
-                              ui::EventTimeForNow(), 0, 0, 10, 0, 10, 2);
+                              ui::EventTimeForNow(), 0, 0, 1000, 0, 1000, 2);
   view_->OnScrollEvent(&fling_start);
   base::RunLoop().RunUntilIdle();
 
   events = GetAndResetDispatchedMessages();
-  // A GFS with touchpad source won't get dispatched to the renderer.
-  EXPECT_EQ(0U, events.size());
+  // A GFS with touchpad source won't get dispatched to the renderer. However,
+  // since progressFling is called right away after processing the GFS, it is
+  // possible that a progress event is sent if the time delta between GFS
+  // timestamp and the time that it gets processed is large enough.
+  bool progress_event_sent = events.size();
+  if (progress_event_sent)
+    EXPECT_EQ("MouseWheel GestureScrollUpdate", GetMessageNames(events));
 
   // Handling the next ui::ET_SCROLL event will generate a GFC which resets the
   // phase state. The fling controller processes GFC and generates a wheel event
@@ -2248,13 +2255,12 @@
                           ui::EventTimeForNow(), 0, 0, 15, 0, 15, 2);
   view_->OnScrollEvent(&scroll2);
   base::RunLoop().RunUntilIdle();
+
+  EXPECT_TRUE(widget_host_->FlingCancellationIsDeferred());
   events = GetAndResetDispatchedMessages();
-  EXPECT_EQ("MouseWheel GestureScrollEnd MouseWheel", GetMessageNames(events));
+  EXPECT_EQ("MouseWheel", GetMessageNames(events));
   wheel_event = static_cast<const WebMouseWheelEvent*>(
       events[0]->ToEvent()->Event()->web_event.get());
-  EXPECT_EQ(WebMouseWheelEvent::kPhaseEnded, wheel_event->momentum_phase);
-  wheel_event = static_cast<const WebMouseWheelEvent*>(
-      events[2]->ToEvent()->Event()->web_event.get());
   EXPECT_EQ(WebMouseWheelEvent::kPhaseBegan, wheel_event->phase);
 }
 
@@ -4244,13 +4250,19 @@
 
   // Send a fling start, but with a small velocity, the fling controller handles
   // GFS with touchpad source and the event doesn't get queued in gesture event
-  // queue. The overscroll state doesn't get reset till the first ProgressFling
-  // call.
+  // queue. The overscroll state doesn't get reset till the fling progress sends
+  // the fling end event.
   SimulateGestureFlingStartEvent(0.f, 0.1f, blink::kWebGestureDeviceTouchpad);
   events = GetAndResetDispatchedMessages();
-  EXPECT_EQ(0U, events.size());
-  EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
-  EXPECT_EQ(OverscrollSource::TOUCHPAD, overscroll_source());
+  bool fling_end_event_sent_ = events.size();
+  if (fling_end_event_sent_) {
+    EXPECT_EQ("MouseWheel GestureScrollEnd", GetMessageNames(events));
+    EXPECT_EQ(OVERSCROLL_NONE, overscroll_mode());
+    EXPECT_EQ(OverscrollSource::NONE, overscroll_source());
+  } else {
+    EXPECT_EQ(OVERSCROLL_EAST, overscroll_mode());
+    EXPECT_EQ(OverscrollSource::TOUCHPAD, overscroll_source());
+  }
 
   base::TimeTicks progress_time =
       base::TimeTicks::Now() + base::TimeDelta::FromMilliseconds(17);
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 54866be4..0703dd02c 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -171,9 +171,9 @@
                                        ? AllocateFrameSinkIdForGuestViewHack()
                                        : host()->GetFrameSinkId();
 
-  browser_compositor_.reset(
-      new BrowserCompositorMac(this, this, host()->is_hidden(),
-                               [cocoa_view() window], display_, frame_sink_id));
+  browser_compositor_.reset(new BrowserCompositorMac(
+      this, this, host()->is_hidden(), display_, frame_sink_id));
+  DCHECK(![cocoa_view() window]);
 
   if (!is_guest_view_hack_)
     host()->SetView(this);
@@ -220,7 +220,7 @@
 }
 
 void RenderWidgetHostViewMac::SetParentUiLayer(ui::Layer* parent_ui_layer) {
-  if (!display_only_using_parent_ui_layer_) {
+  if (parent_ui_layer && !display_only_using_parent_ui_layer_) {
     // The first time that we display using a parent ui::Layer, permanently
     // switch from drawing using Cocoa to only drawing using ui::Views. Erase
     // the existing content being drawn by Cocoa (which may have been set due
@@ -380,6 +380,7 @@
 void RenderWidgetHostViewMac::Show() {
   is_visible_ = true;
   ns_view_bridge_->SetVisible(is_visible_);
+  browser_compositor_->SetViewVisible(is_visible_);
   browser_compositor_->SetRenderWidgetHostIsHidden(false);
 
   WasUnOccluded();
@@ -388,6 +389,7 @@
 void RenderWidgetHostViewMac::Hide() {
   is_visible_ = false;
   ns_view_bridge_->SetVisible(is_visible_);
+  browser_compositor_->SetViewVisible(is_visible_);
   host()->WasHidden();
   browser_compositor_->SetRenderWidgetHostIsHidden(true);
 }
diff --git a/content/browser/scheduler/responsiveness/calculator.h b/content/browser/scheduler/responsiveness/calculator.h
index be09565f4..289b431 100644
--- a/content/browser/scheduler/responsiveness/calculator.h
+++ b/content/browser/scheduler/responsiveness/calculator.h
@@ -25,12 +25,14 @@
   virtual ~Calculator();
 
   // Must be called from the UI thread.
-  void TaskOrEventFinishedOnUIThread(base::TimeTicks schedule_time,
-                                     base::TimeTicks finish_time);
+  // virtual for testing.
+  virtual void TaskOrEventFinishedOnUIThread(base::TimeTicks schedule_time,
+                                             base::TimeTicks finish_time);
 
   // Must be called from the IO thread.
-  void TaskOrEventFinishedOnIOThread(base::TimeTicks schedule_time,
-                                     base::TimeTicks finish_time);
+  // virtual for testing.
+  virtual void TaskOrEventFinishedOnIOThread(base::TimeTicks schedule_time,
+                                             base::TimeTicks finish_time);
 
   // Each janking task/event is fully defined by |start_time| and |end_time|.
   // Note that |duration| = |end_time| - |start_time|.
diff --git a/content/browser/scheduler/responsiveness/calculator_unittest.cc b/content/browser/scheduler/responsiveness/calculator_unittest.cc
index 351e0da..613a7b63 100644
--- a/content/browser/scheduler/responsiveness/calculator_unittest.cc
+++ b/content/browser/scheduler/responsiveness/calculator_unittest.cc
@@ -13,7 +13,6 @@
 // Copied from calculator.cc.
 constexpr int kMeasurementIntervalInMs = 30 * 1000;
 constexpr int kJankThresholdInMs = 100;
-}  // namespace
 
 class FakeCalculator : public Calculator {
  public:
@@ -29,6 +28,8 @@
   std::vector<int> janky_slices_;
 };
 
+}  // namespace
+
 class ResponsivenessCalculatorTest : public testing::Test {
  public:
   void SetUp() override {
diff --git a/content/browser/scheduler/responsiveness/watcher.cc b/content/browser/scheduler/responsiveness/watcher.cc
new file mode 100644
index 0000000..545acac
--- /dev/null
+++ b/content/browser/scheduler/responsiveness/watcher.cc
@@ -0,0 +1,171 @@
+// 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.
+
+#include "content/browser/scheduler/responsiveness/watcher.h"
+
+#include "base/pending_task.h"
+#include "content/browser/scheduler/responsiveness/calculator.h"
+#include "content/public/browser/browser_thread.h"
+
+namespace responsiveness {
+
+Watcher::Metadata::Metadata(void* identifier) : identifier(identifier) {}
+
+Watcher::Watcher() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+}
+
+void Watcher::SetUp() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  // Destroy() has the corresponding call to Release().
+  // We need this additional reference to make sure the object stays alive
+  // through hops to the IO thread, which are necessary both during construction
+  // and destruction.
+  AddRef();
+
+  calculator_ = MakeCalculator();
+
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::BindOnce(&Watcher::SetUpOnIOThread, this, calculator_.get()));
+}
+
+void Watcher::Destroy() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  DCHECK(!destroy_was_called_);
+  destroy_was_called_ = true;
+
+  content::BrowserThread::PostTask(
+      content::BrowserThread::IO, FROM_HERE,
+      base::BindOnce(&Watcher::TearDownOnIOThread, this));
+}
+
+std::unique_ptr<Calculator> Watcher::MakeCalculator() {
+  return std::make_unique<Calculator>();
+}
+
+Watcher::~Watcher() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+  DCHECK(destroy_was_called_);
+}
+
+void Watcher::SetUpOnIOThread(Calculator* calculator) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+  // TODO(erikchen): Add MessageLoopObserver to IO thread.
+
+  calculator_io_ = calculator;
+}
+
+void Watcher::TearDownOnIOThread() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+  // TODO(erikchen): Remove MessageLoopObserver from IO thread.
+
+  calculator_io_ = nullptr;
+  content::BrowserThread::PostTask(
+      content::BrowserThread::UI, FROM_HERE,
+      base::BindOnce(&Watcher::TearDownOnUIThread, this));
+}
+
+void Watcher::TearDownOnUIThread() {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  // Corresponding call to AddRef() is in the constructor.
+  Release();
+}
+
+void Watcher::WillRunTaskOnUIThread(base::PendingTask* task) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  WillRunTask(task, &currently_running_metadata_ui_);
+}
+
+void Watcher::DidRunTaskOnUIThread(base::PendingTask* task) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+
+  // It's safe to use base::Unretained since the callback will be synchronously
+  // invoked.
+  TaskOrEventFinishedCallback callback =
+      base::BindOnce(&Calculator::TaskOrEventFinishedOnUIThread,
+                     base::Unretained(calculator_.get()));
+
+  DidRunTask(task, &currently_running_metadata_ui_,
+             &mismatched_task_identifiers_ui_, std::move(callback));
+}
+
+void Watcher::WillRunTaskOnIOThread(base::PendingTask* task) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+  WillRunTask(task, &currently_running_metadata_io_);
+}
+
+void Watcher::DidRunTaskOnIOThread(base::PendingTask* task) {
+  DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
+
+  // It's safe to use base::Unretained since the callback will be synchronously
+  // invoked.
+  TaskOrEventFinishedCallback callback =
+      base::BindOnce(&Calculator::TaskOrEventFinishedOnIOThread,
+                     base::Unretained(calculator_io_));
+  DidRunTask(task, &currently_running_metadata_io_,
+             &mismatched_task_identifiers_io_, std::move(callback));
+}
+
+void Watcher::WillRunTask(base::PendingTask* task,
+                          std::stack<Metadata>* currently_running_metadata) {
+  // Reentrancy should be rare.
+  if (UNLIKELY(!currently_running_metadata->empty())) {
+    currently_running_metadata->top().caused_reentrancy = true;
+  }
+
+  currently_running_metadata->emplace(task);
+
+  // For delayed tasks, record the time right before the task is run.
+  if (!task->delayed_run_time.is_null()) {
+    currently_running_metadata->top().delayed_task_start =
+        base::TimeTicks::Now();
+  }
+}
+
+void Watcher::DidRunTask(base::PendingTask* task,
+                         std::stack<Metadata>* currently_running_metadata,
+                         int* mismatched_task_identifiers,
+                         TaskOrEventFinishedCallback callback) {
+  // Calls to DidRunTask should always be paired with WillRunTask. The only time
+  // the identifier should differ is when Watcher is first constructed. The
+  // TaskRunner Observers are added while a task is being run, which means that
+  // there was no corresponding WillRunTask.
+  if (UNLIKELY(task != currently_running_metadata->top().identifier)) {
+    *mismatched_task_identifiers += 1;
+    DCHECK_LE(*mismatched_task_identifiers, 1);
+    return;
+  }
+
+  bool caused_reentrancy = currently_running_metadata->top().caused_reentrancy;
+  base::TimeTicks delayed_task_start =
+      currently_running_metadata->top().delayed_task_start;
+  currently_running_metadata->pop();
+
+  // Ignore tasks that caused reentrancy, since their execution latency will
+  // be very large, but Chrome was still responsive.
+  if (UNLIKELY(caused_reentrancy))
+    return;
+
+  // For delayed tasks, measure the duration of the task itself, rather than the
+  // duration from schedule time to finish time.
+  base::TimeTicks schedule_time;
+  if (task->delayed_run_time.is_null()) {
+    // TODO(erikchen): Implement DelayedTask::queue_time.
+    // schedule_time = task->queue_time;
+  } else {
+    schedule_time = delayed_task_start;
+  }
+
+  std::move(callback).Run(schedule_time, base::TimeTicks::Now());
+}
+
+}  // namespace responsiveness
diff --git a/content/browser/scheduler/responsiveness/watcher.h b/content/browser/scheduler/responsiveness/watcher.h
new file mode 100644
index 0000000..46a6a96
--- /dev/null
+++ b/content/browser/scheduler/responsiveness/watcher.h
@@ -0,0 +1,137 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_SCHEDULER_RESPONSIVENESS_WATCHER_H_
+#define CONTENT_BROWSER_SCHEDULER_RESPONSIVENESS_WATCHER_H_
+
+#include <memory>
+#include <stack>
+
+#include "base/callback.h"
+#include "base/gtest_prod_util.h"
+#include "base/macros.h"
+#include "base/time/time.h"
+#include "content/common/content_export.h"
+
+namespace base {
+struct PendingTask;
+}  // namespace base
+
+namespace responsiveness {
+
+class Calculator;
+
+// This class watches events and tasks processed on the UI and IO threads of the
+// browser process. It forwards stats on execution latency to Calculator, which
+// emits UMA metrics.
+//
+// This class must only be constructed/destroyed on the UI thread. It has some
+// private members that are affine to the IO thread. It takes care of deleting
+// them appropriately.
+//
+// TODO(erikchen): Once the browser scheduler is implemented, this entire class
+// should become simpler, as either BrowserUIThreadScheduler or
+// BrowserIOThreadScheduler should implement much of the same functionality.
+class CONTENT_EXPORT Watcher : public base::RefCounted<Watcher> {
+ public:
+  Watcher();
+
+  // Must be called immediately after the constructor. This cannot be called
+  // from the constructor because subclasses [for tests] need to be able to
+  // override functions.
+  void SetUp();
+
+  // Destruction requires a thread-hop to the IO thread, so cannot be completed
+  // synchronously. Owners of this class should call this method, and then
+  // release their reference.
+  void Destroy();
+
+ protected:
+  // Exposed for tests.
+  virtual std::unique_ptr<Calculator> MakeCalculator();
+  virtual ~Watcher();
+
+ private:
+  friend class base::RefCounted<Watcher>;
+  FRIEND_TEST_ALL_PREFIXES(ResponsivenessWatcherTest, TaskForwarding);
+  FRIEND_TEST_ALL_PREFIXES(ResponsivenessWatcherTest, TaskNesting);
+
+  // Metadata for currently running tasks and events is needed to track whether
+  // or not they caused reentrancy.
+  struct Metadata {
+    explicit Metadata(void* identifier);
+
+    // An opaque identifier for the task or event.
+    void* identifier = nullptr;
+
+    // Whether the task or event has caused reentrancy.
+    bool caused_reentrancy = false;
+
+    // For delayed tasks, the time at which the event is scheduled to run
+    // is only loosely coupled to the time that the task actually runs. The
+    // difference between these is not interesting for computing responsiveness.
+    // Instead of measuring the duration between |queue_time| and |finish_time|,
+    // we measure the duration of execution itself.
+    base::TimeTicks delayed_task_start;
+  };
+
+  void SetUpOnIOThread(Calculator*);
+  void TearDownOnIOThread();
+  void TearDownOnUIThread();
+
+  // TODO(erikchen): Implement MessageLoopObserver.
+  // These methods are called by the MessageLoopObserver of the UI thread to
+  // allow Watcher to collect metadata about the tasks being run.
+  void WillRunTaskOnUIThread(base::PendingTask* task);
+  void DidRunTaskOnUIThread(base::PendingTask* task);
+
+  // TODO(erikchen): Implement MessageLoopObserver.
+  // These methods are called by the MessageLoopObserver of the IO thread to
+  // allow Watcher to collect metadata about the tasks being run.
+  void WillRunTaskOnIOThread(base::PendingTask* task);
+  void DidRunTaskOnIOThread(base::PendingTask* task);
+
+  // Common implementations for the thread-specific methods.
+  void WillRunTask(base::PendingTask* task,
+                   std::stack<Metadata>* currently_running_metadata);
+
+  // |callback| will either be synchronously invoked, or else never invoked.
+  using TaskOrEventFinishedCallback =
+      base::OnceCallback<void(base::TimeTicks, base::TimeTicks)>;
+  void DidRunTask(base::PendingTask* task,
+                  std::stack<Metadata>* currently_running_metadata,
+                  int* mismatched_task_identifiers,
+                  TaskOrEventFinishedCallback callback);
+
+  // The following members are all affine to the UI thread.
+  std::unique_ptr<Calculator> calculator_;
+
+  // Metadata for currently running tasks and events on the UI thread.
+  std::stack<Metadata> currently_running_metadata_ui_;
+
+  // Task identifiers should only be mismatched once, since the Watcher
+  // registers itself during a Task execution, and thus doesn't capture the
+  // initial WillRunTask() callback.
+  int mismatched_task_identifiers_ui_ = 0;
+
+  // The following members are all affine to the IO thread.
+  std::stack<Metadata> currently_running_metadata_io_;
+  int mismatched_task_identifiers_io_ = 0;
+
+  // The implementation of this class guarantees that |calculator_io_| will be
+  // non-nullptr and point to a valid object any time it is used on the IO
+  // thread. To ensure this, the first task that this class posts onto the IO
+  // thread sets |calculator_io_|. On destruction, this class first tears down
+  // all consumers of |calculator_io_|, and then clears the member and destroys
+  // Calculator.
+  Calculator* calculator_io_ = nullptr;
+
+  bool destroy_was_called_ = false;
+
+  DISALLOW_COPY_AND_ASSIGN(Watcher);
+};
+
+}  // namespace responsiveness
+
+#endif  // CONTENT_BROWSER_SCHEDULER_RESPONSIVENESS_WATCHER_H_
diff --git a/content/browser/scheduler/responsiveness/watcher_unittest.cc b/content/browser/scheduler/responsiveness/watcher_unittest.cc
new file mode 100644
index 0000000..882cf7e
--- /dev/null
+++ b/content/browser/scheduler/responsiveness/watcher_unittest.cc
@@ -0,0 +1,119 @@
+// 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.
+
+#include "content/browser/scheduler/responsiveness/watcher.h"
+
+#include "base/location.h"
+#include "base/pending_task.h"
+#include "content/browser/scheduler/responsiveness/calculator.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace responsiveness {
+
+namespace {
+
+class FakeCalculator : public Calculator {
+ public:
+  void TaskOrEventFinishedOnUIThread(base::TimeTicks schedule_time,
+                                     base::TimeTicks finish_time) override {
+    ++tasks_on_ui_thread_;
+  }
+
+  void TaskOrEventFinishedOnIOThread(base::TimeTicks schedule_time,
+                                     base::TimeTicks finish_time) override {
+    ++tasks_on_io_thread_;
+  }
+
+  int NumTasksOnUIThread() { return tasks_on_ui_thread_; }
+  int NumTasksOnIOThread() { return tasks_on_io_thread_; }
+
+ private:
+  int tasks_on_ui_thread_ = 0;
+  int tasks_on_io_thread_ = 0;
+};
+
+class FakeWatcher : public Watcher {
+ public:
+  std::unique_ptr<Calculator> MakeCalculator() override {
+    std::unique_ptr<FakeCalculator> calculator =
+        std::make_unique<FakeCalculator>();
+    calculator_ = calculator.get();
+    return calculator;
+  }
+
+  FakeWatcher() : Watcher() {}
+
+  int NumTasksOnUIThread() { return calculator_->NumTasksOnUIThread(); }
+  int NumTasksOnIOThread() { return calculator_->NumTasksOnIOThread(); }
+
+ private:
+  ~FakeWatcher() override{};
+  FakeCalculator* calculator_ = nullptr;
+};
+
+}  // namespace
+
+class ResponsivenessWatcherTest : public testing::Test {
+ public:
+  void SetUp() override {
+    // Watcher's constructor posts a task to IO thread, which in the unit test
+    // is also this thread. Regardless, we need to let those tasks finish.
+    watcher_ = scoped_refptr<FakeWatcher>(new FakeWatcher);
+    watcher_->SetUp();
+    test_browser_thread_bundle_.RunUntilIdle();
+  }
+
+  void TearDown() override {
+    watcher_->Destroy();
+    watcher_.reset();
+  }
+
+ protected:
+  // This member sets up BrowserThread::IO and BrowserThread::UI. It must be the
+  // first member, as other members may depend on these abstractions.
+  content::TestBrowserThreadBundle test_browser_thread_bundle_;
+
+  scoped_refptr<FakeWatcher> watcher_;
+};
+
+// Test that tasks are forwarded to calculator.
+TEST_F(ResponsivenessWatcherTest, TaskForwarding) {
+  for (int i = 0; i < 3; ++i) {
+    base::PendingTask task(FROM_HERE, base::OnceClosure());
+    watcher_->WillRunTaskOnUIThread(&task);
+    watcher_->DidRunTaskOnUIThread(&task);
+  }
+  EXPECT_EQ(3, watcher_->NumTasksOnUIThread());
+  EXPECT_EQ(0, watcher_->NumTasksOnIOThread());
+
+  for (int i = 0; i < 4; ++i) {
+    base::PendingTask task(FROM_HERE, base::OnceClosure());
+    watcher_->WillRunTaskOnIOThread(&task);
+    watcher_->DidRunTaskOnIOThread(&task);
+  }
+  EXPECT_EQ(3, watcher_->NumTasksOnUIThread());
+  EXPECT_EQ(4, watcher_->NumTasksOnIOThread());
+}
+
+// Test that nested tasks are not forwarded to the calculator.
+TEST_F(ResponsivenessWatcherTest, TaskNesting) {
+  // TODO(erikchen): Check that the right task is forwarded to the calculator.
+  // Requires implementation of PendingTask::queue_time.
+  base::PendingTask task1(FROM_HERE, base::OnceClosure());
+  base::PendingTask task2(FROM_HERE, base::OnceClosure());
+  base::PendingTask task3(FROM_HERE, base::OnceClosure());
+
+  watcher_->WillRunTaskOnUIThread(&task1);
+  watcher_->WillRunTaskOnUIThread(&task2);
+  watcher_->WillRunTaskOnUIThread(&task3);
+  watcher_->DidRunTaskOnUIThread(&task3);
+  watcher_->DidRunTaskOnUIThread(&task2);
+  watcher_->DidRunTaskOnUIThread(&task1);
+
+  EXPECT_EQ(1, watcher_->NumTasksOnUIThread());
+  EXPECT_EQ(0, watcher_->NumTasksOnIOThread());
+}
+
+}  // namespace responsiveness
diff --git a/content/browser/site_per_process_hit_test_browsertest.cc b/content/browser/site_per_process_hit_test_browsertest.cc
index e6935c61..68352b3 100644
--- a/content/browser/site_per_process_hit_test_browsertest.cc
+++ b/content/browser/site_per_process_hit_test_browsertest.cc
@@ -3297,6 +3297,9 @@
   InputEventAckWaiter fling_start_waiter(
       expected_target->GetRenderWidgetHost(),
       blink::WebInputEvent::kGestureFlingStart);
+  InputMsgWatcher gestrue_scroll_end_waiter(
+      expected_target->GetRenderWidgetHost(),
+      blink::WebInputEvent::kGestureScrollEnd);
   root_view_aura->OnScrollEvent(&fling_start);
   // If the expected target is not the root, then we should be doing async
   // targeting first. So event dispatch should not happen synchronously.
@@ -3312,9 +3315,6 @@
   // Send a GFC event, the fling_controller will process the GFC and stop the
   // fling by generating a wheel event with phaseEnded. The
   // mouse_wheel_event_queue will process the wheel event and generate a GSE.
-  InputEventAckWaiter gestrue_scroll_end_waiter(
-      expected_target->GetRenderWidgetHost(),
-      blink::WebInputEvent::kGestureScrollEnd);
   ui::ScrollEvent fling_cancel(ui::ET_SCROLL_FLING_CANCEL, gesture_point,
                                ui::EventTimeForNow(), 0, 1, 0, 1, 0, 1);
   UpdateEventRootLocation(&fling_cancel, root_view_aura);
@@ -3323,7 +3323,9 @@
   EXPECT_TRUE(target_monitor.EventWasReceived());
   EXPECT_EQ(target_monitor.EventType(),
             blink::WebInputEvent::kGestureFlingCancel);
-  gestrue_scroll_end_waiter.Wait();
+  // Since the fling velocity is small, sometimes the fling is over before
+  // sending the GFC event.
+  gestrue_scroll_end_waiter.GetAckStateWaitIfNecessary();
 }
 #endif  // !defined(OS_WIN)
 
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 828082de..ccde2311 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -35,6 +35,8 @@
 #include "components/download/public/common/download_stats.h"
 #include "components/rappor/public/rappor_utils.h"
 #include "components/url_formatter/url_formatter.h"
+#include "content/browser/accessibility/accessibility_tree_formatter.h"
+#include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
 #include "content/browser/bad_message.h"
 #include "content/browser/browser_plugin/browser_plugin_embedder.h"
@@ -540,7 +542,7 @@
       force_disable_overscroll_content_(false),
       last_dialog_suppressed_(false),
       accessibility_mode_(
-          BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()),
+          BrowserAccessibilityStateImpl::GetInstance()->GetAccessibilityMode()),
       audio_stream_monitor_(this),
       bluetooth_connected_device_count_(0),
       media_device_group_id_salt_base_(
@@ -2983,6 +2985,13 @@
     observer.AccessibilityLocationChangesReceived(details);
 }
 
+base::string16 WebContentsImpl::DumpAccessibilityTree(bool internal) {
+  auto* ax_mgr = GetOrCreateRootBrowserAccessibilityManager();
+  DCHECK(ax_mgr);
+  return AccessibilityTreeFormatter::DumpAccessibilityTreeFromManager(ax_mgr,
+                                                                      internal);
+}
+
 RenderFrameHost* WebContentsImpl::GetGuestByInstanceID(
     RenderFrameHost* render_frame_host,
     int browser_plugin_instance_id) {
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 71ae1bf..b3a9426 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -229,9 +229,6 @@
     return screen_orientation_provider_.get();
   }
 
-  // Broadcasts the mode change to all frames.
-  void SetAccessibilityMode(ui::AXMode mode);
-
   // Adds the given accessibility mode to the current accessibility mode
   // bitmap.
   void AddAccessibilityMode(ui::AXMode mode);
@@ -519,10 +516,13 @@
   WebContents* GetAsWebContents() override;
   bool IsNeverVisible() override;
   ui::AXMode GetAccessibilityMode() const override;
+  // Broadcasts the mode change to all frames.
+  void SetAccessibilityMode(ui::AXMode mode) override;
   void AccessibilityEventReceived(
       const AXEventNotificationDetails& details) override;
   void AccessibilityLocationChangesReceived(
       const std::vector<AXLocationChangeNotificationDetails>& details) override;
+  base::string16 DumpAccessibilityTree(bool internal) override;
   RenderFrameHost* GetGuestByInstanceID(
       RenderFrameHost* render_frame_host,
       int browser_plugin_instance_id) override;
diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc
index 4286d9a5c..85cb66f 100644
--- a/content/browser/web_contents/web_contents_impl_browsertest.cc
+++ b/content/browser/web_contents/web_contents_impl_browsertest.cc
@@ -2630,8 +2630,15 @@
   }
 }
 
+// TODO(beccahughes@): This test is flaking on Android. https://crbug.com/855018
+#if defined(OS_ANDROID)
+#define MAYBE_NotifyFullscreenAcquired_Navigate \
+    DISABLED_NotifyFullscreenAcquired_Navigate
+#else
+#define MAYBE_NotifyFullscreenAcquired_Navigate NotifyFullscreenAcquired_Navigate
+#endif
 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest,
-                       NotifyFullscreenAcquired_Navigate) {
+                       MAYBE_NotifyFullscreenAcquired_Navigate) {
   ASSERT_TRUE(embedded_test_server()->Start());
   WebContentsImpl* web_contents =
       static_cast<WebContentsImpl*>(shell()->web_contents());
diff --git a/content/browser/web_contents/web_contents_view_mac.h b/content/browser/web_contents/web_contents_view_mac.h
index 2e3f4f8..7f80c1b 100644
--- a/content/browser/web_contents/web_contents_view_mac.h
+++ b/content/browser/web_contents/web_contents_view_mac.h
@@ -7,6 +7,7 @@
 
 #import <Cocoa/Cocoa.h>
 
+#include <list>
 #include <memory>
 #include <string>
 #include <vector>
@@ -167,6 +168,13 @@
   // Whether to allow other views.
   bool allow_other_views_;
 
+  // This contains all RenderWidgetHostViewMacs that have been added as child
+  // NSViews to this NSView. Note that this list may contain RWHVMacs besides
+  // just |web_contents_->GetRenderWidgetHostView()|. The only time that the
+  // RWHVMac's NSView is removed from the WCVMac's NSView is when it is
+  // destroyed.
+  std::list<base::WeakPtr<RenderWidgetHostViewBase>> child_views_;
+
   ui::Layer* parent_ui_layer_ = nullptr;
 
   std::unique_ptr<PopupMenuHelper> popup_menu_helper_;
diff --git a/content/browser/web_contents/web_contents_view_mac.mm b/content/browser/web_contents/web_contents_view_mac.mm
index 03d7c9c..f14cb05 100644
--- a/content/browser/web_contents/web_contents_view_mac.mm
+++ b/content/browser/web_contents/web_contents_view_mac.mm
@@ -370,8 +370,10 @@
     view->SetDelegate(rw_delegate.get());
   }
   view->SetAllowPauseForResizeOrRepaint(!allow_other_views_);
-  if (parent_ui_layer_)
-    view->SetParentUiLayer(parent_ui_layer_);
+
+  // Add the RenderWidgetHostView to the ui::Layer heirarchy.
+  child_views_.push_back(view->GetWeakPtr());
+  SetParentUiLayer(parent_ui_layer_);
 
   // Fancy layout comes later; for now just make it our size and resize it
   // with us. In case there are other siblings of the content area, we want
@@ -448,11 +450,16 @@
 }
 
 void WebContentsViewMac::SetParentUiLayer(ui::Layer* parent_ui_layer) {
-  parent_ui_layer_ = parent_ui_layer;
-  RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>(
-      web_contents_->GetRenderWidgetHostView());
-  if (view)
-    view->SetParentUiLayer(parent_ui_layer);
+  // Remove any child NSViews that have been destroyed.
+  for (auto iter = child_views_.begin(); iter != child_views_.end();) {
+    auto iter_next = iter;
+    iter_next++;
+    if (*iter)
+      (*iter)->SetParentUiLayer(parent_ui_layer);
+    else
+      child_views_.erase(iter);
+    iter = iter_next;
+  }
 }
 
 }  // namespace content
diff --git a/content/browser/webauth/authenticator_impl_unittest.cc b/content/browser/webauth/authenticator_impl_unittest.cc
index 45908fea..a569c11 100644
--- a/content/browser/webauth/authenticator_impl_unittest.cc
+++ b/content/browser/webauth/authenticator_impl_unittest.cc
@@ -26,7 +26,7 @@
 #include "content/public/test/test_service_manager_context.h"
 #include "content/test/test_render_frame_host.h"
 #include "device/base/features.h"
-#include "device/fido/fake_hid_impl_for_testing.h"
+#include "device/fido/hid/fake_hid_impl_for_testing.h"
 #include "device/fido/scoped_virtual_fido_device.h"
 #include "device/fido/test_callback_receiver.h"
 #include "mojo/public/cpp/bindings/binding.h"
diff --git a/content/browser/webauth/webauth_browsertest.cc b/content/browser/webauth/webauth_browsertest.cc
index 3943e65..622be33 100644
--- a/content/browser/webauth/webauth_browsertest.cc
+++ b/content/browser/webauth/webauth_browsertest.cc
@@ -32,8 +32,8 @@
 #include "content/test/did_commit_provisional_load_interceptor.h"
 #include "device/base/features.h"
 #include "device/fido/fake_fido_discovery.h"
-#include "device/fido/fake_hid_impl_for_testing.h"
 #include "device/fido/fido_test_data.h"
+#include "device/fido/hid/fake_hid_impl_for_testing.h"
 #include "device/fido/mock_fido_device.h"
 #include "device/fido/scoped_virtual_fido_device.h"
 #include "device/fido/test_callback_receiver.h"
diff --git a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
index 7b67681..ad72377 100644
--- a/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
+++ b/content/browser/webrtc/webrtc_capture_from_element_browsertest.cc
@@ -7,6 +7,7 @@
 #include "build/build_config.h"
 #include "content/browser/webrtc/webrtc_content_browsertest_base.h"
 #include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
 #include "content/shell/common/shell_switches.h"
 #include "media/base/media_switches.h"
 #include "media/base/test_data_util.h"
@@ -132,13 +133,10 @@
   }
 #endif
 
-  MakeTypicalCall(
-      base::StringPrintf("testCaptureFromMediaElement(\"%s\", %d, %d, %d);",
-                         GetParam().filename.c_str(),
-                         GetParam().has_video,
-                         GetParam().has_audio,
-                         GetParam().use_audio_tag),
-      kVideoAudioHtmlFile);
+  MakeTypicalCall(JsReplace("testCaptureFromMediaElement($1, $2, $3, $4)",
+                            GetParam().filename, GetParam().has_video,
+                            GetParam().has_audio, GetParam().use_audio_tag),
+                  kVideoAudioHtmlFile);
 }
 
 IN_PROC_BROWSER_TEST_F(WebRtcCaptureFromElementBrowserTest,
diff --git a/content/browser/webui/content_web_ui_controller_factory.cc b/content/browser/webui/content_web_ui_controller_factory.cc
index 5fd3c07..23651bb 100644
--- a/content/browser/webui/content_web_ui_controller_factory.cc
+++ b/content/browser/webui/content_web_ui_controller_factory.cc
@@ -5,7 +5,6 @@
 #include "content/browser/webui/content_web_ui_controller_factory.h"
 
 #include "build/build_config.h"
-#include "content/browser/accessibility/accessibility_ui.h"
 #include "content/browser/appcache/appcache_internals_ui.h"
 #include "content/browser/gpu/gpu_internals_ui.h"
 #include "content/browser/histograms_internals_ui.h"
@@ -38,7 +37,6 @@
       url.host_piece() == kChromeUIIndexedDBInternalsHost ||
       url.host_piece() == kChromeUIMediaInternalsHost ||
       url.host_piece() == kChromeUIServiceWorkerInternalsHost ||
-      url.host_piece() == kChromeUIAccessibilityHost ||
       url.host_piece() == kChromeUIAppCacheInternalsHost ||
       url.host_piece() == kChromeUINetworkErrorsListingHost ||
       url.host_piece() == kChromeUIProcessInternalsHost) {
@@ -74,8 +72,6 @@
     return std::make_unique<IndexedDBInternalsUI>(web_ui);
   if (url.host_piece() == kChromeUIMediaInternalsHost)
     return std::make_unique<MediaInternalsUI>(web_ui);
-  if (url.host_piece() == kChromeUIAccessibilityHost)
-    return std::make_unique<AccessibilityUI>(web_ui);
   if (url.host_piece() == kChromeUIServiceWorkerInternalsHost)
     return std::make_unique<ServiceWorkerInternalsUI>(web_ui);
   if (url.host_piece() == kChromeUINetworkErrorsListingHost)
diff --git a/content/browser/zoom_browsertest.cc b/content/browser/zoom_browsertest.cc
index 6c653819..7d77664 100644
--- a/content/browser/zoom_browsertest.cc
+++ b/content/browser/zoom_browsertest.cc
@@ -95,13 +95,12 @@
 }
 
 double GetMainFrameZoomFactor(const ToRenderFrameHost& adapter, double border) {
-  const char kGetMainFrameZoomLevel[] =
-      "window.domAutomationController.send("
-      "(window.outerWidth - %f)/window.innerWidth"
-      ");";
   double zoom_factor;
   EXPECT_TRUE(ExecuteScriptAndExtractDouble(
-      adapter, base::StringPrintf(kGetMainFrameZoomLevel, border),
+      adapter,
+      JsReplace("window.domAutomationController.send("
+                "   (window.outerWidth - $1) / window.innerWidth);",
+                border),
       &zoom_factor));
   return zoom_factor;
 }
diff --git a/content/content_resources.grd b/content/content_resources.grd
index 5c3268a..b178e346 100644
--- a/content/content_resources.grd
+++ b/content/content_resources.grd
@@ -10,9 +10,6 @@
   <translations />
   <release seq="1">
     <includes>
-      <include name="IDR_ACCESSIBILITY_HTML" file="browser/resources/accessibility/accessibility.html" flattenhtml="true" allowexternalscript="true" compress="gzip" type="BINDATA" />
-      <include name="IDR_ACCESSIBILITY_CSS" file="browser/resources/accessibility/accessibility.css" compress="gzip" type="BINDATA" />
-      <include name="IDR_ACCESSIBILITY_JS" file="browser/resources/accessibility/accessibility.js" flattenhtml="true" compress="gzip" type="BINDATA" />
       <include name="IDR_APPCACHE_INTERNALS_HTML" file="browser/resources/appcache/appcache_internals.html" flattenhtml="true" allowexternalscript="true" compress="gzip" type="BINDATA" />
       <include name="IDR_APPCACHE_INTERNALS_JS" file="browser/resources/appcache/appcache_internals.js" flattenhtml="false" compress="gzip" type="BINDATA" />
       <include name="IDR_APPCACHE_INTERNALS_CSS" file="browser/resources/appcache/appcache_internals.css" flattenhtml="true" compress="gzip" type="BINDATA" />
diff --git a/content/public/browser/browser_accessibility_state.h b/content/public/browser/browser_accessibility_state.h
index 6c91e1b7..3c969f9 100644
--- a/content/public/browser/browser_accessibility_state.h
+++ b/content/public/browser/browser_accessibility_state.h
@@ -8,6 +8,7 @@
 #include "base/callback_forward.h"
 
 #include "content/common/content_export.h"
+#include "ui/accessibility/ax_modes.h"
 
 namespace content {
 
@@ -28,6 +29,18 @@
   // required by a command line flag or by a platform requirement.)
   virtual void DisableAccessibility() = 0;
 
+  virtual bool IsRendererAccessibilityEnabled() = 0;
+
+  virtual ui::AXMode GetAccessibilityMode() const = 0;
+
+  // Adds the given accessibility mode flags to the current accessibility
+  // mode bitmap.
+  virtual void AddAccessibilityModeFlags(ui::AXMode mode) = 0;
+
+  // Remove the given accessibility mode flags from the current accessibility
+  // mode bitmap.
+  virtual void RemoveAccessibilityModeFlags(ui::AXMode mode) = 0;
+
   // Resets accessibility to the platform default for all running tabs.
   // This is probably off, but may be on, if --force_renderer_accessibility is
   // passed, or EditableTextOnly if this is Win7.
diff --git a/content/public/browser/interstitial_page.h b/content/public/browser/interstitial_page.h
index bdc03b3..da8437e9 100644
--- a/content/public/browser/interstitial_page.h
+++ b/content/public/browser/interstitial_page.h
@@ -94,8 +94,8 @@
   // DidAttachInterstitialPage or DidDetachInterstitialPage notifications.
   virtual WebContents* GetWebContents() const = 0;
 
-  // Gets the RenderFrameHost associated with
-  // the interstitial page's main frame.
+  // Gets the RenderFrameHost associated with the interstitial page's main
+  // frame. May return nullptr if the interstitial is already hidden.
   virtual RenderFrameHost* GetMainFrame() const = 0;
 
   virtual InterstitialPageDelegate* GetDelegateForTesting() = 0;
diff --git a/content/public/browser/web_contents.h b/content/public/browser/web_contents.h
index 0f82f91e..b26563cd2 100644
--- a/content/public/browser/web_contents.h
+++ b/content/public/browser/web_contents.h
@@ -390,6 +390,12 @@
   // both renderer accessibility, and a native browser accessibility tree.
   virtual bool IsFullAccessibilityModeForTesting() const = 0;
 
+  virtual ui::AXMode GetAccessibilityMode() const = 0;
+
+  virtual void SetAccessibilityMode(ui::AXMode mode) = 0;
+
+  virtual base::string16 DumpAccessibilityTree(bool internal) = 0;
+
   virtual const PageImportanceSignals& GetPageImportanceSignals() const = 0;
 
   // Tab navigation state ------------------------------------------------------
diff --git a/content/public/common/url_constants.cc b/content/public/common/url_constants.cc
index e85d54e..f7bef58c 100644
--- a/content/public/common/url_constants.cc
+++ b/content/public/common/url_constants.cc
@@ -22,7 +22,6 @@
 
 const char kChromeUIAppCacheInternalsHost[] = "appcache-internals";
 const char kChromeUIIndexedDBInternalsHost[] = "indexeddb-internals";
-const char kChromeUIAccessibilityHost[] = "accessibility";
 const char kChromeUIBlobInternalsHost[] = "blob-internals";
 const char kChromeUIBrowserCrashHost[] = "inducebrowsercrashforrealz";
 const char kChromeUIDinoHost[] = "dino";
diff --git a/content/public/renderer/url_loader_throttle_provider.h b/content/public/renderer/url_loader_throttle_provider.h
index 2d1aca8d..d0ead39 100644
--- a/content/public/renderer/url_loader_throttle_provider.h
+++ b/content/public/renderer/url_loader_throttle_provider.h
@@ -38,6 +38,9 @@
       int render_frame_id,
       const blink::WebURLRequest& request,
       ResourceType resource_type) = 0;
+
+  // Set the network status online state as specified in |is_online|.
+  virtual void SetOnline(bool is_online) = 0;
 };
 
 }  // namespace content
diff --git a/content/public/test/browser_test_utils.h b/content/public/test/browser_test_utils.h
index f9326d5..f772a8d6 100644
--- a/content/public/test/browser_test_utils.h
+++ b/content/public/test/browser_test_utils.h
@@ -14,6 +14,7 @@
 #include "base/containers/flat_set.h"
 #include "base/containers/queue.h"
 #include "base/files/scoped_temp_dir.h"
+#include "base/json/json_writer.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
@@ -371,6 +372,101 @@
                                    const std::string& script,
                                    std::string* result) WARN_UNUSED_RESULT;
 
+// JsLiteralHelper is a helper class that determines what types are legal to
+// pass to StringifyJsLiteral. Legal types include int, string, StringPiece,
+// char*, bool, double, GURL, url::Origin, and base::Value&&.
+template <typename T>
+struct JsLiteralHelper {
+  // This generic version enables passing any type from which base::Value can be
+  // instantiated. This covers int, string, double, bool, base::Value&&, etc.
+  template <typename U>
+  static base::Value Convert(U&& arg) {
+    return base::Value(std::forward<U>(arg));
+  }
+};
+
+// Specialization allowing GURL to be passed to StringifyJsLiteral.
+template <>
+struct JsLiteralHelper<GURL> {
+  static base::Value Convert(const GURL& url) {
+    return base::Value(url.spec());
+  }
+};
+
+// Specialization allowing url::Origin to be passed to StringifyJsLiteral.
+template <>
+struct JsLiteralHelper<url::Origin> {
+  static base::Value Convert(const url::Origin& url) {
+    return base::Value(url.Serialize());
+  }
+};
+
+// Convert a value to a corresponding JS literal.
+//
+// |value| can be any type explicitly convertible to base::Value
+// (including int/string/StringPiece/char*/double/bool), or any type that
+// JsLiteralHelper is specialized for -- like URL and url::Origin, which emit
+// string literals.
+template <typename T>
+std::string StringifyJsLiteral(T&& value) {
+  using ValueType = std::remove_cv_t<std::remove_reference_t<T>>;
+  base::Value value_as_base_value =
+      JsLiteralHelper<ValueType>::Convert(std::forward<T>(value));
+  std::string value_as_json;
+  CHECK(base::JSONWriter::Write(value_as_base_value, &value_as_json));
+  return value_as_json;
+}
+
+// Base case for StringifyJsLiterals() variadic template (see below).
+inline void StringifyJsLiterals(std::vector<std::string>* list) {}
+
+// Call StringifyJsLiteral() on an arbitrary mix of values, appending the
+// results to |list|. |first| and |rest...| can have any type accepted by
+// StringifyJsLiteral.
+template <typename T, typename... Args>
+void StringifyJsLiterals(std::vector<std::string>* list,
+                         T&& first,
+                         Args&&... rest) {
+  list->push_back(StringifyJsLiteral(std::forward<T>(first)));
+  StringifyJsLiterals(list, std::forward<Args>(rest)...);
+}
+
+// Replaces $1, $2, $3, etc in |script_template| with JS literal values
+// constructed from |args|, similar to base::ReplaceStringPlaceholders.
+//
+// Unlike StringPrintf or manual concatenation, this version will properly
+// escape string content, even if it contains slashes or quotation marks.
+//
+// Each |arg| can be any type explicitly convertible to base::Value
+// (including int/string/StringPiece/char*/double/bool), or any type that
+// JsLiteralHelper is specialized for -- like URL and url::Origin, which emit
+// string literals. |args| can be a mix of different types.
+//
+// Example 1:
+//
+//   GURL page_url("http://example.com");
+//   EXPECT_TRUE(ExecuteScript(
+//       shell(), JsReplace("window.open($1, '_blank');", page_url)));
+//
+// $1 is replaced with a double-quoted JS string literal: "http://example.com".
+// Note that quotes around $1 are not required.
+//
+// Example 2:
+//
+//   bool forced_reload = true;
+//   EXPECT_TRUE(ExecuteScript(
+//       shell(), JsReplace("window.location.reload($1);", forced_reload)));
+//
+// This becomes "window.location.reload(true);" -- because bool values are
+// supported by base::Value. Numbers, lists, and dicts also work.
+template <typename... Args>
+std::string JsReplace(base::StringPiece script_template, Args&&... args) {
+  std::vector<std::string> replacements;
+  StringifyJsLiterals(&replacements, std::forward<Args>(args)...);
+  return base::ReplaceStringPlaceholders(script_template, replacements,
+                                         nullptr);
+}
+
 // Same as above but the script executed without user gesture.
 bool ExecuteScriptWithoutUserGestureAndExtractDouble(
     const ToRenderFrameHost& adapter,
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 6c6ac67e..177147e 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -639,6 +639,7 @@
   defines = []
 
   public_deps = [
+    "//content/common:mojo_bindings",
     "//content/public/common:common_sources",
     "//ipc",
   ]
@@ -715,6 +716,7 @@
     "//third_party/libvpx",
     "//third_party/libyuv",
     "//third_party/opus",
+    "//third_party/sqlite",
     "//third_party/webrtc/api:libjingle_logging_api",
     "//third_party/webrtc/api:libjingle_peerconnection_api",
     "//third_party/webrtc/api:rtc_stats_api",
diff --git a/content/renderer/PRESUBMIT.py b/content/renderer/PRESUBMIT.py
index 7fecab9b..eb6734d 100644
--- a/content/renderer/PRESUBMIT.py
+++ b/content/renderer/PRESUBMIT.py
@@ -28,7 +28,7 @@
         problems.append('%s:%d' % (f, line_number))
 
   if problems:
-    return [output_api.PresubmitError(
+    return [output_api.PresubmitPromptWarning(
       'base::ThreadTaskRunnerHandle::Get() and'
       ' base::SequencedTaskRunnerHandle::Get() are deprecated in renderer;'
       ' please use RenderFrame::GetTaskRunner for production code and'
diff --git a/content/renderer/loader/web_url_loader_impl.cc b/content/renderer/loader/web_url_loader_impl.cc
index 46393fe4..cab1b19 100644
--- a/content/renderer/loader/web_url_loader_impl.cc
+++ b/content/renderer/loader/web_url_loader_impl.cc
@@ -89,6 +89,7 @@
 using blink::WebURLLoaderClient;
 using blink::WebURLRequest;
 using blink::WebURLResponse;
+using blink::scheduler::WebResourceLoadingTaskRunnerHandle;
 
 namespace content {
 
@@ -366,21 +367,28 @@
 
 std::unique_ptr<blink::WebURLLoader> WebURLLoaderFactoryImpl::CreateURLLoader(
     const blink::WebURLRequest& request,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+    std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle) {
   if (!loader_factory_) {
     // In some tests like RenderViewTests loader_factory_ is not available.
     // These tests can still use data URLs to bypass the ResourceDispatcher.
-    if (!task_runner)
-      task_runner = base::ThreadTaskRunnerHandle::Get();
+    if (!task_runner_handle) {
+      // TODO(altimin): base::ThreadTaskRunnerHandle::Get is deprecated in
+      // the renderer. Fix this for frame and non-frame clients.
+      task_runner_handle =
+          WebResourceLoadingTaskRunnerHandle::CreateUnprioritized(
+              base::ThreadTaskRunnerHandle::Get());
+    }
+
     return std::make_unique<WebURLLoaderImpl>(resource_dispatcher_.get(),
-                                              std::move(task_runner),
+                                              std::move(task_runner_handle),
                                               nullptr /* factory */);
   }
 
-  DCHECK(task_runner);
+  DCHECK(task_runner_handle);
   DCHECK(resource_dispatcher_);
-  return std::make_unique<WebURLLoaderImpl>(
-      resource_dispatcher_.get(), std::move(task_runner), loader_factory_);
+  return std::make_unique<WebURLLoaderImpl>(resource_dispatcher_.get(),
+                                            std::move(task_runner_handle),
+                                            loader_factory_);
 }
 
 // This inner class exists since the WebURLLoader may be deleted while inside a
@@ -390,11 +398,12 @@
  public:
   using ReceivedData = RequestPeer::ReceivedData;
 
-  Context(WebURLLoaderImpl* loader,
-          ResourceDispatcher* resource_dispatcher,
-          scoped_refptr<base::SingleThreadTaskRunner> task_runner,
-          scoped_refptr<network::SharedURLLoaderFactory> factory,
-          mojom::KeepAliveHandlePtr keep_alive_handle);
+  Context(
+      WebURLLoaderImpl* loader,
+      ResourceDispatcher* resource_dispatcher,
+      std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle,
+      scoped_refptr<network::SharedURLLoaderFactory> factory,
+      mojom::KeepAliveHandlePtr keep_alive_handle);
 
   ResourceDispatcher* resource_dispatcher() { return resource_dispatcher_; }
   int request_id() const { return request_id_; }
@@ -448,6 +457,7 @@
 
   WebURLLoaderClient* client_;
   ResourceDispatcher* resource_dispatcher_;
+  std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle_;
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
   std::unique_ptr<FtpDirectoryListingResponseDelegate> ftp_listing_delegate_;
   std::unique_ptr<SharedMemoryDataConsumerHandle::Writer> body_stream_writer_;
@@ -520,7 +530,7 @@
 WebURLLoaderImpl::Context::Context(
     WebURLLoaderImpl* loader,
     ResourceDispatcher* resource_dispatcher,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     mojom::KeepAliveHandlePtr keep_alive_handle_ptr)
     : loader_(loader),
@@ -528,7 +538,8 @@
       report_raw_headers_(false),
       client_(nullptr),
       resource_dispatcher_(resource_dispatcher),
-      task_runner_(std::move(task_runner)),
+      task_runner_handle_(std::move(task_runner_handle)),
+      task_runner_(task_runner_handle_->GetTaskRunner()),
       keep_alive_handle_(
           keep_alive_handle_ptr
               ? std::make_unique<KeepAliveHandleWithChildProcessReference>(
@@ -579,10 +590,11 @@
 void WebURLLoaderImpl::Context::DidChangePriority(
     WebURLRequest::Priority new_priority, int intra_priority_value) {
   if (request_id_ != -1) {
-    resource_dispatcher_->DidChangePriority(
-        request_id_,
-        ConvertWebKitPriorityToNetPriority(new_priority),
-        intra_priority_value);
+    net::RequestPriority net_priority =
+        ConvertWebKitPriorityToNetPriority(new_priority);
+    resource_dispatcher_->DidChangePriority(request_id_, net_priority,
+                                            intra_priority_value);
+    task_runner_handle_->DidChangeRequestPriority(net_priority);
   }
 }
 
@@ -1123,21 +1135,21 @@
 
 WebURLLoaderImpl::WebURLLoaderImpl(
     ResourceDispatcher* resource_dispatcher,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory)
     : WebURLLoaderImpl(resource_dispatcher,
-                       std::move(task_runner),
+                       std::move(task_runner_handle),
                        std::move(url_loader_factory),
                        nullptr) {}
 
 WebURLLoaderImpl::WebURLLoaderImpl(
     ResourceDispatcher* resource_dispatcher,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    std::unique_ptr<WebResourceLoadingTaskRunnerHandle> task_runner_handle,
     scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
     mojom::KeepAliveHandlePtr keep_alive_handle)
     : context_(new Context(this,
                            resource_dispatcher,
-                           std::move(task_runner),
+                           std::move(task_runner_handle),
                            std::move(url_loader_factory),
                            std::move(keep_alive_handle))) {}
 
diff --git a/content/renderer/loader/web_url_loader_impl.h b/content/renderer/loader/web_url_loader_impl.h
index 9cfb970..8908938 100644
--- a/content/renderer/loader/web_url_loader_impl.h
+++ b/content/renderer/loader/web_url_loader_impl.h
@@ -5,6 +5,8 @@
 #ifndef CONTENT_RENDERER_LOADER_WEB_URL_LOADER_IMPL_H_
 #define CONTENT_RENDERER_LOADER_WEB_URL_LOADER_IMPL_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "content/common/content_export.h"
@@ -12,13 +14,10 @@
 #include "mojo/public/cpp/system/data_pipe.h"
 #include "services/network/public/cpp/shared_url_loader_factory.h"
 #include "services/network/public/mojom/url_loader_factory.mojom.h"
+#include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 #include "third_party/blink/public/platform/web_url_loader_factory.h"
 
-namespace base {
-class SingleThreadTaskRunner;
-}
-
 namespace network {
 struct ResourceResponseInfo;
 }
@@ -41,7 +40,8 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override;
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override;
 
  private:
   base::WeakPtr<ResourceDispatcher> resource_dispatcher_;
@@ -53,13 +53,15 @@
  public:
   WebURLLoaderImpl(
       ResourceDispatcher* resource_dispatcher,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory);
   // When non-null |keep_alive_handle| is specified, this loader prolongs
   // this render process's lifetime.
   WebURLLoaderImpl(
       ResourceDispatcher* resource_dispatcher,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle,
       scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
       mojom::KeepAliveHandlePtr keep_alive_handle);
   ~WebURLLoaderImpl() override;
diff --git a/content/renderer/loader/web_url_loader_impl_unittest.cc b/content/renderer/loader/web_url_loader_impl_unittest.cc
index 9ce6164..9a92c2b 100644
--- a/content/renderer/loader/web_url_loader_impl_unittest.cc
+++ b/content/renderer/loader/web_url_loader_impl_unittest.cc
@@ -176,7 +176,9 @@
   TestWebURLLoaderClient(ResourceDispatcher* dispatcher)
       : loader_(new WebURLLoaderImpl(
             dispatcher,
-            blink::scheduler::GetSingleThreadTaskRunnerForTesting(),
+            blink::scheduler::WebResourceLoadingTaskRunnerHandle::
+                CreateUnprioritized(
+                    blink::scheduler::GetSingleThreadTaskRunnerForTesting()),
             base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
                 &fake_url_loader_factory_))),
         delete_on_receive_redirect_(false),
diff --git a/content/renderer/loader/web_worker_fetch_context_impl.cc b/content/renderer/loader/web_worker_fetch_context_impl.cc
index e4c11a8..d548ae5 100644
--- a/content/renderer/loader/web_worker_fetch_context_impl.cc
+++ b/content/renderer/loader/web_worker_fetch_context_impl.cc
@@ -79,13 +79,21 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
-    DCHECK(task_runner);
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
+    DCHECK(task_runner_handle);
     DCHECK(resource_dispatcher_);
-    if (auto loader = CreateServiceWorkerURLLoader(request, task_runner))
-      return loader;
-    return std::make_unique<WebURLLoaderImpl>(
-        resource_dispatcher_.get(), std::move(task_runner), loader_factory_);
+    if (CanCreateServiceWorkerURLLoader(request)) {
+      // Create our own URLLoader to route the request to the controller service
+      // worker.
+      return std::make_unique<WebURLLoaderImpl>(resource_dispatcher_.get(),
+                                                std::move(task_runner_handle),
+                                                service_worker_loader_factory_);
+    }
+
+    return std::make_unique<WebURLLoaderImpl>(resource_dispatcher_.get(),
+                                              std::move(task_runner_handle),
+                                              loader_factory_);
   }
 
   void SetServiceWorkerURLLoaderFactory(
@@ -102,9 +110,7 @@
   base::WeakPtr<Factory> GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); }
 
  private:
-  std::unique_ptr<blink::WebURLLoader> CreateServiceWorkerURLLoader(
-      const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+  bool CanCreateServiceWorkerURLLoader(const blink::WebURLRequest& request) {
     // TODO(horo): Unify this code path with
     // ServiceWorkerNetworkProvider::CreateURLLoader that is used for document
     // cases.
@@ -112,7 +118,7 @@
     // We need the service worker loader factory populated in order to create
     // our own URLLoader for subresource loading via a service worker.
     if (!service_worker_loader_factory_)
-      return nullptr;
+      return false;
 
     // If the URL is not http(s) or otherwise whitelisted, do not intercept the
     // request. Schemes like 'blob' and 'file' are not eligible to be
@@ -122,18 +128,14 @@
     // its fallback factory).
     if (!GURL(request.Url()).SchemeIsHTTPOrHTTPS() &&
         !OriginCanAccessServiceWorkers(request.Url())) {
-      return nullptr;
+      return false;
     }
 
     // If GetSkipServiceWorker() returns true, no need to intercept the request.
     if (request.GetSkipServiceWorker())
-      return nullptr;
+      return false;
 
-    // Create our own URLLoader to route the request to the controller service
-    // worker.
-    return std::make_unique<WebURLLoaderImpl>(resource_dispatcher_.get(),
-                                              std::move(task_runner),
-                                              service_worker_loader_factory_);
+    return true;
   }
 
   base::WeakPtr<ResourceDispatcher> resource_dispatcher_;
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index ee2d0c2..bfc4c8c1 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -269,11 +269,6 @@
     const gfx::Transform& old_transform,
     const gfx::Transform& new_transform) {}
 
-void RendererWindowTreeClient::OnClientAreaChanged(
-    ui::Id window_id,
-    const gfx::Insets& new_client_area,
-    const std::vector<gfx::Rect>& new_additional_client_areas) {}
-
 void RendererWindowTreeClient::OnTransientWindowAdded(
     ui::Id window_id,
     ui::Id transient_window_id) {}
@@ -316,8 +311,6 @@
     uint32_t event_id,
     ui::Id window_id,
     int64_t display_id,
-    ui::Id display_root_window_id,
-    const gfx::PointF& event_location_in_screen_pixel_layout,
     std::unique_ptr<ui::Event> event,
     bool matches_pointer_watcher) {
   NOTREACHED();
@@ -388,11 +381,6 @@
 
 void RendererWindowTreeClient::RequestClose(ui::Id window_id) {}
 
-void RendererWindowTreeClient::GetWindowManager(
-    mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal) {
-  NOTREACHED();
-}
-
 void RendererWindowTreeClient::GetScreenProviderObserver(
     ui::mojom::ScreenProviderObserverAssociatedRequest observer) {}
 
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h
index 5309e20..2f7bc6ff 100644
--- a/content/renderer/mus/renderer_window_tree_client.h
+++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -142,10 +142,6 @@
   void OnWindowTransformChanged(ui::Id window_id,
                                 const gfx::Transform& old_transform,
                                 const gfx::Transform& new_transform) override;
-  void OnClientAreaChanged(
-      ui::Id window_id,
-      const gfx::Insets& new_client_area,
-      const std::vector<gfx::Rect>& new_additional_client_areas) override;
   void OnTransientWindowAdded(ui::Id window_id,
                               ui::Id transient_window_id) override;
   void OnTransientWindowRemoved(ui::Id window_id,
@@ -172,8 +168,6 @@
       uint32_t event_id,
       ui::Id window_id,
       int64_t display_id,
-      ui::Id display_root_window_id,
-      const gfx::PointF& event_location_in_screen_pixel_layout,
       std::unique_ptr<ui::Event> event,
       bool matches_pointer_watcher) override;
   void OnPointerEventObserved(std::unique_ptr<ui::Event> event,
@@ -207,9 +201,6 @@
   void OnDragDropDone() override;
   void OnChangeCompleted(uint32_t change_id, bool success) override;
   void RequestClose(ui::Id window_id) override;
-  void GetWindowManager(
-      mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal)
-      override;
   void GetScreenProviderObserver(
       ui::mojom::ScreenProviderObserverAssociatedRequest observer) override;
 
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 7aeee5b..fa7bf531 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -938,7 +938,8 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
     // This should not be called if the frame is detached.
     DCHECK(frame_);
 
@@ -958,7 +959,7 @@
     }
     return std::make_unique<WebURLLoaderImpl>(
         RenderThreadImpl::current()->resource_dispatcher(),
-        std::move(task_runner), std::move(loader_factory),
+        std::move(task_runner_handle), std::move(loader_factory),
         std::move(keep_alive_handle));
   }
 
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index f5fc373e..11b91ed 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -2233,6 +2233,8 @@
     double max_bandwidth_mbps) {
   bool online = type != net::NetworkChangeNotifier::CONNECTION_NONE;
   WebNetworkStateNotifier::SetOnLine(online);
+  if (url_loader_throttle_provider_)
+    url_loader_throttle_provider_->SetOnline(online);
   for (auto& observer : observers_)
     observer.NetworkStateChanged(online);
   WebNetworkStateNotifier::SetWebConnection(
diff --git a/content/renderer/renderer_blink_platform_impl.cc b/content/renderer/renderer_blink_platform_impl.cc
index 7d6f653..3474ca9 100644
--- a/content/renderer/renderer_blink_platform_impl.cc
+++ b/content/renderer/renderer_blink_platform_impl.cc
@@ -1072,16 +1072,6 @@
   return blink_interface_provider_.get();
 }
 
-void RendererBlinkPlatformImpl::StartListening(
-    blink::WebPlatformEventType type,
-    blink::WebPlatformEventListener* listener) {
-
-}
-
-void RendererBlinkPlatformImpl::StopListening(
-    blink::WebPlatformEventType type) {
-}
-
 //------------------------------------------------------------------------------
 
 blink::WebPushProvider* RendererBlinkPlatformImpl::PushProvider() {
diff --git a/content/renderer/renderer_blink_platform_impl.h b/content/renderer/renderer_blink_platform_impl.h
index ec0d01e4..fb43195 100644
--- a/content/renderer/renderer_blink_platform_impl.h
+++ b/content/renderer/renderer_blink_platform_impl.h
@@ -187,9 +187,6 @@
   blink::WebString ConvertIDNToUnicode(const blink::WebString& host) override;
   service_manager::Connector* GetConnector() override;
   blink::InterfaceProvider* GetInterfaceProvider() override;
-  void StartListening(blink::WebPlatformEventType,
-                      blink::WebPlatformEventListener*) override;
-  void StopListening(blink::WebPlatformEventType) override;
   blink::WebThread* CurrentThread() override;
   blink::BlameContext* GetTopLevelBlameContext() override;
   void RecordRappor(const char* metric,
@@ -248,10 +245,6 @@
  private:
   bool CheckPreparsedJsCachingEnabled() const;
 
-  // TODO(crbug.com/850997): Remove when Device*EventPump classes are
-  // moved to blink
-  void StopDeviceSensorEventPump(blink::WebPlatformEventType type);
-
   // Ensure that the WebDatabaseHost has been initialized.
   void InitializeWebDatabaseHostIfNeeded();
 
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
index 12dffc2..fecbaf9 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -119,7 +119,8 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
     RenderThreadImpl* render_thread = RenderThreadImpl::current();
     if (render_thread && provider_->script_loader_factory() &&
         blink::ServiceWorkerUtils::IsServicificationEnabled() &&
@@ -127,7 +128,7 @@
       // TODO(crbug.com/796425): Temporarily wrap the raw
       // mojom::URLLoaderFactory pointer into SharedURLLoaderFactory.
       return std::make_unique<WebURLLoaderImpl>(
-          render_thread->resource_dispatcher(), std::move(task_runner),
+          render_thread->resource_dispatcher(), std::move(task_runner_handle),
           base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
               provider_->script_loader_factory()));
     }
diff --git a/content/renderer/service_worker/service_worker_network_provider.cc b/content/renderer/service_worker/service_worker_network_provider.cc
index 390052fa..c3cec85 100644
--- a/content/renderer/service_worker/service_worker_network_provider.cc
+++ b/content/renderer/service_worker/service_worker_network_provider.cc
@@ -98,7 +98,8 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
     // RenderThreadImpl is nullptr in some tests.
     if (!RenderThreadImpl::current())
       return nullptr;
@@ -134,7 +135,7 @@
     // pointer into SharedURLLoaderFactory.
     return std::make_unique<WebURLLoaderImpl>(
         RenderThreadImpl::current()->resource_dispatcher(),
-        std::move(task_runner),
+        std::move(task_runner_handle),
         base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
             provider_->context()->GetSubresourceLoaderFactory()));
   }
diff --git a/content/renderer/shared_worker/embedded_shared_worker_stub.cc b/content/renderer/shared_worker/embedded_shared_worker_stub.cc
index 06a99673..7e04773 100644
--- a/content/renderer/shared_worker/embedded_shared_worker_stub.cc
+++ b/content/renderer/shared_worker/embedded_shared_worker_stub.cc
@@ -127,7 +127,8 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
     // S13nServiceWorker:
     // We only install our own URLLoader if Servicification is enabled.
     if (!blink::ServiceWorkerUtils::IsServicificationEnabled())
@@ -145,7 +146,7 @@
       // TODO(crbug.com/796425): Temporarily wrap the raw
       // mojom::URLLoaderFactory pointer into SharedURLLoaderFactory.
       return std::make_unique<WebURLLoaderImpl>(
-          render_thread->resource_dispatcher(), std::move(task_runner),
+          render_thread->resource_dispatcher(), std::move(task_runner_handle),
           base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
               provider_->script_loader_factory()));
     }
@@ -178,7 +179,7 @@
     // pointer into SharedURLLoaderFactory.
     return std::make_unique<WebURLLoaderImpl>(
         RenderThreadImpl::current()->resource_dispatcher(),
-        std::move(task_runner),
+        std::move(task_runner_handle),
         base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
             provider_->context()->GetSubresourceLoaderFactory()));
   }
diff --git a/content/shell/test_runner/event_sender.cc b/content/shell/test_runner/event_sender.cc
index bbd248a4..5de4022 100644
--- a/content/shell/test_runner/event_sender.cc
+++ b/content/shell/test_runner/event_sender.cc
@@ -353,7 +353,7 @@
 int GetKeyModifiersFromV8(v8::Isolate* isolate, v8::Local<v8::Value> value) {
   std::vector<std::string> modifier_names;
   if (value->IsString()) {
-    modifier_names.push_back(gin::V8ToString(value));
+    modifier_names.push_back(gin::V8ToString(isolate, value));
   } else if (value->IsArray()) {
     gin::Converter<std::vector<std::string>>::FromV8(isolate, value,
                                                      &modifier_names);
@@ -383,9 +383,10 @@
 }
 
 WebMouseWheelEvent::Phase GetMouseWheelEventPhaseFromV8(
+    v8::Isolate* isolate,
     v8::Local<v8::Value> value) {
   if (value->IsString())
-    return GetMouseWheelEventPhase(gin::V8ToString(value));
+    return GetMouseWheelEventPhase(gin::V8ToString(isolate, value));
   return WebMouseWheelEvent::kPhaseNone;
 }
 
@@ -2575,7 +2576,7 @@
           if (!args->PeekNext().IsEmpty()) {
             v8::Local<v8::Value> phase_value;
             args->GetNext(&phase_value);
-            phase = GetMouseWheelEventPhaseFromV8(phase_value);
+            phase = GetMouseWheelEventPhaseFromV8(args->isolate(), phase_value);
           }
         }
       }
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index e9eb8aa..e616760 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -1510,6 +1510,7 @@
     "../browser/renderer_host/text_input_client_mac_unittest.mm",
     "../browser/resolve_proxy_msg_helper_unittest.cc",
     "../browser/scheduler/responsiveness/calculator_unittest.cc",
+    "../browser/scheduler/responsiveness/watcher_unittest.cc",
     "../browser/screen_orientation/screen_orientation_provider_unittest.cc",
     "../browser/service_worker/embedded_worker_instance_unittest.cc",
     "../browser/service_worker/service_worker_cache_writer_unittest.cc",
@@ -1862,6 +1863,7 @@
     "//third_party/metrics_proto",
     "//third_party/opus",
     "//third_party/re2",
+    "//third_party/sqlite",
     "//third_party/webrtc/api:libjingle_peerconnection_api",
     "//third_party/webrtc/api:rtc_stats_api",
     "//third_party/webrtc/api/video:video_frame",
diff --git a/content/test/data/fileapi/common.js b/content/test/data/fileapi/common.js
index 3fc52df..b1a9165 100644
--- a/content/test/data/fileapi/common.js
+++ b/content/test/data/fileapi/common.js
@@ -32,18 +32,18 @@
 function fileErrorToString(e)
 {
   switch (e.code) {
-    case FileError.QUOTA_EXCEEDED_ERR:
+    case DOMException.QUOTA_EXCEEDED_ERR:
       return 'QUOTA_EXCEEDED_ERR';
-    case FileError.NOT_FOUND_ERR:
+    case DOMException.NOT_FOUND_ERR:
       return 'NOT_FOUND_ERR';
-    case FileError.SECURITY_ERR:
+    case DOMException.SECURITY_ERR:
       return 'SECURITY_ERR';
-    case FileError.INVALID_MODIFICATION_ERR:
+    case DOMException.INVALID_MODIFICATION_ERR:
       return 'INVALID_MODIFICATION_ERR';
-    case FileError.INVALID_STATE_ERR:
+    case DOMException.INVALID_STATE_ERR:
       return 'INVALID_STATE_ERR';
     default:
-      return 'Unknown Error';
+      return 'Unknown Error (' + e + ')';
   }
 }
 
diff --git a/content/test/data/fileapi/create_test.js b/content/test/data/fileapi/create_test.js
index 5026bb0..5640ded1 100644
--- a/content/test/data/fileapi/create_test.js
+++ b/content/test/data/fileapi/create_test.js
@@ -2,10 +2,68 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+var filename = 'test.exe';
+
+function readFile(fs)
+{
+  debug('Reading file.');
+  fs.root.getFile(filename, {create:false},
+    function(fileEntry) {
+      fileEntry.file(
+        function(blob) {
+          var reader = new FileReader();
+          reader.onloadend = function(e) {
+            if (e.loaded == 4) {
+              done();
+            } else {
+              fail('Incorrect read size: ' + e.loaded);
+            }
+          };
+          reader.onerror = function(e) {
+            fail('Read error:' + fileErrorToString(e));
+          };
+          reader.readAsArrayBuffer(blob);
+        },
+        function(e) { fail('read:' + fileErrorToString(e)); });
+    },
+    function(e) { fail('getFile:' + fileErrorToString(e)); });
+}
+
+function writeFile(fs)
+{
+  debug('Creating file.');
+  fs.root.getFile(filename, {create:true, exclusive:true},
+    function(fileEntry) {
+      fileEntry.createWriter(
+        function(writer) {
+          writer.onwriteend = function(e) {
+            readFile(fs);
+          }
+          writer.onerror = function(e) {
+            fail('Write:' + fileErrorToString(e));
+          };
+          var blob = new Blob([new Uint8Array([1, 2, 3, 4])],
+                              {type:'application/octet-stream'});
+          writer.write(blob);
+        },
+        function(e) { fail('createWriter:' + fileErrorToString(e)); });
+    },
+    function(e) { fail('getFile:' + fileErrorToString(e)); });
+}
+
 function requestFileSystemSuccess(fs)
 {
-  fs.root.getFile('foo', {create: true, exclusive: false}, done,
-                  function(e) { fail('Open:' + fileErrorToString(e)); } );
+  var fileDeleted = function() {
+    writeFile(fs);
+  };
+
+  fs.root.getFile( filename, {create:false},
+    function(fileEntry) {
+      fileEntry.remove(fileDeleted, function(e) {
+        fail('getFile:' + fileErrorToString(e));
+      });
+    },
+    fileDeleted);
 }
 
 function test()
diff --git a/content/test/gpu/gpu_tests/pixel_expectations.py b/content/test/gpu/gpu_tests/pixel_expectations.py
index 4a93632..2678156 100644
--- a/content/test/gpu/gpu_tests/pixel_expectations.py
+++ b/content/test/gpu/gpu_tests/pixel_expectations.py
@@ -45,6 +45,10 @@
     self.Fail('Pixel_ScissorTestWithPreserveDrawingBuffer',
         ['android'], bug=521588)
 
+    # Tests crashing on marshmallow bot
+    self.Fail('Pixel_CanvasLowLatency2D', ['android'], bug=865957)
+    self.Fail('Pixel_CanvasUnacceleratedLowLatency2D', ['android'], bug=865957)
+
     # TODO(vmiura) check / generate reference images for Android devices
     self.Fail('Pixel_SolidColorBackground', ['mac', 'android'], bug=624256)
 
diff --git a/content/test/test_blink_web_unit_test_support.cc b/content/test/test_blink_web_unit_test_support.cc
index 1fa44f90..3c06aafc4 100644
--- a/content/test/test_blink_web_unit_test_support.cc
+++ b/content/test/test_blink_web_unit_test_support.cc
@@ -97,12 +97,13 @@
 
   std::unique_ptr<blink::WebURLLoader> CreateURLLoader(
       const blink::WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) override {
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+          task_runner_handle) override {
     DCHECK(platform_);
     // This loader should be used only for process-local resources such as
     // data URLs.
     auto default_loader = std::make_unique<content::WebURLLoaderImpl>(
-        nullptr, task_runner, nullptr);
+        nullptr, std::move(task_runner_handle), nullptr);
     return platform_->GetURLLoaderMockFactory()->CreateURLLoader(
         std::move(default_loader));
   }
diff --git a/device/BUILD.gn b/device/BUILD.gn
index 2e2a85a..21cd7e4e 100644
--- a/device/BUILD.gn
+++ b/device/BUILD.gn
@@ -64,21 +64,21 @@
     "bluetooth/test/test_bluetooth_local_gatt_service_delegate.cc",
     "bluetooth/test/test_bluetooth_local_gatt_service_delegate.h",
     "bluetooth/uribeacon/uri_encoder_unittest.cc",
+    "fido/ble/fido_ble_connection_unittest.cc",
+    "fido/ble/fido_ble_device_unittest.cc",
+    "fido/ble/fido_ble_frames_unittest.cc",
     "fido/ctap_request_unittest.cc",
     "fido/ctap_response_unittest.cc",
     "fido/fake_fido_discovery_unittest.cc",
-    "fido/fido_ble_connection_unittest.cc",
-    "fido/fido_ble_device_unittest.cc",
-    "fido/fido_ble_frames_unittest.cc",
     "fido/fido_cable_device_unittest.cc",
     "fido/fido_cable_discovery_unittest.cc",
     "fido/fido_cable_handshake_handler_unittest.cc",
     "fido/fido_discovery_unittest.cc",
-    "fido/fido_hid_message_unittest.cc",
     "fido/fido_parsing_utils_unittest.cc",
     "fido/fido_request_handler_unittest.cc",
     "fido/get_assertion_handler_unittest.cc",
     "fido/get_assertion_task_unittest.cc",
+    "fido/hid/fido_hid_message_unittest.cc",
     "fido/mac/browsing_data_deletion_unittest.mm",
     "fido/mac/credential_metadata_unittest.cc",
     "fido/mac/get_assertion_operation_unittest_mac.mm",
@@ -130,8 +130,8 @@
   # Linux, requires udev.
   if (!is_linux_without_udev && !is_android) {
     sources += [
-      "fido/fido_hid_device_unittest.cc",
-      "fido/fido_hid_discovery_unittest.cc",
+      "fido/hid/fido_hid_device_unittest.cc",
+      "fido/hid/fido_hid_discovery_unittest.cc",
     ]
     deps += [
       "//device/fido:test_support",
@@ -253,7 +253,7 @@
       ]
     } else {
       # BLE discovery: works on Linux.
-      sources += [ "fido/fido_ble_discovery_unittest.cc" ]
+      sources += [ "fido/ble/fido_ble_discovery_unittest.cc" ]
     }
   }
 
diff --git a/device/fido/BUILD.gn b/device/fido/BUILD.gn
index a19d270a..6efd796 100644
--- a/device/fido/BUILD.gn
+++ b/device/fido/BUILD.gn
@@ -25,6 +25,20 @@
     "authenticator_selection_criteria.h",
     "authenticator_supported_options.cc",
     "authenticator_supported_options.h",
+    "ble/fido_ble_connection.cc",
+    "ble/fido_ble_connection.h",
+    "ble/fido_ble_device.cc",
+    "ble/fido_ble_device.h",
+    "ble/fido_ble_discovery.cc",
+    "ble/fido_ble_discovery.h",
+    "ble/fido_ble_discovery_base.cc",
+    "ble/fido_ble_discovery_base.h",
+    "ble/fido_ble_frames.cc",
+    "ble/fido_ble_frames.h",
+    "ble/fido_ble_transaction.cc",
+    "ble/fido_ble_transaction.h",
+    "ble/fido_ble_uuids.cc",
+    "ble/fido_ble_uuids.h",
     "ctap2_device_operation.h",
     "ctap_empty_authenticator_request.cc",
     "ctap_empty_authenticator_request.h",
@@ -40,20 +54,6 @@
     "fido_attestation_statement.cc",
     "fido_attestation_statement.h",
     "fido_authenticator.h",
-    "fido_ble_connection.cc",
-    "fido_ble_connection.h",
-    "fido_ble_device.cc",
-    "fido_ble_device.h",
-    "fido_ble_discovery.cc",
-    "fido_ble_discovery.h",
-    "fido_ble_discovery_base.cc",
-    "fido_ble_discovery_base.h",
-    "fido_ble_frames.cc",
-    "fido_ble_frames.h",
-    "fido_ble_transaction.cc",
-    "fido_ble_transaction.h",
-    "fido_ble_uuids.cc",
-    "fido_ble_uuids.h",
     "fido_cable_device.cc",
     "fido_cable_device.h",
     "fido_cable_discovery.cc",
@@ -68,10 +68,6 @@
     "fido_device_authenticator.h",
     "fido_discovery.cc",
     "fido_discovery.h",
-    "fido_hid_message.cc",
-    "fido_hid_message.h",
-    "fido_hid_packet.cc",
-    "fido_hid_packet.h",
     "fido_parsing_utils.cc",
     "fido_parsing_utils.h",
     "fido_request_handler.h",
@@ -84,6 +80,10 @@
     "get_assertion_request_handler.h",
     "get_assertion_task.cc",
     "get_assertion_task.h",
+    "hid/fido_hid_message.cc",
+    "hid/fido_hid_message.h",
+    "hid/fido_hid_packet.cc",
+    "hid/fido_hid_packet.h",
     "make_credential_request_handler.cc",
     "make_credential_request_handler.h",
     "make_credential_task.cc",
@@ -141,10 +141,10 @@
   # HID is not supported on Android.
   if (!is_android) {
     sources += [
-      "fido_hid_device.cc",
-      "fido_hid_device.h",
-      "fido_hid_discovery.cc",
-      "fido_hid_discovery.h",
+      "hid/fido_hid_device.cc",
+      "hid/fido_hid_device.h",
+      "hid/fido_hid_discovery.cc",
+      "hid/fido_hid_discovery.h",
     ]
 
     deps += [
@@ -187,8 +187,8 @@
   testonly = true
 
   sources = [
-    "mock_fido_ble_connection.cc",
-    "mock_fido_ble_connection.h",
+    "ble/mock_fido_ble_connection.cc",
+    "ble/mock_fido_ble_connection.h",
     "mock_fido_device.cc",
     "mock_fido_device.h",
     "mock_fido_discovery_observer.cc",
@@ -205,7 +205,7 @@
 
 fuzzer_test("fido_hid_message_fuzzer") {
   sources = [
-    "fido_hid_message_fuzzer.cc",
+    "hid/fido_hid_message_fuzzer.cc",
   ]
   deps = [
     ":fido",
@@ -216,7 +216,7 @@
 
 fuzzer_test("fido_ble_frames_fuzzer") {
   sources = [
-    "fido_ble_frames_fuzzer.cc",
+    "ble/fido_ble_frames_fuzzer.cc",
   ]
   deps = [
     ":fido",
@@ -272,8 +272,8 @@
   # Android doesn't compile. Linux requires udev.
   if (!is_linux_without_udev && !is_android) {
     sources += [
-      "fake_hid_impl_for_testing.cc",
-      "fake_hid_impl_for_testing.h",
+      "hid/fake_hid_impl_for_testing.cc",
+      "hid/fake_hid_impl_for_testing.h",
     ]
   }
 }
diff --git a/device/fido/fido_ble_connection.cc b/device/fido/ble/fido_ble_connection.cc
similarity index 99%
rename from device/fido/fido_ble_connection.cc
rename to device/fido/ble/fido_ble_connection.cc
index f6eff88..094f443 100644
--- a/device/fido/fido_ble_connection.cc
+++ b/device/fido/ble/fido_ble_connection.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 "device/fido/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_connection.h"
 
 #include <utility>
 
@@ -16,7 +16,7 @@
 #include "device/bluetooth/bluetooth_remote_gatt_characteristic.h"
 #include "device/bluetooth/bluetooth_remote_gatt_service.h"
 #include "device/bluetooth/bluetooth_uuid.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 
 namespace device {
 
diff --git a/device/fido/fido_ble_connection.h b/device/fido/ble/fido_ble_connection.h
similarity index 97%
rename from device/fido/fido_ble_connection.h
rename to device/fido/ble/fido_ble_connection.h
index f7efb704..29366b6 100644
--- a/device/fido/fido_ble_connection.h
+++ b/device/fido/ble/fido_ble_connection.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 DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
-#define DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_CONNECTION_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_CONNECTION_H_
 
 #include <stdint.h>
 
@@ -162,4 +162,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_CONNECTION_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_CONNECTION_H_
diff --git a/device/fido/fido_ble_connection_unittest.cc b/device/fido/ble/fido_ble_connection_unittest.cc
similarity index 99%
rename from device/fido/fido_ble_connection_unittest.cc
rename to device/fido/ble/fido_ble_connection_unittest.cc
index 4e767f5..c214c81 100644
--- a/device/fido/fido_ble_connection_unittest.cc
+++ b/device/fido/ble/fido_ble_connection_unittest.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 "device/fido/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_connection.h"
 
 #include <utility>
 
@@ -19,7 +19,7 @@
 #include "device/bluetooth/test/mock_bluetooth_gatt_connection.h"
 #include "device/bluetooth/test/mock_bluetooth_gatt_notify_session.h"
 #include "device/bluetooth/test/mock_bluetooth_gatt_service.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 #include "device/fido/test_callback_receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/fido/fido_ble_device.cc b/device/fido/ble/fido_ble_device.cc
similarity index 97%
rename from device/fido/fido_ble_device.cc
rename to device/fido/ble/fido_ble_device.cc
index e292afb..d7804eac 100644
--- a/device/fido/fido_ble_device.cc
+++ b/device/fido/ble/fido_ble_device.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 "device/fido/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_device.h"
 
 #include <bitset>
 
@@ -10,8 +10,8 @@
 #include "base/strings/string_piece.h"
 #include "components/apdu/apdu_response.h"
 #include "device/bluetooth/bluetooth_uuid.h"
-#include "device/fido/fido_ble_frames.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 #include "device/fido/fido_constants.h"
 
 namespace device {
diff --git a/device/fido/fido_ble_device.h b/device/fido/ble/fido_ble_device.h
similarity index 91%
rename from device/fido/fido_ble_device.h
rename to device/fido/ble/fido_ble_device.h
index 41d617e2..51baf70 100644
--- a/device/fido/fido_ble_device.h
+++ b/device/fido/ble/fido_ble_device.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 DEVICE_FIDO_FIDO_BLE_DEVICE_H_
-#define DEVICE_FIDO_FIDO_BLE_DEVICE_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_DEVICE_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_DEVICE_H_
 
 #include <memory>
 #include <string>
@@ -17,8 +17,8 @@
 #include "base/optional.h"
 #include "base/strings/string_piece.h"
 #include "base/timer/timer.h"
-#include "device/fido/fido_ble_connection.h"
-#include "device/fido/fido_ble_transaction.h"
+#include "device/fido/ble/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_transaction.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_device.h"
 
@@ -93,4 +93,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_DEVICE_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_DEVICE_H_
diff --git a/device/fido/fido_ble_device_unittest.cc b/device/fido/ble/fido_ble_device_unittest.cc
similarity index 98%
rename from device/fido/fido_ble_device_unittest.cc
rename to device/fido/ble/fido_ble_device_unittest.cc
index 4632da3..b40cba2 100644
--- a/device/fido/fido_ble_device_unittest.cc
+++ b/device/fido/ble/fido_ble_device_unittest.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 "device/fido/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_device.h"
 
 #include "base/optional.h"
 #include "base/test/bind_test_util.h"
@@ -11,10 +11,10 @@
 #include "device/bluetooth/test/bluetooth_test.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
 #include "device/bluetooth/test/mock_bluetooth_device.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_uuids.h"
+#include "device/fido/ble/mock_fido_ble_connection.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_parsing_utils.h"
-#include "device/fido/mock_fido_ble_connection.h"
 #include "device/fido/test_callback_receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/fido/fido_ble_discovery.cc b/device/fido/ble/fido_ble_discovery.cc
similarity index 95%
rename from device/fido/fido_ble_discovery.cc
rename to device/fido/ble/fido_ble_discovery.cc
index 16de4ad..41b4c542 100644
--- a/device/fido/fido_ble_discovery.cc
+++ b/device/fido/ble/fido_ble_discovery.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 "device/fido/fido_ble_discovery.h"
+#include "device/fido/ble/fido_ble_discovery.h"
 
 #include <utility>
 
@@ -12,8 +12,8 @@
 #include "device/bluetooth/bluetooth_common.h"
 #include "device/bluetooth/bluetooth_discovery_session.h"
 #include "device/bluetooth/bluetooth_uuid.h"
-#include "device/fido/fido_ble_device.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 
 namespace device {
 
diff --git a/device/fido/fido_ble_discovery.h b/device/fido/ble/fido_ble_discovery.h
similarity index 84%
rename from device/fido/fido_ble_discovery.h
rename to device/fido/ble/fido_ble_discovery.h
index abf6f27..568c658e 100644
--- a/device/fido/fido_ble_discovery.h
+++ b/device/fido/ble/fido_ble_discovery.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
-#define DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_H_
 
 #include <memory>
 
 #include "base/component_export.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
-#include "device/fido/fido_ble_discovery_base.h"
+#include "device/fido/ble/fido_ble_discovery_base.h"
 
 namespace device {
 
@@ -43,4 +43,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_DISCOVERY_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_H_
diff --git a/device/fido/fido_ble_discovery_base.cc b/device/fido/ble/fido_ble_discovery_base.cc
similarity index 98%
rename from device/fido/fido_ble_discovery_base.cc
rename to device/fido/ble/fido_ble_discovery_base.cc
index b118bc1..7041306 100644
--- a/device/fido/fido_ble_discovery_base.cc
+++ b/device/fido/ble/fido_ble_discovery_base.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 "device/fido/fido_ble_discovery_base.h"
+#include "device/fido/ble/fido_ble_discovery_base.h"
 
 #include <utility>
 
diff --git a/device/fido/fido_ble_discovery_base.h b/device/fido/ble/fido_ble_discovery_base.h
similarity index 89%
rename from device/fido/fido_ble_discovery_base.h
rename to device/fido/ble/fido_ble_discovery_base.h
index dd4a0f14..2743be89 100644
--- a/device/fido/fido_ble_discovery_base.h
+++ b/device/fido/ble/fido_ble_discovery_base.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 DEVICE_FIDO_FIDO_BLE_DISCOVERY_BASE_H_
-#define DEVICE_FIDO_FIDO_BLE_DISCOVERY_BASE_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_BASE_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_BASE_H_
 
 #include <memory>
 
@@ -53,4 +53,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_DISCOVERY_BASE_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_DISCOVERY_BASE_H_
diff --git a/device/fido/fido_ble_discovery_unittest.cc b/device/fido/ble/fido_ble_discovery_unittest.cc
similarity index 97%
rename from device/fido/fido_ble_discovery_unittest.cc
rename to device/fido/ble/fido_ble_discovery_unittest.cc
index 89f689a4..bd0691c2 100644
--- a/device/fido/fido_ble_discovery_unittest.cc
+++ b/device/fido/ble/fido_ble_discovery_unittest.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 "device/fido/fido_ble_discovery.h"
+#include "device/fido/ble/fido_ble_discovery.h"
 
 #include <string>
 
@@ -10,7 +10,7 @@
 #include "base/run_loop.h"
 #include "build/build_config.h"
 #include "device/bluetooth/test/bluetooth_test.h"
-#include "device/fido/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_device.h"
 #include "device/fido/mock_fido_discovery_observer.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/fido/fido_ble_frames.cc b/device/fido/ble/fido_ble_frames.cc
similarity index 98%
rename from device/fido/fido_ble_frames.cc
rename to device/fido/ble/fido_ble_frames.cc
index 411b560..0c50b56 100644
--- a/device/fido/fido_ble_frames.cc
+++ b/device/fido/ble/fido_ble_frames.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 "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_frames.h"
 
 #include <algorithm>
 #include <limits>
diff --git a/device/fido/fido_ble_frames.h b/device/fido/ble/fido_ble_frames.h
similarity index 97%
rename from device/fido/fido_ble_frames.h
rename to device/fido/ble/fido_ble_frames.h
index d326251..ea4d16a 100644
--- a/device/fido/fido_ble_frames.h
+++ b/device/fido/ble/fido_ble_frames.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 DEVICE_FIDO_FIDO_BLE_FRAMES_H_
-#define DEVICE_FIDO_FIDO_BLE_FRAMES_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_FRAMES_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_FRAMES_H_
 
 #include <stdint.h>
 
@@ -181,4 +181,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_FRAMES_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_FRAMES_H_
diff --git a/device/fido/fido_ble_frames_fuzzer.cc b/device/fido/ble/fido_ble_frames_fuzzer.cc
similarity index 97%
rename from device/fido/fido_ble_frames_fuzzer.cc
rename to device/fido/ble/fido_ble_frames_fuzzer.cc
index 1e3627d..63b8606 100644
--- a/device/fido/fido_ble_frames_fuzzer.cc
+++ b/device/fido/ble/fido_ble_frames_fuzzer.cc
@@ -7,7 +7,7 @@
 
 #include <vector>
 
-#include "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_frames.h"
 #include "device/fido/fido_constants.h"
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* raw_data, size_t size) {
diff --git a/device/fido/fido_ble_frames_unittest.cc b/device/fido/ble/fido_ble_frames_unittest.cc
similarity index 98%
rename from device/fido/fido_ble_frames_unittest.cc
rename to device/fido/ble/fido_ble_frames_unittest.cc
index 226c58f0..2d20c8d 100644
--- a/device/fido/fido_ble_frames_unittest.cc
+++ b/device/fido/ble/fido_ble_frames_unittest.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 "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_frames.h"
 
 #include <vector>
 
diff --git a/device/fido/fido_ble_transaction.cc b/device/fido/ble/fido_ble_transaction.cc
similarity index 97%
rename from device/fido/fido_ble_transaction.cc
rename to device/fido/ble/fido_ble_transaction.cc
index 578395b0a..890b3d4 100644
--- a/device/fido/fido_ble_transaction.cc
+++ b/device/fido/ble/fido_ble_transaction.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "device/fido/fido_ble_transaction.h"
+#include "device/fido/ble/fido_ble_transaction.h"
 
 #include <utility>
 
-#include "device/fido/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_connection.h"
 #include "device/fido/fido_constants.h"
 
 namespace device {
diff --git a/device/fido/fido_ble_transaction.h b/device/fido/ble/fido_ble_transaction.h
similarity index 89%
rename from device/fido/fido_ble_transaction.h
rename to device/fido/ble/fido_ble_transaction.h
index d316086..a25f06e6 100644
--- a/device/fido/fido_ble_transaction.h
+++ b/device/fido/ble/fido_ble_transaction.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 DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
-#define DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_TRANSACTION_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_TRANSACTION_H_
 
 #include <memory>
 #include <vector>
@@ -13,7 +13,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "base/timer/timer.h"
-#include "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_frames.h"
 
 namespace device {
 
@@ -61,4 +61,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_TRANSACTION_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_TRANSACTION_H_
diff --git a/device/fido/fido_ble_uuids.cc b/device/fido/ble/fido_ble_uuids.cc
similarity index 95%
rename from device/fido/fido_ble_uuids.cc
rename to device/fido/ble/fido_ble_uuids.cc
index 2f96f75..a8f7347 100644
--- a/device/fido/fido_ble_uuids.cc
+++ b/device/fido/ble/fido_ble_uuids.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 "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 
 #include "build/build_config.h"
 
diff --git a/device/fido/fido_ble_uuids.h b/device/fido/ble/fido_ble_uuids.h
similarity index 90%
rename from device/fido/fido_ble_uuids.h
rename to device/fido/ble/fido_ble_uuids.h
index a2ead64..5e2131e3d 100644
--- a/device/fido/fido_ble_uuids.h
+++ b/device/fido/ble/fido_ble_uuids.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 DEVICE_FIDO_FIDO_BLE_UUIDS_H_
-#define DEVICE_FIDO_FIDO_BLE_UUIDS_H_
+#ifndef DEVICE_FIDO_BLE_FIDO_BLE_UUIDS_H_
+#define DEVICE_FIDO_BLE_FIDO_BLE_UUIDS_H_
 
 #include "base/component_export.h"
 
@@ -28,4 +28,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_BLE_UUIDS_H_
+#endif  // DEVICE_FIDO_BLE_FIDO_BLE_UUIDS_H_
diff --git a/device/fido/mock_fido_ble_connection.cc b/device/fido/ble/mock_fido_ble_connection.cc
similarity index 94%
rename from device/fido/mock_fido_ble_connection.cc
rename to device/fido/ble/mock_fido_ble_connection.cc
index c9bbab3..bb42a169 100644
--- a/device/fido/mock_fido_ble_connection.cc
+++ b/device/fido/ble/mock_fido_ble_connection.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 "device/fido/mock_fido_ble_connection.h"
+#include "device/fido/ble/mock_fido_ble_connection.h"
 
 #include <utility>
 
diff --git a/device/fido/mock_fido_ble_connection.h b/device/fido/ble/mock_fido_ble_connection.h
similarity index 91%
rename from device/fido/mock_fido_ble_connection.h
rename to device/fido/ble/mock_fido_ble_connection.h
index a2db59f..6fa4ea8d 100644
--- a/device/fido/mock_fido_ble_connection.h
+++ b/device/fido/ble/mock_fido_ble_connection.h
@@ -2,15 +2,15 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef DEVICE_FIDO_MOCK_FIDO_BLE_CONNECTION_H_
-#define DEVICE_FIDO_MOCK_FIDO_BLE_CONNECTION_H_
+#ifndef DEVICE_FIDO_BLE_MOCK_FIDO_BLE_CONNECTION_H_
+#define DEVICE_FIDO_BLE_MOCK_FIDO_BLE_CONNECTION_H_
 
 #include <string>
 #include <vector>
 
 #include "base/component_export.h"
 #include "base/macros.h"
-#include "device/fido/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_connection.h"
 #include "testing/gmock/include/gmock/gmock.h"
 
 namespace device {
diff --git a/device/fido/fido_cable_device.cc b/device/fido/fido_cable_device.cc
index 31cf975d..a0581df1 100644
--- a/device/fido/fido_cable_device.cc
+++ b/device/fido/fido_cable_device.cc
@@ -8,8 +8,8 @@
 
 #include "base/strings/string_piece.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "device/fido/fido_ble_connection.h"
-#include "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_connection.h"
+#include "device/fido/ble/fido_ble_frames.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_parsing_utils.h"
 
diff --git a/device/fido/fido_cable_device.h b/device/fido/fido_cable_device.h
index 993df40..9475ada 100644
--- a/device/fido/fido_cable_device.h
+++ b/device/fido/fido_cable_device.h
@@ -16,7 +16,7 @@
 #include "base/memory/weak_ptr.h"
 #include "base/optional.h"
 #include "crypto/aead.h"
-#include "device/fido/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_device.h"
 
 namespace device {
 
diff --git a/device/fido/fido_cable_device_unittest.cc b/device/fido/fido_cable_device_unittest.cc
index ec76ea0..ab51af3 100644
--- a/device/fido/fido_cable_device_unittest.cc
+++ b/device/fido/fido_cable_device_unittest.cc
@@ -16,8 +16,8 @@
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "crypto/aead.h"
 #include "device/bluetooth/test/bluetooth_test.h"
+#include "device/fido/ble/mock_fido_ble_connection.h"
 #include "device/fido/fido_parsing_utils.h"
-#include "device/fido/mock_fido_ble_connection.h"
 #include "device/fido/test_callback_receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/fido/fido_cable_discovery.cc b/device/fido/fido_cable_discovery.cc
index 5911dda..f6e0ddb 100644
--- a/device/fido/fido_cable_discovery.cc
+++ b/device/fido/fido_cable_discovery.cc
@@ -17,7 +17,7 @@
 #include "device/bluetooth/bluetooth_advertisement.h"
 #include "device/bluetooth/bluetooth_discovery_session.h"
 #include "device/bluetooth/bluetooth_uuid.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 #include "device/fido/fido_cable_device.h"
 #include "device/fido/fido_cable_handshake_handler.h"
 #include "device/fido/fido_parsing_utils.h"
diff --git a/device/fido/fido_cable_discovery.h b/device/fido/fido_cable_discovery.h
index a3b9ea2..2107095 100644
--- a/device/fido/fido_cable_discovery.h
+++ b/device/fido/fido_cable_discovery.h
@@ -18,7 +18,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
-#include "device/fido/fido_ble_discovery_base.h"
+#include "device/fido/ble/fido_ble_discovery_base.h"
 
 namespace device {
 
diff --git a/device/fido/fido_cable_discovery_unittest.cc b/device/fido/fido_cable_discovery_unittest.cc
index 859955d..8d64848 100644
--- a/device/fido/fido_cable_discovery_unittest.cc
+++ b/device/fido/fido_cable_discovery_unittest.cc
@@ -15,8 +15,8 @@
 #include "device/bluetooth/bluetooth_advertisement.h"
 #include "device/bluetooth/test/bluetooth_test.h"
 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
-#include "device/fido/fido_ble_device.h"
-#include "device/fido/fido_ble_uuids.h"
+#include "device/fido/ble/fido_ble_device.h"
+#include "device/fido/ble/fido_ble_uuids.h"
 #include "device/fido/fido_cable_handshake_handler.h"
 #include "device/fido/fido_parsing_utils.h"
 #include "device/fido/mock_fido_discovery_observer.h"
diff --git a/device/fido/fido_cable_handshake_handler_unittest.cc b/device/fido/fido_cable_handshake_handler_unittest.cc
index 554707d..376eb20 100644
--- a/device/fido/fido_cable_handshake_handler_unittest.cc
+++ b/device/fido/fido_cable_handshake_handler_unittest.cc
@@ -19,11 +19,11 @@
 #include "crypto/hkdf.h"
 #include "crypto/hmac.h"
 #include "device/bluetooth/test/bluetooth_test.h"
-#include "device/fido/fido_ble_frames.h"
+#include "device/fido/ble/fido_ble_frames.h"
+#include "device/fido/ble/mock_fido_ble_connection.h"
 #include "device/fido/fido_cable_device.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_parsing_utils.h"
-#include "device/fido/mock_fido_ble_connection.h"
 #include "device/fido/test_callback_receiver.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
diff --git a/device/fido/fido_discovery.cc b/device/fido/fido_discovery.cc
index 98d4f67..4bab356 100644
--- a/device/fido/fido_discovery.cc
+++ b/device/fido/fido_discovery.cc
@@ -8,12 +8,12 @@
 
 #include "base/bind.h"
 #include "build/build_config.h"
-#include "device/fido/fido_ble_discovery.h"
+#include "device/fido/ble/fido_ble_discovery.h"
 #include "device/fido/fido_device.h"
 
 // HID is not supported on Android.
 #if !defined(OS_ANDROID)
-#include "device/fido/fido_hid_discovery.h"
+#include "device/fido/hid/fido_hid_discovery.h"
 #endif  // !defined(OS_ANDROID)
 
 namespace device {
diff --git a/device/fido/fake_hid_impl_for_testing.cc b/device/fido/hid/fake_hid_impl_for_testing.cc
similarity index 98%
rename from device/fido/fake_hid_impl_for_testing.cc
rename to device/fido/hid/fake_hid_impl_for_testing.cc
index dc2a5d5..cf86174 100644
--- a/device/fido/fake_hid_impl_for_testing.cc
+++ b/device/fido/hid/fake_hid_impl_for_testing.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 "device/fido/fake_hid_impl_for_testing.h"
+#include "device/fido/hid/fake_hid_impl_for_testing.h"
 
 #include <utility>
 
diff --git a/device/fido/fake_hid_impl_for_testing.h b/device/fido/hid/fake_hid_impl_for_testing.h
similarity index 96%
rename from device/fido/fake_hid_impl_for_testing.h
rename to device/fido/hid/fake_hid_impl_for_testing.h
index 552adde..b69945ad 100644
--- a/device/fido/fake_hid_impl_for_testing.h
+++ b/device/fido/hid/fake_hid_impl_for_testing.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 DEVICE_FIDO_FAKE_HID_IMPL_FOR_TESTING_H_
-#define DEVICE_FIDO_FAKE_HID_IMPL_FOR_TESTING_H_
+#ifndef DEVICE_FIDO_HID_FAKE_HID_IMPL_FOR_TESTING_H_
+#define DEVICE_FIDO_HID_FAKE_HID_IMPL_FOR_TESTING_H_
 
 #include <map>
 #include <string>
@@ -120,4 +120,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FAKE_HID_IMPL_FOR_TESTING_H_
+#endif  // DEVICE_FIDO_HID_FAKE_HID_IMPL_FOR_TESTING_H_
diff --git a/device/fido/fido_hid_device.cc b/device/fido/hid/fido_hid_device.cc
similarity index 99%
rename from device/fido/fido_hid_device.cc
rename to device/fido/hid/fido_hid_device.cc
index 5dee08a..546c9d0 100644
--- a/device/fido/fido_hid_device.cc
+++ b/device/fido/hid/fido_hid_device.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 "device/fido/fido_hid_device.h"
+#include "device/fido/hid/fido_hid_device.h"
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -10,7 +10,7 @@
 #include "base/logging.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "crypto/random.h"
-#include "device/fido/fido_hid_message.h"
+#include "device/fido/hid/fido_hid_message.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 
 namespace device {
diff --git a/device/fido/fido_hid_device.h b/device/fido/hid/fido_hid_device.h
similarity index 96%
rename from device/fido/fido_hid_device.h
rename to device/fido/hid/fido_hid_device.h
index 10f34023..eeea8d7 100644
--- a/device/fido/fido_hid_device.h
+++ b/device/fido/hid/fido_hid_device.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 DEVICE_FIDO_FIDO_HID_DEVICE_H_
-#define DEVICE_FIDO_FIDO_HID_DEVICE_H_
+#ifndef DEVICE_FIDO_HID_FIDO_HID_DEVICE_H_
+#define DEVICE_FIDO_HID_FIDO_HID_DEVICE_H_
 
 #include <string>
 #include <utility>
@@ -120,4 +120,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_HID_DEVICE_H_
+#endif  // DEVICE_FIDO_HID_FIDO_HID_DEVICE_H_
diff --git a/device/fido/fido_hid_device_unittest.cc b/device/fido/hid/fido_hid_device_unittest.cc
similarity index 97%
rename from device/fido/fido_hid_device_unittest.cc
rename to device/fido/hid/fido_hid_device_unittest.cc
index 88c8673..a5cfc33 100644
--- a/device/fido/fido_hid_device_unittest.cc
+++ b/device/fido/hid/fido_hid_device_unittest.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 "device/fido/fido_hid_device.h"
+#include "device/fido/hid/fido_hid_device.h"
 
 #include <memory>
 #include <tuple>
@@ -14,9 +14,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "base/test/scoped_task_environment.h"
 #include "base/threading/thread_task_runner_handle.h"
-#include "device/fido/fake_hid_impl_for_testing.h"
 #include "device/fido/fido_constants.h"
 #include "device/fido/fido_parsing_utils.h"
+#include "device/fido/hid/fake_hid_impl_for_testing.h"
 #include "device/fido/test_callback_receiver.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
@@ -256,13 +256,12 @@
 
   EXPECT_CALL(mock_connection, ReadPtr(_))
       // First response to HID_INIT request with an incorrect nonce.
-      .WillOnce(
-          Invoke([kIncorrectNonce, &mock_connection](auto* cb) {
-            std::move(*cb).Run(
-                true, 0,
-                CreateMockInitResponse(
-                    kIncorrectNonce, mock_connection.connection_channel_id()));
-          }))
+      .WillOnce(Invoke([kIncorrectNonce, &mock_connection](auto* cb) {
+        std::move(*cb).Run(
+            true, 0,
+            CreateMockInitResponse(kIncorrectNonce,
+                                   mock_connection.connection_channel_id()));
+      }))
       // Second response to HID_INIT request with a correct nonce.
       .WillOnce(Invoke(
           [&mock_connection](device::mojom::HidConnection::ReadCallback* cb) {
diff --git a/device/fido/fido_hid_discovery.cc b/device/fido/hid/fido_hid_discovery.cc
similarity index 95%
rename from device/fido/fido_hid_discovery.cc
rename to device/fido/hid/fido_hid_discovery.cc
index 483b4b35..6a5b3ee 100644
--- a/device/fido/fido_hid_discovery.cc
+++ b/device/fido/hid/fido_hid_discovery.cc
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "device/fido/fido_hid_discovery.h"
+#include "device/fido/hid/fido_hid_discovery.h"
 
 #include <utility>
 
-#include "device/fido/fido_hid_device.h"
+#include "device/fido/hid/fido_hid_device.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 #include "services/device/public/mojom/constants.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
diff --git a/device/fido/fido_hid_discovery.h b/device/fido/hid/fido_hid_discovery.h
similarity index 92%
rename from device/fido/fido_hid_discovery.h
rename to device/fido/hid/fido_hid_discovery.h
index 94f7042..c6a5e78 100644
--- a/device/fido/fido_hid_discovery.h
+++ b/device/fido/hid/fido_hid_discovery.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 DEVICE_FIDO_FIDO_HID_DISCOVERY_H_
-#define DEVICE_FIDO_FIDO_HID_DISCOVERY_H_
+#ifndef DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_
+#define DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_
 
 #include <memory>
 #include <vector>
@@ -53,4 +53,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_HID_DISCOVERY_H_
+#endif  // DEVICE_FIDO_HID_FIDO_HID_DISCOVERY_H_
diff --git a/device/fido/fido_hid_discovery_unittest.cc b/device/fido/hid/fido_hid_discovery_unittest.cc
similarity index 96%
rename from device/fido/fido_hid_discovery_unittest.cc
rename to device/fido/hid/fido_hid_discovery_unittest.cc
index 7f1cff5..75c1c70 100644
--- a/device/fido/fido_hid_discovery_unittest.cc
+++ b/device/fido/hid/fido_hid_discovery_unittest.cc
@@ -2,14 +2,14 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "device/fido/fido_hid_discovery.h"
+#include "device/fido/hid/fido_hid_discovery.h"
 
 #include <string>
 #include <utility>
 
 #include "base/test/scoped_task_environment.h"
-#include "device/fido/fake_hid_impl_for_testing.h"
-#include "device/fido/fido_hid_device.h"
+#include "device/fido/hid/fake_hid_impl_for_testing.h"
+#include "device/fido/hid/fido_hid_device.h"
 #include "device/fido/mock_fido_discovery_observer.h"
 #include "services/device/public/mojom/constants.mojom.h"
 #include "services/device/public/mojom/hid.mojom.h"
diff --git a/device/fido/fido_hid_message.cc b/device/fido/hid/fido_hid_message.cc
similarity index 98%
rename from device/fido/fido_hid_message.cc
rename to device/fido/hid/fido_hid_message.cc
index d95598c..3040696 100644
--- a/device/fido/fido_hid_message.cc
+++ b/device/fido/hid/fido_hid_message.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 "device/fido/fido_hid_message.h"
+#include "device/fido/hid/fido_hid_message.h"
 
 #include <algorithm>
 #include <numeric>
diff --git a/device/fido/fido_hid_message.h b/device/fido/hid/fido_hid_message.h
similarity index 92%
rename from device/fido/fido_hid_message.h
rename to device/fido/hid/fido_hid_message.h
index ecf386cd..715c68e8 100644
--- a/device/fido/fido_hid_message.h
+++ b/device/fido/hid/fido_hid_message.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 DEVICE_FIDO_FIDO_HID_MESSAGE_H_
-#define DEVICE_FIDO_FIDO_HID_MESSAGE_H_
+#ifndef DEVICE_FIDO_HID_FIDO_HID_MESSAGE_H_
+#define DEVICE_FIDO_HID_FIDO_HID_MESSAGE_H_
 
 #include <stddef.h>
 #include <stdint.h>
@@ -19,7 +19,7 @@
 #include "base/macros.h"
 #include "base/optional.h"
 #include "device/fido/fido_constants.h"
-#include "device/fido/fido_hid_packet.h"
+#include "device/fido/hid/fido_hid_packet.h"
 
 namespace device {
 
@@ -72,4 +72,4 @@
 
 }  // namespace device
 
-#endif  // DEVICE_FIDO_FIDO_HID_MESSAGE_H_
+#endif  // DEVICE_FIDO_HID_FIDO_HID_MESSAGE_H_
diff --git a/device/fido/fido_hid_message_fuzzer.cc b/device/fido/hid/fido_hid_message_fuzzer.cc
similarity index 95%
rename from device/fido/fido_hid_message_fuzzer.cc
rename to device/fido/hid/fido_hid_message_fuzzer.cc
index 4357cb4..8b267c8 100644
--- a/device/fido/fido_hid_message_fuzzer.cc
+++ b/device/fido/hid/fido_hid_message_fuzzer.cc
@@ -9,7 +9,7 @@
 #include <vector>
 
 #include "base/containers/span.h"
-#include "device/fido/fido_hid_message.h"
+#include "device/fido/hid/fido_hid_message.h"
 
 namespace device {
 
diff --git a/device/fido/fido_hid_message_unittest.cc b/device/fido/hid/fido_hid_message_unittest.cc
similarity index 98%
rename from device/fido/fido_hid_message_unittest.cc
rename to device/fido/hid/fido_hid_message_unittest.cc
index b819454d..610af543 100644
--- a/device/fido/fido_hid_message_unittest.cc
+++ b/device/fido/hid/fido_hid_message_unittest.cc
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "device/fido/fido_hid_message.h"
+#include "device/fido/hid/fido_hid_message.h"
 
 #include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
 #include "device/fido/fido_constants.h"
-#include "device/fido/fido_hid_packet.h"
+#include "device/fido/hid/fido_hid_packet.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
diff --git a/device/fido/fido_hid_packet.cc b/device/fido/hid/fido_hid_packet.cc
similarity index 98%
rename from device/fido/fido_hid_packet.cc
rename to device/fido/hid/fido_hid_packet.cc
index 10a1cebb..0024cdd 100644
--- a/device/fido/fido_hid_packet.cc
+++ b/device/fido/hid/fido_hid_packet.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 "device/fido/fido_hid_packet.h"
+#include "device/fido/hid/fido_hid_packet.h"
 
 #include <algorithm>
 #include <utility>
diff --git a/device/fido/fido_hid_packet.h b/device/fido/hid/fido_hid_packet.h
similarity index 97%
rename from device/fido/fido_hid_packet.h
rename to device/fido/hid/fido_hid_packet.h
index 128f1ed..2c3fbbc 100644
--- a/device/fido/fido_hid_packet.h
+++ b/device/fido/hid/fido_hid_packet.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 DEVICE_FIDO_FIDO_HID_PACKET_H_
-#define DEVICE_FIDO_FIDO_HID_PACKET_H_
+#ifndef DEVICE_FIDO_HID_FIDO_HID_PACKET_H_
+#define DEVICE_FIDO_HID_FIDO_HID_PACKET_H_
 
 #include <stddef.h>
 #include <stdint.h>
diff --git a/device/usb/BUILD.gn b/device/usb/BUILD.gn
index 5b183fcc..3248fe6b4 100644
--- a/device/usb/BUILD.gn
+++ b/device/usb/BUILD.gn
@@ -81,6 +81,9 @@
 
   if (is_win || is_mac) {
     sources += [
+      "scoped_libusb_device_handle.cc",
+      "scoped_libusb_device_handle.h",
+      "scoped_libusb_device_ref.cc",
       "scoped_libusb_device_ref.h",
       "usb_context.cc",
       "usb_context.h",
diff --git a/device/usb/scoped_libusb_device_handle.cc b/device/usb/scoped_libusb_device_handle.cc
new file mode 100644
index 0000000..4223a81
--- /dev/null
+++ b/device/usb/scoped_libusb_device_handle.cc
@@ -0,0 +1,37 @@
+// 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.
+
+#include "device/usb/scoped_libusb_device_handle.h"
+
+#include "device/usb/usb_context.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+namespace device {
+
+ScopedLibusbDeviceHandle::ScopedLibusbDeviceHandle(
+    libusb_device_handle* handle,
+    scoped_refptr<UsbContext> context)
+    : handle_(handle), context_(std::move(context)) {}
+
+ScopedLibusbDeviceHandle::ScopedLibusbDeviceHandle(
+    ScopedLibusbDeviceHandle&& other)
+    : handle_(other.handle_), context_(std::move(other.context_)) {
+  other.handle_ = nullptr;
+}
+
+ScopedLibusbDeviceHandle::~ScopedLibusbDeviceHandle() {
+  Reset();
+}
+
+void ScopedLibusbDeviceHandle::Reset() {
+  libusb_close(handle_);
+  handle_ = nullptr;
+  context_.reset();
+}
+
+bool ScopedLibusbDeviceHandle::IsValid() const {
+  return handle_ != nullptr;
+}
+
+}  // namespace device
diff --git a/device/usb/scoped_libusb_device_handle.h b/device/usb/scoped_libusb_device_handle.h
new file mode 100644
index 0000000..a4eb378
--- /dev/null
+++ b/device/usb/scoped_libusb_device_handle.h
@@ -0,0 +1,41 @@
+// 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.
+
+#ifndef DEVICE_USB_SCOPED_LIBUSB_DEVICE_HANDLE_H_
+#define DEVICE_USB_SCOPED_LIBUSB_DEVICE_HANDLE_H_
+
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+
+struct libusb_device_handle;
+
+namespace device {
+
+class UsbContext;
+
+// This class owns a reference to a libusb_device_handle as well as a reference
+// to the libusb_context. The libusb_context must outlive any
+// libusb_device_handle instances created from it.
+class ScopedLibusbDeviceHandle {
+ public:
+  ScopedLibusbDeviceHandle(libusb_device_handle* handle,
+                           scoped_refptr<UsbContext> context);
+  ScopedLibusbDeviceHandle(ScopedLibusbDeviceHandle&& other);
+  ~ScopedLibusbDeviceHandle();
+
+  libusb_device_handle* get() const { return handle_; }
+
+  void Reset();
+  bool IsValid() const;
+
+ private:
+  libusb_device_handle* handle_;
+  scoped_refptr<UsbContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedLibusbDeviceHandle);
+};
+
+}  // namespace device
+
+#endif  // DEVICE_USB_SCOPED_LIBUSB_DEVICE_HANDLE_H_
diff --git a/device/usb/scoped_libusb_device_ref.cc b/device/usb/scoped_libusb_device_ref.cc
new file mode 100644
index 0000000..b3ac5e8
--- /dev/null
+++ b/device/usb/scoped_libusb_device_ref.cc
@@ -0,0 +1,39 @@
+// 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.
+
+#include "device/usb/scoped_libusb_device_ref.h"
+
+#include "device/usb/usb_context.h"
+#include "third_party/libusb/src/libusb/libusb.h"
+
+namespace device {
+
+ScopedLibusbDeviceRef::ScopedLibusbDeviceRef(libusb_device* device,
+                                             scoped_refptr<UsbContext> context)
+    : device_(device), context_(std::move(context)) {}
+
+ScopedLibusbDeviceRef::ScopedLibusbDeviceRef(ScopedLibusbDeviceRef&& other)
+    : device_(other.device_), context_(std::move(other.context_)) {
+  other.device_ = nullptr;
+}
+
+ScopedLibusbDeviceRef::~ScopedLibusbDeviceRef() {
+  Reset();
+}
+
+void ScopedLibusbDeviceRef::Reset() {
+  libusb_unref_device(device_);
+  device_ = nullptr;
+  context_.reset();
+}
+
+bool ScopedLibusbDeviceRef::IsValid() const {
+  return device_ != nullptr;
+}
+
+bool operator==(const ScopedLibusbDeviceRef& ref, libusb_device* device) {
+  return ref.get() == device;
+}
+
+}  // namespace device
diff --git a/device/usb/scoped_libusb_device_ref.h b/device/usb/scoped_libusb_device_ref.h
index 05a21b2..73a3731 100644
--- a/device/usb/scoped_libusb_device_ref.h
+++ b/device/usb/scoped_libusb_device_ref.h
@@ -5,19 +5,40 @@
 #ifndef DEVICE_USB_SCOPED_LIBUSB_DEVICE_REF_H_
 #define DEVICE_USB_SCOPED_LIBUSB_DEVICE_REF_H_
 
-#include "base/scoped_generic.h"
-#include "third_party/libusb/src/libusb/libusb.h"
+#include "base/macros.h"
+#include "base/memory/scoped_refptr.h"
+
+struct libusb_device;
 
 namespace device {
 
-struct LibusbDeviceRefTraits {
-  static libusb_device* InvalidValue() { return nullptr; }
+class UsbContext;
 
-  static void Free(libusb_device* device) { libusb_unref_device(device); }
+// This class owns a reference to a libusb_device as well as a reference to
+// the libusb_context. The libusb_context must outlive any libusb_device
+// instances created from it.
+class ScopedLibusbDeviceRef {
+ public:
+  ScopedLibusbDeviceRef(libusb_device* device,
+                        scoped_refptr<UsbContext> context);
+  ScopedLibusbDeviceRef(ScopedLibusbDeviceRef&& other);
+  ~ScopedLibusbDeviceRef();
+
+  libusb_device* get() const { return device_; }
+
+  scoped_refptr<UsbContext> GetContext() const { return context_; }
+
+  void Reset();
+  bool IsValid() const;
+
+ private:
+  libusb_device* device_;
+  scoped_refptr<UsbContext> context_;
+
+  DISALLOW_COPY_AND_ASSIGN(ScopedLibusbDeviceRef);
 };
 
-using ScopedLibusbDeviceRef =
-    base::ScopedGeneric<libusb_device*, LibusbDeviceRefTraits>;
+bool operator==(const ScopedLibusbDeviceRef& ref, libusb_device* device);
 
 }  // namespace device
 
diff --git a/device/usb/usb_device_handle_impl.cc b/device/usb/usb_device_handle_impl.cc
index cce0691..b8c2307a 100644
--- a/device/usb/usb_device_handle_impl.cc
+++ b/device/usb/usb_device_handle_impl.cc
@@ -311,7 +311,7 @@
   libusb_fill_control_setup(buffer->front(), type, request, value, index,
                             length);
   libusb_fill_control_transfer(transfer->platform_transfer_,
-                               device_handle->handle_, buffer->front(),
+                               device_handle->handle(), buffer->front(),
                                &UsbDeviceHandleImpl::Transfer::PlatformCallback,
                                transfer.get(), timeout);
 
@@ -341,7 +341,7 @@
   }
 
   libusb_fill_bulk_transfer(
-      transfer->platform_transfer_, device_handle->handle_, endpoint,
+      transfer->platform_transfer_, device_handle->handle(), endpoint,
       buffer->front(), length, &UsbDeviceHandleImpl::Transfer::PlatformCallback,
       transfer.get(), timeout);
 
@@ -371,7 +371,7 @@
   }
 
   libusb_fill_interrupt_transfer(
-      transfer->platform_transfer_, device_handle->handle_, endpoint,
+      transfer->platform_transfer_, device_handle->handle(), endpoint,
       buffer->front(), length, &UsbDeviceHandleImpl::Transfer::PlatformCallback,
       transfer.get(), timeout);
 
@@ -401,10 +401,10 @@
     return nullptr;
   }
 
-  libusb_fill_iso_transfer(transfer->platform_transfer_, device_handle->handle_,
-                           endpoint, buffer->front(), static_cast<int>(length),
-                           num_packets, &Transfer::PlatformCallback,
-                           transfer.get(), timeout);
+  libusb_fill_iso_transfer(
+      transfer->platform_transfer_, device_handle->handle(), endpoint,
+      buffer->front(), static_cast<int>(length), num_packets,
+      &Transfer::PlatformCallback, transfer.get(), timeout);
 
   for (size_t i = 0; i < packet_lengths.size(); ++i)
     transfer->platform_transfer_->iso_packet_desc[i].length = packet_lengths[i];
@@ -798,16 +798,14 @@
 }
 
 UsbDeviceHandleImpl::UsbDeviceHandleImpl(
-    scoped_refptr<UsbContext> context,
     scoped_refptr<UsbDeviceImpl> device,
-    PlatformUsbDeviceHandle handle,
+    ScopedLibusbDeviceHandle handle,
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner)
-    : device_(device),
-      handle_(handle),
-      context_(context),
+    : device_(std::move(device)),
+      handle_(std::move(handle)),
       task_runner_(base::ThreadTaskRunnerHandle::Get()),
       blocking_task_runner_(blocking_task_runner) {
-  DCHECK(handle) << "Cannot create device with NULL handle.";
+  DCHECK(handle_.IsValid()) << "Cannot create device with an invalid handle.";
 }
 
 UsbDeviceHandleImpl::~UsbDeviceHandleImpl() {
@@ -817,17 +815,19 @@
   // any thread. libusb is not safe to reentrancy so be sure not to try to close
   // the device from inside a transfer completion callback.
   if (blocking_task_runner_->RunsTasksInCurrentSequence()) {
-    libusb_close(handle_);
+    handle_.Reset();
   } else {
-    blocking_task_runner_->PostTask(FROM_HERE,
-                                    base::BindOnce(&libusb_close, handle_));
+    blocking_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(base::DoNothing::Once<ScopedLibusbDeviceHandle>(),
+                       std::move(handle_)));
   }
 }
 
 void UsbDeviceHandleImpl::SetConfigurationOnBlockingThread(
     int configuration_value,
     ResultCallback callback) {
-  int rv = libusb_set_configuration(handle_, configuration_value);
+  int rv = libusb_set_configuration(handle(), configuration_value);
   if (rv != LIBUSB_SUCCESS) {
     USB_LOG(EVENT) << "Failed to set configuration " << configuration_value
                    << ": " << ConvertPlatformUsbErrorToString(rv);
@@ -855,7 +855,7 @@
 void UsbDeviceHandleImpl::ClaimInterfaceOnBlockingThread(
     int interface_number,
     ResultCallback callback) {
-  int rv = libusb_claim_interface(handle_, interface_number);
+  int rv = libusb_claim_interface(handle(), interface_number);
   scoped_refptr<InterfaceClaimer> interface_claimer;
   if (rv == LIBUSB_SUCCESS) {
     interface_claimer =
@@ -897,7 +897,7 @@
     int interface_number,
     int alternate_setting,
     ResultCallback callback) {
-  int rv = libusb_set_interface_alt_setting(handle_, interface_number,
+  int rv = libusb_set_interface_alt_setting(handle(), interface_number,
                                             alternate_setting);
   if (rv != LIBUSB_SUCCESS) {
     USB_LOG(EVENT) << "Failed to set interface " << interface_number
@@ -930,7 +930,7 @@
 }
 
 void UsbDeviceHandleImpl::ResetDeviceOnBlockingThread(ResultCallback callback) {
-  int rv = libusb_reset_device(handle_);
+  int rv = libusb_reset_device(handle());
   if (rv != LIBUSB_SUCCESS) {
     USB_LOG(EVENT) << "Failed to reset device: "
                    << ConvertPlatformUsbErrorToString(rv);
@@ -941,7 +941,7 @@
 
 void UsbDeviceHandleImpl::ClearHaltOnBlockingThread(uint8_t endpoint,
                                                     ResultCallback callback) {
-  int rv = libusb_clear_halt(handle_, endpoint);
+  int rv = libusb_clear_halt(handle(), endpoint);
   if (rv != LIBUSB_SUCCESS) {
     USB_LOG(EVENT) << "Failed to clear halt: "
                    << ConvertPlatformUsbErrorToString(rv);
diff --git a/device/usb/usb_device_handle_impl.h b/device/usb/usb_device_handle_impl.h
index acf0332d..32dbe04 100644
--- a/device/usb/usb_device_handle_impl.h
+++ b/device/usb/usb_device_handle_impl.h
@@ -17,6 +17,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
+#include "device/usb/scoped_libusb_device_handle.h"
 #include "device/usb/usb_device_handle.h"
 #include "third_party/libusb/src/libusb/libusb.h"
 
@@ -34,10 +35,8 @@
   const UsbEndpointDescriptor* endpoint;
 };
 
-class UsbContext;
 class UsbDeviceImpl;
 
-typedef libusb_device_handle* PlatformUsbDeviceHandle;
 typedef libusb_iso_packet_descriptor* PlatformUsbIsoPacketDescriptor;
 typedef libusb_transfer* PlatformUsbTransferHandle;
 
@@ -90,14 +89,13 @@
 
   // This constructor is called by UsbDeviceImpl.
   UsbDeviceHandleImpl(
-      scoped_refptr<UsbContext> context,
       scoped_refptr<UsbDeviceImpl> device,
-      PlatformUsbDeviceHandle handle,
+      ScopedLibusbDeviceHandle handle,
       scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
 
   ~UsbDeviceHandleImpl() override;
 
-  PlatformUsbDeviceHandle handle() const { return handle_; }
+  libusb_device_handle* handle() const { return handle_.get(); }
 
  private:
   class InterfaceClaimer;
@@ -174,7 +172,7 @@
 
   scoped_refptr<UsbDeviceImpl> device_;
 
-  PlatformUsbDeviceHandle handle_;
+  ScopedLibusbDeviceHandle handle_;
 
   typedef std::map<int, scoped_refptr<InterfaceClaimer>> ClaimedInterfaceMap;
   ClaimedInterfaceMap claimed_interfaces_;
@@ -186,10 +184,6 @@
   typedef std::map<int, EndpointMapValue> EndpointMap;
   EndpointMap endpoint_map_;
 
-  // Retain the UsbContext so that the platform context will not be destroyed
-  // before this handle.
-  scoped_refptr<UsbContext> context_;
-
   scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
   scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
 
diff --git a/device/usb/usb_device_impl.cc b/device/usb/usb_device_impl.cc
index 056c6c3..d6eb68d 100644
--- a/device/usb/usb_device_impl.cc
+++ b/device/usb/usb_device_impl.cc
@@ -28,8 +28,7 @@
 
 namespace device {
 
-UsbDeviceImpl::UsbDeviceImpl(scoped_refptr<UsbContext> context,
-                             ScopedLibusbDeviceRef platform_device,
+UsbDeviceImpl::UsbDeviceImpl(ScopedLibusbDeviceRef platform_device,
                              const libusb_device_descriptor& descriptor)
     : UsbDevice(descriptor.bcdUSB,
                 descriptor.bDeviceClass,
@@ -41,9 +40,8 @@
                 base::string16(),
                 base::string16(),
                 base::string16()),
-      context_(std::move(context)),
       platform_device_(std::move(platform_device)) {
-  CHECK(platform_device_.is_valid()) << "platform_device must be valid";
+  CHECK(platform_device_.IsValid()) << "platform_device must be valid";
   ReadAllConfigurations();
   RefreshActiveConfiguration();
 }
@@ -104,12 +102,14 @@
     scoped_refptr<base::TaskRunner> task_runner,
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) {
   base::AssertBlockingAllowed();
-  PlatformUsbDeviceHandle handle;
+  libusb_device_handle* handle;
   const int rv = libusb_open(platform_device(), &handle);
+  ScopedLibusbDeviceHandle scoped_handle(handle, platform_device_.GetContext());
   if (LIBUSB_SUCCESS == rv) {
     task_runner->PostTask(
-        FROM_HERE, base::BindOnce(&UsbDeviceImpl::Opened, this, handle,
-                                  std::move(callback), blocking_task_runner));
+        FROM_HERE,
+        base::BindOnce(&UsbDeviceImpl::Opened, this, std::move(scoped_handle),
+                       std::move(callback), blocking_task_runner));
   } else {
     USB_LOG(EVENT) << "Failed to open device: "
                    << ConvertPlatformUsbErrorToString(rv);
@@ -119,12 +119,12 @@
 }
 
 void UsbDeviceImpl::Opened(
-    PlatformUsbDeviceHandle platform_handle,
+    ScopedLibusbDeviceHandle platform_handle,
     OpenCallback callback,
     scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) {
   DCHECK(thread_checker_.CalledOnValidThread());
   scoped_refptr<UsbDeviceHandle> device_handle = new UsbDeviceHandleImpl(
-      context_, this, platform_handle, blocking_task_runner);
+      this, std::move(platform_handle), blocking_task_runner);
   handles().push_back(device_handle.get());
   std::move(callback).Run(device_handle);
 }
diff --git a/device/usb/usb_device_impl.h b/device/usb/usb_device_impl.h
index 16ab891..9e3d2c7 100644
--- a/device/usb/usb_device_impl.h
+++ b/device/usb/usb_device_impl.h
@@ -21,9 +21,7 @@
 #include "device/usb/usb_descriptors.h"
 #include "device/usb/usb_device.h"
 
-struct libusb_device;
 struct libusb_device_descriptor;
-struct libusb_device_handle;
 
 namespace base {
 class SequencedTaskRunner;
@@ -31,15 +29,12 @@
 
 namespace device {
 
+class ScopedLibusbDeviceHandle;
 class UsbDeviceHandleImpl;
-class UsbContext;
-
-typedef struct libusb_device_handle* PlatformUsbDeviceHandle;
 
 class UsbDeviceImpl : public UsbDevice {
  public:
-  UsbDeviceImpl(scoped_refptr<UsbContext> context,
-                ScopedLibusbDeviceRef platform_device,
+  UsbDeviceImpl(ScopedLibusbDeviceRef platform_device,
                 const libusb_device_descriptor& descriptor);
 
   // UsbDevice implementation:
@@ -79,15 +74,13 @@
       OpenCallback callback,
       scoped_refptr<base::TaskRunner> task_runner,
       scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
-  void Opened(PlatformUsbDeviceHandle platform_handle,
+  void Opened(ScopedLibusbDeviceHandle platform_handle,
               OpenCallback callback,
               scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
 
   base::ThreadChecker thread_checker_;
   bool visited_ = false;
 
-  // The libusb_context must not be released before the libusb_device.
-  const scoped_refptr<UsbContext> context_;
   const ScopedLibusbDeviceRef platform_device_;
 
   DISALLOW_COPY_AND_ASSIGN(UsbDeviceImpl);
diff --git a/device/usb/usb_service_impl.cc b/device/usb/usb_service_impl.cc
index 83e14c6f0..626ece05 100644
--- a/device/usb/usb_service_impl.cc
+++ b/device/usb/usb_service_impl.cc
@@ -131,7 +131,7 @@
   std::vector<ScopedLibusbDeviceRef> scoped_devices;
   scoped_devices.reserve(device_count);
   for (ssize_t i = 0; i < device_count; ++i)
-    scoped_devices.emplace_back(platform_devices[i]);
+    scoped_devices.emplace_back(platform_devices[i], usb_context);
 
   // Free the list but don't unref the devices because ownership has been
   // been transfered to the elements of |scoped_devices|.
@@ -231,6 +231,7 @@
       device_observer_(this),
 #endif
       weak_factory_(this) {
+  weak_self_ = weak_factory_.GetWeakPtr();
   base::PostTaskWithTraits(
       FROM_HERE, kBlockingTaskTraits,
       base::Bind(&InitializeUsbContextOnBlockingThread, task_runner(),
@@ -361,7 +362,7 @@
       // Mark the existing device object visited and remove it from the list so
       // it will not be ignored.
       it->second->set_visited(true);
-      device.reset();
+      device.Reset();
     }
   }
 
@@ -382,7 +383,7 @@
   // that have been removed don't remain in |ignored_devices_| indefinitely.
   ignored_devices_.clear();
   for (auto& device : *devices) {
-    if (device.is_valid())
+    if (device.IsValid())
       ignored_devices_.push_back(std::move(device));
   }
 
@@ -441,8 +442,8 @@
 
   devices_being_enumerated_.insert(platform_device.get());
 
-  auto device = base::MakeRefCounted<UsbDeviceImpl>(
-      context_, std::move(platform_device), descriptor);
+  auto device = base::MakeRefCounted<UsbDeviceImpl>(std::move(platform_device),
+                                                    descriptor);
   base::OnceClosure add_device =
       base::BindOnce(&UsbServiceImpl::AddDevice, weak_factory_.GetWeakPtr(),
                      refresh_complete, device);
@@ -458,7 +459,8 @@
     libusb_ref_device(device->platform_device());
     base::OnceClosure enumeration_failed = base::BindOnce(
         &UsbServiceImpl::EnumerationFailed, weak_factory_.GetWeakPtr(),
-        ScopedLibusbDeviceRef(device->platform_device()), refresh_complete);
+        ScopedLibusbDeviceRef(device->platform_device(), context_),
+        refresh_complete);
 
     device->Open(base::BindOnce(
         &OnDeviceOpenedReadDescriptors, descriptor.iManufacturer,
@@ -518,18 +520,18 @@
   // libusb does not transfer ownership of |device_raw| to this function so a
   // reference must be taken here.
   libusb_ref_device(device_raw);
-  ScopedLibusbDeviceRef device(device_raw);
+  ScopedLibusbDeviceRef device(device_raw, self->context_);
 
   switch (event) {
     case LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED:
       self->task_runner()->PostTask(
           FROM_HERE, base::BindOnce(&UsbServiceImpl::OnPlatformDeviceAdded,
-                                    base::Unretained(self), std::move(device)));
+                                    self->weak_self_, std::move(device)));
       break;
     case LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT:
       self->task_runner()->PostTask(
           FROM_HERE, base::BindOnce(&UsbServiceImpl::OnPlatformDeviceRemoved,
-                                    base::Unretained(self), std::move(device)));
+                                    self->weak_self_, std::move(device)));
       break;
     default:
       NOTREACHED();
diff --git a/device/usb/usb_service_impl.h b/device/usb/usb_service_impl.h
index e7e89d0..36f7115 100644
--- a/device/usb/usb_service_impl.h
+++ b/device/usb/usb_service_impl.h
@@ -122,6 +122,10 @@
   ScopedObserver<DeviceMonitorWin, DeviceMonitorWin::Observer> device_observer_;
 #endif  // OS_WIN
 
+  // This WeakPtr is used to safely post hotplug events back to the thread this
+  // object lives on.
+  base::WeakPtr<UsbServiceImpl> weak_self_;
+
   base::WeakPtrFactory<UsbServiceImpl> weak_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(UsbServiceImpl);
diff --git a/device/vr/buildflags/buildflags.gni b/device/vr/buildflags/buildflags.gni
index 7e663a3..eb1a3885 100644
--- a/device/vr/buildflags/buildflags.gni
+++ b/device/vr/buildflags/buildflags.gni
@@ -37,10 +37,10 @@
   # we are limiting to canary and dev until binary size issues are resolved.
   # TODO(crbug.com/836524): once we've refactored AR code out from vr
   # directories, we can stop requiring |enable_vr| here.
-  package_arcore =
-      enable_vr && is_android && !is_chromecast && current_cpu == "arm" &&
-      (android_channel == "default" || android_channel == "canary" ||
-       android_channel == "dev")
+  package_arcore = enable_vr && is_android && !is_chromecast &&
+                   (current_cpu == "arm" || current_cpu == "arm64") &&
+                   (android_channel == "default" ||
+                    android_channel == "canary" || android_channel == "dev")
 
   # TODO(crbug.com/841389): We should eventually have a single flag for
   # enabling arcore, but we currently don't support ARCore in 64bit, and we do
diff --git a/extensions/browser/BUILD.gn b/extensions/browser/BUILD.gn
index 69a3342..a6a1539 100644
--- a/extensions/browser/BUILD.gn
+++ b/extensions/browser/BUILD.gn
@@ -169,19 +169,12 @@
     "extension_registry_factory.cc",
     "extension_registry_factory.h",
     "extension_registry_observer.h",
-    "extension_request_limiting_throttle.cc",
-    "extension_request_limiting_throttle.h",
     "extension_service_worker_message_filter.cc",
     "extension_service_worker_message_filter.h",
     "extension_system.cc",
     "extension_system.h",
     "extension_system_provider.cc",
     "extension_system_provider.h",
-    "extension_throttle_entry.cc",
-    "extension_throttle_entry.h",
-    "extension_throttle_entry_interface.h",
-    "extension_throttle_manager.cc",
-    "extension_throttle_manager.h",
     "extension_user_script_loader.cc",
     "extension_user_script_loader.h",
     "extension_util.cc",
@@ -571,10 +564,6 @@
     "extension_pref_value_map_unittest.cc",
     "extension_registrar_unittest.cc",
     "extension_registry_unittest.cc",
-    "extension_throttle_simulation_unittest.cc",
-    "extension_throttle_test_support.cc",
-    "extension_throttle_test_support.h",
-    "extension_throttle_unittest.cc",
     "file_highlighter_unittest.cc",
     "file_reader_unittest.cc",
     "image_loader_unittest.cc",
diff --git a/extensions/browser/extension_prefs.cc b/extensions/browser/extension_prefs.cc
index 1855bd0..42fec16 100644
--- a/extensions/browser/extension_prefs.cc
+++ b/extensions/browser/extension_prefs.cc
@@ -1212,23 +1212,24 @@
 
 std::unique_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledInfoHelper(
     const std::string& extension_id,
-    const base::DictionaryValue* extension) const {
+    const base::DictionaryValue* extension,
+    bool include_component_extensions) const {
   int location_value;
   if (!extension->GetInteger(kPrefLocation, &location_value))
     return std::unique_ptr<ExtensionInfo>();
 
   Manifest::Location location = static_cast<Manifest::Location>(location_value);
-  if (location == Manifest::COMPONENT) {
-    // Component extensions are ignored. Component extensions may have data
-    // saved in preferences, but they are already loaded at this point (by
-    // ComponentLoader) and shouldn't be populated into the result of
+  if (location == Manifest::COMPONENT && !include_component_extensions) {
+    // Component extensions are ignored by default. Component extensions may
+    // have data saved in preferences, but they are already loaded at this point
+    // (by ComponentLoader) and shouldn't be populated into the result of
     // GetInstalledExtensionsInfo, otherwise InstalledLoader would also want to
     // load them.
     return std::unique_ptr<ExtensionInfo>();
   }
 
   // Only the following extension types have data saved in the preferences.
-  if (location != Manifest::INTERNAL &&
+  if (location != Manifest::INTERNAL && location != Manifest::COMPONENT &&
       !Manifest::IsUnpackedLocation(location) &&
       !Manifest::IsExternalLocation(location)) {
     NOTREACHED();
@@ -1255,7 +1256,8 @@
 }
 
 std::unique_ptr<ExtensionInfo> ExtensionPrefs::GetInstalledExtensionInfo(
-    const std::string& extension_id) const {
+    const std::string& extension_id,
+    bool include_component_extensions) const {
   const base::DictionaryValue* ext = NULL;
   const base::DictionaryValue* extensions =
       prefs_->GetDictionary(pref_names::kExtensions);
@@ -1268,11 +1270,13 @@
     return std::unique_ptr<ExtensionInfo>();
   }
 
-  return GetInstalledInfoHelper(extension_id, ext);
+  return GetInstalledInfoHelper(extension_id, ext,
+                                include_component_extensions);
 }
 
 std::unique_ptr<ExtensionPrefs::ExtensionsInfo>
-ExtensionPrefs::GetInstalledExtensionsInfo() const {
+ExtensionPrefs::GetInstalledExtensionsInfo(
+    bool include_component_extensions) const {
   std::unique_ptr<ExtensionsInfo> extensions_info(new ExtensionsInfo);
 
   const base::DictionaryValue* extensions =
@@ -1282,8 +1286,8 @@
     if (!crx_file::id_util::IdIsValid(extension_id.key()))
       continue;
 
-    std::unique_ptr<ExtensionInfo> info =
-        GetInstalledExtensionInfo(extension_id.key());
+    std::unique_ptr<ExtensionInfo> info = GetInstalledExtensionInfo(
+        extension_id.key(), include_component_extensions);
     if (info)
       extensions_info->push_back(std::move(info));
   }
@@ -1306,7 +1310,8 @@
       continue;
 
     std::unique_ptr<ExtensionInfo> info =
-        GetInstalledInfoHelper(extension_id.key(), ext);
+        GetInstalledInfoHelper(extension_id.key(), ext,
+                               /*include_component_extensions = */ false);
     if (info)
       extensions_info->push_back(std::move(info));
   }
@@ -1401,7 +1406,8 @@
   if (!extension_prefs->GetDictionary(kDelayedInstallInfo, &ext))
     return std::unique_ptr<ExtensionInfo>();
 
-  return GetInstalledInfoHelper(extension_id, ext);
+  return GetInstalledInfoHelper(extension_id, ext,
+                                /*include_component_extensions = */ false);
 }
 
 ExtensionPrefs::DelayReason ExtensionPrefs::GetDelayedInstallReason(
@@ -1609,7 +1615,8 @@
   std::unique_ptr<ExtensionsInfo> extensions_info;
   {
     SCOPED_UMA_HISTOGRAM_TIMER("Extensions.InitPrefGetExtensionsTime");
-    extensions_info = GetInstalledExtensionsInfo();
+    extensions_info =
+        GetInstalledExtensionsInfo(/*include_component_extensions = */ true);
   }
 
   if (extensions_disabled_) {
@@ -1643,11 +1650,6 @@
     base::EraseIf(*extensions_info, predicate);
   }
 
-  // TODO(devlin): |extensions_info| won't contain records for component
-  // extensions (see GetInstalledInfoHelper()). It probably should, because
-  // otherwise component extensions using APIs that rely on extension-controlled
-  // prefs may crash.
-
   InitExtensionControlledPrefs(*extensions_info);
 
   extension_pref_value_map_->NotifyInitializationCompleted();
diff --git a/extensions/browser/extension_prefs.h b/extensions/browser/extension_prefs.h
index d409cb5..dbf7f74 100644
--- a/extensions/browser/extension_prefs.h
+++ b/extensions/browser/extension_prefs.h
@@ -432,7 +432,8 @@
   // version directory and the location. Blacklisted extensions won't be saved
   // and neither will external extensions the user has explicitly uninstalled.
   // Caller takes ownership of returned structure.
-  std::unique_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const;
+  std::unique_ptr<ExtensionsInfo> GetInstalledExtensionsInfo(
+      bool include_component_extensions = false) const;
 
   // Same as above, but only includes external extensions the user has
   // explicitly uninstalled.
@@ -441,7 +442,8 @@
   // Returns the ExtensionInfo from the prefs for the given extension. If the
   // extension is not present, NULL is returned.
   std::unique_ptr<ExtensionInfo> GetInstalledExtensionInfo(
-      const std::string& extension_id) const;
+      const std::string& extension_id,
+      bool include_component_extensions = false) const;
 
   // We've downloaded an updated .crx file for the extension, but are waiting
   // to install it.
@@ -620,7 +622,8 @@
   // |extension| dictionary.
   std::unique_ptr<ExtensionInfo> GetInstalledInfoHelper(
       const std::string& extension_id,
-      const base::DictionaryValue* extension) const;
+      const base::DictionaryValue* extension,
+      bool include_component_extensions) const;
 
   // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a
   // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns.
diff --git a/extensions/browser/extension_request_limiting_throttle.cc b/extensions/browser/extension_request_limiting_throttle.cc
deleted file mode 100644
index 2e213485..0000000
--- a/extensions/browser/extension_request_limiting_throttle.cc
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2015 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 "extensions/browser/extension_request_limiting_throttle.h"
-
-#include "base/logging.h"
-#include "extensions/browser/extension_throttle_entry.h"
-#include "extensions/browser/extension_throttle_manager.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/redirect_info.h"
-#include "net/url_request/url_request.h"
-
-namespace extensions {
-
-ExtensionRequestLimitingThrottle::ExtensionRequestLimitingThrottle(
-    const net::URLRequest* request,
-    ExtensionThrottleManager* manager)
-    : request_(request), manager_(manager) {
-  DCHECK(manager_);
-}
-
-ExtensionRequestLimitingThrottle::~ExtensionRequestLimitingThrottle() {
-}
-
-void ExtensionRequestLimitingThrottle::WillStartRequest(bool* defer) {
-  throttling_entry_ = manager_->RegisterRequestUrl(request_->url());
-  if (throttling_entry_->ShouldRejectRequest(*request_))
-    CancelWithError(net::ERR_TEMPORARILY_THROTTLED);
-}
-
-void ExtensionRequestLimitingThrottle::WillRedirectRequest(
-    const net::RedirectInfo& redirect_info,
-    bool* defer) {
-  DCHECK_EQ(manager_->GetIdFromUrl(request_->url()),
-            throttling_entry_->GetURLIdForDebugging());
-
-  throttling_entry_->UpdateWithResponse(redirect_info.status_code);
-
-  throttling_entry_ = manager_->RegisterRequestUrl(redirect_info.new_url);
-  if (throttling_entry_->ShouldRejectRequest(*request_))
-    CancelWithError(net::ERR_TEMPORARILY_THROTTLED);
-}
-
-void ExtensionRequestLimitingThrottle::WillProcessResponse(bool* defer) {
-  DCHECK_EQ(manager_->GetIdFromUrl(request_->url()),
-            throttling_entry_->GetURLIdForDebugging());
-
-  if (!request_->was_cached())
-    throttling_entry_->UpdateWithResponse(request_->GetResponseCode());
-}
-
-const char* ExtensionRequestLimitingThrottle::GetNameForLogging() const {
-  return "ExtensionRequestLimitingThrottle";
-}
-
-}  // namespace extensions
diff --git a/extensions/browser/extension_request_limiting_throttle.h b/extensions/browser/extension_request_limiting_throttle.h
deleted file mode 100644
index bd9dd4c..0000000
--- a/extensions/browser/extension_request_limiting_throttle.h
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2015 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 EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_
-#define EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "content/public/browser/resource_throttle.h"
-
-namespace net {
-struct RedirectInfo;
-class URLRequest;
-}
-
-namespace extensions {
-
-class ExtensionThrottleEntryInterface;
-class ExtensionThrottleManager;
-
-// This class monitors requests issued by extensions and throttles the request
-// if there are too many requests made within a short time to urls with the same
-// scheme, host, port and path. For the exact criteria for throttling, please
-// also see extension_throttle_manager.cc.
-class ExtensionRequestLimitingThrottle : public content::ResourceThrottle {
- public:
-  ExtensionRequestLimitingThrottle(const net::URLRequest* request,
-                                   ExtensionThrottleManager* manager);
-  ~ExtensionRequestLimitingThrottle() override;
-
-  // content::ResourceThrottle implementation (called on IO thread):
-  void WillStartRequest(bool* defer) override;
-  void WillRedirectRequest(const net::RedirectInfo& redirect_info,
-                           bool* defer) override;
-  void WillProcessResponse(bool* defer) override;
-
-  const char* GetNameForLogging() const override;
-
- private:
-  const net::URLRequest* request_;
-  ExtensionThrottleManager* manager_;
-
-  // This is used to supervise traffic and enforce exponential back-off.
-  scoped_refptr<ExtensionThrottleEntryInterface> throttling_entry_;
-
-  DISALLOW_COPY_AND_ASSIGN(ExtensionRequestLimitingThrottle);
-};
-
-}  // namespace extensions
-
-#endif  // EXTENSIONS_BROWSER_EXTENSION_REQUEST_LIMITING_THROTTLE_H_
diff --git a/extensions/browser/extension_throttle_entry_interface.h b/extensions/browser/extension_throttle_entry_interface.h
deleted file mode 100644
index 0b52a037..0000000
--- a/extensions/browser/extension_throttle_entry_interface.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2012 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 EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_INTERFACE_H_
-#define EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_INTERFACE_H_
-
-#include <stdint.h>
-
-#include <string>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/time/time.h"
-#include "net/base/net_export.h"
-
-namespace net {
-class URLRequest;
-}  // namespace net
-
-namespace extensions {
-
-// Interface provided on entries of the URL request throttler manager.
-class ExtensionThrottleEntryInterface
-    : public base::RefCountedThreadSafe<ExtensionThrottleEntryInterface> {
- public:
-  ExtensionThrottleEntryInterface() {}
-
-  // Returns true when we have encountered server errors and are doing
-  // exponential back-off, unless the request has load flags that mean
-  // it is likely to be user-initiated, or the NetworkDelegate returns
-  // false for |CanThrottleRequest(request)|.
-  //
-  // URLRequestHttpJob checks this method prior to every request; it
-  // cancels requests if this method returns true.
-  virtual bool ShouldRejectRequest(const net::URLRequest& request) const = 0;
-
-  // Calculates a recommended sending time for the next request and reserves it.
-  // The sending time is not earlier than the current exponential back-off
-  // release time or |earliest_time|. Moreover, the previous results of
-  // the method are taken into account, in order to make sure they are spread
-  // properly over time.
-  // Returns the recommended delay before sending the next request, in
-  // milliseconds. The return value is always positive or 0.
-  // Although it is not mandatory, respecting the value returned by this method
-  // is helpful to avoid traffic overload.
-  virtual int64_t ReserveSendingTimeForNextRequest(
-      const base::TimeTicks& earliest_time) = 0;
-
-  // Returns the time after which requests are allowed.
-  virtual base::TimeTicks GetExponentialBackoffReleaseTime() const = 0;
-
-  // This method needs to be called each time a response is received.
-  virtual void UpdateWithResponse(int status_code) = 0;
-
-  // Lets higher-level modules, that know how to parse particular response
-  // bodies, notify of receiving malformed content for the given URL. This will
-  // be handled by the throttler as if an HTTP 503 response had been received to
-  // the request, i.e. it will count as a failure, unless the HTTP response code
-  // indicated is already one of those that will be counted as an error.
-  virtual void ReceivedContentWasMalformed(int response_code) = 0;
-
-  // Get the URL ID associated with this entry. Should only be used for
-  // debugging purpose.
-  virtual const std::string& GetURLIdForDebugging() const = 0;
-
- protected:
-  friend class base::RefCountedThreadSafe<ExtensionThrottleEntryInterface>;
-  virtual ~ExtensionThrottleEntryInterface() {}
-
- private:
-  friend class base::RefCounted<ExtensionThrottleEntryInterface>;
-  DISALLOW_COPY_AND_ASSIGN(ExtensionThrottleEntryInterface);
-};
-
-}  // namespace extensions
-
-#endif  // EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_INTERFACE_H_
diff --git a/extensions/browser/extension_throttle_manager.cc b/extensions/browser/extension_throttle_manager.cc
deleted file mode 100644
index 36ab677..0000000
--- a/extensions/browser/extension_throttle_manager.cc
+++ /dev/null
@@ -1,189 +0,0 @@
-// Copyright (c) 2012 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 "extensions/browser/extension_throttle_manager.h"
-
-#include <utility>
-
-#include "base/logging.h"
-#include "base/metrics/field_trial.h"
-#include "base/metrics/histogram.h"
-#include "base/strings/string_util.h"
-#include "extensions/browser/extension_request_limiting_throttle.h"
-#include "extensions/common/constants.h"
-#include "net/base/url_util.h"
-#include "net/log/net_log.h"
-#include "net/log/net_log_event_type.h"
-#include "net/log/net_log_source_type.h"
-#include "net/url_request/url_request.h"
-
-namespace extensions {
-
-const unsigned int ExtensionThrottleManager::kMaximumNumberOfEntries = 1500;
-const unsigned int ExtensionThrottleManager::kRequestsBetweenCollecting = 200;
-
-ExtensionThrottleManager::ExtensionThrottleManager()
-    : requests_since_last_gc_(0),
-      registered_from_thread_(base::kInvalidThreadId),
-      ignore_user_gesture_load_flag_for_tests_(false) {
-  url_id_replacements_.ClearPassword();
-  url_id_replacements_.ClearUsername();
-  url_id_replacements_.ClearQuery();
-  url_id_replacements_.ClearRef();
-
-  net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
-}
-
-ExtensionThrottleManager::~ExtensionThrottleManager() {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-  net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
-
-  // Since the manager object might conceivably go away before the
-  // entries, detach the entries' back-pointer to the manager.
-  UrlEntryMap::iterator i = url_entries_.begin();
-  while (i != url_entries_.end()) {
-    if (i->second.get() != NULL) {
-      i->second->DetachManager();
-    }
-    ++i;
-  }
-
-  // Delete all entries.
-  url_entries_.clear();
-}
-
-std::unique_ptr<content::ResourceThrottle>
-ExtensionThrottleManager::MaybeCreateThrottle(const net::URLRequest* request) {
-  if (request->site_for_cookies().scheme() != extensions::kExtensionScheme) {
-    return nullptr;
-  }
-  return std::make_unique<extensions::ExtensionRequestLimitingThrottle>(request,
-                                                                        this);
-}
-
-scoped_refptr<ExtensionThrottleEntryInterface>
-ExtensionThrottleManager::RegisterRequestUrl(const GURL& url) {
-  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-
-  // Normalize the url.
-  std::string url_id = GetIdFromUrl(url);
-
-  // Periodically garbage collect old entries.
-  GarbageCollectEntriesIfNecessary();
-
-  // Find the entry in the map or create a new NULL entry.
-  scoped_refptr<ExtensionThrottleEntry>& entry = url_entries_[url_id];
-
-  // If the entry exists but could be garbage collected at this point, we
-  // start with a fresh entry so that we possibly back off a bit less
-  // aggressively (i.e. this resets the error count when the entry's URL
-  // hasn't been requested in long enough).
-  if (entry.get() && entry->IsEntryOutdated()) {
-    entry = NULL;
-  }
-
-  // Create the entry if needed.
-  if (entry.get() == NULL) {
-    if (backoff_policy_for_tests_) {
-      entry = new ExtensionThrottleEntry(
-          this, url_id, backoff_policy_for_tests_.get(),
-          ignore_user_gesture_load_flag_for_tests_);
-    } else {
-      entry = new ExtensionThrottleEntry(
-          this, url_id, ignore_user_gesture_load_flag_for_tests_);
-    }
-
-    // We only disable back-off throttling on an entry that we have
-    // just constructed.  This is to allow unit tests to explicitly override
-    // the entry for localhost URLs.
-    if (net::IsLocalhost(url)) {
-      // TODO(joi): Once sliding window is separate from back-off throttling,
-      // we can simply return a dummy implementation of
-      // ExtensionThrottleEntryInterface here that never blocks anything.
-      entry->DisableBackoffThrottling();
-    }
-  }
-
-  return entry;
-}
-
-void ExtensionThrottleManager::SetBackoffPolicyForTests(
-    std::unique_ptr<net::BackoffEntry::Policy> policy) {
-  backoff_policy_for_tests_ = std::move(policy);
-}
-
-void ExtensionThrottleManager::OverrideEntryForTests(
-    const GURL& url,
-    ExtensionThrottleEntry* entry) {
-  // Normalize the url.
-  std::string url_id = GetIdFromUrl(url);
-
-  // Periodically garbage collect old entries.
-  GarbageCollectEntriesIfNecessary();
-
-  url_entries_[url_id] = entry;
-}
-
-void ExtensionThrottleManager::EraseEntryForTests(const GURL& url) {
-  // Normalize the url.
-  std::string url_id = GetIdFromUrl(url);
-  url_entries_.erase(url_id);
-}
-
-void ExtensionThrottleManager::SetIgnoreUserGestureLoadFlagForTests(
-    bool ignore_user_gesture_load_flag_for_tests) {
-  ignore_user_gesture_load_flag_for_tests_ = true;
-}
-
-void ExtensionThrottleManager::OnNetworkChanged(
-    net::NetworkChangeNotifier::ConnectionType type) {
-  // When we switch from online to offline or change IP addresses, we
-  // clear all back-off history. This is a precaution in case the change in
-  // online state now lets us communicate without error with servers that
-  // we were previously getting 500 or 503 responses from (perhaps the
-  // responses are from a badly-written proxy that should have returned a
-  // 502 or 504 because it's upstream connection was down or it had no route
-  // to the server).
-  // Remove all entries.  Any entries that in-flight requests have a reference
-  // to will live until those requests end, and these entries may be
-  // inconsistent with new entries for the same URLs, but since what we
-  // want is a clean slate for the new connection type, this is OK.
-  url_entries_.clear();
-  requests_since_last_gc_ = 0;
-}
-
-std::string ExtensionThrottleManager::GetIdFromUrl(const GURL& url) const {
-  if (!url.is_valid())
-    return url.possibly_invalid_spec();
-
-  GURL id = url.ReplaceComponents(url_id_replacements_);
-  return base::ToLowerASCII(id.spec());
-}
-
-void ExtensionThrottleManager::GarbageCollectEntriesIfNecessary() {
-  requests_since_last_gc_++;
-  if (requests_since_last_gc_ < kRequestsBetweenCollecting)
-    return;
-  requests_since_last_gc_ = 0;
-
-  GarbageCollectEntries();
-}
-
-void ExtensionThrottleManager::GarbageCollectEntries() {
-  UrlEntryMap::iterator i = url_entries_.begin();
-  while (i != url_entries_.end()) {
-    if ((i->second)->IsEntryOutdated()) {
-      url_entries_.erase(i++);
-    } else {
-      ++i;
-    }
-  }
-
-  // In case something broke we want to make sure not to grow indefinitely.
-  while (url_entries_.size() > kMaximumNumberOfEntries) {
-    url_entries_.erase(url_entries_.begin());
-  }
-}
-
-}  // namespace extensions
diff --git a/extensions/browser/extension_throttle_manager.h b/extensions/browser/extension_throttle_manager.h
deleted file mode 100644
index 640ca7f..0000000
--- a/extensions/browser/extension_throttle_manager.h
+++ /dev/null
@@ -1,144 +0,0 @@
-// Copyright (c) 2012 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 EXTENSIONS_BROWSER_EXTENSION_THROTTLE_MANAGER_H_
-#define EXTENSIONS_BROWSER_EXTENSION_THROTTLE_MANAGER_H_
-
-#include <map>
-#include <memory>
-#include <string>
-
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/sequence_checker.h"
-#include "base/threading/platform_thread.h"
-#include "extensions/browser/extension_throttle_entry.h"
-#include "net/base/backoff_entry.h"
-#include "net/base/net_export.h"
-#include "net/base/network_change_notifier.h"
-#include "url/gurl.h"
-
-namespace content {
-class ResourceThrottle;
-}
-
-namespace extensions {
-
-// Class that registers URL request throttler entries for URLs being accessed
-// in order to supervise traffic. URL requests for HTTP contents should
-// register their URLs in this manager on each request.
-//
-// ExtensionThrottleManager maintains a map of URL IDs to URL request
-// throttler entries. It creates URL request throttler entries when new URLs
-// are registered, and does garbage collection from time to time in order to
-// clean out outdated entries. URL ID consists of lowercased scheme, host, port
-// and path. All URLs converted to the same ID will share the same entry.
-class ExtensionThrottleManager
-    : public net::NetworkChangeNotifier::NetworkChangeObserver {
- public:
-  ExtensionThrottleManager();
-  ~ExtensionThrottleManager() override;
-
-  // Creates a content::ResourceThrottle for |request| to prevent extensions
-  // from requesting a URL too often, if such a throttle is needed.
-  std::unique_ptr<content::ResourceThrottle> MaybeCreateThrottle(
-      const net::URLRequest* request);
-
-  // TODO(xunjieli): Remove this method and replace with
-  // ShouldRejectRequest(request) and UpdateWithResponse(request, status_code),
-  // which will also allow ExtensionThrottleEntry to no longer be reference
-  // counted, and ExtensionThrottleEntryInterface to be removed.
-
-  // Must be called for every request, returns the URL request throttler entry
-  // associated with the URL. The caller must inform this entry of some events.
-  // Please refer to extension_throttle_entry_interface.h for further
-  // informations.
-  scoped_refptr<ExtensionThrottleEntryInterface> RegisterRequestUrl(
-      const GURL& url);
-
-  void SetBackoffPolicyForTests(
-      std::unique_ptr<net::BackoffEntry::Policy> policy);
-
-  // Registers a new entry in this service and overrides the existing entry (if
-  // any) for the URL. The service will hold a reference to the entry.
-  // It is only used by unit tests.
-  void OverrideEntryForTests(const GURL& url, ExtensionThrottleEntry* entry);
-
-  // Explicitly erases an entry.
-  // This is useful to remove those entries which have got infinite lifetime and
-  // thus won't be garbage collected.
-  // It is only used by unit tests.
-  void EraseEntryForTests(const GURL& url);
-
-  // Sets whether to ignore net::LOAD_MAYBE_USER_GESTURE of the request for
-  // testing. Otherwise, requests will not be throttled when they may have been
-  // throttled in response to a recent user gesture, though they're still
-  // counted for the purpose of throttling other requests.
-  void SetIgnoreUserGestureLoadFlagForTests(
-      bool ignore_user_gesture_load_flag_for_tests);
-
-  // Whether throttling is enabled or not.
-  void set_enforce_throttling(bool enforce);
-  bool enforce_throttling();
-
-  // NetworkChangeObserver interface.
-  void OnNetworkChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override;
-
-  // Method that allows us to transform a URL into an ID that can be used in our
-  // map. Resulting IDs will be lowercase and consist of the scheme, host, port
-  // and path (without query string, fragment, etc.).
-  // If the URL is invalid, the invalid spec will be returned, without any
-  // transformation.
-  std::string GetIdFromUrl(const GURL& url) const;
-
-  // Method that ensures the map gets cleaned from time to time. The period at
-  // which garbage collecting happens is adjustable with the
-  // kRequestBetweenCollecting constant.
-  void GarbageCollectEntriesIfNecessary();
-
-  // Method that does the actual work of garbage collecting.
-  void GarbageCollectEntries();
-
-  // Used by tests.
-  int GetNumberOfEntriesForTests() const { return url_entries_.size(); }
-
- private:
-  // From each URL we generate an ID composed of the scheme, host, port and path
-  // that allows us to uniquely map an entry to it.
-  typedef std::map<std::string, scoped_refptr<ExtensionThrottleEntry>>
-      UrlEntryMap;
-
-  // Maximum number of entries that we are willing to collect in our map.
-  static const unsigned int kMaximumNumberOfEntries;
-  // Number of requests that will be made between garbage collection.
-  static const unsigned int kRequestsBetweenCollecting;
-
-  // Map that contains a list of URL ID and their matching
-  // ExtensionThrottleEntry.
-  UrlEntryMap url_entries_;
-
-  // This keeps track of how many requests have been made. Used with
-  // GarbageCollectEntries.
-  unsigned int requests_since_last_gc_;
-
-  // Valid after construction.
-  GURL::Replacements url_id_replacements_;
-
-  // Valid once we've registered for network notifications.
-  base::PlatformThreadId registered_from_thread_;
-
-  bool ignore_user_gesture_load_flag_for_tests_;
-
-  // This is NULL when it is not set for tests.
-  std::unique_ptr<net::BackoffEntry::Policy> backoff_policy_for_tests_;
-
-  SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(ExtensionThrottleManager);
-};
-
-}  // namespace extensions
-
-#endif  // EXTENSIONS_BROWSER_EXTENSION_THROTTLE_MANAGER_H_
diff --git a/extensions/common/switches.cc b/extensions/common/switches.cc
index d6d4b0f..b7f529d 100644
--- a/extensions/common/switches.cc
+++ b/extensions/common/switches.cc
@@ -41,6 +41,11 @@
 // Enables extensions to hide bookmarks UI elements.
 const char kEnableOverrideBookmarksUI[] = "enable-override-bookmarks-ui";
 
+// Disable the net::URLRequestThrottlerManager functionality for
+// requests originating from extensions.
+const char kDisableExtensionsHttpThrottling[] =
+    "disable-extensions-http-throttling";
+
 // Enables tab for desktop sharing.
 const char kDisableTabForDesktopShare[] = "disable-tab-for-desktop-share";
 
@@ -72,6 +77,10 @@
 const char kPromptForExternalExtensions[] = "prompt-for-external-extensions";
 #endif
 
+// Set the parameters for ExtensionURLLoaderThrottleBrowserTest.
+const char kSetExtensionThrottleTestParams[] =
+    "set-extension-throttle-test-params";
+
 // Makes component extensions appear in chrome://settings/extensions.
 const char kShowComponentExtensionOptions[] =
     "show-component-extension-options";
diff --git a/extensions/common/switches.h b/extensions/common/switches.h
index cd01383..28eb9e2 100644
--- a/extensions/common/switches.h
+++ b/extensions/common/switches.h
@@ -14,6 +14,7 @@
 extern const char kAllowHTTPBackgroundPage[];
 extern const char kAllowLegacyExtensionManifests[];
 extern const char kDisableDesktopCaptureAudio[];
+extern const char kDisableExtensionsHttpThrottling[];
 extern const char kDisableTabForDesktopShare[];
 extern const char kEmbeddedExtensionOptions[];
 extern const char kEnableEmbeddedExtensionOptions[];
@@ -29,6 +30,7 @@
 #if defined(CHROMIUM_BUILD)
 extern const char kPromptForExternalExtensions[];
 #endif
+extern const char kSetExtensionThrottleTestParams[];
 extern const char kShowComponentExtensionOptions[];
 extern const char kTraceAppSource[];
 extern const char kWhitelistedExtensionID[];
diff --git a/extensions/renderer/BUILD.gn b/extensions/renderer/BUILD.gn
index 3bc1060..cff75540 100644
--- a/extensions/renderer/BUILD.gn
+++ b/extensions/renderer/BUILD.gn
@@ -111,6 +111,12 @@
     "extension_js_runner.h",
     "extension_port.cc",
     "extension_port.h",
+    "extension_throttle_entry.cc",
+    "extension_throttle_entry.h",
+    "extension_throttle_manager.cc",
+    "extension_throttle_manager.h",
+    "extension_url_loader_throttle.cc",
+    "extension_url_loader_throttle.h",
     "extensions_render_frame_observer.cc",
     "extensions_render_frame_observer.h",
     "extensions_renderer_client.cc",
@@ -419,6 +425,10 @@
     "bindings/event_emitter_unittest.cc",
     "bindings/exception_handler_unittest.cc",
     "event_unittest.cc",
+    "extension_throttle_simulation_unittest.cc",
+    "extension_throttle_test_support.cc",
+    "extension_throttle_test_support.h",
+    "extension_throttle_unittest.cc",
     "feature_cache_unittest.cc",
     "gc_callback_unittest.cc",
     "gin_port_unittest.cc",
diff --git a/extensions/renderer/DEPS b/extensions/renderer/DEPS
index d11f4ab..61d8e6e 100644
--- a/extensions/renderer/DEPS
+++ b/extensions/renderer/DEPS
@@ -4,6 +4,11 @@
   "+content/public/renderer",
 
   "+gin",
+  "+net/base/backoff_entry.h",
+
+  # For net::LOAD_MAYBE_USER_GESTURE. Will be removed as
+  # per crbug.com/516495
+  "+net/base/load_flags.h",
 
   "+third_party/skia/include/core",
   "+third_party/cld_3",
@@ -31,4 +36,8 @@
     # //chrome). See https://crbug.com/773004.
     "+chrome/test/base/chrome_render_view_test.h",
   ],
+  "extension_throttle_manager.cc": [
+    # For net::IsLocalhost.
+    "+net/base/url_util.h",
+  ],
 }
diff --git a/extensions/renderer/bindings/api_binding_js_util.cc b/extensions/renderer/bindings/api_binding_js_util.cc
index cbe2af8..a08531a 100644
--- a/extensions/renderer/bindings/api_binding_js_util.cc
+++ b/extensions/renderer/bindings/api_binding_js_util.cc
@@ -134,7 +134,7 @@
       NOTREACHED();
       return;
     }
-    event_name = gin::V8ToString(v8_event_name);
+    event_name = gin::V8ToString(isolate, v8_event_name);
   }
 
   DCHECK(!supports_filters || !event_name.empty())
@@ -233,7 +233,7 @@
     std::string exception_string;
     v8::Local<v8::String> v8_exception_string;
     if (exception->ToString(context).ToLocal(&v8_exception_string))
-      exception_string = gin::V8ToString(v8_exception_string);
+      exception_string = gin::V8ToString(isolate, v8_exception_string);
     else
       exception_string = "(failed to get error message)";
     full_message =
diff --git a/extensions/renderer/bindings/api_binding_test_util.cc b/extensions/renderer/bindings/api_binding_test_util.cc
index 932fd810..c564b16 100644
--- a/extensions/renderer/bindings/api_binding_test_util.cc
+++ b/extensions/renderer/bindings/api_binding_test_util.cc
@@ -32,7 +32,8 @@
   v8::MaybeLocal<v8::Value> maybe_result =
       function->Call(context, receiver, argc, argv);
   if (try_catch.HasCaught()) {
-    *out_error = gin::V8ToString(try_catch.Message()->Get());
+    *out_error =
+        gin::V8ToString(context->GetIsolate(), try_catch.Message()->Get());
     return false;
   }
   v8::Local<v8::Value> result;
diff --git a/extensions/renderer/bindings/api_binding_unittest.cc b/extensions/renderer/bindings/api_binding_unittest.cc
index 8b55e5a..dd0dc1dd 100644
--- a/extensions/renderer/bindings/api_binding_unittest.cc
+++ b/extensions/renderer/bindings/api_binding_unittest.cc
@@ -803,7 +803,7 @@
       EXPECT_EQ(1u, arguments->size());
       return result;
     }
-    EXPECT_EQ("foo", gin::V8ToString(arguments->at(0)));
+    EXPECT_EQ("foo", gin::V8ToString(context->GetIsolate(), arguments->at(0)));
     return result;
   };
   hooks->AddHandler("test.oneString", base::Bind(hook, &did_call));
@@ -1066,7 +1066,7 @@
       return result;
     }
     v8::Isolate* isolate = context->GetIsolate();
-    std::string arg_value = gin::V8ToString(arguments->at(0));
+    std::string arg_value = gin::V8ToString(isolate, arguments->at(0));
     if (arg_value == "throw") {
       isolate->ThrowException(v8::Exception::Error(
           gin::StringToV8(isolate, "Custom Hook Error")));
diff --git a/extensions/renderer/bindings/api_bindings_system_unittest.cc b/extensions/renderer/bindings/api_bindings_system_unittest.cc
index 6bcf894..146970e6 100644
--- a/extensions/renderer/bindings/api_bindings_system_unittest.cc
+++ b/extensions/renderer/bindings/api_bindings_system_unittest.cc
@@ -320,7 +320,7 @@
       return result;
     }
     std::string argument;
-    EXPECT_EQ("foo", gin::V8ToString(arguments->at(0)));
+    EXPECT_EQ("foo", gin::V8ToString(context->GetIsolate(), arguments->at(0)));
     if (!arguments->at(1)->IsFunction()) {
       EXPECT_TRUE(arguments->at(1)->IsFunction());
       return result;
diff --git a/extensions/renderer/bindings/api_event_handler.cc b/extensions/renderer/bindings/api_event_handler.cc
index cb56258..62dff1bc 100644
--- a/extensions/renderer/bindings/api_event_handler.cc
+++ b/extensions/renderer/bindings/api_event_handler.cc
@@ -74,7 +74,7 @@
   APIEventPerContextData* data =
       APIEventPerContextData::GetFrom(context, kDontCreateIfMissing);
   DCHECK(data);
-  std::string event_name = gin::V8ToString(info.Data());
+  std::string event_name = gin::V8ToString(isolate, info.Data());
   auto iter = data->emitters.find(event_name);
   if (iter == data->emitters.end())
     return;
diff --git a/extensions/renderer/bindings/api_request_handler.cc b/extensions/renderer/bindings/api_request_handler.cc
index 464d6bb8..96879a4 100644
--- a/extensions/renderer/bindings/api_request_handler.cc
+++ b/extensions/renderer/bindings/api_request_handler.cc
@@ -276,7 +276,7 @@
     v8::Local<v8::Message> v8_message = try_catch.Message();
     base::Optional<std::string> message;
     if (!v8_message.IsEmpty())
-      message = gin::V8ToString(v8_message->Get());
+      message = gin::V8ToString(isolate, v8_message->Get());
     exception_handler_->HandleException(context, "Error handling response",
                                         &try_catch);
   }
diff --git a/extensions/renderer/bindings/argument_spec_unittest.cc b/extensions/renderer/bindings/argument_spec_unittest.cc
index cd17f10..ed2451d 100644
--- a/extensions/renderer/bindings/argument_spec_unittest.cc
+++ b/extensions/renderer/bindings/argument_spec_unittest.cc
@@ -172,7 +172,7 @@
     }
   } else if (should_throw) {
     EXPECT_EQ(params.expected_thrown_message,
-              gin::V8ToString(try_catch.Message()->Get()));
+              gin::V8ToString(isolate, try_catch.Message()->Get()));
   }
 }
 
diff --git a/extensions/renderer/bindings/binding_access_checker_unittest.cc b/extensions/renderer/bindings/binding_access_checker_unittest.cc
index 7b11538..4d40fe1 100644
--- a/extensions/renderer/bindings/binding_access_checker_unittest.cc
+++ b/extensions/renderer/bindings/binding_access_checker_unittest.cc
@@ -49,7 +49,7 @@
     EXPECT_FALSE(checker.HasAccessOrThrowError(context, "unavailable"));
     ASSERT_TRUE(try_catch.HasCaught());
     EXPECT_EQ("Uncaught Error: 'unavailable' is not available in this context.",
-              gin::V8ToString(try_catch.Message()->Get()));
+              gin::V8ToString(isolate(), try_catch.Message()->Get()));
   }
 }
 
diff --git a/extensions/renderer/bindings/exception_handler.cc b/extensions/renderer/bindings/exception_handler.cc
index a6d72fb..b234c36 100644
--- a/extensions/renderer/bindings/exception_handler.cc
+++ b/extensions/renderer/bindings/exception_handler.cc
@@ -42,7 +42,7 @@
 
   v8::Local<v8::Value> message_value;
   {
-    v8::TryCatch inner_try_catch(context->GetIsolate());
+    v8::TryCatch inner_try_catch(isolate);
     inner_try_catch.SetVerbose(true);
     v8::Local<v8::Value> stack_trace_value;
     if (try_catch->StackTrace(context).ToLocal(&stack_trace_value)) {
@@ -55,7 +55,7 @@
   std::string full_message =
       !message_value.IsEmpty()
           ? base::StringPrintf("%s: %s", message.c_str(),
-                               gin::V8ToString(message_value).c_str())
+                               gin::V8ToString(isolate, message_value).c_str())
           : message;
   HandleException(context, full_message, try_catch->Exception());
   try_catch->Reset();  // Reset() to avoid handling the error more than once.
diff --git a/extensions/renderer/event_bindings.cc b/extensions/renderer/event_bindings.cc
index 6f9d8dc..003cc230 100644
--- a/extensions/renderer/event_bindings.cc
+++ b/extensions/renderer/event_bindings.cc
@@ -305,7 +305,7 @@
   v8::HandleScope handle_scope(isolate);
   CHECK_EQ(1, args.Length());
   CHECK(args[0]->IsString());
-  std::string event_name = gin::V8ToString(args[0]);
+  std::string event_name = gin::V8ToString(isolate, args[0]);
   EventBookkeeper::Get()->AddUnmanagedEvent(context(), event_name);
 }
 
@@ -315,7 +315,7 @@
   v8::HandleScope handle_scope(isolate);
   CHECK_EQ(1, args.Length());
   CHECK(args[0]->IsString());
-  std::string event_name = gin::V8ToString(args[0]);
+  std::string event_name = gin::V8ToString(isolate, args[0]);
   EventBookkeeper::Get()->RemoveUnmanagedEvent(context(), event_name);
 }
 
diff --git a/extensions/browser/extension_throttle_entry.cc b/extensions/renderer/extension_throttle_entry.cc
similarity index 83%
rename from extensions/browser/extension_throttle_entry.cc
rename to extensions/renderer/extension_throttle_entry.cc
index 877669a..199473b6 100644
--- a/extensions/browser/extension_throttle_entry.cc
+++ b/extensions/renderer/extension_throttle_entry.cc
@@ -2,19 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "extensions/browser/extension_throttle_entry.h"
+#include "extensions/renderer/extension_throttle_entry.h"
 
+#include <algorithm>
 #include <cmath>
+#include <memory>
 #include <utility>
 
 #include "base/logging.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
-#include "extensions/browser/extension_throttle_manager.h"
 #include "net/base/load_flags.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
 
 namespace extensions {
 
@@ -44,14 +43,10 @@
 const int ExtensionThrottleEntry::kDefaultMaximumBackoffMs = 15 * 60 * 1000;
 const int ExtensionThrottleEntry::kDefaultEntryLifetimeMs = 2 * 60 * 1000;
 
-ExtensionThrottleEntry::ExtensionThrottleEntry(
-    ExtensionThrottleManager* manager,
-    const std::string& url_id)
-    : ExtensionThrottleEntry(manager, url_id, false) {
-}
+ExtensionThrottleEntry::ExtensionThrottleEntry(const std::string& url_id)
+    : ExtensionThrottleEntry(url_id, false) {}
 
 ExtensionThrottleEntry::ExtensionThrottleEntry(
-    ExtensionThrottleManager* manager,
     const std::string& url_id,
     bool ignore_user_gesture_load_flag_for_tests)
     : sliding_window_period_(
@@ -59,16 +54,13 @@
       max_send_threshold_(kDefaultMaxSendThreshold),
       is_backoff_disabled_(false),
       backoff_entry_(&backoff_policy_),
-      manager_(manager),
       url_id_(url_id),
       ignore_user_gesture_load_flag_for_tests_(
           ignore_user_gesture_load_flag_for_tests) {
-  DCHECK(manager_);
   Initialize();
 }
 
 ExtensionThrottleEntry::ExtensionThrottleEntry(
-    ExtensionThrottleManager* manager,
     const std::string& url_id,
     const net::BackoffEntry::Policy* backoff_policy,
     bool ignore_user_gesture_load_flag_for_tests)
@@ -77,7 +69,6 @@
       max_send_threshold_(kDefaultMaxSendThreshold),
       is_backoff_disabled_(false),
       backoff_entry_(&backoff_policy_),
-      manager_(manager),
       url_id_(url_id),
       ignore_user_gesture_load_flag_for_tests_(
           ignore_user_gesture_load_flag_for_tests) {
@@ -86,29 +77,12 @@
   DCHECK_GE(backoff_policy->jitter_factor, 0.0);
   DCHECK_LT(backoff_policy->jitter_factor, 1.0);
   DCHECK_GE(backoff_policy->maximum_backoff_ms, 0);
-  DCHECK(manager_);
 
   Initialize();
   backoff_policy_ = *backoff_policy;
 }
 
 bool ExtensionThrottleEntry::IsEntryOutdated() const {
-  // This function is called by the ExtensionThrottleManager to determine
-  // whether entries should be discarded from its url_entries_ map.  We
-  // want to ensure that it does not remove entries from the map while there
-  // are clients (objects other than the manager) holding references to
-  // the entry, otherwise separate clients could end up holding separate
-  // entries for a request to the same URL, which is undesirable.  Therefore,
-  // if an entry has more than one reference (the map will always hold one),
-  // it should not be considered outdated.
-  //
-  // We considered whether to make ExtensionThrottleEntry objects
-  // non-refcounted, but since any means of knowing whether they are
-  // currently in use by others than the manager would be more or less
-  // equivalent to a refcount, we kept them refcounted.
-  if (!HasOneRef())
-    return false;
-
   // If there are send events in the sliding window period, we still need this
   // entry.
   if (!send_log_.empty() &&
@@ -123,15 +97,11 @@
   is_backoff_disabled_ = true;
 }
 
-void ExtensionThrottleEntry::DetachManager() {
-  manager_ = NULL;
-}
-
-bool ExtensionThrottleEntry::ShouldRejectRequest(
-    const net::URLRequest& request) const {
+bool ExtensionThrottleEntry::ShouldRejectRequest(int request_load_flags) const {
   bool reject_request = false;
-  if (!is_backoff_disabled_ && (ignore_user_gesture_load_flag_for_tests_ ||
-                                !ExplicitUserRequest(request.load_flags())) &&
+  if (!is_backoff_disabled_ &&
+      (ignore_user_gesture_load_flag_for_tests_ ||
+       !ExplicitUserRequest(request_load_flags)) &&
       GetBackoffEntry()->ShouldRejectRequest()) {
     reject_request = true;
   }
@@ -209,8 +179,7 @@
   return url_id_;
 }
 
-ExtensionThrottleEntry::~ExtensionThrottleEntry() {
-}
+ExtensionThrottleEntry::~ExtensionThrottleEntry() {}
 
 void ExtensionThrottleEntry::Initialize() {
   sliding_window_release_time_ = base::TimeTicks::Now();
diff --git a/extensions/browser/extension_throttle_entry.h b/extensions/renderer/extension_throttle_entry.h
similarity index 66%
rename from extensions/browser/extension_throttle_entry.h
rename to extensions/renderer/extension_throttle_entry.h
index e54e6c6..9699ce9 100644
--- a/extensions/browser/extension_throttle_entry.h
+++ b/extensions/renderer/extension_throttle_entry.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 EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_H_
-#define EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_H_
+#ifndef EXTENSIONS_RENDERER_EXTENSION_THROTTLE_ENTRY_H_
+#define EXTENSIONS_RENDERER_EXTENSION_THROTTLE_ENTRY_H_
 
 #include <stdint.h>
 
@@ -12,13 +12,10 @@
 #include "base/containers/queue.h"
 #include "base/macros.h"
 #include "base/time/time.h"
-#include "extensions/browser/extension_throttle_entry_interface.h"
 #include "net/base/backoff_entry.h"
 
 namespace extensions {
 
-class ExtensionThrottleManager;
-
 // ExtensionThrottleEntry represents an entry of ExtensionThrottleManager.
 // It analyzes requests of a specific URL over some period of time, in order to
 // deduce the back-off time for every request.
@@ -30,7 +27,7 @@
 // destination and provide guidance (to the application level only) on whether
 // too many requests have been sent and when a good time to send the next one
 // would be. This is never used to deny requests at the network level.
-class ExtensionThrottleEntry : public ExtensionThrottleEntryInterface {
+class ExtensionThrottleEntry {
  public:
   // Sliding window period.
   static const int kDefaultSlidingWindowPeriodMs;
@@ -57,24 +54,23 @@
   // Time after which the entry is considered outdated.
   static const int kDefaultEntryLifetimeMs;
 
-  // The manager object's lifetime must enclose the lifetime of this object.
-  ExtensionThrottleEntry(ExtensionThrottleManager* manager,
-                         const std::string& url_id);
+  // |url_id| is a unique entry ID.
+  explicit ExtensionThrottleEntry(const std::string& url_id);
 
   // Same as above, but exposes the option to ignore
   // net::LOAD_MAYBE_USER_GESTURE flag of the request.
-  ExtensionThrottleEntry(ExtensionThrottleManager* manager,
-                         const std::string& url_id,
+  ExtensionThrottleEntry(const std::string& url_id,
                          bool ignore_user_gesture_load_flag_for_tests);
 
   // The life span of instances created with this constructor is set to
   // infinite, and the number of initial errors to ignore is set to 0.
   // It is only used by unit tests.
-  ExtensionThrottleEntry(ExtensionThrottleManager* manager,
-                         const std::string& url_id,
+  ExtensionThrottleEntry(const std::string& url_id,
                          const net::BackoffEntry::Policy* backoff_policy,
                          bool ignore_user_gesture_load_flag_for_tests);
 
+  virtual ~ExtensionThrottleEntry();
+
   // Used by the manager, returns true if the entry needs to be garbage
   // collected.
   bool IsEntryOutdated() const;
@@ -82,21 +78,47 @@
   // Causes this entry to never reject requests due to back-off.
   void DisableBackoffThrottling();
 
-  // Causes this entry to NULL its manager pointer.
-  void DetachManager();
+  // Returns true when we have encountered server errors and are doing
+  // exponential back-off, unless |request_load_flags| indicates the
+  // request is likely to be user-initiated, or the NetworkDelegate returns
+  // false for |CanThrottleRequest(request)|.
+  //
+  // URLRequestHttpJob checks this method prior to every request; it
+  // cancels requests if this method returns true.
+  //
+  // Note: See load_flags.h for more detail on |request_load_flags|.
+  bool ShouldRejectRequest(int request_load_flags) const;
 
-  // Implementation of ExtensionThrottleEntryInterface.
-  bool ShouldRejectRequest(const net::URLRequest& request) const override;
+  // Calculates a recommended sending time for the next request and reserves it.
+  // The sending time is not earlier than the current exponential back-off
+  // release time or |earliest_time|. Moreover, the previous results of
+  // the method are taken into account, in order to make sure they are spread
+  // properly over time.
+  // Returns the recommended delay before sending the next request, in
+  // milliseconds. The return value is always positive or 0.
+  // Although it is not mandatory, respecting the value returned by this method
+  // is helpful to avoid traffic overload.
   int64_t ReserveSendingTimeForNextRequest(
-      const base::TimeTicks& earliest_time) override;
-  base::TimeTicks GetExponentialBackoffReleaseTime() const override;
-  void UpdateWithResponse(int status_code) override;
-  void ReceivedContentWasMalformed(int response_code) override;
-  const std::string& GetURLIdForDebugging() const override;
+      const base::TimeTicks& earliest_time);
+
+  // Returns the time after which requests are allowed.
+  base::TimeTicks GetExponentialBackoffReleaseTime() const;
+
+  // This method needs to be called each time a response is received.
+  void UpdateWithResponse(int status_code);
+
+  // Lets higher-level modules, that know how to parse particular response
+  // bodies, notify of receiving malformed content for the given URL. This will
+  // be handled by the throttler as if an HTTP 503 response had been received to
+  // the request, i.e. it will count as a failure, unless the HTTP response code
+  // indicated is already one of those that will be counted as an error.
+  void ReceivedContentWasMalformed(int response_code);
+
+  // Get the URL ID associated with this entry. Should only be used for
+  // debugging purpose.
+  const std::string& GetURLIdForDebugging() const;
 
  protected:
-  ~ExtensionThrottleEntry() override;
-
   void Initialize();
 
   // Returns true if the given response code is considered a success for
@@ -148,11 +170,8 @@
   // Access it through GetBackoffEntry() to allow a unit test seam.
   net::BackoffEntry backoff_entry_;
 
-  // Weak back-reference to the manager object managing us.
-  ExtensionThrottleManager* manager_;
-
   // Canonicalized URL string that this entry is for; used for logging only.
-  std::string url_id_;
+  const std::string url_id_;
 
   bool ignore_user_gesture_load_flag_for_tests_;
 
@@ -161,4 +180,4 @@
 
 }  // namespace extensions
 
-#endif  // EXTENSIONS_BROWSER_EXTENSION_THROTTLE_ENTRY_H_
+#endif  // EXTENSIONS_RENDERER_EXTENSION_THROTTLE_ENTRY_H_
diff --git a/extensions/renderer/extension_throttle_manager.cc b/extensions/renderer/extension_throttle_manager.cc
new file mode 100644
index 0000000..f78645c
--- /dev/null
+++ b/extensions/renderer/extension_throttle_manager.cc
@@ -0,0 +1,202 @@
+// Copyright (c) 2012 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 "extensions/renderer/extension_throttle_manager.h"
+
+#include <utility>
+
+#include "base/logging.h"
+#include "base/metrics/field_trial.h"
+#include "base/metrics/histogram.h"
+#include "base/strings/string_util.h"
+#include "extensions/common/constants.h"
+#include "extensions/renderer/extension_url_loader_throttle.h"
+#include "net/base/url_util.h"
+#include "third_party/blink/public/platform/web_url.h"
+#include "third_party/blink/public/platform/web_url_request.h"
+
+namespace extensions {
+
+const unsigned int ExtensionThrottleManager::kMaximumNumberOfEntries = 1500;
+const unsigned int ExtensionThrottleManager::kRequestsBetweenCollecting = 200;
+
+ExtensionThrottleManager::ExtensionThrottleManager()
+    : requests_since_last_gc_(0),
+      ignore_user_gesture_load_flag_for_tests_(false) {
+  url_id_replacements_.ClearPassword();
+  url_id_replacements_.ClearUsername();
+  url_id_replacements_.ClearQuery();
+  url_id_replacements_.ClearRef();
+}
+
+ExtensionThrottleManager::~ExtensionThrottleManager() {
+  base::AutoLock auto_lock(lock_);
+  // Delete all entries.
+  url_entries_.clear();
+}
+
+std::unique_ptr<content::URLLoaderThrottle>
+ExtensionThrottleManager::MaybeCreateURLLoaderThrottle(
+    const blink::WebURLRequest& request) {
+  if (!request.SiteForCookies().ProtocolIs(extensions::kExtensionScheme))
+    return nullptr;
+  return std::make_unique<ExtensionURLLoaderThrottle>(this);
+}
+
+ExtensionThrottleEntry* ExtensionThrottleManager::RegisterRequestUrl(
+    const GURL& url) {
+  // Internal function, no locking.
+
+  // Normalize the url.
+  std::string url_id = GetIdFromUrl(url);
+
+  // Periodically garbage collect old entries.
+  GarbageCollectEntriesIfNecessary();
+
+  // Find the entry in the map or create a new null entry.
+  std::unique_ptr<ExtensionThrottleEntry>& entry = url_entries_[url_id];
+
+  // If the entry exists but could be garbage collected at this point, we
+  // start with a fresh entry so that we possibly back off a bit less
+  // aggressively (i.e. this resets the error count when the entry's URL
+  // hasn't been requested in long enough).
+  if (entry && entry->IsEntryOutdated())
+    entry.reset();
+
+  // Create the entry if needed.
+  if (!entry) {
+    if (backoff_policy_for_tests_) {
+      entry.reset(
+          new ExtensionThrottleEntry(url_id, backoff_policy_for_tests_.get(),
+                                     ignore_user_gesture_load_flag_for_tests_));
+    } else {
+      entry.reset(new ExtensionThrottleEntry(
+          url_id, ignore_user_gesture_load_flag_for_tests_));
+    }
+
+    // We only disable back-off throttling on an entry that we have
+    // just constructed.  This is to allow unit tests to explicitly override
+    // the entry for localhost URLs.
+    if (net::IsLocalhost(url)) {
+      // TODO(joi): Once sliding window is separate from back-off throttling,
+      // we can simply return a dummy implementation of
+      // ExtensionThrottleEntry here that never blocks anything.
+      entry->DisableBackoffThrottling();
+    }
+  }
+
+  return entry.get();
+}
+
+bool ExtensionThrottleManager::ShouldRejectRequest(const GURL& request_url,
+                                                   int request_load_flags) {
+  base::AutoLock auto_lock(lock_);
+  return RegisterRequestUrl(request_url)
+      ->ShouldRejectRequest(request_load_flags);
+}
+
+bool ExtensionThrottleManager::ShouldRejectRedirect(
+    const GURL& request_url,
+    int request_load_flags,
+    const net::RedirectInfo& redirect_info) {
+  {
+    base::AutoLock auto_lock(lock_);
+    const std::string url_id = GetIdFromUrl(request_url);
+    ExtensionThrottleEntry* entry = url_entries_[url_id].get();
+    DCHECK(entry);
+    entry->UpdateWithResponse(redirect_info.status_code);
+  }
+  return ShouldRejectRequest(redirect_info.new_url, request_load_flags);
+}
+
+void ExtensionThrottleManager::WillProcessResponse(
+    const GURL& response_url,
+    const network::ResourceResponseHead& response_head) {
+  if (response_head.network_accessed) {
+    base::AutoLock auto_lock(lock_);
+    const std::string url_id = GetIdFromUrl(response_url);
+    ExtensionThrottleEntry* entry = url_entries_[url_id].get();
+    DCHECK(entry);
+    entry->UpdateWithResponse(response_head.headers->response_code());
+  }
+}
+
+void ExtensionThrottleManager::SetBackoffPolicyForTests(
+    std::unique_ptr<net::BackoffEntry::Policy> policy) {
+  base::AutoLock auto_lock(lock_);
+  backoff_policy_for_tests_ = std::move(policy);
+}
+
+void ExtensionThrottleManager::OverrideEntryForTests(
+    const GURL& url,
+    std::unique_ptr<ExtensionThrottleEntry> entry) {
+  base::AutoLock auto_lock(lock_);
+  // Normalize the url.
+  std::string url_id = GetIdFromUrl(url);
+
+  // Periodically garbage collect old entries.
+  GarbageCollectEntriesIfNecessary();
+
+  url_entries_[url_id] = std::move(entry);
+}
+
+void ExtensionThrottleManager::EraseEntryForTests(const GURL& url) {
+  base::AutoLock auto_lock(lock_);
+  // Normalize the url.
+  std::string url_id = GetIdFromUrl(url);
+  url_entries_.erase(url_id);
+}
+
+void ExtensionThrottleManager::SetIgnoreUserGestureLoadFlagForTests(
+    bool ignore_user_gesture_load_flag_for_tests) {
+  base::AutoLock auto_lock(lock_);
+  ignore_user_gesture_load_flag_for_tests_ = true;
+}
+
+void ExtensionThrottleManager::SetOnline(bool is_online) {
+  // When we switch from online to offline or change IP addresses, we
+  // clear all back-off history. This is a precaution in case the change in
+  // online state now lets us communicate without error with servers that
+  // we were previously getting 500 or 503 responses from (perhaps the
+  // responses are from a badly-written proxy that should have returned a
+  // 502 or 504 because it's upstream connection was down or it had no route
+  // to the server).
+  // Remove all entries.  Any entries that in-flight requests have a reference
+  // to will live until those requests end, and these entries may be
+  // inconsistent with new entries for the same URLs, but since what we
+  // want is a clean slate for the new connection type, this is OK.
+  base::AutoLock auto_lock(lock_);
+  url_entries_.clear();
+  requests_since_last_gc_ = 0;
+}
+
+std::string ExtensionThrottleManager::GetIdFromUrl(const GURL& url) const {
+  if (!url.is_valid())
+    return url.possibly_invalid_spec();
+
+  GURL id = url.ReplaceComponents(url_id_replacements_);
+  return base::ToLowerASCII(id.spec());
+}
+
+void ExtensionThrottleManager::GarbageCollectEntriesIfNecessary() {
+  requests_since_last_gc_++;
+  if (requests_since_last_gc_ < kRequestsBetweenCollecting)
+    return;
+  requests_since_last_gc_ = 0;
+
+  GarbageCollectEntries();
+}
+
+void ExtensionThrottleManager::GarbageCollectEntries() {
+  base::EraseIf(url_entries_, [](const auto& entry) {
+    return entry.second->IsEntryOutdated();
+  });
+
+  // In case something broke we want to make sure not to grow indefinitely.
+  while (url_entries_.size() > kMaximumNumberOfEntries) {
+    url_entries_.erase(url_entries_.begin());
+  }
+}
+
+}  // namespace extensions
diff --git a/extensions/renderer/extension_throttle_manager.h b/extensions/renderer/extension_throttle_manager.h
new file mode 100644
index 0000000..86ac1258
--- /dev/null
+++ b/extensions/renderer/extension_throttle_manager.h
@@ -0,0 +1,152 @@
+// Copyright (c) 2012 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 EXTENSIONS_RENDERER_EXTENSION_THROTTLE_MANAGER_H_
+#define EXTENSIONS_RENDERER_EXTENSION_THROTTLE_MANAGER_H_
+
+#include <map>
+#include <memory>
+#include <string>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/synchronization/lock.h"
+#include "extensions/renderer/extension_throttle_entry.h"
+#include "url/gurl.h"
+
+namespace blink {
+class WebURLRequest;
+}  // namespace blink
+
+namespace content {
+class URLLoaderThrottle;
+}  // namespace content
+
+namespace net {
+struct RedirectInfo;
+}  // namespace net
+
+namespace network {
+struct ResourceResponseHead;
+}  // namespace network
+
+namespace extensions {
+
+// This is a thread safe class that registers URL request throttler entries for
+// URLs being accessed in order to supervise traffic. URL requests for HTTP
+// contents should register their URLs in this manager on each request.
+//
+// ExtensionThrottleManager maintains a map of URL IDs to URL request
+// throttler entries. It creates URL request throttler entries when new URLs
+// are registered, and does garbage collection from time to time in order to
+// clean out outdated entries. URL ID consists of lowercased scheme, host, port
+// and path. All URLs converted to the same ID will share the same entry.
+class ExtensionThrottleManager {
+ public:
+  ExtensionThrottleManager();
+  virtual ~ExtensionThrottleManager();
+
+  // Creates a throttle which uses this class to prevent extensions from
+  // requesting a URL too often, if such a throttle is needed.
+  std::unique_ptr<content::URLLoaderThrottle> MaybeCreateURLLoaderThrottle(
+      const blink::WebURLRequest& request);
+
+  // Determine if a request to |request_url| with the given |request_load_flags|
+  // (see net/base/load_flags.h) should be rejected.
+  bool ShouldRejectRequest(const GURL& request_url, int request_load_flags);
+
+  // Determine if a redirect from the original |request_url| with the original
+  // |request_load_flags| (see net/base/load_flags.h) should be allowed to be
+  // redirected as specified by |redirect_info|.
+  bool ShouldRejectRedirect(const GURL& request_url,
+                            int request_load_flags,
+                            const net::RedirectInfo& redirect_info);
+
+  // Must be called when the |response_head| for a request has been received.
+  void WillProcessResponse(const GURL& response_url,
+                           const network::ResourceResponseHead& response_head);
+
+  // Set the network status online state as specified in |is_online|.
+  void SetOnline(bool is_online);
+
+  void SetBackoffPolicyForTests(
+      std::unique_ptr<net::BackoffEntry::Policy> policy);
+
+  // Registers a new entry in this service and overrides the existing entry (if
+  // any) for the URL. The service will hold a reference to the entry.
+  // It is only used by unit tests.
+  void OverrideEntryForTests(const GURL& url,
+                             std::unique_ptr<ExtensionThrottleEntry> entry);
+
+  // Sets whether to ignore net::LOAD_MAYBE_USER_GESTURE of the request for
+  // testing. Otherwise, requests will not be throttled when they may have been
+  // throttled in response to a recent user gesture, though they're still
+  // counted for the purpose of throttling other requests.
+  void SetIgnoreUserGestureLoadFlagForTests(
+      bool ignore_user_gesture_load_flag_for_tests);
+
+  int GetNumberOfEntriesForTests() const { return url_entries_.size(); }
+
+ protected:
+  // Method that allows us to transform a URL into an ID that can be used in our
+  // map. Resulting IDs will be lowercase and consist of the scheme, host, port
+  // and path (without query string, fragment, etc.).
+  // If the URL is invalid, the invalid spec will be returned, without any
+  // transformation.
+  std::string GetIdFromUrl(const GURL& url) const;
+
+  // Must be called for every request, returns the URL request throttler entry
+  // associated with the URL. The caller must inform this entry of some events.
+  // Please refer to extension_throttle_entry.h for further information.
+  ExtensionThrottleEntry* RegisterRequestUrl(const GURL& url);
+
+  // Method that does the actual work of garbage collecting.
+  void GarbageCollectEntries();
+
+ private:
+  // Explicitly erases an entry.
+  // This is useful to remove those entries which have got infinite lifetime and
+  // thus won't be garbage collected.
+  // It is only used by unit tests.
+  void EraseEntryForTests(const GURL& url);
+
+  // Whether throttling is enabled or not.
+  void set_enforce_throttling(bool enforce);
+  bool enforce_throttling();
+
+  // Method that ensures the map gets cleaned from time to time. The period at
+  // which garbage collecting happens is adjustable with the
+  // kRequestBetweenCollecting constant.
+  void GarbageCollectEntriesIfNecessary();
+
+  // Maximum number of entries that we are willing to collect in our map.
+  static const unsigned int kMaximumNumberOfEntries;
+  // Number of requests that will be made between garbage collection.
+  static const unsigned int kRequestsBetweenCollecting;
+
+  // Map that contains a list of URL ID (composed of the scheme, host, port and
+  // path) and their matching ExtensionThrottleEntry.
+  std::map<std::string, std::unique_ptr<ExtensionThrottleEntry>> url_entries_;
+
+  // This keeps track of how many requests have been made. Used with
+  // GarbageCollectEntries.
+  unsigned int requests_since_last_gc_;
+
+  // Valid after construction.
+  GURL::Replacements url_id_replacements_;
+
+  bool ignore_user_gesture_load_flag_for_tests_;
+
+  // This is null when it is not set for tests.
+  std::unique_ptr<net::BackoffEntry::Policy> backoff_policy_for_tests_;
+
+  // Used to synchronize all public methods.
+  base::Lock lock_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExtensionThrottleManager);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_EXTENSION_THROTTLE_MANAGER_H_
diff --git a/extensions/browser/extension_throttle_simulation_unittest.cc b/extensions/renderer/extension_throttle_simulation_unittest.cc
similarity index 92%
rename from extensions/browser/extension_throttle_simulation_unittest.cc
rename to extensions/renderer/extension_throttle_simulation_unittest.cc
index 55ddf9a..60c32052 100644
--- a/extensions/browser/extension_throttle_simulation_unittest.cc
+++ b/extensions/renderer/extension_throttle_simulation_unittest.cc
@@ -25,21 +25,14 @@
 #include "base/message_loop/message_loop.h"
 #include "base/rand_util.h"
 #include "base/time/time.h"
-#include "extensions/browser/extension_throttle_manager.h"
-#include "extensions/browser/extension_throttle_test_support.h"
-#include "net/base/request_priority.h"
-#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_test_util.h"
+#include "extensions/renderer/extension_throttle_entry.h"
+#include "extensions/renderer/extension_throttle_test_support.h"
+#include "net/base/load_flags.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::TimeDelta;
 using base::TimeTicks;
 using net::BackoffEntry;
-using net::TestURLRequestContext;
-using net::URLRequest;
-using net::URLRequestContext;
 
 namespace extensions {
 namespace {
@@ -131,11 +124,7 @@
         num_overloaded_ticks_remaining_(0),
         num_current_tick_queries_(0),
         num_overloaded_ticks_(0),
-        max_experienced_queries_per_tick_(0),
-        mock_request_(context_.CreateRequest(GURL(),
-                                             net::DEFAULT_PRIORITY,
-                                             nullptr,
-                                             TRAFFIC_ANNOTATION_FOR_TESTS)) {}
+        max_experienced_queries_per_tick_(0) {}
 
   void SetDowntime(const TimeTicks& start_time, const TimeDelta& duration) {
     start_downtime_ = start_time;
@@ -196,8 +185,6 @@
     return max_experienced_queries_per_tick_;
   }
 
-  const URLRequest& mock_request() const { return *mock_request_; }
-
   std::string VisualizeASCII(int terminal_width) {
     // Account for | characters we place at left of graph.
     terminal_width -= 1;
@@ -282,8 +269,6 @@
     return output;
   }
 
-  const URLRequestContext& context() const { return context_; }
-
  private:
   TimeTicks now_;
   TimeTicks start_downtime_;  // Can be 0 to say "no downtime".
@@ -296,19 +281,18 @@
   int max_experienced_queries_per_tick_;
   std::vector<int> requests_per_tick_;
 
-  TestURLRequestContext context_;
-  std::unique_ptr<URLRequest> mock_request_;
-
   DISALLOW_COPY_AND_ASSIGN(Server);
 };
 
 // Mock throttler entry used by Requester class.
 class MockExtensionThrottleEntry : public ExtensionThrottleEntry {
  public:
-  explicit MockExtensionThrottleEntry(ExtensionThrottleManager* manager)
-      : ExtensionThrottleEntry(manager, std::string()),
+  MockExtensionThrottleEntry()
+      : ExtensionThrottleEntry(std::string()),
         backoff_entry_(&backoff_policy_, &fake_clock_) {}
 
+  ~MockExtensionThrottleEntry() override {}
+
   const BackoffEntry* GetBackoffEntry() const override {
     return &backoff_entry_;
   }
@@ -321,9 +305,6 @@
     fake_clock_.set_now(fake_time);
   }
 
- protected:
-  ~MockExtensionThrottleEntry() override {}
-
  private:
   mutable TestTickClock fake_clock_;
   BackoffEntry backoff_entry_;
@@ -395,11 +376,11 @@
 // requests a specific resource.
 class Requester : public DiscreteTimeSimulation::Actor {
  public:
-  Requester(MockExtensionThrottleEntry* throttler_entry,
+  Requester(std::unique_ptr<MockExtensionThrottleEntry> throttler_entry,
             const TimeDelta& time_between_requests,
             Server* server,
             RequesterResults* results)
-      : throttler_entry_(throttler_entry),
+      : throttler_entry_(std::move(throttler_entry)),
         time_between_requests_(time_between_requests),
         last_attempt_was_failure_(false),
         server_(server),
@@ -426,7 +407,7 @@
 
     if (throttler_entry_->ImplGetTimeNow() - time_of_last_attempt_ >
         effective_delay) {
-      if (!throttler_entry_->ShouldRejectRequest(server_->mock_request())) {
+      if (!throttler_entry_->ShouldRejectRequest(net::LOAD_NORMAL)) {
         int status_code = server_->HandleRequest();
         throttler_entry_->UpdateWithResponse(status_code);
 
@@ -472,7 +453,7 @@
   TimeDelta last_downtime_duration() const { return last_downtime_duration_; }
 
  private:
-  scoped_refptr<MockExtensionThrottleEntry> throttler_entry_;
+  std::unique_ptr<MockExtensionThrottleEntry> throttler_entry_;
   const TimeDelta time_between_requests_;
   TimeDelta request_jitter_;
   TimeTicks time_of_last_attempt_;
@@ -492,33 +473,30 @@
   const size_t kNumAttackers = 50;
   const size_t kNumClients = 50;
   DiscreteTimeSimulation simulation;
-  ExtensionThrottleManager manager;
   std::vector<std::unique_ptr<Requester>> requesters;
   for (size_t i = 0; i < kNumAttackers; ++i) {
     // Use a tiny time_between_requests so the attackers will ping the
     // server at every tick of the simulation.
-    scoped_refptr<MockExtensionThrottleEntry> throttler_entry(
-        new MockExtensionThrottleEntry(&manager));
+    auto throttler_entry = std::make_unique<MockExtensionThrottleEntry>();
     if (!enable_throttling)
       throttler_entry->DisableBackoffThrottling();
 
     Requester* attacker =
-        new Requester(throttler_entry.get(), TimeDelta::FromMilliseconds(1),
-                      server, attacker_results);
+        new Requester(std::move(throttler_entry),
+                      TimeDelta::FromMilliseconds(1), server, attacker_results);
     attacker->SetStartupJitter(TimeDelta::FromSeconds(120));
     requesters.push_back(base::WrapUnique(attacker));
     simulation.AddActor(attacker);
   }
   for (size_t i = 0; i < kNumClients; ++i) {
     // Normal clients only make requests every 2 minutes, plus/minus 1 minute.
-    scoped_refptr<MockExtensionThrottleEntry> throttler_entry(
-        new MockExtensionThrottleEntry(&manager));
+    auto throttler_entry = std::make_unique<MockExtensionThrottleEntry>();
     if (!enable_throttling)
       throttler_entry->DisableBackoffThrottling();
 
     Requester* client =
-        new Requester(throttler_entry.get(), TimeDelta::FromMinutes(2), server,
-                      client_results);
+        new Requester(std::move(throttler_entry), TimeDelta::FromMinutes(2),
+                      server, client_results);
     client->SetStartupJitter(TimeDelta::FromSeconds(120));
     client->SetRequestJitter(TimeDelta::FromMinutes(1));
     requesters.push_back(base::WrapUnique(client));
@@ -590,14 +568,12 @@
   Server server(std::numeric_limits<int>::max(), 1.0);
   server.SetDowntime(start_downtime, duration);
 
-  ExtensionThrottleManager manager;
-  scoped_refptr<MockExtensionThrottleEntry> throttler_entry(
-      new MockExtensionThrottleEntry(&manager));
+  auto throttler_entry = std::make_unique<MockExtensionThrottleEntry>();
   if (!enable_throttling)
     throttler_entry->DisableBackoffThrottling();
 
-  Requester requester(throttler_entry.get(), average_client_interval, &server,
-                      NULL);
+  Requester requester(std::move(throttler_entry), average_client_interval,
+                      &server, NULL);
   requester.SetStartupJitter(duration / 3);
   requester.SetRequestJitter(average_client_interval);
 
diff --git a/extensions/browser/extension_throttle_test_support.cc b/extensions/renderer/extension_throttle_test_support.cc
similarity index 86%
rename from extensions/browser/extension_throttle_test_support.cc
rename to extensions/renderer/extension_throttle_test_support.cc
index 75433b4..feba4a35 100644
--- a/extensions/browser/extension_throttle_test_support.cc
+++ b/extensions/renderer/extension_throttle_test_support.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 "extensions/browser/extension_throttle_test_support.h"
+#include "extensions/renderer/extension_throttle_test_support.h"
 
 namespace extensions {
 
diff --git a/extensions/browser/extension_throttle_test_support.h b/extensions/renderer/extension_throttle_test_support.h
similarity index 78%
rename from extensions/browser/extension_throttle_test_support.h
rename to extensions/renderer/extension_throttle_test_support.h
index 9ab5dfe3..e7c1f9640 100644
--- a/extensions/browser/extension_throttle_test_support.h
+++ b/extensions/renderer/extension_throttle_test_support.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 EXTENSIONS_BROWSER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
-#define EXTENSIONS_BROWSER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
+#ifndef EXTENSIONS_RENDERER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
+#define EXTENSIONS_RENDERER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
 
 #include <string>
 
@@ -30,4 +30,4 @@
 
 }  // namespace extensions
 
-#endif  // EXTENSIONS_BROWSER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
+#endif  // EXTENSIONS_RENDERER_EXTENSION_THROTTLE_TEST_SUPPORT_H_
diff --git a/extensions/browser/extension_throttle_unittest.cc b/extensions/renderer/extension_throttle_unittest.cc
similarity index 74%
rename from extensions/browser/extension_throttle_unittest.cc
rename to extensions/renderer/extension_throttle_unittest.cc
index 260f9aa..4aa3b97 100644
--- a/extensions/browser/extension_throttle_unittest.cc
+++ b/extensions/renderer/extension_throttle_unittest.cc
@@ -5,32 +5,18 @@
 #include <memory>
 
 #include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/pickle.h"
 #include "base/stl_util.h"
 #include "base/strings/string_number_conversions.h"
-#include "base/strings/stringprintf.h"
 #include "base/time/time.h"
-#include "extensions/browser/extension_throttle_entry.h"
-#include "extensions/browser/extension_throttle_manager.h"
-#include "extensions/browser/extension_throttle_test_support.h"
+#include "extensions/renderer/extension_throttle_entry.h"
+#include "extensions/renderer/extension_throttle_manager.h"
+#include "extensions/renderer/extension_throttle_test_support.h"
 #include "net/base/load_flags.h"
-#include "net/base/request_priority.h"
-#include "net/base/test_completion_callback.h"
-#include "net/traffic_annotation/network_traffic_annotation_test_helper.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::TimeDelta;
 using base::TimeTicks;
 using net::BackoffEntry;
-using net::NetworkChangeNotifier;
-using net::TestNetworkDelegate;
-using net::TestURLRequestContext;
-using net::URLRequest;
-using net::URLRequestContext;
 
 namespace extensions {
 
@@ -38,16 +24,15 @@
 
 class MockExtensionThrottleEntry : public ExtensionThrottleEntry {
  public:
-  explicit MockExtensionThrottleEntry(ExtensionThrottleManager* manager)
-      : ExtensionThrottleEntry(manager, std::string()),
+  MockExtensionThrottleEntry()
+      : ExtensionThrottleEntry(std::string()),
         backoff_entry_(&backoff_policy_, &fake_clock_) {
     InitPolicy();
   }
-  MockExtensionThrottleEntry(ExtensionThrottleManager* manager,
-                             const TimeTicks& exponential_backoff_release_time,
+  MockExtensionThrottleEntry(const TimeTicks& exponential_backoff_release_time,
                              const TimeTicks& sliding_window_release_time,
                              const TimeTicks& fake_now)
-      : ExtensionThrottleEntry(manager, std::string()),
+      : ExtensionThrottleEntry(std::string()),
         fake_clock_(fake_now),
         backoff_entry_(&backoff_policy_, &fake_clock_) {
     InitPolicy();
@@ -56,6 +41,8 @@
     set_sliding_window_release_time(sliding_window_release_time);
   }
 
+  ~MockExtensionThrottleEntry() override {}
+
   void InitPolicy() {
     // Some tests become flaky if we have jitter.
     backoff_policy_.jitter_factor = 0.0;
@@ -99,9 +86,6 @@
     ExtensionThrottleEntry::set_sliding_window_release_time(release_time);
   }
 
- protected:
-  ~MockExtensionThrottleEntry() override {}
-
  private:
   mutable TestTickClock fake_clock_;
   BackoffEntry backoff_entry_;
@@ -111,12 +95,17 @@
  public:
   MockExtensionThrottleManager() : create_entry_index_(0) {}
 
-  // Method to process the URL using ExtensionThrottleManager protected
-  // method.
-  std::string DoGetUrlIdFromUrl(const GURL& url) { return GetIdFromUrl(url); }
+  std::string GetIdFromUrl(const GURL& url) const {
+    return ExtensionThrottleManager::GetIdFromUrl(url);
+  }
 
-  // Method to use the garbage collecting method of ExtensionThrottleManager.
-  void DoGarbageCollectEntries() { GarbageCollectEntries(); }
+  ExtensionThrottleEntry* RegisterRequestUrl(const GURL& url) {
+    return ExtensionThrottleManager::RegisterRequestUrl(url);
+  }
+
+  void GarbageCollectEntries() {
+    ExtensionThrottleManager::GarbageCollectEntries();
+  }
 
   // Returns the number of entries in the map.
   int GetNumberOfEntries() const { return GetNumberOfEntriesForTests(); }
@@ -130,9 +119,9 @@
     std::string fake_url_string("http://www.fakeurl.com/");
     fake_url_string.append(base::IntToString(create_entry_index_++));
     GURL fake_url(fake_url_string);
-    OverrideEntryForTests(
-        fake_url, new MockExtensionThrottleEntry(this, time, TimeTicks::Now(),
-                                                 TimeTicks::Now()));
+    OverrideEntryForTests(fake_url,
+                          std::make_unique<MockExtensionThrottleEntry>(
+                              time, TimeTicks::Now(), TimeTicks::Now()));
   }
 
  private:
@@ -167,28 +156,18 @@
 
 class ExtensionThrottleEntryTest : public testing::Test {
  protected:
-  ExtensionThrottleEntryTest()
-      : request_(context_.CreateRequest(GURL(),
-                                        net::DEFAULT_PRIORITY,
-                                        nullptr,
-                                        TRAFFIC_ANNOTATION_FOR_TESTS)) {}
+  ExtensionThrottleEntryTest() = default;
 
   void SetUp() override;
 
   TimeTicks now_;
   MockExtensionThrottleManager manager_;  // Dummy object, not used.
-  scoped_refptr<MockExtensionThrottleEntry> entry_;
-  base::MessageLoopForIO message_loop_;
-
-  TestURLRequestContext context_;
-  std::unique_ptr<URLRequest> request_;
+  std::unique_ptr<MockExtensionThrottleEntry> entry_;
 };
 
 void ExtensionThrottleEntryTest::SetUp() {
-  request_->SetLoadFlags(0);
-
   now_ = TimeTicks::Now();
-  entry_ = new MockExtensionThrottleEntry(&manager_);
+  entry_.reset(new MockExtensionThrottleEntry());
   entry_->ResetToBlank(now_);
 }
 
@@ -196,25 +175,24 @@
   entry_->set_exponential_backoff_release_time(entry_->ImplGetTimeNow() +
                                                TimeDelta::FromMilliseconds(1));
 
-  EXPECT_TRUE(entry_->ShouldRejectRequest(*request_));
+  EXPECT_TRUE(entry_->ShouldRejectRequest(net::LOAD_NORMAL));
 }
 
 TEST_F(ExtensionThrottleEntryTest, InterfaceDuringExponentialBackoff) {
   entry_->set_exponential_backoff_release_time(entry_->ImplGetTimeNow() +
                                                TimeDelta::FromMilliseconds(1));
-  EXPECT_TRUE(entry_->ShouldRejectRequest(*request_));
+  EXPECT_TRUE(entry_->ShouldRejectRequest(net::LOAD_NORMAL));
 
   // Also end-to-end test the load flags exceptions.
-  request_->SetLoadFlags(net::LOAD_MAYBE_USER_GESTURE);
-  EXPECT_FALSE(entry_->ShouldRejectRequest(*request_));
+  EXPECT_FALSE(entry_->ShouldRejectRequest(net::LOAD_MAYBE_USER_GESTURE));
 }
 
 TEST_F(ExtensionThrottleEntryTest, InterfaceNotDuringExponentialBackoff) {
   entry_->set_exponential_backoff_release_time(entry_->ImplGetTimeNow());
-  EXPECT_FALSE(entry_->ShouldRejectRequest(*request_));
+  EXPECT_FALSE(entry_->ShouldRejectRequest(net::LOAD_NORMAL));
   entry_->set_exponential_backoff_release_time(entry_->ImplGetTimeNow() -
                                                TimeDelta::FromMilliseconds(1));
-  EXPECT_FALSE(entry_->ShouldRejectRequest(*request_));
+  EXPECT_FALSE(entry_->ShouldRejectRequest(net::LOAD_NORMAL));
 }
 
 TEST_F(ExtensionThrottleEntryTest, InterfaceUpdateFailure) {
@@ -324,23 +302,7 @@
       ~net::LOAD_MAYBE_USER_GESTURE));
 }
 
-class ExtensionThrottleManagerTest : public testing::Test {
- protected:
-  ExtensionThrottleManagerTest()
-      : request_(context_.CreateRequest(GURL(),
-                                        net::DEFAULT_PRIORITY,
-                                        nullptr,
-                                        TRAFFIC_ANNOTATION_FOR_TESTS)) {}
-
-  void SetUp() override { request_->SetLoadFlags(0); }
-
-  base::MessageLoopForIO message_loop_;
-  // context_ must be declared before request_.
-  TestURLRequestContext context_;
-  std::unique_ptr<URLRequest> request_;
-};
-
-TEST_F(ExtensionThrottleManagerTest, IsUrlStandardised) {
+TEST(ExtensionThrottleManagerTest, IsUrlStandardised) {
   MockExtensionThrottleManager manager;
   GurlAndString test_values[] = {
       GurlAndString(GURL("http://www.example.com"),
@@ -362,30 +324,30 @@
                     std::string("http://www.example.com:1234/"), __LINE__)};
 
   for (unsigned int i = 0; i < base::size(test_values); ++i) {
-    std::string temp = manager.DoGetUrlIdFromUrl(test_values[i].url);
-    EXPECT_EQ(temp, test_values[i].result) << "Test case #" << i << " line "
-                                           << test_values[i].line << " failed";
+    std::string temp = manager.GetIdFromUrl(test_values[i].url);
+    EXPECT_EQ(temp, test_values[i].result)
+        << "Test case #" << i << " line " << test_values[i].line << " failed";
   }
 }
 
-TEST_F(ExtensionThrottleManagerTest, AreEntriesBeingCollected) {
+TEST(ExtensionThrottleManagerTest, AreEntriesBeingCollected) {
   MockExtensionThrottleManager manager;
 
   manager.CreateEntry(true);  // true = Entry is outdated.
   manager.CreateEntry(true);
   manager.CreateEntry(true);
-  manager.DoGarbageCollectEntries();
+  manager.GarbageCollectEntries();
   EXPECT_EQ(0, manager.GetNumberOfEntries());
 
   manager.CreateEntry(false);
   manager.CreateEntry(false);
   manager.CreateEntry(false);
   manager.CreateEntry(true);
-  manager.DoGarbageCollectEntries();
+  manager.GarbageCollectEntries();
   EXPECT_EQ(3, manager.GetNumberOfEntries());
 }
 
-TEST_F(ExtensionThrottleManagerTest, IsHostBeingRegistered) {
+TEST(ExtensionThrottleManagerTest, IsHostBeingRegistered) {
   MockExtensionThrottleManager manager;
 
   manager.RegisterRequestUrl(GURL("http://www.example.com/"));
@@ -397,16 +359,16 @@
   EXPECT_EQ(3, manager.GetNumberOfEntries());
 }
 
-TEST_F(ExtensionThrottleManagerTest, LocalHostOptedOut) {
+TEST(ExtensionThrottleManagerTest, LocalHostOptedOut) {
   MockExtensionThrottleManager manager;
   // A localhost entry should always be opted out.
-  scoped_refptr<ExtensionThrottleEntryInterface> localhost_entry =
+  ExtensionThrottleEntry* localhost_entry =
       manager.RegisterRequestUrl(GURL("http://localhost/hello"));
-  EXPECT_FALSE(localhost_entry->ShouldRejectRequest((*request_)));
+  EXPECT_FALSE(localhost_entry->ShouldRejectRequest(net::LOAD_NORMAL));
   for (int i = 0; i < 10; ++i) {
     localhost_entry->UpdateWithResponse(503);
   }
-  EXPECT_FALSE(localhost_entry->ShouldRejectRequest((*request_)));
+  EXPECT_FALSE(localhost_entry->ShouldRejectRequest(net::LOAD_NORMAL));
 
   // We're not mocking out GetTimeNow() in this scenario
   // so add a 100 ms buffer to avoid flakiness (that should always
@@ -416,30 +378,30 @@
             localhost_entry->GetExponentialBackoffReleaseTime());
 }
 
-TEST_F(ExtensionThrottleManagerTest, ClearOnNetworkChange) {
+TEST(ExtensionThrottleManagerTest, ClearOnNetworkChange) {
   for (int i = 0; i < 2; ++i) {
     MockExtensionThrottleManager manager;
-    scoped_refptr<ExtensionThrottleEntryInterface> entry_before =
+    ExtensionThrottleEntry* entry_before =
         manager.RegisterRequestUrl(GURL("http://www.example.com/"));
     for (int j = 0; j < 10; ++j) {
       entry_before->UpdateWithResponse(503);
     }
-    EXPECT_TRUE(entry_before->ShouldRejectRequest(*request_));
+    EXPECT_TRUE(entry_before->ShouldRejectRequest(net::LOAD_NORMAL));
 
     switch (i) {
       case 0:
-        manager.OnNetworkChanged(NetworkChangeNotifier::CONNECTION_UNKNOWN);
+        manager.SetOnline(/*is_online=*/true);
         break;
       case 1:
-        manager.OnNetworkChanged(NetworkChangeNotifier::CONNECTION_NONE);
+        manager.SetOnline(/*is_online=*/false);
         break;
       default:
         FAIL();
     }
 
-    scoped_refptr<ExtensionThrottleEntryInterface> entry_after =
+    ExtensionThrottleEntry* entry_after =
         manager.RegisterRequestUrl(GURL("http://www.example.com/"));
-    EXPECT_FALSE(entry_after->ShouldRejectRequest(*request_));
+    EXPECT_FALSE(entry_after->ShouldRejectRequest(net::LOAD_NORMAL));
   }
 }
 
diff --git a/extensions/renderer/extension_url_loader_throttle.cc b/extensions/renderer/extension_url_loader_throttle.cc
new file mode 100644
index 0000000..cd8ec20
--- /dev/null
+++ b/extensions/renderer/extension_url_loader_throttle.cc
@@ -0,0 +1,53 @@
+// 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.
+
+#include "extensions/renderer/extension_url_loader_throttle.h"
+
+#include "extensions/renderer/extension_throttle_manager.h"
+
+namespace extensions {
+
+namespace {
+
+const char kCancelReason[] = "ExtensionURLLoaderThrottle";
+
+}  // anonymous namespace
+
+ExtensionURLLoaderThrottle::ExtensionURLLoaderThrottle(
+    ExtensionThrottleManager* manager)
+    : manager_(manager) {
+  DCHECK(manager_);
+}
+
+ExtensionURLLoaderThrottle::~ExtensionURLLoaderThrottle() = default;
+
+void ExtensionURLLoaderThrottle::WillStartRequest(
+    network::ResourceRequest* request,
+    bool* defer) {
+  start_request_url_ = request->url;
+  request_load_flags_ = request->load_flags;
+  if (manager_->ShouldRejectRequest(start_request_url_, request_load_flags_))
+    delegate_->CancelWithError(net::ERR_TEMPORARILY_THROTTLED, kCancelReason);
+}
+
+void ExtensionURLLoaderThrottle::WillRedirectRequest(
+    const net::RedirectInfo& redirect_info,
+    const network::ResourceResponseHead& response_head,
+    bool* defer,
+    std::vector<std::string>* to_be_removed_request_headers) {
+  if (manager_->ShouldRejectRedirect(start_request_url_, request_load_flags_,
+                                     redirect_info))
+    delegate_->CancelWithError(net::ERR_TEMPORARILY_THROTTLED, kCancelReason);
+}
+
+void ExtensionURLLoaderThrottle::WillProcessResponse(
+    const GURL& response_url,
+    const network::ResourceResponseHead& response_head,
+    bool* defer) {
+  manager_->WillProcessResponse(response_url, response_head);
+}
+
+void ExtensionURLLoaderThrottle::DetachFromCurrentSequence() {}
+
+}  // namespace extensions
diff --git a/extensions/renderer/extension_url_loader_throttle.h b/extensions/renderer/extension_url_loader_throttle.h
new file mode 100644
index 0000000..d8e6330
--- /dev/null
+++ b/extensions/renderer/extension_url_loader_throttle.h
@@ -0,0 +1,53 @@
+// 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.
+
+#ifndef EXTENSIONS_RENDERER_EXTENSION_URL_LOADER_THROTTLE_H_
+#define EXTENSIONS_RENDERER_EXTENSION_URL_LOADER_THROTTLE_H_
+
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "content/public/common/url_loader_throttle.h"
+
+namespace extensions {
+
+class ExtensionThrottleManager;
+
+// This class monitors requests issued by extensions and throttles the request
+// if there are too many requests made within a short time to urls with the same
+// scheme, host, port and path. For the exact criteria for throttling, please
+// also see extension_throttle_manager.cc.
+class ExtensionURLLoaderThrottle : public content::URLLoaderThrottle {
+ public:
+  explicit ExtensionURLLoaderThrottle(ExtensionThrottleManager* manager);
+
+  ~ExtensionURLLoaderThrottle() override;
+
+  // content::URLLoaderThrottle:
+  void WillStartRequest(network::ResourceRequest* request,
+                        bool* defer) override;
+  void WillRedirectRequest(
+      const net::RedirectInfo& redirect_info,
+      const network::ResourceResponseHead& response_head,
+      bool* defer,
+      std::vector<std::string>* to_be_removed_request_headers) override;
+  void WillProcessResponse(const GURL& response_url,
+                           const network::ResourceResponseHead& response_head,
+                           bool* defer) override;
+
+ private:
+  // content::URLLoaderThrottle:
+  void DetachFromCurrentSequence() override;
+
+  ExtensionThrottleManager* manager_ = nullptr;
+  int request_load_flags_ = 0;
+  GURL start_request_url_;
+
+  DISALLOW_COPY_AND_ASSIGN(ExtensionURLLoaderThrottle);
+};
+
+}  // namespace extensions
+
+#endif  // EXTENSIONS_RENDERER_EXTENSION_URL_LOADER_THROTTLE_H_
diff --git a/extensions/renderer/gin_port_unittest.cc b/extensions/renderer/gin_port_unittest.cc
index a7978d8..2732191 100644
--- a/extensions/renderer/gin_port_unittest.cc
+++ b/extensions/renderer/gin_port_unittest.cc
@@ -355,7 +355,8 @@
   for (const auto& function :
        {send_message_function, disconnect_function, get_on_message_function,
         get_on_disconnect_function}) {
-    SCOPED_TRACE(gin::V8ToString(function->ToString(context).ToLocalChecked()));
+    SCOPED_TRACE(gin::V8ToString(isolate(),
+                                 function->ToString(context).ToLocalChecked()));
     RunFunctionAndExpectError(function, context, arraysize(function_args),
                               function_args,
                               "Uncaught Error: Extension context invalidated.");
diff --git a/extensions/renderer/i18n_hooks_delegate.cc b/extensions/renderer/i18n_hooks_delegate.cc
index f85dbbdc..c79d584 100644
--- a/extensions/renderer/i18n_hooks_delegate.cc
+++ b/extensions/renderer/i18n_hooks_delegate.cc
@@ -77,9 +77,9 @@
   DCHECK(script_context->extension());
   DCHECK(parsed_arguments[0]->IsString());
   v8::Local<v8::Value> message = i18n_hooks::GetI18nMessage(
-      gin::V8ToString(parsed_arguments[0]), script_context->extension()->id(),
-      parsed_arguments[1], script_context->GetRenderFrame(),
-      script_context->v8_context());
+      gin::V8ToString(script_context->isolate(), parsed_arguments[0]),
+      script_context->extension()->id(), parsed_arguments[1],
+      script_context->GetRenderFrame(), script_context->v8_context());
 
   RequestResult result(RequestResult::HANDLED);
   result.return_value = message;
@@ -104,7 +104,8 @@
   v8::Local<v8::Context> v8_context = script_context->v8_context();
 
   v8::Local<v8::Value> detected_languages = i18n_hooks::DetectTextLanguage(
-      v8_context, gin::V8ToString(parsed_arguments[0]));
+      v8_context,
+      gin::V8ToString(script_context->isolate(), parsed_arguments[0]));
 
   // NOTE(devlin): The JS bindings make this callback asynchronous through a
   // setTimeout, but it shouldn't be necessary.
diff --git a/extensions/renderer/i18n_hooks_util.cc b/extensions/renderer/i18n_hooks_util.cc
index 8388cec..1f1495f 100644
--- a/extensions/renderer/i18n_hooks_util.cc
+++ b/extensions/renderer/i18n_hooks_util.cc
@@ -184,7 +184,7 @@
     }
   } else if (v8_substitutions->IsString()) {
     // chrome.i18n.getMessage("message_name", "one param");
-    substitutions.push_back(gin::V8ToString(v8_substitutions));
+    substitutions.push_back(gin::V8ToString(isolate, v8_substitutions));
   }
   // TODO(devlin): We currently just ignore any non-string, non-array values
   // for substitutions, but the type is documented as 'any'. We should either
diff --git a/extensions/renderer/messaging_bindings.cc b/extensions/renderer/messaging_bindings.cc
index 28fa6fd5..70955e1 100644
--- a/extensions/renderer/messaging_bindings.cc
+++ b/extensions/renderer/messaging_bindings.cc
@@ -121,11 +121,12 @@
 
   ExtensionPort& port = *iter->second;
 
+  v8::Isolate* isolate = args.GetIsolate();
   std::string error;
   std::unique_ptr<Message> message = messaging_util::MessageFromJSONString(
-      args[1].As<v8::String>(), &error, context()->web_frame());
+      isolate, args[1].As<v8::String>(), &error, context()->web_frame());
   if (!message) {
-    args.GetReturnValue().Set(gin::StringToV8(args.GetIsolate(), error));
+    args.GetReturnValue().Set(gin::StringToV8(isolate, error));
     return;
   }
 
diff --git a/extensions/renderer/messaging_util.cc b/extensions/renderer/messaging_util.cc
index 3ab9ded..77d7ad3c 100644
--- a/extensions/renderer/messaging_util.cc
+++ b/extensions/renderer/messaging_util.cc
@@ -75,15 +75,16 @@
     return nullptr;
   }
 
-  return MessageFromJSONString(stringified, error_out);
+  return MessageFromJSONString(isolate, stringified, error_out);
 }
 
 std::unique_ptr<Message> MessageFromJSONString(
+    v8::Isolate* isolate,
     v8::Local<v8::String> json,
     std::string* error_out,
     blink::WebLocalFrame* web_frame) {
   std::string message;
-  message = gin::V8ToString(json);
+  message = gin::V8ToString(isolate, json);
   // JSON.stringify can fail to produce a string value in one of two ways: it
   // can throw an exception (as with unserializable objects), or it can return
   // `undefined` (as with e.g. passing a function). If JSON.stringify returns
@@ -159,7 +160,7 @@
 
     if (!v8_channel_name->IsUndefined()) {
       DCHECK(v8_channel_name->IsString());
-      options.channel_name = gin::V8ToString(v8_channel_name);
+      options.channel_name = gin::V8ToString(isolate, v8_channel_name);
     }
   }
 
@@ -221,7 +222,7 @@
     DCHECK(crx_file::id_util::IdIsValid(target_id));
   } else {
     DCHECK(v8_target_id->IsString());
-    target_id = gin::V8ToString(v8_target_id);
+    target_id = gin::V8ToString(script_context->isolate(), v8_target_id);
     // NOTE(devlin): JS bindings only validate that the extension id is present,
     // rather than validating its content. This seems better. Let's see how this
     // goes.
diff --git a/extensions/renderer/messaging_util.h b/extensions/renderer/messaging_util.h
index bac02f8..0959426 100644
--- a/extensions/renderer/messaging_util.h
+++ b/extensions/renderer/messaging_util.h
@@ -41,6 +41,7 @@
                                        std::string* error);
 // Same as above, but expects a serialized JSON string instead of a value.
 std::unique_ptr<Message> MessageFromJSONString(
+    v8::Isolate* isolate,
     v8::Local<v8::String> json,
     std::string* error,
     blink::WebLocalFrame* web_frame = nullptr);
diff --git a/extensions/renderer/module_system_test.cc b/extensions/renderer/module_system_test.cc
index c02e76f..06ffcad 100644
--- a/extensions/renderer/module_system_test.cc
+++ b/extensions/renderer/module_system_test.cc
@@ -64,7 +64,7 @@
                       const v8::FunctionCallbackInfo<v8::Value>& args) {
       CHECK_EQ(1, args.Length());
       CHECK(args[0]->IsString());
-      std::string api_name = gin::V8ToString(args[0]);
+      std::string api_name = gin::V8ToString(context->isolate(), args[0]);
       v8::Local<v8::Object> api;
       if (bindings_system) {
         api = bindings_system->GetAPIObjectForTesting(context, api_name);
diff --git a/extensions/renderer/native_extension_bindings_system.cc b/extensions/renderer/native_extension_bindings_system.cc
index a7f1e57..dd89ee46 100644
--- a/extensions/renderer/native_extension_bindings_system.cc
+++ b/extensions/renderer/native_extension_bindings_system.cc
@@ -687,7 +687,7 @@
     return;
   }
 
-  std::string api_name = gin::V8ToString(info[0]);
+  std::string api_name = gin::V8ToString(isolate, info[0]);
   const Feature* feature = FeatureProvider::GetAPIFeature(api_name);
   ScriptContext* script_context = GetScriptContextFromV8ContextChecked(context);
   if (!feature ||
diff --git a/extensions/renderer/native_extension_bindings_system_unittest.cc b/extensions/renderer/native_extension_bindings_system_unittest.cc
index 73f590d..9738044 100644
--- a/extensions/renderer/native_extension_bindings_system_unittest.cc
+++ b/extensions/renderer/native_extension_bindings_system_unittest.cc
@@ -476,7 +476,7 @@
   ASSERT_FALSE(app_binding_keys.IsEmpty());
   ASSERT_TRUE(app_binding_keys->IsString());
   EXPECT_EQ("[\"runtime\",\"window\"]",
-            gin::V8ToString(app_binding_keys));
+            gin::V8ToString(isolate(), app_binding_keys));
 
   const char kUseAppRuntime[] =
       "(function() {\n"
@@ -938,10 +938,14 @@
 
   // The extension only has access to networkingPrivate, so networking.onc
   // (and chrome.networking in general) should be undefined.
-  EXPECT_EQ("object", gin::V8ToString(V8ValueFromScriptSource(
-                          context, "typeof chrome.networkingPrivate")));
-  EXPECT_EQ("undefined", gin::V8ToString(V8ValueFromScriptSource(
-                             context, "typeof chrome.networking")));
+  EXPECT_EQ("object",
+            gin::V8ToString(isolate(),
+                            V8ValueFromScriptSource(
+                                context, "typeof chrome.networkingPrivate")));
+  EXPECT_EQ(
+      "undefined",
+      gin::V8ToString(isolate(), V8ValueFromScriptSource(
+                                     context, "typeof chrome.networking")));
 }
 
 // Tests that a context having access to the source for an aliased API does not
@@ -964,10 +968,14 @@
 
   // The extension only has access to networking.onc, so networkingPrivate
   // should be undefined.
-  EXPECT_EQ("undefined", gin::V8ToString(V8ValueFromScriptSource(
-                             context, "typeof chrome.networkingPrivate")));
-  EXPECT_EQ("object", gin::V8ToString(V8ValueFromScriptSource(
-                          context, "typeof chrome.networking.onc")));
+  EXPECT_EQ("undefined",
+            gin::V8ToString(isolate(),
+                            V8ValueFromScriptSource(
+                                context, "typeof chrome.networkingPrivate")));
+  EXPECT_EQ(
+      "object",
+      gin::V8ToString(isolate(), V8ValueFromScriptSource(
+                                     context, "typeof chrome.networking.onc")));
 }
 
 // Test that if an extension has access to both an alias and an alias source,
@@ -989,10 +997,14 @@
   bindings_system()->UpdateBindingsForContext(script_context);
 
   // Both APIs should be defined, since the extension has access to each.
-  EXPECT_EQ("object", gin::V8ToString(V8ValueFromScriptSource(
-                          context, "typeof chrome.networkingPrivate")));
-  EXPECT_EQ("object", gin::V8ToString(V8ValueFromScriptSource(
-                          context, "typeof chrome.networking.onc")));
+  EXPECT_EQ("object",
+            gin::V8ToString(isolate(),
+                            V8ValueFromScriptSource(
+                                context, "typeof chrome.networkingPrivate")));
+  EXPECT_EQ(
+      "object",
+      gin::V8ToString(isolate(), V8ValueFromScriptSource(
+                                     context, "typeof chrome.networking.onc")));
 
   // The APIs should not be equal.
   bool equal = true;
@@ -1024,7 +1036,7 @@
   v8::Local<v8::Value> property =
       V8ValueFromScriptSource(context, "chrome.runtime");
   EXPECT_TRUE(property->IsString());
-  EXPECT_EQ("bar", gin::V8ToString(property));
+  EXPECT_EQ("bar", gin::V8ToString(isolate(), property));
 }
 
 // Tests that script can delete an API property.
diff --git a/extensions/renderer/runtime_hooks_delegate.cc b/extensions/renderer/runtime_hooks_delegate.cc
index 49e95df..cb1dbb5 100644
--- a/extensions/renderer/runtime_hooks_delegate.cc
+++ b/extensions/renderer/runtime_hooks_delegate.cc
@@ -178,13 +178,14 @@
   DCHECK(arguments[0]->IsString());
   DCHECK(script_context->extension());
 
-  std::string path = gin::V8ToString(arguments[0]);
+  v8::Isolate* isolate = script_context->isolate();
+  std::string path = gin::V8ToString(isolate, arguments[0]);
 
   RequestResult result(RequestResult::HANDLED);
   std::string url = base::StringPrintf(
       "chrome-extension://%s%s%s", script_context->extension()->id().c_str(),
       !path.empty() && path[0] == '/' ? "" : "/", path.c_str());
-  result.return_value = gin::StringToV8(script_context->isolate(), url);
+  result.return_value = gin::StringToV8(isolate, url);
 
   return result;
 }
@@ -238,7 +239,8 @@
     const std::vector<v8::Local<v8::Value>>& arguments) {
   DCHECK_EQ(3u, arguments.size());
 
-  std::string application_name = gin::V8ToString(arguments[0]);
+  std::string application_name =
+      gin::V8ToString(script_context->isolate(), arguments[0]);
 
   v8::Local<v8::Value> v8_message = arguments[1];
   DCHECK(!v8_message.IsEmpty());
@@ -301,7 +303,8 @@
   DCHECK_EQ(1u, arguments.size());
   DCHECK(arguments[0]->IsString());
 
-  std::string application_name = gin::V8ToString(arguments[0]);
+  std::string application_name =
+      gin::V8ToString(script_context->isolate(), arguments[0]);
   gin::Handle<GinPort> port = messaging_service_->Connect(
       script_context, MessageTarget::ForNativeApp(application_name),
       std::string(), false);
diff --git a/extensions/renderer/runtime_hooks_delegate_unittest.cc b/extensions/renderer/runtime_hooks_delegate_unittest.cc
index 6a6843a..25fc7c7e 100644
--- a/extensions/renderer/runtime_hooks_delegate_unittest.cc
+++ b/extensions/renderer/runtime_hooks_delegate_unittest.cc
@@ -120,7 +120,7 @@
 
   {
     v8::Local<v8::Value> id = get_id(context);
-    EXPECT_EQ(extension()->id(), gin::V8ToString(id));
+    EXPECT_EQ(extension()->id(), gin::V8ToString(isolate(), id));
   }
 
   {
@@ -163,7 +163,7 @@
     v8::Local<v8::Value> url = RunFunction(get_url, context, 0, nullptr);
     ASSERT_FALSE(url.IsEmpty());
     ASSERT_TRUE(url->IsString());
-    EXPECT_EQ(expected_url.spec(), gin::V8ToString(url));
+    EXPECT_EQ(expected_url.spec(), gin::V8ToString(isolate(), url));
   };
 
   get_url("''", extension()->url());
diff --git a/extensions/strings/extensions_strings_am.xtb b/extensions/strings/extensions_strings_am.xtb
index adc37524..7354c57b 100644
--- a/extensions/strings/extensions_strings_am.xtb
+++ b/extensions/strings/extensions_strings_am.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">ያልታወቀ ምርት <ph name="PRODUCT_ID" /> ከ<ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">የዝርዝር ሰነድ ፋይሉ ልክ ያልሆነ ነው</translation>
 <translation id="7217838517480956708">የዚህ ማሽን አስተዳዳሪ <ph name="EXTENSION_NAME" /> እንዲጫን ይፈልጋል። ሊወገድ ወይም ሊቀየር አይችልም።</translation>
+<translation id="7939686037314084444">ቅጥያው በአግባቡ ሊጫን አልቻለም። የአውታረ መረብ ጥያቄዎችን መጥለፍ ላይችል ይችላል።</translation>
 <translation id="7972881773422714442">አማራጮች፦ <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">ተጠቃሚውን የሚመለከት</translation>
 <translation id="8047248493720652249">ይህ ቅጥያ የወረደውን «<ph name="ATTEMPTED_FILENAME" />» ብሎ መሰየም አልተሳካለትም፣ ምክንያቱም ሌላ ቅጥያ (<ph name="EXTENSION_NAME" />) ሌላ የፋይል ስም «<ph name="ACTUAL_FILENAME" />» ስለወሰነ ነው።</translation>
diff --git a/extensions/strings/extensions_strings_bg.xtb b/extensions/strings/extensions_strings_bg.xtb
index 4f6af62..d74110f 100644
--- a/extensions/strings/extensions_strings_bg.xtb
+++ b/extensions/strings/extensions_strings_bg.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Неизвестен продукт <ph name="PRODUCT_ID" /> от <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Файлът на манифеста е невалиден</translation>
 <translation id="7217838517480956708">Администраторът на тази машина изисква разширението <ph name="EXTENSION_NAME" /> да е инсталирано. То не може да бъде премахнато или променено.</translation>
+<translation id="7939686037314084444">Разширението не се зареди правилно. То може да не е в състояние да прехваща мрежовите заявки.</translation>
 <translation id="7972881773422714442">Опции: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Предна</translation>
 <translation id="8047248493720652249">Това разширение не успя да наименува изтеглянето „<ph name="ATTEMPTED_FILENAME" />“, защото друго разширение (<ph name="EXTENSION_NAME" />) определи различно файлово име – „<ph name="ACTUAL_FILENAME" />“.</translation>
diff --git a/extensions/strings/extensions_strings_ca.xtb b/extensions/strings/extensions_strings_ca.xtb
index 28bbdb6..1ce61582 100644
--- a/extensions/strings/extensions_strings_ca.xtb
+++ b/extensions/strings/extensions_strings_ca.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Producte desconegut <ph name="PRODUCT_ID" /> de: <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">El fitxer de manifest no és vàlid</translation>
 <translation id="7217838517480956708">L'administrador d'aquest equip necessita que s'instal·li <ph name="EXTENSION_NAME" />. No es pot eliminar o modificar.</translation>
+<translation id="7939686037314084444">L'extensió no s'ha carregat correctament. És possible que no pugui interceptar les sol·licituds de xarxa.</translation>
 <translation id="7972881773422714442">Opcions: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Càmera frontal</translation>
 <translation id="8047248493720652249">Aquesta extensió no ha pogut posar nom a la baixada "<ph name="ATTEMPTED_FILENAME" />" perquè una altra extensió (<ph name="EXTENSION_NAME" />) ha indicat un nom de fitxer diferent "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_cs.xtb b/extensions/strings/extensions_strings_cs.xtb
index ddf288f..a1004f5 100644
--- a/extensions/strings/extensions_strings_cs.xtb
+++ b/extensions/strings/extensions_strings_cs.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Neznámý produkt <ph name="PRODUCT_ID" /> od dodavatele <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Soubor manifestu je neplatný</translation>
 <translation id="7217838517480956708">Správce tohoto počítače vyžaduje instalaci rozšíření <ph name="EXTENSION_NAME" />. Nelze je odebrat ani upravit.</translation>
+<translation id="7939686037314084444">Rozšíření se nepodařilo správně načíst. Je možné, že nebude moci zachytávat síťové požadavky.</translation>
 <translation id="7972881773422714442">Možnosti: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Přední</translation>
 <translation id="8047248493720652249">Tomuto rozšíření se nepodařilo pojmenovat stahovaný soubor „<ph name="ATTEMPTED_FILENAME" />“, protože jiné rozšíření (<ph name="EXTENSION_NAME" />) vybralo jiný název souboru „<ph name="ACTUAL_FILENAME" />“.</translation>
diff --git a/extensions/strings/extensions_strings_da.xtb b/extensions/strings/extensions_strings_da.xtb
index ec2dda9..c3dfd346 100644
--- a/extensions/strings/extensions_strings_da.xtb
+++ b/extensions/strings/extensions_strings_da.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Ukendt produkt, <ph name="PRODUCT_ID" />, fra <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifestfilen er ugyldig</translation>
 <translation id="7217838517480956708">Administratoren af denne computer kræver, at <ph name="EXTENSION_NAME" /> skal installeres. Den kan ikke fjernes eller ændres.</translation>
+<translation id="7939686037314084444">Udvidelsen kunne ikke indlæses korrekt. Den kan muligvis ikke opfange netværksanmodninger.</translation>
 <translation id="7972881773422714442">Valgmuligheder: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Frontkamera</translation>
 <translation id="8047248493720652249">Denne udvidelse har ikke navngivet downloaden "<ph name="ATTEMPTED_FILENAME" />", fordi en anden udvidelse (<ph name="EXTENSION_NAME" />) har fastlagt et andet filnavn "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_de.xtb b/extensions/strings/extensions_strings_de.xtb
index 97a9517..4021f48 100644
--- a/extensions/strings/extensions_strings_de.xtb
+++ b/extensions/strings/extensions_strings_de.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Unbekanntes Produkt <ph name="PRODUCT_ID" /> von <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifest-Datei ist ungültig</translation>
 <translation id="7217838517480956708">Der Administrator dieses Computers schreibt die Installation von <ph name="EXTENSION_NAME" /> vor. Die Erweiterung kann nicht entfernt oder geändert werden.</translation>
+<translation id="7939686037314084444">Die Erweiterung wurde nicht richtig geladen. Möglicherweise kann sie keine Netzwerkanfragen abfangen.</translation>
 <translation id="7972881773422714442">Options: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Frontkamera</translation>
 <translation id="8047248493720652249">Diese Erweiterung konnte den Download nicht "<ph name="ATTEMPTED_FILENAME" />" nennen, weil eine andere Erweiterung (<ph name="EXTENSION_NAME" />) einen anderen Dateinamen "<ph name="ACTUAL_FILENAME" />" festgelegt hat.</translation>
diff --git a/extensions/strings/extensions_strings_el.xtb b/extensions/strings/extensions_strings_el.xtb
index 9855f20..77b538f 100644
--- a/extensions/strings/extensions_strings_el.xtb
+++ b/extensions/strings/extensions_strings_el.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Άγνωστο προϊόν <ph name="PRODUCT_ID" /> από <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Το αρχείο μανιφέστου δεν είναι έγκυρο</translation>
 <translation id="7217838517480956708">Ο διαχειριστής αυτού του υπολογιστή απαιτεί την εγκατάσταση της επέκτασης <ph name="EXTENSION_NAME" />. Δεν είναι δυνατή η κατάργηση ή η τροποποίησή της.</translation>
+<translation id="7939686037314084444">Δεν ήταν δυνατή η σωστή φόρτωσης της επέκτασης. Μπορεί να μην είναι σε θέση να ματαιώνει αιτήματα δικτύου.</translation>
 <translation id="7972881773422714442">Επιλογές: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Μπροστινή κάμερα</translation>
 <translation id="8047248493720652249">Η επέκταση δεν κατόρθωσε να ονομάσει τη λήψη "<ph name="ATTEMPTED_FILENAME" />" επειδή μια άλλη επέκταση (<ph name="EXTENSION_NAME" />) καθόρισε ένα διαφορετικό όνομα "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_es.xtb b/extensions/strings/extensions_strings_es.xtb
index 6fee7867..0da55c2 100644
--- a/extensions/strings/extensions_strings_es.xtb
+++ b/extensions/strings/extensions_strings_es.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Producto <ph name="PRODUCT_ID" /> de <ph name="VENDOR_NAME" /> desconocido</translation>
 <translation id="7068383018033524534">El archivo de manifiesto no es válido</translation>
 <translation id="7217838517480956708">El administrador de este ordenador necesita que se instale <ph name="EXTENSION_NAME" />. No se puede eliminar ni modificar.</translation>
+<translation id="7939686037314084444">No se ha podido cargar la extensión correctamente. Es posible que no pueda interceptar solicitudes de red.</translation>
 <translation id="7972881773422714442">Opciones: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Delantera</translation>
 <translation id="8047248493720652249">Esta extensión no ha podido asignar un nombre a la descarga "<ph name="ATTEMPTED_FILENAME" />" porque otra extensión (<ph name="EXTENSION_NAME" />) ha determinado un nombre de archivo diferente "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_et.xtb b/extensions/strings/extensions_strings_et.xtb
index 0b4d4a4..9c97ea8 100644
--- a/extensions/strings/extensions_strings_et.xtb
+++ b/extensions/strings/extensions_strings_et.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Tundmatu toode <ph name="PRODUCT_ID" /> teenusepakkujalt <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifestifail on kehtetu</translation>
 <translation id="7217838517480956708">Seadme administraator nõuab, et <ph name="EXTENSION_NAME" /> oleks installitud. Seda ei saa eemaldada ega muuta.</translation>
+<translation id="7939686037314084444">Laienduse laadimine nurjus. See ei saa võib-olla võrgutaotlusi suunata.</translation>
 <translation id="7972881773422714442">Valikud: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Kasutaja poole suunatud</translation>
 <translation id="8047248493720652249">Laiendus ei saanud määrata allalaaditavale failile nimeks „<ph name="ATTEMPTED_FILENAME" />”, sest teine laiendus (<ph name="EXTENSION_NAME" />) määras teise failinime „<ph name="ACTUAL_FILENAME" />”.</translation>
diff --git a/extensions/strings/extensions_strings_fa.xtb b/extensions/strings/extensions_strings_fa.xtb
index 278cbaa4..e51ec758 100644
--- a/extensions/strings/extensions_strings_fa.xtb
+++ b/extensions/strings/extensions_strings_fa.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">محصول نامشخص <ph name="PRODUCT_ID" /> از <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">فایل مانیفست نامعتبر است</translation>
 <translation id="7217838517480956708">سرپرست این دستگاه نصب <ph name="EXTENSION_NAME" /> را لازم کرده است. آن را نمی‌توان تغییر داد یا حذف کرد.</translation>
+<translation id="7939686037314084444">افزونه درست بارگیری نشد. شاید نتواند درخواست‌های شبکه را رهگیری کند.</translation>
 <translation id="7972881773422714442">گزینه‌ها: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">رو به کاربر</translation>
 <translation id="8047248493720652249">این برنامه افزودنی نتوانست نام‌گذاری بارگیری «<ph name="ATTEMPTED_FILENAME" />» را انجام دهد زیرا یک برنامه افزودنی دیگر (<ph name="EXTENSION_NAME" />) نام فایل دیگری «<ph name="ACTUAL_FILENAME" />» را تعیین کرد.</translation>
diff --git a/extensions/strings/extensions_strings_fi.xtb b/extensions/strings/extensions_strings_fi.xtb
index 0946e734..868ade9 100644
--- a/extensions/strings/extensions_strings_fi.xtb
+++ b/extensions/strings/extensions_strings_fi.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Tuntematon tuote <ph name="PRODUCT_ID" /> toimittajalta <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Luettelotiedosto on virheellinen.</translation>
 <translation id="7217838517480956708">Koneen ylläpitäjä vaatii laajennuksen <ph name="EXTENSION_NAME" /> asennusta. Sitä ei voi poistaa tai muuttaa.</translation>
+<translation id="7939686037314084444">Laajennus ei latautunut oikein. Se ei välttämättä havaitse verkkopyyntöjä.</translation>
 <translation id="7972881773422714442">Vaihtoehdot: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Käyttäjää kuvaava</translation>
 <translation id="8047248493720652249">Laajennus ei voinut antaa lataukselle nimeä <ph name="ATTEMPTED_FILENAME" />, koska toinen laajennus (<ph name="EXTENSION_NAME" />) määritti toisen tiedostonimen (<ph name="ACTUAL_FILENAME" />).</translation>
diff --git a/extensions/strings/extensions_strings_fil.xtb b/extensions/strings/extensions_strings_fil.xtb
index 3a4e540..b186412a 100644
--- a/extensions/strings/extensions_strings_fil.xtb
+++ b/extensions/strings/extensions_strings_fil.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Hindi kilalang produkto na <ph name="PRODUCT_ID" /> mula sa <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Invalid ang manifest file</translation>
 <translation id="7217838517480956708">Kinakailangan ng administrator ng machine na ito na ma-install ang <ph name="EXTENSION_NAME" />. Hindi ito maaaring alisin o baguhin.</translation>
+<translation id="7939686037314084444">Hindi na-load nang maayos ang extension. Maaaring hindi nito mapigilan ang mga kahilingan sa network.</translation>
 <translation id="7972881773422714442">Mga Opsyon: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Nakaharap sa user</translation>
 <translation id="8047248493720652249">Nabigong pangalanan ng extension na ito ang download na "<ph name="ATTEMPTED_FILENAME" />" dahil nakatukoy ang isa pang extension (<ph name="EXTENSION_NAME" />) ng ibang filename na "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_fr.xtb b/extensions/strings/extensions_strings_fr.xtb
index c48de33..cea8834c 100644
--- a/extensions/strings/extensions_strings_fr.xtb
+++ b/extensions/strings/extensions_strings_fr.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produit inconnu <ph name="PRODUCT_ID" /> fourni par <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Le fichier manifeste est incorrect</translation>
 <translation id="7217838517480956708">L'administrateur de cet ordinateur exige que l'extension <ph name="EXTENSION_NAME" /> soit installée. Celle-ci ne peut pas être supprimée ni modifiée.</translation>
+<translation id="7939686037314084444">Échec du chargement de l'extension, laquelle risque de ne pas pouvoir intercepter les demandes réseau.</translation>
 <translation id="7972881773422714442">Options : <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Caméra frontale</translation>
 <translation id="8047248493720652249">Échec de l'attribution du nom "<ph name="ATTEMPTED_FILENAME" />" au fichier téléchargé via l'extension, car un nom de fichier différent, "<ph name="ACTUAL_FILENAME" />", a été attribué via une autre extension (<ph name="EXTENSION_NAME" />).</translation>
diff --git a/extensions/strings/extensions_strings_gu.xtb b/extensions/strings/extensions_strings_gu.xtb
index 006277ab..5a846908 100644
--- a/extensions/strings/extensions_strings_gu.xtb
+++ b/extensions/strings/extensions_strings_gu.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> નું અજાણ્યું ઉત્પાદન <ph name="PRODUCT_ID" /></translation>
 <translation id="7068383018033524534">મેનિફેસ્ટ ફાઇલ અમાન્ય છે</translation>
 <translation id="7217838517480956708">આ મશીનના વ્યવસ્થાપકને ઇન્સ્ટોલ કરવા માટે <ph name="EXTENSION_NAME" /> ની આવશ્કતા છે. તેને દૂર અથવા સંશોધિત કરી શકાશે નહીં.</translation>
+<translation id="7939686037314084444">એક્સ્ટેંશન યોગ્ય રીતે લોડ થવામાં નિષ્ફળ થયું. તે કદાચ નેટવર્ક વિનંતીઓને પકડી ન શકતું હોય.</translation>
 <translation id="7972881773422714442">વિકલ્પો: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">સામેનો કૅમેરો</translation>
 <translation id="8047248493720652249">આ એક્સટેન્શન "<ph name="ATTEMPTED_FILENAME" />" ને ડાઉનલોડ નામ આપવામાં નિષ્ફળ થયું કારણ કે અન્ય એક્સટેન્શન (<ph name="EXTENSION_NAME" />) એ એક જુદું ફાઇલનામ "<ph name="ACTUAL_FILENAME" />" નક્કી કર્યું છે.</translation>
diff --git a/extensions/strings/extensions_strings_hi.xtb b/extensions/strings/extensions_strings_hi.xtb
index 90f1dfab..43dc829d 100644
--- a/extensions/strings/extensions_strings_hi.xtb
+++ b/extensions/strings/extensions_strings_hi.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> की ओर से अज्ञात <ph name="PRODUCT_ID" /> उत्पाद</translation>
 <translation id="7068383018033524534">मेनिफ़ेस्ट फ़ाइल अमान्य है</translation>
 <translation id="7217838517480956708">इस मशीन का व्यवस्थापक चाहता है कि <ph name="EXTENSION_NAME" /> इंस्टॉल किया हुआ हो. इसे निकाला या संशोधित नहीं किया जा सकता.</translation>
+<translation id="7939686037314084444">एक्सटेंशन ठीक से लोड नहीं हो पाया. शायद वह नेटवर्क अनुरोधों को बीच में रोक नहीं पाए.</translation>
 <translation id="7972881773422714442">विकल्‍प: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">सामने वाला कैमरा</translation>
 <translation id="8047248493720652249">यह एक्सटेंशन "<ph name="ATTEMPTED_FILENAME" />" डाउनलोड को नाम देने में विफल रहा क्योंकि किसी अन्य एक्सटेंशन (<ph name="EXTENSION_NAME" />) ने एक भिन्न फ़ाइलनाम "<ph name="ACTUAL_FILENAME" />" निर्धारित कर लिया है.</translation>
diff --git a/extensions/strings/extensions_strings_hr.xtb b/extensions/strings/extensions_strings_hr.xtb
index 634ec53..2a628c3 100644
--- a/extensions/strings/extensions_strings_hr.xtb
+++ b/extensions/strings/extensions_strings_hr.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Nepoznati proizvod <ph name="PRODUCT_ID" />, <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Datoteka manifesta nije važeća</translation>
 <translation id="7217838517480956708">Administrator ovog računala zahtijeva instalaciju proširenja <ph name="EXTENSION_NAME" />. Ona se ne može ukloniti ni izmijeniti.</translation>
+<translation id="7939686037314084444">Proširenje se nije pravilno učitalo. Možda neće moći presresti mrežne zahtjeve.</translation>
 <translation id="7972881773422714442">Opcije: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Prema korisniku</translation>
 <translation id="8047248493720652249">To proširenje nije uspjelo dodijeliti naziv preuzimanju "<ph name="ATTEMPTED_FILENAME" />" jer je drugo proširenje (<ph name="EXTENSION_NAME" />) odredilo drugačiji naziv datoteke "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_hu.xtb b/extensions/strings/extensions_strings_hu.xtb
index 22e9d16..2d3743f 100644
--- a/extensions/strings/extensions_strings_hu.xtb
+++ b/extensions/strings/extensions_strings_hu.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Ismeretlen termék (<ph name="PRODUCT_ID" />) a következő forgalmazótól: <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">A jegyzékfájl érvénytelen</translation>
 <translation id="7217838517480956708">Az eszköz rendszergazdája megköveteli, hogy a(z) <ph name="EXTENSION_NAME" /> telepítve legyen. A bővítményt nem lehet eltávolítani vagy módosítani.</translation>
+<translation id="7939686037314084444">Nem sikerült megfelelően betölteni a bővítményt. Előfordulhat, hogy nem tud hálózati kéréseket fogadni.</translation>
 <translation id="7972881773422714442">Lehetőségek: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Előlapi</translation>
 <translation id="8047248493720652249">Ez a bővítmény nem tudta elnevezni a(z) „<ph name="ATTEMPTED_FILENAME" />” letöltést, mert egy másik bővítmény (<ph name="EXTENSION_NAME" />) eltérő fájlnevet határozott meg: „<ph name="ACTUAL_FILENAME" />”.</translation>
diff --git a/extensions/strings/extensions_strings_id.xtb b/extensions/strings/extensions_strings_id.xtb
index 270fed8..ae59bc0 100644
--- a/extensions/strings/extensions_strings_id.xtb
+++ b/extensions/strings/extensions_strings_id.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produk <ph name="PRODUCT_ID" /> tak dikenal dari <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">File manifes tidak valid</translation>
 <translation id="7217838517480956708">Administrator mesin ini membutuhkan <ph name="EXTENSION_NAME" /> untuk dipasang. Persyaratan ini tidak dapat dihapus atau dimodifikasi.</translation>
+<translation id="7939686037314084444">Ekstensi gagal dimuat dengan benar. Ekstensi mungkin tidak dapat menyadap permintaan jaringan.</translation>
 <translation id="7972881773422714442">Opsi: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Kamera depan</translation>
 <translation id="8047248493720652249">Ekstensi ini gagal memberi nama download "<ph name="ATTEMPTED_FILENAME" />" karena ekstensi lain (<ph name="EXTENSION_NAME" />) menentukan nama file yang berbeda "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_it.xtb b/extensions/strings/extensions_strings_it.xtb
index de5b240..1ad62c15 100644
--- a/extensions/strings/extensions_strings_it.xtb
+++ b/extensions/strings/extensions_strings_it.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Prodotto sconosciuto <ph name="PRODUCT_ID" /> di <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">File manifest non valido</translation>
 <translation id="7217838517480956708">L'amministratore di questo computer richiede che l'estensione <ph name="EXTENSION_NAME" /> sia installata. Non è possibile rimuovere o modificare l'estensione.</translation>
+<translation id="7939686037314084444">Impossibile caricare correttamente l'estensione. L'estensione potrebbe non riuscire a intercettare le richieste di rete.</translation>
 <translation id="7972881773422714442">Opzioni: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Fotocamera anteriore</translation>
 <translation id="8047248493720652249">Questa estensione non è riuscita a denominare il download "<ph name="ATTEMPTED_FILENAME" />" perché un'altra estensione (<ph name="EXTENSION_NAME" />) ha determinato un nome di file diverso "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_iw.xtb b/extensions/strings/extensions_strings_iw.xtb
index 780abc7..647334ac 100644
--- a/extensions/strings/extensions_strings_iw.xtb
+++ b/extensions/strings/extensions_strings_iw.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">מוצר לא ידוע <ph name="PRODUCT_ID" /> מאת <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">קובץ המניספט לא חוקי</translation>
 <translation id="7217838517480956708">מנהל המערכת של מחשב זה דורש התקנת <ph name="EXTENSION_NAME" />. לא ניתן להסיר או לשנות אותו.</translation>
+<translation id="7939686037314084444">הייתה בעיה בטעינת התוסף. ייתכן שהוא לא יוכל ליירט בקשות רשת.</translation>
 <translation id="7972881773422714442">אפשרויות: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">מצלמה קדמית</translation>
 <translation id="8047248493720652249">תוסף זה לא הצליח לתת שם לקובץ "<ph name="ATTEMPTED_FILENAME" />" שהורד, משום שתוסף אחר (<ph name="EXTENSION_NAME" />) קבע שם קובץ אחר - "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_ja.xtb b/extensions/strings/extensions_strings_ja.xtb
index 1ac406db..af4cd890 100644
--- a/extensions/strings/extensions_strings_ja.xtb
+++ b/extensions/strings/extensions_strings_ja.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">不明な商品(<ph name="PRODUCT_ID" />、ベンダー: <ph name="VENDOR_NAME" />)</translation>
 <translation id="7068383018033524534">マニフェスト ファイルが無効です</translation>
 <translation id="7217838517480956708">このパソコンの管理者にとって <ph name="EXTENSION_NAME" /> がインストールされている必要があります。削除や修正はできません。</translation>
+<translation id="7939686037314084444">拡張機能を正しく読み込めませんでした。ネットワーク リクエストを取得できない可能性があります。</translation>
 <translation id="7972881773422714442">オプション: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">ユーザー向き</translation>
 <translation id="8047248493720652249">この拡張機能は、ダウンロード ファイル「<ph name="ATTEMPTED_FILENAME" />」に名前を付けることができませんでした。別の拡張機能(<ph name="EXTENSION_NAME" />)が異なるファイル名「<ph name="ACTUAL_FILENAME" />」を指定しました。</translation>
diff --git a/extensions/strings/extensions_strings_kn.xtb b/extensions/strings/extensions_strings_kn.xtb
index d532eb58..5bc8b2ce5 100644
--- a/extensions/strings/extensions_strings_kn.xtb
+++ b/extensions/strings/extensions_strings_kn.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> ಅವರಿಂದ <ph name="PRODUCT_ID" /> ಅಪರಿಚಿತ ಉತ್ಪನ್ನ</translation>
 <translation id="7068383018033524534">ಮ್ಯಾನಿಫೆಸ್ಟ್ ಫೈಲ್ ಅಮಾನ್ಯವಾಗಿದೆ</translation>
 <translation id="7217838517480956708">ಈ ಯಂತ್ರದ ನಿರ್ವಾಹಕರಿಗೆ <ph name="EXTENSION_NAME" /> ಅನ್ನು ಸ್ಥಾಪಿಸುವ ಅಗತ್ಯವಿದೆ. ಇದನ್ನು ತೆಗೆದುಹಾಕಲು ಅಥವಾ ಮಾರ್ಪಡಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
+<translation id="7939686037314084444">ವಿಸ್ತರಣೆಯನ್ನು ಸರಿಯಾಗಿ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ. ಇದು ನೆಟ್‌ವರ್ಕ್‌ ವಿನಂತಿಗಳನ್ನು ಪ್ರತಿಬಂಧಿಸಲು ಸಾಧ್ಯವಾಗದಿರಬಹುದು.</translation>
 <translation id="7972881773422714442">ಆಯ್ಕೆಗಳು: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">ಬಳಕೆದಾರರಿಗೆ ಮುಖಮಾಡಿದೆ</translation>
 <translation id="8047248493720652249">ಈ ವಿಸ್ತರಣೆಯು "<ph name="ATTEMPTED_FILENAME" />" ಅನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡುವುದನ್ನು ಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ ಏಕೆಂದರೆ ಮತ್ತೊಂದು ವಿಸ್ತರಣೆ (<ph name="EXTENSION_NAME" />) ಯು ವಿಭಿನ್ನ ಫೈಲ್‌ ಹೆಸರು "<ph name="ACTUAL_FILENAME" />" ಗೆ ನಿರ್ಧರಿಸಿದೆ.</translation>
diff --git a/extensions/strings/extensions_strings_lt.xtb b/extensions/strings/extensions_strings_lt.xtb
index 40dcfa6..a7ddf0a 100644
--- a/extensions/strings/extensions_strings_lt.xtb
+++ b/extensions/strings/extensions_strings_lt.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Nežinomas produktas „<ph name="PRODUCT_ID" />“ iš „<ph name="VENDOR_NAME" />“</translation>
 <translation id="7068383018033524534">Netinkamas aprašo failas</translation>
 <translation id="7217838517480956708">Šio kompiuterio administratorius reikalauja, kad būtų įdiegtas papildinys „<ph name="EXTENSION_NAME" />“. Jo negalima pašalinti ar pakeisti.</translation>
+<translation id="7939686037314084444">Nepavyko tinkamai įkelti plėtinio. Gali būti, kad jam nepavyks nuskaityti tinklo užklausų.</translation>
 <translation id="7972881773422714442">Parinktys: „<ph name="EXTENSIONOPTIONS_TAG_NAME" />“</translation>
 <translation id="8035920974645200807">Nukreiptas į naudotoją</translation>
 <translation id="8047248493720652249">Šiam plėtiniui nepavyko pavadinti atsisiuntimo „<ph name="ATTEMPTED_FILENAME" />“, nes kitas plėtinys („<ph name="EXTENSION_NAME" />“) nustatė kitokį failo pavadinimą – „<ph name="ACTUAL_FILENAME" />“.</translation>
diff --git a/extensions/strings/extensions_strings_lv.xtb b/extensions/strings/extensions_strings_lv.xtb
index 09c2dd5f..0006f98 100644
--- a/extensions/strings/extensions_strings_lv.xtb
+++ b/extensions/strings/extensions_strings_lv.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Nezināms produkts (ID: <ph name="PRODUCT_ID" />), ko piedāvā <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifesta fails nav derīgs.</translation>
 <translation id="7217838517480956708">Šīs ierīces administrators uzskata, ka paplašinājumam <ph name="EXTENSION_NAME" /> ir jābūt instalētam. To nevar noņemt vai pārveidot.</translation>
+<translation id="7939686037314084444">Neizdevās pareizi ielādēt paplašinājumu. Iespējams, tas nevarēs pārtvert tīkla pieprasījumus.</translation>
 <translation id="7972881773422714442">Iespējas: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Vērsta uz lietotāju</translation>
 <translation id="8047248493720652249">Šim paplašinājumam neizdevās piešķirt nosaukumu lejupielādei “<ph name="ATTEMPTED_FILENAME" />”, jo cits paplašinājums (<ph name="EXTENSION_NAME" />) noteica citu faila nosaukumu “<ph name="ACTUAL_FILENAME" />”.</translation>
diff --git a/extensions/strings/extensions_strings_ml.xtb b/extensions/strings/extensions_strings_ml.xtb
index 6d95ab3..5a466924 100644
--- a/extensions/strings/extensions_strings_ml.xtb
+++ b/extensions/strings/extensions_strings_ml.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> എന്നതിൽ നിന്നുള്ള അജ്ഞാത ഉൽപ്പന്നം <ph name="PRODUCT_ID" /></translation>
 <translation id="7068383018033524534">മാനിഫെസ്റ്റ് ഫയല്‍ അസാധുവാണ്</translation>
 <translation id="7217838517480956708">ഈ മെഷീനിന്റെ അഡ്‌മിനിസ്‌ട്രേറ്റർ ഇൻസ്റ്റാളുചെയ്യുന്നതിനായി <ph name="EXTENSION_NAME" /> ആവശ്യപ്പെടുന്നു. ഇത് നീക്കംചെയ്യാനോ പരിഷ്‌ക്കരിക്കാനോ കഴിയില്ല.</translation>
+<translation id="7939686037314084444">വിപുലീകരണം ശരിയായി ലോഡ് ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു. നെറ്റ്‌വർക്ക് അഭ്യർത്ഥനകൾ തടയാൻ അതിന് കഴിഞ്ഞിട്ടുണ്ടാവില്ല.</translation>
 <translation id="7972881773422714442">ഓപ്‌ഷനുകൾ: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">മുൻവശത്തുള്ള ക്യാമറ</translation>
 <translation id="8047248493720652249">മറ്റൊരു വിപുലീകരണം (<ph name="EXTENSION_NAME" />) വ്യത്യസ്‌തമായ ഒരു ഫയൽനാമം "<ph name="ACTUAL_FILENAME" />" നിർണ്ണയിച്ചതിനാൽ ഈ വിപുലീകരണം ഡൗൺലോഡ് "<ph name="ATTEMPTED_FILENAME" />-ന് പേരുനൽകുന്നതിൽ പരാജയപ്പെട്ടു.</translation>
diff --git a/extensions/strings/extensions_strings_mr.xtb b/extensions/strings/extensions_strings_mr.xtb
index 3085db89..37083f4 100644
--- a/extensions/strings/extensions_strings_mr.xtb
+++ b/extensions/strings/extensions_strings_mr.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> कडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन</translation>
 <translation id="7068383018033524534">मॅनिफेस्ट फाइल चुकीची आहे</translation>
 <translation id="7217838517480956708">या मशीनच्या प्रशासकास <ph name="EXTENSION_NAME" /> स्थापन करणे आवश्यक आहे. हे काढले किंवा सुधारित केले जाऊ शकत नाही.</translation>
+<translation id="7939686037314084444">एक्सटेंशन योग्यरित्या लोड होऊ शकले नाही. हे कदाचित नेटवर्क विनंत्या व्यत्यय आणू शकत नाही.</translation>
 <translation id="7972881773422714442">पर्याय: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">वापरकर्ता-समोरील</translation>
 <translation id="8047248493720652249">दुसर्‍या विस्ताराने (<ph name="EXTENSION_NAME" />) एक वेगळे फाईलनाव "<ph name="ACTUAL_FILENAME" />" निर्धारित केल्यामुळे डाउनलोड "<ph name="ATTEMPTED_FILENAME" />" ला नाव देण्यात हा विस्तार अयशस्वी झाला.</translation>
diff --git a/extensions/strings/extensions_strings_ms.xtb b/extensions/strings/extensions_strings_ms.xtb
index 664c22e..df9c7a8 100644
--- a/extensions/strings/extensions_strings_ms.xtb
+++ b/extensions/strings/extensions_strings_ms.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produk <ph name="PRODUCT_ID" /> daripada <ph name="VENDOR_NAME" /> tidak diketahui</translation>
 <translation id="7068383018033524534">Fail manifes tidak sah</translation>
 <translation id="7217838517480956708">Pentadbir mesin ini memerlukan <ph name="EXTENSION_NAME" /> dipasang. Sambungan ini tidak boleh dialih keluar atau diubah suai.</translation>
+<translation id="7939686037314084444">Sambungan gagal dimuatkan dengan betul. Sambungan itu mungkin tidak dapat memintas permintaan rangkaian.</translation>
 <translation id="7972881773422714442">Pilihan: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Menghadap pengguna</translation>
 <translation id="8047248493720652249">Sambungan ini gagal menamakan muat turun "<ph name="ATTEMPTED_FILENAME" />" kerana sambungan lain (<ph name="EXTENSION_NAME" />) menetapkan nama fail lain "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_nl.xtb b/extensions/strings/extensions_strings_nl.xtb
index cf206603..dceaac10 100644
--- a/extensions/strings/extensions_strings_nl.xtb
+++ b/extensions/strings/extensions_strings_nl.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Onbekend product <ph name="PRODUCT_ID" /> van <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifestbestand is ongeldig</translation>
 <translation id="7217838517480956708">De beheerder van dit apparaat vereist dat <ph name="EXTENSION_NAME" /> is geïnstalleerd. Het kan niet worden verwijderd of gewijzigd.</translation>
+<translation id="7939686037314084444">De extensie wordt niet goed geladen. Mogelijk kan deze geen netwerkverzoeken onderscheppen.</translation>
 <translation id="7972881773422714442">Opties: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Camera aan voorzijde</translation>
 <translation id="8047248493720652249">Deze extensie kan de download niet de naam '<ph name="ATTEMPTED_FILENAME" />' geven, omdat een andere extensie (<ph name="EXTENSION_NAME" />) een andere bestandsnaam '<ph name="ACTUAL_FILENAME" />' heeft bepaald.</translation>
diff --git a/extensions/strings/extensions_strings_pl.xtb b/extensions/strings/extensions_strings_pl.xtb
index 964b54a..3930f3f 100644
--- a/extensions/strings/extensions_strings_pl.xtb
+++ b/extensions/strings/extensions_strings_pl.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Nieznany produkt <ph name="PRODUCT_ID" /> firmy <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Plik manifestu jest nieprawidłowy</translation>
 <translation id="7217838517480956708">Administrator tego komputera wymaga zainstalowanego rozszerzenia <ph name="EXTENSION_NAME" />. Nie można go usunąć ani modyfikować.</translation>
+<translation id="7939686037314084444">Rozszerzenie nie załadowało się poprawnie. Być może nie działa przechwytywanie żądań sieciowych.</translation>
 <translation id="7972881773422714442">Opcje: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Przedni</translation>
 <translation id="8047248493720652249">Rozszerzenie nie może odczytać nazwy pobieranego pliku „<ph name="ATTEMPTED_FILENAME" />”, ponieważ inne rozszerzenie (<ph name="EXTENSION_NAME" />) odczytało odmienną jego nazwę „<ph name="ACTUAL_FILENAME" />”.</translation>
diff --git a/extensions/strings/extensions_strings_pt-BR.xtb b/extensions/strings/extensions_strings_pt-BR.xtb
index e292acff..937df5e1 100644
--- a/extensions/strings/extensions_strings_pt-BR.xtb
+++ b/extensions/strings/extensions_strings_pt-BR.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produto <ph name="PRODUCT_ID" /> desconhecido de <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">O arquivo de manifesto é inválido</translation>
 <translation id="7217838517480956708">O administrador desta máquina requer a instalação de <ph name="EXTENSION_NAME" />. Não é possível remover ou modificá-lo.</translation>
+<translation id="7939686037314084444">A extensão não foi carregada corretamente. Talvez ela não consiga interceptar solicitações de rede.</translation>
 <translation id="7972881773422714442">Opções: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Voltada para o usuário</translation>
 <translation id="8047248493720652249">Falha ao nomear o download "<ph name="ATTEMPTED_FILENAME" />" com esta extensão, porque outra extensão (<ph name="EXTENSION_NAME" />) determinou um nome de arquivo diferente: "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_pt-PT.xtb b/extensions/strings/extensions_strings_pt-PT.xtb
index 11c2b27..7434f44 100644
--- a/extensions/strings/extensions_strings_pt-PT.xtb
+++ b/extensions/strings/extensions_strings_pt-PT.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produto desconhecido <ph name="PRODUCT_ID" /> de <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">O ficheiro de manifesto é inválido.</translation>
 <translation id="7217838517480956708">O gestor desta máquina exige que o <ph name="EXTENSION_NAME" /> seja instalado. Este não pode ser removido ou modificado.</translation>
+<translation id="7939686037314084444">Não foi possível carregar a extensão corretamente. Pode não conseguir intercetar pedidos de rede.</translation>
 <translation id="7972881773422714442">Opções: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Virada para o utilizador</translation>
 <translation id="8047248493720652249">Esta extensão não conseguiu atribuir o nome "<ph name="ATTEMPTED_FILENAME" />" à transferência, porque outra extensão (<ph name="EXTENSION_NAME" />) determinou um nome de ficheiro diferente: "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_ro.xtb b/extensions/strings/extensions_strings_ro.xtb
index 3af39e3..8cebd9ea 100644
--- a/extensions/strings/extensions_strings_ro.xtb
+++ b/extensions/strings/extensions_strings_ro.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Produs necunoscut <ph name="PRODUCT_ID" /> de la <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Fișierul manifest este nevalid</translation>
 <translation id="7217838517480956708">Administratorul acestui dispozitiv solicită instalarea extensiei <ph name="EXTENSION_NAME" />. Aceasta nu poate fi eliminată sau modificată.</translation>
+<translation id="7939686037314084444">Extensia nu a reușit să se încarce corect. S-ar putea să nu poată intercepta solicitările de rețea.</translation>
 <translation id="7972881773422714442">Opțiuni: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Camera foto frontală</translation>
 <translation id="8047248493720652249">Această extensie nu a reușit să denumească fișierul descărcat „<ph name="ATTEMPTED_FILENAME" />”, deoarece altă extensie (<ph name="EXTENSION_NAME" />) a stabilit alt nume de fișier, „<ph name="ACTUAL_FILENAME" />”.</translation>
diff --git a/extensions/strings/extensions_strings_sk.xtb b/extensions/strings/extensions_strings_sk.xtb
index 1aec311..222f658c 100644
--- a/extensions/strings/extensions_strings_sk.xtb
+++ b/extensions/strings/extensions_strings_sk.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Neznámy produkt <ph name="PRODUCT_ID" /> od dodávateľa <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Súbor manifestu je neplatný</translation>
 <translation id="7217838517480956708">Správca tohto zariadenia vyžaduje inštaláciu rozšírenia <ph name="EXTENSION_NAME" />. Nemôže byť odstránené alebo upravené.</translation>
+<translation id="7939686037314084444">Rozšírenie sa nepodarilo správne načítať. Môže sa stať, že nebude môcť zachytávať žiadosti siete.</translation>
 <translation id="7972881773422714442">Možnosti: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Nasmerovaný na používateľa</translation>
 <translation id="8047248493720652249">Tomuto rozšíreniu sa nepodarilo pomenovať stiahnutý súbor s názvom „<ph name="ATTEMPTED_FILENAME" />„, pretože ďalšie rozšírenie (<ph name="EXTENSION_NAME" />) určilo odlišný názov súboru „<ph name="ACTUAL_FILENAME" />“.</translation>
diff --git a/extensions/strings/extensions_strings_sl.xtb b/extensions/strings/extensions_strings_sl.xtb
index 6539847..68abb6d1 100644
--- a/extensions/strings/extensions_strings_sl.xtb
+++ b/extensions/strings/extensions_strings_sl.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Neznan izdelek <ph name="PRODUCT_ID" /> dobavitelja <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Datoteka manifesta ni veljavna</translation>
 <translation id="7217838517480956708">Skrbnik tega računalnika zahteva namestitev razširitve <ph name="EXTENSION_NAME" />. Ni je mogoče odstraniti ali spremeniti.</translation>
+<translation id="7939686037314084444">Ta razširitev se ni pravilno naložila. Morda ne more prestrezati omrežnih zahtev.</translation>
 <translation id="7972881773422714442">Možnosti: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Sprednji</translation>
 <translation id="8047248493720652249">Ta razširitev ni mogla prenosa poimenovati »<ph name="ATTEMPTED_FILENAME" />«, ker je druga razširitev (<ph name="EXTENSION_NAME" />) določila drugo ime datoteke: »<ph name="ACTUAL_FILENAME" />«.</translation>
diff --git a/extensions/strings/extensions_strings_sr.xtb b/extensions/strings/extensions_strings_sr.xtb
index 867f65cd..f527e0ca 100644
--- a/extensions/strings/extensions_strings_sr.xtb
+++ b/extensions/strings/extensions_strings_sr.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Непознати производ <ph name="PRODUCT_ID" /> продавца <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Датотека манифеста је неважећа</translation>
 <translation id="7217838517480956708">Администратор овог уређаја захтева да додатак <ph name="EXTENSION_NAME" /> буде инсталиран. Не можете да га уклоните или измените.</translation>
+<translation id="7939686037314084444">Додатак се није правилно учитао. Можда неће моћи да преусмерава мрежне захтеве.</translation>
 <translation id="7972881773422714442">Опције: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Предња</translation>
 <translation id="8047248493720652249">Овај додатак није успео да преузетој датотеци дâ назив „<ph name="ATTEMPTED_FILENAME" />“ зато што је један други додатак (<ph name="EXTENSION_NAME" />) одредио другачији назив датотеке „<ph name="ACTUAL_FILENAME" />“.</translation>
diff --git a/extensions/strings/extensions_strings_sv.xtb b/extensions/strings/extensions_strings_sv.xtb
index 63b8f6f..47d0b7c 100644
--- a/extensions/strings/extensions_strings_sv.xtb
+++ b/extensions/strings/extensions_strings_sv.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Okänd produkt (<ph name="PRODUCT_ID" />) från <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Manifestfilen är ogiltig</translation>
 <translation id="7217838517480956708">Administratören av den här enheten kräver att <ph name="EXTENSION_NAME" /> ska installeras. Det kan inte tas bort eller ändras.</translation>
+<translation id="7939686037314084444">Tillägget lästes inte in korrekt. Det kan eventuellt inte fånga upp nätverksbegäranden.</translation>
 <translation id="7972881773422714442">Alternativ: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Vänd mot användaren</translation>
 <translation id="8047248493720652249">Det gick inte att namnge nedladdningen <ph name="ATTEMPTED_FILENAME" /> eftersom ett annat tillägg (<ph name="EXTENSION_NAME" />) valde ett annat filnamn <ph name="ACTUAL_FILENAME" />.</translation>
diff --git a/extensions/strings/extensions_strings_sw.xtb b/extensions/strings/extensions_strings_sw.xtb
index dc49ebe6..23737fe8 100644
--- a/extensions/strings/extensions_strings_sw.xtb
+++ b/extensions/strings/extensions_strings_sw.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Bidhaa isiyojulikana <ph name="PRODUCT_ID" /> kutoka kwa <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Faili ya maelezo si sahihi</translation>
 <translation id="7217838517480956708">Msimamizi wa mashine haya anahitaji <ph name="EXTENSION_NAME" /> kisakinishwe. Hakiwezi kuondolewa au kurekebishwa.</translation>
+<translation id="7939686037314084444">Imeshindwa kupakia kiendelezi vizuri. Huenda haitaweza kuingilia maombi ya mtandao.</translation>
 <translation id="7972881773422714442">Chaguzi: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Kamera ya mbele</translation>
 <translation id="8047248493720652249">Kiendelezi hiki kimeshindwa kukipa kipakuliwa jina "<ph name="ATTEMPTED_FILENAME" />" kwa sababu kipakuliwa kingine (<ph name="EXTENSION_NAME" />) kimechagua jina tofauti la faili "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_th.xtb b/extensions/strings/extensions_strings_th.xtb
index dfb820ab..9467cf5 100644
--- a/extensions/strings/extensions_strings_th.xtb
+++ b/extensions/strings/extensions_strings_th.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">ผลิตภัณฑ์ที่ไม่รู้จัก <ph name="PRODUCT_ID" /> จาก <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">ไฟล์ Manifest ไม่ถูกต้อง</translation>
 <translation id="7217838517480956708">ผู้ดูแลระบบของเครื่องนี้ต้องการให้มีการติดตั้ง <ph name="EXTENSION_NAME" /> โดยไม่สามารถลบหรือแก้ไขได้</translation>
+<translation id="7939686037314084444">ส่วนขยายโหลดไม่ถูกต้อง และอาจดักจับคำขอของเครือข่ายไม่ได้</translation>
 <translation id="7972881773422714442">ตัวเลือก: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">กล้องหน้า</translation>
 <translation id="8047248493720652249">ส่วนขยายนี้ล้มเหลวในการตั้งชื่อการดาวน์โหลดว่า "<ph name="ATTEMPTED_FILENAME" />" เนื่องจากอีกส่วนขยายหนึ่ง (<ph name="EXTENSION_NAME" />) ได้กำหนดชื่อไฟล์ที่แตกต่างไว้ว่า "<ph name="ACTUAL_FILENAME" />"</translation>
diff --git a/extensions/strings/extensions_strings_tr.xtb b/extensions/strings/extensions_strings_tr.xtb
index f5bd74a..ca734b0 100644
--- a/extensions/strings/extensions_strings_tr.xtb
+++ b/extensions/strings/extensions_strings_tr.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> tarafından sağlanan <ph name="PRODUCT_ID" /> ürün kimliğine sahip bilinmeyen ürün</translation>
 <translation id="7068383018033524534">Manifest dosyası geçersiz</translation>
 <translation id="7217838517480956708">Bu makinenin yöneticisi <ph name="EXTENSION_NAME" /> yüklenmesini gerektiriyor. Kaldırılamaz veya değiştirilemez.</translation>
+<translation id="7939686037314084444">Uzantı doğru şekilde yüklenemedi. Ağ isteklerine müdahale edemeyebilir.</translation>
 <translation id="7972881773422714442">Seçenekler: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Ön kamera</translation>
 <translation id="8047248493720652249">Başka bir uzantı (<ph name="EXTENSION_NAME" />) farklı bir dosya adı ("<ph name="ACTUAL_FILENAME" />") belirlediğinden, uzantı indirilen dosyayı "<ph name="ATTEMPTED_FILENAME" />" olarak adlandıramadı.</translation>
diff --git a/extensions/strings/extensions_strings_uk.xtb b/extensions/strings/extensions_strings_uk.xtb
index 0d924d7..12aa8bd 100644
--- a/extensions/strings/extensions_strings_uk.xtb
+++ b/extensions/strings/extensions_strings_uk.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529">Невідомий продукт <ph name="PRODUCT_ID" /> від постачальника <ph name="VENDOR_NAME" /></translation>
 <translation id="7068383018033524534">Файл маніфесту недійсний</translation>
 <translation id="7217838517480956708">Адміністратор цього комп’ютера потребує встановленого розширення <ph name="EXTENSION_NAME" />. Його не можна видаляти чи змінювати.</translation>
+<translation id="7939686037314084444">Розширення завантажилося неправильно. Можливо, йому не вдасться перехоплювати запити мережі.</translation>
 <translation id="7972881773422714442">Параметри: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">Фронтальна камера</translation>
 <translation id="8047248493720652249">Цьому розширенню не вдалося назвати завантаження "<ph name="ATTEMPTED_FILENAME" />", оскільки інше розширення (<ph name="EXTENSION_NAME" />) визначило іншу назву файлу "<ph name="ACTUAL_FILENAME" />".</translation>
diff --git a/extensions/strings/extensions_strings_zh-TW.xtb b/extensions/strings/extensions_strings_zh-TW.xtb
index 6d5b304b..a18a32b 100644
--- a/extensions/strings/extensions_strings_zh-TW.xtb
+++ b/extensions/strings/extensions_strings_zh-TW.xtb
@@ -57,6 +57,7 @@
 <translation id="7003844668372540529"><ph name="VENDOR_NAME" /> 提供的不明產品 <ph name="PRODUCT_ID" /></translation>
 <translation id="7068383018033524534">資訊清單檔案無效</translation>
 <translation id="7217838517480956708">這台電腦的管理員要求安裝 <ph name="EXTENSION_NAME" />,因此你無法移除或修改它。</translation>
+<translation id="7939686037314084444">這個擴充功能未順利載入,因此可能無法攔截網路要求。</translation>
 <translation id="7972881773422714442">選項:<ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
 <translation id="8035920974645200807">前置鏡頭</translation>
 <translation id="8047248493720652249">擴充功能無法將下載的檔案命名為「<ph name="ATTEMPTED_FILENAME" />」,因為其他擴充功能 (<ph name="EXTENSION_NAME" />) 已為將此檔案命名為「<ph name="ACTUAL_FILENAME" />」。</translation>
diff --git a/gin/converter.cc b/gin/converter.cc
index 42fcd59ad..975a5c8 100644
--- a/gin/converter.cc
+++ b/gin/converter.cc
@@ -141,9 +141,10 @@
   if (!val->IsString())
     return false;
   Local<String> str = Local<String>::Cast(val);
-  int length = str->Utf8Length();
+  int length = str->Utf8Length(isolate);
   out->resize(length);
-  str->WriteUtf8(&(*out)[0], length, NULL, String::NO_NULL_TERMINATION);
+  str->WriteUtf8(isolate, &(*out)[0], length, NULL,
+                 String::NO_NULL_TERMINATION);
   return true;
 }
 
@@ -217,11 +218,11 @@
       .ToLocalChecked();
 }
 
-std::string V8ToString(v8::Local<v8::Value> value) {
+std::string V8ToString(v8::Isolate* isolate, v8::Local<v8::Value> value) {
   if (value.IsEmpty())
     return std::string();
   std::string result;
-  if (!ConvertFromV8(NULL, value, &result))
+  if (!ConvertFromV8(isolate, value, &result))
     return std::string();
   return result;
 }
diff --git a/gin/converter.h b/gin/converter.h
index 19ec02a3..72c1d70 100644
--- a/gin/converter.h
+++ b/gin/converter.h
@@ -258,7 +258,8 @@
   return Converter<T>::FromV8(isolate, input, result);
 }
 
-GIN_EXPORT std::string V8ToString(v8::Local<v8::Value> value);
+GIN_EXPORT std::string V8ToString(v8::Isolate* isolate,
+                                  v8::Local<v8::Value> value);
 
 }  // namespace gin
 
diff --git a/gin/try_catch.cc b/gin/try_catch.cc
index 24512bc2..8217192 100644
--- a/gin/try_catch.cc
+++ b/gin/try_catch.cc
@@ -38,8 +38,8 @@
 
   std::stringstream ss;
   v8::Local<v8::Message> message = try_catch_.Message();
-  ss << V8ToString(message->Get()) << std::endl
-     << V8ToString(GetSourceLine(isolate_, message)) << std::endl;
+  ss << V8ToString(isolate_, message->Get()) << std::endl
+     << V8ToString(isolate_, GetSourceLine(isolate_, message)) << std::endl;
 
   v8::Local<v8::StackTrace> trace = message->GetStackTrace();
   if (trace.IsEmpty())
@@ -47,12 +47,10 @@
 
   int len = trace->GetFrameCount();
   for (int i = 0; i < len; ++i) {
-    v8::Local<v8::StackFrame> frame = trace->GetFrame(i);
-    ss << V8ToString(frame->GetScriptName()) << ":"
-       << frame->GetLineNumber() << ":"
-       << frame->GetColumn() << ": "
-       << V8ToString(frame->GetFunctionName())
-       << std::endl;
+    v8::Local<v8::StackFrame> frame = trace->GetFrame(isolate_, i);
+    ss << V8ToString(isolate_, frame->GetScriptName()) << ":"
+       << frame->GetLineNumber() << ":" << frame->GetColumn() << ": "
+       << V8ToString(isolate_, frame->GetFunctionName()) << std::endl;
   }
   return ss.str();
 }
diff --git a/gin/wrappable_unittest.cc b/gin/wrappable_unittest.cc
index 716c89e..701991b4 100644
--- a/gin/wrappable_unittest.cc
+++ b/gin/wrappable_unittest.cc
@@ -209,7 +209,7 @@
     func->Call(v8::Undefined(isolate), arraysize(argv), argv);
     if (!try_catch.HasCaught())
       return std::string();
-    return V8ToString(try_catch.Message()->Get());
+    return V8ToString(isolate, try_catch.Message()->Get());
   };
 
   EXPECT_EQ(std::string(), get_error(member_method, v8_object));
@@ -264,7 +264,7 @@
     func->Call(v8::Undefined(isolate), arraysize(argv), argv);
     if (!try_catch.HasCaught())
       return std::string();
-    return V8ToString(try_catch.Message()->Get());
+    return V8ToString(isolate, try_catch.Message()->Get());
   };
 
   EXPECT_EQ(std::string(), get_error(member_method, v8_object));
diff --git a/gpu/GLES2/gl2chromium_autogen.h b/gpu/GLES2/gl2chromium_autogen.h
index 2a9a622..b13d6d8 100644
--- a/gpu/GLES2/gl2chromium_autogen.h
+++ b/gpu/GLES2/gl2chromium_autogen.h
@@ -266,6 +266,7 @@
 #define glDeleteVertexArraysOES GLES2_GET_FUN(DeleteVertexArraysOES)
 #define glIsVertexArrayOES GLES2_GET_FUN(IsVertexArrayOES)
 #define glBindVertexArrayOES GLES2_GET_FUN(BindVertexArrayOES)
+#define glFramebufferParameteri GLES2_GET_FUN(FramebufferParameteri)
 #define glSwapBuffers GLES2_GET_FUN(SwapBuffers)
 #define glGetMaxValueInBufferCHROMIUM GLES2_GET_FUN(GetMaxValueInBufferCHROMIUM)
 #define glEnableFeatureCHROMIUM GLES2_GET_FUN(EnableFeatureCHROMIUM)
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py
index 10b3292..d423a53 100755
--- a/gpu/command_buffer/build_gles2_cmd_buffer.py
+++ b/gpu/command_buffer/build_gles2_cmd_buffer.py
@@ -683,6 +683,10 @@
       'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER',
     ],
   },
+  'FramebufferParameter' : {
+    'type': 'GLenum',
+    'valid' : [],
+  },
   'MatrixMode': {
     'type': 'GLenum',
     'is_complete': True,
@@ -4059,6 +4063,12 @@
     'internal': True,
     'es3': True,
   },
+  'FramebufferParameteri': {
+    'decoder_func': 'DoFramebufferParameteri',
+    'unit_test': False,
+    'extension': 'MESA_framebuffer_flip_y',
+    'extension_flag': 'mesa_framebuffer_flip_y',
+  },
 }
 
 
diff --git a/gpu/command_buffer/client/client_discardable_manager.cc b/gpu/command_buffer/client/client_discardable_manager.cc
index 61794ed..a079df90 100644
--- a/gpu/command_buffer/client/client_discardable_manager.cc
+++ b/gpu/command_buffer/client/client_discardable_manager.cc
@@ -195,17 +195,20 @@
                                               uint32_t* offset) {
   CheckPending(command_buffer);
 
-  for (auto& allocation : allocations_) {
-    if (!allocation->free_offsets.HasFreeOffset())
-      continue;
-
-    *offset = allocation->free_offsets.TakeFreeOffset();
-    *shm_id = allocation->shm_id;
-    *buffer = allocation->buffer;
+  if (FindExistingAllocation(command_buffer, buffer, shm_id, offset))
     return true;
+
+  // We couldn't find an existing free entry and are about to allocate more
+  // space. Check whether any handles have been deleted on the service side.
+  if (CheckDeleted(command_buffer)) {
+    // We deleted at least one entry, try to find an allocaiton. If the entry
+    // we deleted was the last one in an allocation, it's possbile that we
+    // *still* won't have allocaitons, so this isn't guaranteed to succeed.
+    if (FindExistingAllocation(command_buffer, buffer, shm_id, offset))
+      return true;
   }
 
-  // We couldn't find an existing free entry. Allocate more space.
+  // Allocate more space.
   auto allocation = std::make_unique<Allocation>(elements_per_allocation_);
   allocation->buffer = command_buffer->CreateTransferBuffer(
       allocation_size_, &allocation->shm_id);
@@ -219,6 +222,24 @@
   return true;
 }
 
+bool ClientDiscardableManager::FindExistingAllocation(
+    CommandBuffer* command_buffer,
+    scoped_refptr<Buffer>* buffer,
+    int32_t* shm_id,
+    uint32_t* offset) {
+  for (auto& allocation : allocations_) {
+    if (!allocation->free_offsets.HasFreeOffset())
+      continue;
+
+    *offset = allocation->free_offsets.TakeFreeOffset();
+    *shm_id = allocation->shm_id;
+    *buffer = allocation->buffer;
+    return true;
+  }
+
+  return false;
+}
+
 void ClientDiscardableManager::ReturnAllocation(
     CommandBuffer* command_buffer,
     const ClientDiscardableHandle& handle) {
@@ -246,4 +267,18 @@
   }
 }
 
+bool ClientDiscardableManager::CheckDeleted(CommandBuffer* command_buffer) {
+  bool freed_entry = false;
+  for (auto it = handles_.begin(); it != handles_.end();) {
+    if (it->second.CanBeReUsed()) {
+      ReturnAllocation(command_buffer, it->second);
+      it = handles_.erase(it);
+      freed_entry = true;
+    } else {
+      ++it;
+    }
+  }
+  return freed_entry;
+}
+
 }  // namespace gpu
diff --git a/gpu/command_buffer/client/client_discardable_manager.h b/gpu/command_buffer/client/client_discardable_manager.h
index d5f3ece..9ff8eab 100644
--- a/gpu/command_buffer/client/client_discardable_manager.h
+++ b/gpu/command_buffer/client/client_discardable_manager.h
@@ -45,9 +45,16 @@
                       scoped_refptr<Buffer>* buffer,
                       int32_t* shm_id,
                       uint32_t* offset);
+  bool FindExistingAllocation(CommandBuffer* command_buffer,
+                              scoped_refptr<Buffer>* buffer,
+                              int32_t* shm_id,
+                              uint32_t* offset);
   void ReturnAllocation(CommandBuffer* command_buffer,
                         const ClientDiscardableHandle& handle);
   void CheckPending(CommandBuffer* command_buffer);
+  // Return true if we found at least one deleted entry.
+  bool CheckDeleted(CommandBuffer* command_buffer);
+  bool CreateNewAllocation(CommandBuffer* command_buffer);
 
  private:
   size_t allocation_size_;
diff --git a/gpu/command_buffer/client/client_discardable_manager_unittest.cc b/gpu/command_buffer/client/client_discardable_manager_unittest.cc
index d04570b..6f7a83ef 100644
--- a/gpu/command_buffer/client/client_discardable_manager_unittest.cc
+++ b/gpu/command_buffer/client/client_discardable_manager_unittest.cc
@@ -33,7 +33,6 @@
   void SetGetBuffer(int32_t transfer_buffer_id) override { NOTREACHED(); }
   scoped_refptr<gpu::Buffer> CreateTransferBuffer(size_t size,
                                                   int32_t* id) override {
-    EXPECT_GE(size, 2048u);
     *id = next_id_++;
     active_ids_.insert(*id);
     base::UnsafeSharedMemoryRegion shmem_region =
@@ -104,11 +103,12 @@
     ClientDiscardableHandle handle = manager.GetHandle(handle_id);
     EXPECT_TRUE(handle.IsLockedForTesting());
     EXPECT_EQ(handle.shm_id(), 1);
-    UnlockAndDeleteClientHandleForTesting(handle);
+    UnlockClientHandleForTesting(handle);
     handle_ids.push_back(handle_id);
   }
   // Delete every other entry.
   for (auto it = handle_ids.begin(); it != handle_ids.end();) {
+    DeleteClientHandleForTesting(manager.GetHandle(*it));
     manager.FreeHandle(*it);
     it = handle_ids.erase(it);
     ++it;
@@ -120,11 +120,12 @@
     ClientDiscardableHandle handle = manager.GetHandle(handle_id);
     EXPECT_TRUE(handle.IsLockedForTesting());
     EXPECT_EQ(handle.shm_id(), 1);
-    UnlockAndDeleteClientHandleForTesting(handle);
+    UnlockClientHandleForTesting(handle);
     handle_ids.push_back(handle_id);
   }
   // Delete all outstanding allocations
   for (const auto& handle_id : handle_ids) {
+    DeleteClientHandleForTesting(manager.GetHandle(handle_id));
     manager.FreeHandle(handle_id);
   }
   manager.CheckPendingForTesting(&command_buffer);
@@ -141,7 +142,7 @@
     ClientDiscardableHandle handle = manager.GetHandle(handle_id);
     EXPECT_TRUE(handle.IsLockedForTesting());
     EXPECT_EQ(handle.shm_id(), 1);
-    UnlockAndDeleteClientHandleForTesting(handle);
+    UnlockClientHandleForTesting(handle);
     handle_ids.push_back(handle_id);
   }
   // Allocate and free one entry multiple times, this should cause the
@@ -157,11 +158,57 @@
   }
   // Delete all outstanding allocations
   for (const auto& handle_id : handle_ids) {
+    DeleteClientHandleForTesting(manager.GetHandle(handle_id));
     manager.FreeHandle(handle_id);
   }
   manager.CheckPendingForTesting(&command_buffer);
 }
 
+TEST(ClientDiscardableManagerTest, FreeDeleted) {
+  FakeCommandBuffer command_buffer;
+  ClientDiscardableManager manager;
+  manager.SetElementCountForTesting(4);
+  // Fill our allocation with unlocked handles.
+  std::vector<ClientDiscardableHandle::Id> handle_ids;
+  for (int i = 0; i < 4; ++i) {
+    ClientDiscardableHandle::Id handle_id =
+        manager.CreateHandle(&command_buffer);
+    ClientDiscardableHandle handle = manager.GetHandle(handle_id);
+    EXPECT_TRUE(handle.IsLockedForTesting());
+    EXPECT_EQ(handle.shm_id(), 1);
+    UnlockClientHandleForTesting(handle);
+    handle_ids.push_back(handle_id);
+  }
+  // Allocate and free a new entry. It should get a new allocation.
+  {
+    ClientDiscardableHandle::Id handle_id =
+        manager.CreateHandle(&command_buffer);
+    ClientDiscardableHandle handle = manager.GetHandle(handle_id);
+    EXPECT_TRUE(handle.IsLockedForTesting());
+    EXPECT_EQ(handle.shm_id(), 2);
+    UnlockAndDeleteClientHandleForTesting(handle);
+    manager.FreeHandle(handle_id);
+  }
+  // Delete (but don't free) one of the above entries.
+  DeleteClientHandleForTesting(manager.GetHandle(handle_ids[0]));
+  // Allocate and free a new entry, it should re-use the first allocation.
+  {
+    ClientDiscardableHandle::Id handle_id =
+        manager.CreateHandle(&command_buffer);
+    ClientDiscardableHandle handle = manager.GetHandle(handle_id);
+    EXPECT_TRUE(handle.IsLockedForTesting());
+    EXPECT_EQ(handle.shm_id(), 1);
+    UnlockAndDeleteClientHandleForTesting(handle);
+    manager.FreeHandle(handle_id);
+  }
+  // Delete and free the remaining handles.
+  for (int i = 1; i < 4; ++i) {
+    DeleteClientHandleForTesting(manager.GetHandle(handle_ids[i]));
+    manager.FreeHandle(handle_ids[i]);
+  }
+  manager.CheckPendingForTesting(&command_buffer);
+}
+
 TEST(ClientDiscardableTextureManagerTest, BasicUsage) {
   FakeCommandBuffer command_buffer;
   ClientDiscardableTextureManager manager;
diff --git a/gpu/command_buffer/client/client_font_manager.cc b/gpu/command_buffer/client/client_font_manager.cc
index 33a62a9..89e6a81 100644
--- a/gpu/command_buffer/client/client_font_manager.cc
+++ b/gpu/command_buffer/client/client_font_manager.cc
@@ -60,9 +60,12 @@
 
 SkDiscardableHandleId ClientFontManager::createHandle() {
   SkDiscardableHandleId handle_id = ++last_allocated_handle_id_;
-  discardable_handle_map_[handle_id] =
+  auto client_handle =
       client_discardable_manager_.CreateHandle(command_buffer_);
+  if (client_handle.is_null())
+    return kInvalidSkDiscardableHandleId;
 
+  discardable_handle_map_[handle_id] = client_handle;
   // Handles start with a ref-count.
   locked_handles_.insert(handle_id);
   return handle_id;
@@ -74,7 +77,9 @@
     return true;
 
   auto it = discardable_handle_map_.find(handle_id);
-  DCHECK(it != discardable_handle_map_.end());
+  if (it == discardable_handle_map_.end())
+    return false;
+
   bool locked = client_discardable_manager_.LockHandle(it->second);
   if (locked) {
     locked_handles_.insert(handle_id);
diff --git a/gpu/command_buffer/client/client_font_manager.h b/gpu/command_buffer/client/client_font_manager.h
index 370ce44..faf8226 100644
--- a/gpu/command_buffer/client/client_font_manager.h
+++ b/gpu/command_buffer/client/client_font_manager.h
@@ -36,6 +36,8 @@
   SkStrikeServer* strike_server() { return &strike_server_; }
 
  private:
+  static constexpr SkDiscardableHandleId kInvalidSkDiscardableHandleId = -1;
+
   Client* client_;
   CommandBuffer* command_buffer_;
 
diff --git a/gpu/command_buffer/client/client_transfer_cache.cc b/gpu/command_buffer/client/client_transfer_cache.cc
index e91703f..d6309c3 100644
--- a/gpu/command_buffer/client/client_transfer_cache.cc
+++ b/gpu/command_buffer/client/client_transfer_cache.cc
@@ -29,6 +29,9 @@
   base::AutoLock hold(lock_);
   ClientDiscardableHandle::Id discardable_handle_id =
       discardable_manager_.CreateHandle(client_->command_buffer());
+  if (discardable_handle_id.is_null())
+    return;
+
   ClientDiscardableHandle handle =
       discardable_manager_.GetHandle(discardable_handle_id);
 
diff --git a/gpu/command_buffer/client/gles2_c_lib_autogen.h b/gpu/command_buffer/client/gles2_c_lib_autogen.h
index 0ba79c43..c507bcb 100644
--- a/gpu/command_buffer/client/gles2_c_lib_autogen.h
+++ b/gpu/command_buffer/client/gles2_c_lib_autogen.h
@@ -1208,6 +1208,11 @@
 void GL_APIENTRY GLES2BindVertexArrayOES(GLuint array) {
   gles2::GetGLContext()->BindVertexArrayOES(array);
 }
+void GL_APIENTRY GLES2FramebufferParameteri(GLenum target,
+                                            GLenum pname,
+                                            GLint param) {
+  gles2::GetGLContext()->FramebufferParameteri(target, pname, param);
+}
 void GL_APIENTRY GLES2SwapBuffers(GLuint64 swap_id, GLbitfield flags) {
   gles2::GetGLContext()->SwapBuffers(swap_id, flags);
 }
@@ -2716,6 +2721,10 @@
         reinterpret_cast<GLES2FunctionPointer>(glBindVertexArrayOES),
     },
     {
+        "glFramebufferParameteri",
+        reinterpret_cast<GLES2FunctionPointer>(glFramebufferParameteri),
+    },
+    {
         "glSwapBuffers", reinterpret_cast<GLES2FunctionPointer>(glSwapBuffers),
     },
     {
diff --git a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
index d755f73..c33a6154 100644
--- a/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
+++ b/gpu/command_buffer/client/gles2_cmd_helper_autogen.h
@@ -2362,6 +2362,14 @@
   }
 }
 
+void FramebufferParameteri(GLenum target, GLenum pname, GLint param) {
+  gles2::cmds::FramebufferParameteri* c =
+      GetCmdSpace<gles2::cmds::FramebufferParameteri>();
+  if (c) {
+    c->Init(target, pname, param);
+  }
+}
+
 void SwapBuffers(GLuint64 swap_id, GLbitfield flags) {
   gles2::cmds::SwapBuffers* c = GetCmdSpace<gles2::cmds::SwapBuffers>();
   if (c) {
diff --git a/gpu/command_buffer/client/gles2_implementation_autogen.h b/gpu/command_buffer/client/gles2_implementation_autogen.h
index 56e005c8..a7ba01c 100644
--- a/gpu/command_buffer/client/gles2_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_autogen.h
@@ -845,6 +845,8 @@
 
 void BindVertexArrayOES(GLuint array) override;
 
+void FramebufferParameteri(GLenum target, GLenum pname, GLint param) override;
+
 void SwapBuffers(GLuint64 swap_id, GLbitfield flags = 0) override;
 
 GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
diff --git a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
index b90e63c..33e9604 100644
--- a/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_impl_autogen.h
@@ -3026,6 +3026,18 @@
   CheckGLError();
 }
 
+void GLES2Implementation::FramebufferParameteri(GLenum target,
+                                                GLenum pname,
+                                                GLint param) {
+  GPU_CLIENT_SINGLE_THREAD_CHECK();
+  GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glFramebufferParameteri("
+                     << GLES2Util::GetStringFramebufferTarget(target) << ", "
+                     << GLES2Util::GetStringFramebufferParameter(pname) << ", "
+                     << param << ")");
+  helper_->FramebufferParameteri(target, pname, param);
+  CheckGLError();
+}
+
 void GLES2Implementation::FlushMappedBufferRange(GLenum target,
                                                  GLintptr offset,
                                                  GLsizeiptr size) {
diff --git a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
index a00aeb5..6e564b2c 100644
--- a/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
+++ b/gpu/command_buffer/client/gles2_implementation_unittest_autogen.h
@@ -2679,6 +2679,17 @@
   EXPECT_TRUE(result);
 }
 
+TEST_F(GLES2ImplementationTest, FramebufferParameteri) {
+  struct Cmds {
+    cmds::FramebufferParameteri cmd;
+  };
+  Cmds expected;
+  expected.cmd.Init(GL_FRAMEBUFFER, 2, 3);
+
+  gl_->FramebufferParameteri(GL_FRAMEBUFFER, 2, 3);
+  EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
+}
+
 TEST_F(GLES2ImplementationTest, FlushMappedBufferRange) {
   struct Cmds {
     cmds::FlushMappedBufferRange cmd;
diff --git a/gpu/command_buffer/client/gles2_interface_autogen.h b/gpu/command_buffer/client/gles2_interface_autogen.h
index 69f860d..e3c0490 100644
--- a/gpu/command_buffer/client/gles2_interface_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_autogen.h
@@ -617,6 +617,9 @@
 virtual void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) = 0;
 virtual GLboolean IsVertexArrayOES(GLuint array) = 0;
 virtual void BindVertexArrayOES(GLuint array) = 0;
+virtual void FramebufferParameteri(GLenum target,
+                                   GLenum pname,
+                                   GLint param) = 0;
 virtual void SwapBuffers(GLuint64 swap_id, GLbitfield flags = 0) = 0;
 virtual GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
                                            GLsizei count,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
index 7258000..20a0c3c 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_autogen.h
@@ -596,6 +596,7 @@
 void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
 GLboolean IsVertexArrayOES(GLuint array) override;
 void BindVertexArrayOES(GLuint array) override;
+void FramebufferParameteri(GLenum target, GLenum pname, GLint param) override;
 void SwapBuffers(GLuint64 swap_id, GLbitfield flags) override;
 GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
                                    GLsizei count,
diff --git a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
index 055f62e..c9a8b856 100644
--- a/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_interface_stub_impl_autogen.h
@@ -817,6 +817,9 @@
   return 0;
 }
 void GLES2InterfaceStub::BindVertexArrayOES(GLuint /* array */) {}
+void GLES2InterfaceStub::FramebufferParameteri(GLenum /* target */,
+                                               GLenum /* pname */,
+                                               GLint /* param */) {}
 void GLES2InterfaceStub::SwapBuffers(GLuint64 /* swap_id */,
                                      GLbitfield /* flags */) {}
 GLuint GLES2InterfaceStub::GetMaxValueInBufferCHROMIUM(GLuint /* buffer_id */,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
index 94ee13d3..c34598d 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_autogen.h
@@ -596,6 +596,7 @@
 void DeleteVertexArraysOES(GLsizei n, const GLuint* arrays) override;
 GLboolean IsVertexArrayOES(GLuint array) override;
 void BindVertexArrayOES(GLuint array) override;
+void FramebufferParameteri(GLenum target, GLenum pname, GLint param) override;
 void SwapBuffers(GLuint64 swap_id, GLbitfield flags) override;
 GLuint GetMaxValueInBufferCHROMIUM(GLuint buffer_id,
                                    GLsizei count,
diff --git a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
index 0933cce..0882387 100644
--- a/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
+++ b/gpu/command_buffer/client/gles2_trace_implementation_impl_autogen.h
@@ -1763,6 +1763,13 @@
   gl_->BindVertexArrayOES(array);
 }
 
+void GLES2TraceImplementation::FramebufferParameteri(GLenum target,
+                                                     GLenum pname,
+                                                     GLint param) {
+  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::FramebufferParameteri");
+  gl_->FramebufferParameteri(target, pname, param);
+}
+
 void GLES2TraceImplementation::SwapBuffers(GLuint64 swap_id, GLbitfield flags) {
   TRACE_EVENT_BINARY_EFFICIENT0("gpu", "GLES2Trace::SwapBuffers");
   gl_->SwapBuffers(swap_id, flags);
diff --git a/gpu/command_buffer/client/raster_implementation.cc b/gpu/command_buffer/client/raster_implementation.cc
index 5c880f9..79afb97 100644
--- a/gpu/command_buffer/client/raster_implementation.cc
+++ b/gpu/command_buffer/client/raster_implementation.cc
@@ -103,8 +103,9 @@
   void CreateEntryInternal(const cc::ClientTransferCacheEntry& entry) final {
     size_t size = entry.SerializedSize();
     void* data = support_->MapTransferCacheEntry(size);
-    // TODO(piman): handle error (failed to allocate/map shm)
-    DCHECK(data);
+    if (!data)
+      return;
+
     bool succeeded = entry.Serialize(
         base::make_span(reinterpret_cast<uint8_t*>(data), size));
     DCHECK(succeeded);
diff --git a/gpu/command_buffer/common/capabilities.h b/gpu/command_buffer/common/capabilities.h
index 3739aa1..fb8d96a 100644
--- a/gpu/command_buffer/common/capabilities.h
+++ b/gpu/command_buffer/common/capabilities.h
@@ -196,6 +196,8 @@
 
   bool chromium_nonblocking_readback = false;
 
+  bool mesa_framebuffer_flip_y = false;
+
   int major_version = 2;
   int minor_version = 0;
 
diff --git a/gpu/command_buffer/common/gles2_cmd_format_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
index 155b3a4..cfb06974e 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_autogen.h
@@ -11736,6 +11736,47 @@
 static_assert(offsetof(BindVertexArrayOES, array) == 4,
               "offset of BindVertexArrayOES array should be 4");
 
+struct FramebufferParameteri {
+  typedef FramebufferParameteri ValueType;
+  static const CommandId kCmdId = kFramebufferParameteri;
+  static const cmd::ArgFlags kArgFlags = cmd::kFixed;
+  static const uint8_t cmd_flags = CMD_FLAG_SET_TRACE_LEVEL(3);
+
+  static uint32_t ComputeSize() {
+    return static_cast<uint32_t>(sizeof(ValueType));  // NOLINT
+  }
+
+  void SetHeader() { header.SetCmd<ValueType>(); }
+
+  void Init(GLenum _target, GLenum _pname, GLint _param) {
+    SetHeader();
+    target = _target;
+    pname = _pname;
+    param = _param;
+  }
+
+  void* Set(void* cmd, GLenum _target, GLenum _pname, GLint _param) {
+    static_cast<ValueType*>(cmd)->Init(_target, _pname, _param);
+    return NextCmdAddress<ValueType>(cmd);
+  }
+
+  gpu::CommandHeader header;
+  uint32_t target;
+  uint32_t pname;
+  int32_t param;
+};
+
+static_assert(sizeof(FramebufferParameteri) == 16,
+              "size of FramebufferParameteri should be 16");
+static_assert(offsetof(FramebufferParameteri, header) == 0,
+              "offset of FramebufferParameteri header should be 0");
+static_assert(offsetof(FramebufferParameteri, target) == 4,
+              "offset of FramebufferParameteri target should be 4");
+static_assert(offsetof(FramebufferParameteri, pname) == 8,
+              "offset of FramebufferParameteri pname should be 8");
+static_assert(offsetof(FramebufferParameteri, param) == 12,
+              "offset of FramebufferParameteri param should be 12");
+
 struct SwapBuffers {
   typedef SwapBuffers ValueType;
   static const CommandId kCmdId = kSwapBuffers;
diff --git a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
index d66f4ab..e7194bc 100644
--- a/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_format_test_autogen.h
@@ -3938,6 +3938,20 @@
   CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
 }
 
+TEST_F(GLES2FormatTest, FramebufferParameteri) {
+  cmds::FramebufferParameteri& cmd =
+      *GetBufferAs<cmds::FramebufferParameteri>();
+  void* next_cmd = cmd.Set(&cmd, static_cast<GLenum>(11),
+                           static_cast<GLenum>(12), static_cast<GLint>(13));
+  EXPECT_EQ(static_cast<uint32_t>(cmds::FramebufferParameteri::kCmdId),
+            cmd.header.command);
+  EXPECT_EQ(sizeof(cmd), cmd.header.size * 4u);
+  EXPECT_EQ(static_cast<GLenum>(11), cmd.target);
+  EXPECT_EQ(static_cast<GLenum>(12), cmd.pname);
+  EXPECT_EQ(static_cast<GLint>(13), cmd.param);
+  CheckBytesWrittenMatchesExpectedSize(next_cmd, sizeof(cmd));
+}
+
 TEST_F(GLES2FormatTest, SwapBuffers) {
   cmds::SwapBuffers& cmd = *GetBufferAs<cmds::SwapBuffers>();
   void* next_cmd =
diff --git a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
index ea899109..ed9d7c6 100644
--- a/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_ids_autogen.h
@@ -253,95 +253,96 @@
   OP(DeleteVertexArraysOESImmediate)                       /* 494 */ \
   OP(IsVertexArrayOES)                                     /* 495 */ \
   OP(BindVertexArrayOES)                                   /* 496 */ \
-  OP(SwapBuffers)                                          /* 497 */ \
-  OP(GetMaxValueInBufferCHROMIUM)                          /* 498 */ \
-  OP(EnableFeatureCHROMIUM)                                /* 499 */ \
-  OP(MapBufferRange)                                       /* 500 */ \
-  OP(UnmapBuffer)                                          /* 501 */ \
-  OP(FlushMappedBufferRange)                               /* 502 */ \
-  OP(ResizeCHROMIUM)                                       /* 503 */ \
-  OP(GetRequestableExtensionsCHROMIUM)                     /* 504 */ \
-  OP(RequestExtensionCHROMIUM)                             /* 505 */ \
-  OP(GetProgramInfoCHROMIUM)                               /* 506 */ \
-  OP(GetUniformBlocksCHROMIUM)                             /* 507 */ \
-  OP(GetTransformFeedbackVaryingsCHROMIUM)                 /* 508 */ \
-  OP(GetUniformsES3CHROMIUM)                               /* 509 */ \
-  OP(DescheduleUntilFinishedCHROMIUM)                      /* 510 */ \
-  OP(GetTranslatedShaderSourceANGLE)                       /* 511 */ \
-  OP(PostSubBufferCHROMIUM)                                /* 512 */ \
-  OP(CopyTextureCHROMIUM)                                  /* 513 */ \
-  OP(CopySubTextureCHROMIUM)                               /* 514 */ \
-  OP(CompressedCopyTextureCHROMIUM)                        /* 515 */ \
-  OP(DrawArraysInstancedANGLE)                             /* 516 */ \
-  OP(DrawElementsInstancedANGLE)                           /* 517 */ \
-  OP(VertexAttribDivisorANGLE)                             /* 518 */ \
-  OP(ProduceTextureDirectCHROMIUMImmediate)                /* 519 */ \
-  OP(CreateAndConsumeTextureINTERNALImmediate)             /* 520 */ \
-  OP(BindUniformLocationCHROMIUMBucket)                    /* 521 */ \
-  OP(BindTexImage2DCHROMIUM)                               /* 522 */ \
-  OP(BindTexImage2DWithInternalformatCHROMIUM)             /* 523 */ \
-  OP(ReleaseTexImage2DCHROMIUM)                            /* 524 */ \
-  OP(TraceBeginCHROMIUM)                                   /* 525 */ \
-  OP(TraceEndCHROMIUM)                                     /* 526 */ \
-  OP(DiscardFramebufferEXTImmediate)                       /* 527 */ \
-  OP(LoseContextCHROMIUM)                                  /* 528 */ \
-  OP(InsertFenceSyncCHROMIUM)                              /* 529 */ \
-  OP(WaitSyncTokenCHROMIUM)                                /* 530 */ \
-  OP(UnpremultiplyAndDitherCopyCHROMIUM)                   /* 531 */ \
-  OP(DrawBuffersEXTImmediate)                              /* 532 */ \
-  OP(DiscardBackbufferCHROMIUM)                            /* 533 */ \
-  OP(ScheduleOverlayPlaneCHROMIUM)                         /* 534 */ \
-  OP(ScheduleCALayerSharedStateCHROMIUM)                   /* 535 */ \
-  OP(ScheduleCALayerCHROMIUM)                              /* 536 */ \
-  OP(ScheduleCALayerInUseQueryCHROMIUMImmediate)           /* 537 */ \
-  OP(CommitOverlayPlanesCHROMIUM)                          /* 538 */ \
-  OP(FlushDriverCachesCHROMIUM)                            /* 539 */ \
-  OP(ScheduleDCLayerSharedStateCHROMIUM)                   /* 540 */ \
-  OP(ScheduleDCLayerCHROMIUM)                              /* 541 */ \
-  OP(MatrixLoadfCHROMIUMImmediate)                         /* 542 */ \
-  OP(MatrixLoadIdentityCHROMIUM)                           /* 543 */ \
-  OP(GenPathsCHROMIUM)                                     /* 544 */ \
-  OP(DeletePathsCHROMIUM)                                  /* 545 */ \
-  OP(IsPathCHROMIUM)                                       /* 546 */ \
-  OP(PathCommandsCHROMIUM)                                 /* 547 */ \
-  OP(PathParameterfCHROMIUM)                               /* 548 */ \
-  OP(PathParameteriCHROMIUM)                               /* 549 */ \
-  OP(PathStencilFuncCHROMIUM)                              /* 550 */ \
-  OP(StencilFillPathCHROMIUM)                              /* 551 */ \
-  OP(StencilStrokePathCHROMIUM)                            /* 552 */ \
-  OP(CoverFillPathCHROMIUM)                                /* 553 */ \
-  OP(CoverStrokePathCHROMIUM)                              /* 554 */ \
-  OP(StencilThenCoverFillPathCHROMIUM)                     /* 555 */ \
-  OP(StencilThenCoverStrokePathCHROMIUM)                   /* 556 */ \
-  OP(StencilFillPathInstancedCHROMIUM)                     /* 557 */ \
-  OP(StencilStrokePathInstancedCHROMIUM)                   /* 558 */ \
-  OP(CoverFillPathInstancedCHROMIUM)                       /* 559 */ \
-  OP(CoverStrokePathInstancedCHROMIUM)                     /* 560 */ \
-  OP(StencilThenCoverFillPathInstancedCHROMIUM)            /* 561 */ \
-  OP(StencilThenCoverStrokePathInstancedCHROMIUM)          /* 562 */ \
-  OP(BindFragmentInputLocationCHROMIUMBucket)              /* 563 */ \
-  OP(ProgramPathFragmentInputGenCHROMIUM)                  /* 564 */ \
-  OP(CoverageModulationCHROMIUM)                           /* 565 */ \
-  OP(BlendBarrierKHR)                                      /* 566 */ \
-  OP(ApplyScreenSpaceAntialiasingCHROMIUM)                 /* 567 */ \
-  OP(BindFragDataLocationIndexedEXTBucket)                 /* 568 */ \
-  OP(BindFragDataLocationEXTBucket)                        /* 569 */ \
-  OP(GetFragDataIndexEXT)                                  /* 570 */ \
-  OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate) /* 571 */ \
-  OP(OverlayPromotionHintCHROMIUM)                         /* 572 */ \
-  OP(SwapBuffersWithBoundsCHROMIUMImmediate)               /* 573 */ \
-  OP(SetDrawRectangleCHROMIUM)                             /* 574 */ \
-  OP(SetEnableDCLayersCHROMIUM)                            /* 575 */ \
-  OP(InitializeDiscardableTextureCHROMIUM)                 /* 576 */ \
-  OP(UnlockDiscardableTextureCHROMIUM)                     /* 577 */ \
-  OP(LockDiscardableTextureCHROMIUM)                       /* 578 */ \
-  OP(TexStorage2DImageCHROMIUM)                            /* 579 */ \
-  OP(SetColorSpaceMetadataCHROMIUM)                        /* 580 */ \
-  OP(WindowRectanglesEXTImmediate)                         /* 581 */ \
-  OP(CreateGpuFenceINTERNAL)                               /* 582 */ \
-  OP(WaitGpuFenceCHROMIUM)                                 /* 583 */ \
-  OP(DestroyGpuFenceCHROMIUM)                              /* 584 */ \
-  OP(SetReadbackBufferShadowAllocationINTERNAL)            /* 585 */
+  OP(FramebufferParameteri)                                /* 497 */ \
+  OP(SwapBuffers)                                          /* 498 */ \
+  OP(GetMaxValueInBufferCHROMIUM)                          /* 499 */ \
+  OP(EnableFeatureCHROMIUM)                                /* 500 */ \
+  OP(MapBufferRange)                                       /* 501 */ \
+  OP(UnmapBuffer)                                          /* 502 */ \
+  OP(FlushMappedBufferRange)                               /* 503 */ \
+  OP(ResizeCHROMIUM)                                       /* 504 */ \
+  OP(GetRequestableExtensionsCHROMIUM)                     /* 505 */ \
+  OP(RequestExtensionCHROMIUM)                             /* 506 */ \
+  OP(GetProgramInfoCHROMIUM)                               /* 507 */ \
+  OP(GetUniformBlocksCHROMIUM)                             /* 508 */ \
+  OP(GetTransformFeedbackVaryingsCHROMIUM)                 /* 509 */ \
+  OP(GetUniformsES3CHROMIUM)                               /* 510 */ \
+  OP(DescheduleUntilFinishedCHROMIUM)                      /* 511 */ \
+  OP(GetTranslatedShaderSourceANGLE)                       /* 512 */ \
+  OP(PostSubBufferCHROMIUM)                                /* 513 */ \
+  OP(CopyTextureCHROMIUM)                                  /* 514 */ \
+  OP(CopySubTextureCHROMIUM)                               /* 515 */ \
+  OP(CompressedCopyTextureCHROMIUM)                        /* 516 */ \
+  OP(DrawArraysInstancedANGLE)                             /* 517 */ \
+  OP(DrawElementsInstancedANGLE)                           /* 518 */ \
+  OP(VertexAttribDivisorANGLE)                             /* 519 */ \
+  OP(ProduceTextureDirectCHROMIUMImmediate)                /* 520 */ \
+  OP(CreateAndConsumeTextureINTERNALImmediate)             /* 521 */ \
+  OP(BindUniformLocationCHROMIUMBucket)                    /* 522 */ \
+  OP(BindTexImage2DCHROMIUM)                               /* 523 */ \
+  OP(BindTexImage2DWithInternalformatCHROMIUM)             /* 524 */ \
+  OP(ReleaseTexImage2DCHROMIUM)                            /* 525 */ \
+  OP(TraceBeginCHROMIUM)                                   /* 526 */ \
+  OP(TraceEndCHROMIUM)                                     /* 527 */ \
+  OP(DiscardFramebufferEXTImmediate)                       /* 528 */ \
+  OP(LoseContextCHROMIUM)                                  /* 529 */ \
+  OP(InsertFenceSyncCHROMIUM)                              /* 530 */ \
+  OP(WaitSyncTokenCHROMIUM)                                /* 531 */ \
+  OP(UnpremultiplyAndDitherCopyCHROMIUM)                   /* 532 */ \
+  OP(DrawBuffersEXTImmediate)                              /* 533 */ \
+  OP(DiscardBackbufferCHROMIUM)                            /* 534 */ \
+  OP(ScheduleOverlayPlaneCHROMIUM)                         /* 535 */ \
+  OP(ScheduleCALayerSharedStateCHROMIUM)                   /* 536 */ \
+  OP(ScheduleCALayerCHROMIUM)                              /* 537 */ \
+  OP(ScheduleCALayerInUseQueryCHROMIUMImmediate)           /* 538 */ \
+  OP(CommitOverlayPlanesCHROMIUM)                          /* 539 */ \
+  OP(FlushDriverCachesCHROMIUM)                            /* 540 */ \
+  OP(ScheduleDCLayerSharedStateCHROMIUM)                   /* 541 */ \
+  OP(ScheduleDCLayerCHROMIUM)                              /* 542 */ \
+  OP(MatrixLoadfCHROMIUMImmediate)                         /* 543 */ \
+  OP(MatrixLoadIdentityCHROMIUM)                           /* 544 */ \
+  OP(GenPathsCHROMIUM)                                     /* 545 */ \
+  OP(DeletePathsCHROMIUM)                                  /* 546 */ \
+  OP(IsPathCHROMIUM)                                       /* 547 */ \
+  OP(PathCommandsCHROMIUM)                                 /* 548 */ \
+  OP(PathParameterfCHROMIUM)                               /* 549 */ \
+  OP(PathParameteriCHROMIUM)                               /* 550 */ \
+  OP(PathStencilFuncCHROMIUM)                              /* 551 */ \
+  OP(StencilFillPathCHROMIUM)                              /* 552 */ \
+  OP(StencilStrokePathCHROMIUM)                            /* 553 */ \
+  OP(CoverFillPathCHROMIUM)                                /* 554 */ \
+  OP(CoverStrokePathCHROMIUM)                              /* 555 */ \
+  OP(StencilThenCoverFillPathCHROMIUM)                     /* 556 */ \
+  OP(StencilThenCoverStrokePathCHROMIUM)                   /* 557 */ \
+  OP(StencilFillPathInstancedCHROMIUM)                     /* 558 */ \
+  OP(StencilStrokePathInstancedCHROMIUM)                   /* 559 */ \
+  OP(CoverFillPathInstancedCHROMIUM)                       /* 560 */ \
+  OP(CoverStrokePathInstancedCHROMIUM)                     /* 561 */ \
+  OP(StencilThenCoverFillPathInstancedCHROMIUM)            /* 562 */ \
+  OP(StencilThenCoverStrokePathInstancedCHROMIUM)          /* 563 */ \
+  OP(BindFragmentInputLocationCHROMIUMBucket)              /* 564 */ \
+  OP(ProgramPathFragmentInputGenCHROMIUM)                  /* 565 */ \
+  OP(CoverageModulationCHROMIUM)                           /* 566 */ \
+  OP(BlendBarrierKHR)                                      /* 567 */ \
+  OP(ApplyScreenSpaceAntialiasingCHROMIUM)                 /* 568 */ \
+  OP(BindFragDataLocationIndexedEXTBucket)                 /* 569 */ \
+  OP(BindFragDataLocationEXTBucket)                        /* 570 */ \
+  OP(GetFragDataIndexEXT)                                  /* 571 */ \
+  OP(UniformMatrix4fvStreamTextureMatrixCHROMIUMImmediate) /* 572 */ \
+  OP(OverlayPromotionHintCHROMIUM)                         /* 573 */ \
+  OP(SwapBuffersWithBoundsCHROMIUMImmediate)               /* 574 */ \
+  OP(SetDrawRectangleCHROMIUM)                             /* 575 */ \
+  OP(SetEnableDCLayersCHROMIUM)                            /* 576 */ \
+  OP(InitializeDiscardableTextureCHROMIUM)                 /* 577 */ \
+  OP(UnlockDiscardableTextureCHROMIUM)                     /* 578 */ \
+  OP(LockDiscardableTextureCHROMIUM)                       /* 579 */ \
+  OP(TexStorage2DImageCHROMIUM)                            /* 580 */ \
+  OP(SetColorSpaceMetadataCHROMIUM)                        /* 581 */ \
+  OP(WindowRectanglesEXTImmediate)                         /* 582 */ \
+  OP(CreateGpuFenceINTERNAL)                               /* 583 */ \
+  OP(WaitGpuFenceCHROMIUM)                                 /* 584 */ \
+  OP(DestroyGpuFenceCHROMIUM)                              /* 585 */ \
+  OP(SetReadbackBufferShadowAllocationINTERNAL)            /* 586 */
 
 enum CommandId {
   kOneBeforeStartPoint =
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
index 72bdd8c..77fbcb8 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_autogen.h
@@ -35,6 +35,7 @@
 static std::string GetStringFaceMode(uint32_t value);
 static std::string GetStringFaceType(uint32_t value);
 static std::string GetStringFramebufferAttachmentParameter(uint32_t value);
+static std::string GetStringFramebufferParameter(uint32_t value);
 static std::string GetStringFramebufferTarget(uint32_t value);
 static std::string GetStringGLState(uint32_t value);
 static std::string GetStringGetMaxIndexType(uint32_t value);
diff --git a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
index 4d63d1b4..0fd4a01 100644
--- a/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
+++ b/gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
@@ -2113,6 +2113,9 @@
         0x8B9B, "GL_IMPLEMENTATION_COLOR_READ_FORMAT",
     },
     {
+        0x8BBB, "GL_FRAMEBUFFER_FLIP_Y_MESA",
+    },
+    {
         0x8BC0, "GL_COUNTER_TYPE_AMD",
     },
     {
@@ -4565,6 +4568,10 @@
                                            arraysize(string_table), value);
 }
 
+std::string GLES2Util::GetStringFramebufferParameter(uint32_t value) {
+  return GLES2Util::GetQualifiedEnumString(NULL, 0, value);
+}
+
 std::string GLES2Util::GetStringFramebufferTarget(uint32_t value) {
   static const EnumToString string_table[] = {
       {GL_FRAMEBUFFER, "GL_FRAMEBUFFER"},
diff --git a/gpu/command_buffer/gles2_cmd_buffer_functions.txt b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
index 3ae9356..dc957cc 100644
--- a/gpu/command_buffer/gles2_cmd_buffer_functions.txt
+++ b/gpu/command_buffer/gles2_cmd_buffer_functions.txt
@@ -253,6 +253,7 @@
 GL_APICALL void         GL_APIENTRY glDeleteVertexArraysOES (GLsizeiNotNegative n, const GLuint* arrays);
 GL_APICALL GLboolean    GL_APIENTRY glIsVertexArrayOES (GLidVertexArray array);
 GL_APICALL void         GL_APIENTRY glBindVertexArrayOES (GLidBindVertexArray array);
+GL_APICALL void         GL_APIENTRY glFramebufferParameteri (GLenumFramebufferTarget target, GLenumFramebufferParameter pname, GLint param);
 
 // Non-GL commands.
 GL_APICALL void         GL_APIENTRY glSwapBuffers (GLuint64 swap_id, GLbitfieldSwapBuffersFlags flags = 0);
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index baaa5520..5da83e0c 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -1491,6 +1491,12 @@
   // https://github.com/KhronosGroup/WebGL/pull/2583
   feature_flags_.separate_stencil_ref_mask_writemask =
       !(gl_version_info_->is_d3d) && !IsWebGLContext();
+
+  if (gfx::HasExtension(extensions, "GL_MESA_framebuffer_flip_y")) {
+    feature_flags_.mesa_framebuffer_flip_y = true;
+    validators_.framebuffer_parameter.AddValue(GL_FRAMEBUFFER_FLIP_Y_MESA);
+    AddExtensionString("GL_MESA_framebuffer_flip_y");
+  }
 }
 
 void FeatureInfo::InitializeFloatAndHalfFloatFeatures(
diff --git a/gpu/command_buffer/service/feature_info.h b/gpu/command_buffer/service/feature_info.h
index f8a53aa9..11f4b95e 100644
--- a/gpu/command_buffer/service/feature_info.h
+++ b/gpu/command_buffer/service/feature_info.h
@@ -129,6 +129,7 @@
     bool chromium_gpu_fence = false;
     bool unpremultiply_and_dither_copy = false;
     bool separate_stencil_ref_mask_writemask = false;
+    bool mesa_framebuffer_flip_y = false;
   };
 
   FeatureInfo();
diff --git a/gpu/command_buffer/service/feature_info_unittest.cc b/gpu/command_buffer/service/feature_info_unittest.cc
index 83259d2..ae2cdfb 100644
--- a/gpu/command_buffer/service/feature_info_unittest.cc
+++ b/gpu/command_buffer/service/feature_info_unittest.cc
@@ -1766,5 +1766,10 @@
   }
 }
 
+TEST_P(FeatureInfoTest, InitializeMESAFramebufferFlipYExtensionTrue) {
+  SetupInitExpectations("GL_MESA_framebuffer_flip_y");
+  EXPECT_TRUE(info_->feature_flags().mesa_framebuffer_flip_y);
+}
+
 }  // namespace gles2
 }  // namespace gpu
diff --git a/gpu/command_buffer/service/gl_context_virtual.cc b/gpu/command_buffer/service/gl_context_virtual.cc
index 755836e..05980b0 100644
--- a/gpu/command_buffer/service/gl_context_virtual.cc
+++ b/gpu/command_buffer/service/gl_context_virtual.cc
@@ -5,6 +5,7 @@
 #include "gpu/command_buffer/service/gl_context_virtual.h"
 
 #include "base/callback.h"
+#include "build/build_config.h"
 #include "gpu/command_buffer/service/decoder_context.h"
 #include "gpu/command_buffer/service/gl_state_restorer_impl.h"
 #include "ui/gl/gl_gl_api_implementation.h"
@@ -101,6 +102,16 @@
   shared_context_->OnReleaseVirtuallyCurrent(this);
 }
 
+#if defined(OS_MACOSX)
+uint64_t GLContextVirtual::BackpressureFenceCreate() {
+  return shared_context_->BackpressureFenceCreate();
+}
+
+void GLContextVirtual::BackpressureFenceWait(uint64_t fence) {
+  shared_context_->BackpressureFenceWait(fence);
+}
+#endif
+
 GLContextVirtual::~GLContextVirtual() {
   Destroy();
 }
diff --git a/gpu/command_buffer/service/gl_context_virtual.h b/gpu/command_buffer/service/gl_context_virtual.h
index 1704f1f..f0156ead 100644
--- a/gpu/command_buffer/service/gl_context_virtual.h
+++ b/gpu/command_buffer/service/gl_context_virtual.h
@@ -10,6 +10,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/memory/weak_ptr.h"
+#include "build/build_config.h"
 #include "gpu/gpu_gles2_export.h"
 #include "ui/gl/gl_context.h"
 
@@ -46,6 +47,10 @@
   gl::YUVToRGBConverter* GetYUVToRGBConverter(
       const gfx::ColorSpace& color_space) override;
   void ForceReleaseVirtuallyCurrent() override;
+#if defined(OS_MACOSX)
+  uint64_t BackpressureFenceCreate() override;
+  void BackpressureFenceWait(uint64_t fence) override;
+#endif
 
  protected:
   ~GLContextVirtual() override;
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 0539795..5e597d7 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -1640,6 +1640,9 @@
   // Wrapper for glFlush.
   void DoFlush();
 
+  // Wrapper for glFramebufferParameteri.
+  void DoFramebufferParameteri(GLenum target, GLenum pname, GLint param);
+
   // Wrapper for glFramebufferRenderbufffer.
   void DoFramebufferRenderbuffer(
       GLenum target, GLenum attachment, GLenum renderbuffertarget,
@@ -4091,6 +4094,8 @@
   caps.chromium_nonblocking_readback =
       feature_info_->context_type() == CONTEXT_TYPE_WEBGL2;
   caps.num_surface_buffers = surface_->GetBufferCount();
+  caps.mesa_framebuffer_flip_y =
+      feature_info_->feature_flags().mesa_framebuffer_flip_y;
 
   return caps;
 }
@@ -7927,6 +7932,18 @@
   api()->glClearBufferfiFn(buffer, drawbuffer, depth, stencil);
 }
 
+void GLES2DecoderImpl::DoFramebufferParameteri(GLenum target,
+                                               GLenum pname,
+                                               GLint param) {
+  const char* func_name = "glFramebufferParameteri";
+  Framebuffer* framebuffer = GetFramebufferInfoForTarget(target);
+  if (!framebuffer) {
+    LOCAL_SET_GL_ERROR(GL_INVALID_OPERATION, func_name, "no framebuffer bound");
+    return;
+  }
+  api()->glFramebufferParameteriFn(target, pname, param);
+}
+
 void GLES2DecoderImpl::DoFramebufferRenderbuffer(
     GLenum target, GLenum attachment, GLenum renderbuffertarget,
     GLuint client_renderbuffer_id) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
index b5c7c24..ec73874 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h
@@ -4499,6 +4499,32 @@
   return error::kNoError;
 }
 
+error::Error GLES2DecoderImpl::HandleFramebufferParameteri(
+    uint32_t immediate_data_size,
+    const volatile void* cmd_data) {
+  const volatile gles2::cmds::FramebufferParameteri& c =
+      *static_cast<const volatile gles2::cmds::FramebufferParameteri*>(
+          cmd_data);
+  if (!features().mesa_framebuffer_flip_y) {
+    return error::kUnknownCommand;
+  }
+
+  GLenum target = static_cast<GLenum>(c.target);
+  GLenum pname = static_cast<GLenum>(c.pname);
+  GLint param = static_cast<GLint>(c.param);
+  if (!validators_->framebuffer_target.IsValid(target)) {
+    LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferParameteri", target,
+                                    "target");
+    return error::kNoError;
+  }
+  if (!validators_->framebuffer_parameter.IsValid(pname)) {
+    LOCAL_SET_GL_ERROR_INVALID_ENUM("glFramebufferParameteri", pname, "pname");
+    return error::kNoError;
+  }
+  DoFramebufferParameteri(target, pname, param);
+  return error::kNoError;
+}
+
 error::Error GLES2DecoderImpl::HandleSwapBuffers(
     uint32_t immediate_data_size,
     const volatile void* cmd_data) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
index 1b7691f..e106a21 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doer_prototypes.h
@@ -175,6 +175,7 @@
 error::Error DoFlushMappedBufferRange(GLenum target,
                                       GLintptr offset,
                                       GLsizeiptr size);
+error::Error DoFramebufferParameteri(GLenum target, GLenum pname, GLint param);
 error::Error DoFramebufferRenderbuffer(GLenum target,
                                        GLenum attachment,
                                        GLenum renderbuffertarget,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
index 136085f..1dc0a5a 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
@@ -1157,6 +1157,13 @@
   return error::kNoError;
 }
 
+error::Error GLES2DecoderPassthroughImpl::DoFramebufferParameteri(GLenum target,
+                                                                  GLenum pname,
+                                                                  GLint param) {
+  api()->glFramebufferParameteriFn(target, pname, param);
+  return error::kNoError;
+}
+
 error::Error GLES2DecoderPassthroughImpl::DoFramebufferRenderbuffer(
     GLenum target,
     GLenum attachment,
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
index 863be0b..1ac64d5 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_handlers_autogen.cc
@@ -3905,6 +3905,26 @@
   return error::kNoError;
 }
 
+error::Error GLES2DecoderPassthroughImpl::HandleFramebufferParameteri(
+    uint32_t immediate_data_size,
+    const volatile void* cmd_data) {
+  const volatile gles2::cmds::FramebufferParameteri& c =
+      *static_cast<const volatile gles2::cmds::FramebufferParameteri*>(
+          cmd_data);
+  if (!features().mesa_framebuffer_flip_y) {
+    return error::kUnknownCommand;
+  }
+
+  GLenum target = static_cast<GLenum>(c.target);
+  GLenum pname = static_cast<GLenum>(c.pname);
+  GLint param = static_cast<GLint>(c.param);
+  error::Error error = DoFramebufferParameteri(target, pname, param);
+  if (error != error::kNoError) {
+    return error;
+  }
+  return error::kNoError;
+}
+
 error::Error GLES2DecoderPassthroughImpl::HandleSwapBuffers(
     uint32_t immediate_data_size,
     const volatile void* cmd_data) {
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
index 75bca23..423bf119 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_unittest_framebuffers.cc
@@ -4038,6 +4038,49 @@
                         GLES2DecoderTestWithDrawRectangle,
                         ::testing::Bool());
 
+TEST_P(GLES2DecoderManualInitTest, MESAFramebufferFlipYExtensionEnabled) {
+  InitState init;
+  init.gl_version = "OpenGL ES 3.1";
+  init.context_type = CONTEXT_TYPE_WEBGL1;
+  init.extensions = "GL_MESA_framebuffer_flip_y";
+  InitDecoder(init);
+
+  EXPECT_TRUE(feature_info()->validators()->framebuffer_parameter.IsValid(
+      GL_FRAMEBUFFER_FLIP_Y_MESA));
+
+  EXPECT_CALL(*gl_, FramebufferParameteri(_, _, _))
+      .Times(1)
+      .RetiresOnSaturation();
+
+  DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
+                    kServiceFramebufferId);
+  cmds::FramebufferParameteri cmd;
+  cmd.Init(GL_FRAMEBUFFER, GL_FRAMEBUFFER_FLIP_Y_MESA, 1);
+  EXPECT_EQ(error::kNoError, ExecuteCmd(cmd));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
+TEST_P(GLES2DecoderManualInitTest, MESAFramebufferFlipYExtensionDisabled) {
+  InitState init;
+  init.gl_version = "OpenGL ES 3.1";
+  init.context_type = CONTEXT_TYPE_WEBGL1;
+  InitDecoder(init);
+
+  EXPECT_FALSE(feature_info()->validators()->framebuffer_parameter.IsValid(
+      GL_FRAMEBUFFER_FLIP_Y_MESA));
+
+  EXPECT_CALL(*gl_, FramebufferParameteri(_, _, _))
+      .Times(0)
+      .RetiresOnSaturation();
+
+  DoBindFramebuffer(GL_FRAMEBUFFER, client_framebuffer_id_,
+                    kServiceFramebufferId);
+  cmds::FramebufferParameteri cmd;
+  cmd.Init(GL_FRAMEBUFFER, GL_FRAMEBUFFER_FLIP_Y_MESA, 1);
+  EXPECT_EQ(error::kUnknownCommand, ExecuteCmd(cmd));
+  EXPECT_EQ(GL_NO_ERROR, GetGLError());
+}
+
 // TODO(gman): PixelStorei
 
 // TODO(gman): SwapBuffers
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
index 96767ea8..ef955ee1 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h
@@ -114,6 +114,7 @@
 FaceTypeValidator face_type;
 
 ValueValidator<GLenum> framebuffer_attachment_parameter;
+ValueValidator<GLenum> framebuffer_parameter;
 ValueValidator<GLenum> framebuffer_target;
 ValueValidator<GLenum> g_l_state;
 class GetMaxIndexTypeValidator {
diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
index 97f89cb..a6c28f0 100644
--- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
+++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h
@@ -1398,6 +1398,7 @@
       framebuffer_attachment_parameter(
           valid_framebuffer_attachment_parameter_table,
           arraysize(valid_framebuffer_attachment_parameter_table)),
+      framebuffer_parameter(),
       framebuffer_target(valid_framebuffer_target_table,
                          arraysize(valid_framebuffer_target_table)),
       g_l_state(valid_g_l_state_table, arraysize(valid_g_l_state_table)),
diff --git a/gpu/command_buffer/service/service_transfer_cache.cc b/gpu/command_buffer/service/service_transfer_cache.cc
index 36c7736..6b28020 100644
--- a/gpu/command_buffer/service/service_transfer_cache.cc
+++ b/gpu/command_buffer/service/service_transfer_cache.cc
@@ -18,6 +18,10 @@
 namespace gpu {
 namespace {
 
+// Put an arbitrary (high) limit on number of cache entries to prevent
+// unbounded handle growth with tiny entries.
+static size_t kMaxCacheEntries = 2000;
+
 size_t CacheSizeLimit() {
   size_t memory_usage = 128 * 1024 * 1024;
   if (base::SysInfo::IsLowEndDevice())
@@ -70,7 +74,9 @@
     CacheEntryInternal&& other) = default;
 
 ServiceTransferCache::ServiceTransferCache()
-    : entries_(EntryCache::NO_AUTO_EVICT), cache_size_limit_(CacheSizeLimit()) {
+    : entries_(EntryCache::NO_AUTO_EVICT),
+      cache_size_limit_(CacheSizeLimit()),
+      max_cache_entries_(kMaxCacheEntries) {
   // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview).
   // Don't register a dump provider in these cases.
   if (base::ThreadTaskRunnerHandle::IsSet()) {
@@ -154,7 +160,8 @@
 
 void ServiceTransferCache::EnforceLimits() {
   for (auto it = entries_.rbegin(); it != entries_.rend();) {
-    if (total_size_ <= cache_size_limit_) {
+    if (total_size_ <= cache_size_limit_ &&
+        entries_.size() <= max_cache_entries_) {
       return;
     }
     if (it->second.handle && !it->second.handle->Delete()) {
diff --git a/gpu/command_buffer/service/service_transfer_cache.h b/gpu/command_buffer/service/service_transfer_cache.h
index da1ceaa..7729d8ab 100644
--- a/gpu/command_buffer/service/service_transfer_cache.h
+++ b/gpu/command_buffer/service/service_transfer_cache.h
@@ -62,6 +62,10 @@
     cache_size_limit_ = cache_size_limit;
     EnforceLimits();
   }
+  void SetMaxCacheEntriesForTesting(size_t max_cache_entries) {
+    max_cache_entries_ = max_cache_entries;
+    EnforceLimits();
+  }
   size_t cache_size_for_testing() const { return total_size_; }
 
  private:
@@ -97,6 +101,9 @@
   // The limit above which the cache will start evicting resources.
   size_t cache_size_limit_ = 0;
 
+  // The max number of entries we will hold in the cache.
+  size_t max_cache_entries_ = 0;
+
   DISALLOW_COPY_AND_ASSIGN(ServiceTransferCache);
 };
 
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc
index 4218769..aa847a0 100644
--- a/gpu/command_buffer/service/shader_translator.cc
+++ b/gpu/command_buffer/service/shader_translator.cc
@@ -4,7 +4,6 @@
 
 #include "gpu/command_buffer/service/shader_translator.h"
 
-#include <GLES2/gl2.h>
 #include <stddef.h>
 #include <string.h>
 #include <algorithm>
@@ -15,6 +14,7 @@
 #include "base/logging.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/trace_event/trace_event.h"
+#include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_version_info.h"
 
diff --git a/gpu/command_buffer/service/shader_translator_cache.cc b/gpu/command_buffer/service/shader_translator_cache.cc
index f4c4ab33..21eb9d12b 100644
--- a/gpu/command_buffer/service/shader_translator_cache.cc
+++ b/gpu/command_buffer/service/shader_translator_cache.cc
@@ -4,8 +4,6 @@
 
 #include "gpu/command_buffer/service/shader_translator_cache.h"
 
-#include <GLES2/gl2.h>
-
 namespace gpu {
 namespace gles2 {
 
diff --git a/gpu/command_buffer/service/shader_translator_cache_unittest.cc b/gpu/command_buffer/service/shader_translator_cache_unittest.cc
index a23a753..66c8308 100644
--- a/gpu/command_buffer/service/shader_translator_cache_unittest.cc
+++ b/gpu/command_buffer/service/shader_translator_cache_unittest.cc
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <GLES2/gl2.h>
-
 #include "gpu/command_buffer/service/shader_translator_cache.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_bindings.h"
 
 namespace gpu {
 namespace gles2 {
diff --git a/gpu/command_buffer/service/shader_translator_unittest.cc b/gpu/command_buffer/service/shader_translator_unittest.cc
index cbfb16e..528ef11 100644
--- a/gpu/command_buffer/service/shader_translator_unittest.cc
+++ b/gpu/command_buffer/service/shader_translator_unittest.cc
@@ -2,10 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include <GLES2/gl2.h>
-
 #include "gpu/command_buffer/service/shader_translator.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_version_info.h"
 
 namespace gpu {
diff --git a/gpu/config/gpu_info_collector_win.cc b/gpu/config/gpu_info_collector_win.cc
index 517f706f..8aa6fc4 100644
--- a/gpu/config/gpu_info_collector_win.cc
+++ b/gpu/config/gpu_info_collector_win.cc
@@ -303,6 +303,45 @@
   return false;
 }
 
+bool BadVulkanDllVersion(GPUInfo* gpu_info) {
+  std::unique_ptr<FileVersionInfoWin> file_version_info(
+      static_cast<FileVersionInfoWin*>(
+          FileVersionInfoWin::CreateFileVersionInfo(
+              base::FilePath(FILE_PATH_LITERAL("vulkan-1.dll")))));
+
+  if (!file_version_info)
+    return false;
+
+  const VS_FIXEDFILEINFO* fixed_file_info =
+      static_cast<FileVersionInfoWin*>(file_version_info.get())
+          ->fixed_file_info();
+  const int major = HIWORD(fixed_file_info->dwFileVersionMS);
+  const int minor = LOWORD(fixed_file_info->dwFileVersionMS);
+  const int build_1 = HIWORD(fixed_file_info->dwFileVersionLS);
+  const int build_2 = LOWORD(fixed_file_info->dwFileVersionLS);
+
+  // From the logs, most vulkan-1.dll crashs are from the following versions.
+  // As of 7/23/2018.
+  // 0.0.0.0 -  # of crashes: 6556
+  // 1.0.26.0 - # of crashes: 5890
+  // 1.0.33.0 - # of crashes: 12271
+  // 1.0.42.0 - # of crashes: 35749
+  // 1.0.42.1 - # of crashes: 68214
+  // 1.0.51.0 - # of crashes: 5152
+  // The GPU could be from any vendors, but only some certain models would
+  // crash. For those that don't crash, they usually return failures upon GPU
+  // vulkan support querying even though the GPU drivers can support it.
+  if ((major == 0 && minor == 0 && build_1 == 0 && build_2 == 0) ||
+      (major == 1 && minor == 0 && build_1 == 26 && build_2 == 0) ||
+      (major == 1 && minor == 0 && build_1 == 33 && build_2 == 0) ||
+      (major == 1 && minor == 0 && build_1 == 42 && build_2 == 0) ||
+      (major == 1 && minor == 0 && build_1 == 42 && build_2 == 1) ||
+      (major == 1 && minor == 0 && build_1 == 51 && build_2 == 0)) {
+    return true;
+  }
+  return false;
+}
+
 bool InitVulkan(base::NativeLibrary* vulkan_library,
                 PFN_vkGetInstanceProcAddr* vkGetInstanceProcAddr,
                 PFN_vkCreateInstance* vkCreateInstance) {
@@ -370,13 +409,18 @@
   gpu_info->supports_vulkan = false;
   gpu_info->vulkan_version = 0;
 
-  // Skip if the system has an older AMD Vulkan driver amdvlk64.dll which
-  // crashes when vkCreateInstance() gets called. This bug is fixed in the
-  // latest driver.
+  // Skip if the system has an older AMD Vulkan driver amdvlk64.dll or
+  // amdvlk32.dll which crashes when vkCreateInstance() id called. This bug has
+  // been fixed in the latest AMD driver.
   if (BadAMDVulkanDriverVersion(gpu_info)) {
     return;
   }
 
+  // Some early versions of vulkan-1.dll might crash
+  if (BadVulkanDllVersion(gpu_info)) {
+    return;
+  }
+
   if (!InitVulkan(&vulkan_library, &vkGetInstanceProcAddr, &vkCreateInstance)) {
     return;
   }
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.h b/gpu/ipc/service/image_transport_surface_overlay_mac.h
index 07d6582..5d68c4f 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.h
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.h
@@ -92,10 +92,9 @@
 
   std::vector<CALayerInUseQuery> ca_layer_in_use_queries_;
 
-  // A GLFence marking the end of the previous frame. Must only be accessed
-  // while the associated |previous_frame_context_| is bound.
-  std::unique_ptr<gl::GLFence> previous_frame_fence_;
-  base::ScopedTypeRef<CGLContextObj> fence_context_obj_;
+  // A GLFence marking the end of the previous frame, used for applying
+  // backpressure.
+  uint64_t previous_frame_fence_ = 0;
 
   // The renderer ID that all contexts made current to this surface should be
   // targeting.
diff --git a/gpu/ipc/service/image_transport_surface_overlay_mac.mm b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
index 025bd9d..e821aaf 100644
--- a/gpu/ipc/service/image_transport_surface_overlay_mac.mm
+++ b/gpu/ipc/service/image_transport_surface_overlay_mac.mm
@@ -19,22 +19,10 @@
 #include "ui/base/ui_base_switches.h"
 #include "ui/gl/ca_renderer_layer_params.h"
 #include "ui/gl/gl_context.h"
-#include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_image_io_surface.h"
 #include "ui/gl/gpu_switching_manager.h"
 #include "ui/gl/scoped_cgl.h"
 
-namespace {
-
-void CheckGLErrors(const char* msg) {
-  GLenum gl_error;
-  while ((gl_error = glGetError()) != GL_NO_ERROR) {
-    LOG(ERROR) << "OpenGL error hit " << msg << ": " << gl_error;
-  }
-}
-
-}  // namespace
-
 namespace gpu {
 
 ImageTransportSurfaceOverlayMac::ImageTransportSurfaceOverlayMac(
@@ -78,25 +66,10 @@
 }
 
 void ImageTransportSurfaceOverlayMac::PrepareToDestroy(bool have_context) {
-  if (!previous_frame_fence_)
-    return;
-  if (!have_context) {
-    // If we have no context, leak the GL objects, since we have no way to
-    // delete them.
-    DLOG(ERROR) << "Leaking GL fences.";
-    previous_frame_fence_.release();
-    return;
-  }
-  // Ensure we are using the context with which the fence was created.
-  DCHECK_EQ(fence_context_obj_, CGLGetCurrentContext());
-  CheckGLErrors("Before destroy fence");
-  previous_frame_fence_.reset();
-  CheckGLErrors("After destroy fence");
 }
 
 void ImageTransportSurfaceOverlayMac::Destroy() {
   ca_layer_tree_coordinator_.reset();
-  DCHECK(!previous_frame_fence_);
 }
 
 bool ImageTransportSurfaceOverlayMac::IsOffscreen() {
@@ -105,101 +78,16 @@
 
 void ImageTransportSurfaceOverlayMac::ApplyBackpressure() {
   TRACE_EVENT0("gpu", "ImageTransportSurfaceOverlayMac::ApplyBackpressure");
+  gl::GLContext* current_context = gl::GLContext::GetCurrent();
+  // TODO(ccameron): Remove these CHECKs.
+  CHECK(current_context);
+  CHECK(current_context->IsCurrent(this));
 
-  // TODO(ccameron): If this fixes the crashes in GLFence::Create, then
-  // determine how we are getting into this situation.
-  // https://crbug.com/863817
-  CGLContextObj current_context = CGLGetCurrentContext();
-  if (!current_context) {
-    LOG(ERROR) << "No context current!";
-    return;
-  }
-
-  // If supported, use GLFence to ensure that we haven't gotten more than one
-  // frame ahead of GL.
-  if (gl::GLFence::IsSupported()) {
-    CheckGLErrors("Before fence/flush");
-
-    // All GL writes to IOSurfaces prior to a glFlush will appear when that
-    // IOSurface is next displayed as a CALayer.
-    // TODO(ccameron): This is unnecessary if the below GLFence is a GLFenceARB,
-    // as that will call glFlush after creating the sync object.
-    {
-      TRACE_EVENT0("gpu", "glFlush");
-      base::TimeTicks before_flush_time = base::TimeTicks::Now();
-      glFlush();
-      base::TimeTicks after_flush_time = base::TimeTicks::Now();
-      CheckGLErrors("After fence/flush");
-      UMA_HISTOGRAM_TIMES("GPU.IOSurface.GLFlushTime",
-                          after_flush_time - before_flush_time);
-    }
-
-    // Create a fence for the current frame's work.
-    std::unique_ptr<gl::GLFence> this_frame_fence;
-    {
-      TRACE_EVENT0("gpu", "Create GLFence");
-      this_frame_fence = gl::GLFence::Create();
-    }
-
-    // If we have gotten more than one frame ahead of GL, wait for the previous
-    // frame to complete.
-    bool fence_context_changed = true;
-    if (previous_frame_fence_) {
-      fence_context_changed = fence_context_obj_.get() != current_context;
-      TRACE_EVENT0("gpu", "ClientWait");
-
-      // Ensure we are using the context with which the fence was created.
-      base::Optional<gl::ScopedCGLSetCurrentContext> scoped_set_current;
-      if (fence_context_changed) {
-        TRACE_EVENT0("gpu", "SetCurrentContext");
-        scoped_set_current.emplace(fence_context_obj_);
-      }
-
-      // While we could call GLFence::ClientWait, this performs a busy wait on
-      // Mac, leading to high CPU usage. Instead we poll with a 1ms delay. This
-      // should have minimal impact, as we will only hit this path when we are
-      // more than one frame (16ms) behind.
-      //
-      // Note that on some platforms (10.9), fences appear to sometimes get
-      // lost and will never pass. Add a 32ms timout to prevent these
-      // situations from causing a GPU process hang. crbug.com/618075
-      bool fence_completed = false;
-      for (int poll_iter = 0; !fence_completed && poll_iter < 32; ++poll_iter) {
-        if (poll_iter > 0) {
-          base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
-        }
-        {
-          TRACE_EVENT0("gpu", "GLFence::HasCompleted");
-          fence_completed = previous_frame_fence_->HasCompleted();
-        }
-      }
-      if (!fence_completed) {
-        TRACE_EVENT0("gpu", "Finish");
-        // We timed out waiting for the above fence, just issue a glFinish.
-        glFinish();
-      }
-
-      // Ensure that the GLFence object be destroyed while its context is
-      // current, lest we crash.
-      // https://crbug.com/863817
-      previous_frame_fence_.reset();
-    }
-
-    // Update the previous fame fence and save the context that we will be
-    // using for the GLFence object we will create (or just leave the
-    // previously saved one, if it is unchanged).
-    previous_frame_fence_ = std::move(this_frame_fence);
-    if (fence_context_changed) {
-      fence_context_obj_.reset(current_context, base::scoped_policy::RETAIN);
-    }
-  } else {
-    // GLFence isn't supported - issue a glFinish on each frame to ensure
-    // there is backpressure from GL.
-    TRACE_EVENT0("gpu", "glFinish");
-    CheckGLErrors("Before finish");
-    glFinish();
-    CheckGLErrors("After finish");
-  }
+  // Create the fence for the current frame before waiting on the previous
+  // frame's fence (to maximize CPU and GPU execution overlap).
+  uint64_t this_frame_fence = current_context->BackpressureFenceCreate();
+  current_context->BackpressureFenceWait(previous_frame_fence_);
+  previous_frame_fence_ = this_frame_fence;
 }
 
 void ImageTransportSurfaceOverlayMac::BufferPresented(
diff --git a/headless/test/data/protocol/sanity/renderer-client-redirect-chain-expected.txt b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-expected.txt
new file mode 100644
index 0000000..6a3051f
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-expected.txt
@@ -0,0 +1,18 @@
+Tests renderer: chained client redirection.
+requested url: http://www.example.com/
+requested url: http://www.example.com/1
+requested url: http://www.example.com/2
+requested url: http://www.example.com/3
+requested url: http://www.example.com/pass
+Pass
+Frames: 1
+ frameId=MainFrame
+  url=http://www.example.com/
+  url=http://www.example.com/1
+  url=http://www.example.com/2
+  url=http://www.example.com/3
+ScheduledNavigations: 1
+ frameId=MainFrame
+  url=http://www.example.com/1 reason=metaTagRefresh
+  url=http://www.example.com/2 reason=scriptInitiated
+  url=http://www.example.com/3 reason=scriptInitiated
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js-expected.txt b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js-expected.txt
new file mode 100644
index 0000000..c8844f38
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js-expected.txt
@@ -0,0 +1,11 @@
+Tests renderer: chained client redirection with js disabled.
+requested url: http://www.example.com/
+requested url: http://www.example.com/1
+Hello, World 1
+Frames: 1
+ frameId=MainFrame
+  url=http://www.example.com/
+  url=http://www.example.com/1
+ScheduledNavigations: 1
+ frameId=MainFrame
+  url=http://www.example.com/1 reason=metaTagRefresh
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js.js b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js.js
new file mode 100644
index 0000000..4c8ae24
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-client-redirect-chain-no-js.js
@@ -0,0 +1,81 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: chained client redirection with js disabled.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/`,
+      `<html>
+        <head>
+          <meta http-equiv="refresh" content="0; url=http://www.example.com/1"/>
+          <title>Hello, World 0</title>
+        </head>
+        <body>http://www.example.com/</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/1`,
+      `<html>
+        <head>
+          <title>Hello, World 1</title>
+          <script>
+            document.location='http://www.example.com/2';
+          </script>
+        </head>
+        <body>http://www.example.com/1</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/2`,
+      `<html>
+        <head>
+          <title>Hello, World 2</title>
+          <script>
+            setTimeout("document.location='http://www.example.com/3'", 1000);
+          </script>
+        </head>
+        <body>http://www.example.com/2</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/3`,
+      `<html>
+        <head>
+          <title>Pass</title>
+        </head>
+        <body>
+          http://www.example.com/3
+          <img src="pass">
+        </body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/pass`,
+      `<html>
+        <body>
+        pass
+        </body>
+      </html>`);
+
+  await dp.Emulation.setScriptExecutionDisabled({value: true});
+
+  await virtualTimeController.grantInitialTime(1000 + 100, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate('document.title'));
+      frameNavigationHelper.logFrames();
+      frameNavigationHelper.logScheduledNavigations();
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://www.example.com/');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-client-redirect-chain.js b/headless/test/data/protocol/sanity/renderer-client-redirect-chain.js
new file mode 100644
index 0000000..19da184
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-client-redirect-chain.js
@@ -0,0 +1,79 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: chained client redirection.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/`,
+      `<html>
+        <head>
+          <meta http-equiv="refresh" content="0; url=http://www.example.com/1"/>
+          <title>Hello, World 0</title>
+        </head>
+        <body>http://www.example.com/</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/1`,
+      `<html>
+        <head>
+          <title>Hello, World 1</title>
+          <script>
+            document.location='http://www.example.com/2';
+          </script>
+        </head>
+        <body>http://www.example.com/1</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/2`,
+      `<html>
+        <head>
+          <title>Hello, World 2</title>
+          <script>
+            setTimeout("document.location='http://www.example.com/3'", 1000);
+          </script>
+        </head>
+        <body>http://www.example.com/2</body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/3`,
+      `<html>
+        <head>
+          <title>Pass</title>
+        </head>
+        <body>
+          http://www.example.com/3
+          <img src="pass">
+        </body>
+      </html>`);
+
+  httpInterceptor.addResponse(
+      `http://www.example.com/pass`,
+      `<html>
+        <body>
+        pass
+        </body>
+      </html>`);
+
+  await virtualTimeController.grantInitialTime(1000 + 100, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate('document.title'));
+      frameNavigationHelper.logFrames();
+      frameNavigationHelper.logScheduledNavigations();
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://www.example.com/');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-delayed-completion-expected.txt b/headless/test/data/protocol/sanity/renderer-delayed-completion-expected.txt
new file mode 100644
index 0000000..5b87530
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-delayed-completion-expected.txt
@@ -0,0 +1,3 @@
+Tests renderer: delayed completion.
+requested url: http://example.com/foobar
+<p>delayed text</p>
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-delayed-completion.js b/headless/test/data/protocol/sanity/renderer-delayed-completion.js
new file mode 100644
index 0000000..99e0582
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-delayed-completion.js
@@ -0,0 +1,40 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: delayed completion.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  httpInterceptor.addResponse(
+      `http://example.com/foobar`,
+      `<html>
+      <body>
+       <script type="text/javascript">
+         setTimeout(() => {
+           var div = document.getElementById('content');
+           var p = document.createElement('p');
+           p.textContent = 'delayed text';
+           div.appendChild(p);
+         }, 3000);
+       </script>
+        <div id="content"/>
+      </body>
+      </html>`);
+
+  await virtualTimeController.grantInitialTime(3000 + 100, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate(
+          `document.getElementById('content').innerHTML.trim()`));
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://example.com/foobar');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-hello-world-expected.txt b/headless/test/data/protocol/sanity/renderer-hello-world-expected.txt
new file mode 100644
index 0000000..1bc14c0
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-hello-world-expected.txt
@@ -0,0 +1,7 @@
+Tests renderer: hello world.
+requested url: http://example.com/foobar
+<h1>Hello headless world!</h1>
+Frames: 1
+ frameId=MainFrame
+  url=http://example.com/foobar
+ScheduledNavigations: 0
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-hello-world.js b/headless/test/data/protocol/sanity/renderer-hello-world.js
new file mode 100644
index 0000000..92adb12a
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-hello-world.js
@@ -0,0 +1,29 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: hello world.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  httpInterceptor.addResponse(
+    `http://example.com/foobar`,
+    `<!doctype html><h1>Hello headless world!</h1>`);
+
+  await virtualTimeController.grantInitialTime(500, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate('document.body.innerHTML'));
+      frameNavigationHelper.logFrames();
+      frameNavigationHelper.logScheduledNavigations();
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://example.com/foobar');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-javascript-console-errors-expected.txt b/headless/test/data/protocol/sanity/renderer-javascript-console-errors-expected.txt
new file mode 100644
index 0000000..82f579b2
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-javascript-console-errors-expected.txt
@@ -0,0 +1,7 @@
+Tests renderer: verify JavaScript console errors reporting.
+requested url: http://example.com/foobar
+Uncaught SyntaxError: Unexpected token <
+Uncaught ReferenceError: func1 is not defined
+Uncaught ReferenceError: func2 is not defined
+Hello, Script!
+Uncaught ReferenceError: func3 is not defined
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-javascript-console-errors.js b/headless/test/data/protocol/sanity/renderer-javascript-console-errors.js
new file mode 100644
index 0000000..0e615ef8
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-javascript-console-errors.js
@@ -0,0 +1,60 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: verify JavaScript console errors reporting.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  httpInterceptor.addResponse(
+      `http://example.com/foobar` ,
+      `<html>
+      <head>
+        <script language="JavaScript">
+          <![CDATA[
+            function image() {
+              window.open('<xsl:value-of select="/IMAGE/@href" />');
+            }
+          ]]>
+        </script>
+      </head>
+      <body onload="func3()">
+        <script type="text/javascript">
+          func1()
+        </script>
+        <script type="text/javascript">
+          func2();
+        </script>
+        <script type="text/javascript">
+          console.log("Hello, Script!");
+        </script>
+      </body>
+      </html>`);
+
+  await dp.Runtime.enable();
+
+  dp.Runtime.onConsoleAPICalled(data => {
+    const text = data.params.args[0].value;
+    testRunner.log(`${text}`);
+  });
+
+  dp.Runtime.onExceptionThrown(data => {
+    const details = data.params.exceptionDetails;
+    testRunner.log(
+        `${details.text} ${details.exception.description.replace(/\n.*/, '')}`);
+  });
+
+  await virtualTimeController.grantInitialTime(500, 1000,
+    null,
+    async () => {
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://example.com/foobar');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-override-title-js-disabled-expected.txt b/headless/test/data/protocol/sanity/renderer-override-title-js-disabled-expected.txt
new file mode 100644
index 0000000..1298284
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-override-title-js-disabled-expected.txt
@@ -0,0 +1,3 @@
+Tests renderer: override title with JavaScript disabled.
+requested url: http://example.com/foobar
+JavaScript is off
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-override-title-js-disabled.js b/headless/test/data/protocol/sanity/renderer-override-title-js-disabled.js
new file mode 100644
index 0000000..685027fd
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-override-title-js-disabled.js
@@ -0,0 +1,41 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: override title with JavaScript disabled.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  await dp.Emulation.setScriptExecutionDisabled({value: true});
+
+  httpInterceptor.addResponse(
+      `http://example.com/foobar`,
+      `<html>
+        <head>
+          <title>JavaScript is off</title>
+          <script language="JavaScript">
+            function settitle() {
+              document.title = 'JavaScript is on';
+            }
+            </script>
+          </head>
+        <body onload="settitle()">
+          Hello, World!
+        </body>
+      </html>`);
+
+  await virtualTimeController.grantInitialTime(500, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate('document.title'));
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://example.com/foobar');
+})
diff --git a/headless/test/data/protocol/sanity/renderer-override-title-js-enabled-expected.txt b/headless/test/data/protocol/sanity/renderer-override-title-js-enabled-expected.txt
new file mode 100644
index 0000000..c4948948
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-override-title-js-enabled-expected.txt
@@ -0,0 +1,3 @@
+Tests renderer: override title with JavaScript enabled.
+requested url: http://example.com/foobar
+JavaScript is on
\ No newline at end of file
diff --git a/headless/test/data/protocol/sanity/renderer-override-title-js-enabled.js b/headless/test/data/protocol/sanity/renderer-override-title-js-enabled.js
new file mode 100644
index 0000000..05941b05
--- /dev/null
+++ b/headless/test/data/protocol/sanity/renderer-override-title-js-enabled.js
@@ -0,0 +1,41 @@
+// 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) {
+  let {page, session, dp} = await testRunner.startBlank(
+      'Tests renderer: override title with JavaScript enabled.');
+
+  let RendererTestHelper =
+      await testRunner.loadScript('../helpers/renderer-test-helper.js');
+  let {httpInterceptor, frameNavigationHelper, virtualTimeController} =
+      await (new RendererTestHelper(testRunner, dp, page)).init();
+
+  await dp.Emulation.setScriptExecutionDisabled({value: false});
+
+  httpInterceptor.addResponse(
+      `http://example.com/foobar`,
+      `<html>
+        <head>
+          <title>JavaScript is off</title>
+          <script language="JavaScript">
+            function settitle() {
+              document.title = 'JavaScript is on';
+            }
+            </script>
+          </head>
+        <body onload="settitle()">
+          Hello, World!
+        </body>
+      </html>`);
+
+  await virtualTimeController.grantInitialTime(500, 1000,
+    null,
+    async () => {
+      testRunner.log(await session.evaluate('document.title'));
+      testRunner.completeTest();
+    }
+  );
+
+  await frameNavigationHelper.navigate('http://example.com/foobar');
+})
diff --git a/headless/test/headless_protocol_browsertest.cc b/headless/test/headless_protocol_browsertest.cc
index 04aaace..27b42ec 100644
--- a/headless/test/headless_protocol_browsertest.cc
+++ b/headless/test/headless_protocol_browsertest.cc
@@ -283,39 +283,52 @@
   base::test::ScopedFeatureList scoped_feature_list_;
 };
 
+// BeginFrameControl is not supported on MacOS yet, see: https://cs.chromium.org
+// chromium/src/headless/lib/browser/protocol/target_handler.cc?
+// rcl=5811aa08e60ba5ac7622f029163213cfbdb682f7&l=32
+#if defined(OS_MACOSX)
+#define HEADLESS_PROTOCOL_COMPOSITOR_TEST(TEST_NAME, SCRIPT_NAME) \
+  IN_PROC_BROWSER_TEST_F(HeadlessProtocolCompositorBrowserTest,   \
+                         DISABLED_##TEST_NAME) {                  \
+    test_folder_ = "/protocol/";                                  \
+    script_name_ = SCRIPT_NAME;                                   \
+    RunTest();                                                    \
+  }
+#else
 #define HEADLESS_PROTOCOL_COMPOSITOR_TEST(TEST_NAME, SCRIPT_NAME)            \
   IN_PROC_BROWSER_TEST_F(HeadlessProtocolCompositorBrowserTest, TEST_NAME) { \
     test_folder_ = "/protocol/";                                             \
     script_name_ = SCRIPT_NAME;                                              \
     RunTest();                                                               \
   }
-
-// BeginFrameControl is not supported on MacOS yet, see: https://cs.chromium.org
-// chromium/src/headless/lib/browser/protocol/target_handler.cc?
-// rcl=5811aa08e60ba5ac7622f029163213cfbdb682f7&l=32
-#if defined(OS_MACOSX)
-#define MAYBE_CompositorBasicRaf DISABLED_CompositorBasicRaf
-#define MAYBE_CompositorImageAnimation DISABLED_CompositorImageAnimation
-#define MAYBE_CompositorCssAnimation DISABLED_CompositorCssAnimation
-#define MAYBE_VirtualTimeControllerTest DISABLED_VirtualTimeControllerTest
-#else
-#define MAYBE_CompositorBasicRaf CompositorBasicRaf
-#define MAYBE_CompositorImageAnimation CompositorImageAnimation
-#define MAYBE_CompositorCssAnimation CompositorCssAnimation
-#define MAYBE_VirtualTimeControllerTest VirtualTimeControllerTest
 #endif
-HEADLESS_PROTOCOL_COMPOSITOR_TEST(MAYBE_CompositorBasicRaf,
+
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(CompositorBasicRaf,
                                   "emulation/compositor-basic-raf.js");
 HEADLESS_PROTOCOL_COMPOSITOR_TEST(
-    MAYBE_CompositorImageAnimation,
+    CompositorImageAnimation,
     "emulation/compositor-image-animation-test.js");
-HEADLESS_PROTOCOL_COMPOSITOR_TEST(MAYBE_CompositorCssAnimation,
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(CompositorCssAnimation,
                                   "emulation/compositor-css-animation-test.js");
-HEADLESS_PROTOCOL_TEST(MAYBE_VirtualTimeControllerTest,
-                       "helpers/virtual-time-controller-test.js");
-#undef MAYBE_CompositorBasicRaf
-#undef MAYBE_CompositorImageAnimation
-#undef MAYBE_CompositorCssAnimation
-#undef MAYBE_VirtualTimeControllerTest
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(VirtualTimeControllerTest,
+                                  "helpers/virtual-time-controller-test.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererHelloWorld,
+                                  "sanity/renderer-hello-world.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(
+    RendererOverrideTitleJsEnabled,
+    "sanity/renderer-override-title-js-enabled.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(
+    RendererOverrideTitleJsDisabled,
+    "sanity/renderer-override-title-js-disabled.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(
+    RendererJavaScriptConsoleErrors,
+    "sanity/renderer-javascript-console-errors.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererDelayedCompletion,
+                                  "sanity/renderer-delayed-completion.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(RendererClientRedirectChain,
+                                  "sanity/renderer-client-redirect-chain.js");
+HEADLESS_PROTOCOL_COMPOSITOR_TEST(
+    RendererClientRedirectChainNoJs,
+    "sanity/renderer-client-redirect-chain-no-js.js");
 
 }  // namespace headless
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
index 5f40d29..0b99509b 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
@@ -24,7 +24,7 @@
 <translation id="3805899903892079518">Chromium har ikke tilgang til bildene eller videoene dine. Slå på tilgangen i iOS-innstillingene &gt; Personvern &gt; Bilder.</translation>
 <translation id="4024541897090868497">For å få fanene dine på alle enhetene du bruker, logg på Chromium.</translation>
 <translation id="4241912885070669028">Du logger av en konto som administreres av <ph name="SIGNOUT_MANAGED_DOMAIN" />. Dette fører til at Chromium-dataene dine slettes fra denne enheten, men de blir værende i Google-kontoen din.</translation>
-<translation id="4272892696084633551">Hjelp til med å forbedre funksjonene og ytelsen til Chromium</translation>
+<translation id="4272892696084633551">Bidra til å gjøre Chromium bedre og raskere</translation>
 <translation id="4555020257205549924">Når denne funksjonen er slått på, tilbyr Chromium å oversette sider som er skrevet på andre språk, ved hjelp av Google Oversetter. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation>
 <translation id="4787850887676698916">Faner du har åpnet i Chromium på de andre enhetene dine, vises her.</translation>
 <translation id="495292094137889840">Begynn å bruke Chromium QR-skanneren</translation>
@@ -34,7 +34,7 @@
 <translation id="5945387852661427312">Du logger på med en konto som administreres av <ph name="DOMAIN" />, og du gir dermed administratoren for dette domenet kontroll over Chromium-dataene dine. Dataene dine blir knyttet til denne kontoen permanent. Når du logger av Chromium, slettes dataene dine fra denne enheten, men de er fortsatt lagret i Google-kontoen din.</translation>
 <translation id="6068866989048414399">Vilkår for Chromium</translation>
 <translation id="6268381023930128611">Vil du logge av Chromium?</translation>
-<translation id="641451971369018375">Kommuniserer med Google for å forbedre nettlesing og Chromium</translation>
+<translation id="641451971369018375">Kommuniserer med Google for å gjøre nettlesing og Chromium bedre</translation>
 <translation id="6424492062988593837">Chromium har blitt enda bedre. En ny versjon er nå tilgjengelig.</translation>
 <translation id="6604711459180487467">Få en bedre Chromium-opplevelse basert på hvor du er.</translation>
 <translation id="6626296268883197964">Ved å bruke denne appen samtykker du i Chromiums <ph name="BEGIN_LINK_TOS" />vilkår for bruk<ph name="END_LINK_TOS" /> og <ph name="BEGIN_LINK_PRIVACY" />merknad om personvern<ph name="END_LINK_PRIVACY" />.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_am.xtb b/ios/chrome/app/strings/resources/ios_strings_am.xtb
index 31f4eef..b622ffb8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_am.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_am.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">እንቅስቃሴ እና መስተጋብሮች</translation>
 <translation id="213900355088104901">በግል ለማሰስ ማንነት የማያሳውቅ ትር ይክፈቱ</translation>
 <translation id="2149973817440762519">እልባት አርትዕ</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> ያልተነበቡ የንባብ ዝርዝር ጽሑፎች።</translation>
 <translation id="2230173723195178503">ድረ-ገጽ ተጭኗል</translation>
 <translation id="2256128224215992540">የፍለጋ እና የጣቢያ አስተያየት ጥቆማዎች</translation>
 <translation id="2267753748892043616">መለያ አክል</translation>
@@ -219,6 +220,7 @@
 
 የእርስዎ ውሂብ በእርስዎ የስምረት የይለፍ ቃል ተመስጥሯል። ስምረትን ለመጀመር ያስገቡት።</translation>
 <translation id="473775607612524610">አዘምን</translation>
+<translation id="4807020197310989387">1 ያልተነበበ የንባብ ዝርዝር ጽሑፍ።</translation>
 <translation id="481968316161811770">ኩኪዎች፣ የጣቢያ ውሂብ</translation>
 <translation id="4854345657858711387">የይለፍ ኮድ ያዘጋጁ</translation>
 <translation id="4860895144060829044">ደውል</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">ግላዊነት ያልተላበሱ አገልግሎቶች</translation>
 <translation id="7856733331829174190">ማውረድ አልተቻለም</translation>
 <translation id="7859704718976024901">የአሰሳ ታሪክ</translation>
+<translation id="7918293828610777738">የንባብ ዝርዝርዎ ከመስመር ውጭ ይገኛል። አንድ ገጽ ወደ የንባብ ዝርዝርዎ ለማከል በመጀመሪያ <ph name="SHARE_OPENING_ICON" />ን ከዚያም <ph name="READ_LATER_TEXT" />ን መታ ያድርጉ።</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">የይለፍ ቃላትን ወደ ውጭ ላክ...</translation>
 <translation id="7947953824732555851">ተቀበል እና ግባ</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">ሁሉንም ትሮች ይዝጉ</translation>
 <translation id="8114753159095730575">ፋይል ለመውረድ ይገኛል። አማራጮች ከማያ ገጹ ግርጌ አጠገብ ይገኛሉ።</translation>
 <translation id="8160722851663543621">ፍለጋዎችን ከአድራሻ አሞሌው እና ከፍለጋ ሳጥኑ እና አንዳንድ ኩኪዎችን ወደ ነባሪው የፍለጋ ፕሮግራምዎ ይልካል</translation>
+<translation id="8178325540017397816">የመረጧቸው ንጥሎች ይወገዳሉ</translation>
 <translation id="8205564605687841303">ተወው</translation>
 <translation id="8225985093977202398">የተሸጎጡ ምስሎች እና ፋይሎች</translation>
 <translation id="8261506727792406068">ሰርዝ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_bg.xtb b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
index bb8c1d4..3b5a58bf7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_bg.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_bg.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Активност и взаимодействия</translation>
 <translation id="213900355088104901">За да сърфирате частно, отворете раздел в режим „инкогнито“</translation>
 <translation id="2149973817440762519">Редактиране на отметката</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> непрочетени статии в списъка за четене.</translation>
 <translation id="2230173723195178503">Уеб страницата се зареди</translation>
 <translation id="2256128224215992540">Предлагани сайтове и търсене</translation>
 <translation id="2267753748892043616">Добавяне на профил</translation>
@@ -219,6 +220,7 @@
 
 Данните ви са шифровани с пропуска ви за синхронизиране. Въведете го, за да стартирате синхронизирането.</translation>
 <translation id="473775607612524610">Актуализиране</translation>
+<translation id="4807020197310989387">1 непрочетена статия в списъка за четене.</translation>
 <translation id="481968316161811770">„Бисквитки“ и данни за сайтове</translation>
 <translation id="4854345657858711387">Задайте код за достъп</translation>
 <translation id="4860895144060829044">Обаждане</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Неперсонализирани услуги</translation>
 <translation id="7856733331829174190">Неуспешно изтегляне</translation>
 <translation id="7859704718976024901">История на сърфирането</translation>
+<translation id="7918293828610777738">Списъкът ви за четене е достъпен офлайн. За да добавите страница към него, докоснете <ph name="SHARE_OPENING_ICON" /> и след това „<ph name="READ_LATER_TEXT" />“.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Експортиране на паролите...</translation>
 <translation id="7947953824732555851">Приемам и влизам</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Затваряне на разделите</translation>
 <translation id="8114753159095730575">Наличен е файл за изтегляне. Съответните опции са достъпни в долната част на екрана.</translation>
 <translation id="8160722851663543621">Изпраща заявките за търсене от адресната лента и полето за търсене, както и някои „бисквитки“, до стандартната ви търсеща машина</translation>
+<translation id="8178325540017397816">Избраните елементи ще бъдат премахнати</translation>
 <translation id="8205564605687841303">Отказ</translation>
 <translation id="8225985093977202398">Кеширани изображения и файлове</translation>
 <translation id="8261506727792406068">Изтриване</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
index 97668d7c..23c0858 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Activitat i interaccions</translation>
 <translation id="213900355088104901">Per navegar de manera privada, obre una pestanya d'incògnit</translation>
 <translation id="2149973817440762519">Edita l'adreça d'interès</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> articles de la llista de lectura no llegits</translation>
 <translation id="2230173723195178503">La pàgina web s'ha carregat</translation>
 <translation id="2256128224215992540">Suggeriments de cerques i llocs</translation>
 <translation id="2267753748892043616">Afegeix un compte</translation>
@@ -219,6 +220,7 @@
 
 Les vostres dades estan encriptades amb la vostra frase de contrasenya de sincronització. Introduïu-la per començar la sincronització.</translation>
 <translation id="473775607612524610">Actualitza</translation>
+<translation id="4807020197310989387">1 article de la llista de lectura no llegit</translation>
 <translation id="481968316161811770">Galetes, dades llocs</translation>
 <translation id="4854345657858711387">Estableix una contrasenya</translation>
 <translation id="4860895144060829044">Truca</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Serveis no personalitzats</translation>
 <translation id="7856733331829174190">No s'ha pogut baixar</translation>
 <translation id="7859704718976024901">Historial de navegació</translation>
+<translation id="7918293828610777738">La llista de lectura està disponible sense connexió. Per afegir-hi una pàgina, toca <ph name="SHARE_OPENING_ICON" /> i després <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exporta les contrasenyes</translation>
 <translation id="7947953824732555851">Acc. i inicia sessió</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Tanca totes les pestanyes</translation>
 <translation id="8114753159095730575">La baixada de fitxers està disponible. Opcions disponibles a la part inferior de la pantalla.</translation>
 <translation id="8160722851663543621">Envia al motor de cerca predeterminat algunes galetes i cerques de la barra d'adreces i del quadre de cerca</translation>
+<translation id="8178325540017397816">Els elements que has seleccionat se suprimiran</translation>
 <translation id="8205564605687841303">Cancel·la</translation>
 <translation id="8225985093977202398">Fitxers i imatges a memòria cau</translation>
 <translation id="8261506727792406068">Suprimeix</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
index cb0d7fc4..b399b69 100644
--- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivita a interakce</translation>
 <translation id="213900355088104901">Procházejte internet v soukromí na anonymní kartě</translation>
 <translation id="2149973817440762519">Upravit záložku</translation>
+<translation id="2207590065820824892">Počet nepřečtených článků v seznamu četby: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Webová stránka byla načtena</translation>
 <translation id="2256128224215992540">Návrhy vyhledávacích dotazů a webů</translation>
 <translation id="2267753748892043616">Přidat účet</translation>
@@ -219,6 +220,7 @@
 
 Vaše data jsou šifrována pomocí heslové fráze pro synchronizaci. Chcete-li zahájit synchronizaci, zadejte ji.</translation>
 <translation id="473775607612524610">Aktualizovat</translation>
+<translation id="4807020197310989387">1 nepřečtený článek v seznamu četby.</translation>
 <translation id="481968316161811770">Soubory cookie a data webů</translation>
 <translation id="4854345657858711387">Nastavte heslo</translation>
 <translation id="4860895144060829044">Volat</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Nepersonalizované služby</translation>
 <translation id="7856733331829174190">Stažení se nezdařilo</translation>
 <translation id="7859704718976024901">Historie procházení</translation>
+<translation id="7918293828610777738">Seznam obsahu k přečtení je k dispozici offline. Chcete-li na něj přidat stránku, klepněte na <ph name="SHARE_OPENING_ICON" /> a poté na <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportovat hesla...</translation>
 <translation id="7947953824732555851">Přijmout a přihlásit</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Zavřít všechny karty</translation>
 <translation id="8114753159095730575">Je k dispozici soubor ke stažení. Možnosti jsou k dispozici ve spodní části obrazovky.</translation>
 <translation id="8160722851663543621">Odesílá vyhledávací dotazy z adresního řádku a vyhledávacího pole a několik souborů cookie vašemu výchozímu vyhledávači</translation>
+<translation id="8178325540017397816">Vybrané položky budou odstraněny</translation>
 <translation id="8205564605687841303">Zrušit</translation>
 <translation id="8225985093977202398">Obrázky a soubory v mezipaměti</translation>
 <translation id="8261506727792406068">Smazat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index a42eab4..83ebea5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivitet og interaktioner</translation>
 <translation id="213900355088104901">Hvis du vil bruge nettet privat, skal du åbne en inkognitofane</translation>
 <translation id="2149973817440762519">Rediger bogmærke</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> ulæste artikler på læselisten.</translation>
 <translation id="2230173723195178503">Websiden er indlæst</translation>
 <translation id="2256128224215992540">Søge- og websiteforslag</translation>
 <translation id="2267753748892043616">Tilføj konto</translation>
@@ -219,6 +220,7 @@
 
 Dine data er krypteret med din adgangssætning til synkronisering. Angiv den for at starte synkroniseringen.</translation>
 <translation id="473775607612524610">Opdater</translation>
+<translation id="4807020197310989387">1 ulæst artikel på læselisten.</translation>
 <translation id="481968316161811770">Cookies, websitedata</translation>
 <translation id="4854345657858711387">Angiv en adgangskode</translation>
 <translation id="4860895144060829044">Ring op</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Ikke-tilpassede tjenester</translation>
 <translation id="7856733331829174190">Downloaden mislykkedes</translation>
 <translation id="7859704718976024901">Browserhistorik</translation>
+<translation id="7918293828610777738">Din læseliste er tilgængelig offline. Du kan føje en side til din læseliste ved at trykke på <ph name="SHARE_OPENING_ICON" /> og derefter <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportér adgangskoder…</translation>
 <translation id="7947953824732555851">Acceptér og log ind</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Luk alle faner</translation>
 <translation id="8114753159095730575">Filer kan downloades. Se valgmulighederne nederst på skærmen.</translation>
 <translation id="8160722851663543621">Sender søgninger fra adresselinjen og søgefeltet samt nogle cookies til din standardsøgemaskine</translation>
+<translation id="8178325540017397816">De valgte elementer fjernes</translation>
 <translation id="8205564605687841303">Annuller</translation>
 <translation id="8225985093977202398">Billeder og filer, der er gemt i cache</translation>
 <translation id="8261506727792406068">Slet</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_de.xtb b/ios/chrome/app/strings/resources/ios_strings_de.xtb
index bac4f4f1..2dab6ed 100644
--- a/ios/chrome/app/strings/resources/ios_strings_de.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_de.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivitäten und Interaktionen</translation>
 <translation id="213900355088104901">Wenn Sie privat surfen möchten, öffnen Sie einen Inkognito-Tab</translation>
 <translation id="2149973817440762519">Lesezeichen bearbeiten</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> ungelesene Artikel in Leseliste.</translation>
 <translation id="2230173723195178503">Webseite geladen</translation>
 <translation id="2256128224215992540">Vorschläge für Suche &amp; Websites</translation>
 <translation id="2267753748892043616">Konto hinzufügen</translation>
@@ -219,6 +220,7 @@
 
 Ihre Daten sind mit Ihrer Synchronisierungspassphrase verschlüsselt. Geben Sie diese ein, um die Synchronisierung zu starten.</translation>
 <translation id="473775607612524610">Aktualisieren</translation>
+<translation id="4807020197310989387">1 ungelesener Artikel in Leseliste.</translation>
 <translation id="481968316161811770">Cookies, Websitedaten</translation>
 <translation id="4854345657858711387">Passcode einrichten</translation>
 <translation id="4860895144060829044">Anrufen</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Nicht-personalisierte Dienste</translation>
 <translation id="7856733331829174190">Fehler beim Download</translation>
 <translation id="7859704718976024901">Browserverlauf</translation>
+<translation id="7918293828610777738">Ihre Leseliste ist offline verfügbar. Sie können eine Seite Ihrer Leseliste hinzufügen, indem Sie auf <ph name="SHARE_OPENING_ICON" /> &gt; <ph name="READ_LATER_TEXT" /> tippen.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Passwörter exportieren…</translation>
 <translation id="7947953824732555851">Akzeptieren und anmelden</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Alle Tabs schließen</translation>
 <translation id="8114753159095730575">Dateidownload verfügbar. Optionen stehen unten auf dem Bildschirm zur Verfügung.</translation>
 <translation id="8160722851663543621">Suchanfragen, die in die Adressleiste oder das Suchfeld eingegeben wurden, sowie einige Cookies werden an Ihre Standardsuchmaschine gesendet</translation>
+<translation id="8178325540017397816">Die ausgewählten Elemente werden entfernt</translation>
 <translation id="8205564605687841303">Abbrechen</translation>
 <translation id="8225985093977202398">Bilder &amp; Dateien im Cache</translation>
 <translation id="8261506727792406068">Löschen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_el.xtb b/ios/chrome/app/strings/resources/ios_strings_el.xtb
index 5e7be17..527d5ad 100644
--- a/ios/chrome/app/strings/resources/ios_strings_el.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_el.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Δραστηριότητα και αλληλεπιδράσεις</translation>
 <translation id="213900355088104901">Για να περιηγηθείτε ιδιωτικά, ανοίξτε μια καρτέλα για ανώνυμη περιήγηση</translation>
 <translation id="2149973817440762519">Επεξεργασία σελιδοδείκτη</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> μη αναγνωσμένα άρθρα λίστας ανάγνωσης.</translation>
 <translation id="2230173723195178503">Η ιστοσελίδα φορτώθηκε</translation>
 <translation id="2256128224215992540">Προτάσεις αναζήτησης και ιστοτόπων</translation>
 <translation id="2267753748892043616">Προσθήκη λογαριασμού</translation>
@@ -219,6 +220,7 @@
 
 Τα δεδομένα σας είναι κρυπτογραφημένα με τη δική σας φράση πρόσβασης συγχρονισμού. Πληκτρολογήστε την για να ξεκινήσει ο συγχρονισμός.</translation>
 <translation id="473775607612524610">Ενημέρωση</translation>
+<translation id="4807020197310989387">1 μη αναγνωσμένο άρθρο λίστας ανάγνωσης.</translation>
 <translation id="481968316161811770">Cookie, δεδομένα ιστότοπου</translation>
 <translation id="4854345657858711387">Ορισμός κωδικού πρόσβασης</translation>
 <translation id="4860895144060829044">Κλήση</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Μη εξατομικευμένες υπηρεσίες</translation>
 <translation id="7856733331829174190">Δεν ήταν δυνατή η λήψη</translation>
 <translation id="7859704718976024901">Ιστορικό περιήγησης</translation>
+<translation id="7918293828610777738">Η λίστα ανάγνωσης είναι διαθέσιμη εκτός σύνδεσης. Για να προσθέσετε μια σελίδα στη λίστα ανάγνωσης, πατήστε το εικονίδιο <ph name="SHARE_OPENING_ICON" /> και μετά πατήστε το στοιχείο <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Εξαγωγή κωδικών πρόσβασης…</translation>
 <translation id="7947953824732555851">Αποδοχή και σύνδεση</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Κλείσ. όλων των καρτελών</translation>
 <translation id="8114753159095730575">Η λήψη του αρχείου είναι διαθέσιμη. Οι διαθέσιμες επιλογές βρίσκονται κοντά στο κάτω μέρος της οθόνης.</translation>
 <translation id="8160722851663543621">Αποστέλλει αναζητήσεις από τη γραμμή διευθύνσεων και το πλαίσιο αναζήτησης, καθώς και ορισμένα cookie στην προεπιλεγμένη μηχανή αναζήτησης</translation>
+<translation id="8178325540017397816">Τα στοιχεία που επιλέξατε θα καταργηθούν</translation>
 <translation id="8205564605687841303">Ακύρωση</translation>
 <translation id="8225985093977202398">Εικόνες και αρχεία στην κρυφή μνήμη</translation>
 <translation id="8261506727792406068">Διαγραφή</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb
index 0f3a968d..2d69ae8 100644
--- a/ios/chrome/app/strings/resources/ios_strings_es.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Actividad e interacciones</translation>
 <translation id="213900355088104901">Para navegar en privado, abre una pestaña de incógnito</translation>
 <translation id="2149973817440762519">Editar marcador</translation>
+<translation id="2207590065820824892">Artículos de la lista de lectura no leídos: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Página web cargada</translation>
 <translation id="2256128224215992540">Sugerencias de búsqueda y sitios web</translation>
 <translation id="2267753748892043616">Añadir cuenta</translation>
@@ -219,6 +220,7 @@
 
 Tus datos se han cifrado con tu frase de contraseña de sincronización. Introdúcela para iniciar la sincronización.</translation>
 <translation id="473775607612524610">Actualizar</translation>
+<translation id="4807020197310989387">1 artículo de la lista de lectura no leído.</translation>
 <translation id="481968316161811770">Cookies y datos de sitios web</translation>
 <translation id="4854345657858711387">Establecer una contraseña</translation>
 <translation id="4860895144060829044">Llamar</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Servicios no personalizados</translation>
 <translation id="7856733331829174190">No se ha podido descargar</translation>
 <translation id="7859704718976024901">Historial de navegación</translation>
+<translation id="7918293828610777738">Tu lista de lectura está disponible sin conexión. Para añadir una página a la lista, toca <ph name="SHARE_OPENING_ICON" /> y, a continuación, <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar contraseñas...</translation>
 <translation id="7947953824732555851">Aceptar y acceder</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Cerrar todas las pestañas</translation>
 <translation id="8114753159095730575">La descarga de archivos está disponible. Hay opciones disponibles en la parte inferior de la pantalla.</translation>
 <translation id="8160722851663543621">Envía las búsquedas de la barra de direcciones y del cuadro de búsqueda junto con algunas cookies a tu buscador predeterminado</translation>
+<translation id="8178325540017397816">Se eliminarán los elementos que hayas seleccionado</translation>
 <translation id="8205564605687841303">Cancelar</translation>
 <translation id="8225985093977202398">Archivos e imágenes en caché</translation>
 <translation id="8261506727792406068">Eliminar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb
index 0eeaac6..b8b21fa 100644
--- a/ios/chrome/app/strings/resources/ios_strings_et.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Tegevused ja interaktsioonid</translation>
 <translation id="213900355088104901">Privaatselt sirvimiseks avage inkognito vaheleht</translation>
 <translation id="2149973817440762519">Muuda järjehoidjat</translation>
+<translation id="2207590065820824892">Lugemisloendis on <ph name="UNREAD_COUNT" /> lugemata artiklit.</translation>
 <translation id="2230173723195178503">Veebileht laaditi</translation>
 <translation id="2256128224215992540">Otsingu- ja saidisoovitused</translation>
 <translation id="2267753748892043616">Lisa konto</translation>
@@ -219,6 +220,7 @@
 
 Teie andmed on krüpteeritud teie sünkroonimisparooliga. Sisestage see sünkroonimise alustamiseks.</translation>
 <translation id="473775607612524610">Värskenda</translation>
+<translation id="4807020197310989387">Lugemisloendis on 1 lugemata artikkel.</translation>
 <translation id="481968316161811770">Küpsis., saidi andm.</translation>
 <translation id="4854345657858711387">Pääsukoodi seadistamine</translation>
 <translation id="4860895144060829044">Helistage</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Isikupärastamata teenused</translation>
 <translation id="7856733331829174190">Ei saanud alla laadida</translation>
 <translation id="7859704718976024901">Sirvimisajalugu</translation>
+<translation id="7918293828610777738">Teie lugemisloend on võrguühenduseta saadaval. Lugemisloendisse lehe lisamiseks puudutage ikooni <ph name="SHARE_OPENING_ICON" /> ja seejärel valikut <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Paroolide eksportimine …</translation>
 <translation id="7947953824732555851">Nõustu ja logi sisse</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Sule kõik vahelehed</translation>
 <translation id="8114753159095730575">Allalaaditav fail on saadaval. Valikud kuvatakse ekraani alaosas.</translation>
 <translation id="8160722851663543621">Saadab teie vaikeotsingumootorile otsingud teie aadressiribalt ja otsingukastist ning mõned küpsisefailid</translation>
+<translation id="8178325540017397816">Teie valitud üksused eemaldatakse</translation>
 <translation id="8205564605687841303">Tühista</translation>
 <translation id="8225985093977202398">Vahem. salv. kujut. ja failid</translation>
 <translation id="8261506727792406068">Kustuta</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fa.xtb b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
index b5d94ed..ce9be7c7 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fa.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fa.xtb
@@ -77,6 +77,7 @@
 <translation id="2120297377148151361">فعالیت و تعاملات</translation>
 <translation id="213900355088104901">برای مرور خصوصی، برگه ناشناسی باز کنید</translation>
 <translation id="2149973817440762519">ویرایش نشانک</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> مقاله خوانده‌نشده در فهرست مطالعه.</translation>
 <translation id="2230173723195178503">صفحه وب بار شد</translation>
 <translation id="2256128224215992540">پیشنهادات جستجو و سایت</translation>
 <translation id="2267753748892043616">افزودن حساب</translation>
@@ -199,7 +200,7 @@
 <translation id="4281844954008187215">شرایط استفاده از سرویس</translation>
 <translation id="430793432425771671">همگام‌سازی همه چیز</translation>
 <translation id="4342284590510997375">جدید</translation>
-<translation id="434816576838749873">انتخاب برنامه رایانامه</translation>
+<translation id="434816576838749873">انتخاب برنامه ایمیل</translation>
 <translation id="4359125752503270327">این صفحه در برنامه دیگری باز می‌شود.</translation>
 <translation id="4370827530403103842">همگام‌سازی کار نمی‌کند. برای رفع اشکال ضربه بزنید.</translation>
 <translation id="4375040482473363939">‏جستجوی کد QR</translation>
@@ -220,6 +221,7 @@
 
 داده‌های شما با عبارت عبور همگام‌سازی رمزگذاری می‌شود. برای شروع همگام‌سازی آن را وارد کنید.</translation>
 <translation id="473775607612524610">به‌روزرسانی</translation>
+<translation id="4807020197310989387">۱ مقاله خوانده‌نشده در فهرست مطالعه.</translation>
 <translation id="481968316161811770">کوکی‌ها، داده‌های سایت</translation>
 <translation id="4854345657858711387">تنظیم گذرنویسه</translation>
 <translation id="4860895144060829044">تماس</translation>
@@ -261,7 +263,7 @@
 <translation id="5556459405103347317">تازه‌سازی</translation>
 <translation id="5619279135193775234">Mail</translation>
 <translation id="5626245204502895507">فایل در حال حاضر قابل بارگیری نیست.</translation>
-<translation id="5659593005791499971">رایانامه</translation>
+<translation id="5659593005791499971">ایمیل</translation>
 <translation id="5669528293118408608">www</translation>
 <translation id="567881659373499783">نسخه <ph name="PRODUCT_VERSION" /></translation>
 <translation id="5728700505257787410">متأسفیم، مشکلی در ورود به حساب شما وجود داشت.</translation>
@@ -360,7 +362,7 @@
 <translation id="7136892417564438900">دوربین غیرقابل‌ دسترسی است</translation>
 <translation id="7159472599653637159">درخواست سایت ویژه دستگاه همراه</translation>
 <translation id="7167621057293532233">انواع داده</translation>
-<translation id="7175593937868963913">نوشتن رایانامه</translation>
+<translation id="7175593937868963913">نوشتن ایمیل</translation>
 <translation id="7189598951263744875">در حال اشتراک‌گذاری...</translation>
 <translation id="7203585745079012652">پاسخ گفتاری</translation>
 <translation id="722055596168483966">‏شخصی‌سازی خدمات Google</translation>
@@ -371,7 +373,7 @@
 <translation id="7346909386216857016">بله متوجه شدم.</translation>
 <translation id="7400418766976504921">نشانی وب</translation>
 <translation id="7425346204213733349">‏تغییرات در نشانک‌ها، سابقه، گذرواژه و سایر تنظیمات دیگر با حساب Google شما همگام‌سازی نخواهند شد. با این حال، داده‌های موجودتان در حساب Google شما باقی خواهند ماند.</translation>
-<translation id="744343212394640790"><ph name="EMAIL" />، نشانی رایانامه من نیست</translation>
+<translation id="744343212394640790"><ph name="EMAIL" />، نشانی ایمیل من نیست</translation>
 <translation id="7454057999980797137">ایالت / استان</translation>
 <translation id="7456847797759667638">باز کردن مکان...</translation>
 <translation id="7464701184726199289">با این کار داده‌های همگام‌سازی‌شده در همه دستگاه‌ها پاک می‌شوند. تنظیمات ذخیره‌شده سایت حذف نمی‌شوند و احتمالاً عادات مرور شما را نشان می‌دهند. <ph name="BEGIN_LINK" />بیشتر بدانید<ph name="END_LINK" /></translation>
@@ -395,6 +397,7 @@
 <translation id="7830720446622801252">سرویس‌های شخصی‌نشده</translation>
 <translation id="7856733331829174190">بارگیری نشد</translation>
 <translation id="7859704718976024901">سابقه مرور</translation>
+<translation id="7918293828610777738">فهرست مطالعه‌تان درحالت آفلاین دردسترس است. برای اضافه کردن صفحه به فهرست مطالعه، روی <ph name="SHARE_OPENING_ICON" /> و بعد <ph name="READ_LATER_TEXT" /> ضربه بزنید.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">صادر کردن گذرواژه‌ها…</translation>
 <translation id="7947953824732555851">پذیرش و ورود به سیستم</translation>
@@ -412,6 +415,7 @@
 <translation id="8080028325999236607">بستن همه برگه‌ها</translation>
 <translation id="8114753159095730575">بارگیری فایل دردسترس است. گزینه‌ها نزدیک انتهای صفحه دردسترس است.</translation>
 <translation id="8160722851663543621">جستجوها را از نوار نشانی و جعبه جستجو و برخی کوکی‌ها را به موتور جستجوی پیش‌فرض ارسال می‌کند</translation>
+<translation id="8178325540017397816">موارد انتخاب‌شده حذف می‌شود.</translation>
 <translation id="8205564605687841303">لغو</translation>
 <translation id="8225985093977202398">تصاویر و فایل‌های قرار گرفته در حافظه پنهان</translation>
 <translation id="8261506727792406068">حذف</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
index 201f0c3e..b4de20e1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Toiminnot ja vuorovaikutukset</translation>
 <translation id="213900355088104901">Voit selata verkkoa yksityisesti avaamalla incognito-välilehden.</translation>
 <translation id="2149973817440762519">Muokkaa kirjanmerkkiä</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> lukematonta artikkelia lukulistalla</translation>
 <translation id="2230173723195178503">Verkkosivu ladattiin.</translation>
 <translation id="2256128224215992540">Haku- ja sivustoehdotukset</translation>
 <translation id="2267753748892043616">Lisää tili</translation>
@@ -219,6 +220,7 @@
 
 Tietosi salataan synkronoinnin tunnuslauseesi avulla. Aloita synkronointi antamalla tunnuslause.</translation>
 <translation id="473775607612524610">Päivitä</translation>
+<translation id="4807020197310989387">Yksi lukematon artikkeli lukulistalla</translation>
 <translation id="481968316161811770">Evästeet, sivuston tiedot</translation>
 <translation id="4854345657858711387">Määritä tunnuskoodi</translation>
 <translation id="4860895144060829044">Soita</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Yleiset palvelut</translation>
 <translation id="7856733331829174190">Lataus epäonnistui</translation>
 <translation id="7859704718976024901">Selaushistoria</translation>
+<translation id="7918293828610777738">Lukulistasi on käytettävissä offline-tilassa. Lisää sivu lukulistalle valitsemalla <ph name="SHARE_OPENING_ICON" /> ja sitten <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Vie salasanat…</translation>
 <translation id="7947953824732555851">Hyväksy ja kirjaudu sisään</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Sulje kaikki välilehdet</translation>
 <translation id="8114753159095730575">Ladattava tiedosto on saatavilla. Ruudun alaosassa on käytettävissä valintoja.</translation>
 <translation id="8160722851663543621">Lähettää osoitekentän ja hakukentän kautta tehdyt haut sekä joitakin evästeitä oletushakukoneellesi</translation>
+<translation id="8178325540017397816">Valitut kohteet poistetaan</translation>
 <translation id="8205564605687841303">Peruuta</translation>
 <translation id="8225985093977202398">Välimuistissa olevat kuvat ja tiedostot</translation>
 <translation id="8261506727792406068">Poista</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
index a67202d8..240c4c63 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktibidad at mga pakikipag-ugnayan</translation>
 <translation id="213900355088104901">Upang mag-browse nang pribado, magbukas ng tab na incognito</translation>
 <translation id="2149973817440762519">I-edit ang Bookmark</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> (na) hindi pa nababasang artikulo sa Listahan ng Babasahin</translation>
 <translation id="2230173723195178503">Na-load na ang webpage</translation>
 <translation id="2256128224215992540">Mga Suhestyon sa Paghahanap at Site</translation>
 <translation id="2267753748892043616">Magdagdag ng Account</translation>
@@ -219,6 +220,7 @@
 
 Na-encrypt ang iyong data gamit ang iyong passphrase sa pag-sync. Ilagay ito upang simulan ang pag-sync.</translation>
 <translation id="473775607612524610">Mag-update</translation>
+<translation id="4807020197310989387">1 hindi pa nababasang artikulo sa Listahan ng Babasahin.</translation>
 <translation id="481968316161811770">Cookies, Data ng Site</translation>
 <translation id="4854345657858711387">Magtakda ng Passcode</translation>
 <translation id="4860895144060829044">Tawagan</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Mga Hindi Naka-personalize na Serbisyo</translation>
 <translation id="7856733331829174190">Hindi Ma-download</translation>
 <translation id="7859704718976024901">History ng Pagba-browse</translation>
+<translation id="7918293828610777738">Available ang iyong listahan ng babasahin offline. Para magdagdag ng page sa iyong listahan ng babasahin, i-tap ang <ph name="SHARE_OPENING_ICON" /> pagkatapos ay i-tap ang <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">I-export Password...</translation>
 <translation id="7947953824732555851">I-accept, mag-sign in</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Isara ang Lahat ng Tab</translation>
 <translation id="8114753159095730575">Available ang pag-download ng file. Available ang mga opsyon malapit sa ibaba ng screen.</translation>
 <translation id="8160722851663543621">Nagpapadala ng mga paghahanap mula sa address bar at box para sa paghahanap, at ilang cookie sa iyong default na search engine</translation>
+<translation id="8178325540017397816">Maaalis ang mga pinili mong item</translation>
 <translation id="8205564605687841303">Kanselahin</translation>
 <translation id="8225985093977202398">Mga Naka-cache na Larawan at File</translation>
 <translation id="8261506727792406068">I-delete</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
index b4c9fdfa..9b2392b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Activité et interactions</translation>
 <translation id="213900355088104901">Pour parcourir le Web en mode privé, ouvrez un onglet de navigation privée</translation>
 <translation id="2149973817440762519">Modifier le favori</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> articles non lus dans la liste de lecture.</translation>
 <translation id="2230173723195178503">Page Web chargée</translation>
 <translation id="2256128224215992540">Suggestions de recherches et de sites</translation>
 <translation id="2267753748892043616">Ajouter un compte</translation>
@@ -219,6 +220,7 @@
 
 Vos données sont chiffrées avec votre phrase secrète de synchronisation. Saisissez-la pour lancer la synchronisation.</translation>
 <translation id="473775607612524610">Mettre à jour</translation>
+<translation id="4807020197310989387">1 article non lu dans la liste de lecture.</translation>
 <translation id="481968316161811770">Cookies/données site</translation>
 <translation id="4854345657858711387">Définir un code secret</translation>
 <translation id="4860895144060829044">Appeler</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Services non personnalisés</translation>
 <translation id="7856733331829174190">Téléchargement impossible</translation>
 <translation id="7859704718976024901">Historique de navigation</translation>
+<translation id="7918293828610777738">Votre liste de lecture est disponible hors connexion. Pour y ajouter une page, appuyez sur <ph name="SHARE_OPENING_ICON" />, puis sur <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Export mots de passe…</translation>
 <translation id="7947953824732555851">Accepter/Se connecter</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Fermer tous les onglets</translation>
 <translation id="8114753159095730575">Vous pouvez télécharger des fichiers. Différentes options sont disponibles au bas de l'écran.</translation>
 <translation id="8160722851663543621">Envoie les recherches effectuées à partir de la barre d'adresse et du champ de recherche ainsi que des cookies à votre moteur de recherche par défaut</translation>
+<translation id="8178325540017397816">Les éléments sélectionnés seront supprimés</translation>
 <translation id="8205564605687841303">Annuler</translation>
 <translation id="8225985093977202398">Img/fich. en cache</translation>
 <translation id="8261506727792406068">Supprimer</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 61396d5..e305a805 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">પ્રવૃત્તિ અને ક્રિયાપ્રતિક્રિયાઓ</translation>
 <translation id="213900355088104901">ખાનગી રૂપે બ્રાઉઝ કરવા માટે, છુપું ટૅબ ખોલો</translation>
 <translation id="2149973817440762519">બુકમાર્ક સંપાદિત કરો</translation>
+<translation id="2207590065820824892">વાંચન સૂચિમાં <ph name="UNREAD_COUNT" /> ન વાંચેલા લેખો.</translation>
 <translation id="2230173723195178503">વેબપૃષ્ઠ લોડ કર્યું</translation>
 <translation id="2256128224215992540">શોધ અને સાઇટ વિશે સૂચનો</translation>
 <translation id="2267753748892043616">એકાઉન્ટ ઉમેરો</translation>
@@ -219,6 +220,7 @@
 
 તમારો ડેટા તમારા સમન્વયન પાસફ્રેઝ સાથે એન્ક્રિપ્ટ કરવામાં આવ્યો છે. સમન્વયન શરૂ કરવા માટે તે દાખલ કરો.</translation>
 <translation id="473775607612524610">અપડેટ કરો</translation>
+<translation id="4807020197310989387">વાંચન સૂચિમાં 1 ન વાંચેલ લેખ.</translation>
 <translation id="481968316161811770">કુકીઝ, સાઇટ ડેટા</translation>
 <translation id="4854345657858711387">એક પાસકોડ સેટ કરો</translation>
 <translation id="4860895144060829044">કૉલ કરો</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">બિન-વ્યક્તિગત કરેલી સેવાઓ</translation>
 <translation id="7856733331829174190">ડાઉનલોડ ન કરી શક્યાં</translation>
 <translation id="7859704718976024901">બ્રાઉઝિંગ ઇતિહાસ</translation>
+<translation id="7918293828610777738">તમારી વાંચન સૂચિ ઑફલાઇન ઉપલબ્ધ છે. તમારી વાંચન સૂચિમાં પેજ ઉમેરવા માટે, <ph name="SHARE_OPENING_ICON" /> પર અને પછી <ph name="READ_LATER_TEXT" /> પર ટૅપ કરો.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">પાસવર્ડની નિકાસ કરો...</translation>
 <translation id="7947953824732555851">સ્વીકારો અને સાઇન ઇન કરો</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">બધા ટૅબ્સ બંધ કરો</translation>
 <translation id="8114753159095730575">ફાઇલ ડાઉનલોડ માટે ઉપલબ્ધ છે. સ્ક્રીનના તળિયે વિકલ્પો ઉપલબ્ધ છે.</translation>
 <translation id="8160722851663543621">ઍડ્રેસ બાર અને શોધ બૉક્સમાંથી શોધ અને અમુક કુકીને તમારા ડિફૉલ્ટ શોધ એંજિન પર મોકલે છે</translation>
+<translation id="8178325540017397816">તમે પસંદ કરેલી આઇટમો કાઢી નાખવામાં આવશે</translation>
 <translation id="8205564605687841303">રદ કરો</translation>
 <translation id="8225985093977202398">કૅશ કરેલ છબીઓ અને ફાઇલો</translation>
 <translation id="8261506727792406068">કાઢી નાખો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hi.xtb b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
index f8dacb6..1d20f54 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hi.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hi.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">गतिविधि और इंटरैक्शन</translation>
 <translation id="213900355088104901">निजी रूप से ब्राउज़ करने के लिए, गुप्त टैब खोलें</translation>
 <translation id="2149973817440762519">बुकमार्क संपादित करें</translation>
+<translation id="2207590065820824892">पढ़ने की सूची में <ph name="UNREAD_COUNT" /> ऐसे लेख हैं जो पढ़े नहीं गए हैं.</translation>
 <translation id="2230173723195178503">वेबपेज लोड हो गया है</translation>
 <translation id="2256128224215992540">खोज और साइट सुझाव</translation>
 <translation id="2267753748892043616">खाता जोड़ें</translation>
@@ -219,6 +220,7 @@
 
 आपका डेटा आपके समन्वयन पासफ़्रेज़ के साथ एन्क्रिप्ट किया गया है. समन्वयन शुरू करने के लिए इसे डालें.</translation>
 <translation id="473775607612524610">अपडेट करें</translation>
+<translation id="4807020197310989387">पढ़ने की सूची में एक ऐसा लेख है जो पढ़ा नहीं गया है.</translation>
 <translation id="481968316161811770">कुकी, साइट डेटा</translation>
 <translation id="4854345657858711387">पासकोड सेट करें</translation>
 <translation id="4860895144060829044">कॉल करें</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">मनमुताबिक नहीं बनाई गई सेवाएं</translation>
 <translation id="7856733331829174190">डाउनलोड नहीं की जा सकी</translation>
 <translation id="7859704718976024901">ब्राउज़िंग इतिहास</translation>
+<translation id="7918293828610777738">आपकी पढ़ने की सूची ऑफ़लाइन उपलब्ध है. अपनी पढ़ने की सूची में कोई पेज जोड़ने के लिए, पहले  <ph name="SHARE_OPENING_ICON" />  पर और फिर <ph name="READ_LATER_TEXT" /> पर टैप करें.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">पासवर्ड निर्यात करें...</translation>
 <translation id="7947953824732555851">स्वीकार करें और प्रवेश करें</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">सभी टैब बंद करें</translation>
 <translation id="8114753159095730575">फ़ाइल डाउनलोड करने की सुविधा उपलब्ध है. विकल्प स्क्रीन के नीचे उपलब्ध हैं.</translation>
 <translation id="8160722851663543621">पता बार और खोज बॉक्स की खोजों और कुछ कुकी को आपके डिफ़ॉल्ट खोज इंजन पर भेजती है</translation>
+<translation id="8178325540017397816">आपके चुने गए आइटम हटा दिए जाएंगे</translation>
 <translation id="8205564605687841303">रद्द करें</translation>
 <translation id="8225985093977202398">संचित चित्र और फ़ाइलें</translation>
 <translation id="8261506727792406068">हटाएं</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hr.xtb b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
index ec67435..4f99da4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hr.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivnost i interakcija</translation>
 <translation id="213900355088104901">Da biste pregledavali privatno, otvorite anonimnu karticu</translation>
 <translation id="2149973817440762519">Uredi oznaku</translation>
+<translation id="2207590065820824892">Nepročitanih članaka na popisu za čitanje: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Web-stranica učitana</translation>
 <translation id="2256128224215992540">Prijedlozi pretraživanja i web-lokacija</translation>
 <translation id="2267753748892043616">Dodaj račun</translation>
@@ -219,6 +220,7 @@
 
 Vaši su podaci šifrirani vašom šifrom za sinkronizaciju. Unesite je da biste pokrenuli sinkronizaciju.</translation>
 <translation id="473775607612524610">Ažuriraj</translation>
+<translation id="4807020197310989387">Jedan nepročitani članak na popisu za čitanje.</translation>
 <translation id="481968316161811770">Kolačići, podaci web-lokacije</translation>
 <translation id="4854345657858711387">Postavite šifru zaporke</translation>
 <translation id="4860895144060829044">Poziv</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Usluge bez prilagodbe</translation>
 <translation id="7856733331829174190">Preuzimanje nije moguće</translation>
 <translation id="7859704718976024901">Povijest pregledavanja</translation>
+<translation id="7918293828610777738">Vaš popis za čitanje dostupan je offline. Da biste dodali stranicu na popis za čitanje, dodirnite <ph name="SHARE_OPENING_ICON" />, a zatim <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Izvoz zaporki...</translation>
 <translation id="7947953824732555851">Prihv. i prijavi se</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Zatvori sve kartice</translation>
 <translation id="8114753159095730575">Dostupno je preuzimanje datoteka. Opcije su dostupne pri dnu zaslona.</translation>
 <translation id="8160722851663543621">Zadanoj tražilici šalje pretraživanja iz adresne trake i okvira za pretraživanje te neke kolačiće</translation>
+<translation id="8178325540017397816">Odabrane će se stavke ukloniti</translation>
 <translation id="8205564605687841303">Odustani</translation>
 <translation id="8225985093977202398">Predmemorirane slike i datoteke</translation>
 <translation id="8261506727792406068">Izbriši</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
index 2a8954b..d4d9ac9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Tevékenység és interakciók</translation>
 <translation id="213900355088104901">Privát böngészéshez nyisson inkognitólapot</translation>
 <translation id="2149973817440762519">Könyvjelző szerkesztése</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> olvasatlan cikk az olvasási listán.</translation>
 <translation id="2230173723195178503">A weboldal betöltött</translation>
 <translation id="2256128224215992540">Keresési és webhelyjavaslatok</translation>
 <translation id="2267753748892043616">Fiók hozzáadása</translation>
@@ -219,6 +220,7 @@
 
 Adatai az összetett szinkronizálási jelszavával vannak titkosítva. Írja be a jelszót a szinkronizálás megkezdéséhez.</translation>
 <translation id="473775607612524610">Frissítés</translation>
+<translation id="4807020197310989387">1 olvasatlan cikk az olvasási listán.</translation>
 <translation id="481968316161811770">Cookie-k, webhelyadatok</translation>
 <translation id="4854345657858711387">Biztonsági kód beállítása</translation>
 <translation id="4860895144060829044">Hívás</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Nem személyre szabott szolgáltatások</translation>
 <translation id="7856733331829174190">Nem sikerült letölteni</translation>
 <translation id="7859704718976024901">Böngészési előzmények</translation>
+<translation id="7918293828610777738">Olvasási listája hozzáférhető offline módban. Ha szeretne hozzáadni oldalakat a listához, koppintson a következőkre: <ph name="SHARE_OPENING_ICON" />, majd <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Jelszavak exportálása…</translation>
 <translation id="7947953824732555851">Elfogadás és bejelentkezés</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Összes lap bezárása</translation>
 <translation id="8114753159095730575">A fájlletöltés megvalósítható. A beállításokat a képernyő alján nyithatja meg.</translation>
 <translation id="8160722851663543621">A címsávban és a keresőmezőben végrehajtott kereséseket, valamint bizonyos cookie-kat elküld az alapértelmezett keresőmotornak</translation>
+<translation id="8178325540017397816">A kiválasztott elemek törlődnek</translation>
 <translation id="8205564605687841303">Mégse</translation>
 <translation id="8225985093977202398">A gyorsítótárban lévő képek és fájlok</translation>
 <translation id="8261506727792406068">Törlés</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb
index 9ae26ae..49e8e56 100644
--- a/ios/chrome/app/strings/resources/ios_strings_id.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivitas dan interaksi</translation>
 <translation id="213900355088104901">Untuk melakukan browsing rahasia, buka tab penyamaran</translation>
 <translation id="2149973817440762519">Edit Bookmark</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> artikel yang belum dibaca di Daftar Bacaan.</translation>
 <translation id="2230173723195178503">Halaman web dimuat</translation>
 <translation id="2256128224215992540">Saran Situs dan Penelusuran</translation>
 <translation id="2267753748892043616">Tambahkan Akun</translation>
@@ -219,6 +220,7 @@
 
 Data Anda dienkripsi dengan frasa sandi sinkronisasi. Masukkan frasa sandi untuk memulai sinkronisasi.</translation>
 <translation id="473775607612524610">Mutakhirkan</translation>
+<translation id="4807020197310989387">1 artikel yang belum dibaca di Daftar Bacaan.</translation>
 <translation id="481968316161811770">Cookie, Data Situs</translation>
 <translation id="4854345657858711387">Setel Kode Sandi</translation>
 <translation id="4860895144060829044">Telepon</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Layanan yang Tidak Dipersonalisasi</translation>
 <translation id="7856733331829174190">Tidak Dapat Mendownload</translation>
 <translation id="7859704718976024901">Histori Browsing</translation>
+<translation id="7918293828610777738">Daftar bacaan Anda tersedia secara offline. Untuk menambahkan halaman ke daftar bacaan, tap  <ph name="SHARE_OPENING_ICON" />  lalu <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Ekspor Sandi...</translation>
 <translation id="7947953824732555851">Terima dan masuk</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Tutup Semua Tab</translation>
 <translation id="8114753159095730575">Download file tersedia. Opsi tersedia di dekat bagian bawah layar.</translation>
 <translation id="8160722851663543621">Mengirimkan penelusuran dari kolom URL dan kotak penelusuran, serta beberapa cookie ke mesin telusur default</translation>
+<translation id="8178325540017397816">Item yang Anda pilih akan dihapus</translation>
 <translation id="8205564605687841303">Batal</translation>
 <translation id="8225985093977202398">Gambar &amp; File dalam Cache</translation>
 <translation id="8261506727792406068">Hapus</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_it.xtb b/ios/chrome/app/strings/resources/ios_strings_it.xtb
index e23f25d..3d92d82 100644
--- a/ios/chrome/app/strings/resources/ios_strings_it.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_it.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Attività e interazioni</translation>
 <translation id="213900355088104901">Per navigare in privato, apri una scheda di navigazione in incognito</translation>
 <translation id="2149973817440762519">Modifica Preferito</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> articoli dell'Elenco di lettura da leggere.</translation>
 <translation id="2230173723195178503">Pagina web caricata</translation>
 <translation id="2256128224215992540">Suggerimenti di ricerche e siti</translation>
 <translation id="2267753748892043616">Aggiungi account</translation>
@@ -219,6 +220,7 @@
 
 I tuoi dati vengono criptati con la tua passphrase di sincronizzazione. Inseriscila per avviare la sincronizzazione.</translation>
 <translation id="473775607612524610">Aggiorna</translation>
+<translation id="4807020197310989387">1 articolo dell'Elenco di lettura da leggere.</translation>
 <translation id="481968316161811770">Cookie, dati dei siti</translation>
 <translation id="4854345657858711387">Imposta un passcode</translation>
 <translation id="4860895144060829044">Chiama</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Servizi non personalizzati</translation>
 <translation id="7856733331829174190">Download non riuscito</translation>
 <translation id="7859704718976024901">Cronologia di navigazione</translation>
+<translation id="7918293828610777738">Il tuo elenco di lettura è disponibile offline. Per aggiungere una pagina all'elenco di lettura, tocca  <ph name="SHARE_OPENING_ICON" />  quindi <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Esporta password...</translation>
 <translation id="7947953824732555851">Accetta e accedi</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Chiudi tutte le schede</translation>
 <translation id="8114753159095730575">È possibile il download dei file. Le opzioni sono disponibili nella parte inferiore della schermata.</translation>
 <translation id="8160722851663543621">Invia al tuo motore di ricerca predefinito le ricerche dalla barra degli indirizzi e dalla casella di ricerca, nonché alcuni cookie</translation>
+<translation id="8178325540017397816">Gli elementi selezionati verranno rimossi</translation>
 <translation id="8205564605687841303">Annulla</translation>
 <translation id="8225985093977202398">Immagini e file memorizzati nella cache</translation>
 <translation id="8261506727792406068">Elimina</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
index 146cd9a8..01755b4 100644
--- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -38,7 +38,7 @@
 <translation id="152234381334907219">פריטים שאף פעם לא נשמרו</translation>
 <translation id="1532451416480227577">‏הצגת כתובות וכרטיסי אשראי מ-Google Pay</translation>
 <translation id="1540800554400757039">כתובת, שורה 1</translation>
-<translation id="1545749641540134597">‏סרוק קוד QR</translation>
+<translation id="1545749641540134597">‏סריקת קוד QR</translation>
 <translation id="1580783302095112590">הדואר נשלח.</translation>
 <translation id="1582732959743469162">הפעולה תפסיק את ההורדה הנוכחית.</translation>
 <translation id="1605658421715042784">העתקת התמונה</translation>
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">פעילות ואינטראקציות</translation>
 <translation id="213900355088104901">כדי לגלוש באופן פרטי יש לפתוח כרטיסיית גלישה בסתר</translation>
 <translation id="2149973817440762519">ערוך סימניות</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> מאמרים שלא נקראו ברשימת הקריאה.</translation>
 <translation id="2230173723195178503">דף האינטרנט נטען</translation>
 <translation id="2256128224215992540">הצעות למונחי חיפוש ולאתרים</translation>
 <translation id="2267753748892043616">הוסף חשבון</translation>
@@ -219,6 +220,7 @@
 
 הנתונים שלך מוצפנים באמצעות ביטוי הסיסמה לסינכרון. הזן אותו כדי להתחיל בסינכרון.</translation>
 <translation id="473775607612524610">עדכן</translation>
+<translation id="4807020197310989387">מאמר אחד שלא נקרא ברשימת הקריאה.</translation>
 <translation id="481968316161811770">‏קובצי cookie, נתוני אתרים</translation>
 <translation id="4854345657858711387">עליך להגדיר קוד גישה</translation>
 <translation id="4860895144060829044">התקשר</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">שירותים ללא התאמה אישית</translation>
 <translation id="7856733331829174190">ההורדה נכשלה</translation>
 <translation id="7859704718976024901">היסטוריית הגלישה</translation>
+<translation id="7918293828610777738">אפשר לגשת לרשימת הקריאה במצב לא מקוון. כדי להוסיף דף לרשימת הקריאה צריך להקיש על <ph name="SHARE_OPENING_ICON" /> ועל <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ייצוא סיסמאות...</translation>
 <translation id="7947953824732555851">קבל והיכנס</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">סגור את כל הכרטיסיות</translation>
 <translation id="8114753159095730575">יש קובץ זמין להורדה. האפשרויות זמינות בחלק התחתון של המסך.</translation>
 <translation id="8160722851663543621">‏שליחת חיפושים משורת כתובת האתר ותיבת החיפוש אל מנוע החיפוש שהגדרת כברירת מחדל, יחד עם קובצי cookie מסוימים</translation>
+<translation id="8178325540017397816">הפריטים שבחרת יוסרו</translation>
 <translation id="8205564605687841303">בטל</translation>
 <translation id="8225985093977202398">תמונות וקבצים במטמון</translation>
 <translation id="8261506727792406068">מחיקה</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
index 9a198c35..291cfd6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">アクティビティと操作</translation>
 <translation id="213900355088104901">シークレット モードで閲覧するにはシークレット タブを開きます</translation>
 <translation id="2149973817440762519">ブックマークを編集</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> 件のリーディング リストの記事が未読です。</translation>
 <translation id="2230173723195178503">ウェブページを読み込みました</translation>
 <translation id="2256128224215992540">検索とサイトの候補を表示</translation>
 <translation id="2267753748892043616">アカウントを追加</translation>
@@ -219,6 +220,7 @@
 
 データは同期パスフレーズで暗号化されます。同期を開始するには、同期パスフレーズを入力してください。</translation>
 <translation id="473775607612524610">アップデート</translation>
+<translation id="4807020197310989387">1 件のリーディング リストの記事が未読です。</translation>
 <translation id="481968316161811770">Cookie、サイトデータ</translation>
 <translation id="4854345657858711387">パスコードの設定</translation>
 <translation id="4860895144060829044">通話</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">カスタマイズされないサービス</translation>
 <translation id="7856733331829174190">ダウンロードできませんでした</translation>
 <translation id="7859704718976024901">閲覧履歴</translation>
+<translation id="7918293828610777738">リーディング リストをオフラインで利用できます。リーディング リストにページを追加するには、<ph name="SHARE_OPENING_ICON" /> &gt; [<ph name="READ_LATER_TEXT" />] をタップします。</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">パスワードをエクスポート...</translation>
 <translation id="7947953824732555851">同意してログイン</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">すべてのタブを閉じる</translation>
 <translation id="8114753159095730575">ファイルのダウンロードが利用可能です。画面の下の方にオプションがあります。</translation>
 <translation id="8160722851663543621">アドレスバーや検索ボックスに入力した検索語句と Cookie を既定の検索エンジンに送信します</translation>
+<translation id="8178325540017397816">選択したアイテムが削除されます</translation>
 <translation id="8205564605687841303">キャンセル</translation>
 <translation id="8225985093977202398">キャッシュされた画像とファイル</translation>
 <translation id="8261506727792406068">削除</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kn.xtb b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
index 685e2fa7..89761cd1 100644
--- a/ios/chrome/app/strings/resources/ios_strings_kn.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_kn.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">ಚಟುವಟಿಕೆ ಮತ್ತು ಸಂವಹನಗಳು</translation>
 <translation id="213900355088104901">ಖಾಸಗಿಯಾಗಿ ಬ್ರೌಸ್ ಮಾಡಲು, ಅದೃಶ್ಯ ಟ್ಯಾಬ್‌ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
 <translation id="2149973817440762519">ಬುಕ್‌ಮಾರ್ಕ್ ಎಡಿಟ್ ಮಾಡಿ</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> ಓದದಿರುವ ಓದುವ ಪಟ್ಟಿ ಲೇಖನಗಳು.</translation>
 <translation id="2230173723195178503">ವೆಬ್‌ಪುಟ ಲೋಡ್ ಮಾಡಲಾಗಿದೆ</translation>
 <translation id="2256128224215992540">ಹುಡುಕಾಟ ಹಾಗೂ ಸೈಟ್ ಕುರಿತಾದ ಸಲಹೆಗಳು</translation>
 <translation id="2267753748892043616">ಖಾತೆ ಸೇರಿಸಿ</translation>
@@ -219,6 +220,7 @@
 
 ನಿಮ್ಮ ಡೇಟಾವನ್ನು ನಿಮ್ಮ ಸಿಂಕ್ ಪಾಸ್‌ಫ್ರೇಸ್‌ನೊಂದಿಗೆ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಲು ಅದನ್ನು ನಮೂದಿಸಿ.</translation>
 <translation id="473775607612524610">ಅಪ್‌ಡೇಟ್‌‌</translation>
+<translation id="4807020197310989387">1 ಓದದಿರುವ ಓದುವ ಪಟ್ಟಿ ಲೇಖನ.</translation>
 <translation id="481968316161811770">ಕುಕೀಗಳು, ಸೈಟ್‌ ಡೇಟಾ</translation>
 <translation id="4854345657858711387">ಪಾಸ್‌ಕೋಡ್‌ ಅನ್ನು ಹೊಂದಿಸಿ</translation>
 <translation id="4860895144060829044">ಕರೆ</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">ವೈಯಕ್ತಿಕವಲ್ಲದ ಸೇವೆಗಳು</translation>
 <translation id="7856733331829174190">ಡೌನ್‌ಲೋಡ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation>
 <translation id="7859704718976024901">ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ</translation>
+<translation id="7918293828610777738">ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯು ಆಫ್‌ಲೈನ್‌ನಲ್ಲಿ ಲಭ್ಯವಿದೆ. ನಿಮ್ಮ ಓದುವ ಪಟ್ಟಿಯಲ್ಲಿ ಪುಟವನ್ನು ಸೇರಿಸಲು, <ph name="SHARE_OPENING_ICON" /> ಟ್ಯಾಪ್ ಮಾಡಿ ನಂತರ <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಎಕ್ಸ್‌ಪೋರ್ಟ್ ಮಾಡಿ...</translation>
 <translation id="7947953824732555851">ಸಮ್ಮತಿಸಿ ಮತ್ತು ಸೈನ್‌ ಇನ್‌ ಮಾಡಿ</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">ಎಲ್ಲ ಟ್ಯಾಬ್‌ಗಳನ್ನು ಮುಚ್ಚಿ</translation>
 <translation id="8114753159095730575">ಫೈಲ್‌ ಅನ್ನು ಡೌನ್‌ಲೋಡ್‌ ಮಾಡುವ ಸೌಲಭ್ಯ ಲಭ್ಯವಿದೆ. ಪರದೆಯ ಕೆಳಗಿನ ಭಾಗದಲ್ಲಿ ಆಯ್ಕೆಗಳು ಲಭ್ಯವಿವೆ.</translation>
 <translation id="8160722851663543621">ವಿಳಾಸ ಪಟ್ಟಿ ಮತ್ತು ಹುಡುಕಾಟ ಬಾಕ್ಸ್‌ನಿಂದ ಹುಡುಕಾಟಗಳನ್ನು ಹಾಗೂ ಕೆಲವು ಕುಕೀಗಳನ್ನು ನಿಮ್ಮ ಡಿಫಾಲ್ಟ್ ಹುಡುಕಾಟದ ಎಂಜಿನ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation>
+<translation id="8178325540017397816">ನೀವು ಆಯ್ಕೆ ಮಾಡಿದ ಐಟಂಗಳನ್ನು ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation>
 <translation id="8205564605687841303">ರದ್ದುಮಾಡಿ</translation>
 <translation id="8225985093977202398">ಸಂಗ್ರಹಿಸಲಾಗಿರುವ ಚಿತ್ರಗಳು ಮತ್ತು ಫೈಲ್‌ಗಳು</translation>
 <translation id="8261506727792406068">ಅಳಿಸಿ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lt.xtb b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
index e437aea..5f1b02e 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lt.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lt.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Veikla ir sąveikos</translation>
 <translation id="213900355088104901">Kad galėtumėte naršyti privačiai, atidarykite inkognito skirtuką</translation>
 <translation id="2149973817440762519">Redaguoti žymes</translation>
+<translation id="2207590065820824892">Neskaitytų straipsnių skaitymo sąraše: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">TInklalapis įkeltas</translation>
 <translation id="2256128224215992540">Paieškos / svetain. pasiūl.</translation>
 <translation id="2267753748892043616">Pridėti paskyrą</translation>
@@ -219,6 +220,7 @@
 
 Duomenys užšifruoti naudojant slaptafrazę. Įveskite ją, kad pradėtumėte sinchronizuoti.</translation>
 <translation id="473775607612524610">Atnaujinti</translation>
+<translation id="4807020197310989387">1 neskaitytas straipsnis skaitymo sąraše.</translation>
 <translation id="481968316161811770">Slapuk., svet. duom.</translation>
 <translation id="4854345657858711387">Slaptažodžio nustatymas</translation>
 <translation id="4860895144060829044">Skambinti</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Nesuasmenintos paslaugos</translation>
 <translation id="7856733331829174190">Nepavyko atsisiųsti</translation>
 <translation id="7859704718976024901">Naršymo istorija</translation>
+<translation id="7918293828610777738">Skaitymo sąrašas pasiekiamas neprisijungus. Kad pridėtumėte puslapį prie skaitymo sąrašo, palieskite <ph name="SHARE_OPENING_ICON" />, tada „<ph name="READ_LATER_TEXT" />“.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportuoti slaptažodžius...</translation>
 <translation id="7947953824732555851">Sutikti ir prisij.</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Uždaryti visus skirtukus</translation>
 <translation id="8114753159095730575">Galima atsisiųsti failą. Parinktys pasiekiamos netoli ekrano apačios.</translation>
 <translation id="8160722851663543621">Numatytajam paieškos varikliui siunčiamos į adreso juostą ir paieškos laukelį įvestos paieškos ir kai kurie slapukai</translation>
+<translation id="8178325540017397816">Pasirinkti elementai bus pašalinti</translation>
 <translation id="8205564605687841303">Atšaukti</translation>
 <translation id="8225985093977202398">Talp. vaiz. ir fail.</translation>
 <translation id="8261506727792406068">Ištrinti</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_lv.xtb b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
index 69a5be3..c8f60b2 100644
--- a/ios/chrome/app/strings/resources/ios_strings_lv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_lv.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Darbības un mijiedarbības</translation>
 <translation id="213900355088104901">Lai pārlūkotu tīmekli privāti, atveriet inkognito režīma cilni.</translation>
 <translation id="2149973817440762519">Rediģēt grāmatzīmes</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> nelasīts(-i) raksts(-i), kas pievienots(-i) lasīšanas sarakstam.</translation>
 <translation id="2230173723195178503">Tīmekļa lapa ielādēta</translation>
 <translation id="2256128224215992540">Meklēšanas un vietņu ieteikumi</translation>
 <translation id="2267753748892043616">Pievienot kontu</translation>
@@ -219,6 +220,7 @@
 
 Jūsu dati ir šifrēti, izmantojot jūsu sinhronizācijas ieejas frāzi. Lai sāktu sinhronizēšanu, ievadiet ieejas frāzi.</translation>
 <translation id="473775607612524610">Atjaunināt</translation>
+<translation id="4807020197310989387">1 nelasīts raksts, kas pievienots lasīšanas sarakstam.</translation>
 <translation id="481968316161811770">Sīkfaili, vietņu dati</translation>
 <translation id="4854345657858711387">Piekļuves koda iestatīšana</translation>
 <translation id="4860895144060829044">Zvanīt</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Nepersonalizētie pakalpojumi</translation>
 <translation id="7856733331829174190">Lejupielāde neizdevās</translation>
 <translation id="7859704718976024901">Pārlūkošanas vēsture</translation>
+<translation id="7918293828610777738">Jūsu lasīšanas saraksts ir pieejams bezsaistē. Lai pievienotu lapu lasīšanas sarakstam, pieskarieties vienumam <ph name="SHARE_OPENING_ICON" />, pēc tam — <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportēt paroles...</translation>
 <translation id="7947953824732555851">Pieņemt un pierakst.</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Aizvērt visas cilnes</translation>
 <translation id="8114753159095730575">Pieejama failu lejupielāde. Pieejamās opcijas redzamas ekrāna apakšdaļā.</translation>
 <translation id="8160722851663543621">Nosūta meklēšanas vaicājumus no adreses joslas un meklēšanas lodziņa, kā arī dažus sīkfailus uz jūsu noklusējuma meklētājprogrammu</translation>
+<translation id="8178325540017397816">Jūsu atlasītie vienumi tiks noņemti</translation>
 <translation id="8205564605687841303">Atcelt</translation>
 <translation id="8225985093977202398">Kešatmiņa</translation>
 <translation id="8261506727792406068">Dzēst</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ml.xtb b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
index e6e34c3..7df7337 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ml.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ml.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">പ്രവർത്തനവും ആശയവിനിമയങ്ങളും</translation>
 <translation id="213900355088104901">സ്വകാര്യമായി ബ്രൗസ് ചെയ്യാൻ, ഒരു അദൃശ്യ ടാബ് തുറക്കുക</translation>
 <translation id="2149973817440762519">ബുക്മാര്‍ക്ക് എഡിറ്റ് ചെയ്യുക</translation>
+<translation id="2207590065820824892">വായനാ ലിസ്‌റ്റിലുള്ള, വായിക്കാത്ത <ph name="UNREAD_COUNT" /> ലേഖനങ്ങൾ.</translation>
 <translation id="2230173723195178503">വെബ്‌പേജ് ലോഡുചെയ്‌തു</translation>
 <translation id="2256128224215992540">തിരയലും സൈറ്റ് നിർദ്ദേശങ്ങളും</translation>
 <translation id="2267753748892043616">അക്കൗണ്ട് ചേർക്കുക</translation>
@@ -219,6 +220,7 @@
 
 സമന്വയ പാസ്‌ഫ്രെയ്‌സ് ഉപയോഗിച്ച് നിങ്ങളുടെ ഡാറ്റ എൻ‌ക്രിപ്‌റ്റുചെയ്‌തു. സമന്വയം ആരംഭിക്കാൻ ഇത് നൽകുക.</translation>
 <translation id="473775607612524610">അപ്ഡേറ്റുചെയ്യുക</translation>
+<translation id="4807020197310989387">വായനാ ലിസ്‌റ്റിലുള്ള, വായിക്കാത്ത ഒരു ലേഖനം.</translation>
 <translation id="481968316161811770">കുക്കികളും സൈറ്റ് ഡാറ്റയും</translation>
 <translation id="4854345657858711387">പാസ്‌കോഡ് സജ്ജമാക്കുക</translation>
 <translation id="4860895144060829044">വിളിക്കുക</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">വ്യക്തിപരമല്ലാത്ത സേവനങ്ങൾ</translation>
 <translation id="7856733331829174190">ഡൗൺലോഡ് ചെയ്യാനായില്ല</translation>
 <translation id="7859704718976024901">ബ്രൗസിംഗ് ചരിത്രം</translation>
+<translation id="7918293828610777738">നിങ്ങളുടെ വായനാ ലിസ്‌റ്റ് ഓഫ്‌ലൈനായി ലഭ്യമാണ്. വായനാ ലിസ്‌റ്റിലേക്ക് ഒരു പേജ് ചേർക്കാൻ, ആദ്യം <ph name="SHARE_OPENING_ICON" />, തുടർന്ന് <ph name="READ_LATER_TEXT" /> എന്നിവ ടാപ്പ് ചെയ്യുക.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">പാസ്‌വേഡുകൾ എക്‌സ്‌പോർട്ട് ചെയ്യുക...</translation>
 <translation id="7947953824732555851">അംഗീകരിച്ച് സൈൻ ഇൻ ചെയ്യുക</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">എല്ലാ ടാബുകളും അടയ്‌ക്കുക</translation>
 <translation id="8114753159095730575">ഫയൽ ഡൗൺലോഡ് ചെയ്യൽ ലഭ്യമാണ്. സ്ക്രീനിന്റെ ചുവടെ ഓപ്ഷനുകളുണ്ട്.</translation>
 <translation id="8160722851663543621">നിങ്ങളുടെ ഡിഫോൾട്ട് തിരയൽ എഞ്ചിനിലേക്ക് വിലാസ ബാറിൽ നിന്നും തിരയൽ ബോക്‌സിൽ നിന്നുമുള്ള തിരയലുകളും കുറച്ച് കുക്കികളും അയയ്ക്കുന്നു</translation>
+<translation id="8178325540017397816">നിങ്ങൾ തിരഞ്ഞെടുത്ത ഇനങ്ങൾ നീക്കം ചെയ്യപ്പെടും</translation>
 <translation id="8205564605687841303">റദ്ദാക്കുക</translation>
 <translation id="8225985093977202398">കാഷെ ചെയ്‌ത ചിത്രങ്ങളും ഫയലുകളും</translation>
 <translation id="8261506727792406068">ഇല്ലാതാക്കുക</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 9aa0d21..4939a73 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">अॅक्टिव्हिटी आणि संवाद</translation>
 <translation id="213900355088104901">खाजगीरीत्या ब्राउझ करण्यासाठी, एक गुप्त टॅब उघडा</translation>
 <translation id="2149973817440762519">बुकमार्क संपादित करा</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> न वाचलेले वाचन सूची लेख.</translation>
 <translation id="2230173723195178503">वेबपृष्ठ लोड केले</translation>
 <translation id="2256128224215992540">शोध आणि साइट सूचना</translation>
 <translation id="2267753748892043616">खाते जोडा</translation>
@@ -220,6 +221,7 @@
 
 आपला डेटा आपल्या संकालित वाक्यांशासह कूटबद्ध केला आहे. संकालन सुरू करण्यासाठी तो एंटर करा.</translation>
 <translation id="473775607612524610">अपडेट करा</translation>
+<translation id="4807020197310989387">एक न वाचलेला वाचन सूची लेख.</translation>
 <translation id="481968316161811770">कुकीज, साइट डेटा</translation>
 <translation id="4854345657858711387">पासकोड सेट करा</translation>
 <translation id="4860895144060829044">कॉल करा</translation>
@@ -395,6 +397,7 @@
 <translation id="7830720446622801252">पर्सनलाइझ न केलेल्या सेवा</translation>
 <translation id="7856733331829174190">डाउनलोड करता आले नाही</translation>
 <translation id="7859704718976024901">ब्राउझिंग इतिहास</translation>
+<translation id="7918293828610777738">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. तुमच्या वाचन सूचीमध्‍ये पेज जोडण्‍यासाठी, <ph name="SHARE_OPENING_ICON" /> त्यानंतर <ph name="READ_LATER_TEXT" /> वर टॅप करा.</translation>
 <translation id="7938254975914653459">फेसटाइम</translation>
 <translation id="7939128259257418052">पासवर्ड निर्यात करा...</translation>
 <translation id="7947953824732555851">स्वीकार करा आणि साइन इन करा</translation>
@@ -412,6 +415,7 @@
 <translation id="8080028325999236607">सर्व टॅब बंद करा</translation>
 <translation id="8114753159095730575">फाइल डाउनलोड उपलब्ध आहे. स्क्रीनच्या तळाशी पर्याय उपलब्ध आहेत.</translation>
 <translation id="8160722851663543621">तुमच्या डीफॉल्ट शोध इंजिनवर अॅड्रेस बार आणि सर्च बॉक्स आणि काही कुकींमधून शोध पाठवते</translation>
+<translation id="8178325540017397816">तुम्ही निवडलेले आयटम काढून टाकले जातील</translation>
 <translation id="8205564605687841303">रद्द करा</translation>
 <translation id="8225985093977202398">कॅश   इमेज आणि फायली</translation>
 <translation id="8261506727792406068">हटवा</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
index 3fd2986..bfe95b6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktiviti dan interaksi</translation>
 <translation id="213900355088104901">Untuk menyemak imbas secara tertutup, buka tab inkognito</translation>
 <translation id="2149973817440762519">Edit Penanda Halaman</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> artikel Senarai Bacaan yang belum dibaca.</translation>
 <translation id="2230173723195178503">Halaman web dimuatkan</translation>
 <translation id="2256128224215992540">Cadangan Carian dan Tapak</translation>
 <translation id="2267753748892043616">Tambahkan Akaun</translation>
@@ -219,6 +220,7 @@
 
 Data anda disulitkan dengan ungkapan laluan segerak anda. Masukkannya untuk memulakan penyegerakan.</translation>
 <translation id="473775607612524610">Kemas kini</translation>
+<translation id="4807020197310989387">1 artikel Senarai Bacaan yang belum dibaca.</translation>
 <translation id="481968316161811770">Kuki, Data Tapak</translation>
 <translation id="4854345657858711387">Tetapkan Kod Laluan</translation>
 <translation id="4860895144060829044">Hubungi</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Perkhidmatan Tidak Diperibadikan</translation>
 <translation id="7856733331829174190">Tidak Dapat Memuat Turun</translation>
 <translation id="7859704718976024901">Sejarah Penyemakan Imbas</translation>
+<translation id="7918293828610777738">Senarai bacaan anda tersedia di luar talian. Untuk menambahkan halaman pada senarai bacaan anda, ketik  <ph name="SHARE_OPENING_ICON" />  kemudian <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksport Kata Laluan...</translation>
 <translation id="7947953824732555851">Terima dan log masuk</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Tutup Semua Tab</translation>
 <translation id="8114753159095730575">Muat turun fail tersedia. Pilihan tersedia di bahagian bawah skrin.</translation>
 <translation id="8160722851663543621">Menghantar carian daripada bar alamat dan kotak carian serta beberapa kuki ke enjin carian lalai anda</translation>
+<translation id="8178325540017397816">Item yang anda pilih akan dialih keluar</translation>
 <translation id="8205564605687841303">Batal</translation>
 <translation id="8225985093977202398">Imej dan Fail Dicache</translation>
 <translation id="8261506727792406068">Padam</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_nl.xtb b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
index fd7ef02..f9ef7ddc 100644
--- a/ios/chrome/app/strings/resources/ios_strings_nl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_nl.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Activiteit en interacties</translation>
 <translation id="213900355088104901">Open een incognitotabblad om privé te browsen</translation>
 <translation id="2149973817440762519">Bladwijzer bewerken</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> ongelezen artikelen op de leeslijst.</translation>
 <translation id="2230173723195178503">Webpagina geladen</translation>
 <translation id="2256128224215992540">Zoek- en sitesuggesties</translation>
 <translation id="2267753748892043616">Account toevoegen</translation>
@@ -219,6 +220,7 @@
 
 Je gegevens zijn versleuteld met je wachtwoordzin voor synchronisatie. Geef deze op om de synchronisatie te starten.</translation>
 <translation id="473775607612524610">Updaten</translation>
+<translation id="4807020197310989387">1 ongelezen artikel op de leeslijst.</translation>
 <translation id="481968316161811770">Cookies en sitegegevens</translation>
 <translation id="4854345657858711387">Een toegangscode instellen</translation>
 <translation id="4860895144060829044">Bellen</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Niet-gepersonaliseerde services</translation>
 <translation id="7856733331829174190">Kan niet downloaden</translation>
 <translation id="7859704718976024901">Browsegeschiedenis</translation>
+<translation id="7918293828610777738">Je leeslijst is offline beschikbaar. Tik op <ph name="SHARE_OPENING_ICON" /> en vervolgens op <ph name="READ_LATER_TEXT" /> om een pagina toe te voegen aan je leeslijst.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Wachtwoorden exporteren...</translation>
 <translation id="7947953824732555851">Accepteren en inloggen</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Alle tabbladen sluiten</translation>
 <translation id="8114753159095730575">Bestand downloaden is beschikbaar. Opties beschikbaar onderaan het scherm.</translation>
 <translation id="8160722851663543621">Hiermee worden de zoekopdrachten in de adresbalk en in het zoekvak en bepaalde cookies verzonden naar je standaard zoekmachine</translation>
+<translation id="8178325540017397816">De geselecteerde items worden verwijderd</translation>
 <translation id="8205564605687841303">Annuleren</translation>
 <translation id="8225985093977202398">Afbeeldingen en bestanden in chachegeheugen</translation>
 <translation id="8261506727792406068">Verwijderen</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb
index 5325258b..8e58408 100644
--- a/ios/chrome/app/strings/resources/ios_strings_no.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -89,7 +89,7 @@
 <translation id="2386793615875593361">1 er valgt</translation>
 <translation id="2435457462613246316">Vis passord</translation>
 <translation id="2481538920734869610">LEGG TIL KONTO</translation>
-<translation id="2523184218357549926">Sender nettadresser til sidene du besøker i Google</translation>
+<translation id="2523184218357549926">Sender Google nettadressene til sider du besøker</translation>
 <translation id="2523363575747517183">Dette nettstedet prøver gjentatte ganger å åpne en annen app.</translation>
 <translation id="2529021024822217800">Åpne alle</translation>
 <translation id="2572712655377361602">En enhetsinnstilling har blokkert tilgangen til bildene dine</translation>
@@ -224,7 +224,7 @@
 <translation id="4860895144060829044">Ring</translation>
 <translation id="4875622588773761625">Vil du at <ph name="PASSWORD_MANAGER_BRAND" /> skal oppdatere passordet for dette nettstedet?</translation>
 <translation id="4881695831933465202">Åpne</translation>
-<translation id="4882831918239250449">Kontrollér hvordan Søk, annonser og mer blir personlig tilpasset din logg</translation>
+<translation id="4882831918239250449">Kontrollér hvordan nettleserloggen din brukes til personlig tilpasning av søk, annonser med mer</translation>
 <translation id="4904877109095351937">Merk som lest</translation>
 <translation id="4930268273022498155">Slett eksisterende data. Du kan hente ut dataene ved å bytte tilbake til <ph name="USER_EMAIL1" />.</translation>
 <translation id="4941089862236492464">Det oppsto et problem under delingen av artikkelen.</translation>
@@ -348,7 +348,7 @@
 <translation id="6979158407327259162">Google Disk</translation>
 <translation id="7004499039102548441">Nylige faner</translation>
 <translation id="7006788746334555276">Innholdsinnstillinger</translation>
-<translation id="7017968314960951695">Bruker innhold fra nettsteder du besøker, nettleseraktivitet og andre interaksjoner for personligsering.</translation>
+<translation id="7017968314960951695">Bruker innhold fra nettsteder du besøker, nettleseraktivitet og andre interaksjoner for å gi ting et personlig preg.</translation>
 <translation id="7029809446516969842">Passord</translation>
 <translation id="7031882061095297553">Synkroniser med</translation>
 <translation id="7053983685419859001">Blokkér</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
index b89e569..e37a907 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktywność i interakcje</translation>
 <translation id="213900355088104901">Aby przeglądać prywatnie, otwórz kartę incognito</translation>
 <translation id="2149973817440762519">Edytuj zakładkę</translation>
+<translation id="2207590065820824892">Nieprzeczytane artykuły na liście Do przeczytania: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Wczytano stronę internetową</translation>
 <translation id="2256128224215992540">Podpowiadanie stron internetowych i wyszukiwanych słów</translation>
 <translation id="2267753748892043616">Dodaj konto</translation>
@@ -219,6 +220,7 @@
 
 Dane zostały zaszyfrowane z użyciem Twojego hasła synchronizacji. Wpisz je, by rozpocząć synchronizację.</translation>
 <translation id="473775607612524610">Aktualizuj</translation>
+<translation id="4807020197310989387">1 nieprzeczytany artykuł na liście Do przeczytania.</translation>
 <translation id="481968316161811770">Cookie i dane stron</translation>
 <translation id="4854345657858711387">Ustaw kod dostępu</translation>
 <translation id="4860895144060829044">Zadzwoń</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Usługi niespersonalizowane</translation>
 <translation id="7856733331829174190">Nie udało się pobrać pliku</translation>
 <translation id="7859704718976024901">Historia przeglądania</translation>
+<translation id="7918293828610777738">Twoja lista Do przeczytania jest dostępna offline. Aby dodać do niej stronę, kliknij <ph name="SHARE_OPENING_ICON" />, a następnie <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Eksportuj hasła…</translation>
 <translation id="7947953824732555851">Zaakceptuj i zaloguj się</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Zamknij wszystkie karty</translation>
 <translation id="8114753159095730575">Pobrany plik jest dostępny. Opcje są dostępne u dołu ekranu.</translation>
 <translation id="8160722851663543621">Zapytania wpisane na pasku adresu i w polu wyszukiwania oraz niektóre pliki cookie zostaną wysłane do domyślnej wyszukiwarki</translation>
+<translation id="8178325540017397816">Wybrane elementy zostaną usunięte</translation>
 <translation id="8205564605687841303">Anuluj</translation>
 <translation id="8225985093977202398">Obrazy i pliki w pamięci podręcznej</translation>
 <translation id="8261506727792406068">Usuń</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 34c2993..db53ae5 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -77,6 +77,7 @@
 <translation id="2120297377148151361">Atividade e interações</translation>
 <translation id="213900355088104901">Para navegar com privacidade, abra uma guia anônima.</translation>
 <translation id="2149973817440762519">Editar favoritos</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> artigos não lidos na lista de leitura.</translation>
 <translation id="2230173723195178503">Página da Web carregada</translation>
 <translation id="2256128224215992540">Sugestões de pesquisa e sites</translation>
 <translation id="2267753748892043616">Adicionar conta</translation>
@@ -220,6 +221,7 @@
 
 Seus dados são criptografados com sua senha longa de sincronização. Informe-a para começar a sincronização.</translation>
 <translation id="473775607612524610">Atualizar</translation>
+<translation id="4807020197310989387">1 artigo não lido na lista de leitura.</translation>
 <translation id="481968316161811770">Dados do site e arquivos "cookies"</translation>
 <translation id="4854345657858711387">Defina uma senha</translation>
 <translation id="4860895144060829044">Ligar</translation>
@@ -395,6 +397,7 @@
 <translation id="7830720446622801252">Serviços não personalizados</translation>
 <translation id="7856733331829174190">Falha no download</translation>
 <translation id="7859704718976024901">Histórico de navegação</translation>
+<translation id="7918293828610777738">Sua lista de leitura está disponível off-line. Para adicionar uma página à lista, toque em <ph name="SHARE_OPENING_ICON" /> e depois em <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar senhas…</translation>
 <translation id="7947953824732555851">Aceitar/fazer login</translation>
@@ -412,6 +415,7 @@
 <translation id="8080028325999236607">Fechar todas as guias</translation>
 <translation id="8114753159095730575">O download de arquivo está disponível. Opções disponíveis perto da parte inferior da tela.</translation>
 <translation id="8160722851663543621">Envia pesquisas da barra de endereço e da caixa de pesquisa, além de alguns cookies, para seu mecanismo de pesquisa padrão</translation>
+<translation id="8178325540017397816">Os itens selecionados serão removidos</translation>
 <translation id="8205564605687841303">Cancelar</translation>
 <translation id="8225985093977202398">Imagens e arquivos armazenados em cache</translation>
 <translation id="8261506727792406068">Excluir</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
index aac8234..125fcf9 100644
--- a/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_pt-PT.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Atividade e interações</translation>
 <translation id="213900355088104901">Para navegar em privado, abra um separador de navegação anónima.</translation>
 <translation id="2149973817440762519">Editar marcador</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> artigos não lidos na Lista de leitura.</translation>
 <translation id="2230173723195178503">Página Web carregada</translation>
 <translation id="2256128224215992540">Sugestões de pesquisa e de sites</translation>
 <translation id="2267753748892043616">Adicionar conta</translation>
@@ -219,6 +220,7 @@
 
 Os dados estão encriptados com a sua frase de acesso de sincronização. Introduza-a para iniciar a sincronização.</translation>
 <translation id="473775607612524610">Actualizar</translation>
+<translation id="4807020197310989387">1 artigo não lido na Lista de leitura.</translation>
 <translation id="481968316161811770">Cookies, dados de sites</translation>
 <translation id="4854345657858711387">Definir um código secreto</translation>
 <translation id="4860895144060829044">Telefonar</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Serviços não personalizados</translation>
 <translation id="7856733331829174190">Impossível transferir</translation>
 <translation id="7859704718976024901">Histórico de navegação</translation>
+<translation id="7918293828610777738">A sua lista de leitura está disponível offline. Para adicionar uma página à mesma, toque em <ph name="SHARE_OPENING_ICON" /> e, em seguida, em <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportar palavras-passe...</translation>
 <translation id="7947953824732555851">Aceitar e in. sessão</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Fechar Todos os Separadores</translation>
 <translation id="8114753159095730575">A transferência de ficheiros está disponível. Opções disponíveis junto à parte inferior do ecrã.</translation>
 <translation id="8160722851663543621">Envia pesquisas da barra de endereço e da caixa de pesquisa, bem como alguns cookies, para o motor de pesquisa predefinido.</translation>
+<translation id="8178325540017397816">Os itens selecionados vão ser removidos</translation>
 <translation id="8205564605687841303">Cancelar</translation>
 <translation id="8225985093977202398">Imagens e ficheiros em cache</translation>
 <translation id="8261506727792406068">Eliminar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ro.xtb b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
index 4bb5b00..590e01b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_ro.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_ro.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Activitate și interacțiuni</translation>
 <translation id="213900355088104901">Pentru a naviga privat, deschide o filă incognito</translation>
 <translation id="2149973817440762519">Editați marcajul</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> articole necitite în Lista de lectură.</translation>
 <translation id="2230173723195178503">Pagina web s-a încărcat</translation>
 <translation id="2256128224215992540">Sugestii de căutare și de site-uri</translation>
 <translation id="2267753748892043616">Adaugă un cont</translation>
@@ -219,6 +220,7 @@
 
 Datele sunt criptate cu expresia de acces pentru sincronizare. Introdu-o pentru a începe sincronizarea.</translation>
 <translation id="473775607612524610">Actualizează</translation>
+<translation id="4807020197310989387">Un articol necitit în Lista de lectură.</translation>
 <translation id="481968316161811770">Cookie-urile, datele privind site-urile</translation>
 <translation id="4854345657858711387">Setează o parolă</translation>
 <translation id="4860895144060829044">Apelează</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Servicii nepersonalizate</translation>
 <translation id="7856733331829174190">Nu s-a putut descărca</translation>
 <translation id="7859704718976024901">Istoricul de navigare</translation>
+<translation id="7918293828610777738">Lista de lectură este disponibilă offline. Pentru a adăuga o pagină în lista de lectură, atinge <ph name="SHARE_OPENING_ICON" />, apoi <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportă parolele...</translation>
 <translation id="7947953824732555851">Accept și conectare</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Închide filele</translation>
 <translation id="8114753159095730575">Descărcarea fișierelor este disponibilă. Opțiunile sunt disponibile în partea de jos a ecranului.</translation>
 <translation id="8160722851663543621">Trimite căutări din bara de adrese și din caseta de căutare și anumite cookie-uri în motorul de căutare prestabilit</translation>
+<translation id="8178325540017397816">Elementele selectate vor fi eliminate</translation>
 <translation id="8205564605687841303">Anulează</translation>
 <translation id="8225985093977202398">Imaginile și fișierele memorate în cache</translation>
 <translation id="8261506727792406068">Șterge</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 87a34da..88bccd9b 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivity a interakcie</translation>
 <translation id="213900355088104901">Ak chcete prehliadať v súkromí, otvorte kartu inkognito</translation>
 <translation id="2149973817440762519">Upraviť záložku</translation>
+<translation id="2207590065820824892">Počet neprečítaných článkov v čitateľskom zozname: <ph name="UNREAD_COUNT" /></translation>
 <translation id="2230173723195178503">Načítala sa webová stránka</translation>
 <translation id="2256128224215992540">Návrhy vyhľadávania a webov</translation>
 <translation id="2267753748892043616">Pridať účet</translation>
@@ -219,6 +220,7 @@
 
 Údaje sú šifrované pomocou vlastnej prístupovej frázy synchronizácie. Keď ju zadáte, synchronizácia sa spustí.</translation>
 <translation id="473775607612524610">Aktualizovať</translation>
+<translation id="4807020197310989387">1 neprečítaný článok v čitateľskom zozname.</translation>
 <translation id="481968316161811770">Súbory cookie, údaje webu</translation>
 <translation id="4854345657858711387">Nastavenie vstupného kódu</translation>
 <translation id="4860895144060829044">Volajte</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Neprispôsobené služby</translation>
 <translation id="7856733331829174190">Sťahovanie zlyhalo</translation>
 <translation id="7859704718976024901">História prehliadania</translation>
+<translation id="7918293828610777738">Váš čitateľský zoznam je k dispozícii offline. Ak doň chcete pridať stránku, klepnite na položku <ph name="SHARE_OPENING_ICON" /> a potom na možnosť <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportovať heslá...</translation>
 <translation id="7947953824732555851">Prijať a prihl. sa</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Zavrieť všetky karty</translation>
 <translation id="8114753159095730575">Súbor je k dispozícii na stiahnutie. Možnosti sú k dispozícii v dolnej časti obrazovky.</translation>
 <translation id="8160722851663543621">Odošlú sa vyhľadávania z panela s adresou a vyhľadávacieho panela a niektoré súbory cookie do vášho predvoleného vyhľadávača</translation>
+<translation id="8178325540017397816">Vybrané položky budú odstránené</translation>
 <translation id="8205564605687841303">Zrušiť</translation>
 <translation id="8225985093977202398">Obrázky a súbory vo vyrovnávacej pamäti</translation>
 <translation id="8261506727792406068">Odstrániť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
index fce3e1ca..ce595906 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Dejavnost in interakcija</translation>
 <translation id="213900355088104901">Če želite zasebno brskati, odprite zavihek brez beleženja zgodovine</translation>
 <translation id="2149973817440762519">Uredi zaznamek</translation>
+<translation id="2207590065820824892">Št. neprebranih člankov s seznama za branje: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Spletna stran je naložena</translation>
 <translation id="2256128224215992540">Predlogi za iskanje in spletna mesta</translation>
 <translation id="2267753748892043616">Dodaj račun</translation>
@@ -217,6 +218,7 @@
 
 Podatki so šifrirani z vašim geslom za sinhronizacijo. Vnesite ga, če želite začeti sinhronizacijo.</translation>
 <translation id="473775607612524610">Posodobi</translation>
+<translation id="4807020197310989387">1 neprebran članek s seznama za branje.</translation>
 <translation id="481968316161811770">Cookies, Site Data</translation>
 <translation id="4854345657858711387">Nastavitev gesla</translation>
 <translation id="4860895144060829044">Pokličite</translation>
@@ -392,6 +394,7 @@
 <translation id="7830720446622801252">Neprilagojene storitve</translation>
 <translation id="7856733331829174190">Prenos ni uspel</translation>
 <translation id="7859704718976024901">Zgodovina brskanja</translation>
+<translation id="7918293828610777738">Bralni seznam je na voljo brez povezave. Če želite dodati stran na bralni seznam, se dotaknite <ph name="SHARE_OPENING_ICON" />, nato pa <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Izvozi gesla ...</translation>
 <translation id="7947953824732555851">Sprejem in prijava</translation>
@@ -409,6 +412,7 @@
 <translation id="8080028325999236607">Zapri vse zavihke</translation>
 <translation id="8114753159095730575">Prenos datotek je na voljo. Možnosti so na voljo pri dnu zaslona.</translation>
 <translation id="8160722851663543621">Pošilja iskanja iz naslovne vrstice in iskalnega polja ter nekatere piškotke privzetemu iskalniku</translation>
+<translation id="8178325540017397816">Izbrani elementi bodo odstranjeni</translation>
 <translation id="8205564605687841303">Prekliči</translation>
 <translation id="8225985093977202398">Cached Images and Files</translation>
 <translation id="8261506727792406068">Izbriši</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sr.xtb b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
index f77de42..d0223cb 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sr.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Активности и интеракције</translation>
 <translation id="213900355088104901">Да бисте прегледали приватно, отворите картицу без архивирања</translation>
 <translation id="2149973817440762519">Измените обележивач</translation>
+<translation id="2207590065820824892">Непрочитани чланци на листи за читање: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Веб-страница је учитана</translation>
 <translation id="2256128224215992540">Предлози за претрагу и сајтове</translation>
 <translation id="2267753748892043616">Додај налог</translation>
@@ -219,6 +220,7 @@
 
 Подаци се шифрују помоћу приступне фразе за синхронизацију. Унесите је да бисте започели синхронизацију.</translation>
 <translation id="473775607612524610">Ажурирај</translation>
+<translation id="4807020197310989387">1 непрочитан чланак на листи за читање.</translation>
 <translation id="481968316161811770">Колачићи, подаци о сајтовима</translation>
 <translation id="4854345657858711387">Подесите шифру</translation>
 <translation id="4860895144060829044">Позовите</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Услуге које нису персонализоване</translation>
 <translation id="7856733331829174190">Преузимање није успело</translation>
 <translation id="7859704718976024901">Историја прегледања</translation>
+<translation id="7918293828610777738">Листа за читање је доступна офлајн. Да бисте додали страницу на листу за читање, додирните <ph name="SHARE_OPENING_ICON" />, па <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Извези лозинке…</translation>
 <translation id="7947953824732555851">Прихвати и пријави ме</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Затвори све картице</translation>
 <translation id="8114753159095730575">Преузимање датотеке није доступно. Опције су наведене у дну екрана.</translation>
 <translation id="8160722851663543621">Подразумеваном претраживачу шаље претраге из траке за адресу и оквира за претрагу и неке колачиће</translation>
+<translation id="8178325540017397816">Изабране ставке биће уклоњене</translation>
 <translation id="8205564605687841303">Откажи</translation>
 <translation id="8225985093977202398">Кеширане слике и датотеке</translation>
 <translation id="8261506727792406068">Избриши</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sv.xtb b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
index 23a0694..1681e98 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sv.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sv.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Aktivitet och interaktion</translation>
 <translation id="213900355088104901">Öppna en inkognitoflik om du vill surfa privat</translation>
 <translation id="2149973817440762519">Redigera bokmärke</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> olästa artiklar i läslistan.</translation>
 <translation id="2230173723195178503">Webbsidan har lästs in</translation>
 <translation id="2256128224215992540">Sök- och webbplatsförslag</translation>
 <translation id="2267753748892043616">Lägg till konto</translation>
@@ -219,6 +220,7 @@
 
 Din data har krypterats med lösenfrasen för synkronisering. Ange den om du vill starta synkroniseringen.</translation>
 <translation id="473775607612524610">Uppdatera</translation>
+<translation id="4807020197310989387">1 oläst artikel i läslistan.</translation>
 <translation id="481968316161811770">Cookies, webbplatsdata</translation>
 <translation id="4854345657858711387">Ställ in ett lösenord</translation>
 <translation id="4860895144060829044">Ring</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Tjänster som inte använder anpassning</translation>
 <translation id="7856733331829174190">Nedladdning misslyckades</translation>
 <translation id="7859704718976024901">Webbhistorik</translation>
+<translation id="7918293828610777738">Läslistan är tillgänglig offline. Om du vill lägga till en sida i läslistan trycker du på <ph name="SHARE_OPENING_ICON" /> följt av <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Exportera lösenord …</translation>
 <translation id="7947953824732555851">Godkänn och logga in</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Stäng alla flikar</translation>
 <translation id="8114753159095730575">En filnedladdning är tillgänglig. Alternativ visas nära skärmens nederkant.</translation>
 <translation id="8160722851663543621">Skickar sökningar från adressfältet och sökrutan, och vissa cookies, till standardsökmotorn</translation>
+<translation id="8178325540017397816">De markerade objekten tas bort</translation>
 <translation id="8205564605687841303">Avbryt</translation>
 <translation id="8225985093977202398">Cachelagrade bilder och filer</translation>
 <translation id="8261506727792406068">Radera</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sw.xtb b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
index d8e25bf1..13f1d0ae 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sw.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sw.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Shughuli na ushirikiano</translation>
 <translation id="213900355088104901">Ili kuvinjari kwa faragha, fungua kichupo fiche</translation>
 <translation id="2149973817440762519">Badilisha Alamisho</translation>
+<translation id="2207590065820824892">Hujasoma makala <ph name="UNREAD_COUNT" /> kwenye Orodha ya Kusoma.</translation>
 <translation id="2230173723195178503">Ukurasa wa Wavuti umepakiwa</translation>
 <translation id="2256128224215992540">Mapendekezo ya Utafutaji na Tovuti</translation>
 <translation id="2267753748892043616">Ongeza Akaunti</translation>
@@ -219,6 +220,7 @@
 
 Data yako imesimbwa kwa njia fiche kwa kauli yako ya siri ya usawazishaji. Iweke ili uanze kusawazisha.</translation>
 <translation id="473775607612524610">Sasisha</translation>
+<translation id="4807020197310989387">Hujasoma makala 1 kwenye Orodha ya Kusoma.</translation>
 <translation id="481968316161811770">Data ya Vidakuzi na Tovuti</translation>
 <translation id="4854345657858711387">Weka Nambari ya Siri</translation>
 <translation id="4860895144060829044">Piga simu</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Huduma zisizowekewa Mapendeleo</translation>
 <translation id="7856733331829174190">Imeshindwa Kupakua</translation>
 <translation id="7859704718976024901">Historia ya Kuvinjari</translation>
+<translation id="7918293828610777738">Orodha yako ya kusoma inapatikana nje ya mtandao. Ili uongeze ukurasa kwenye orodha yako ya kusoma, gusa <ph name="SHARE_OPENING_ICON" /> kisha <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Hamisha Manenosiri...</translation>
 <translation id="7947953824732555851">Kubali na uingie</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Funga Vichupo Vyote</translation>
 <translation id="8114753159095730575">Unaweza kupakua faili. Chaguo zinapatikana karibu na sehemu ya chini ya skrini.</translation>
 <translation id="8160722851663543621">Hutuma hoja za utafutaji kutoka sehemu ya anwani na kisanduku cha kutafutia na baadhi ya vidakuzi kwenye mtambo chaguomsingi wa kutafuta</translation>
+<translation id="8178325540017397816">Vipengele ambavyo umechagua vitaondolewa</translation>
 <translation id="8205564605687841303">Ghairi</translation>
 <translation id="8225985093977202398">Picha na Faili Zilizowekwa katika Akiba</translation>
 <translation id="8261506727792406068">Futa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_th.xtb b/ios/chrome/app/strings/resources/ios_strings_th.xtb
index 08393d2..aea7561 100644
--- a/ios/chrome/app/strings/resources/ios_strings_th.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_th.xtb
@@ -74,6 +74,7 @@
 <translation id="2120297377148151361">กิจกรรมและการโต้ตอบ</translation>
 <translation id="213900355088104901">หากต้องการท่องเว็บแบบส่วนตัว ให้เปิดแท็บไม่ระบุตัวตน</translation>
 <translation id="2149973817440762519">แก้ไขบุ๊กมาร์ก</translation>
+<translation id="2207590065820824892">บทความในรายการเรื่องรออ่านที่ยังไม่อ่าน <ph name="UNREAD_COUNT" /> รายการ</translation>
 <translation id="2230173723195178503">หน้าเว็บโหลดแล้ว</translation>
 <translation id="2256128224215992540">คำแนะนำการค้นหาและเว็บไซต์</translation>
 <translation id="2267753748892043616">เพิ่มบัญชี</translation>
@@ -217,6 +218,7 @@
 
 ข้อมูลของคุณจะได้รับการเข้ารหัสด้วยรหัสผ่านการซิงค์ โปรดป้อนรหัสผ่านเพื่อเริ่มซิงค์</translation>
 <translation id="473775607612524610">การอัปเดต</translation>
+<translation id="4807020197310989387">บทความในรายการเรื่องรออ่านที่ยังไม่อ่าน 1 รายการ</translation>
 <translation id="481968316161811770">คุกกี้ ข้อมูลเว็บไซต์</translation>
 <translation id="4854345657858711387">ตั้งพาสโค้ด</translation>
 <translation id="4860895144060829044">โทร</translation>
@@ -392,6 +394,7 @@
 <translation id="7830720446622801252">บริการที่ไม่ได้ปรับเปลี่ยนในแบบของคุณ</translation>
 <translation id="7856733331829174190">ดาวน์โหลดไม่ได้</translation>
 <translation id="7859704718976024901">ประวัติการเข้าชม</translation>
+<translation id="7918293828610777738">เรื่องรออ่านของคุณพร้อมใช้งานในแบบออฟไลน์ หากต้องการเพิ่มหน้าลงในเรื่องรออ่าน ให้แตะ <ph name="SHARE_OPENING_ICON" /> แล้วแตะ "<ph name="READ_LATER_TEXT" />"</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">ส่งออกรหัสผ่าน...</translation>
 <translation id="7947953824732555851">ยอมรับและลงชื่อเข้าใช้</translation>
@@ -409,6 +412,7 @@
 <translation id="8080028325999236607">ปิดแท็บทั้งหมด</translation>
 <translation id="8114753159095730575">การดาวน์โหลดไฟล์พร้อมใช้งาน มีตัวเลือกอยู่ทางด้านล่างของหน้าจอ</translation>
 <translation id="8160722851663543621">ส่งการค้นหาจากแถบที่อยู่และช่องค้นหารวมถึงคุกกี้บางรายการไปยังเครื่องมือค้นหาเริ่มต้น</translation>
+<translation id="8178325540017397816">ระบบจะนำรายการที่คุณเลือกออก</translation>
 <translation id="8205564605687841303">ยกเลิก</translation>
 <translation id="8225985093977202398">รูปภาพและไฟล์ที่แคชไว้</translation>
 <translation id="8261506727792406068">ลบ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 678ee2c9..427e564 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Etkinlik ve etkileşimler</translation>
 <translation id="213900355088104901">Gizli olarak göz atmak için gizli sekme açın</translation>
 <translation id="2149973817440762519">Yer İşaretini Düzenle</translation>
+<translation id="2207590065820824892"><ph name="UNREAD_COUNT" /> okunmamış Okuma Listesi makalesi.</translation>
 <translation id="2230173723195178503">Web sayfası yüklendi</translation>
 <translation id="2256128224215992540">Arama ve Site Önerileri</translation>
 <translation id="2267753748892043616">Hesap Ekle</translation>
@@ -219,6 +220,7 @@
 
 Verileriniz senkronizasyon parolanızla şifrelendi. Senkronizasyonu başlatmak için senkronizasyon parolanızı girin.</translation>
 <translation id="473775607612524610">Güncelle</translation>
+<translation id="4807020197310989387">1 okunmamış Okuma Listesi makalesi.</translation>
 <translation id="481968316161811770">Çerezler, Site Verileri</translation>
 <translation id="4854345657858711387">Şifre Kodu Ayarlayın</translation>
 <translation id="4860895144060829044">Telefon et</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Kişiselleştirilmemiş Hizmetler</translation>
 <translation id="7856733331829174190">İndirilemedi</translation>
 <translation id="7859704718976024901">Tarama Geçmişi</translation>
+<translation id="7918293828610777738">Okuma listeniz çevrimdışı olarak kullanılabilir. Okuma listenize sayfa eklemek için önce <ph name="SHARE_OPENING_ICON" />, ardından <ph name="READ_LATER_TEXT" /> öğesine dokunun.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Şifreleri Dışa Aktar...</translation>
 <translation id="7947953824732555851">Kabul et ve oturum aç</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Tüm Sekmeleri Kapat</translation>
 <translation id="8114753159095730575">Dosya indirme işlevi kullanılabilir. Seçenekler ekranın alt tarafındadır.</translation>
 <translation id="8160722851663543621">Adres çubuğundan ve arama kutusundan aramaları ve bazı çerezleri varsayılan arama motorunuza gönderir</translation>
+<translation id="8178325540017397816">Seçtiğiniz öğeler kaldırılacak</translation>
 <translation id="8205564605687841303">İptal</translation>
 <translation id="8225985093977202398">Önbelleğe Alınan Resimler ve Dosyalar</translation>
 <translation id="8261506727792406068">Sil</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_uk.xtb b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
index b102b51..3cab7f35 100644
--- a/ios/chrome/app/strings/resources/ios_strings_uk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_uk.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">Активність і взаємодії</translation>
 <translation id="213900355088104901">Щоб переглядати веб-сторінки конфіденційно, відкрийте анонімну вкладку</translation>
 <translation id="2149973817440762519">Редагувати закладку</translation>
+<translation id="2207590065820824892">Непрочитаних статей у списку читання: <ph name="UNREAD_COUNT" />.</translation>
 <translation id="2230173723195178503">Веб-сторінку завантажено</translation>
 <translation id="2256128224215992540">Пропозиції термінів і сайтів</translation>
 <translation id="2267753748892043616">Додати обліковий запис</translation>
@@ -219,6 +220,7 @@
 
 Ваші дані зашифровано за допомогою парольної фрази. Введіть її, щоб почати синхронізацію.</translation>
 <translation id="473775607612524610">Оновити</translation>
+<translation id="4807020197310989387">1 непрочитана стаття в списку читання.</translation>
 <translation id="481968316161811770">Файли cookie й дані із сайтів</translation>
 <translation id="4854345657858711387">Налаштуйте код доступу</translation>
 <translation id="4860895144060829044">Зателефонувати</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">Неперсоналізовані сервіси</translation>
 <translation id="7856733331829174190">Не вдалося завантажити</translation>
 <translation id="7859704718976024901">Історія веб-перегляду</translation>
+<translation id="7918293828610777738">Ваш список читання доступний офлайн. Щоб додати до нього сторінку, торкніться значка <ph name="SHARE_OPENING_ICON" /> й виберіть <ph name="READ_LATER_TEXT" />.</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">Експортувати паролі…</translation>
 <translation id="7947953824732555851">Прийняти й увійти</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">Закрити всі вкладки</translation>
 <translation id="8114753159095730575">Доступне завантаження файлу. Параметри можна знайти внизу екрана.</translation>
 <translation id="8160722851663543621">Надсилає пошукові запити з адресного рядка, вікна пошуку та деяких файлів cookie в пошукову систему за умовчанням</translation>
+<translation id="8178325540017397816">Елемент, який ви вибрали, буде вилучено</translation>
 <translation id="8205564605687841303">Скасувати</translation>
 <translation id="8225985093977202398">Кешовані зображення й файли</translation>
 <translation id="8261506727792406068">Видалити</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
index abfb11a..972735d6 100644
--- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -76,6 +76,7 @@
 <translation id="2120297377148151361">活動與互動行為</translation>
 <translation id="213900355088104901">如要進行私密瀏覽,請開啟無痕式分頁</translation>
 <translation id="2149973817440762519">編輯書籤</translation>
+<translation id="2207590065820824892">閱讀清單中有 <ph name="UNREAD_COUNT" /> 篇未讀文章。</translation>
 <translation id="2230173723195178503">已載入網頁</translation>
 <translation id="2256128224215992540">搜尋與網站建議</translation>
 <translation id="2267753748892043616">新增帳戶</translation>
@@ -219,6 +220,7 @@
 
 您已使用同步通關密語對資料進行加密,請輸入通關密語開始進行同步。</translation>
 <translation id="473775607612524610">更新</translation>
+<translation id="4807020197310989387">閱讀清單中有 1 篇未讀文章。</translation>
 <translation id="481968316161811770">Cookie、網站資料</translation>
 <translation id="4854345657858711387">設定通行碼</translation>
 <translation id="4860895144060829044">撥號</translation>
@@ -394,6 +396,7 @@
 <translation id="7830720446622801252">非個人化服務</translation>
 <translation id="7856733331829174190">無法下載</translation>
 <translation id="7859704718976024901">瀏覽記錄</translation>
+<translation id="7918293828610777738">閱讀清單可供離線存取。如要將網頁加入閱讀清單,請依序輕觸 <ph name="SHARE_OPENING_ICON" /> &gt; [<ph name="READ_LATER_TEXT" />]。</translation>
 <translation id="7938254975914653459">FaceTime</translation>
 <translation id="7939128259257418052">匯出密碼...</translation>
 <translation id="7947953824732555851">接受並登入</translation>
@@ -411,6 +414,7 @@
 <translation id="8080028325999236607">關閉所有分頁</translation>
 <translation id="8114753159095730575">可下載檔案,相關選項位於畫面底部。</translation>
 <translation id="8160722851663543621">將網址列和搜尋框中的搜尋字詞以及部分 Cookie 傳送給你的預設搜尋引擎</translation>
+<translation id="8178325540017397816">系統將移除所選項目</translation>
 <translation id="8205564605687841303">取消</translation>
 <translation id="8225985093977202398">快取圖片和檔案</translation>
 <translation id="8261506727792406068">刪除</translation>
diff --git a/ios/chrome/browser/autofill/BUILD.gn b/ios/chrome/browser/autofill/BUILD.gn
index 03a28192..89f891f9 100644
--- a/ios/chrome/browser/autofill/BUILD.gn
+++ b/ios/chrome/browser/autofill/BUILD.gn
@@ -297,6 +297,10 @@
     "//components/test/data/autofill/heuristics/input/145_hal-india.com.html",
     "//components/test/data/autofill/heuristics/input/146_checkout_store.scholastic.com.html",
     "//components/test/data/autofill/heuristics/input/147_panera.custhelp.com_app_ask.html",
+    "//components/test/data/autofill/heuristics/input/148_payment_dickblick.com.html",
+    "//components/test/data/autofill/heuristics/input/149_checkout_qvc.com_non_hidden.html",
+    "//components/test/data/autofill/heuristics/input/150_checkout_venus.com_search_field.html",
+    "//components/test/data/autofill/heuristics/input/151_ticketmaster.com.html",
     "//components/test/data/autofill/heuristics/output/000_i18n_de.out",
     "//components/test/data/autofill/heuristics/output/001_i18n_de2.out",
     "//components/test/data/autofill/heuristics/output/002_i18n_en.out",
@@ -445,6 +449,10 @@
     "//components/test/data/autofill/heuristics/output/145_hal-india.com.out",
     "//components/test/data/autofill/heuristics/output/146_checkout_store.scholastic.com.out",
     "//components/test/data/autofill/heuristics/output/147_panera.custhelp.com_app_ask.out",
+    "//components/test/data/autofill/heuristics/output/148_payment_dickblick.com.out",
+    "//components/test/data/autofill/heuristics/output/149_checkout_qvc.com_non_hidden.out",
+    "//components/test/data/autofill/heuristics/output/150_checkout_venus.com_search_field.out",
+    "//components/test/data/autofill/heuristics/output/151_ticketmaster.com.out",
   ]
   outputs = [
     "{{bundle_resources_dir}}/" +
diff --git a/ios/chrome/browser/autofill/form_structure_browsertest.mm b/ios/chrome/browser/autofill/form_structure_browsertest.mm
index 53b714d..2eaff041 100644
--- a/ios/chrome/browser/autofill/form_structure_browsertest.mm
+++ b/ios/chrome/browser/autofill/form_structure_browsertest.mm
@@ -84,12 +84,6 @@
   return files;
 }
 
-const std::set<std::string>& GetFailingTestNames() {
-  static std::set<std::string>* failing_test_names =
-      new std::set<std::string>{};
-  return *failing_test_names;
-}
-
 }  // namespace
 
 // Test fixture for verifying Autofill heuristics. Each input is an HTML
@@ -209,8 +203,23 @@
   return forms_string;
 }
 
-// Crashes on iPhone 6 Plus.  https://crbug.com/857488
-TEST_P(FormStructureBrowserTest, DISABLED_DataDrivenHeuristics) {
+namespace {
+
+// To disable a data driven test, please add the name of the test file
+// (i.e., "NNN_some_site.html") as a literal to the initializer_list given
+// to the failing_test_names constructor.
+const std::set<std::string>& GetFailingTestNames() {
+  static std::set<std::string>* failing_test_names =
+      new std::set<std::string>{};
+  return *failing_test_names;
+}
+
+}  // namespace
+
+// If disabling a test, prefer to add the name names of the specific test cases
+// to GetFailingTestNames(), directly above, instead of renaming the test to
+// DISABLED_DataDrivenHeuristics.
+TEST_P(FormStructureBrowserTest, DataDrivenHeuristics) {
   bool is_expected_to_pass =
       !base::ContainsKey(GetFailingTestNames(), GetParam().BaseName().value());
   RunOneDataDrivenTest(GetParam(), GetIOSOutputDirectory(),
diff --git a/ios/chrome/browser/autofill/manualfill/BUILD.gn b/ios/chrome/browser/autofill/manual_fill/BUILD.gn
similarity index 84%
rename from ios/chrome/browser/autofill/manualfill/BUILD.gn
rename to ios/chrome/browser/autofill/manual_fill/BUILD.gn
index 89eee1d1..8497e82 100644
--- a/ios/chrome/browser/autofill/manualfill/BUILD.gn
+++ b/ios/chrome/browser/autofill/manual_fill/BUILD.gn
@@ -4,7 +4,7 @@
 
 import("//ios/web/js_compile.gni")
 
-source_set("manualfill") {
+source_set("manual_fill") {
   sources = [
     "accessory_provider.h",
     "accessory_provider.mm",
@@ -12,7 +12,7 @@
   deps = [
     "//base",
     "//ios/chrome/browser/autofill",
-    "//ios/chrome/browser/ui/autofill/manualfill",
+    "//ios/chrome/browser/ui/autofill/manual_fill",
   ]
   libs = [ "UIKit.framework" ]
   configs += [ "//build/config/compiler:enable_arc" ]
diff --git a/ios/chrome/browser/autofill/manualfill/OWNERS b/ios/chrome/browser/autofill/manual_fill/OWNERS
similarity index 100%
rename from ios/chrome/browser/autofill/manualfill/OWNERS
rename to ios/chrome/browser/autofill/manual_fill/OWNERS
diff --git a/ios/chrome/browser/autofill/manualfill/accessory_provider.h b/ios/chrome/browser/autofill/manual_fill/accessory_provider.h
similarity index 61%
rename from ios/chrome/browser/autofill/manualfill/accessory_provider.h
rename to ios/chrome/browser/autofill/manual_fill/accessory_provider.h
index 0f9e5f5a..ab9106b 100644
--- a/ios/chrome/browser/autofill/manualfill/accessory_provider.h
+++ b/ios/chrome/browser/autofill/manual_fill/accessory_provider.h
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_ACCESSORY_PROVIDER_H_
-#define IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_ACCESSORY_PROVIDER_H_
+#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_ACCESSORY_PROVIDER_H_
+#define IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_ACCESSORY_PROVIDER_H_
 
 #import "ios/chrome/browser/autofill/form_input_accessory_view_provider.h"
 
 // Returns a default keyboard accessory view with entry points to manual
 // fallbacks for form filling.
-@interface ManualfillAccessoryProvider
+@interface ManualFillAccessoryProvider
     : NSObject<FormInputAccessoryViewProvider>
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_ACCESSORY_PROVIDER_H_
+#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_ACCESSORY_PROVIDER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/accessory_provider.mm b/ios/chrome/browser/autofill/manual_fill/accessory_provider.mm
similarity index 86%
rename from ios/chrome/browser/autofill/manualfill/accessory_provider.mm
rename to ios/chrome/browser/autofill/manual_fill/accessory_provider.mm
index 49e254f4..c145fa4 100644
--- a/ios/chrome/browser/autofill/manualfill/accessory_provider.mm
+++ b/ios/chrome/browser/autofill/manual_fill/accessory_provider.mm
@@ -2,18 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/autofill/manualfill_accessory_provider.h"
+#import "ios/chrome/browser/autofill/manual_fill_accessory_provider.h"
 
 #include "base/feature_list.h"
 #import "base/mac/foundation_util.h"
 #include "components/autofill/core/common/autofill_features.h"
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
 #endif
 
-@interface ManualfillAccessoryProvider ()
+@interface ManualFillAccessoryProvider ()
 
 // The default accesory view to return in the update block.
 @property(nonatomic, readonly) KeyboardAccessoryView* accessoryView;
@@ -24,7 +24,7 @@
 
 @end
 
-@implementation ManualfillAccessoryProvider
+@implementation ManualFillAccessoryProvider
 
 @synthesize accessoryViewDelegate = _accessoryViewDelegate;
 @synthesize accessoryView = _accessoryView;
@@ -37,9 +37,9 @@
             accessoryViewUpdateBlock:
                 (AccessoryViewReadyCompletion)accessoryViewUpdateBlock {
   DCHECK(accessoryViewUpdateBlock);
-  BOOL isManualfillEnabled =
+  BOOL isManualFillEnabled =
       base::FeatureList::IsEnabled(autofill::features::kAutofillManualFallback);
-  if (!isManualfillEnabled) {
+  if (!isManualFillEnabled) {
     accessoryViewUpdateBlock(nil, self);
     return;
   }
diff --git a/ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.h b/ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.h
new file mode 100644
index 0000000..f01ad35
--- /dev/null
+++ b/ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.h
@@ -0,0 +1,19 @@
+// 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.
+
+#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_INPUT_ASSISTANT_MANUAL_FILL_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_INPUT_ASSISTANT_MANUAL_FILL_VIEW_CONTROLLER_H_
+
+#import <UIKit/UIKit.h>
+
+#import "ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h"
+
+// This class allows the user to manual fill data by adding input assistant
+// items  to the first responder. Which then uses pop overs to show the
+// available options. Currently the `inputAssistantItem` property is only
+// available on iPads.
+@interface InputAssistantManualFillViewController : ManualFillViewController
+@end
+
+#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_INPUT_ASSISTANT_MANUAL_FILL_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.mm b/ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.mm
similarity index 94%
rename from ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.mm
rename to ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.mm
index 1152681a..55cdbf0 100644
--- a/ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.mm
+++ b/ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.mm
@@ -2,11 +2,11 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/input_assistant_manual_fill_view_controller.h"
 
 #import <WebKit/WebKit.h>
 
-#import "ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
@@ -102,7 +102,7 @@
           representativeItem:itemChoose];
 
   UITextInputAssistantItem* item =
-      [manualfill::GetFirstResponderSubview(self.view) inputAssistantItem];
+      [manual_fill::GetFirstResponderSubview(self.view) inputAssistantItem];
   item.leadingBarButtonGroups = @[ group ];
 }
 
@@ -111,7 +111,7 @@
 // @param sender The item requesting the pop over, used for positioning.
 - (void)presentPopOverForSender:(UIBarButtonItem*)sender {
   [self updateActiveFieldID];
-  self.lastFirstResponder = manualfill::GetFirstResponderSubview(self.view);
+  self.lastFirstResponder = manual_fill::GetFirstResponderSubview(self.view);
 
   // TODO:(javierrobles) Test this on iOS 10.
   // TODO:(javierrobles) Support / dismiss on rotation.
diff --git a/ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.h b/ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.h
new file mode 100644
index 0000000..ac95ea57
--- /dev/null
+++ b/ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.h
@@ -0,0 +1,18 @@
+// 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.
+
+#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_KEYBOARD_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_KEYBOARD_VIEW_CONTROLLER_H_
+
+#import "ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h"
+
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h"
+
+// Subclass of `ManualFillViewController` with the code that is specific for
+// devices with no undocked keyboard.
+@interface ManualFillKeyboardViewController
+    : ManualFillViewController<KeyboardAccessoryViewDelegate>
+@end
+
+#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_KEYBOARD_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.mm b/ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.mm
similarity index 94%
rename from ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.mm
rename to ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.mm
index 7330ebc6..a643156 100644
--- a/ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.mm
+++ b/ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.mm
@@ -2,12 +2,12 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/keyboard_view_controller.h"
 
 #import <UIKit/UIKit.h>
 
-#import "ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h"
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.h"
+#import "ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.h"
 #import "ios/chrome/common/ui_util/constraints_ui_util.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -23,7 +23,7 @@
 //         found.
 UIView* GetKeyboardAccessoryView() {
   for (UIWindow* window in [[UIApplication sharedApplication] windows]) {
-    UIView* firstResponder = manualfill::GetFirstResponderSubview(window);
+    UIView* firstResponder = manual_fill::GetFirstResponderSubview(window);
     if (firstResponder) {
       return firstResponder.inputAccessoryView;
     }
@@ -33,7 +33,7 @@
 
 }  // namespace
 
-@interface ManualfillKeyboardViewController ()
+@interface ManualFillKeyboardViewController ()
 
 // A strong reference to `inputAccessoryView` used in this class to jump
 // between the web view fields.
@@ -66,7 +66,7 @@
 
 @end
 
-@implementation ManualfillKeyboardViewController
+@implementation ManualFillKeyboardViewController
 @synthesize lastAccessoryInputView = _lastAccessoryInputView;
 @synthesize shouldShowManualFillView = _shouldShowManualFillView;
 @synthesize manualFillView = _manualFillView;
@@ -152,7 +152,7 @@
 
 - (void)handleKeyboardDidShowNotification:(NSNotification*)notification {
   // Update the first responder and it's accessory view.
-  self.lastFirstResponder = manualfill::GetFirstResponderSubview(self.view);
+  self.lastFirstResponder = manual_fill::GetFirstResponderSubview(self.view);
   // This is needed to keep a strong reference to the input accessory view.
   self.lastAccessoryInputView = self.lastFirstResponder.inputAccessoryView;
 
diff --git a/ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h b/ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h
similarity index 83%
rename from ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h
rename to ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h
index d7e8963b..3ff88f5 100644
--- a/ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h
+++ b/ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_MANUAL_FILL_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_MANUAL_FILL_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 #import <WebKit/WebKit.h>
 
-namespace manualfill {
+namespace manual_fill {
 
 // Searches for the first responder in the passed view hierarchy.
 //
@@ -16,7 +16,7 @@
 // @return The first responder or `nil` if it wasn't found.
 UIView* GetFirstResponderSubview(UIView* view);
 
-}  // namespace manualfill
+}  // namespace manual_fill
 
 // Protocol to pass any user choice in a picker to be filled.
 @protocol ManualFillContentDelegate<NSObject>
@@ -31,7 +31,7 @@
 
 // View Controller with the common logic for managing the manual fill views. As
 // well as sending user input to the web view. Meant to be subclassed.
-@interface ManualfillViewController
+@interface ManualFillViewController
     : UIViewController<ManualFillContentDelegate>
 
 // The web view to test the prototype.
@@ -54,4 +54,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_MANUAL_FILL_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/manualfill_view_controller.mm b/ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.mm
similarity index 93%
rename from ios/chrome/browser/autofill/manualfill/manualfill_view_controller.mm
rename to ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.mm
index 14c1673..34e60560 100644
--- a/ios/chrome/browser/autofill/manualfill/manualfill_view_controller.mm
+++ b/ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h"
 
 #import <WebKit/WebKit.h>
 
@@ -12,7 +12,7 @@
 #error "This file requires ARC support."
 #endif
 
-namespace manualfill {
+namespace manual_fill {
 
 UIView* GetFirstResponderSubview(UIView* view) {
   if ([view isFirstResponder])
@@ -27,7 +27,7 @@
   return nil;
 }
 
-}  // namespace manualfill
+}  // namespace manual_fill
 
 @interface ManualfillViewController ()
 
@@ -71,7 +71,7 @@
 
 - (void)updateActiveFieldID {
   __weak __typeof(self) weakSelf = self;
-  NSString* javaScriptQuery = @"__gCrWeb.manualfill.activeElementId()";
+  NSString* javaScriptQuery = @"__gCrWeb.manualFill.activeElementId()";
   [self.webView evaluateJavaScript:javaScriptQuery
                  completionHandler:^(id result, NSError* error) {
                    NSLog(@"result: %@", [result description]);
@@ -83,7 +83,7 @@
 - (void)fillLastSelectedFieldWithString:(NSString*)string {
   NSString* javaScriptQuery =
       [NSString stringWithFormat:
-                    @"__gCrWeb.manualfill.setValueForElementId(\"%@\", \"%@\")",
+                    @"__gCrWeb.manualFill.setValueForElementId(\"%@\", \"%@\")",
                     string, self.activeFieldID];
   [self.webView evaluateJavaScript:javaScriptQuery completionHandler:nil];
 }
@@ -116,7 +116,7 @@
 - (NSString*)earlyJSStringMainFrame {
   NSArray* filenames = @[
     @"main_frame_web_bundle", @"chrome_bundle_main_frame",
-    @"manualfill_controller"
+    @"manual_fill_controller"
   ];
   return [self joinedJSFilesWithFilenames:filenames];
 }
diff --git a/ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h b/ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.h
similarity index 83%
rename from ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h
rename to ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.h
index 0a1211d..1fb4f9a2 100644
--- a/ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h
+++ b/ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.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 IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
+#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
+#define IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
 
 #import <UIKit/UIKit.h>
 
@@ -37,4 +37,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
+#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUAL_FILL_PASSWORD_PICKER_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/password_picker_view_controller.mm b/ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.mm
similarity index 95%
rename from ios/chrome/browser/autofill/manualfill/password_picker_view_controller.mm
rename to ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.mm
index aa2f97e9..9ba83e51 100644
--- a/ios/chrome/browser/autofill/manualfill/password_picker_view_controller.mm
+++ b/ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.mm
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/autofill/manualfill/password_picker_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/password_picker_view_controller.h"
 
-#import "ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h"
+#import "ios/chrome/browser/autofill/manual_fill/manual_fill_view_controller.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/autofill/manualfill/resources/manualfill_controller.js b/ios/chrome/browser/autofill/manual_fill/resources/manual_fill_controller.js
similarity index 82%
rename from ios/chrome/browser/autofill/manualfill/resources/manualfill_controller.js
rename to ios/chrome/browser/autofill/manual_fill/resources/manual_fill_controller.js
index 4c759d4..bbf35f8 100644
--- a/ios/chrome/browser/autofill/manualfill/resources/manualfill_controller.js
+++ b/ios/chrome/browser/autofill/manual_fill/resources/manual_fill_controller.js
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-goog.provide('__crWeb.manualfill');
+goog.provide('__crWeb.manualFill');
 
 /* Beginning of anonymous object. */
 (function() {
@@ -11,15 +11,15 @@
  * Namespace for this file. It depends on |__gCrWeb| having already been
  * injected.
  */
-__gCrWeb.manualfill = {};
-__gCrWeb['manualfill'] = __gCrWeb.manualfill;
+__gCrWeb.manualFill = {};
+__gCrWeb['manualFill'] = __gCrWeb.manualFill;
 
 /**
  * Returns the identifier to be used with `setValueForElementId`.
  *
  * @return {string} The id of the active element.
  */
-__gCrWeb.manualfill.activeElementId = function() {
+__gCrWeb.manualFill.activeElementId = function() {
   var activeElementId = document.activeElement.id;
   return activeElementId;
 };
@@ -31,7 +31,7 @@
  * @param {string} identifier The identifier of the element, found with
  *                 `activeElementId`.
  */
-__gCrWeb.manualfill.setValueForElementId = function(value, identifier) {
+__gCrWeb.manualFill.setValueForElementId = function(value, identifier) {
   if (!identifier) {
     return
   }
diff --git a/ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.h b/ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.h
deleted file mode 100644
index c3f31dc..0000000
--- a/ios/chrome/browser/autofill/manualfill/input_assistant_manualfill_view_controller.h
+++ /dev/null
@@ -1,19 +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.
-
-#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_INPUT_ASSISTANT_MANUALFILL_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_INPUT_ASSISTANT_MANUALFILL_VIEW_CONTROLLER_H_
-
-#import <UIKit/UIKit.h>
-
-#import "ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h"
-
-// This class allows the user to manual fill data by adding input assistant
-// items  to the first responder. Which then uses pop overs to show the
-// available options. Currently the `inputAssistantItem` property is only
-// available on iPads.
-@interface InputAssistantManualfillViewController : ManualfillViewController
-@end
-
-#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_INPUT_ASSISTANT_MANUALFILL_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.h b/ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.h
deleted file mode 100644
index aeb3c93..0000000
--- a/ios/chrome/browser/autofill/manualfill/manualfill_keyboard_view_controller.h
+++ /dev/null
@@ -1,18 +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.
-
-#ifndef IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_KEYBOARD_VIEW_CONTROLLER_H_
-#define IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_KEYBOARD_VIEW_CONTROLLER_H_
-
-#import "ios/chrome/browser/autofill/manualfill/manualfill_view_controller.h"
-
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h"
-
-// Subclass of `ManualfillViewController` with the code that is specific for
-// devices with no undocked keyboard.
-@interface ManualfillKeyboardViewController
-    : ManualfillViewController<KeyboardAccessoryViewDelegate>
-@end
-
-#endif  // IOS_CHROME_BROWSER_AUTOFILL_MANUALFILL_MANUALFILL_KEYBOARD_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/authentication/BUILD.gn b/ios/chrome/browser/ui/authentication/BUILD.gn
index 4e21362..451a166 100644
--- a/ios/chrome/browser/ui/authentication/BUILD.gn
+++ b/ios/chrome/browser/ui/authentication/BUILD.gn
@@ -182,6 +182,7 @@
     "//ios/chrome/browser/browser_state",
     "//ios/chrome/browser/signin",
     "//ios/chrome/browser/ui/authentication/unified_consent:unified_consent_ui",
+    "//ios/chrome/browser/ui/authentication/unified_consent/identity_chooser:identity_chooser_ui",
     "//ios/chrome/test/app:test_support",
     "//ios/chrome/test/earl_grey:test_support",
     "//ios/public/provider/chrome/browser/signin",
diff --git a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
index d233beae..85ada002 100644
--- a/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
+++ b/ios/chrome/browser/ui/authentication/signin_earl_grey_ui.mm
@@ -9,6 +9,7 @@
 #include "components/unified_consent/feature.h"
 #include "ios/chrome/browser/ui/authentication/signin_confirmation_view_controller.h"
 #import "ios/chrome/browser/ui/authentication/signin_earlgrey_utils.h"
+#import "ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.h"
 #import "ios/chrome/browser/ui/authentication/unified_consent/identity_picker_view.h"
 #import "ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.h"
 #import "ios/chrome/test/earl_grey/chrome_earl_grey_ui.h"
@@ -41,9 +42,11 @@
                                             kIdentityPickerViewIdentifier)]
         performAction:grey_tap()];
     [[EarlGrey
-        selectElementWithMatcher:grey_allOf(grey_accessibilityLabel(
-                                                identity.userEmail),
-                                            grey_sufficientlyVisible(), nil)]
+        selectElementWithMatcher:grey_allOf(
+                                     grey_accessibilityID(identity.userEmail),
+                                     grey_kindOfClass(
+                                         [IdentityChooserCell class]),
+                                     grey_sufficientlyVisible(), nil)]
         performAction:grey_tap()];
   } else {
     [self selectIdentityWithEmail:identity.userEmail];
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.mm b/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.mm
index e29a185bc..ffd5cd0 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_cell.mm
@@ -73,4 +73,9 @@
   }
 }
 
+- (void)prepareForReuse {
+  [super prepareForReuse];
+  self.accessibilityIdentifier = nil;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_item.mm b/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_item.mm
index 495fd36..79a655d2 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_item.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/identity_chooser/identity_chooser_item.mm
@@ -35,6 +35,7 @@
     title = subtitle;
     subtitle = nil;
   }
+  cell.accessibilityIdentifier = self.email;
   [cell configureCellWithTitle:title
                       subtitle:subtitle
                          image:self.avatar
diff --git a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
index cf0c232..f261b31a 100644
--- a/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
+++ b/ios/chrome/browser/ui/authentication/unified_consent/unified_consent_view_controller.mm
@@ -171,6 +171,7 @@
   self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
   self.scrollView.translatesAutoresizingMaskIntoConstraints = NO;
   self.scrollView.accessibilityIdentifier = kUnifiedConsentScrollViewIdentifier;
+  self.scrollView.alwaysBounceVertical = YES;
   if (@available(iOS 11, *)) {
     // The observed behavior was buggy. When the view appears on the screen,
     // the scrollvie was not scrolled all the way to the top. Adjusting the
diff --git a/ios/chrome/browser/ui/autofill/manualfill/BUILD.gn b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
similarity index 95%
rename from ios/chrome/browser/ui/autofill/manualfill/BUILD.gn
rename to ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
index fc66a49..1791131 100644
--- a/ios/chrome/browser/ui/autofill/manualfill/BUILD.gn
+++ b/ios/chrome/browser/ui/autofill/manual_fill/BUILD.gn
@@ -4,7 +4,7 @@
 
 import("//ios/web/js_compile.gni")
 
-source_set("manualfill") {
+source_set("manual_fill") {
   sources = [
     "keyboard_accessory_view.h",
     "keyboard_accessory_view.mm",
diff --git a/ios/chrome/browser/ui/autofill/manualfill/OWNERS b/ios/chrome/browser/ui/autofill/manual_fill/OWNERS
similarity index 100%
rename from ios/chrome/browser/ui/autofill/manualfill/OWNERS
rename to ios/chrome/browser/ui/autofill/manual_fill/OWNERS
diff --git a/ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h
similarity index 86%
rename from ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h
rename to ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h
index 33f5b201..b07f0da 100644
--- a/ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_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 IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_ACCESSORY_VIEW_H_
-#define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_ACCESSORY_VIEW_H_
+#ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_ACCESSORY_VIEW_H_
+#define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_ACCESSORY_VIEW_H_
 
 #import <UIKit/UIKit.h>
 
@@ -47,4 +47,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_ACCESSORY_VIEW_H_
+#endif  // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_ACCESSORY_VIEW_H_
diff --git a/ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.mm b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.mm
similarity index 97%
rename from ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.mm
rename to ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.mm
index f965ab5..2f8eec27 100644
--- a/ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.mm
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.h b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.h
similarity index 83%
rename from ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.h
rename to ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.h
index c2ea05b..3928f12 100644
--- a/ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.h
+++ b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_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 IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_BACKGROUND_VIEW_H_
-#define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_BACKGROUND_VIEW_H_
+#ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_BACKGROUND_VIEW_H_
+#define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_BACKGROUND_VIEW_H_
 
 #import <UIKit/UIKit.h>
 
@@ -39,4 +39,4 @@
 
 @end
 
-#endif  // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUALFILL_KEYBOARD_BACKGROUND_VIEW_H_
+#endif  // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_KEYBOARD_BACKGROUND_VIEW_H_
diff --git a/ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.mm b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.mm
similarity index 92%
rename from ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.mm
rename to ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.mm
index 49608f6..1eee0f2 100644
--- a/ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.mm
+++ b/ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.mm
@@ -2,9 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_background_view.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_background_view.h"
 
-#import "ios/chrome/browser/ui/autofill/manualfill/keyboard_accessory_view.h"
+#import "ios/chrome/browser/ui/autofill/manual_fill/keyboard_accessory_view.h"
 
 #if !defined(__has_feature) || !__has_feature(objc_arc)
 #error "This file requires ARC support."
diff --git a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
index 5c752f7c..d74995f 100644
--- a/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
+++ b/ios/chrome/browser/ui/location_bar/location_bar_view_controller.mm
@@ -4,6 +4,7 @@
 
 #import "ios/chrome/browser/ui/location_bar/location_bar_view_controller.h"
 
+#include "base/metrics/user_metrics.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/ui/commands/activity_service_commands.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
@@ -348,6 +349,12 @@
                     action:@selector(sharePage)
           forControlEvents:UIControlEventTouchUpInside];
 
+      // Add self as a target to collect the metrics.
+      [self.locationBarSteadyView.trailingButton
+                 addTarget:self
+                    action:@selector(shareButtonPressed)
+          forControlEvents:UIControlEventTouchUpInside];
+
       [self.locationBarSteadyView.trailingButton
           setImage:
               [[UIImage imageNamed:@"location_bar_share"]
@@ -395,6 +402,15 @@
   [self.dispatcher startVoiceSearch];
 }
 
+// Called when the share button is pressed.
+// The actual share dialog is opened by the dispatcher, only collect the metrics
+// here.
+- (void)shareButtonPressed {
+  base::RecordAction(base::UserMetricsAction("MobileToolbarShareMenu"));
+}
+
+#pragma mark - UIMenu
+
 - (void)showLongPressMenu:(UILongPressGestureRecognizer*)sender {
   if (sender.state == UIGestureRecognizerStateBegan) {
     [self.locationBarSteadyView becomeFirstResponder];
diff --git a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
index 1d2944dd..8633c9c 100644
--- a/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
+++ b/ios/chrome/browser/ui/omnibox/omnibox_view_controller.mm
@@ -85,6 +85,13 @@
   self.textField.placeholderTextColor = [self placeholderAndClearButtonColor];
   self.textField.placeholder = l10n_util::GetNSString(IDS_OMNIBOX_EMPTY_HINT);
   [self setupClearButton];
+
+  // TODO(crbug.com/866446): Use UITextFieldDelegate instead.
+  [[NSNotificationCenter defaultCenter]
+      addObserver:self
+         selector:@selector(textFieldDidBeginEditing)
+             name:UITextFieldTextDidBeginEditingNotification
+           object:self.textField];
 }
 
 - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
@@ -122,6 +129,14 @@
                         : [UIColor colorWithWhite:0 alpha:0.3];
 }
 
+#pragma mark notification callbacks
+
+// Called on UITextFieldTextDidBeginEditingNotification for self.textField.
+- (void)textFieldDidBeginEditing {
+  // Update the clear button state.
+  [self updateClearButtonVisibility];
+}
+
 #pragma mark clear button
 
 // Omnibox uses a custom clear button. It has a custom tint and image, but
diff --git a/ios/chrome/browser/ui/tabs/foreground_tab_animation_view.mm b/ios/chrome/browser/ui/tabs/foreground_tab_animation_view.mm
index dcde80d0b..dcf64f0 100644
--- a/ios/chrome/browser/ui/tabs/foreground_tab_animation_view.mm
+++ b/ios/chrome/browser/ui/tabs/foreground_tab_animation_view.mm
@@ -12,7 +12,7 @@
 
 namespace {
 const NSTimeInterval kAnimationDuration = 0.75;
-const CGFloat kTabMotionDamping = 0.7;
+const CGFloat kTabMotionDamping = 0.75;
 const CGFloat kTabFadeInRelativeDuration = 0.4;
 const CGFloat kBackgroundFadeRelativeDuration = 0.33;
 const CGFloat kCornerRoundingRelativeDuration = 0.33;
diff --git a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_iw.xtb b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_iw.xtb
index 4bbc5cdb..e9578fe 100644
--- a/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_iw.xtb
+++ b/ios/chrome/search_widget_extension/strings/resources/ios_search_widget_extension_strings_iw.xtb
@@ -2,7 +2,7 @@
 <!DOCTYPE translationbundle>
 <translationbundle lang="iw">
 <translation id="1418775127135578229">פתח את הקישור שהועתק</translation>
-<translation id="1545749641540134597">‏סרוק קוד QR</translation>
+<translation id="1545749641540134597">‏סריקת קוד QR</translation>
 <translation id="2204254829203467991">חיפוש חדש</translation>
 <translation id="4503488423518423533">קישורים שתעתיק יופיעו כאן.</translation>
 <translation id="6120021866613542190">חפש במצב גלישה בסתר</translation>
diff --git a/ios/components/io_thread/ios_io_thread.h b/ios/components/io_thread/ios_io_thread.h
index 14227f435..4d792929 100644
--- a/ios/components/io_thread/ios_io_thread.h
+++ b/ios/components/io_thread/ios_io_thread.h
@@ -38,6 +38,7 @@
 class HttpServerProperties;
 class HttpTransactionFactory;
 class HttpUserAgentSettings;
+class LoggingNetworkChangeObserver;
 class NetworkDelegate;
 class ProxyConfigService;
 class ProxyResolutionService;
@@ -201,8 +202,7 @@
   net::HttpNetworkSession::Params params_;
 
   // Observer that logs network changes to the ChromeNetLog.
-  class LoggingNetworkChangeObserver;
-  std::unique_ptr<LoggingNetworkChangeObserver> network_change_observer_;
+  std::unique_ptr<net::LoggingNetworkChangeObserver> network_change_observer_;
 
   // These member variables are initialized by a task posted to the IO thread,
   // which gets posted by calling certain member functions of IOSIOThread.
diff --git a/ios/components/io_thread/ios_io_thread.mm b/ios/components/io_thread/ios_io_thread.mm
index 4d97b86..1bb7025 100644
--- a/ios/components/io_thread/ios_io_thread.mm
+++ b/ios/components/io_thread/ios_io_thread.mm
@@ -36,6 +36,7 @@
 #include "ios/web/public/user_agent.h"
 #include "ios/web/public/web_client.h"
 #include "ios/web/public/web_thread.h"
+#include "net/base/logging_network_change_observer.h"
 #include "net/cert/cert_verifier.h"
 #include "net/cert/ct_policy_enforcer.h"
 #include "net/cert/ct_verifier.h"
@@ -103,65 +104,6 @@
   return global_host_resolver;
 }
 
-class IOSIOThread::LoggingNetworkChangeObserver
-    : public net::NetworkChangeNotifier::IPAddressObserver,
-      public net::NetworkChangeNotifier::ConnectionTypeObserver,
-      public net::NetworkChangeNotifier::NetworkChangeObserver {
- public:
-  // |net_log| must remain valid throughout our lifetime.
-  explicit LoggingNetworkChangeObserver(net::NetLog* net_log)
-      : net_log_(net_log) {
-    net::NetworkChangeNotifier::AddIPAddressObserver(this);
-    net::NetworkChangeNotifier::AddConnectionTypeObserver(this);
-    net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
-  }
-
-  ~LoggingNetworkChangeObserver() override {
-    net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
-    net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
-    net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
-  }
-
-  // NetworkChangeNotifier::IPAddressObserver implementation.
-  void OnIPAddressChanged() override {
-    VLOG(1) << "Observed a change to the network IP addresses";
-
-    net_log_->AddGlobalEntry(
-        net::NetLogEventType::NETWORK_IP_ADDRESSES_CHANGED);
-  }
-
-  // NetworkChangeNotifier::ConnectionTypeObserver implementation.
-  void OnConnectionTypeChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override {
-    std::string type_as_string =
-        net::NetworkChangeNotifier::ConnectionTypeToString(type);
-
-    VLOG(1) << "Observed a change to network connectivity state "
-            << type_as_string;
-
-    net_log_->AddGlobalEntry(
-        net::NetLogEventType::NETWORK_CONNECTIVITY_CHANGED,
-        net::NetLog::StringCallback("new_connection_type", &type_as_string));
-  }
-
-  // NetworkChangeNotifier::NetworkChangeObserver implementation.
-  void OnNetworkChanged(
-      net::NetworkChangeNotifier::ConnectionType type) override {
-    std::string type_as_string =
-        net::NetworkChangeNotifier::ConnectionTypeToString(type);
-
-    VLOG(1) << "Observed a network change to state " << type_as_string;
-
-    net_log_->AddGlobalEntry(
-        net::NetLogEventType::NETWORK_CHANGED,
-        net::NetLog::StringCallback("new_connection_type", &type_as_string));
-  }
-
- private:
-  net::NetLog* net_log_;
-  DISALLOW_COPY_AND_ASSIGN(LoggingNetworkChangeObserver);
-};
-
 class SystemURLRequestContextGetter : public net::URLRequestContextGetter {
  public:
   explicit SystemURLRequestContextGetter(IOSIOThread* io_thread);
@@ -298,7 +240,8 @@
   // Add an observer that will emit network change events to the ChromeNetLog.
   // Assuming NetworkChangeNotifier dispatches in FIFO order, we should be
   // logging the network change before other IO thread consumers respond to it.
-  network_change_observer_.reset(new LoggingNetworkChangeObserver(net_log_));
+  network_change_observer_ =
+      std::make_unique<net::LoggingNetworkChangeObserver>(net_log_);
 
   globals_->system_network_delegate = CreateSystemNetworkDelegate();
   globals_->host_resolver = CreateGlobalHostResolver(net_log_);
diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm
index 0ef7b012..a4c59f1 100644
--- a/ios/web/web_state/ui/crw_web_controller.mm
+++ b/ios/web/web_state/ui/crw_web_controller.mm
@@ -1915,6 +1915,15 @@
   if (!_containerView)
     return;
 
+  // WKBasedNavigationManagerImpl requires web usage to be enabled to load any
+  // URL. So bail if web usage is disabled, and let the URL be loaded when web
+  // usage is enabled again. This can happen when purging web pages when an
+  // interstitial is presented over a native view. See https://crbug.com/865985
+  // for details.
+  if (web::GetWebClient()->IsSlimNavigationManagerEnabled() &&
+      !_webUsageEnabled)
+    return;
+
   _currentURLLoadWasTrigerred = YES;
 
   // Reset current WebUI if one exists.
diff --git a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
index 3322aa9..29f430d 100644
--- a/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
+++ b/media/capture/video/android/java/src/org/chromium/media/VideoCaptureCamera2.java
@@ -807,7 +807,7 @@
                         Context.CAMERA_SERVICE);
         try {
             return manager.getCameraCharacteristics(Integer.toString(id));
-        } catch (CameraAccessException | IllegalArgumentException ex) {
+        } catch (CameraAccessException | IllegalArgumentException | AssertionError ex) {
             Log.e(TAG, "getCameraCharacteristics: ", ex);
         }
         return null;
diff --git a/media/gpu/vaapi/vaapi_picture.cc b/media/gpu/vaapi/vaapi_picture.cc
index 58c1bc09..65d35bf8 100644
--- a/media/gpu/vaapi/vaapi_picture.cc
+++ b/media/gpu/vaapi/vaapi_picture.cc
@@ -4,6 +4,8 @@
 
 #include "media/gpu/vaapi/vaapi_picture.h"
 
+#include <va/va.h>
+
 #include "media/gpu/vaapi/vaapi_wrapper.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_implementation.h"
@@ -36,4 +38,8 @@
   return false;
 }
 
+VASurfaceID VaapiPicture::va_surface_id() const {
+  return VA_INVALID_ID;
+}
+
 }  // namespace media
diff --git a/media/gpu/vaapi/vaapi_picture.h b/media/gpu/vaapi/vaapi_picture.h
index 5ee61a9..d9a296b 100644
--- a/media/gpu/vaapi/vaapi_picture.h
+++ b/media/gpu/vaapi/vaapi_picture.h
@@ -22,6 +22,8 @@
 
 namespace media {
 
+using VASurfaceID = unsigned int;
+
 class VASurface;
 class VaapiWrapper;
 
@@ -49,6 +51,9 @@
   virtual bool DownloadFromSurface(
       const scoped_refptr<VASurface>& va_surface) = 0;
 
+  // Returns the associated VASurfaceID, if any, or VA_INVALID_ID.
+  virtual VASurfaceID va_surface_id() const;
+
  protected:
   VaapiPicture(const scoped_refptr<VaapiWrapper>& vaapi_wrapper,
                const MakeGLContextCurrentCallback& make_context_current_cb,
diff --git a/media/gpu/vaapi/vaapi_picture_native_pixmap.cc b/media/gpu/vaapi/vaapi_picture_native_pixmap.cc
index 64b0b8d5..3a6cfdd 100644
--- a/media/gpu/vaapi/vaapi_picture_native_pixmap.cc
+++ b/media/gpu/vaapi/vaapi_picture_native_pixmap.cc
@@ -46,6 +46,10 @@
   return true;
 }
 
+VASurfaceID VaapiPictureNativePixmap::va_surface_id() const {
+  return va_surface_->id();
+}
+
 unsigned VaapiPictureNativePixmap::BufferFormatToInternalFormat(
     gfx::BufferFormat format) const {
   switch (format) {
diff --git a/media/gpu/vaapi/vaapi_picture_native_pixmap.h b/media/gpu/vaapi/vaapi_picture_native_pixmap.h
index ab852425..5d6c38ba 100644
--- a/media/gpu/vaapi/vaapi_picture_native_pixmap.h
+++ b/media/gpu/vaapi/vaapi_picture_native_pixmap.h
@@ -8,6 +8,7 @@
 #include <stdint.h>
 
 #include "base/memory/ref_counted.h"
+#include "media/gpu/vaapi/va_surface.h"
 #include "media/gpu/vaapi/vaapi_picture.h"
 #include "ui/gfx/buffer_types.h"
 #include "ui/gfx/geometry/size.h"
@@ -41,6 +42,7 @@
   // VaapiPicture implementation.
   bool DownloadFromSurface(const scoped_refptr<VASurface>& va_surface) override;
   bool AllowOverlay() const override;
+  VASurfaceID va_surface_id() const override;
 
   unsigned BufferFormatToInternalFormat(gfx::BufferFormat format) const;
 
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
index b347326..4f7aac44 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.cc
@@ -128,6 +128,8 @@
   }
 }
 
+// TODO(mcasas): consider removing this method and just use
+// DCHECK(base::ContainsValue()) on callsites.
 VaapiPicture* VaapiVideoDecodeAccelerator::PictureById(
     int32_t picture_buffer_id) {
   Pictures::iterator it = pictures_.find(picture_buffer_id);
@@ -146,6 +148,7 @@
       input_ready_(&lock_),
       vaapi_picture_factory_(new VaapiPictureFactory()),
       surfaces_available_(&lock_),
+      decode_using_client_picture_buffers_(false),
       task_runner_(base::ThreadTaskRunnerHandle::Get()),
       decoder_thread_("VaapiDecoderThread"),
       num_frames_at_client_(0),
@@ -220,15 +223,36 @@
 void VaapiVideoDecodeAccelerator::OutputPicture(
     const scoped_refptr<VASurface>& va_surface,
     int32_t input_id,
-    gfx::Rect visible_rect,
-    VaapiPicture* picture) {
+    gfx::Rect visible_rect) {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
-  int32_t output_id = picture->picture_buffer_id();
+  const VASurfaceID va_surface_id = va_surface->id();
 
-  DVLOGF(4) << "Outputting VASurface " << va_surface->id()
-            << " into pixmap bound to picture buffer id " << output_id;
+  VaapiPicture* picture = nullptr;
   {
+    base::AutoLock auto_lock(lock_);
+    int32_t picture_buffer_id = available_picture_buffers_.front();
+    if (decode_using_client_picture_buffers_) {
+      // Find the |pictures_| entry matching |va_surface_id|.
+      for (const auto& id_and_picture : pictures_) {
+        if (id_and_picture.second->va_surface_id() == va_surface_id) {
+          picture_buffer_id = id_and_picture.first;
+          break;
+        }
+      }
+    }
+    picture = PictureById(picture_buffer_id);
+    DCHECK(base::ContainsValue(available_picture_buffers_, picture_buffer_id));
+    base::Erase(available_picture_buffers_, picture_buffer_id);
+  }
+
+  DCHECK(picture) << " could not find " << va_surface_id << " available";
+  const int32_t output_id = picture->picture_buffer_id();
+
+  VLOGF(4) << "Outputting VASurface " << va_surface_id
+           << " into pixmap bound to picture buffer id " << output_id;
+
+  if (!decode_using_client_picture_buffers_) {
     TRACE_EVENT2("media,gpu", "VAVDA::DownloadFromSurface", "input_id",
                  input_id, "output_id", output_id);
     RETURN_AND_NOTIFY_ON_FAILURE(picture->DownloadFromSurface(va_surface),
@@ -248,24 +272,20 @@
   }
 }
 
-void VaapiVideoDecodeAccelerator::TryOutputSurface() {
+void VaapiVideoDecodeAccelerator::TryOutputPicture() {
   DCHECK(task_runner_->BelongsToCurrentThread());
 
   // Handle Destroy() arriving while pictures are queued for output.
   if (!client_)
     return;
 
-  if (pending_output_cbs_.empty() || output_buffers_.empty())
+  if (pending_output_cbs_.empty() || available_picture_buffers_.empty())
     return;
 
-  OutputCB output_cb = pending_output_cbs_.front();
+  auto output_cb = std::move(pending_output_cbs_.front());
   pending_output_cbs_.pop();
 
-  VaapiPicture* picture = PictureById(output_buffers_.front());
-  DCHECK(picture);
-  output_buffers_.pop();
-
-  output_cb.Run(picture);
+  std::move(output_cb).Run();
 
   if (finish_flush_pending_ && pending_output_cbs_.empty())
     FinishFlush();
@@ -562,6 +582,7 @@
 
   available_va_surfaces_.push_back(va_surface_id);
   surfaces_available_.Signal();
+  TryOutputPicture();
 }
 
 void VaapiVideoDecodeAccelerator::AssignPictureBuffers(
@@ -570,8 +591,7 @@
   base::AutoLock auto_lock(lock_);
   DCHECK(pictures_.empty());
 
-  while (!output_buffers_.empty())
-    output_buffers_.pop();
+  available_picture_buffers_.clear();
 
   RETURN_AND_NOTIFY_ON_FAILURE(
       buffers.size() >= requested_num_pics_,
@@ -581,11 +601,6 @@
 
   const unsigned int va_format = GetVaFormatForVideoCodecProfile(profile_);
   std::vector<VASurfaceID> va_surface_ids;
-  RETURN_AND_NOTIFY_ON_FAILURE(
-      vaapi_wrapper_->CreateSurfaces(va_format, requested_pic_size_,
-                                     buffers.size(), &va_surface_ids),
-      "Failed creating VA Surfaces", PLATFORM_FAILURE, );
-  DCHECK_EQ(va_surface_ids.size(), buffers.size());
 
   for (size_t i = 0; i < buffers.size(); ++i) {
     DCHECK(requested_pic_size_ == buffers[i].size());
@@ -599,17 +614,42 @@
       RETURN_AND_NOTIFY_ON_FAILURE(
           picture->Allocate(vaapi_picture_factory_->GetBufferFormat()),
           "Failed to allocate memory for a VaapiPicture", PLATFORM_FAILURE, );
-      output_buffers_.push(buffers[i].id());
-    }
-    bool inserted =
-        pictures_.insert(std::make_pair(buffers[i].id(), std::move(picture)))
-            .second;
-    DCHECK(inserted);
+      available_picture_buffers_.push_back(buffers[i].id());
 
-    available_va_surfaces_.push_back(va_surface_ids[i]);
+      VASurfaceID va_surface_id = picture->va_surface_id();
+      if (va_surface_id != VA_INVALID_ID)
+        va_surface_ids.push_back(va_surface_id);
+    }
+
+    DCHECK(!base::ContainsKey(pictures_, buffers[i].id()));
+    pictures_[buffers[i].id()] = std::move(picture);
+
     surfaces_available_.Signal();
   }
 
+  decode_using_client_picture_buffers_ = !va_surface_ids.empty() &&
+                                         profile_ != VP9PROFILE_PROFILE2 &&
+                                         profile_ != VP9PROFILE_PROFILE3;
+
+  // If we have some |va_surface_ids|, use them for decode, otherwise ask
+  // |vaapi_wrapper_| to allocate them for us.
+  if (decode_using_client_picture_buffers_) {
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        vaapi_wrapper_->CreateContext(va_format, requested_pic_size_,
+                                      va_surface_ids),
+        "Failed creating VA Context", PLATFORM_FAILURE, );
+  } else {
+    va_surface_ids.clear();
+    RETURN_AND_NOTIFY_ON_FAILURE(
+        vaapi_wrapper_->CreateSurfaces(va_format, requested_pic_size_,
+                                       buffers.size(), &va_surface_ids),
+        "Failed creating VA Surfaces", PLATFORM_FAILURE, );
+  }
+  DCHECK_EQ(va_surface_ids.size(), buffers.size());
+
+  for (const auto id : va_surface_ids)
+    available_va_surfaces_.push_back(id);
+
   // Resume DecodeTask if it is still in decoding state.
   if (state_ == kDecoding) {
     decoder_thread_task_runner_->PostTask(
@@ -679,9 +719,11 @@
 
   --num_frames_at_client_;
   TRACE_COUNTER1("media,gpu", "Vaapi frames at client", num_frames_at_client_);
-
-  output_buffers_.push(picture_buffer_id);
-  TryOutputSurface();
+  {
+    base::AutoLock auto_lock(lock_);
+    available_picture_buffers_.push_back(picture_buffer_id);
+  }
+  TryOutputPicture();
 }
 
 void VaapiVideoDecodeAccelerator::FlushTask() {
@@ -906,7 +948,7 @@
       base::Bind(&VaapiVideoDecodeAccelerator::OutputPicture, weak_this_,
                  va_surface, bitstream_id, visible_rect));
 
-  TryOutputSurface();
+  TryOutputPicture();
 }
 
 scoped_refptr<VASurface> VaapiVideoDecodeAccelerator::CreateVASurface() {
@@ -917,12 +959,32 @@
     return nullptr;
 
   DCHECK(!awaiting_va_surfaces_recycle_);
-  scoped_refptr<VASurface> va_surface(new VASurface(
-      available_va_surfaces_.front(), requested_pic_size_,
-      vaapi_wrapper_->va_surface_format(), va_surface_release_cb_));
-  available_va_surfaces_.pop_front();
+  if (!decode_using_client_picture_buffers_) {
+    const VASurfaceID id = available_va_surfaces_.front();
+    available_va_surfaces_.pop_front();
+    return new VASurface(id, requested_pic_size_,
+                         vaapi_wrapper_->va_surface_format(),
+                         va_surface_release_cb_);
+  }
 
-  return va_surface;
+  // Find the first |available_va_surfaces_| id such that the associated
+  // |pictures_| entry is marked as |available_picture_buffers_|. In practice,
+  // we will quickly find an available |va_surface_id|.
+  for (const VASurfaceID va_surface_id : available_va_surfaces_) {
+    for (const auto& id_and_picture : pictures_) {
+      if (id_and_picture.second->va_surface_id() == va_surface_id &&
+          base::ContainsValue(available_picture_buffers_,
+                              id_and_picture.first)) {
+        // Remove |va_surface_id| from the list of availables, and use the id
+        // to return a new VASurface.
+        base::Erase(available_va_surfaces_, va_surface_id);
+        return new VASurface(va_surface_id, requested_pic_size_,
+                             vaapi_wrapper_->va_surface_format(),
+                             va_surface_release_cb_);
+      }
+    }
+  }
+  return nullptr;
 }
 
 // static
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator.h b/media/gpu/vaapi/vaapi_video_decode_accelerator.h
index 271bcc00..be012add 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator.h
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator.h
@@ -18,6 +18,7 @@
 #include <vector>
 
 #include "base/containers/queue.h"
+#include "base/containers/small_map.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
@@ -163,18 +164,16 @@
   // or return false on failure.
   bool InitializeFBConfig();
 
-  // Callback to be executed once we have a |va_surface| to be output and
-  // an available |picture| to use for output.
-  // Puts contents of |va_surface| into given |picture|, releases the surface
-  // and passes the resulting picture to client to output the given
-  // |visible_rect| part of it.
+  // Callback to be executed once we have a |va_surface| to be output and an
+  // available VaapiPicture in |available_picture_buffers_| for output. Puts
+  // contents of |va_surface| into the latter, releases the surface and passes
+  // the resulting picture to |client_| along with |visible_rect|.
   void OutputPicture(const scoped_refptr<VASurface>& va_surface,
                      int32_t input_id,
-                     gfx::Rect visible_rect,
-                     VaapiPicture* picture);
+                     gfx::Rect visible_rect);
 
   // Try to OutputPicture() if we have both a ready surface and picture.
-  void TryOutputSurface();
+  void TryOutputPicture();
 
   // Called when a VASurface is no longer in use by the decoder or is not being
   // synced/waiting to be synced to a picture. Returns it to available surfaces
@@ -202,12 +201,13 @@
     kDestroying,
   };
 
-  // Protects input buffer and surface queues and state_.
+  // |lock_| protects |input_buffers_|, |curr_input_buffer_|, |state_| and
+  // |available_picture_buffers_|.
   base::Lock lock_;
   State state_;
   Config::OutputMode output_mode_;
 
-  // Queue of available InputBuffers (picture_buffer_ids).
+  // Queue of available InputBuffers.
   base::queue<std::unique_ptr<InputBuffer>> input_buffers_;
   // Signalled when input buffers are queued onto |input_buffers_| queue.
   base::ConditionVariable input_ready_;
@@ -215,9 +215,9 @@
   // Current input buffer at decoder.
   std::unique_ptr<InputBuffer> curr_input_buffer_;
 
-  // Queue for incoming output buffers (texture ids).
-  using OutputBuffers = base::queue<int32_t>;
-  OutputBuffers output_buffers_;
+  // List of PictureBuffer ids available to be sent to |client_| via
+  // OutputPicture() (|client_| returns them via ReusePictureBuffer()).
+  std::list<int32_t> available_picture_buffers_;
 
   std::unique_ptr<VaapiPictureFactory> vaapi_picture_factory_;
 
@@ -229,17 +229,17 @@
   // allocated once using |create_vaapi_picture_callback_| and destroyed at the
   // end of decode. Comes after |vaapi_wrapper_| to ensure all pictures are
   // destroyed before said |vaapi_wrapper_| is destroyed.
-  using Pictures = std::map<int32_t, std::unique_ptr<VaapiPicture>>;
+  using Pictures =
+      base::small_map<std::map<int32_t, std::unique_ptr<VaapiPicture>>>;
   Pictures pictures_;
 
   // Return a VaapiPicture associated with given client-provided id.
   VaapiPicture* PictureById(int32_t picture_buffer_id);
 
-  // VA Surfaces no longer in use that can be passed back to the decoder for
+  // VASurfaceIDs no longer in use that can be passed back to |decoder_| for
   // reuse, once it requests them.
   std::list<VASurfaceID> available_va_surfaces_;
-  // Signalled when output surfaces are queued onto the available_va_surfaces_
-  // queue.
+  // Signalled when output surfaces are queued into |available_va_surfaces_|.
   base::ConditionVariable surfaces_available_;
 
   // Pending output requests from the decoder. When it indicates that we should
@@ -248,14 +248,16 @@
   // will put the contents of the surface into the picture and return it to
   // the client, releasing the surface as well.
   // If we don't have any available Pictures at the time when the decoder
-  // requests output, we'll store the request on pending_output_cbs_ queue for
-  // later and run it once the client gives us more textures
-  // via ReusePictureBuffer().
-  using OutputCB = base::Callback<void(VaapiPicture*)>;
-  base::queue<OutputCB> pending_output_cbs_;
+  // requests output, we'll store the request in this queue for later and run it
+  // once the client gives us more textures via ReusePictureBuffer().
+  base::queue<base::OnceClosure> pending_output_cbs_;
+
+  // Under some circumstances, we can pass to libva our own VASurfaceIDs to
+  // decode onto, which skips one copy.
+  bool decode_using_client_picture_buffers_;
 
   // ChildThread's task runner.
-  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
+  const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 
   // WeakPtr<> pointing to |this| for use in posting tasks from the decoder
   // thread back to the ChildThread.  Because the decoder thread is a member of
diff --git a/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc b/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
index 76907a6..820c106 100644
--- a/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
+++ b/media/gpu/vaapi/vaapi_video_decode_accelerator_unittest.cc
@@ -233,7 +233,6 @@
     ASSERT_TRUE(vda_.curr_input_buffer_)
         << "QueueInputBuffer() should have been called";
 
-    ::testing::InSequence s;
     base::RunLoop run_loop;
     base::Closure quit_closure = run_loop.QuitClosure();
 
@@ -249,6 +248,7 @@
                 MockCreateVaapiPicture(mock_vaapi_wrapper_.get(), picture_size))
         .Times(num_pictures);
 
+    ::testing::InSequence s;
     EXPECT_CALL(*mock_decoder_, Decode())
         .WillOnce(Return(AcceleratedVideoDecoder::kRanOutOfStreamData));
     EXPECT_CALL(*this, NotifyEndOfBitstreamBuffer(bitstream_id))
diff --git a/net/dns/host_resolver.h b/net/dns/host_resolver.h
index 4bbc1f1..a337724 100644
--- a/net/dns/host_resolver.h
+++ b/net/dns/host_resolver.h
@@ -10,6 +10,7 @@
 
 #include <memory>
 #include <string>
+#include <vector>
 
 #include "net/base/address_family.h"
 #include "net/base/completion_once_callback.h"
@@ -45,6 +46,9 @@
  public:
   // HostResolver::Request class is used to cancel the request and change it's
   // priority. It must be owned by consumer. Deletion cancels the request.
+  //
+  // TODO(crbug.com/821021): Delete this class once all usage has been
+  // converted to the new CreateRequest() API.
   class Request {
    public:
     virtual ~Request() {}
@@ -55,6 +59,41 @@
     virtual void ChangeRequestPriority(RequestPriority priority) = 0;
   };
 
+  // Handler for an individual host resolution request. Created by
+  // HostResolver::CreateRequest().
+  class ResolveHostRequest {
+   public:
+    // Destruction cancels the request if running asynchronously, causing the
+    // callback to never be invoked.
+    virtual ~ResolveHostRequest() {}
+
+    // Starts the request and returns a network error code.
+    //
+    // If the request could not be handled synchronously, returns
+    // |ERR_IO_PENDING|, and completion will be signaled later via |callback|.
+    // On any other returned value, the request was handled synchronously and
+    // |callback| will not be invoked.
+    //
+    // Results in ERR_NAME_NOT_RESOLVED if the hostname is invalid, or if it is
+    // an incompatible IP literal (e.g. IPv6 is disabled and it is an IPv6
+    // literal).
+    //
+    // The parent HostResolver must still be alive when Start() is called,  but
+    // if it is destroyed before an asynchronous result completes, the request
+    // will be automatically cancelled.
+    //
+    // If cancelled before |callback| is invoked, it will never be invoked.
+    virtual int Start(CompletionOnceCallback callback) = 0;
+
+    // Result of the request. Should only be called after Start() signals
+    // completion, either by invoking the callback or by returning a result
+    // other than |ERR_IO_PENDING|.
+    //
+    // TODO(crbug.com/821021): Implement other GetResults() methods for requests
+    // that return other data (eg DNS TXT requests).
+    virtual const base::Optional<AddressList>& GetAddressResults() const = 0;
+  };
+
   // |max_concurrent_resolves| is how many resolve requests will be allowed to
   // run in parallel. Pass HostResolver::kDefaultParallelism to choose a
   // default value.
@@ -144,6 +183,21 @@
   // be called.
   virtual ~HostResolver();
 
+  // Creates a request to resolve the given hostname (or IP address literal).
+  // Profiling information for the request is saved to |net_log| if non-NULL.
+  //
+  // This method is intended as a direct replacement for the old Resolve()
+  // method, but it may not yet cover all the capabilities of the old method.
+  //
+  // TODO(crbug.com/821021): Implement more complex functionality to meet
+  // capabilities of Resolve() and M/DnsClient functionality.
+  virtual std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) = 0;
+
+  // DEPRECATION NOTE: This method is being replaced by CreateRequest(). New
+  // callers should prefer CreateRequest() if it works for their needs.
+  //
   // Resolves the given hostname (or IP address literal), filling out the
   // |addresses| object upon success.  The |info.port| parameter will be set as
   // the sin(6)_port field of the sockaddr_in{6} struct.  Returns OK if
@@ -165,6 +219,9 @@
   // |out_req| will cancel the request, and cause |callback| not to be invoked.
   //
   // Profiling information for the request is saved to |net_log| if non-NULL.
+  //
+  // TODO(crbug.com/821021): Delete this method once all usage has been
+  // converted to ResolveHost().
   virtual int Resolve(const RequestInfo& info,
                       RequestPriority priority,
                       AddressList* addresses,
diff --git a/net/dns/host_resolver_impl.cc b/net/dns/host_resolver_impl.cc
index 8d60955..0d61e10 100644
--- a/net/dns/host_resolver_impl.cc
+++ b/net/dns/host_resolver_impl.cc
@@ -17,7 +17,9 @@
 #endif  // !defined(OS_NACL)
 #endif  // defined(OS_WIN)
 
+#include <algorithm>
 #include <cmath>
+#include <limits>
 #include <memory>
 #include <utility>
 #include <vector>
@@ -425,7 +427,8 @@
 }
 
 // Creates NetLog parameters containing the information in a RequestInfo object,
-// along with the associated NetLogSource.
+// along with the associated NetLogSource. Use NetLogRequestCallback() if the
+// request information is not specified via RequestInfo.
 std::unique_ptr<base::Value> NetLogRequestInfoCallback(
     const HostResolver::RequestInfo* info,
     NetLogCaptureMode /* capture_mode */) {
@@ -439,12 +442,27 @@
   return std::move(dict);
 }
 
+// Creates NetLog parameters containing the information of the request. Use
+// NetLogRequestInfoCallback if the request is specified via RequestInfo.
+std::unique_ptr<base::Value> NetLogRequestCallback(
+    const HostPortPair& host,
+    NetLogCaptureMode /* capture_mode */) {
+  auto dict = std::make_unique<base::DictionaryValue>();
+
+  dict->SetString("host", host.ToString());
+  dict->SetInteger("address_family",
+                   static_cast<int>(ADDRESS_FAMILY_UNSPECIFIED));
+  dict->SetBoolean("allow_cached_response", true);
+  dict->SetBoolean("is_speculative", false);
+  return std::move(dict);
+}
+
 // Creates NetLog parameters for the creation of a HostResolverImpl::Job.
 std::unique_ptr<base::Value> NetLogJobCreationCallback(
     const NetLogSource& source,
     const std::string* host,
     NetLogCaptureMode /* capture_mode */) {
-  std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
+  auto dict = std::make_unique<base::DictionaryValue>();
   source.AddToEventParameters(dict.get());
   dict->SetString("host", *host);
   return std::move(dict);
@@ -481,24 +499,27 @@
 // The logging routines are defined here because some requests are resolved
 // without a Request object.
 
-// Logs when a request has just been started.
+// Logs when a request has just been started. Overloads for whether or not the
+// request information is specified via a RequestInfo object.
 void LogStartRequest(const NetLogWithSource& source_net_log,
                      const HostResolver::RequestInfo& info) {
   source_net_log.BeginEvent(NetLogEventType::HOST_RESOLVER_IMPL_REQUEST,
                             base::Bind(&NetLogRequestInfoCallback, &info));
 }
+void LogStartRequest(const NetLogWithSource& source_net_log,
+                     const HostPortPair& host) {
+  source_net_log.BeginEvent(NetLogEventType::HOST_RESOLVER_IMPL_REQUEST,
+                            base::BindRepeating(&NetLogRequestCallback, host));
+}
 
 // Logs when a request has just completed (before its callback is run).
-void LogFinishRequest(const NetLogWithSource& source_net_log,
-                      const HostResolver::RequestInfo& info,
-                      int net_error) {
+void LogFinishRequest(const NetLogWithSource& source_net_log, int net_error) {
   source_net_log.EndEventWithNetErrorCode(
       NetLogEventType::HOST_RESOLVER_IMPL_REQUEST, net_error);
 }
 
 // Logs when a request has been cancelled.
-void LogCancelRequest(const NetLogWithSource& source_net_log,
-                      const HostResolverImpl::RequestInfo& info) {
+void LogCancelRequest(const NetLogWithSource& source_net_log) {
   source_net_log.AddEvent(NetLogEventType::CANCELLED);
   source_net_log.EndEvent(NetLogEventType::HOST_RESOLVER_IMPL_REQUEST);
 }
@@ -591,83 +612,242 @@
 // cancellation is initiated by the Job (OnJobCancelled) vs by the end user
 // (~RequestImpl).
 class HostResolverImpl::RequestImpl
-    : public HostResolver::Request,
+    : public HostResolver::ResolveHostRequest,
       public base::LinkNode<HostResolverImpl::RequestImpl> {
  public:
   RequestImpl(const NetLogWithSource& source_net_log,
-              const RequestInfo& info,
+              const HostPortPair& request_host,
+              bool is_speculative,
               RequestPriority priority,
-              CompletionOnceCallback callback,
-              AddressList* addresses,
-              Job* job,
-              base::TimeTicks request_time)
+              base::WeakPtr<HostResolverImpl> resolver)
+      : RequestImpl(source_net_log,
+                    request_host,
+                    ADDRESS_FAMILY_UNSPECIFIED,
+                    0 /* host_resolver_flags */,
+                    true /* allow_cached_response */,
+                    is_speculative,
+                    priority,
+                    resolver) {}
+
+  // Overload for use by the legacy Resolve() API. Has more advanced parameters
+  // not yet supported by the CreateRequest() API.
+  RequestImpl(const NetLogWithSource& source_net_log,
+              const HostPortPair& request_host,
+              AddressFamily address_family,
+              HostResolverFlags host_resolver_flags,
+              bool allow_cached_response,
+              bool is_speculative,
+              RequestPriority priority,
+              base::WeakPtr<HostResolverImpl> resolver)
       : source_net_log_(source_net_log),
-        info_(info),
+        request_host_(request_host),
+        address_family_(address_family),
+        host_resolver_flags_(host_resolver_flags),
+        allow_cached_response_(allow_cached_response),
+        is_speculative_(is_speculative),
         priority_(priority),
-        job_(job),
-        callback_(std::move(callback)),
-        addresses_(addresses),
-        request_time_(request_time) {}
+        job_(nullptr),
+        resolver_(resolver),
+        complete_(false) {}
 
   ~RequestImpl() override;
 
-  void ChangeRequestPriority(RequestPriority priority) override;
+  int Start(CompletionOnceCallback callback) override {
+    DCHECK(callback);
+    // Start() may only be called once per request.
+    DCHECK(!job_);
+    DCHECK(!complete_);
+    DCHECK(!callback_);
+    // Parent HostResolver must still be alive to call Start().
+    DCHECK(resolver_);
 
+    int rv = resolver_->Resolve(this);
+    DCHECK(!complete_);
+    if (rv == ERR_IO_PENDING) {
+      DCHECK(job_);
+      callback_ = std::move(callback);
+    } else {
+      DCHECK(!job_);
+      complete_ = true;
+    }
+    resolver_ = nullptr;
+
+    return rv;
+  }
+
+  const base::Optional<AddressList>& GetAddressResults() const override {
+    DCHECK(complete_);
+    return address_results_;
+  }
+
+  void set_address_results(const AddressList& address_results) {
+    // Should only be called at most once and before request is marked
+    // completed.
+    DCHECK(!complete_);
+    DCHECK(!address_results_);
+
+    address_results_ = address_results;
+  }
+
+  void ChangeRequestPriority(RequestPriority priority);
+
+  void AssignJob(Job* job) {
+    DCHECK(job);
+    DCHECK(!job_);
+
+    job_ = job;
+  }
+
+  // Unassigns the Job without calling completion callback.
   void OnJobCancelled(Job* job) {
     DCHECK_EQ(job_, job);
     job_ = nullptr;
-    addresses_ = nullptr;
+    DCHECK(!complete_);
+    DCHECK(callback_);
     callback_.Reset();
+
+    // No results should be set.
+    DCHECK(!address_results_);
   }
 
-  // Prepare final AddressList and call completion callback.
-  void OnJobCompleted(Job* job, int error, const AddressList& addr_list) {
+  // Cleans up Job assignment, marks request completed, and calls the completion
+  // callback.
+  void OnJobCompleted(Job* job, int error) {
     DCHECK_EQ(job_, job);
-    if (error == OK)
-      *addresses_ = EnsurePortOnAddressList(addr_list, info_.port());
     job_ = nullptr;
-    addresses_ = nullptr;
+
+    DCHECK(!complete_);
+    complete_ = true;
+
+    DCHECK(callback_);
     std::move(callback_).Run(error);
   }
 
-  Job* job() const {
-    return job_;
-  }
+  Job* job() const { return job_; }
 
   // NetLog for the source, passed in HostResolver::Resolve.
   const NetLogWithSource& source_net_log() { return source_net_log_; }
 
-  const RequestInfo& info() const {
-    return info_;
-  }
+  const HostPortPair& request_host() const { return request_host_; }
+
+  AddressFamily address_family() const { return address_family_; }
+
+  HostResolverFlags host_resolver_flags() const { return host_resolver_flags_; }
+
+  bool allow_cached_response() const { return allow_cached_response_; }
+
+  bool is_speculative() const { return is_speculative_; }
 
   RequestPriority priority() const { return priority_; }
   void set_priority(RequestPriority priority) { priority_ = priority; }
 
-  base::TimeTicks request_time() const { return request_time_; }
+  bool complete() const { return complete_; }
+
+  base::TimeTicks request_time() const {
+    DCHECK(!request_time_.is_null());
+    return request_time_;
+  }
+  void set_request_time(base::TimeTicks request_time) {
+    DCHECK(request_time_.is_null());
+    DCHECK(!request_time.is_null());
+    request_time_ = request_time;
+  }
 
  private:
   const NetLogWithSource source_net_log_;
 
-  // The request info that started the request.
-  const RequestInfo info_;
+  const HostPortPair request_host_;
+  const AddressFamily address_family_;
+  const HostResolverFlags host_resolver_flags_;
+  const bool allow_cached_response_;
+  const bool is_speculative_;
 
   RequestPriority priority_;
 
   // The resolve job that this request is dependent on.
   Job* job_;
+  base::WeakPtr<HostResolverImpl> resolver_;
 
   // The user's callback to invoke when the request completes.
   CompletionOnceCallback callback_;
 
-  // The address list to save result into.
-  AddressList* addresses_;
+  bool complete_;
+  base::Optional<AddressList> address_results_;
 
-  const base::TimeTicks request_time_;
+  base::TimeTicks request_time_;
 
   DISALLOW_COPY_AND_ASSIGN(RequestImpl);
 };
 
+// Wraps a RequestImpl to implement Request objects from the legacy Resolve()
+// API. The wrapped request must not yet have been started.
+//
+// TODO(crbug.com/821021): Delete this class once all usage has been
+// converted to the new CreateRequest() API.
+class HostResolverImpl::LegacyRequestImpl : public HostResolver::Request {
+ public:
+  explicit LegacyRequestImpl(std::unique_ptr<RequestImpl> inner_request)
+      : inner_request_(std::move(inner_request)) {
+    DCHECK(!inner_request_->job());
+    DCHECK(!inner_request_->complete());
+  }
+
+  ~LegacyRequestImpl() override {}
+
+  void ChangeRequestPriority(RequestPriority priority) override {
+    inner_request_->ChangeRequestPriority(priority);
+  }
+
+  int Start() {
+    return inner_request_->Start(base::BindOnce(
+        &LegacyRequestImpl::LegacyApiCallback, base::Unretained(this)));
+  }
+
+  // Do not call to assign the callback until we are running an async job (after
+  // Start() returns ERR_IO_PENDING) and before completion.  Until then, the
+  // legacy HostResolverImpl::Resolve() needs to hang onto |callback| to ensure
+  // it stays alive for the duration of the method call, as some callers may be
+  // binding objects, eg the AddressList, with the callback.
+  void AssignCallback(CompletionOnceCallback callback,
+                      AddressList* addresses_result_ptr) {
+    DCHECK(callback);
+    DCHECK(addresses_result_ptr);
+    DCHECK(inner_request_->job());
+    DCHECK(!inner_request_->complete());
+
+    callback_ = std::move(callback);
+    addresses_result_ptr_ = addresses_result_ptr;
+  }
+
+  const RequestImpl& inner_request() const { return *inner_request_; }
+
+ private:
+  // Result callback to bridge results handled entirely via ResolveHostRequest
+  // to legacy API styles where AddressList was a separate method out parameter.
+  void LegacyApiCallback(int error) {
+    // Must call AssignCallback() before async results.
+    DCHECK(callback_);
+
+    if (error == OK) {
+      // Legacy API does not allow non-address results (eg TXT), so AddressList
+      // is always expected to be present on OK.
+      DCHECK(inner_request_->GetAddressResults());
+      *addresses_result_ptr_ = inner_request_->GetAddressResults().value();
+    }
+    addresses_result_ptr_ = nullptr;
+    std::move(callback_).Run(error);
+  }
+
+  const std::unique_ptr<RequestImpl> inner_request_;
+
+  CompletionOnceCallback callback_;
+  // This is a caller-provided pointer and should not be used once |callback_|
+  // is invoked.
+  AddressList* addresses_result_ptr_;
+
+  DISALLOW_COPY_AND_ASSIGN(LegacyRequestImpl);
+};
+
 //------------------------------------------------------------------------------
 
 // Calls HostResolverProc in TaskScheduler. Performs retries if necessary.
@@ -843,10 +1023,10 @@
     NetLogParametersCallback net_log_callback;
     NetLogParametersCallback attempt_net_log_callback;
     if (error != OK) {
-      net_log_callback = base::Bind(&NetLogProcTaskFailedCallback,
-                                    0, error, os_error);
-      attempt_net_log_callback = base::Bind(&NetLogProcTaskFailedCallback,
-                                            attempt_number, error, os_error);
+      net_log_callback = base::BindRepeating(&NetLogProcTaskFailedCallback, 0,
+                                             error, os_error);
+      attempt_net_log_callback = base::BindRepeating(
+          &NetLogProcTaskFailedCallback, attempt_number, error, os_error);
     } else {
       net_log_callback = results.CreateNetLogCallback();
       attempt_net_log_callback =
@@ -1237,7 +1417,7 @@
       RequestImpl* req = requests_.head()->value();
       req->RemoveFromList();
       DCHECK_EQ(this, req->job());
-      LogCancelRequest(req->source_net_log(), req->info());
+      LogCancelRequest(req->source_net_log());
       req->OnJobCancelled(this);
     }
   }
@@ -1262,7 +1442,9 @@
   }
 
   void AddRequest(RequestImpl* request) {
-    DCHECK_EQ(key_.hostname, request->info().hostname());
+    DCHECK_EQ(key_.hostname, request->request_host().host());
+
+    request->AssignJob(this);
 
     priority_tracker_.Add(request->priority());
 
@@ -1275,7 +1457,7 @@
         base::Bind(&NetLogJobAttachCallback, request->source_net_log().source(),
                    priority()));
 
-    if (!request->info().is_speculative())
+    if (!request->is_speculative())
       had_non_speculative_request_ = true;
 
     requests_.Append(request);
@@ -1284,7 +1466,7 @@
   }
 
   void ChangeRequestPriority(RequestImpl* req, RequestPriority priority) {
-    DCHECK_EQ(key_.hostname, req->info().hostname());
+    DCHECK_EQ(key_.hostname, req->request_host().host());
 
     priority_tracker_.Remove(req->priority());
     req->set_priority(priority);
@@ -1295,10 +1477,10 @@
   // Detach cancelled request. If it was the last active Request, also finishes
   // this Job.
   void CancelRequest(RequestImpl* request) {
-    DCHECK_EQ(key_.hostname, request->info().hostname());
+    DCHECK_EQ(key_.hostname, request->request_host().host());
     DCHECK(!requests_.empty());
 
-    LogCancelRequest(request->source_net_log(), request->info());
+    LogCancelRequest(request->source_net_log());
 
     priority_tracker_.Remove(request->priority());
     net_log_.AddEvent(
@@ -1352,8 +1534,9 @@
   bool ServeFromHosts() {
     DCHECK_GT(num_active_requests(), 0u);
     AddressList addr_list;
-    if (resolver_->ServeFromHosts(key(), requests_.head()->value()->info(),
-                                  &addr_list)) {
+    if (resolver_->ServeFromHosts(
+            key(), requests_.head()->value()->request_host().port(),
+            &addr_list)) {
       // This will destroy the Job.
       CompleteRequests(
           MakeCacheEntry(OK, addr_list, HostCache::Entry::SOURCE_HOSTS),
@@ -1422,8 +1605,8 @@
   AddressList MakeAddressListForRequest(const AddressList& list) const {
     if (requests_.empty())
       return list;
-    return AddressList::CopyWithPort(list,
-                                     requests_.head()->value()->info().port());
+    return AddressList::CopyWithPort(
+        list, requests_.head()->value()->request_host().port());
   }
 
   void UpdatePriority() {
@@ -1481,8 +1664,8 @@
     DCHECK(!is_dns_running());
     proc_task_ = std::make_unique<ProcTask>(
         key_, resolver_->proc_params_,
-        base::Bind(&Job::OnProcTaskComplete, base::Unretained(this),
-                   tick_clock_->NowTicks()),
+        base::BindOnce(&Job::OnProcTaskComplete, base::Unretained(this),
+                       tick_clock_->NowTicks()),
         proc_task_runner_, net_log_, tick_clock_);
 
     // Start() could be called from within Resolve(), hence it must NOT directly
@@ -1590,7 +1773,6 @@
     }
   }
 
-
   // HostResolverImpl::DnsTask::Delegate implementation:
 
   void OnDnsTaskComplete(base::TimeTicks start_time,
@@ -1770,13 +1952,17 @@
       req->RemoveFromList();
       DCHECK_EQ(this, req->job());
       // Update the net log and notify registered observers.
-      LogFinishRequest(req->source_net_log(), req->info(), entry.error());
+      LogFinishRequest(req->source_net_log(), entry.error());
       if (did_complete) {
         // Record effective total time from creation to completion.
-        RecordTotalTime(req->info().is_speculative(), false,
+        RecordTotalTime(req->is_speculative(), false /* from_cache */,
                         tick_clock_->NowTicks() - req->request_time());
       }
-      req->OnJobCompleted(this, entry.error(), entry.addresses());
+      if (entry.error() == OK) {
+        req->set_address_results(EnsurePortOnAddressList(
+            entry.addresses(), req->request_host().port()));
+      }
+      req->OnJobCompleted(this, entry.error());
 
       // Check if the resolver was destroyed as a result of running the
       // callback. If it was, we could continue, but we choose to bail.
@@ -1867,85 +2053,6 @@
 
 HostResolverImpl::ProcTaskParams::~ProcTaskParams() = default;
 
-HostResolverImpl::~HostResolverImpl() {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  // Prevent the dispatcher from starting new jobs.
-  dispatcher_->SetLimitsToZero();
-  // It's now safe for Jobs to call KillDnsTask on destruction, because
-  // OnJobComplete will not start any new jobs.
-  jobs_.clear();
-
-  NetworkChangeNotifier::RemoveIPAddressObserver(this);
-  NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
-  NetworkChangeNotifier::RemoveDNSObserver(this);
-}
-
-void HostResolverImpl::SetMaxQueuedJobs(size_t value) {
-  DCHECK_EQ(0u, dispatcher_->num_queued_jobs());
-  DCHECK_GT(value, 0u);
-  max_queued_jobs_ = value;
-}
-
-int HostResolverImpl::Resolve(const RequestInfo& info,
-                              RequestPriority priority,
-                              AddressList* addresses,
-                              CompletionOnceCallback callback,
-                              std::unique_ptr<Request>* out_req,
-                              const NetLogWithSource& source_net_log) {
-  DCHECK(addresses);
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK_EQ(false, callback.is_null());
-  DCHECK(out_req);
-
-  LogStartRequest(source_net_log, info);
-
-  Key key;
-  int rv = ResolveHelper(info, false, nullptr, source_net_log, addresses, &key);
-  if (rv != ERR_DNS_CACHE_MISS) {
-    LogFinishRequest(source_net_log, info, rv);
-    RecordTotalTime(info.is_speculative(), true, base::TimeDelta());
-    return rv;
-  }
-
-  // Next we need to attach our request to a "job". This job is responsible for
-  // calling "getaddrinfo(hostname)" on a worker thread.
-
-  auto jobit = jobs_.find(key);
-  Job* job;
-  if (jobit == jobs_.end()) {
-    auto new_job =
-        std::make_unique<Job>(weak_ptr_factory_.GetWeakPtr(), key, priority,
-                              proc_task_runner_, source_net_log, tick_clock_);
-    job = new_job.get();
-    new_job->Schedule(false);
-
-    // Check for queue overflow.
-    if (dispatcher_->num_queued_jobs() > max_queued_jobs_) {
-      Job* evicted = static_cast<Job*>(dispatcher_->EvictOldestLowest());
-      DCHECK(evicted);
-      evicted->OnEvicted();
-      if (evicted == new_job.get()) {
-        rv = ERR_HOST_RESOLVER_QUEUE_TOO_LARGE;
-        LogFinishRequest(source_net_log, info, rv);
-        return rv;
-      }
-    }
-    jobs_[key] = std::move(new_job);
-  } else {
-    job = jobit->second.get();
-  }
-
-  // Can't complete synchronously. Create and attach request.
-  auto req = std::make_unique<RequestImpl>(source_net_log, info, priority,
-                                           std::move(callback), addresses, job,
-                                           tick_clock_->NowTicks());
-  job->AddRequest(req.get());
-  *out_req = std::move(req);
-
-  // Completion happens during Job::CompleteRequests().
-  return ERR_IO_PENDING;
-}
-
 HostResolverImpl::HostResolverImpl(const Options& options, NetLog* net_log)
     : max_queued_jobs_(0),
       proc_params_(NULL, options.max_retry_attempts),
@@ -2002,79 +2109,74 @@
   fallback_to_proctask_ = !ConfigureAsyncDnsNoFallbackFieldTrial();
 }
 
-void HostResolverImpl::SetHaveOnlyLoopbackAddresses(bool result) {
-  if (result) {
-    additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY;
-  } else {
-    additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY;
-  }
+HostResolverImpl::~HostResolverImpl() {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  // Prevent the dispatcher from starting new jobs.
+  dispatcher_->SetLimitsToZero();
+  // It's now safe for Jobs to call KillDnsTask on destruction, because
+  // OnJobComplete will not start any new jobs.
+  jobs_.clear();
+
+  NetworkChangeNotifier::RemoveIPAddressObserver(this);
+  NetworkChangeNotifier::RemoveConnectionTypeObserver(this);
+  NetworkChangeNotifier::RemoveDNSObserver(this);
 }
 
-void HostResolverImpl::SetTaskRunnerForTesting(
-    scoped_refptr<base::TaskRunner> task_runner) {
-  proc_task_runner_ = std::move(task_runner);
+void HostResolverImpl::SetDnsClient(std::unique_ptr<DnsClient> dns_client) {
+  // DnsClient and config must be updated before aborting DnsTasks, since doing
+  // so may start new jobs.
+  dns_client_ = std::move(dns_client);
+  if (dns_client_ && !dns_client_->GetConfig() &&
+      num_dns_failures_ < kMaximumDnsFailures) {
+    DnsConfig dns_config;
+    NetworkChangeNotifier::GetDnsConfig(&dns_config);
+    dns_config.dns_over_https_servers = dns_over_https_servers_;
+    dns_client_->SetConfig(dns_config);
+    num_dns_failures_ = 0;
+    if (dns_client_->GetConfig())
+      UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true);
+  }
+
+  AbortDnsTasks();
 }
 
-int HostResolverImpl::ResolveHelper(const RequestInfo& info,
-                                    bool allow_stale,
-                                    HostCache::EntryStaleness* stale_info,
-                                    const NetLogWithSource& source_net_log,
-                                    AddressList* addresses,
-                                    Key* key) {
-  IPAddress ip_address;
-  IPAddress* ip_address_ptr = nullptr;
-  if (ip_address.AssignFromIPLiteral(info.hostname())) {
-    ip_address_ptr = &ip_address;
-  } else {
-    // Check that the caller supplied a valid hostname to resolve.
-    if (!IsValidDNSDomain(info.hostname()))
-      return ERR_NAME_NOT_RESOLVED;
+std::unique_ptr<HostResolver::ResolveHostRequest>
+HostResolverImpl::CreateRequest(const HostPortPair& host,
+                                const NetLogWithSource& net_log) {
+  return std::make_unique<RequestImpl>(
+      net_log, host, false /* is_speculative */,
+      RequestPriority::DEFAULT_PRIORITY, weak_ptr_factory_.GetWeakPtr());
+}
+
+int HostResolverImpl::Resolve(const RequestInfo& info,
+                              RequestPriority priority,
+                              AddressList* addresses,
+                              CompletionOnceCallback callback,
+                              std::unique_ptr<Request>* out_req,
+                              const NetLogWithSource& source_net_log) {
+  DCHECK(addresses);
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  DCHECK(callback);
+  DCHECK(out_req);
+
+  auto request = std::make_unique<RequestImpl>(
+      source_net_log, info.host_port_pair(), info.address_family(),
+      info.host_resolver_flags(), info.allow_cached_response(),
+      info.is_speculative(), priority, weak_ptr_factory_.GetWeakPtr());
+  auto wrapped_request =
+      std::make_unique<LegacyRequestImpl>(std::move(request));
+
+  int rv = wrapped_request->Start();
+
+  if (rv == OK) {
+    DCHECK(wrapped_request->inner_request().GetAddressResults());
+    *addresses = wrapped_request->inner_request().GetAddressResults().value();
+  } else if (rv == ERR_IO_PENDING) {
+    wrapped_request->AssignCallback(std::move(callback), addresses);
+    *out_req = std::move(wrapped_request);
   }
 
-  // Build a key that identifies the request in the cache and in the
-  // outstanding jobs map.
-  *key = GetEffectiveKeyForRequest(info, ip_address_ptr, source_net_log);
-
-  DCHECK(allow_stale == !!stale_info);
-  // The result of |getaddrinfo| for empty hosts is inconsistent across systems.
-  // On Windows it gives the default interface's address, whereas on Linux it
-  // gives an error. We will make it fail on all platforms for consistency.
-  if (info.hostname().empty() || info.hostname().size() > kMaxHostLength) {
-    MakeNotStale(stale_info);
-    return ERR_NAME_NOT_RESOLVED;
-  }
-
-  int net_error = ERR_UNEXPECTED;
-  if (ResolveAsIP(*key, info, ip_address_ptr, &net_error, addresses)) {
-    MakeNotStale(stale_info);
-    return net_error;
-  }
-
-  // Special-case localhost names, as per the recommendations in
-  // https://tools.ietf.org/html/draft-west-let-localhost-be-localhost.
-  if (ServeLocalhost(*key, info, addresses)) {
-    MakeNotStale(stale_info);
-    return OK;
-  }
-
-  if (ServeFromCache(*key, info, &net_error, addresses, allow_stale,
-                     stale_info)) {
-    source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_CACHE_HIT,
-                            addresses->CreateNetLogCallback());
-    // |ServeFromCache()| will set |*stale_info| as needed.
-    return net_error;
-  }
-
-  // TODO(szym): Do not do this if nsswitch.conf instructs not to.
-  // http://crbug.com/117655
-  if (ServeFromHosts(*key, info, addresses)) {
-    source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_HOSTS_HIT,
-                            addresses->CreateNetLogCallback());
-    MakeNotStale(stale_info);
-    return OK;
-  }
-
-  return ERR_DNS_CACHE_MISS;
+  return rv;
 }
 
 int HostResolverImpl::ResolveFromCache(const RequestInfo& info,
@@ -2087,9 +2189,33 @@
   LogStartRequest(source_net_log, info);
 
   Key key;
-  int rv = ResolveHelper(info, false, nullptr, source_net_log, addresses, &key);
+  int rv = ResolveLocally(
+      info.host_port_pair(), info.address_family(), info.host_resolver_flags(),
+      info.allow_cached_response(), false /* allow_stale */,
+      nullptr /* stale_info */, source_net_log, addresses, &key);
 
-  LogFinishRequest(source_net_log, info, rv);
+  LogFinishRequest(source_net_log, rv);
+  return rv;
+}
+
+int HostResolverImpl::ResolveStaleFromCache(
+    const RequestInfo& info,
+    AddressList* addresses,
+    HostCache::EntryStaleness* stale_info,
+    const NetLogWithSource& source_net_log) {
+  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+  DCHECK(addresses);
+  DCHECK(stale_info);
+
+  // Update the net log and notify registered observers.
+  LogStartRequest(source_net_log, info);
+
+  Key key;
+  int rv = ResolveLocally(info.host_port_pair(), info.address_family(),
+                          info.host_resolver_flags(),
+                          info.allow_cached_response(), true /* allow_stale */,
+                          stale_info, source_net_log, addresses, &key);
+  LogFinishRequest(source_net_log, rv);
   return rv;
 }
 
@@ -2131,25 +2257,6 @@
   return dns_config->ToValue();
 }
 
-int HostResolverImpl::ResolveStaleFromCache(
-    const RequestInfo& info,
-    AddressList* addresses,
-    HostCache::EntryStaleness* stale_info,
-    const NetLogWithSource& source_net_log) {
-  DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  DCHECK(addresses);
-  DCHECK(stale_info);
-
-  // Update the net log and notify registered observers.
-  LogStartRequest(source_net_log, info);
-
-  Key key;
-  int rv =
-      ResolveHelper(info, true, stale_info, source_net_log, addresses, &key);
-  LogFinishRequest(source_net_log, info, rv);
-  return rv;
-}
-
 size_t HostResolverImpl::LastRestoredCacheSize() const {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
@@ -2177,10 +2284,15 @@
   }
 }
 
-void HostResolverImpl::SetTickClockForTesting(
-    const base::TickClock* tick_clock) {
-  tick_clock_ = tick_clock;
-  cache_->set_tick_clock_for_testing(tick_clock);
+void HostResolverImpl::AddDnsOverHttpsServer(std::string spec, bool use_post) {
+  GURL url(spec);
+  if (!url.SchemeIs("https"))
+    return;
+
+  dns_over_https_servers_.emplace_back(url, use_post);
+
+  if (dns_client_.get() && dns_client_->GetConfig())
+    UpdateDNSConfig(true);
 }
 
 void HostResolverImpl::ClearDnsOverHttpsServers() {
@@ -2193,17 +2305,6 @@
     UpdateDNSConfig(true);
 }
 
-void HostResolverImpl::AddDnsOverHttpsServer(std::string spec, bool use_post) {
-  GURL url(spec);
-  if (!url.SchemeIs("https"))
-    return;
-
-  dns_over_https_servers_.emplace_back(url, use_post);
-
-  if (dns_client_.get() && dns_client_->GetConfig())
-    UpdateDNSConfig(true);
-}
-
 const std::vector<DnsConfig::DnsOverHttpsServerConfig>*
 HostResolverImpl::GetDnsOverHttpsServersForTesting() const {
   if (dns_over_https_servers_.empty())
@@ -2211,8 +2312,165 @@
   return &dns_over_https_servers_;
 }
 
+void HostResolverImpl::SetTickClockForTesting(
+    const base::TickClock* tick_clock) {
+  tick_clock_ = tick_clock;
+  cache_->set_tick_clock_for_testing(tick_clock);
+}
+
+void HostResolverImpl::SetMaxQueuedJobsForTesting(size_t value) {
+  DCHECK_EQ(0u, dispatcher_->num_queued_jobs());
+  DCHECK_GE(value, 0u);
+  max_queued_jobs_ = value;
+}
+
+void HostResolverImpl::SetHaveOnlyLoopbackAddresses(bool result) {
+  if (result) {
+    additional_resolver_flags_ |= HOST_RESOLVER_LOOPBACK_ONLY;
+  } else {
+    additional_resolver_flags_ &= ~HOST_RESOLVER_LOOPBACK_ONLY;
+  }
+}
+
+void HostResolverImpl::SetTaskRunnerForTesting(
+    scoped_refptr<base::TaskRunner> task_runner) {
+  proc_task_runner_ = std::move(task_runner);
+}
+
+int HostResolverImpl::Resolve(RequestImpl* request) {
+  // Request should not yet have a scheduled Job.
+  DCHECK(!request->job());
+  // Request may only be resolved once.
+  DCHECK(!request->complete());
+
+  request->set_request_time(tick_clock_->NowTicks());
+
+  LogStartRequest(request->source_net_log(), request->request_host());
+
+  AddressList addresses;
+  Key key;
+  int rv = ResolveLocally(request->request_host(), request->address_family(),
+                          request->host_resolver_flags(),
+                          request->allow_cached_response(),
+                          false /* allow_stale */, nullptr /* stale_info */,
+                          request->source_net_log(), &addresses, &key);
+  if (rv == OK) {
+    request->set_address_results(
+        EnsurePortOnAddressList(addresses, request->request_host().port()));
+  }
+  if (rv != ERR_DNS_CACHE_MISS) {
+    LogFinishRequest(request->source_net_log(), rv);
+    RecordTotalTime(request->is_speculative(), true /* from_cache */,
+                    base::TimeDelta());
+    return rv;
+  }
+
+  rv = CreateAndStartJob(key, request);
+  // At this point, expect only async or errors.
+  DCHECK_NE(OK, rv);
+
+  return rv;
+}
+
+int HostResolverImpl::ResolveLocally(const HostPortPair& host,
+                                     AddressFamily requested_address_family,
+                                     HostResolverFlags flags,
+                                     bool allow_cache,
+                                     bool allow_stale,
+                                     HostCache::EntryStaleness* stale_info,
+                                     const NetLogWithSource& source_net_log,
+                                     AddressList* addresses,
+                                     Key* key) {
+  IPAddress ip_address;
+  IPAddress* ip_address_ptr = nullptr;
+  if (ip_address.AssignFromIPLiteral(host.host())) {
+    ip_address_ptr = &ip_address;
+  } else {
+    // Check that the caller supplied a valid hostname to resolve.
+    if (!IsValidDNSDomain(host.host()))
+      return ERR_NAME_NOT_RESOLVED;
+  }
+
+  // Build a key that identifies the request in the cache and in the
+  // outstanding jobs map.
+  *key = GetEffectiveKeyForRequest(host.host(), requested_address_family, flags,
+                                   ip_address_ptr, source_net_log);
+
+  DCHECK(allow_stale == !!stale_info);
+  // The result of |getaddrinfo| for empty hosts is inconsistent across systems.
+  // On Windows it gives the default interface's address, whereas on Linux it
+  // gives an error. We will make it fail on all platforms for consistency.
+  if (host.host().empty() || host.host().size() > kMaxHostLength) {
+    MakeNotStale(stale_info);
+    return ERR_NAME_NOT_RESOLVED;
+  }
+
+  int net_error = ERR_UNEXPECTED;
+  if (ResolveAsIP(*key, host.port(), ip_address_ptr, &net_error, addresses)) {
+    MakeNotStale(stale_info);
+    return net_error;
+  }
+
+  // Special-case localhost names, as per the recommendations in
+  // https://tools.ietf.org/html/draft-west-let-localhost-be-localhost.
+  if (ServeLocalhost(*key, host.port(), addresses)) {
+    MakeNotStale(stale_info);
+    return OK;
+  }
+
+  if (allow_cache && ServeFromCache(*key, host.port(), &net_error, addresses,
+                                    allow_stale, stale_info)) {
+    source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_CACHE_HIT,
+                            addresses->CreateNetLogCallback());
+    // |ServeFromCache()| will set |*stale_info| as needed.
+    return net_error;
+  }
+
+  // TODO(szym): Do not do this if nsswitch.conf instructs not to.
+  // http://crbug.com/117655
+  if (ServeFromHosts(*key, host.port(), addresses)) {
+    source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_HOSTS_HIT,
+                            addresses->CreateNetLogCallback());
+    MakeNotStale(stale_info);
+    return OK;
+  }
+
+  return ERR_DNS_CACHE_MISS;
+}
+
+int HostResolverImpl::CreateAndStartJob(const Key& key, RequestImpl* request) {
+  auto jobit = jobs_.find(key);
+  Job* job;
+  if (jobit == jobs_.end()) {
+    auto new_job = std::make_unique<Job>(
+        weak_ptr_factory_.GetWeakPtr(), key, request->priority(),
+        proc_task_runner_, request->source_net_log(), tick_clock_);
+    job = new_job.get();
+    new_job->Schedule(false);
+
+    // Check for queue overflow.
+    if (dispatcher_->num_queued_jobs() > max_queued_jobs_) {
+      Job* evicted = static_cast<Job*>(dispatcher_->EvictOldestLowest());
+      DCHECK(evicted);
+      evicted->OnEvicted();
+      if (evicted == new_job.get()) {
+        LogFinishRequest(request->source_net_log(),
+                         ERR_HOST_RESOLVER_QUEUE_TOO_LARGE);
+        return ERR_HOST_RESOLVER_QUEUE_TOO_LARGE;
+      }
+    }
+    jobs_[key] = std::move(new_job);
+  } else {
+    job = jobit->second.get();
+  }
+
+  // Can't complete synchronously. Attach request and job to each other.
+  job->AddRequest(request);
+  return ERR_IO_PENDING;
+}
+
 bool HostResolverImpl::ResolveAsIP(const Key& key,
-                                   const RequestInfo& info,
+                                   uint16_t host_port,
                                    const IPAddress* ip_address,
                                    int* net_error,
                                    AddressList* addresses) {
@@ -2228,7 +2486,7 @@
     // Don't return IPv6 addresses for IPv4 queries, and vice versa.
     *net_error = ERR_NAME_NOT_RESOLVED;
   } else {
-    *addresses = AddressList::CreateFromIPAddress(*ip_address, info.port());
+    *addresses = AddressList::CreateFromIPAddress(*ip_address, host_port);
     if (key.host_resolver_flags & HOST_RESOLVER_CANONNAME)
       addresses->SetDefaultCanonicalName();
   }
@@ -2236,7 +2494,7 @@
 }
 
 bool HostResolverImpl::ServeFromCache(const Key& key,
-                                      const RequestInfo& info,
+                                      uint16_t host_port,
                                       int* net_error,
                                       AddressList* addresses,
                                       bool allow_stale,
@@ -2244,7 +2502,7 @@
   DCHECK(addresses);
   DCHECK(net_error);
   DCHECK(allow_stale == !!stale_info);
-  if (!info.allow_cached_response() || !cache_.get())
+  if (!cache_.get())
     return false;
 
   const HostCache::Entry* cache_entry;
@@ -2259,13 +2517,13 @@
   if (*net_error == OK) {
     if (cache_entry->has_ttl())
       RecordTTL(cache_entry->ttl());
-    *addresses = EnsurePortOnAddressList(cache_entry->addresses(), info.port());
+    *addresses = EnsurePortOnAddressList(cache_entry->addresses(), host_port);
   }
   return true;
 }
 
 bool HostResolverImpl::ServeFromHosts(const Key& key,
-                                      const RequestInfo& info,
+                                      uint16_t host_port,
                                       AddressList* addresses) {
   DCHECK(addresses);
   if (!HaveDnsConfig())
@@ -2287,7 +2545,7 @@
     DnsHosts::const_iterator it = hosts.find(
         DnsHostsKey(hostname, ADDRESS_FAMILY_IPV6));
     if (it != hosts.end())
-      addresses->push_back(IPEndPoint(it->second, info.port()));
+      addresses->push_back(IPEndPoint(it->second, host_port));
   }
 
   if (key.address_family == ADDRESS_FAMILY_IPV4 ||
@@ -2295,7 +2553,7 @@
     DnsHosts::const_iterator it = hosts.find(
         DnsHostsKey(hostname, ADDRESS_FAMILY_IPV4));
     if (it != hosts.end())
-      addresses->push_back(IPEndPoint(it->second, info.port()));
+      addresses->push_back(IPEndPoint(it->second, host_port));
   }
 
   // If got only loopback addresses and the family was restricted, resolve
@@ -2307,16 +2565,16 @@
     new_key.address_family = ADDRESS_FAMILY_UNSPECIFIED;
     new_key.host_resolver_flags &=
         ~HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
-    return ServeFromHosts(new_key, info, addresses);
+    return ServeFromHosts(new_key, host_port, addresses);
   }
   return !addresses->empty();
 }
 
 bool HostResolverImpl::ServeLocalhost(const Key& key,
-                                      const RequestInfo& info,
+                                      uint16_t host_port,
                                       AddressList* addresses) {
   AddressList resolved_addresses;
-  if (!ResolveLocalHostname(key.hostname, info.port(), &resolved_addresses))
+  if (!ResolveLocalHostname(key.hostname, host_port, &resolved_addresses))
     return false;
 
   addresses->clear();
@@ -2361,12 +2619,13 @@
 }
 
 HostResolverImpl::Key HostResolverImpl::GetEffectiveKeyForRequest(
-    const RequestInfo& info,
+    const std::string& hostname,
+    AddressFamily requested_address_family,
+    HostResolverFlags flags,
     const IPAddress* ip_address,
     const NetLogWithSource& net_log) {
-  HostResolverFlags effective_flags =
-      info.host_resolver_flags() | additional_resolver_flags_;
-  AddressFamily effective_address_family = info.address_family();
+  HostResolverFlags effective_flags = flags | additional_resolver_flags_;
+  AddressFamily effective_address_family = requested_address_family;
 
   if (effective_address_family == ADDRESS_FAMILY_UNSPECIFIED &&
       // When resolving IPv4 literals, there's no need to probe for IPv6.
@@ -2380,7 +2639,7 @@
     effective_flags |= HOST_RESOLVER_DEFAULT_FAMILY_SET_DUE_TO_NO_IPV6;
   }
 
-  return Key(info.hostname(), effective_address_family, effective_flags);
+  return Key(hostname, effective_address_family, effective_flags);
 }
 
 bool HostResolverImpl::IsIPv6Reachable(const NetLogWithSource& net_log) {
@@ -2624,24 +2883,6 @@
                            std::abs(net_error));
 }
 
-void HostResolverImpl::SetDnsClient(std::unique_ptr<DnsClient> dns_client) {
-  // DnsClient and config must be updated before aborting DnsTasks, since doing
-  // so may start new jobs.
-  dns_client_ = std::move(dns_client);
-  if (dns_client_ && !dns_client_->GetConfig() &&
-      num_dns_failures_ < kMaximumDnsFailures) {
-    DnsConfig dns_config;
-    NetworkChangeNotifier::GetDnsConfig(&dns_config);
-    dns_config.dns_over_https_servers = dns_over_https_servers_;
-    dns_client_->SetConfig(dns_config);
-    num_dns_failures_ = 0;
-    if (dns_client_->GetConfig())
-      UMA_HISTOGRAM_BOOLEAN("AsyncDNS.DnsClientEnabled", true);
-  }
-
-  AbortDnsTasks();
-}
-
 HostResolverImpl::RequestImpl::~RequestImpl() {
   if (job_)
     job_->CancelRequest(this);
diff --git a/net/dns/host_resolver_impl.h b/net/dns/host_resolver_impl.h
index 653a224..eea6dd5c6 100644
--- a/net/dns/host_resolver_impl.h
+++ b/net/dns/host_resolver_impl.h
@@ -10,6 +10,9 @@
 
 #include <map>
 #include <memory>
+#include <set>
+#include <string>
+#include <vector>
 
 #include "base/memory/weak_ptr.h"
 #include "base/time/time.h"
@@ -125,10 +128,6 @@
   // be called.
   ~HostResolverImpl() override;
 
-  // Configures maximum number of Jobs in the queue. Exposed for testing.
-  // Only allowed when the queue is empty.
-  void SetMaxQueuedJobs(size_t value);
-
   // Set the DnsClient to be used for resolution. In case of failure, the
   // HostResolverProc from ProcTaskParams will be queried. If the DnsClient is
   // not pre-configured with a valid DnsConfig, a new config is fetched from
@@ -136,6 +135,9 @@
   void SetDnsClient(std::unique_ptr<DnsClient> dns_client);
 
   // HostResolver methods:
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override;
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
@@ -179,6 +181,10 @@
 
   void SetTickClockForTesting(const base::TickClock* tick_clock);
 
+  // Configures maximum number of Jobs in the queue. Exposed for testing.
+  // Only allowed when the queue is empty.
+  void SetMaxQueuedJobsForTesting(size_t value);
+
  protected:
   // Callback from HaveOnlyLoopbackAddresses probe.
   void SetHaveOnlyLoopbackAddresses(bool result);
@@ -193,6 +199,7 @@
   class LoopbackProbeJob;
   class DnsTask;
   class RequestImpl;
+  class LegacyRequestImpl;
   using Key = HostCache::Key;
   using JobMap = std::map<Key, std::unique_ptr<Job>>;
 
@@ -200,11 +207,14 @@
   // ProcTask) before the DnsClient is disabled until the next DNS change.
   static const unsigned kMaximumDnsFailures;
 
-  // Helper used by |Resolve()| and |ResolveFromCache()|.  Performs IP
-  // literal, cache and HOSTS lookup (if enabled), returns OK if successful,
-  // ERR_NAME_NOT_RESOLVED if either hostname is invalid or IP literal is
-  // incompatible, ERR_DNS_CACHE_MISS if entry was not found in cache and
-  // HOSTS and is not localhost.
+  // Attempts host resolution for |request|. Generally only expected to be
+  // called from RequestImpl::Start().
+  int Resolve(RequestImpl* request);
+
+  // Attempts host resolution using fast local sources: IP literal resolution,
+  // cache lookup, HOSTS lookup (if enabled), and localhost. Returns OK if
+  // successful, ERR_NAME_NOT_RESOLVED if input is invalid, or
+  // ERR_DNS_CACHE_MISS if the host could not be resolved using local sources.
   //
   // On success, the resulting addresses are written to |addresses|.
   //
@@ -217,17 +227,25 @@
   //
   // If |allow_stale| is false, then stale cache entries will not be returned,
   // and |stale_info| must be null.
-  int ResolveHelper(const RequestInfo& info,
-                    bool allow_stale,
-                    HostCache::EntryStaleness* stale_info,
-                    const NetLogWithSource& request_net_log,
-                    AddressList* addresses,
-                    Key* key);
+  int ResolveLocally(const HostPortPair& host,
+                     AddressFamily requested_address_family,
+                     HostResolverFlags flags,
+                     bool allow_cache,
+                     bool allow_stale,
+                     HostCache::EntryStaleness* stale_info,
+                     const NetLogWithSource& request_net_log,
+                     AddressList* addresses,
+                     Key* key);
+
+  // Attempts to create and start a Job to asynchronously attempt to resolve
+  // |key|. On success, returns ERR_IO_PENDING and attaches the Job to
+  // |request|. On error, marks |request| completed and returns the error.
+  int CreateAndStartJob(const Key& key, RequestImpl* request);
 
   // Tries to resolve |key| as an IP, returns true and sets |net_error| if
   // succeeds, returns false otherwise.
   bool ResolveAsIP(const Key& key,
-                   const RequestInfo& info,
+                   uint16_t host_port,
                    const IPAddress* ip_address,
                    int* net_error,
                    AddressList* addresses);
@@ -243,7 +261,7 @@
   // If |allow_stale| is false, then stale cache entries will not be returned,
   // and |stale_info| must be null.
   bool ServeFromCache(const Key& key,
-                      const RequestInfo& info,
+                      uint16_t host_port,
                       int* net_error,
                       AddressList* addresses,
                       bool allow_stale,
@@ -252,19 +270,21 @@
   // If we have a DnsClient with a valid DnsConfig, and |key| is found in the
   // HOSTS file, returns true and fills |addresses|. Otherwise returns false.
   bool ServeFromHosts(const Key& key,
-                      const RequestInfo& info,
+                      uint16_t host_port,
                       AddressList* addresses);
 
   // If |key| is for a localhost name (RFC 6761), returns true and fills
   // |addresses| with the loopback IP. Otherwise returns false.
   bool ServeLocalhost(const Key& key,
-                      const RequestInfo& info,
+                      uint16_t host_port,
                       AddressList* addresses);
 
   // Returns the (hostname, address_family) key to use for |info|, choosing an
   // "effective" address family by inheriting the resolver's default address
   // family when the request leaves it unspecified.
-  Key GetEffectiveKeyForRequest(const RequestInfo& info,
+  Key GetEffectiveKeyForRequest(const std::string& hostname,
+                                AddressFamily requested_address_family,
+                                HostResolverFlags flags,
                                 const IPAddress* ip_address,
                                 const NetLogWithSource& net_log);
 
diff --git a/net/dns/host_resolver_impl_unittest.cc b/net/dns/host_resolver_impl_unittest.cc
index a9f458d1..6b05fbe 100644
--- a/net/dns/host_resolver_impl_unittest.cc
+++ b/net/dns/host_resolver_impl_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <string>
 #include <tuple>
+#include <utility>
 #include <vector>
 
 #include "base/auto_reset.h"
@@ -21,6 +22,7 @@
 #include "base/strings/stringprintf.h"
 #include "base/synchronization/condition_variable.h"
 #include "base/synchronization/lock.h"
+#include "base/test/bind_test_util.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/test/test_timeouts.h"
 #include "base/threading/thread_restrictions.h"
@@ -213,6 +215,68 @@
   return base::ContainsValue(list, IPEndPoint(ip, port));
 }
 
+class ResolveHostResponseHelper {
+ public:
+  using Callback =
+      base::OnceCallback<void(CompletionOnceCallback completion_callback,
+                              int error)>;
+
+  ResolveHostResponseHelper() {}
+  explicit ResolveHostResponseHelper(
+      std::unique_ptr<HostResolver::ResolveHostRequest> request)
+      : request_(std::move(request)) {
+    result_error_ = request_->Start(base::BindOnce(
+        &ResolveHostResponseHelper::OnComplete, base::Unretained(this)));
+  }
+  ResolveHostResponseHelper(
+      std::unique_ptr<HostResolver::ResolveHostRequest> request,
+      Callback custom_callback)
+      : request_(std::move(request)) {
+    result_error_ = request_->Start(
+        base::BindOnce(std::move(custom_callback),
+                       base::BindOnce(&ResolveHostResponseHelper::OnComplete,
+                                      base::Unretained(this))));
+  }
+
+  bool complete() const { return result_error_ != ERR_IO_PENDING; }
+  int result_error() {
+    WaitForCompletion();
+    return result_error_;
+  }
+
+  HostResolver::ResolveHostRequest* request() { return request_.get(); }
+
+  void CancelRequest() {
+    DCHECK(request_);
+    DCHECK(!complete());
+
+    request_ = nullptr;
+  }
+
+  void OnComplete(int error) {
+    DCHECK(!complete());
+    result_error_ = error;
+
+    run_loop_.Quit();
+  }
+
+ private:
+  void WaitForCompletion() {
+    DCHECK(request_);
+    if (complete()) {
+      return;
+    }
+    run_loop_.Run();
+    DCHECK(complete());
+  }
+
+  std::unique_ptr<HostResolver::ResolveHostRequest> request_;
+  int result_error_ = ERR_IO_PENDING;
+  base::RunLoop run_loop_;
+
+  DISALLOW_COPY_AND_ASSIGN(ResolveHostResponseHelper);
+};
+
 // A wrapper for requests to a HostResolver.
 class Request {
  public:
@@ -512,6 +576,11 @@
   EXPECT_TRUE(HasEndpoint(localhost_ipv6, addresses));
 }
 
+// Used to bind the unique_ptr<Request>* into callbacks.
+struct RequestHolder {
+  std::unique_ptr<HostResolver::Request> request;
+};
+
 }  // namespace
 
 class HostResolverImplTest : public TestWithScopedTaskEnvironment {
@@ -521,8 +590,8 @@
   HostResolverImplTest() : proc_(new MockHostResolverProc()) {}
 
   void CreateResolver() {
-    CreateResolverWithLimitsAndParams(kMaxJobs,
-                                      DefaultParams(proc_.get()));
+    CreateResolverWithLimitsAndParams(kMaxJobs, DefaultParams(proc_.get()),
+                                      true /* ipv6_reachable */);
   }
 
   // This HostResolverImpl will only allow 1 outstanding resolve at a time and
@@ -530,7 +599,7 @@
   void CreateSerialResolver() {
     HostResolverImpl::ProcTaskParams params = DefaultParams(proc_.get());
     params.max_retry_attempts = 0u;
-    CreateResolverWithLimitsAndParams(1u, params);
+    CreateResolverWithLimitsAndParams(1u, params, true /* ipv6_reachable */);
   }
 
  protected:
@@ -569,10 +638,11 @@
 
   virtual void CreateResolverWithLimitsAndParams(
       size_t max_concurrent_resolves,
-      const HostResolverImpl::ProcTaskParams& params) {
+      const HostResolverImpl::ProcTaskParams& params,
+      bool ipv6_reachable) {
     HostResolverImpl::Options options = DefaultOptions();
     options.max_concurrent_resolves = max_concurrent_resolves;
-    resolver_.reset(new TestHostResolverImpl(options, NULL));
+    resolver_.reset(new TestHostResolverImpl(options, NULL, ipv6_reachable));
     resolver_->set_proc_params_for_test(params);
   }
 
@@ -645,6 +715,13 @@
     resolver_->GetHostCache()->OnNetworkChange();
   }
 
+  IPEndPoint CreateExpected(const std::string& ip_literal, uint16_t port) {
+    IPAddress ip;
+    bool result = ip.AssignFromIPLiteral(ip_literal);
+    DCHECK(result);
+    return IPEndPoint(ip, port);
+  }
+
   scoped_refptr<MockHostResolverProc> proc_;
   std::unique_ptr<HostResolverImpl> resolver_;
   std::vector<std::unique_ptr<Request>> requests_;
@@ -664,6 +741,20 @@
   EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname);
 }
 
+TEST_F(HostResolverImplTest, AsynchronousLookup_ResolveHost) {
+  proc_->AddRuleForAllFamilies("just.testing", "192.168.1.42");
+  proc_->SignalMultiple(1u);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("just.testing", 80), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.1.42", 80)));
+
+  EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname);
+}
+
 TEST_F(HostResolverImplTest, LocalhostIPV4IPV6Lookup) {
   Request* req1 = CreateRequest("localhost6", 80, MEDIUM, ADDRESS_FAMILY_IPV4);
   EXPECT_THAT(req1->Resolve(), IsOk());
@@ -714,6 +805,19 @@
   EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname);
 }
 
+TEST_F(HostResolverImplTest, EmptyListMeansNameNotResolved_ResolveHost) {
+  proc_->AddRuleForAllFamilies("just.testing", "");
+  proc_->SignalMultiple(1u);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("just.testing", 80), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+
+  EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname);
+}
+
 TEST_F(HostResolverImplTest, FailedAsynchronousLookup) {
   proc_->AddRuleForAllFamilies(std::string(),
                                "0.0.0.0");  // Default to failures.
@@ -729,6 +833,23 @@
   EXPECT_THAT(req->ResolveFromCache(), IsError(ERR_DNS_CACHE_MISS));
 }
 
+TEST_F(HostResolverImplTest, FailedAsynchronousLookup_ResolveHost) {
+  proc_->AddRuleForAllFamilies(std::string(),
+                               "0.0.0.0");  // Default to failures.
+  proc_->SignalMultiple(1u);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("just.testing", 80), NetLogWithSource()));
+  EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+
+  EXPECT_EQ("just.testing", proc_->GetCaptureList()[0].hostname);
+
+  // Also test that the error is not cached.
+  Request* req = CreateRequest("just.testing", 80);
+  EXPECT_THAT(req->ResolveFromCache(), IsError(ERR_DNS_CACHE_MISS));
+}
+
 TEST_F(HostResolverImplTest, AbortedAsynchronousLookup) {
   Request* req0 = CreateRequest("just.testing", 80);
   EXPECT_THAT(req0->Resolve(), IsError(ERR_IO_PENDING));
@@ -753,6 +874,30 @@
   EXPECT_FALSE(req0->completed());
 }
 
+TEST_F(HostResolverImplTest, AbortedAsynchronousLookup_ResolveHost) {
+  ResolveHostResponseHelper response0(resolver_->CreateRequest(
+      HostPortPair("just.testing", 80), NetLogWithSource()));
+  ASSERT_FALSE(response0.complete());
+  ASSERT_TRUE(proc_->WaitFor(1u));
+
+  // Resolver is destroyed while job is running on WorkerPool.
+  resolver_.reset();
+
+  proc_->SignalAll();
+
+  // To ensure there was no spurious callback, complete with a new resolver.
+  CreateResolver();
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("just.testing", 80), NetLogWithSource()));
+
+  proc_->SignalMultiple(2u);
+
+  EXPECT_THAT(response1.result_error(), IsOk());
+
+  // This request was canceled.
+  EXPECT_FALSE(response0.complete());
+}
+
 #if defined(THREAD_SANITIZER)
 // Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
 #define MAYBE_NumericIPv4Address DISABLED_NumericIPv4Address
@@ -769,6 +914,22 @@
 
 #if defined(THREAD_SANITIZER)
 // Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
+#define MAYBE_NumericIPv4Address_ResolveHost \
+  DISABLED_NumericIPv4Address_ResolveHost
+#else
+#define MAYBE_NumericIPv4Address_ResolveHost NumericIPv4Address_ResolveHost
+#endif
+TEST_F(HostResolverImplTest, MAYBE_NumericIPv4Address_ResolveHost) {
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("127.1.2.3", 5555), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("127.1.2.3", 5555)));
+}
+
+#if defined(THREAD_SANITIZER)
+// Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
 #define MAYBE_NumericIPv6Address DISABLED_NumericIPv6Address
 #else
 #define MAYBE_NumericIPv6Address NumericIPv6Address
@@ -784,6 +945,24 @@
 
 #if defined(THREAD_SANITIZER)
 // Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
+#define MAYBE_NumericIPv6Address_ResolveHost \
+  DISABLED_NumericIPv6Address_ResolveHost
+#else
+#define MAYBE_NumericIPv6Address_ResolveHost NumericIPv6Address_ResolveHost
+#endif
+TEST_F(HostResolverImplTest, MAYBE_NumericIPv6Address_ResolveHost) {
+  // Resolve a plain IPv6 address.  Don't worry about [brackets], because
+  // the caller should have removed them.
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("2001:db8::1", 5555), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("2001:db8::1", 5555)));
+}
+
+#if defined(THREAD_SANITIZER)
+// Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
 #define MAYBE_EmptyHost DISABLED_EmptyHost
 #else
 #define MAYBE_EmptyHost EmptyHost
@@ -794,6 +973,20 @@
 }
 
 #if defined(THREAD_SANITIZER)
+// Use of WorkerPool in HostResolverImpl causes a data race. crbug.com/334140
+#define MAYBE_EmptyHost_ResolveHost DISABLED_EmptyHost_ResolveHost
+#else
+#define MAYBE_EmptyHost_ResolveHost EmptyHost_ResolveHost
+#endif
+TEST_F(HostResolverImplTest, MAYBE_EmptyHost_ResolveHost) {
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair(std::string(), 5555), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+}
+
+#if defined(THREAD_SANITIZER)
 // There's a data race in this test that may lead to use-after-free.
 // If the test starts to crash without ThreadSanitizer it needs to be disabled
 // globally. See http://crbug.com/268946 (stacks for this test in
@@ -812,6 +1005,25 @@
 #if defined(THREAD_SANITIZER)
 // There's a data race in this test that may lead to use-after-free.
 // If the test starts to crash without ThreadSanitizer it needs to be disabled
+// globally. See http://crbug.com/268946 (stacks for this test in
+// crbug.com/333567).
+#define MAYBE_EmptyDotsHost_ResolveHost DISABLED_EmptyDotsHost_ResolveHost
+#else
+#define MAYBE_EmptyDotsHost_ResolveHost EmptyDotsHost_ResolveHost
+#endif
+TEST_F(HostResolverImplTest, MAYBE_EmptyDotsHost_ResolveHost) {
+  for (int i = 0; i < 16; ++i) {
+    ResolveHostResponseHelper response(resolver_->CreateRequest(
+        HostPortPair(std::string(i, '.'), 5555), NetLogWithSource()));
+
+    EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+    EXPECT_FALSE(response.request()->GetAddressResults());
+  }
+}
+
+#if defined(THREAD_SANITIZER)
+// There's a data race in this test that may lead to use-after-free.
+// If the test starts to crash without ThreadSanitizer it needs to be disabled
 // globally. See http://crbug.com/268946.
 #define MAYBE_LongHost DISABLED_LongHost
 #else
@@ -822,6 +1034,22 @@
   EXPECT_THAT(req->Resolve(), IsError(ERR_NAME_NOT_RESOLVED));
 }
 
+#if defined(THREAD_SANITIZER)
+// There's a data race in this test that may lead to use-after-free.
+// If the test starts to crash without ThreadSanitizer it needs to be disabled
+// globally. See http://crbug.com/268946.
+#define MAYBE_LongHost_ResolveHost DISABLED_LongHost_ResolveHost
+#else
+#define MAYBE_LongHost_ResolveHost LongHost_ResolveHost
+#endif
+TEST_F(HostResolverImplTest, MAYBE_LongHost_ResolveHost) {
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair(std::string(4097, 'a'), 5555), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+}
+
 TEST_F(HostResolverImplTest, DeDupeRequests) {
   // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is
   // blocked, these should all pile up until we signal it.
@@ -838,6 +1066,32 @@
   }
 }
 
+TEST_F(HostResolverImplTest, DeDupeRequests_ResolveHost) {
+  // Start 5 requests, duplicating hosts "a" and "b". Since the resolver_proc is
+  // blocked, these should all pile up until we signal it.
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 81), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource())));
+
+  for (auto& response : responses) {
+    ASSERT_FALSE(response->complete());
+  }
+
+  proc_->SignalMultiple(2u);  // One for "a", one for "b".
+
+  for (auto& response : responses) {
+    EXPECT_THAT(response->result_error(), IsOk());
+  }
+}
+
 TEST_F(HostResolverImplTest, CancelMultipleRequests) {
   EXPECT_THAT(CreateRequest("a", 80)->Resolve(), IsError(ERR_IO_PENDING));
   EXPECT_THAT(CreateRequest("b", 80)->Resolve(), IsError(ERR_IO_PENDING));
@@ -856,6 +1110,39 @@
   EXPECT_THAT(requests_[3]->WaitForResult(), IsOk());
 }
 
+TEST_F(HostResolverImplTest, CancelMultipleRequests_ResolveHost) {
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 81), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource())));
+
+  for (auto& response : responses) {
+    ASSERT_FALSE(response->complete());
+  }
+
+  // Cancel everything except request for requests[3] ("a", 82).
+  responses[0]->CancelRequest();
+  responses[1]->CancelRequest();
+  responses[2]->CancelRequest();
+  responses[4]->CancelRequest();
+
+  proc_->SignalMultiple(2u);  // One for "a", one for "b".
+
+  EXPECT_THAT(responses[3]->result_error(), IsOk());
+
+  EXPECT_FALSE(responses[0]->complete());
+  EXPECT_FALSE(responses[1]->complete());
+  EXPECT_FALSE(responses[2]->complete());
+  EXPECT_FALSE(responses[4]->complete());
+}
+
 TEST_F(HostResolverImplTest, CanceledRequestsReleaseJobSlots) {
   // Fill up the dispatcher and queue.
   for (unsigned i = 0; i < kMaxJobs + 1; ++i) {
@@ -883,6 +1170,44 @@
   EXPECT_THAT(requests_[num_requests - 2]->result(), IsOk());
 }
 
+TEST_F(HostResolverImplTest, CanceledRequestsReleaseJobSlots_ResolveHost) {
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+
+  // Fill up the dispatcher and queue.
+  for (unsigned i = 0; i < kMaxJobs + 1; ++i) {
+    std::string hostname = "a_";
+    hostname[1] = 'a' + i;
+
+    responses.emplace_back(
+        std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+            HostPortPair(hostname, 80), NetLogWithSource())));
+    ASSERT_FALSE(responses.back()->complete());
+
+    responses.emplace_back(
+        std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+            HostPortPair(hostname, 81), NetLogWithSource())));
+    ASSERT_FALSE(responses.back()->complete());
+  }
+
+  ASSERT_TRUE(proc_->WaitFor(kMaxJobs));
+
+  // Cancel all but last two.
+  for (unsigned i = 0; i < responses.size() - 2; ++i) {
+    responses[i]->CancelRequest();
+  }
+
+  ASSERT_TRUE(proc_->WaitFor(kMaxJobs + 1));
+
+  proc_->SignalAll();
+
+  size_t num_requests = responses.size();
+  EXPECT_THAT(responses[num_requests - 1]->result_error(), IsOk());
+  EXPECT_THAT(responses[num_requests - 2]->result_error(), IsOk());
+  for (unsigned i = 0; i < num_requests - 2; ++i) {
+    EXPECT_FALSE(responses[i]->complete());
+  }
+}
+
 TEST_F(HostResolverImplTest, CancelWithinCallback) {
   struct MyHandler : public Handler {
     void Handle(Request* req) override {
@@ -912,6 +1237,43 @@
   EXPECT_TRUE(requests_[3]->completed());
 }
 
+TEST_F(HostResolverImplTest, CancelWithinCallback_ResolveHost) {
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  auto custom_callback = base::BindLambdaForTesting(
+      [&](CompletionOnceCallback completion_callback, int error) {
+        for (auto& response : responses) {
+          // Cancelling request is required to complete first, so that it can
+          // attempt to cancel the others.  This test assumes all jobs are
+          // completed in order.
+          DCHECK(!response->complete());
+
+          response->CancelRequest();
+        }
+        std::move(completion_callback).Run(error);
+      });
+
+  ResolveHostResponseHelper cancelling_response(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource()),
+      std::move(custom_callback));
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource())));
+
+  proc_->SignalMultiple(2u);  // One for "a". One for "finalrequest".
+
+  EXPECT_THAT(cancelling_response.result_error(), IsOk());
+
+  ResolveHostResponseHelper final_response(resolver_->CreateRequest(
+      HostPortPair("finalrequest", 70), NetLogWithSource()));
+  EXPECT_THAT(final_response.result_error(), IsOk());
+
+  for (auto& response : responses) {
+    EXPECT_FALSE(response->complete());
+  }
+}
+
 TEST_F(HostResolverImplTest, DeleteWithinCallback) {
   struct MyHandler : public Handler {
     void Handle(Request* req) override {
@@ -938,6 +1300,44 @@
   base::RunLoop().Run();
 }
 
+TEST_F(HostResolverImplTest, DeleteWithinCallback_ResolveHost) {
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  auto custom_callback = base::BindLambdaForTesting(
+      [&](CompletionOnceCallback completion_callback, int error) {
+        for (auto& response : responses) {
+          // Deleting request is required to be first, so the other requests
+          // will still be running to be deleted. This test assumes that the
+          // Jobs will be Aborted in order and the requests in order within the
+          // jobs.
+          DCHECK(!response->complete());
+        }
+
+        resolver_.reset();
+        std::move(completion_callback).Run(error);
+      });
+
+  ResolveHostResponseHelper deleting_response(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource()),
+      std::move(custom_callback));
+
+  // Start additional requests to be cancelled as part of the first's deletion.
+  // Assumes all requests for a job are handled in order so that the deleting
+  // request will run first and cancel the rest.
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 82), NetLogWithSource())));
+
+  proc_->SignalMultiple(3u);
+
+  EXPECT_THAT(deleting_response.result_error(), IsOk());
+
+  base::RunLoop().RunUntilIdle();
+  for (auto& response : responses) {
+    EXPECT_FALSE(response->complete());
+  }
+}
+
 TEST_F(HostResolverImplTest, DeleteWithinAbortedCallback) {
   struct MyHandler : public Handler {
     void Handle(Request* req) override {
@@ -978,6 +1378,46 @@
   proc_->SignalMultiple(requests_.size());
 }
 
+TEST_F(HostResolverImplTest, DeleteWithinAbortedCallback_ResolveHost) {
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  ResolveHostResponseHelper::Callback custom_callback =
+      base::BindLambdaForTesting(
+          [&](CompletionOnceCallback completion_callback, int error) {
+            for (auto& response : responses) {
+              // Deleting request is required to be first, so the other requests
+              // will still be running to be deleted. This test assumes that the
+              // Jobs will be Aborted in order and the requests in order within
+              // the jobs.
+              DCHECK(!response->complete());
+            }
+            resolver_.reset();
+            std::move(completion_callback).Run(error);
+          });
+
+  ResolveHostResponseHelper deleting_response(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource()),
+      std::move(custom_callback));
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 81), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 82), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 83), NetLogWithSource())));
+
+  // Wait for all calls to queue up, trigger abort via IP address change, then
+  // signal all the queued requests to let them all try to finish.
+  EXPECT_TRUE(proc_->WaitFor(2u));
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+  proc_->SignalAll();
+
+  EXPECT_THAT(deleting_response.result_error(), IsError(ERR_NETWORK_CHANGED));
+  base::RunLoop().RunUntilIdle();
+  for (auto& response : responses) {
+    EXPECT_FALSE(response->complete());
+  }
+}
+
 TEST_F(HostResolverImplTest, StartWithinCallback) {
   struct MyHandler : public Handler {
     void Handle(Request* req) override {
@@ -1009,6 +1449,28 @@
   EXPECT_EQ(2u, proc_->GetCaptureList().size());
 }
 
+TEST_F(HostResolverImplTest, StartWithinCallback_ResolveHost) {
+  std::unique_ptr<ResolveHostResponseHelper> new_response;
+  auto custom_callback = base::BindLambdaForTesting(
+      [&](CompletionOnceCallback completion_callback, int error) {
+        new_response = std::make_unique<ResolveHostResponseHelper>(
+            resolver_->CreateRequest(HostPortPair("new", 70),
+                                     NetLogWithSource()));
+        std::move(completion_callback).Run(error);
+      });
+
+  ResolveHostResponseHelper starting_response(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource()),
+      std::move(custom_callback));
+
+  proc_->SignalMultiple(2u);  // One for "a". One for "new".
+
+  EXPECT_THAT(starting_response.result_error(), IsOk());
+  EXPECT_THAT(new_response->result_error(), IsOk());
+}
+
+// TODO(crbug.com/821021): Create a ResolveHost test once bypassing the cache is
+// supported.
 TEST_F(HostResolverImplTest, BypassCache) {
   struct MyHandler : public Handler {
     void Handle(Request* req) override {
@@ -1071,6 +1533,40 @@
   EXPECT_THAT(req->WaitForResult(), IsOk());
 }
 
+// Test that IP address changes flush the cache but initial DNS config reads
+// do not.
+TEST_F(HostResolverImplTest, FlushCacheOnIPAddressChange_ResolveHost) {
+  proc_->SignalMultiple(2u);  // One before the flush, one after.
+
+  ResolveHostResponseHelper initial_response(
+      resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource()));
+  EXPECT_THAT(initial_response.result_error(), IsOk());
+  EXPECT_EQ(1u, proc_->GetCaptureList().size());
+
+  ResolveHostResponseHelper cached_response(
+      resolver_->CreateRequest(HostPortPair("host1", 75), NetLogWithSource()));
+  EXPECT_THAT(cached_response.result_error(), IsOk());
+  EXPECT_EQ(1u, proc_->GetCaptureList().size());  // No expected increase.
+
+  // Verify initial DNS config read does not flush cache.
+  NetworkChangeNotifier::NotifyObserversOfInitialDNSConfigReadForTests();
+  ResolveHostResponseHelper unflushed_response(
+      resolver_->CreateRequest(HostPortPair("host1", 75), NetLogWithSource()));
+  EXPECT_THAT(unflushed_response.result_error(), IsOk());
+  EXPECT_EQ(1u, proc_->GetCaptureList().size());  // No expected increase.
+
+  // Flush cache by triggering an IP address change.
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+
+  // Resolve "host1" again -- this time it won't be served from cache, so it
+  // will complete asynchronously.
+  ResolveHostResponseHelper flushed_response(
+      resolver_->CreateRequest(HostPortPair("host1", 80), NetLogWithSource()));
+  EXPECT_THAT(flushed_response.result_error(), IsOk());
+  EXPECT_EQ(2u, proc_->GetCaptureList().size());  // Expected increase.
+}
+
 // Test that IP address changes send ERR_NETWORK_CHANGED to pending requests.
 TEST_F(HostResolverImplTest, AbortOnIPAddressChanged) {
   Request* req = CreateRequest("host1", 70);
@@ -1086,6 +1582,24 @@
   EXPECT_EQ(0u, resolver_->GetHostCache()->size());
 }
 
+// Test that IP address changes send ERR_NETWORK_CHANGED to pending requests.
+TEST_F(HostResolverImplTest, AbortOnIPAddressChanged_ResolveHost) {
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource()));
+
+  ASSERT_FALSE(response.complete());
+  ASSERT_TRUE(proc_->WaitFor(1u));
+
+  // Triggering an IP address change.
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+  proc_->SignalAll();
+
+  EXPECT_THAT(response.result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_FALSE(response.request()->GetAddressResults());
+  EXPECT_EQ(0u, resolver_->GetHostCache()->size());
+}
+
 // Test that initial DNS config read signals do not abort pending requests.
 TEST_F(HostResolverImplTest, DontAbortOnInitialDNSConfigRead) {
   Request* req = CreateRequest("host1", 70);
@@ -1100,6 +1614,23 @@
   EXPECT_THAT(req->WaitForResult(), IsOk());
 }
 
+// Test that initial DNS config read signals do not abort pending requests.
+TEST_F(HostResolverImplTest, DontAbortOnInitialDNSConfigRead_ResolveHost) {
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource()));
+
+  ASSERT_FALSE(response.complete());
+  ASSERT_TRUE(proc_->WaitFor(1u));
+
+  // Triggering initial DNS config read signal.
+  NetworkChangeNotifier::NotifyObserversOfInitialDNSConfigReadForTests();
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+  proc_->SignalAll();
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_TRUE(response.request()->GetAddressResults());
+}
+
 // Obey pool constraints after IP address has changed.
 TEST_F(HostResolverImplTest, ObeyPoolConstraintsAfterIPAddressChange) {
   // Runs at most one job at a time.
@@ -1125,6 +1656,43 @@
   EXPECT_THAT(requests_[1]->result(), IsOk());
 }
 
+// Obey pool constraints after IP address has changed.
+TEST_F(HostResolverImplTest,
+       ObeyPoolConstraintsAfterIPAddressChange_ResolveHost) {
+  // Runs at most one job at a time.
+  CreateSerialResolver();
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("a", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("b", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("c", 80), NetLogWithSource())));
+
+  for (auto& response : responses) {
+    ASSERT_FALSE(response->complete());
+  }
+  ASSERT_TRUE(proc_->WaitFor(1u));
+
+  // Triggering an IP address change.
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+  proc_->SignalMultiple(3u);  // Let the false-start go so that we can catch it.
+
+  // Requests should complete one at a time, with the first failing.
+  EXPECT_THAT(responses[0]->result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+  EXPECT_FALSE(responses[1]->complete());
+  EXPECT_FALSE(responses[2]->complete());
+
+  EXPECT_THAT(responses[1]->result_error(), IsOk());
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+  EXPECT_FALSE(responses[2]->complete());
+
+  EXPECT_THAT(responses[2]->result_error(), IsOk());
+}
+
 // Tests that a new Request made from the callback of a previously aborted one
 // will not be aborted.
 TEST_F(HostResolverImplTest, AbortOnlyExistingRequestsOnIPAddressChange) {
@@ -1171,8 +1739,67 @@
   EXPECT_EQ(3u, resolver_->GetHostCache()->size());
 }
 
+// Tests that a new Request made from the callback of a previously aborted one
+// will not be aborted.
+TEST_F(HostResolverImplTest,
+       AbortOnlyExistingRequestsOnIPAddressChange_ResolveHost) {
+  auto custom_callback_template = base::BindLambdaForTesting(
+      [&](const HostPortPair& next_host,
+          std::unique_ptr<ResolveHostResponseHelper>* next_response,
+          CompletionOnceCallback completion_callback, int error) {
+        *next_response = std::make_unique<ResolveHostResponseHelper>(
+            resolver_->CreateRequest(next_host, NetLogWithSource()));
+        std::move(completion_callback).Run(error);
+      });
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> next_responses(3);
+
+  ResolveHostResponseHelper response0(
+      resolver_->CreateRequest(HostPortPair("bbb", 80), NetLogWithSource()),
+      base::BindOnce(custom_callback_template, HostPortPair("zzz", 80),
+                     &next_responses[0]));
+
+  ResolveHostResponseHelper response1(
+      resolver_->CreateRequest(HostPortPair("eee", 80), NetLogWithSource()),
+      base::BindOnce(custom_callback_template, HostPortPair("aaa", 80),
+                     &next_responses[1]));
+
+  ResolveHostResponseHelper response2(
+      resolver_->CreateRequest(HostPortPair("ccc", 80), NetLogWithSource()),
+      base::BindOnce(custom_callback_template, HostPortPair("eee", 80),
+                     &next_responses[2]));
+
+  // Wait until all are blocked;
+  ASSERT_TRUE(proc_->WaitFor(3u));
+  // Trigger an IP address change.
+  NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests();
+  // This should abort all running jobs.
+  base::RunLoop().RunUntilIdle();
+
+  EXPECT_THAT(response0.result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_THAT(response1.result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_THAT(response2.result_error(), IsError(ERR_NETWORK_CHANGED));
+
+  EXPECT_FALSE(next_responses[0]->complete());
+  EXPECT_FALSE(next_responses[1]->complete());
+  EXPECT_FALSE(next_responses[2]->complete());
+
+  // Unblock all calls to proc.
+  proc_->SignalMultiple(6u);
+
+  // Run until the re-started requests finish.
+  EXPECT_THAT(next_responses[0]->result_error(), IsOk());
+  EXPECT_THAT(next_responses[1]->result_error(), IsOk());
+  EXPECT_THAT(next_responses[2]->result_error(), IsOk());
+
+  // Verify that results of aborted Jobs were not cached.
+  EXPECT_EQ(6u, proc_->GetCaptureList().size());
+  EXPECT_EQ(3u, resolver_->GetHostCache()->size());
+}
+
 // Tests that when the maximum threads is set to 1, requests are dequeued
 // in order of priority.
+// TODO(crbug.com/821021): Add ResolveHost test once priorities are supported.
 TEST_F(HostResolverImplTest, HigherPriorityRequestsStartedFirst) {
   CreateSerialResolver();
 
@@ -1216,6 +1843,7 @@
 }
 
 // Test that changing a job's priority affects the dequeueing order.
+// TODO(crbug.com/821021): Add ResolveHost test once priorities are supported.
 TEST_F(HostResolverImplTest, ChangePriority) {
   CreateSerialResolver();
 
@@ -1293,13 +1921,67 @@
   EXPECT_EQ("req3", capture_list[3].hostname);
 }
 
+// Try cancelling a job which has not started yet.
+// TODO(crbug.com/821021): Add tests for priorities once supported.
+TEST_F(HostResolverImplTest, CancelPendingRequest_ResolveHost) {
+  CreateSerialResolver();
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req3", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req4", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req6", 80), NetLogWithSource())));
+
+  // Cancel some requests
+  responses[1]->CancelRequest();
+  responses[4]->CancelRequest();
+  responses[5]->CancelRequest();
+
+  // Unblock the resolver thread so the requests can run.
+  proc_->SignalMultiple(responses.size());  // More than needed.
+
+  // Let everything try to finish.
+  base::RunLoop().RunUntilIdle();
+
+  // Wait for all the requests to complete succesfully.
+  EXPECT_THAT(responses[0]->result_error(), IsOk());
+  EXPECT_THAT(responses[2]->result_error(), IsOk());
+  EXPECT_THAT(responses[3]->result_error(), IsOk());
+  EXPECT_THAT(responses[6]->result_error(), IsOk());
+
+  // Cancelled requests shouldn't complete.
+  EXPECT_FALSE(responses[1]->complete());
+  EXPECT_FALSE(responses[4]->complete());
+  EXPECT_FALSE(responses[5]->complete());
+
+  // Verify that they called out the the resolver proc (which runs on the
+  // resolver thread) in the expected order.
+  MockHostResolverProc::CaptureList capture_list = proc_->GetCaptureList();
+  ASSERT_EQ(4u, capture_list.size());
+
+  EXPECT_EQ("req0", capture_list[0].hostname);
+  EXPECT_EQ("req2", capture_list[1].hostname);
+  EXPECT_EQ("req3", capture_list[2].hostname);
+  EXPECT_EQ("req6", capture_list[3].hostname);
+}
+
 // Test that when too many requests are enqueued, old ones start to be aborted.
 TEST_F(HostResolverImplTest, QueueOverflow) {
   CreateSerialResolver();
 
   // Allow only 3 queued jobs.
   const size_t kMaxPendingJobs = 3u;
-  resolver_->SetMaxQueuedJobs(kMaxPendingJobs);
+  resolver_->SetMaxQueuedJobsForTesting(kMaxPendingJobs);
 
   // Note that at this point the MockHostResolverProc is blocked, so any
   // requests we make will not complete.
@@ -1360,8 +2042,114 @@
   }
 }
 
+// Test that when too many requests are enqueued, old ones start to be aborted.
+// TODO(crbug.com/821021): Once ResolveHost supports priorities, test that the
+// queue evictions happen by priority.
+TEST_F(HostResolverImplTest, QueueOverflow_ResolveHost) {
+  CreateSerialResolver();
+
+  // Allow only 3 queued jobs.
+  const size_t kMaxPendingJobs = 3u;
+  resolver_->SetMaxQueuedJobsForTesting(kMaxPendingJobs);
+
+  // Note that at this point the MockHostResolverProc is blocked, so any
+  // requests we make will not complete.
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req0", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req2", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req3", 80), NetLogWithSource())));
+
+  // At this point, there are 3 enqueued jobs (and one "running" job).
+  // Insertion of subsequent requests will cause evictions.
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req4", 80), NetLogWithSource())));
+  EXPECT_THAT(responses[1]->result_error(),
+              IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
+  EXPECT_FALSE(responses[1]->request()->GetAddressResults());
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req5", 80), NetLogWithSource())));
+  EXPECT_THAT(responses[2]->result_error(),
+              IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
+  EXPECT_FALSE(responses[2]->request()->GetAddressResults());
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req6", 80), NetLogWithSource())));
+  EXPECT_THAT(responses[3]->result_error(),
+              IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
+  EXPECT_FALSE(responses[3]->request()->GetAddressResults());
+
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("req7", 80), NetLogWithSource())));
+  EXPECT_THAT(responses[4]->result_error(),
+              IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
+  EXPECT_FALSE(responses[4]->request()->GetAddressResults());
+
+  // Unblock the resolver thread so the requests can run.
+  proc_->SignalMultiple(4u);
+
+  // The rest should succeed.
+  EXPECT_THAT(responses[0]->result_error(), IsOk());
+  EXPECT_TRUE(responses[0]->request()->GetAddressResults());
+  EXPECT_THAT(responses[5]->result_error(), IsOk());
+  EXPECT_TRUE(responses[5]->request()->GetAddressResults());
+  EXPECT_THAT(responses[6]->result_error(), IsOk());
+  EXPECT_TRUE(responses[6]->request()->GetAddressResults());
+  EXPECT_THAT(responses[7]->result_error(), IsOk());
+  EXPECT_TRUE(responses[7]->request()->GetAddressResults());
+
+  // Verify that they called out the the resolver proc (which runs on the
+  // resolver thread) in the expected order.
+  MockHostResolverProc::CaptureList capture_list = proc_->GetCaptureList();
+  ASSERT_EQ(4u, capture_list.size());
+
+  EXPECT_EQ("req0", capture_list[0].hostname);
+  EXPECT_EQ("req5", capture_list[1].hostname);
+  EXPECT_EQ("req6", capture_list[2].hostname);
+  EXPECT_EQ("req7", capture_list[3].hostname);
+
+  // Verify that the evicted (incomplete) requests were not cached.
+  EXPECT_EQ(4u, resolver_->GetHostCache()->size());
+
+  for (size_t i = 0; i < responses.size(); ++i) {
+    EXPECT_TRUE(responses[i]->complete()) << i;
+  }
+}
+
+// Tests that jobs can self-evict by setting the max queue to 0.
+TEST_F(HostResolverImplTest, QueueOverflow_ResolveHost_SelfEvict) {
+  CreateSerialResolver();
+  resolver_->SetMaxQueuedJobsForTesting(0);
+
+  // Note that at this point the MockHostResolverProc is blocked, so any
+  // requests we make will not complete.
+
+  ResolveHostResponseHelper run_response(
+      resolver_->CreateRequest(HostPortPair("run", 80), NetLogWithSource()));
+
+  ResolveHostResponseHelper evict_response(
+      resolver_->CreateRequest(HostPortPair("req1", 80), NetLogWithSource()));
+  EXPECT_THAT(evict_response.result_error(),
+              IsError(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE));
+  EXPECT_FALSE(evict_response.request()->GetAddressResults());
+
+  proc_->SignalMultiple(1u);
+
+  EXPECT_THAT(run_response.result_error(), IsOk());
+  EXPECT_TRUE(run_response.request()->GetAddressResults());
+}
+
 // Make sure that the address family parameter is respected when raw IPs are
 // passed in.
+// TODO(crbug.com/821021): Make an equivalent ResolveHost test once specifying
+// A or AAAA is implemented.
 TEST_F(HostResolverImplTest, AddressFamilyWithRawIPs) {
   Request* request =
       CreateRequest("127.0.0.1", 80,  MEDIUM, ADDRESS_FAMILY_IPV4);
@@ -1580,6 +2368,68 @@
   EXPECT_EQ(resolver_proc->resolved_attempt_number(), kAttemptNumberToResolve);
 }
 
+// Test the retry attempts simulating host resolver proc that takes too long.
+TEST_F(HostResolverImplTest, MultipleAttempts_ResolveHost) {
+  // Total number of attempts would be 3 and we want the 3rd attempt to resolve
+  // the host. First and second attempt will be forced to wait until they get
+  // word that a resolution has completed. The 3rd resolution attempt will try
+  // to get done ASAP, and won't wait.
+  int kAttemptNumberToResolve = 3;
+  int kTotalAttempts = 3;
+
+  // Add a little bit of extra fudge to the delay to allow reasonable
+  // flexibility for time > vs >= etc.  We don't need to fail the test if we
+  // retry at t=6001 instead of t=6000.
+  base::TimeDelta kSleepFudgeFactor = base::TimeDelta::FromMilliseconds(1);
+
+  scoped_refptr<LookupAttemptHostResolverProc> resolver_proc(
+      new LookupAttemptHostResolverProc(NULL, kAttemptNumberToResolve,
+                                        kTotalAttempts));
+
+  HostResolverImpl::ProcTaskParams params = DefaultParams(resolver_proc.get());
+  base::TimeDelta unresponsive_delay = params.unresponsive_delay;
+  int retry_factor = params.retry_factor;
+
+  CreateResolverWithLimitsAndParams(kMaxJobs, params,
+                                    true /* ipv6_reachable */);
+
+  // Override the current thread task runner, so we can simulate the passage of
+  // time and avoid any actual sleeps.
+  auto test_task_runner = base::MakeRefCounted<base::TestMockTimeTaskRunner>();
+  base::ScopedClosureRunner task_runner_override_scoped_cleanup =
+      base::ThreadTaskRunnerHandle::OverrideForTesting(test_task_runner);
+
+  // Resolve "host1".
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource()));
+  EXPECT_FALSE(response.complete());
+
+  resolver_proc->WaitForNAttemptsToBeBlocked(1);
+  EXPECT_FALSE(response.complete());
+
+  test_task_runner->FastForwardBy(unresponsive_delay + kSleepFudgeFactor);
+  resolver_proc->WaitForNAttemptsToBeBlocked(2);
+  EXPECT_FALSE(response.complete());
+
+  test_task_runner->FastForwardBy(unresponsive_delay * retry_factor +
+                                  kSleepFudgeFactor);
+
+  resolver_proc->WaitForAllAttemptsToFinish();
+  test_task_runner->RunUntilIdle();
+
+  // Resolve returns -4 to indicate that 3rd attempt has resolved the host.
+  // Since we're using a TestMockTimeTaskRunner, the RunLoop stuff in
+  // result_error() will fail if it actually has to wait, but unless there's an
+  // error, the result should be immediately ready by this point.
+  EXPECT_EQ(-4, response.result_error());
+
+  // We should be done with retries, but make sure none erroneously happen.
+  test_task_runner->FastForwardUntilNoTasksRemain();
+
+  EXPECT_EQ(resolver_proc->total_attempts_resolved(), kTotalAttempts);
+  EXPECT_EQ(resolver_proc->resolved_attempt_number(), kAttemptNumberToResolve);
+}
+
 // If a host resolves to a list that includes 127.0.53.53, this is treated as
 // an error. 127.0.53.53 is a localhost address, however it has been given a
 // special significance by ICANN to help surface name collision resulting from
@@ -1633,6 +2483,62 @@
   EXPECT_THAT(request->WaitForResult(), IsOk());
 }
 
+// If a host resolves to a list that includes 127.0.53.53, this is treated as
+// an error. 127.0.53.53 is a localhost address, however it has been given a
+// special significance by ICANN to help surface name collision resulting from
+// the new gTLDs.
+TEST_F(HostResolverImplTest, NameCollisionIcann_ResolveHost) {
+  proc_->AddRuleForAllFamilies("single", "127.0.53.53");
+  proc_->AddRuleForAllFamilies("multiple", "127.0.0.1,127.0.53.53");
+  proc_->AddRuleForAllFamilies("ipv6", "::127.0.53.53");
+  proc_->AddRuleForAllFamilies("not_reserved1", "53.53.0.127");
+  proc_->AddRuleForAllFamilies("not_reserved2", "127.0.53.54");
+  proc_->AddRuleForAllFamilies("not_reserved3", "10.0.53.53");
+  proc_->SignalMultiple(6u);
+
+  ResolveHostResponseHelper single_response(
+      resolver_->CreateRequest(HostPortPair("single", 80), NetLogWithSource()));
+  EXPECT_THAT(single_response.result_error(),
+              IsError(ERR_ICANN_NAME_COLLISION));
+  EXPECT_FALSE(single_response.request()->GetAddressResults());
+
+  // ERR_ICANN_NAME_COLLISION is cached like any other error, using a fixed TTL
+  // for failed entries from proc-based resolver. That said, the fixed TTL is 0,
+  // so it should never be cached.
+  Request* cache_request = CreateRequest("single");
+  EXPECT_THAT(cache_request->ResolveFromCache(), IsError(ERR_DNS_CACHE_MISS));
+
+  ResolveHostResponseHelper multiple_response(resolver_->CreateRequest(
+      HostPortPair("multiple", 80), NetLogWithSource()));
+  EXPECT_THAT(multiple_response.result_error(),
+              IsError(ERR_ICANN_NAME_COLLISION));
+
+  // Resolving an IP literal of 127.0.53.53 however is allowed.
+  ResolveHostResponseHelper literal_response(resolver_->CreateRequest(
+      HostPortPair("127.0.53.53", 80), NetLogWithSource()));
+  EXPECT_THAT(literal_response.result_error(), IsOk());
+
+  // Moreover the address should not be recognized when embedded in an IPv6
+  // address.
+  ResolveHostResponseHelper ipv6_response(resolver_->CreateRequest(
+      HostPortPair("127.0.53.53", 80), NetLogWithSource()));
+  EXPECT_THAT(ipv6_response.result_error(), IsOk());
+
+  // Try some other IPs which are similar, but NOT an exact match on
+  // 127.0.53.53.
+  ResolveHostResponseHelper similar_response1(resolver_->CreateRequest(
+      HostPortPair("not_reserved1", 80), NetLogWithSource()));
+  EXPECT_THAT(similar_response1.result_error(), IsOk());
+
+  ResolveHostResponseHelper similar_response2(resolver_->CreateRequest(
+      HostPortPair("not_reserved2", 80), NetLogWithSource()));
+  EXPECT_THAT(similar_response2.result_error(), IsOk());
+
+  ResolveHostResponseHelper similar_response3(resolver_->CreateRequest(
+      HostPortPair("not_reserved3", 80), NetLogWithSource()));
+  EXPECT_THAT(similar_response3.result_error(), IsOk());
+}
+
 TEST_F(HostResolverImplTest, IsIPv6Reachable) {
   // The real HostResolverImpl is needed since TestHostResolverImpl will
   // bypass the IPv6 reachability tests.
@@ -1666,6 +2572,82 @@
   EXPECT_TRUE(cached);
 }
 
+// Test that it's safe for callers to bind input objects with the input
+// callback, eg that we don't destroy the callback before finishing a
+// synchronously-handled request.  In no way is this an encouraged way to use
+// the resolver, but we have callers doing this stuff, and we don't want to
+// break them.
+TEST_F(HostResolverImplTest, InputObjectsBoundToCallback) {
+  HostResolver::RequestInfo info(HostPortPair("localhost", 65));
+
+  auto addresses = std::make_unique<AddressList>();
+  AddressList* raw_addresses = addresses.get();
+
+  auto request = std::make_unique<RequestHolder>();
+  std::unique_ptr<HostResolver::Request>* raw_request = &request->request;
+
+  base::RunLoop run_loop;
+  bool callback_invoked = false;
+  auto callback = base::BindLambdaForTesting(
+      [&](std::unique_ptr<AddressList> addresses,
+          std::unique_ptr<RequestHolder> request_holder, int error) {
+        callback_invoked = true;
+        run_loop.Quit();
+      });
+
+  int result = resolver_->Resolve(
+      info, RequestPriority::DEFAULT_PRIORITY, raw_addresses,
+      base::BindOnce(callback, std::move(addresses), std::move(request)),
+      raw_request, NetLogWithSource());
+
+  // Result should be synchronous and successful. If the callback is destroyed
+  // early, Resolve() would likely crash on accessing addresses.
+  EXPECT_THAT(result, IsOk());
+  run_loop.RunUntilIdle();
+  EXPECT_FALSE(callback_invoked);
+}
+
+// Test that it's safe for callers to bind input objects with the input
+// callback.  In no way is this an encouraged way to use the resolver, but we
+// have callers doing this stuff, and we don't want to break them.
+TEST_F(HostResolverImplTest, InputObjectsBoundToCallback_Async) {
+  HostResolver::RequestInfo info(HostPortPair("just.testing", 65));
+
+  auto addresses = std::make_unique<AddressList>();
+  AddressList* raw_addresses = addresses.get();
+
+  auto request = std::make_unique<RequestHolder>();
+  std::unique_ptr<HostResolver::Request>* raw_request = &request->request;
+
+  base::RunLoop run_loop;
+  int result_error;
+  std::unique_ptr<AddressList> result_addresses;
+  std::unique_ptr<HostResolver::Request> result_request;
+  auto callback = base::BindLambdaForTesting(
+      [&](std::unique_ptr<AddressList> addresses,
+          std::unique_ptr<RequestHolder> request_holder, int error) {
+        result_addresses = std::move(addresses);
+        result_request = std::move(request_holder->request);
+        result_error = error;
+        run_loop.Quit();
+      });
+
+  proc_->AddRuleForAllFamilies("just.testing", "192.168.1.42");
+  proc_->SignalMultiple(1u);
+
+  int result = resolver_->Resolve(
+      info, RequestPriority::DEFAULT_PRIORITY, raw_addresses,
+      base::BindOnce(callback, std::move(addresses), std::move(request)),
+      raw_request, NetLogWithSource());
+  ASSERT_THAT(result, IsError(ERR_IO_PENDING));
+  run_loop.Run();
+
+  EXPECT_THAT(result_error, IsOk());
+  EXPECT_THAT(result_addresses->endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.1.42", 65)));
+  EXPECT_TRUE(result_request);
+}
+
 DnsConfig CreateValidDnsConfig() {
   IPAddress dns_ip(192, 168, 1, 0);
   DnsConfig config;
@@ -1742,10 +2724,11 @@
   // HostResolverImplTest implementation:
   void CreateResolverWithLimitsAndParams(
       size_t max_concurrent_resolves,
-      const HostResolverImpl::ProcTaskParams& params) override {
+      const HostResolverImpl::ProcTaskParams& params,
+      bool ipv6_reachable) override {
     HostResolverImpl::Options options = DefaultOptions();
     options.max_concurrent_resolves = max_concurrent_resolves;
-    resolver_.reset(new TestHostResolverImpl(options, NULL));
+    resolver_.reset(new TestHostResolverImpl(options, NULL, ipv6_reachable));
     resolver_->set_proc_params_for_test(params);
     dns_client_ = new MockDnsClient(DnsConfig(), dns_rules_);
     resolver_->SetDnsClient(std::unique_ptr<DnsClient>(dns_client_));
@@ -1821,6 +2804,36 @@
   EXPECT_TRUE(req2->HasAddress("::1", 80));
 }
 
+// RFC 6761 localhost names should always resolve to loopback.
+TEST_F(HostResolverImplDnsTest, LocalhostLookup_ResolveHost) {
+  // Add a rule resolving localhost names to a non-loopback IP and test
+  // that they still resolves to loopback.
+  proc_->AddRuleForAllFamilies("foo.localhost", "192.168.1.42");
+  proc_->AddRuleForAllFamilies("localhost", "192.168.1.42");
+  proc_->AddRuleForAllFamilies("localhost.", "192.168.1.42");
+
+  ResolveHostResponseHelper response0(resolver_->CreateRequest(
+      HostPortPair("foo.localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(response0.result_error(), IsOk());
+  EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(response1.result_error(), IsOk());
+  EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  ResolveHostResponseHelper response2(resolver_->CreateRequest(
+      HostPortPair("localhost.", 80), NetLogWithSource()));
+  EXPECT_THAT(response2.result_error(), IsOk());
+  EXPECT_THAT(response2.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+}
+
 // RFC 6761 localhost names should always resolve to loopback, even if a HOSTS
 // file is active.
 TEST_F(HostResolverImplDnsTest, LocalhostLookupWithHosts) {
@@ -1847,6 +2860,34 @@
   EXPECT_FALSE(req2->HasAddress("192.168.1.2", 80));
 }
 
+// RFC 6761 localhost names should always resolve to loopback, even if a HOSTS
+// file is active.
+TEST_F(HostResolverImplDnsTest, LocalhostLookupWithHosts_ResolveHost) {
+  DnsHosts hosts;
+  hosts[DnsHostsKey("localhost", ADDRESS_FAMILY_IPV4)] =
+      IPAddress({192, 168, 1, 1});
+  hosts[DnsHostsKey("foo.localhost", ADDRESS_FAMILY_IPV4)] =
+      IPAddress({192, 168, 1, 2});
+
+  DnsConfig config = CreateValidDnsConfig();
+  config.hosts = hosts;
+  ChangeDnsConfig(config);
+
+  ResolveHostResponseHelper response0(resolver_->CreateRequest(
+      HostPortPair("localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(response0.result_error(), IsOk());
+  EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("foo.localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(response1.result_error(), IsOk());
+  EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+}
+
 // Test successful and fallback resolutions in HostResolverImpl::DnsTask.
 TEST_F(HostResolverImplDnsTest, DnsTask) {
   proc_->AddRuleForAllFamilies("nx_succeed", "192.168.1.102");
@@ -1895,6 +2936,44 @@
   EXPECT_EQ(HostCache::Entry::SOURCE_UNKNOWN, cache_entry->source());
 }
 
+// Test successful and fallback resolutions in HostResolverImpl::DnsTask.
+TEST_F(HostResolverImplDnsTest, DnsTask_ResolveHost) {
+  proc_->AddRuleForAllFamilies("nx_succeed", "192.168.1.102");
+  // All other hostnames will fail in proc_.
+
+  // Initially there is no config, so client should not be invoked.
+  ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
+      HostPortPair("ok_fail", 80), NetLogWithSource()));
+  EXPECT_FALSE(initial_response.complete());
+
+  proc_->SignalMultiple(1u);
+
+  EXPECT_THAT(initial_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response0(resolver_->CreateRequest(
+      HostPortPair("ok_fail", 80), NetLogWithSource()));
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("nx_fail", 80), NetLogWithSource()));
+  ResolveHostResponseHelper response2(resolver_->CreateRequest(
+      HostPortPair("nx_succeed", 80), NetLogWithSource()));
+
+  proc_->SignalMultiple(4u);
+
+  // Resolved by MockDnsClient.
+  EXPECT_THAT(response0.result_error(), IsOk());
+  EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  // Fallback to ProcTask.
+  EXPECT_THAT(response1.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_THAT(response2.result_error(), IsOk());
+  EXPECT_THAT(response2.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.1.102", 80)));
+}
+
 // Test successful and failing resolutions in HostResolverImpl::DnsTask when
 // fallback to ProcTask is disabled.
 TEST_F(HostResolverImplDnsTest, NoFallbackToProcTask) {
@@ -1947,6 +3026,62 @@
   EXPECT_THAT(requests_[5]->WaitForResult(), IsError(ERR_NAME_NOT_RESOLVED));
 }
 
+// Test successful and failing resolutions in HostResolverImpl::DnsTask when
+// fallback to ProcTask is disabled.
+TEST_F(HostResolverImplDnsTest, NoFallbackToProcTask_ResolveHost) {
+  set_fallback_to_proctask(false);
+
+  proc_->AddRuleForAllFamilies("nx_succeed", "192.168.1.102");
+  // All other hostnames will fail in proc_.
+
+  // Set empty DnsConfig.
+  ChangeDnsConfig(DnsConfig());
+  // Initially there is no config, so client should not be invoked.
+  ResolveHostResponseHelper initial_response0(resolver_->CreateRequest(
+      HostPortPair("ok_fail", 80), NetLogWithSource()));
+  ResolveHostResponseHelper initial_response1(resolver_->CreateRequest(
+      HostPortPair("nx_succeed", 80), NetLogWithSource()));
+  proc_->SignalMultiple(2u);
+
+  EXPECT_THAT(initial_response0.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_THAT(initial_response1.result_error(), IsOk());
+  EXPECT_THAT(
+      initial_response1.request()->GetAddressResults().value().endpoints(),
+      testing::ElementsAre(CreateExpected("192.168.1.102", 80)));
+
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper abort_response0(resolver_->CreateRequest(
+      HostPortPair("ok_abort", 80), NetLogWithSource()));
+  ResolveHostResponseHelper abort_response1(resolver_->CreateRequest(
+      HostPortPair("nx_abort", 80), NetLogWithSource()));
+
+  // Simulate the case when the preference or policy has disabled the DNS
+  // client causing AbortDnsTasks.
+  resolver_->SetDnsClient(
+      std::unique_ptr<DnsClient>(new MockDnsClient(DnsConfig(), dns_rules_)));
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  // First request is resolved by MockDnsClient, others should fail due to
+  // disabled fallback to ProcTask.
+  ResolveHostResponseHelper response0(resolver_->CreateRequest(
+      HostPortPair("ok_fail", 80), NetLogWithSource()));
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("nx_fail", 80), NetLogWithSource()));
+  proc_->SignalMultiple(6u);
+
+  // Aborted due to Network Change.
+  EXPECT_THAT(abort_response0.result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_THAT(abort_response1.result_error(), IsError(ERR_NETWORK_CHANGED));
+  // Resolved by MockDnsClient.
+  EXPECT_THAT(response0.result_error(), IsOk());
+  EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+  // Fallback to ProcTask is disabled.
+  EXPECT_THAT(response1.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+}
+
 // Test behavior of OnDnsTaskFailure when Job is aborted.
 TEST_F(HostResolverImplDnsTest, OnDnsTaskFailureAbortedJob) {
   ChangeDnsConfig(CreateValidDnsConfig());
@@ -1973,6 +3108,33 @@
   EXPECT_THAT(requests_[1]->result(), IsError(ERR_IO_PENDING));
 }
 
+// Test behavior of OnDnsTaskFailure when Job is aborted.
+TEST_F(HostResolverImplDnsTest, OnDnsTaskFailureAbortedJob_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("nx_abort", 80), NetLogWithSource()));
+  // Abort all jobs here.
+  CreateResolver();
+  proc_->SignalMultiple(1u);
+  // Run to completion.
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+  // It shouldn't crash during OnDnsTaskFailure callbacks.
+  EXPECT_FALSE(response.complete());
+
+  // Repeat test with Fallback to ProcTask disabled
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+  ResolveHostResponseHelper no_fallback_response(resolver_->CreateRequest(
+      HostPortPair("nx_abort", 80), NetLogWithSource()));
+  // Abort all jobs here.
+  CreateResolver();
+  proc_->SignalMultiple(2u);
+  // Run to completion.
+  base::RunLoop().RunUntilIdle();  // Notification happens async.
+  // It shouldn't crash during OnDnsTaskFailure callbacks.
+  EXPECT_FALSE(no_fallback_response.complete());
+}
+
 TEST_F(HostResolverImplDnsTest, DnsTaskUnspec) {
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2000,6 +3162,39 @@
   EXPECT_TRUE(requests_[3]->HasAddress("192.168.1.101", 80));
 }
 
+TEST_F(HostResolverImplDnsTest, DnsTaskUnspec_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRuleForAllFamilies("4nx", "192.168.1.101");
+  // All other hostnames will fail in proc_.
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("4ok", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("6ok", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("4nx", 80), NetLogWithSource())));
+
+  proc_->SignalMultiple(4u);
+
+  for (auto& response : responses) {
+    EXPECT_THAT(response->result_error(), IsOk());
+  }
+
+  EXPECT_THAT(responses[0]->request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+  EXPECT_THAT(responses[1]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
+  EXPECT_THAT(responses[2]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("::1", 80)));
+  EXPECT_THAT(responses[3]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.1.101", 80)));
+}
+
 TEST_F(HostResolverImplDnsTest, NameCollisionIcann) {
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2028,6 +3223,26 @@
               IsError(ERR_DNS_CACHE_MISS));
 }
 
+TEST_F(HostResolverImplDnsTest, NameCollisionIcann_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  // When the resolver returns an A record with 127.0.53.53 it should be
+  // mapped to a special error.
+  ResolveHostResponseHelper response_ipv4(resolver_->CreateRequest(
+      HostPortPair("4collision", 80), NetLogWithSource()));
+  EXPECT_THAT(response_ipv4.result_error(), IsError(ERR_ICANN_NAME_COLLISION));
+  EXPECT_FALSE(response_ipv4.request()->GetAddressResults());
+
+  // When the resolver returns an AAAA record with ::127.0.53.53 it should
+  // work just like any other IP. (Despite having the same suffix, it is not
+  // considered special)
+  ResolveHostResponseHelper response_ipv6(resolver_->CreateRequest(
+      HostPortPair("6collision", 80), NetLogWithSource()));
+  EXPECT_THAT(response_ipv6.result_error(), IsOk());
+  EXPECT_THAT(response_ipv6.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("::127.0.53.53", 80)));
+}
+
 TEST_F(HostResolverImplDnsTest, ServeFromHosts) {
   // Initially, use empty HOSTS file.
   DnsConfig config = CreateValidDnsConfig();
@@ -2082,10 +3297,65 @@
   EXPECT_TRUE(req6->HasOneAddress("127.0.0.1", 80));
 }
 
+// TODO(crbug.com/821021): Add resolves specifying address family once suported.
+TEST_F(HostResolverImplDnsTest, ServeFromHosts_ResolveHost) {
+  // Initially, use empty HOSTS file.
+  DnsConfig config = CreateValidDnsConfig();
+  ChangeDnsConfig(config);
+
+  proc_->AddRuleForAllFamilies(std::string(),
+                               std::string());  // Default to failures.
+  proc_->SignalMultiple(1u);  // For the first request which misses.
+
+  ResolveHostResponseHelper initial_response(resolver_->CreateRequest(
+      HostPortPair("nx_ipv4", 80), NetLogWithSource()));
+  EXPECT_THAT(initial_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+
+  IPAddress local_ipv4 = IPAddress::IPv4Localhost();
+  IPAddress local_ipv6 = IPAddress::IPv6Localhost();
+
+  DnsHosts hosts;
+  hosts[DnsHostsKey("nx_ipv4", ADDRESS_FAMILY_IPV4)] = local_ipv4;
+  hosts[DnsHostsKey("nx_ipv6", ADDRESS_FAMILY_IPV6)] = local_ipv6;
+  hosts[DnsHostsKey("nx_both", ADDRESS_FAMILY_IPV4)] = local_ipv4;
+  hosts[DnsHostsKey("nx_both", ADDRESS_FAMILY_IPV6)] = local_ipv6;
+
+  // Update HOSTS file.
+  config.hosts = hosts;
+  ChangeDnsConfig(config);
+
+  ResolveHostResponseHelper response_ipv4(resolver_->CreateRequest(
+      HostPortPair("nx_ipv4", 80), NetLogWithSource()));
+  EXPECT_THAT(response_ipv4.result_error(), IsOk());
+  EXPECT_THAT(response_ipv4.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
+
+  ResolveHostResponseHelper response_ipv6(resolver_->CreateRequest(
+      HostPortPair("nx_ipv6", 80), NetLogWithSource()));
+  EXPECT_THAT(response_ipv6.result_error(), IsOk());
+  EXPECT_THAT(response_ipv6.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("::1", 80)));
+
+  ResolveHostResponseHelper response_both(resolver_->CreateRequest(
+      HostPortPair("nx_both", 80), NetLogWithSource()));
+  EXPECT_THAT(response_both.result_error(), IsOk());
+  EXPECT_THAT(response_both.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  // Request with upper case.
+  ResolveHostResponseHelper response_upper(resolver_->CreateRequest(
+      HostPortPair("nx_IPV4", 80), NetLogWithSource()));
+  EXPECT_THAT(response_upper.result_error(), IsOk());
+  EXPECT_THAT(response_upper.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
+}
+
 TEST_F(HostResolverImplDnsTest, CacheHostsLookupOnConfigChange) {
   // Only allow 1 resolution at a time, so that the second lookup is queued and
   // occurs when the DNS config changes.
-  CreateResolverWithLimitsAndParams(1u, DefaultParams(proc_.get()));
+  CreateResolverWithLimitsAndParams(1u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
   DnsConfig config = CreateValidDnsConfig();
   ChangeDnsConfig(config);
 
@@ -2118,6 +3388,46 @@
   EXPECT_EQ(HostCache::Entry::SOURCE_HOSTS, cache_entry->source());
 }
 
+TEST_F(HostResolverImplDnsTest, CacheHostsLookupOnConfigChange_ResolveHost) {
+  // Only allow 1 resolution at a time, so that the second lookup is queued and
+  // occurs when the DNS config changes.
+  CreateResolverWithLimitsAndParams(1u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
+  DnsConfig config = CreateValidDnsConfig();
+  ChangeDnsConfig(config);
+
+  proc_->AddRuleForAllFamilies(std::string(),
+                               std::string());  // Default to failures.
+  proc_->SignalMultiple(1u);  // For the first request which fails.
+
+  ResolveHostResponseHelper failure_response(resolver_->CreateRequest(
+      HostPortPair("nx_ipv4", 80), NetLogWithSource()));
+  ResolveHostResponseHelper queued_response(resolver_->CreateRequest(
+      HostPortPair("nx_ipv6", 80), NetLogWithSource()));
+
+  DnsHosts hosts;
+  hosts[DnsHostsKey("nx_ipv4", ADDRESS_FAMILY_IPV4)] =
+      IPAddress::IPv4Localhost();
+  hosts[DnsHostsKey("nx_ipv6", ADDRESS_FAMILY_IPV6)] =
+      IPAddress::IPv6Localhost();
+
+  config.hosts = hosts;
+  ChangeDnsConfig(config);
+
+  EXPECT_THAT(failure_response.result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_THAT(queued_response.result_error(), IsOk());
+  EXPECT_THAT(
+      queued_response.request()->GetAddressResults().value().endpoints(),
+      testing::ElementsAre(CreateExpected("::1", 80)));
+
+  // Resolutions done by consulting the HOSTS file when the DNS config changes
+  // should result in a cache entry with SOURCE_HOSTS.
+  const HostCache::Entry* cache_entry =
+      GetCacheEntry(*CreateRequest("nx_ipv6", 80));
+  ASSERT_THAT(cache_entry, NotNull());
+  EXPECT_EQ(HostCache::Entry::SOURCE_HOSTS, cache_entry->source());
+}
+
 TEST_F(HostResolverImplDnsTest, BypassDnsTask) {
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2142,6 +3452,40 @@
     EXPECT_EQ(OK, requests_[i]->WaitForResult()) << i;
 }
 
+TEST_F(HostResolverImplDnsTest, BypassDnsTask_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRuleForAllFamilies(std::string(),
+                               std::string());  // Default to failures.
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("ok.local", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("ok.local.", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("oklocal", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("oklocal.", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource())));
+
+  proc_->SignalMultiple(5u);
+
+  for (size_t i = 0; i < 2; ++i)
+    EXPECT_THAT(responses[i]->result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+
+  for (size_t i = 2; i < responses.size(); ++i)
+    EXPECT_THAT(responses[i]->result_error(), IsOk());
+}
+
+// TODO(crbug.com/821021): Create a ResolveHost version of this test once
+// system-only resolves are supported.
 TEST_F(HostResolverImplDnsTest, SystemOnlyBypassesDnsTask) {
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2200,6 +3544,49 @@
   EXPECT_THAT(req->WaitForResult(), IsOk());
 }
 
+TEST_F(HostResolverImplDnsTest,
+       DisableDnsClientOnPersistentFailure_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRuleForAllFamilies(std::string(),
+                               std::string());  // Default to failures.
+
+  // Check that DnsTask works.
+  ResolveHostResponseHelper initial_response(
+      resolver_->CreateRequest(HostPortPair("ok_1", 80), NetLogWithSource()));
+  EXPECT_THAT(initial_response.result_error(), IsOk());
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  for (unsigned i = 0; i < maximum_dns_failures(); ++i) {
+    // Use custom names to require separate Jobs.
+    std::string hostname = base::StringPrintf("nx_%u", i);
+    // Ensure fallback to ProcTask succeeds.
+    proc_->AddRuleForAllFamilies(hostname, "192.168.1.101");
+    responses.emplace_back(
+        std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+            HostPortPair(hostname, 80), NetLogWithSource())));
+  }
+
+  proc_->SignalMultiple(responses.size());
+
+  for (size_t i = 0; i < responses.size(); ++i)
+    EXPECT_THAT(responses[i]->result_error(), IsOk());
+
+  ASSERT_FALSE(proc_->HasBlockedRequests());
+
+  // DnsTask should be disabled by now.
+  ResolveHostResponseHelper fail_response(
+      resolver_->CreateRequest(HostPortPair("ok_2", 80), NetLogWithSource()));
+  proc_->SignalMultiple(1u);
+  EXPECT_THAT(fail_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+
+  // Check that it is re-enabled after DNS change.
+  ChangeDnsConfig(CreateValidDnsConfig());
+  ResolveHostResponseHelper reenabled_response(
+      resolver_->CreateRequest(HostPortPair("ok_3", 80), NetLogWithSource()));
+  EXPECT_THAT(reenabled_response.result_error(), IsOk());
+}
+
 TEST_F(HostResolverImplDnsTest, DontDisableDnsClientOnSporadicFailure) {
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2227,6 +3614,37 @@
   EXPECT_THAT(req->WaitForResult(), IsOk());
 }
 
+TEST_F(HostResolverImplDnsTest,
+       DontDisableDnsClientOnSporadicFailure_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  // |proc_| defaults to successes.
+
+  // 20 failures interleaved with 20 successes.
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  for (unsigned i = 0; i < 40; ++i) {
+    // Use custom names to require separate Jobs.
+    std::string hostname = (i % 2) == 0 ? base::StringPrintf("nx_%u", i)
+                                        : base::StringPrintf("ok_%u", i);
+    responses.emplace_back(
+        std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+            HostPortPair(hostname, 80), NetLogWithSource())));
+  }
+
+  proc_->SignalMultiple(40u);
+
+  for (size_t i = 0; i < requests_.size(); ++i)
+    EXPECT_THAT(responses[i]->result_error(), IsOk());
+
+  // Make |proc_| default to failures.
+  proc_->AddRuleForAllFamilies(std::string(), std::string());
+
+  // DnsTask should still be enabled.
+  ResolveHostResponseHelper final_response(resolver_->CreateRequest(
+      HostPortPair("ok_last", 80), NetLogWithSource()));
+  EXPECT_THAT(final_response.result_error(), IsOk());
+}
+
 // Confirm that resolving "localhost" is unrestricted even if there are no
 // global IPv6 address. See SystemHostResolverCall for rationale.
 // Test both the DnsClient and system host resolver paths.
@@ -2293,6 +3711,51 @@
   EXPECT_TRUE(req->HasAddress("::1", 80));
 }
 
+// Confirm that resolving "localhost" is unrestricted even if there are no
+// global IPv6 address. See SystemHostResolverCall for rationale.
+// Test both the DnsClient and system host resolver paths.
+TEST_F(HostResolverImplDnsTest, DualFamilyLocalhost_ResolveHost) {
+  CreateResolverWithLimitsAndParams(kMaxJobs, DefaultParams(proc_.get()),
+                                    false /* ipv6_reachable */);
+
+  // Make request fail if we actually get to the system resolver.
+  proc_->AddRuleForAllFamilies(std::string(), std::string());
+
+  // Try without DnsClient.
+  resolver_->SetDnsClient(nullptr);
+  ResolveHostResponseHelper system_response(resolver_->CreateRequest(
+      HostPortPair("localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(system_response.result_error(), IsOk());
+  EXPECT_THAT(
+      system_response.request()->GetAddressResults().value().endpoints(),
+      testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                    CreateExpected("::1", 80)));
+
+  // With DnsClient
+  resolver_->SetDnsClient(std::unique_ptr<DnsClient>(
+      new MockDnsClient(CreateValidDnsConfig(), dns_rules_)));
+  ResolveHostResponseHelper builtin_response(resolver_->CreateRequest(
+      HostPortPair("localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(builtin_response.result_error(), IsOk());
+  EXPECT_THAT(
+      builtin_response.request()->GetAddressResults().value().endpoints(),
+      testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                    CreateExpected("::1", 80)));
+
+  // DnsClient configured without ipv6 (but ipv6 should still work for
+  // localhost).
+  DnsConfig config = CreateValidDnsConfig();
+  config.use_local_ipv6 = false;
+  ChangeDnsConfig(config);
+  ResolveHostResponseHelper ipv6_disabled_response(resolver_->CreateRequest(
+      HostPortPair("localhost", 80), NetLogWithSource()));
+  EXPECT_THAT(ipv6_disabled_response.result_error(), IsOk());
+  EXPECT_THAT(
+      ipv6_disabled_response.request()->GetAddressResults().value().endpoints(),
+      testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                    CreateExpected("::1", 80)));
+}
+
 // Cancel a request with a single DNS transaction active.
 TEST_F(HostResolverImplDnsTest, CancelWithOneTransactionActive) {
   ChangeDnsConfig(CreateValidDnsConfig());
@@ -2305,6 +3768,27 @@
   // Dispatcher state checked in TearDown.
 }
 
+// Cancel a request with a single DNS transaction active.
+TEST_F(HostResolverImplDnsTest, CancelWithOneTransactionActive_ResolveHost) {
+  // Disable ipv6 to ensure we'll only try a single transaction for the host.
+  CreateResolverWithLimitsAndParams(kMaxJobs, DefaultParams(proc_.get()),
+                                    false /* ipv6_reachable */);
+  DnsConfig config = CreateValidDnsConfig();
+  config.use_local_ipv6 = false;
+  ChangeDnsConfig(config);
+
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource()));
+  ASSERT_FALSE(response.complete());
+  ASSERT_EQ(1u, num_running_dispatcher_jobs());
+
+  response.CancelRequest();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+
+  // Dispatcher state checked in TearDown.
+}
+
 // Cancel a request with a single DNS transaction active and another pending.
 TEST_F(HostResolverImplDnsTest, CancelWithOneTransactionActiveOnePending) {
   CreateSerialResolver();
@@ -2317,6 +3801,23 @@
   // Dispatcher state checked in TearDown.
 }
 
+// Cancel a request with a single DNS transaction active and another pending.
+TEST_F(HostResolverImplDnsTest,
+       CancelWithOneTransactionActiveOnePending_ResolveHost) {
+  CreateSerialResolver();
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource()));
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+
+  response.CancelRequest();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+
+  // Dispatcher state checked in TearDown.
+}
+
 // Cancel a request with two DNS transactions active.
 TEST_F(HostResolverImplDnsTest, CancelWithTwoTransactionsActive) {
   ChangeDnsConfig(CreateValidDnsConfig());
@@ -2328,10 +3829,26 @@
   // Dispatcher state checked in TearDown.
 }
 
+// Cancel a request with two DNS transactions active.
+TEST_F(HostResolverImplDnsTest, CancelWithTwoTransactionsActive_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource()));
+  EXPECT_EQ(2u, num_running_dispatcher_jobs());
+
+  response.CancelRequest();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+
+  // Dispatcher state checked in TearDown.
+}
+
 // Delete a resolver with some active requests and some queued requests.
 TEST_F(HostResolverImplDnsTest, DeleteWithActiveTransactions) {
   // At most 10 Jobs active at once.
-  CreateResolverWithLimitsAndParams(10u, DefaultParams(proc_.get()));
+  CreateResolverWithLimitsAndParams(10u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
 
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2351,6 +3868,32 @@
   resolver_.reset();
 }
 
+// Delete a resolver with some active requests and some queued requests.
+TEST_F(HostResolverImplDnsTest, DeleteWithActiveTransactions_ResolveHost) {
+  // At most 10 Jobs active at once.
+  CreateResolverWithLimitsAndParams(10u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
+
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  // Add 12 DNS lookups (creating well more than 10 transaction).
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  for (int i = 0; i < 12; ++i) {
+    std::string hostname = base::StringPrintf("ok%i", i);
+    responses.emplace_back(
+        std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+            HostPortPair(hostname, 80), NetLogWithSource())));
+  }
+  EXPECT_EQ(10u, num_running_dispatcher_jobs());
+
+  resolver_.reset();
+
+  base::RunLoop().RunUntilIdle();
+  for (auto& response : responses) {
+    EXPECT_FALSE(response->complete());
+  }
+}
+
 // Cancel a request with only the IPv6 transaction active.
 TEST_F(HostResolverImplDnsTest, CancelWithIPv6TransactionActive) {
   ChangeDnsConfig(CreateValidDnsConfig());
@@ -2367,6 +3910,25 @@
   // Dispatcher state checked in TearDown.
 }
 
+// Cancel a request with only the IPv6 transaction active.
+TEST_F(HostResolverImplDnsTest, CancelWithIPv6TransactionActive_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("6slow_ok", 80), NetLogWithSource()));
+  EXPECT_EQ(2u, num_running_dispatcher_jobs());
+
+  // The IPv4 request should complete, the IPv6 request is still pending.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+
+  response.CancelRequest();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+
+  // Dispatcher state checked in TearDown.
+}
+
 // Cancel a request with only the IPv4 transaction pending.
 TEST_F(HostResolverImplDnsTest, CancelWithIPv4TransactionPending) {
   set_fallback_to_proctask(false);
@@ -2383,6 +3945,24 @@
   requests_[0]->Cancel();
 }
 
+// Cancel a request with only the IPv4 transaction pending.
+TEST_F(HostResolverImplDnsTest, CancelWithIPv4TransactionPending_ResolveHost) {
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("4slow_ok", 80), NetLogWithSource()));
+  EXPECT_EQ(2u, num_running_dispatcher_jobs());
+
+  // The IPv6 request should complete, the IPv4 request is still pending.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+
+  response.CancelRequest();
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(response.complete());
+}
+
 // Test cases where AAAA completes first.
 TEST_F(HostResolverImplDnsTest, AAAACompletesFirst) {
   set_fallback_to_proctask(false);
@@ -2401,8 +3981,8 @@
   EXPECT_FALSE(requests_[0]->completed());
   EXPECT_FALSE(requests_[1]->completed());
   EXPECT_FALSE(requests_[2]->completed());
-  // The IPv6 of the third request should have failed and resulted in cancelling
-  // the IPv4 request.
+  // The IPv6 of request 3 should have failed and resulted in cancelling the
+  // IPv4 request.
   EXPECT_TRUE(requests_[3]->completed());
   EXPECT_THAT(requests_[3]->result(), IsError(ERR_DNS_TIMED_OUT));
   EXPECT_EQ(3u, num_running_dispatcher_jobs());
@@ -2423,6 +4003,47 @@
   EXPECT_THAT(requests_[2]->result(), IsError(ERR_DNS_TIMED_OUT));
 }
 
+// Test cases where AAAA completes first.
+TEST_F(HostResolverImplDnsTest, AAAACompletesFirst_ResolveHost) {
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("4slow_ok", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("4slow_4ok", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("4slow_4timeout", 80), NetLogWithSource())));
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("4slow_6timeout", 80), NetLogWithSource())));
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_FALSE(responses[0]->complete());
+  EXPECT_FALSE(responses[1]->complete());
+  EXPECT_FALSE(responses[2]->complete());
+  // The IPv6 of request 3 should have failed and resulted in cancelling the
+  // IPv4 request.
+  EXPECT_THAT(responses[3]->result_error(), IsError(ERR_DNS_TIMED_OUT));
+  EXPECT_EQ(3u, num_running_dispatcher_jobs());
+
+  dns_client_->CompleteDelayedTransactions();
+  EXPECT_THAT(responses[0]->result_error(), IsOk());
+  EXPECT_THAT(responses[0]->request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+
+  EXPECT_THAT(responses[1]->result_error(), IsOk());
+  EXPECT_THAT(responses[1]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("127.0.0.1", 80)));
+
+  EXPECT_THAT(responses[2]->result_error(), IsError(ERR_DNS_TIMED_OUT));
+}
+
 // Test the case where only a single transaction slot is available.
 TEST_F(HostResolverImplDnsTest, SerialResolver) {
   CreateSerialResolver();
@@ -2440,10 +4061,30 @@
   EXPECT_TRUE(requests_[0]->HasAddress("::1", 80));
 }
 
+// Test the case where only a single transaction slot is available.
+TEST_F(HostResolverImplDnsTest, SerialResolver_ResolveHost) {
+  CreateSerialResolver();
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource()));
+  EXPECT_FALSE(response.complete());
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+
+  base::RunLoop().RunUntilIdle();
+  EXPECT_TRUE(response.complete());
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+}
+
 // Test the case where the AAAA query is started when another transaction
 // completes.
 TEST_F(HostResolverImplDnsTest, AAAAStartsAfterOtherJobFinishes) {
-  CreateResolverWithLimitsAndParams(2u, DefaultParams(proc_.get()));
+  CreateResolverWithLimitsAndParams(2u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
   set_fallback_to_proctask(false);
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2469,6 +4110,36 @@
   EXPECT_TRUE(requests_[1]->HasAddress("::1", 80));
 }
 
+// Test the case where subsequent transactions are handled on transaction
+// completion when only part of a multi-transaction request could be initially
+// started.
+TEST_F(HostResolverImplDnsTest, AAAAStartsAfterOtherJobFinishes_ResolveHost) {
+  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  ResolveHostResponseHelper response0(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource()));
+  EXPECT_EQ(2u, num_running_dispatcher_jobs());
+  ResolveHostResponseHelper response1(resolver_->CreateRequest(
+      HostPortPair("4slow_ok", 80), NetLogWithSource()));
+  EXPECT_EQ(3u, num_running_dispatcher_jobs());
+
+  // Request 0's transactions should complete, starting Request 1's second
+  // transaction, which should also complete.
+  base::RunLoop().RunUntilIdle();
+  EXPECT_EQ(1u, num_running_dispatcher_jobs());
+  EXPECT_TRUE(response0.complete());
+  EXPECT_FALSE(response1.complete());
+
+  dns_client_->CompleteDelayedTransactions();
+  EXPECT_THAT(response1.result_error(), IsOk());
+  EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
+              testing::UnorderedElementsAre(CreateExpected("127.0.0.1", 80),
+                                            CreateExpected("::1", 80)));
+}
+
 // Tests the case that a Job with a single transaction receives an empty address
 // list, triggering fallback to ProcTask.
 TEST_F(HostResolverImplDnsTest, IPv4EmptyFallback) {
@@ -2482,6 +4153,26 @@
   EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80));
 }
 
+// Tests the case that a Job with a single transaction receives an empty address
+// list, triggering fallback to ProcTask.
+TEST_F(HostResolverImplDnsTest, IPv4EmptyFallback_ResolveHost) {
+  // Disable ipv6 to ensure we'll only try a single transaction for the host.
+  CreateResolverWithLimitsAndParams(kMaxJobs, DefaultParams(proc_.get()),
+                                    false /* ipv6_reachable */);
+  DnsConfig config = CreateValidDnsConfig();
+  config.use_local_ipv6 = false;
+  ChangeDnsConfig(config);
+
+  proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1");
+  proc_->SignalMultiple(1u);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("empty_fallback", 80), NetLogWithSource()));
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.1", 80)));
+}
+
 // Tests the case that a Job with two transactions receives two empty address
 // lists, triggering fallback to ProcTask.
 TEST_F(HostResolverImplDnsTest, UnspecEmptyFallback) {
@@ -2495,13 +4186,29 @@
   EXPECT_TRUE(requests_[0]->HasOneAddress("192.168.0.1", 80));
 }
 
+// Tests the case that a Job with two transactions receives two empty address
+// lists, triggering fallback to ProcTask.
+TEST_F(HostResolverImplDnsTest, UnspecEmptyFallback_ResolveHost) {
+  ChangeDnsConfig(CreateValidDnsConfig());
+  proc_->AddRuleForAllFamilies("empty_fallback", "192.168.0.1");
+  proc_->SignalMultiple(1u);
+
+  ResolveHostResponseHelper response(resolver_->CreateRequest(
+      HostPortPair("empty_fallback", 80), NetLogWithSource()));
+
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.1", 80)));
+}
+
 // Tests getting a new invalid DnsConfig while there are active DnsTasks.
 TEST_F(HostResolverImplDnsTest, InvalidDnsConfigWithPendingRequests) {
   // At most 3 jobs active at once.  This number is important, since we want to
   // make sure that aborting the first HostResolverImpl::Job does not trigger
   // another DnsTransaction on the second Job when it releases its second
   // prioritized dispatcher slot.
-  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()));
+  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
 
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2531,6 +4238,56 @@
   EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80));
 }
 
+// Tests getting a new invalid DnsConfig while there are active DnsTasks.
+TEST_F(HostResolverImplDnsTest,
+       InvalidDnsConfigWithPendingRequests_ResolveHost) {
+  // At most 3 jobs active at once.  This number is important, since we want
+  // to make sure that aborting the first HostResolverImpl::Job does not
+  // trigger another DnsTransaction on the second Job when it releases its
+  // second prioritized dispatcher slot.
+  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
+
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRuleForAllFamilies("slow_nx1", "192.168.0.1");
+  proc_->AddRuleForAllFamilies("slow_nx2", "192.168.0.2");
+  proc_->AddRuleForAllFamilies("ok", "192.168.0.3");
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  // First active job gets two slots.
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("slow_nx1", 80), NetLogWithSource())));
+  // Next job gets one slot, and waits on another.
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("slow_nx2", 80), NetLogWithSource())));
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource())));
+
+  EXPECT_EQ(3u, num_running_dispatcher_jobs());
+  for (auto& response : responses) {
+    EXPECT_FALSE(response->complete());
+  }
+
+  // Clear DNS config.  Request:
+  // 0 fully in-progress should be aborted.
+  // 1 partially in-progress should be fully aborted.
+  // 2 queued up should run using ProcTask.
+  ChangeDnsConfig(DnsConfig());
+  EXPECT_THAT(responses[0]->result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_THAT(responses[1]->result_error(), IsError(ERR_NETWORK_CHANGED));
+  EXPECT_FALSE(responses[2]->complete());
+
+  // Finish up the third job.  Should bypass the DnsClient, and get its
+  // results from MockHostResolverProc.
+  proc_->SignalMultiple(1u);
+  EXPECT_THAT(responses[2]->result_error(), IsOk());
+  EXPECT_THAT(responses[2]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.3", 80)));
+}
+
 // Test that initial DNS config read signals do not abort pending requests when
 // using DnsClient.
 TEST_F(HostResolverImplDnsTest, DontAbortOnInitialDNSConfigRead) {
@@ -2547,6 +4304,23 @@
   EXPECT_THAT(req->WaitForResult(), IsOk());
 }
 
+// Test that initial DNS config read signals do not abort pending requests
+// when using DnsClient.
+TEST_F(HostResolverImplDnsTest, DontAbortOnInitialDNSConfigRead_ResolveHost) {
+  // DnsClient is enabled, but there's no DnsConfig, so the request should start
+  // using ProcTask.
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("host1", 70), NetLogWithSource()));
+  EXPECT_FALSE(response.complete());
+
+  EXPECT_TRUE(proc_->WaitFor(1u));
+  // Send the initial config read signal, with a valid config.
+  SetInitialDnsConfig(CreateValidDnsConfig());
+  proc_->SignalAll();
+
+  EXPECT_THAT(response.result_error(), IsOk());
+}
+
 // Tests the case that DnsClient is automatically disabled due to failures
 // while there are active DnsTasks.
 TEST_F(HostResolverImplDnsTest,
@@ -2557,7 +4331,8 @@
   // occupying two slots has its DnsTask aborted is the case most likely to run
   // into problems.
   for (size_t limit = 1u; limit < 6u; ++limit) {
-    CreateResolverWithLimitsAndParams(limit, DefaultParams(proc_.get()));
+    CreateResolverWithLimitsAndParams(limit, DefaultParams(proc_.get()),
+                                      true /* ipv6_reachable */);
 
     ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2597,13 +4372,80 @@
   }
 }
 
+// Tests the case that DnsClient is automatically disabled due to failures
+// while there are active DnsTasks.
+TEST_F(HostResolverImplDnsTest,
+       AutomaticallyDisableDnsClientWithPendingRequests_ResolveHost) {
+  // Trying different limits is important for this test:  Different limits
+  // result in different behavior when aborting in-progress DnsTasks.  Having
+  // a DnsTask that has one job active and one in the queue when another job
+  // occupying two slots has its DnsTask aborted is the case most likely to run
+  // into problems.
+  for (size_t limit = 1u; limit < 6u; ++limit) {
+    CreateResolverWithLimitsAndParams(limit, DefaultParams(proc_.get()),
+                                      true /* ipv6_reachable */);
+
+    ChangeDnsConfig(CreateValidDnsConfig());
+
+    // Queue up enough failures to disable DnsTasks.  These will all fall back
+    // to ProcTasks, and succeed there.
+    std::vector<std::unique_ptr<ResolveHostResponseHelper>> failure_responses;
+    for (unsigned i = 0u; i < maximum_dns_failures(); ++i) {
+      std::string host = base::StringPrintf("nx%u", i);
+      proc_->AddRuleForAllFamilies(host, "192.168.0.1");
+      failure_responses.emplace_back(
+          std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+              HostPortPair(host, 80), NetLogWithSource())));
+      EXPECT_FALSE(failure_responses[i]->complete());
+    }
+
+    // These requests should all bypass DnsTasks, due to the above failures,
+    // so should end up using ProcTasks.
+    proc_->AddRuleForAllFamilies("slow_ok1", "192.168.0.2");
+    ResolveHostResponseHelper response0(resolver_->CreateRequest(
+        HostPortPair("slow_ok1", 80), NetLogWithSource()));
+    EXPECT_FALSE(response0.complete());
+    proc_->AddRuleForAllFamilies("slow_ok2", "192.168.0.3");
+    ResolveHostResponseHelper response1(resolver_->CreateRequest(
+        HostPortPair("slow_ok2", 80), NetLogWithSource()));
+    EXPECT_FALSE(response1.complete());
+    proc_->AddRuleForAllFamilies("slow_ok3", "192.168.0.4");
+    ResolveHostResponseHelper response2(resolver_->CreateRequest(
+        HostPortPair("slow_ok3", 80), NetLogWithSource()));
+    EXPECT_FALSE(response2.complete());
+
+    proc_->SignalMultiple(maximum_dns_failures() + 3);
+
+    for (size_t i = 0u; i < maximum_dns_failures(); ++i) {
+      EXPECT_THAT(failure_responses[i]->result_error(), IsOk());
+      EXPECT_THAT(failure_responses[i]
+                      ->request()
+                      ->GetAddressResults()
+                      .value()
+                      .endpoints(),
+                  testing::ElementsAre(CreateExpected("192.168.0.1", 80)));
+    }
+
+    EXPECT_THAT(response0.result_error(), IsOk());
+    EXPECT_THAT(response0.request()->GetAddressResults().value().endpoints(),
+                testing::ElementsAre(CreateExpected("192.168.0.2", 80)));
+    EXPECT_THAT(response1.result_error(), IsOk());
+    EXPECT_THAT(response1.request()->GetAddressResults().value().endpoints(),
+                testing::ElementsAre(CreateExpected("192.168.0.3", 80)));
+    EXPECT_THAT(response2.result_error(), IsOk());
+    EXPECT_THAT(response2.request()->GetAddressResults().value().endpoints(),
+                testing::ElementsAre(CreateExpected("192.168.0.4", 80)));
+  }
+}
+
 // Tests a call to SetDnsClient while there are active DnsTasks.
 TEST_F(HostResolverImplDnsTest, ManuallyDisableDnsClientWithPendingRequests) {
   // At most 3 jobs active at once.  This number is important, since we want to
   // make sure that aborting the first HostResolverImpl::Job does not trigger
   // another DnsTransaction on the second Job when it releases its second
   // prioritized dispatcher slot.
-  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()));
+  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
 
   ChangeDnsConfig(CreateValidDnsConfig());
 
@@ -2636,6 +4478,59 @@
   EXPECT_TRUE(requests_[2]->HasOneAddress("192.168.0.3", 80));
 }
 
+// Tests a call to SetDnsClient while there are active DnsTasks.
+TEST_F(HostResolverImplDnsTest,
+       ManuallyDisableDnsClientWithPendingRequests_ResolveHost) {
+  // At most 3 jobs active at once.  This number is important, since we want to
+  // make sure that aborting the first HostResolverImpl::Job does not trigger
+  // another DnsTransaction on the second Job when it releases its second
+  // prioritized dispatcher slot.
+  CreateResolverWithLimitsAndParams(3u, DefaultParams(proc_.get()),
+                                    true /* ipv6_reachable */);
+
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRuleForAllFamilies("slow_ok1", "192.168.0.1");
+  proc_->AddRuleForAllFamilies("slow_ok2", "192.168.0.2");
+  proc_->AddRuleForAllFamilies("ok", "192.168.0.3");
+
+  std::vector<std::unique_ptr<ResolveHostResponseHelper>> responses;
+  // First active job gets two slots.
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("slow_ok1", 80), NetLogWithSource())));
+  EXPECT_FALSE(responses[0]->complete());
+  // Next job gets one slot, and waits on another.
+  responses.emplace_back(
+      std::make_unique<ResolveHostResponseHelper>(resolver_->CreateRequest(
+          HostPortPair("slow_ok2", 80), NetLogWithSource())));
+  EXPECT_FALSE(responses[1]->complete());
+  // Next one is queued.
+  responses.emplace_back(std::make_unique<ResolveHostResponseHelper>(
+      resolver_->CreateRequest(HostPortPair("ok", 80), NetLogWithSource())));
+  EXPECT_FALSE(responses[2]->complete());
+
+  EXPECT_EQ(3u, num_running_dispatcher_jobs());
+
+  // Clear DnsClient.  The two in-progress jobs should fall back to a ProcTask,
+  // and the next one should be started with a ProcTask.
+  resolver_->SetDnsClient(std::unique_ptr<DnsClient>());
+
+  // All three in-progress requests should now be running a ProcTask.
+  EXPECT_EQ(3u, num_running_dispatcher_jobs());
+  proc_->SignalMultiple(3u);
+
+  for (auto& response : responses) {
+    EXPECT_THAT(response->result_error(), IsOk());
+  }
+  EXPECT_THAT(responses[0]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.1", 80)));
+  EXPECT_THAT(responses[1]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.2", 80)));
+  EXPECT_THAT(responses[2]->request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("192.168.0.3", 80)));
+}
+
 TEST_F(HostResolverImplDnsTest, NoIPv6OnWifi) {
   // CreateSerialResolver will destroy the current resolver_ which will attempt
   // to remove itself from the NetworkChangeNotifier. If this happens after a
@@ -2723,6 +4618,56 @@
   EXPECT_TRUE(requests_[5]->HasOneAddress("::2", 80));
 }
 
+TEST_F(HostResolverImplDnsTest, NoIPv6OnWifi_ResolveHost) {
+  // CreateSerialResolver will destroy the current resolver_ which will attempt
+  // to remove itself from the NetworkChangeNotifier. If this happens after a
+  // new NetworkChangeNotifier is active, then it will not remove itself from
+  // the old NetworkChangeNotifier which is a potential use-after-free.
+  resolver_ = nullptr;
+  test::ScopedMockNetworkChangeNotifier notifier;
+  CreateSerialResolver();  // To guarantee order of resolutions.
+  resolver_->SetNoIPv6OnWifi(true);
+
+  notifier.mock_network_change_notifier()->SetConnectionType(
+      NetworkChangeNotifier::CONNECTION_WIFI);
+  // Needed so IPv6 availability check isn't skipped.
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  proc_->AddRule("h1", ADDRESS_FAMILY_UNSPECIFIED, "::3");
+  proc_->AddRule("h1", ADDRESS_FAMILY_IPV4, "1.0.0.1");
+
+  // TODO(crbug.com/821021): Add more requests with different A vs AAAA
+  // specified once supported.
+  ResolveHostResponseHelper response(
+      resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource()));
+
+  proc_->SignalMultiple(1u);
+
+  // Should revert to only IPV4 request.
+  EXPECT_THAT(response.result_error(), IsOk());
+  EXPECT_THAT(response.request()->GetAddressResults().value().endpoints(),
+              testing::ElementsAre(CreateExpected("1.0.0.1", 80)));
+
+  // Now repeat the test on non-wifi to check that IPv6 is used as normal
+  // after the network changes.
+  notifier.mock_network_change_notifier()->SetConnectionType(
+      NetworkChangeNotifier::CONNECTION_4G);
+  base::RunLoop().RunUntilIdle();  // Wait for NetworkChangeNotifier.
+
+  // TODO(crbug.com/821021): Add more requests with different A vs AAAA
+  // specified once supported.
+  ResolveHostResponseHelper no_wifi_response(
+      resolver_->CreateRequest(HostPortPair("h1", 80), NetLogWithSource()));
+
+  proc_->SignalMultiple(1u);
+
+  // IPV6 should be available.
+  EXPECT_THAT(no_wifi_response.result_error(), IsOk());
+  EXPECT_THAT(
+      no_wifi_response.request()->GetAddressResults().value().endpoints(),
+      testing::ElementsAre(CreateExpected("::3", 80)));
+}
+
 TEST_F(HostResolverImplDnsTest, NotFoundTTL) {
   CreateResolver();
   set_fallback_to_proctask(false);
@@ -2754,6 +4699,38 @@
   EXPECT_THAT(cache_entry->ttl(), base::TimeDelta::FromSeconds(86400));
 }
 
+TEST_F(HostResolverImplDnsTest, NotFoundTTL_ResolveHost) {
+  CreateResolver();
+  set_fallback_to_proctask(false);
+  ChangeDnsConfig(CreateValidDnsConfig());
+
+  // NODATA
+  ResolveHostResponseHelper no_data_response(
+      resolver_->CreateRequest(HostPortPair("empty", 80), NetLogWithSource()));
+  EXPECT_THAT(no_data_response.result_error(), IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(no_data_response.request()->GetAddressResults());
+  HostCache::Key key("empty", ADDRESS_FAMILY_UNSPECIFIED, 0);
+  HostCache::EntryStaleness staleness;
+  const HostCache::Entry* cache_entry =
+      resolver_->GetHostCache()->Lookup(key, base::TimeTicks::Now());
+  EXPECT_TRUE(!!cache_entry);
+  EXPECT_TRUE(cache_entry->has_ttl());
+  EXPECT_THAT(cache_entry->ttl(), base::TimeDelta::FromSeconds(86400));
+
+  // NXDOMAIN
+  ResolveHostResponseHelper no_domain_response(resolver_->CreateRequest(
+      HostPortPair("nodomain", 80), NetLogWithSource()));
+  EXPECT_THAT(no_domain_response.result_error(),
+              IsError(ERR_NAME_NOT_RESOLVED));
+  EXPECT_FALSE(no_domain_response.request()->GetAddressResults());
+  HostCache::Key nxkey("nodomain", ADDRESS_FAMILY_UNSPECIFIED, 0);
+  cache_entry =
+      resolver_->GetHostCache()->Lookup(nxkey, base::TimeTicks::Now());
+  EXPECT_TRUE(!!cache_entry);
+  EXPECT_TRUE(cache_entry->has_ttl());
+  EXPECT_THAT(cache_entry->ttl(), base::TimeDelta::FromSeconds(86400));
+}
+
 TEST_F(HostResolverImplTest, ResolveLocalHostname) {
   AddressList addresses;
 
diff --git a/net/dns/host_resolver_mojo.cc b/net/dns/host_resolver_mojo.cc
index 7e53ff3..8256b2fc 100644
--- a/net/dns/host_resolver_mojo.cc
+++ b/net/dns/host_resolver_mojo.cc
@@ -70,6 +70,14 @@
 
 HostResolverMojo::~HostResolverMojo() = default;
 
+std::unique_ptr<HostResolver::ResolveHostRequest>
+HostResolverMojo::CreateRequest(const HostPortPair& host,
+                                const NetLogWithSource& source_net_log) {
+  // TODO(crbug.com/821021): Implement.
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 int HostResolverMojo::Resolve(const RequestInfo& info,
                               RequestPriority priority,
                               AddressList* addresses,
diff --git a/net/dns/host_resolver_mojo.h b/net/dns/host_resolver_mojo.h
index da62ebd0..0057b2f 100644
--- a/net/dns/host_resolver_mojo.h
+++ b/net/dns/host_resolver_mojo.h
@@ -5,6 +5,8 @@
 #ifndef NET_DNS_HOST_RESOLVER_MOJO_H_
 #define NET_DNS_HOST_RESOLVER_MOJO_H_
 
+#include <memory>
+
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "base/threading/thread_checker.h"
@@ -34,6 +36,9 @@
   ~HostResolverMojo() override;
 
   // HostResolver overrides.
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override;
   // Note: |Resolve()| currently ignores |priority|.
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
diff --git a/net/dns/mapped_host_resolver.cc b/net/dns/mapped_host_resolver.cc
index 6e906e74..e9da643 100644
--- a/net/dns/mapped_host_resolver.cc
+++ b/net/dns/mapped_host_resolver.cc
@@ -18,6 +18,14 @@
 
 MappedHostResolver::~MappedHostResolver() = default;
 
+std::unique_ptr<HostResolver::ResolveHostRequest>
+MappedHostResolver::CreateRequest(const HostPortPair& host,
+                                  const NetLogWithSource& source_net_log) {
+  // TODO(crbug.com/821021): Implement.
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 int MappedHostResolver::Resolve(const RequestInfo& original_info,
                                 RequestPriority priority,
                                 AddressList* addresses,
diff --git a/net/dns/mapped_host_resolver.h b/net/dns/mapped_host_resolver.h
index 47437a3..2626b57e3 100644
--- a/net/dns/mapped_host_resolver.h
+++ b/net/dns/mapped_host_resolver.h
@@ -46,6 +46,9 @@
   }
 
   // HostResolver methods:
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override;
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc
index eb7b422..80faf5c 100644
--- a/net/dns/mock_host_resolver.cc
+++ b/net/dns/mock_host_resolver.cc
@@ -103,6 +103,14 @@
   DCHECK(requests_.empty());
 }
 
+std::unique_ptr<HostResolver::ResolveHostRequest>
+MockHostResolverBase::CreateRequest(const HostPortPair& host,
+                                    const NetLogWithSource& source_net_log) {
+  // TODO(crbug.com/821021): Implement.
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 int MockHostResolverBase::Resolve(const RequestInfo& info,
                                   RequestPriority priority,
                                   AddressList* addresses,
@@ -514,6 +522,14 @@
 
 //-----------------------------------------------------------------------------
 
+std::unique_ptr<HostResolver::ResolveHostRequest>
+HangingHostResolver::CreateRequest(const HostPortPair& host,
+                                   const NetLogWithSource& source_net_log) {
+  // TODO(crbug.com/821021): Implement.
+  NOTIMPLEMENTED();
+  return nullptr;
+}
+
 int HangingHostResolver::Resolve(const RequestInfo& info,
                                  RequestPriority priority,
                                  AddressList* addresses,
diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h
index 3ee59d6..b22c427c 100644
--- a/net/dns/mock_host_resolver.h
+++ b/net/dns/mock_host_resolver.h
@@ -9,6 +9,7 @@
 
 #include <list>
 #include <map>
+#include <memory>
 #include <string>
 
 #include "base/macros.h"
@@ -83,6 +84,9 @@
   }
 
   // HostResolver methods:
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override;
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
@@ -287,6 +291,9 @@
 // HangingHostResolver never completes its |Resolve| request.
 class HangingHostResolver : public HostResolver {
  public:
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override;
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
diff --git a/net/proxy_resolution/proxy_resolver_v8_tracing_unittest.cc b/net/proxy_resolution/proxy_resolver_v8_tracing_unittest.cc
index 1df03f9..49722ff 100644
--- a/net/proxy_resolution/proxy_resolver_v8_tracing_unittest.cc
+++ b/net/proxy_resolution/proxy_resolver_v8_tracing_unittest.cc
@@ -693,6 +693,13 @@
   BlockableHostResolver()
       : num_cancelled_requests_(0), waiting_for_resolve_(false) {}
 
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
diff --git a/net/proxy_resolution/proxy_resolver_v8_tracing_wrapper_unittest.cc b/net/proxy_resolution/proxy_resolver_v8_tracing_wrapper_unittest.cc
index a29722b5..7610e8bb 100644
--- a/net/proxy_resolution/proxy_resolver_v8_tracing_wrapper_unittest.cc
+++ b/net/proxy_resolution/proxy_resolver_v8_tracing_wrapper_unittest.cc
@@ -790,6 +790,13 @@
   BlockableHostResolver()
       : num_cancelled_requests_(0), waiting_for_resolve_(false) {}
 
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
diff --git a/net/quic/chromium/crypto/proof_verifier_chromium.cc b/net/quic/chromium/crypto/proof_verifier_chromium.cc
index 33044dd4..e01b328 100644
--- a/net/quic/chromium/crypto/proof_verifier_chromium.cc
+++ b/net/quic/chromium/crypto/proof_verifier_chromium.cc
@@ -586,6 +586,7 @@
     std::unique_ptr<quic::ProofVerifyDetails>* verify_details,
     std::unique_ptr<quic::ProofVerifierCallback> callback) {
   if (!verify_context) {
+    DLOG(FATAL) << "Missing proof verify context";
     *error_details = "Missing context";
     return quic::QUIC_FAILURE;
   }
@@ -631,6 +632,12 @@
   return status;
 }
 
+std::unique_ptr<quic::ProofVerifyContext>
+ProofVerifierChromium::CreateDefaultContext() {
+  return std::make_unique<ProofVerifyContextChromium>(0,
+                                                      net::NetLogWithSource());
+}
+
 void ProofVerifierChromium::OnJobComplete(Job* job) {
   active_jobs_.erase(job);
 }
diff --git a/net/quic/chromium/crypto/proof_verifier_chromium.h b/net/quic/chromium/crypto/proof_verifier_chromium.h
index 2db83b7..33a16ba 100644
--- a/net/quic/chromium/crypto/proof_verifier_chromium.h
+++ b/net/quic/chromium/crypto/proof_verifier_chromium.h
@@ -97,6 +97,7 @@
       std::string* error_details,
       std::unique_ptr<quic::ProofVerifyDetails>* verify_details,
       std::unique_ptr<quic::ProofVerifierCallback> callback) override;
+  std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override;
 
  private:
   class Job;
diff --git a/net/quic/chromium/crypto_test_utils_chromium.cc b/net/quic/chromium/crypto_test_utils_chromium.cc
index e2832cd..175dd3f 100644
--- a/net/quic/chromium/crypto_test_utils_chromium.cc
+++ b/net/quic/chromium/crypto_test_utils_chromium.cc
@@ -109,9 +109,9 @@
       std::make_unique<net::DefaultCTPolicyEnforcer>(), "quic-root.pem");
 }
 
-quic::ProofVerifyContext* ProofVerifyContextForTesting() {
-  return new net::ProofVerifyContextChromium(/*cert_verify_flags=*/0,
-                                             net::NetLogWithSource());
+std::unique_ptr<quic::ProofVerifyContext> ProofVerifyContextForTesting() {
+  return std::make_unique<net::ProofVerifyContextChromium>(
+      /*cert_verify_flags=*/0, net::NetLogWithSource());
 }
 
 }  // namespace crypto_test_utils
diff --git a/net/quic/chromium/quic_crypto_client_stream_factory.cc b/net/quic/chromium/quic_crypto_client_stream_factory.cc
index 84327a51..4b85ce6 100644
--- a/net/quic/chromium/quic_crypto_client_stream_factory.cc
+++ b/net/quic/chromium/quic_crypto_client_stream_factory.cc
@@ -21,7 +21,7 @@
       std::unique_ptr<quic::ProofVerifyContext> proof_verify_context,
       quic::QuicCryptoClientConfig* crypto_config) override {
     return new quic::QuicCryptoClientStream(server_id, session,
-                                            proof_verify_context.release(),
+                                            std::move(proof_verify_context),
                                             crypto_config, session);
   }
 };
diff --git a/net/socket/socks_client_socket_unittest.cc b/net/socket/socks_client_socket_unittest.cc
index 783afe45..da5e90a9 100644
--- a/net/socket/socks_client_socket_unittest.cc
+++ b/net/socket/socks_client_socket_unittest.cc
@@ -107,6 +107,13 @@
  public:
   HangingHostResolverWithCancel() : outstanding_request_(NULL) {}
 
+  std::unique_ptr<ResolveHostRequest> CreateRequest(
+      const HostPortPair& host,
+      const NetLogWithSource& net_log) override {
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+
   int Resolve(const RequestInfo& info,
               RequestPriority priority,
               AddressList* addresses,
diff --git a/net/third_party/quic/core/crypto/proof_verifier.h b/net/third_party/quic/core/crypto/proof_verifier.h
index 7de0bae..16c52dc 100644
--- a/net/third_party/quic/core/crypto/proof_verifier.h
+++ b/net/third_party/quic/core/crypto/proof_verifier.h
@@ -107,6 +107,11 @@
       QuicString* error_details,
       std::unique_ptr<ProofVerifyDetails>* details,
       std::unique_ptr<ProofVerifierCallback> callback) = 0;
+
+  // Returns a ProofVerifyContext instance which can be use for subsequent
+  // verifications. Applications may chose create a different context and
+  // supply it for verifications instead.
+  virtual std::unique_ptr<ProofVerifyContext> CreateDefaultContext() = 0;
 };
 
 }  // namespace quic
diff --git a/net/third_party/quic/core/quic_crypto_client_handshaker.cc b/net/third_party/quic/core/quic_crypto_client_handshaker.cc
index 9707bb4f..cc5ec255 100644
--- a/net/third_party/quic/core/quic_crypto_client_handshaker.cc
+++ b/net/third_party/quic/core/quic_crypto_client_handshaker.cc
@@ -77,7 +77,7 @@
     const QuicServerId& server_id,
     QuicCryptoClientStream* stream,
     QuicSession* session,
-    ProofVerifyContext* verify_context,
+    std::unique_ptr<ProofVerifyContext> verify_context,
     QuicCryptoClientConfig* crypto_config,
     QuicCryptoClientStream::ProofHandler* proof_handler)
     : QuicCryptoHandshaker(stream, session),
@@ -91,7 +91,7 @@
       channel_id_sent_(false),
       channel_id_source_callback_run_(false),
       channel_id_source_callback_(nullptr),
-      verify_context_(verify_context),
+      verify_context_(std::move(verify_context)),
       proof_verify_callback_(nullptr),
       proof_handler_(proof_handler),
       verify_ok_(false),
diff --git a/net/third_party/quic/core/quic_crypto_client_handshaker.h b/net/third_party/quic/core/quic_crypto_client_handshaker.h
index 3d20a9e..c2859860c 100644
--- a/net/third_party/quic/core/quic_crypto_client_handshaker.h
+++ b/net/third_party/quic/core/quic_crypto_client_handshaker.h
@@ -29,7 +29,7 @@
       const QuicServerId& server_id,
       QuicCryptoClientStream* stream,
       QuicSession* session,
-      ProofVerifyContext* verify_context,
+      std::unique_ptr<ProofVerifyContext> verify_context,
       QuicCryptoClientConfig* crypto_config,
       QuicCryptoClientStream::ProofHandler* proof_handler);
 
diff --git a/net/third_party/quic/core/quic_crypto_client_stream.cc b/net/third_party/quic/core/quic_crypto_client_stream.cc
index bba12957..b3e8680a 100644
--- a/net/third_party/quic/core/quic_crypto_client_stream.cc
+++ b/net/third_party/quic/core/quic_crypto_client_stream.cc
@@ -30,7 +30,7 @@
 QuicCryptoClientStream::QuicCryptoClientStream(
     const QuicServerId& server_id,
     QuicSession* session,
-    ProofVerifyContext* verify_context,
+    std::unique_ptr<ProofVerifyContext> verify_context,
     QuicCryptoClientConfig* crypto_config,
     ProofHandler* proof_handler)
     : QuicCryptoClientStreamBase(session) {
@@ -38,13 +38,13 @@
   switch (session->connection()->version().handshake_protocol) {
     case PROTOCOL_QUIC_CRYPTO:
       handshaker_ = QuicMakeUnique<QuicCryptoClientHandshaker>(
-          server_id, this, session, verify_context, crypto_config,
+          server_id, this, session, std::move(verify_context), crypto_config,
           proof_handler);
       break;
     case PROTOCOL_TLS1_3:
       handshaker_ = QuicMakeUnique<TlsClientHandshaker>(
           this, session, server_id, crypto_config->proof_verifier(),
-          crypto_config->ssl_ctx(), verify_context,
+          crypto_config->ssl_ctx(), std::move(verify_context),
           crypto_config->user_agent_id());
       break;
     case PROTOCOL_UNSUPPORTED:
diff --git a/net/third_party/quic/core/quic_crypto_client_stream.h b/net/third_party/quic/core/quic_crypto_client_stream.h
index b34d8a8..5bb85ce 100644
--- a/net/third_party/quic/core/quic_crypto_client_stream.h
+++ b/net/third_party/quic/core/quic_crypto_client_stream.h
@@ -131,7 +131,7 @@
 
   QuicCryptoClientStream(const QuicServerId& server_id,
                          QuicSession* session,
-                         ProofVerifyContext* verify_context,
+                         std::unique_ptr<ProofVerifyContext> verify_context,
                          QuicCryptoClientConfig* crypto_config,
                          ProofHandler* proof_handler);
 
diff --git a/net/third_party/quic/core/quic_framer_test.cc b/net/third_party/quic/core/quic_framer_test.cc
index 329b921..142260d 100644
--- a/net/third_party/quic/core/quic_framer_test.cc
+++ b/net/third_party/quic/core/quic_framer_test.cc
@@ -8554,8 +8554,7 @@
                   header.nonce != nullptr, header.packet_number_length);
 
   test::CompareCharArraysWithHexError("constructed packet", data.data(),
-                                      data.length(), AsChars(p),
-                                      QUIC_ARRAYSIZE(packet));
+                                      data.length(), AsChars(p), packet_size);
 }
 
 // Test that the MTU discovery packet is serialized correctly as a PING packet.
diff --git a/net/third_party/quic/core/quic_spdy_client_session.cc b/net/third_party/quic/core/quic_spdy_client_session.cc
index e06c9c8..a6c11a91 100644
--- a/net/third_party/quic/core/quic_spdy_client_session.cc
+++ b/net/third_party/quic/core/quic_spdy_client_session.cc
@@ -131,8 +131,8 @@
 QuicSpdyClientSession::CreateQuicCryptoStream() {
   return QuicMakeUnique<QuicCryptoClientStream>(
       server_id_, this,
-      new net::ProofVerifyContextChromium(0, net::NetLogWithSource()),
-      crypto_config_, this);
+      crypto_config_->proof_verifier()->CreateDefaultContext(), crypto_config_,
+      this);
 }
 
 bool QuicSpdyClientSession::IsAuthorized(const QuicString& authority) {
diff --git a/net/third_party/quic/core/quic_stream_sequencer_buffer.h b/net/third_party/quic/core/quic_stream_sequencer_buffer.h
index 5839d11..e76be81 100644
--- a/net/third_party/quic/core/quic_stream_sequencer_buffer.h
+++ b/net/third_party/quic/core/quic_stream_sequencer_buffer.h
@@ -27,17 +27,17 @@
 //
 // Expected Use:
 //  QuicStreamSequencerBuffer buffer(2.5 * 8 * 1024);
-//  std::string source(1024, 'a');
-//  QuicStringPiece std::string_piece(source.data(), source.size());
+//  QuicString source(1024, 'a');
+//  QuicStringPiece string_piece(source.data(), source.size());
 //  size_t written = 0;
-//  buffer.OnStreamData(800, std::string_piece, GetEpollClockNow(), &written);
-//  source = std::string{800, 'b'};
-//  QuicStringPiece std::string_piece1(source.data(), 800);
+//  buffer.OnStreamData(800, string_piece, GetEpollClockNow(), &written);
+//  source = QuicString{800, 'b'};
+//  QuicStringPiece string_piece1(source.data(), 800);
 //  // Try to write to [1, 801), but should fail due to overlapping,
 //  // res should be QUIC_INVALID_STREAM_DATA
-//  auto res = buffer.OnStreamData(1, std::string_piece1, &written));
+//  auto res = buffer.OnStreamData(1, string_piece1, &written));
 //  // write to [0, 800), res should be QUIC_NO_ERROR
-//  auto res = buffer.OnStreamData(0, std::string_piece1, GetEpollClockNow(),
+//  auto res = buffer.OnStreamData(0, string_piece1, GetEpollClockNow(),
 //                                  &written);
 //
 //  // Read into a iovec array with total capacity of 120 bytes.
diff --git a/net/third_party/quic/core/tls_client_handshaker.cc b/net/third_party/quic/core/tls_client_handshaker.cc
index 943b844..0ac19c5e 100644
--- a/net/third_party/quic/core/tls_client_handshaker.cc
+++ b/net/third_party/quic/core/tls_client_handshaker.cc
@@ -37,17 +37,18 @@
   parent_ = nullptr;
 }
 
-TlsClientHandshaker::TlsClientHandshaker(QuicCryptoStream* stream,
-                                         QuicSession* session,
-                                         const QuicServerId& server_id,
-                                         ProofVerifier* proof_verifier,
-                                         SSL_CTX* ssl_ctx,
-                                         ProofVerifyContext* verify_context,
-                                         const QuicString& user_agent_id)
+TlsClientHandshaker::TlsClientHandshaker(
+    QuicCryptoStream* stream,
+    QuicSession* session,
+    const QuicServerId& server_id,
+    ProofVerifier* proof_verifier,
+    SSL_CTX* ssl_ctx,
+    std::unique_ptr<ProofVerifyContext> verify_context,
+    const QuicString& user_agent_id)
     : TlsHandshaker(stream, session, ssl_ctx),
       server_id_(server_id),
       proof_verifier_(proof_verifier),
-      verify_context_(verify_context),
+      verify_context_(std::move(verify_context)),
       user_agent_id_(user_agent_id),
       crypto_negotiated_params_(new QuicCryptoNegotiatedParameters) {}
 
diff --git a/net/third_party/quic/core/tls_client_handshaker.h b/net/third_party/quic/core/tls_client_handshaker.h
index b6d5021..c950b59 100644
--- a/net/third_party/quic/core/tls_client_handshaker.h
+++ b/net/third_party/quic/core/tls_client_handshaker.h
@@ -27,8 +27,7 @@
                       const QuicServerId& server_id,
                       ProofVerifier* proof_verifier,
                       SSL_CTX* ssl_ctx,
-                      // Takes ownership of |verify_context|.
-                      ProofVerifyContext* verify_context,
+                      std::unique_ptr<ProofVerifyContext> verify_context,
                       const QuicString& user_agent_id);
 
   ~TlsClientHandshaker() override;
diff --git a/net/third_party/quic/core/tls_handshaker_test.cc b/net/third_party/quic/core/tls_handshaker_test.cc
index 6fc7ea0..9c778b9 100644
--- a/net/third_party/quic/core/tls_handshaker_test.cc
+++ b/net/third_party/quic/core/tls_handshaker_test.cc
@@ -59,6 +59,10 @@
     return QUIC_PENDING;
   }
 
+  std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
+    return nullptr;
+  }
+
   void Activate() { active_ = true; }
 
   size_t NumPendingCallbacks() const { return pending_ops_.size(); }
diff --git a/net/third_party/quic/quartc/quartc_session.cc b/net/third_party/quic/quartc/quartc_session.cc
index bac5a15..c8d48c2 100644
--- a/net/third_party/quic/quartc/quartc_session.cc
+++ b/net/third_party/quic/quartc/quartc_session.cc
@@ -96,6 +96,10 @@
       std::unique_ptr<ProofVerifierCallback> callback) override {
     return QUIC_SUCCESS;
   }
+
+  std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
+    return nullptr;
+  }
 };
 
 }  // namespace
@@ -290,9 +294,10 @@
   if (perspective_ == Perspective::IS_CLIENT) {
     QuicServerId server_id(unique_remote_server_id_, kQuicServerPort,
                            /*privacy_mode_enabled=*/false);
-    QuicCryptoClientStream* crypto_stream =
-        new QuicCryptoClientStream(server_id, this, new ProofVerifyContext(),
-                                   quic_crypto_client_config_.get(), this);
+    QuicCryptoClientStream* crypto_stream = new QuicCryptoClientStream(
+        server_id, this,
+        quic_crypto_client_config_->proof_verifier()->CreateDefaultContext(),
+        quic_crypto_client_config_.get(), this);
     crypto_stream_.reset(crypto_stream);
     QuicSession::Initialize();
     crypto_stream->CryptoConnect();
diff --git a/net/third_party/quic/quartc/quartc_session_test.cc b/net/third_party/quic/quartc/quartc_session_test.cc
index 836efd9f..aedd3675 100644
--- a/net/third_party/quic/quartc/quartc_session_test.cc
+++ b/net/third_party/quic/quartc/quartc_session_test.cc
@@ -229,6 +229,10 @@
     return success_ ? QUIC_SUCCESS : QUIC_FAILURE;
   }
 
+  std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
+    return nullptr;
+  }
+
  private:
   // Whether or not proof verification succeeds.
   bool success_;
diff --git a/net/third_party/quic/test_tools/crypto_test_utils.cc b/net/third_party/quic/test_tools/crypto_test_utils.cc
index b18bf97..9263c66 100644
--- a/net/third_party/quic/test_tools/crypto_test_utils.cc
+++ b/net/third_party/quic/test_tools/crypto_test_utils.cc
@@ -40,7 +40,6 @@
 #include "third_party/boringssl/src/include/openssl/nid.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
@@ -50,7 +49,7 @@
 TestChannelIDKey::~TestChannelIDKey() {}
 
 bool TestChannelIDKey::Sign(QuicStringPiece signed_data,
-                            string* out_signature) const {
+                            QuicString* out_signature) const {
   bssl::ScopedEVP_MD_CTX md_ctx;
   if (EVP_DigestSignInit(md_ctx.get(), nullptr, EVP_sha256(), nullptr,
                          ecdsa_key_.get()) != 1) {
@@ -89,12 +88,12 @@
   }
 
   *out_signature =
-      string(reinterpret_cast<char*>(signature.get()), kSignatureLength);
+      QuicString(reinterpret_cast<char*>(signature.get()), kSignatureLength);
 
   return true;
 }
 
-string TestChannelIDKey::SerializeKey() const {
+QuicString TestChannelIDKey::SerializeKey() const {
   // i2d_PublicKey will produce an ANSI X9.62 public key which, for a P-256
   // key, is 0x04 (meaning uncompressed) followed by the x and y field
   // elements as 32-byte, big-endian numbers.
@@ -109,13 +108,13 @@
   uint8_t* derp = buf;
   i2d_PublicKey(ecdsa_key_.get(), &derp);
 
-  return string(reinterpret_cast<char*>(buf + 1), kExpectedKeyLength - 1);
+  return QuicString(reinterpret_cast<char*>(buf + 1), kExpectedKeyLength - 1);
 }
 
 TestChannelIDSource::~TestChannelIDSource() {}
 
 QuicAsyncStatus TestChannelIDSource::GetChannelIDKey(
-    const string& hostname,
+    const QuicString& hostname,
     std::unique_ptr<ChannelIDKey>* channel_id_key,
     ChannelIDSourceCallback* /*callback*/) {
   *channel_id_key = QuicMakeUnique<TestChannelIDKey>(HostnameToKey(hostname));
@@ -123,7 +122,7 @@
 }
 
 // static
-EVP_PKEY* TestChannelIDSource::HostnameToKey(const string& hostname) {
+EVP_PKEY* TestChannelIDSource::HostnameToKey(const QuicString& hostname) {
   // In order to generate a deterministic key for a given hostname the
   // hostname is hashed with SHA-256 and the resulting digest is treated as a
   // big-endian number. The most-significant bit is cleared to ensure that
@@ -219,7 +218,7 @@
   ~AsyncTestChannelIDSource() override {}
 
   // ChannelIDSource implementation.
-  QuicAsyncStatus GetChannelIDKey(const string& hostname,
+  QuicAsyncStatus GetChannelIDKey(const QuicString& hostname,
                                   std::unique_ptr<ChannelIDKey>* channel_id_key,
                                   ChannelIDSourceCallback* callback) override {
     // Synchronous mode.
@@ -324,7 +323,7 @@
         : generator_(generator) {}
     void Run(
         QuicErrorCode error,
-        const string& error_details,
+        const QuicString& error_details,
         std::unique_ptr<CryptoHandshakeMessage> message,
         std::unique_ptr<DiversificationNonce> diversification_nonce,
         std::unique_ptr<ProofSource::Details> proof_source_details) override {
@@ -575,10 +574,10 @@
   return std::make_pair(client_i, server_i);
 }
 
-string GetValueForTag(const CryptoHandshakeMessage& message, QuicTag tag) {
+QuicString GetValueForTag(const CryptoHandshakeMessage& message, QuicTag tag) {
   QuicTagValueMap::const_iterator it = message.tag_value_map().find(tag);
   if (it == message.tag_value_map().end()) {
-    return string();
+    return QuicString();
   }
   return it->second;
 }
@@ -668,7 +667,7 @@
   }
 
  private:
-  const string cert_;
+  const QuicString cert_;
   const uint64_t hash_;
   const uint32_t index_;
 };
@@ -769,10 +768,10 @@
   const char kSampleLabel[] = "label";
   const char kSampleContext[] = "context";
   const size_t kSampleOutputLength = 32;
-  string client_key_extraction;
-  string server_key_extraction;
-  string client_tb_ekm;
-  string server_tb_ekm;
+  QuicString client_key_extraction;
+  QuicString server_key_extraction;
+  QuicString client_tb_ekm;
+  QuicString server_tb_ekm;
   EXPECT_TRUE(client->ExportKeyingMaterial(kSampleLabel, kSampleContext,
                                            kSampleOutputLength,
                                            &client_key_extraction));
@@ -865,12 +864,12 @@
 }
 
 CryptoHandshakeMessage CreateCHLO(
-    std::vector<std::pair<string, string>> tags_and_values) {
+    std::vector<std::pair<QuicString, QuicString>> tags_and_values) {
   return CreateCHLO(tags_and_values, -1);
 }
 
 CryptoHandshakeMessage CreateCHLO(
-    std::vector<std::pair<string, string>> tags_and_values,
+    std::vector<std::pair<QuicString, QuicString>> tags_and_values,
     int minimum_size_bytes) {
   CryptoHandshakeMessage msg;
   msg.set_tag(MakeQuicTag('C', 'H', 'L', 'O'));
@@ -880,15 +879,16 @@
   }
 
   for (const auto& tag_and_value : tags_and_values) {
-    const string& tag = tag_and_value.first;
-    const string& value = tag_and_value.second;
+    const QuicString& tag = tag_and_value.first;
+    const QuicString& value = tag_and_value.second;
 
     const QuicTag quic_tag = ParseTag(tag.c_str());
 
     size_t value_len = value.length();
     if (value_len > 0 && value[0] == '#') {
       // This is ascii encoded hex.
-      string hex_value = QuicTextUtils::HexDecode(QuicStringPiece(&value[1]));
+      QuicString hex_value =
+          QuicTextUtils::HexDecode(QuicStringPiece(&value[1]));
       msg.SetStringPiece(quic_tag, hex_value);
       continue;
     }
@@ -1035,8 +1035,8 @@
   // clang-format on
 }
 
-string GenerateClientNonceHex(const QuicClock* clock,
-                              QuicCryptoServerConfig* crypto_config) {
+QuicString GenerateClientNonceHex(const QuicClock* clock,
+                                  QuicCryptoServerConfig* crypto_config) {
   QuicCryptoServerConfig::ConfigOptions old_config_options;
   QuicCryptoServerConfig::ConfigOptions new_config_options;
   old_config_options.id = "old-config-id";
@@ -1050,7 +1050,7 @@
       crypto_config->AddConfig(std::move(primary_config), clock->WallNow()));
   QuicStringPiece orbit;
   CHECK(msg->GetStringPiece(kORBT, &orbit));
-  string nonce;
+  QuicString nonce;
   CryptoUtils::GenerateNonce(
       clock->WallNow(), QuicRandom::GetInstance(),
       QuicStringPiece(reinterpret_cast<const char*>(orbit.data()),
@@ -1059,7 +1059,7 @@
   return ("#" + QuicTextUtils::HexEncode(nonce));
 }
 
-string GenerateClientPublicValuesHex() {
+QuicString GenerateClientPublicValuesHex() {
   char public_value[32];
   memset(public_value, 42, sizeof(public_value));
   return ("#" + QuicTextUtils::HexEncode(public_value, sizeof(public_value)));
diff --git a/net/third_party/quic/test_tools/crypto_test_utils.h b/net/third_party/quic/test_tools/crypto_test_utils.h
index a79d742b..f836510f 100644
--- a/net/third_party/quic/test_tools/crypto_test_utils.h
+++ b/net/third_party/quic/test_tools/crypto_test_utils.h
@@ -47,9 +47,9 @@
   // ChannelIDKey implementation.
 
   bool Sign(QuicStringPiece signed_data,
-            std::string* out_signature) const override;
+            QuicString* out_signature) const override;
 
-  std::string SerializeKey() const override;
+  QuicString SerializeKey() const override;
 
  private:
   bssl::UniquePtr<EVP_PKEY> ecdsa_key_;
@@ -62,12 +62,12 @@
   // ChannelIDSource implementation.
 
   QuicAsyncStatus GetChannelIDKey(
-      const std::string& hostname,
+      const QuicString& hostname,
       std::unique_ptr<ChannelIDKey>* channel_id_key,
       ChannelIDSourceCallback* /*callback*/) override;
 
  private:
-  static EVP_PKEY* HostnameToKey(const std::string& hostname);
+  static EVP_PKEY* HostnameToKey(const QuicString& hostname);
 };
 
 namespace crypto_test_utils {
@@ -176,7 +176,7 @@
                                            size_t server_i);
 
 // Returns the value for the tag |tag| in the tag value map of |message|.
-std::string GetValueForTag(const CryptoHandshakeMessage& message, QuicTag tag);
+QuicString GetValueForTag(const CryptoHandshakeMessage& message, QuicTag tag);
 
 // Returns a new |ProofSource| that serves up test certificates.
 std::unique_ptr<ProofSource> ProofSourceForTesting();
@@ -189,7 +189,7 @@
 
 // Returns a |ProofVerifyContext| that must be used with the verifier
 // returned by |ProofVerifierForTesting|.
-ProofVerifyContext* ProofVerifyContextForTesting();
+std::unique_ptr<ProofVerifyContext> ProofVerifyContextForTesting();
 
 // MockCommonCertSets returns a CommonCertSets that contains a single set with
 // hash |hash|, consisting of the certificate |cert| at index |index|.
@@ -218,9 +218,9 @@
 //        {"SNI", "www.example.com"}},
 //       optional_minimum_size_bytes);
 CryptoHandshakeMessage CreateCHLO(
-    std::vector<std::pair<std::string, std::string>> tags_and_values);
+    std::vector<std::pair<QuicString, QuicString>> tags_and_values);
 CryptoHandshakeMessage CreateCHLO(
-    std::vector<std::pair<std::string, std::string>> tags_and_values,
+    std::vector<std::pair<QuicString, QuicString>> tags_and_values,
     int minimum_size_bytes);
 
 // ChannelIDSourceForTesting returns a ChannelIDSource that generates keys
@@ -262,11 +262,11 @@
                                 QuicCryptoServerStream* server);
 
 // Return a CHLO nonce in hexadecimal.
-std::string GenerateClientNonceHex(const QuicClock* clock,
-                                   QuicCryptoServerConfig* crypto_config);
+QuicString GenerateClientNonceHex(const QuicClock* clock,
+                                  QuicCryptoServerConfig* crypto_config);
 
 // Return a CHLO PUBS in hexadecimal.
-std::string GenerateClientPublicValuesHex();
+QuicString GenerateClientPublicValuesHex();
 
 }  // namespace crypto_test_utils
 
diff --git a/net/third_party/quic/test_tools/crypto_test_utils_test.cc b/net/third_party/quic/test_tools/crypto_test_utils_test.cc
index 8ff357c8..06888bb 100644
--- a/net/third_party/quic/test_tools/crypto_test_utils_test.cc
+++ b/net/third_party/quic/test_tools/crypto_test_utils_test.cc
@@ -13,7 +13,6 @@
 #include "net/third_party/quic/platform/api/quic_text_utils.h"
 #include "net/third_party/quic/test_tools/mock_clock.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
@@ -74,7 +73,7 @@
         : shlo_verifier_(shlo_verifier) {}
     void Run(
         QuicErrorCode error,
-        const string& error_details,
+        const QuicString& error_details,
         std::unique_ptr<CryptoHandshakeMessage> message,
         std::unique_ptr<DiversificationNonce> diversification_nonce,
         std::unique_ptr<ProofSource::Details> proof_source_details) override {
@@ -137,17 +136,17 @@
       crypto_config.AddConfig(std::move(primary_config), clock.WallNow()));
   QuicStringPiece orbit;
   ASSERT_TRUE(msg->GetStringPiece(kORBT, &orbit));
-  string nonce;
+  QuicString nonce;
   CryptoUtils::GenerateNonce(
       clock.WallNow(), QuicRandom::GetInstance(),
       QuicStringPiece(reinterpret_cast<const char*>(orbit.data()),
                       sizeof(orbit.size())),
       &nonce);
-  string nonce_hex = "#" + QuicTextUtils::HexEncode(nonce);
+  QuicString nonce_hex = "#" + QuicTextUtils::HexEncode(nonce);
 
   char public_value[32];
   memset(public_value, 42, sizeof(public_value));
-  string pub_hex =
+  QuicString pub_hex =
       "#" + QuicTextUtils::HexEncode(public_value, sizeof(public_value));
 
   QuicTransportVersion version(AllSupportedTransportVersions().front());
diff --git a/net/third_party/quic/test_tools/failing_proof_source.cc b/net/third_party/quic/test_tools/failing_proof_source.cc
index 7fbc02f..c1b2f5b 100644
--- a/net/third_party/quic/test_tools/failing_proof_source.cc
+++ b/net/third_party/quic/test_tools/failing_proof_source.cc
@@ -8,8 +8,8 @@
 namespace test {
 
 void FailingProofSource::GetProof(const QuicSocketAddress& server_address,
-                                  const std::string& hostname,
-                                  const std::string& server_config,
+                                  const QuicString& hostname,
+                                  const QuicString& server_config,
                                   QuicTransportVersion transport_version,
                                   QuicStringPiece chlo_hash,
                                   std::unique_ptr<Callback> callback) {
@@ -18,13 +18,13 @@
 
 QuicReferenceCountedPointer<ProofSource::Chain>
 FailingProofSource::GetCertChain(const QuicSocketAddress& server_address,
-                                 const std::string& hostname) {
+                                 const QuicString& hostname) {
   return QuicReferenceCountedPointer<Chain>();
 }
 
 void FailingProofSource::ComputeTlsSignature(
     const QuicSocketAddress& server_address,
-    const std::string& hostname,
+    const QuicString& hostname,
     uint16_t signature_algorithm,
     QuicStringPiece in,
     std::unique_ptr<SignatureCallback> callback) {
diff --git a/net/third_party/quic/test_tools/failing_proof_source.h b/net/third_party/quic/test_tools/failing_proof_source.h
index bade88a..b73ededc 100644
--- a/net/third_party/quic/test_tools/failing_proof_source.h
+++ b/net/third_party/quic/test_tools/failing_proof_source.h
@@ -14,19 +14,19 @@
 class FailingProofSource : public ProofSource {
  public:
   void GetProof(const QuicSocketAddress& server_address,
-                const std::string& hostname,
-                const std::string& server_config,
+                const QuicString& hostname,
+                const QuicString& server_config,
                 QuicTransportVersion transport_version,
                 QuicStringPiece chlo_hash,
                 std::unique_ptr<Callback> callback) override;
 
   QuicReferenceCountedPointer<Chain> GetCertChain(
       const QuicSocketAddress& server_address,
-      const std::string& hostname) override;
+      const QuicString& hostname) override;
 
   void ComputeTlsSignature(
       const QuicSocketAddress& server_address,
-      const std::string& hostname,
+      const QuicString& hostname,
       uint16_t signature_algorithm,
       QuicStringPiece in,
       std::unique_ptr<SignatureCallback> callback) override;
diff --git a/net/third_party/quic/test_tools/fake_proof_source.cc b/net/third_party/quic/test_tools/fake_proof_source.cc
index 9d868e8..084b1ae 100644
--- a/net/third_party/quic/test_tools/fake_proof_source.cc
+++ b/net/third_party/quic/test_tools/fake_proof_source.cc
@@ -8,7 +8,6 @@
 #include "net/third_party/quic/platform/api/quic_ptr_util.h"
 #include "net/third_party/quic/test_tools/crypto_test_utils.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
@@ -22,10 +21,10 @@
 
 FakeProofSource::GetProofOp::GetProofOp(
     const QuicSocketAddress& server_addr,
-    string hostname,
-    string server_config,
+    QuicString hostname,
+    QuicString server_config,
     QuicTransportVersion transport_version,
-    string chlo_hash,
+    QuicString chlo_hash,
     std::unique_ptr<ProofSource::Callback> callback,
     ProofSource* delegate)
     : server_address_(server_addr),
@@ -46,7 +45,7 @@
 
 FakeProofSource::ComputeSignatureOp::ComputeSignatureOp(
     const QuicSocketAddress& server_address,
-    string hostname,
+    QuicString hostname,
     uint16_t sig_alg,
     QuicStringPiece in,
     std::unique_ptr<ProofSource::SignatureCallback> callback,
@@ -71,8 +70,8 @@
 
 void FakeProofSource::GetProof(
     const QuicSocketAddress& server_address,
-    const string& hostname,
-    const string& server_config,
+    const QuicString& hostname,
+    const QuicString& server_config,
     QuicTransportVersion transport_version,
     QuicStringPiece chlo_hash,
     std::unique_ptr<ProofSource::Callback> callback) {
@@ -84,18 +83,18 @@
 
   pending_ops_.push_back(QuicMakeUnique<GetProofOp>(
       server_address, hostname, server_config, transport_version,
-      string(chlo_hash), std::move(callback), delegate_.get()));
+      QuicString(chlo_hash), std::move(callback), delegate_.get()));
 }
 
 QuicReferenceCountedPointer<ProofSource::Chain> FakeProofSource::GetCertChain(
     const QuicSocketAddress& server_address,
-    const string& hostname) {
+    const QuicString& hostname) {
   return delegate_->GetCertChain(server_address, hostname);
 }
 
 void FakeProofSource::ComputeTlsSignature(
     const QuicSocketAddress& server_address,
-    const string& hostname,
+    const QuicString& hostname,
     uint16_t signature_algorithm,
     QuicStringPiece in,
     std::unique_ptr<ProofSource::SignatureCallback> callback) {
diff --git a/net/third_party/quic/test_tools/fake_proof_source.h b/net/third_party/quic/test_tools/fake_proof_source.h
index f0f31f88..0067fe8 100644
--- a/net/third_party/quic/test_tools/fake_proof_source.h
+++ b/net/third_party/quic/test_tools/fake_proof_source.h
@@ -32,17 +32,17 @@
 
   // ProofSource interface
   void GetProof(const QuicSocketAddress& server_address,
-                const std::string& hostname,
-                const std::string& server_config,
+                const QuicString& hostname,
+                const QuicString& server_config,
                 QuicTransportVersion transport_version,
                 QuicStringPiece chlo_hash,
                 std::unique_ptr<ProofSource::Callback> callback) override;
   QuicReferenceCountedPointer<Chain> GetCertChain(
       const QuicSocketAddress& server_address,
-      const std::string& hostname) override;
+      const QuicString& hostname) override;
   void ComputeTlsSignature(
       const QuicSocketAddress& server_address,
-      const std::string& hostname,
+      const QuicString& hostname,
       uint16_t signature_algorithm,
       QuicStringPiece in,
       std::unique_ptr<ProofSource::SignatureCallback> callback) override;
@@ -67,10 +67,10 @@
   class GetProofOp : public PendingOp {
    public:
     GetProofOp(const QuicSocketAddress& server_addr,
-               std::string hostname,
-               std::string server_config,
+               QuicString hostname,
+               QuicString server_config,
                QuicTransportVersion transport_version,
-               std::string chlo_hash,
+               QuicString chlo_hash,
                std::unique_ptr<ProofSource::Callback> callback,
                ProofSource* delegate);
     ~GetProofOp() override;
@@ -79,10 +79,10 @@
 
    private:
     QuicSocketAddress server_address_;
-    std::string hostname_;
-    std::string server_config_;
+    QuicString hostname_;
+    QuicString server_config_;
     QuicTransportVersion transport_version_;
-    std::string chlo_hash_;
+    QuicString chlo_hash_;
     std::unique_ptr<ProofSource::Callback> callback_;
     ProofSource* delegate_;
   };
@@ -90,7 +90,7 @@
   class ComputeSignatureOp : public PendingOp {
    public:
     ComputeSignatureOp(const QuicSocketAddress& server_address,
-                       std::string hostname,
+                       QuicString hostname,
                        uint16_t sig_alg,
                        QuicStringPiece in,
                        std::unique_ptr<ProofSource::SignatureCallback> callback,
@@ -101,9 +101,9 @@
 
    private:
     QuicSocketAddress server_address_;
-    std::string hostname_;
+    QuicString hostname_;
     uint16_t sig_alg_;
-    std::string in_;
+    QuicString in_;
     std::unique_ptr<ProofSource::SignatureCallback> callback_;
     ProofSource* delegate_;
   };
diff --git a/net/third_party/quic/test_tools/mock_crypto_client_stream.cc b/net/third_party/quic/test_tools/mock_crypto_client_stream.cc
index ba277e50..61b0209 100644
--- a/net/third_party/quic/test_tools/mock_crypto_client_stream.cc
+++ b/net/third_party/quic/test_tools/mock_crypto_client_stream.cc
@@ -15,14 +15,13 @@
 #include "net/third_party/quic/test_tools/quic_config_peer.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-using std::string;
 
 namespace quic {
 
 MockCryptoClientStream::MockCryptoClientStream(
     const QuicServerId& server_id,
     QuicSpdyClientSessionBase* session,
-    ProofVerifyContext* verify_context,
+    std::unique_ptr<ProofVerifyContext> verify_context,
     const QuicConfig& config,
     QuicCryptoClientConfig* crypto_config,
     HandshakeMode handshake_mode,
@@ -30,7 +29,7 @@
     bool use_mock_crypter)
     : QuicCryptoClientStream(server_id,
                              session,
-                             verify_context,
+                             std::move(verify_context),
                              crypto_config,
                              session),
       QuicCryptoHandshaker(this, session),
@@ -205,7 +204,7 @@
 
   CryptoHandshakeMessage msg;
   config.ToHandshakeMessage(&msg);
-  string error_details;
+  QuicString error_details;
   const QuicErrorCode error =
       session()->config()->ProcessPeerHello(msg, CLIENT, &error_details);
   ASSERT_EQ(QUIC_NO_ERROR, error);
diff --git a/net/third_party/quic/test_tools/mock_crypto_client_stream.h b/net/third_party/quic/test_tools/mock_crypto_client_stream.h
index 26da81c4..e258be1 100644
--- a/net/third_party/quic/test_tools/mock_crypto_client_stream.h
+++ b/net/third_party/quic/test_tools/mock_crypto_client_stream.h
@@ -48,7 +48,7 @@
   MockCryptoClientStream(
       const QuicServerId& server_id,
       QuicSpdyClientSessionBase* session,
-      ProofVerifyContext* verify_context,
+      std::unique_ptr<ProofVerifyContext> verify_context,
       const QuicConfig& config,
       QuicCryptoClientConfig* crypto_config,
       HandshakeMode handshake_mode,
diff --git a/net/third_party/quic/test_tools/mock_quic_client_promised_info.cc b/net/third_party/quic/test_tools/mock_quic_client_promised_info.cc
index 4877854..4ddfc665 100644
--- a/net/third_party/quic/test_tools/mock_quic_client_promised_info.cc
+++ b/net/third_party/quic/test_tools/mock_quic_client_promised_info.cc
@@ -4,7 +4,6 @@
 
 #include "net/third_party/quic/test_tools/mock_quic_client_promised_info.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
@@ -12,7 +11,7 @@
 MockQuicClientPromisedInfo::MockQuicClientPromisedInfo(
     QuicSpdyClientSessionBase* session,
     QuicStreamId id,
-    string url)
+    QuicString url)
     : QuicClientPromisedInfo(session, id, url) {}
 
 MockQuicClientPromisedInfo::~MockQuicClientPromisedInfo() {}
diff --git a/net/third_party/quic/test_tools/mock_quic_client_promised_info.h b/net/third_party/quic/test_tools/mock_quic_client_promised_info.h
index 9623afc4..e52acd06 100644
--- a/net/third_party/quic/test_tools/mock_quic_client_promised_info.h
+++ b/net/third_party/quic/test_tools/mock_quic_client_promised_info.h
@@ -19,7 +19,7 @@
  public:
   MockQuicClientPromisedInfo(QuicSpdyClientSessionBase* session,
                              QuicStreamId id,
-                             std::string url);
+                             QuicString url);
   ~MockQuicClientPromisedInfo() override;
 
   MOCK_METHOD2(HandleClientRequest,
diff --git a/net/third_party/quic/test_tools/mock_quic_session_visitor.h b/net/third_party/quic/test_tools/mock_quic_session_visitor.h
index 0de9146c..3ac911b3 100644
--- a/net/third_party/quic/test_tools/mock_quic_session_visitor.h
+++ b/net/third_party/quic/test_tools/mock_quic_session_visitor.h
@@ -20,7 +20,7 @@
   MOCK_METHOD3(OnConnectionClosed,
                void(QuicConnectionId connection_id,
                     QuicErrorCode error,
-                    const std::string& error_details));
+                    const QuicString& error_details));
   MOCK_METHOD1(OnWriteBlocked,
                void(QuicBlockedWriterInterface* blocked_writer));
   MOCK_METHOD1(OnRstStreamReceived, void(const QuicRstStreamFrame& frame));
@@ -42,7 +42,7 @@
                           const QuicSocketAddress& client_address,
                           const QuicSocketAddress& peer_address,
                           const QuicSocketAddress& self_address,
-                          std::string* error_details));
+                          QuicString* error_details));
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockQuicCryptoServerStreamHelper);
diff --git a/net/third_party/quic/test_tools/packet_dropping_test_writer.h b/net/third_party/quic/test_tools/packet_dropping_test_writer.h
index 072c8f7..a9c29c3 100644
--- a/net/third_party/quic/test_tools/packet_dropping_test_writer.h
+++ b/net/third_party/quic/test_tools/packet_dropping_test_writer.h
@@ -144,7 +144,7 @@
     //    DelayedWrite& operator=(DelayedWrite&& other);
     ~DelayedWrite();
 
-    std::string buffer;
+    QuicString buffer;
     const QuicIpAddress self_address;
     const QuicSocketAddress peer_address;
     std::unique_ptr<PerPacketOptions> options;
diff --git a/net/third_party/quic/test_tools/packet_reordering_writer.cc b/net/third_party/quic/test_tools/packet_reordering_writer.cc
index 29be4a8..f14ae43 100644
--- a/net/third_party/quic/test_tools/packet_reordering_writer.cc
+++ b/net/third_party/quic/test_tools/packet_reordering_writer.cc
@@ -33,7 +33,7 @@
   }
   // Still have packet to wait.
   DCHECK_LT(0u, num_packets_to_wait_) << "Only allow one packet to be delayed";
-  delayed_data_ = std::string(buffer, buf_len);
+  delayed_data_ = QuicString(buffer, buf_len);
   delayed_self_address_ = self_address;
   delayed_peer_address_ = peer_address;
   if (options != nullptr) {
diff --git a/net/third_party/quic/test_tools/packet_reordering_writer.h b/net/third_party/quic/test_tools/packet_reordering_writer.h
index 7d3afbe9..a14f200d 100644
--- a/net/third_party/quic/test_tools/packet_reordering_writer.h
+++ b/net/third_party/quic/test_tools/packet_reordering_writer.h
@@ -33,7 +33,7 @@
  private:
   bool delay_next_ = false;
   size_t num_packets_to_wait_ = 0;
-  std::string delayed_data_;
+  QuicString delayed_data_;
   QuicIpAddress delayed_self_address_;
   QuicSocketAddress delayed_peer_address_;
   std::unique_ptr<PerPacketOptions> delayed_options_;
diff --git a/net/third_party/quic/test_tools/quic_crypto_server_config_peer.cc b/net/third_party/quic/test_tools/quic_crypto_server_config_peer.cc
index 1fd588a..01c16eb 100644
--- a/net/third_party/quic/test_tools/quic_crypto_server_config_peer.cc
+++ b/net/third_party/quic/test_tools/quic_crypto_server_config_peer.cc
@@ -8,8 +8,6 @@
 #include "net/third_party/quic/test_tools/mock_random.h"
 #include "net/third_party/quic/test_tools/quic_test_utils.h"
 
-using std::string;
-
 namespace quic {
 namespace test {
 
@@ -21,7 +19,7 @@
 }
 
 QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>
-QuicCryptoServerConfigPeer::GetConfig(string config_id) {
+QuicCryptoServerConfigPeer::GetConfig(QuicString config_id) {
   QuicReaderMutexLock locked(&server_config_->configs_lock_);
   if (config_id == "<primary>") {
     return QuicReferenceCountedPointer<QuicCryptoServerConfig::Config>(
@@ -40,8 +38,8 @@
   server_config_->proof_source_ = std::move(proof_source);
 }
 
-string QuicCryptoServerConfigPeer::NewSourceAddressToken(
-    string config_id,
+QuicString QuicCryptoServerConfigPeer::NewSourceAddressToken(
+    QuicString config_id,
     SourceAddressTokens previous_tokens,
     const QuicIpAddress& ip,
     QuicRandom* rand,
@@ -53,7 +51,7 @@
 }
 
 HandshakeFailureReason QuicCryptoServerConfigPeer::ValidateSourceAddressTokens(
-    string config_id,
+    QuicString config_id,
     QuicStringPiece srct,
     const QuicIpAddress& ip,
     QuicWallTime now,
@@ -86,7 +84,7 @@
 }
 
 void QuicCryptoServerConfigPeer::CheckConfigs(
-    std::vector<std::pair<string, bool>> expected_ids_and_status) {
+    std::vector<std::pair<QuicString, bool>> expected_ids_and_status) {
   QuicReaderMutexLock locked(&server_config_->configs_lock_);
 
   ASSERT_EQ(expected_ids_and_status.size(), server_config_->configs_.size())
@@ -111,14 +109,14 @@
   }
 }
 
-// ConfigsDebug returns a string that contains debugging information about
+// ConfigsDebug returns a QuicString that contains debugging information about
 // the set of Configs loaded in |server_config_| and their status.
-string QuicCryptoServerConfigPeer::ConfigsDebug() {
+QuicString QuicCryptoServerConfigPeer::ConfigsDebug() {
   if (server_config_->configs_.empty()) {
     return "No Configs in QuicCryptoServerConfig";
   }
 
-  string s;
+  QuicString s;
 
   for (const auto& i : server_config_->configs_) {
     const QuicReferenceCountedPointer<QuicCryptoServerConfig::Config> config =
@@ -141,11 +139,11 @@
       QuicWallTime::FromUNIXSeconds(seconds));
 }
 
-string QuicCryptoServerConfigPeer::CompressChain(
+QuicString QuicCryptoServerConfigPeer::CompressChain(
     QuicCompressedCertsCache* compressed_certs_cache,
     const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
-    const string& client_common_set_hashes,
-    const string& client_cached_cert_hashes,
+    const QuicString& client_common_set_hashes,
+    const QuicString& client_cached_cert_hashes,
     const CommonCertSets* common_sets) {
   return QuicCryptoServerConfig::CompressChain(
       compressed_certs_cache, chain, client_common_set_hashes,
diff --git a/net/third_party/quic/test_tools/quic_crypto_server_config_peer.h b/net/third_party/quic/test_tools/quic_crypto_server_config_peer.h
index 1a71674..f727c2d 100644
--- a/net/third_party/quic/test_tools/quic_crypto_server_config_peer.h
+++ b/net/third_party/quic/test_tools/quic_crypto_server_config_peer.h
@@ -23,7 +23,7 @@
 
   // Returns the config associated with |config_id|.
   QuicReferenceCountedPointer<QuicCryptoServerConfig::Config> GetConfig(
-      std::string config_id);
+      QuicString config_id);
 
   // Returns a pointer to the ProofSource object.
   ProofSource* GetProofSource() const;
@@ -32,8 +32,8 @@
   void ResetProofSource(std::unique_ptr<ProofSource> proof_source);
 
   // Generates a new valid source address token.
-  std::string NewSourceAddressToken(
-      std::string config_id,
+  QuicString NewSourceAddressToken(
+      QuicString config_id,
       SourceAddressTokens previous_tokens,
       const QuicIpAddress& ip,
       QuicRandom* rand,
@@ -42,7 +42,7 @@
 
   // Attempts to validate the tokens in |tokens|.
   HandshakeFailureReason ValidateSourceAddressTokens(
-      std::string config_id,
+      QuicString config_id,
       QuicStringPiece tokens,
       const QuicIpAddress& ip,
       QuicWallTime now,
@@ -70,18 +70,18 @@
   void CheckConfigs(
       std::vector<std::pair<ServerConfigID, bool>> expected_ids_and_status);
 
-  // ConfigsDebug returns a string that contains debugging information about
+  // ConfigsDebug returns a QuicString that contains debugging information about
   // the set of Configs loaded in |server_config_| and their status.
-  std::string ConfigsDebug()
+  QuicString ConfigsDebug()
       SHARED_LOCKS_REQUIRED(server_config_->configs_lock_);
 
   void SelectNewPrimaryConfig(int seconds);
 
-  static std::string CompressChain(
+  static QuicString CompressChain(
       QuicCompressedCertsCache* compressed_certs_cache,
       const QuicReferenceCountedPointer<ProofSource::Chain>& chain,
-      const std::string& client_common_set_hashes,
-      const std::string& client_cached_cert_hashes,
+      const QuicString& client_common_set_hashes,
+      const QuicString& client_cached_cert_hashes,
       const CommonCertSets* common_sets);
 
   uint32_t source_address_token_future_secs();
diff --git a/net/third_party/quic/test_tools/quic_framer_peer.cc b/net/third_party/quic/test_tools/quic_framer_peer.cc
index c0fd76d0..f701a48 100644
--- a/net/third_party/quic/test_tools/quic_framer_peer.cc
+++ b/net/third_party/quic/test_tools/quic_framer_peer.cc
@@ -8,7 +8,6 @@
 #include "net/third_party/quic/core/quic_packets.h"
 #include "net/third_party/quic/platform/api/quic_map_util.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
diff --git a/net/third_party/quic/test_tools/quic_stream_sequencer_buffer_peer.cc b/net/third_party/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
index 02db978..39a2cfd 100644
--- a/net/third_party/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
+++ b/net/third_party/quic/test_tools/quic_stream_sequencer_buffer_peer.cc
@@ -28,7 +28,7 @@
   iovec dest;
   dest.iov_base = dest_buffer, dest.iov_len = size;
   size_t bytes_read;
-  std::string error_details;
+  QuicString error_details;
   EXPECT_EQ(QUIC_NO_ERROR,
             buffer_->Readv(&dest, 1, &bytes_read, &error_details));
   return bytes_read;
diff --git a/net/third_party/quic/test_tools/quic_stream_sequencer_peer.cc b/net/third_party/quic/test_tools/quic_stream_sequencer_peer.cc
index 4ba2a69..9268c92 100644
--- a/net/third_party/quic/test_tools/quic_stream_sequencer_peer.cc
+++ b/net/third_party/quic/test_tools/quic_stream_sequencer_peer.cc
@@ -7,7 +7,6 @@
 #include "net/third_party/quic/core/quic_stream_sequencer.h"
 #include "net/third_party/quic/test_tools/quic_stream_sequencer_buffer_peer.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
diff --git a/net/third_party/quic/test_tools/quic_test_client.cc b/net/third_party/quic/test_tools/quic_test_client.cc
index ff01314..38f3f3c 100644
--- a/net/third_party/quic/test_tools/quic_test_client.cc
+++ b/net/third_party/quic/test_tools/quic_test_client.cc
@@ -28,7 +28,6 @@
 #include "net/third_party/quic/test_tools/quic_stream_peer.h"
 #include "net/third_party/quic/test_tools/quic_test_utils.h"
 
-using std::string;
 
 namespace quic {
 namespace test {
@@ -45,16 +44,16 @@
 
   // ProofVerifier interface.
   QuicAsyncStatus VerifyProof(
-      const string& hostname,
+      const QuicString& hostname,
       const uint16_t port,
-      const string& server_config,
+      const QuicString& server_config,
       QuicTransportVersion transport_version,
       QuicStringPiece chlo_hash,
-      const std::vector<string>& certs,
-      const string& cert_sct,
-      const string& signature,
+      const std::vector<QuicString>& certs,
+      const QuicString& cert_sct,
+      const QuicString& signature,
       const ProofVerifyContext* context,
-      string* error_details,
+      QuicString* error_details,
       std::unique_ptr<ProofVerifyDetails>* details,
       std::unique_ptr<ProofVerifierCallback> callback) override {
     common_name_.clear();
@@ -89,23 +88,27 @@
   }
 
   QuicAsyncStatus VerifyCertChain(
-      const std::string& hostname,
-      const std::vector<std::string>& certs,
+      const QuicString& hostname,
+      const std::vector<QuicString>& certs,
       const ProofVerifyContext* context,
-      std::string* error_details,
+      QuicString* error_details,
       std::unique_ptr<ProofVerifyDetails>* details,
       std::unique_ptr<ProofVerifierCallback> callback) override {
     return QUIC_SUCCESS;
   }
 
-  const string& common_name() const { return common_name_; }
+  std::unique_ptr<ProofVerifyContext> CreateDefaultContext() override {
+    return verifier_->CreateDefaultContext();
+  }
 
-  const string& cert_sct() const { return cert_sct_; }
+  const QuicString& common_name() const { return common_name_; }
+
+  const QuicString& cert_sct() const { return cert_sct_; }
 
  private:
   std::unique_ptr<ProofVerifier> verifier_;
-  string common_name_;
-  string cert_sct_;
+  QuicString common_name_;
+  QuicString cert_sct_;
 };
 }  // namespace
 
@@ -249,7 +252,7 @@
 
 QuicTestClient::QuicTestClient(
     QuicSocketAddress server_address,
-    const string& server_hostname,
+    const QuicString& server_hostname,
     const ParsedQuicVersionVector& supported_versions)
     : QuicTestClient(server_address,
                      server_hostname,
@@ -258,7 +261,7 @@
 
 QuicTestClient::QuicTestClient(
     QuicSocketAddress server_address,
-    const string& server_hostname,
+    const QuicString& server_hostname,
     const QuicConfig& config,
     const ParsedQuicVersionVector& supported_versions)
     : client_(new MockableQuicClient(
@@ -272,7 +275,7 @@
 
 QuicTestClient::QuicTestClient(
     QuicSocketAddress server_address,
-    const string& server_hostname,
+    const QuicString& server_hostname,
     const QuicConfig& config,
     const ParsedQuicVersionVector& supported_versions,
     std::unique_ptr<ProofVerifier> proof_verifier)
@@ -309,11 +312,11 @@
   }
 }
 
-void QuicTestClient::SetUserAgentID(const string& user_agent_id) {
+void QuicTestClient::SetUserAgentID(const QuicString& user_agent_id) {
   client_->SetUserAgentID(user_agent_id);
 }
 
-ssize_t QuicTestClient::SendRequest(const string& uri) {
+ssize_t QuicTestClient::SendRequest(const QuicString& uri) {
   spdy::SpdyHeaderBlock headers;
   if (!PopulateHeaderBlockFromUrl(uri, &headers)) {
     return 0;
@@ -321,7 +324,7 @@
   return SendMessage(headers, "");
 }
 
-ssize_t QuicTestClient::SendRequestAndRstTogether(const string& uri) {
+ssize_t QuicTestClient::SendRequestAndRstTogether(const QuicString& uri) {
   spdy::SpdyHeaderBlock headers;
   if (!PopulateHeaderBlockFromUrl(uri, &headers)) {
     return 0;
@@ -339,8 +342,8 @@
 }
 
 void QuicTestClient::SendRequestsAndWaitForResponses(
-    const std::vector<string>& url_list) {
-  for (const string& url : url_list) {
+    const std::vector<QuicString>& url_list) {
+  for (const QuicString& url : url_list) {
     SendRequest(url);
   }
   while (client()->WaitForEvents()) {
@@ -386,7 +389,7 @@
     ret = stream->SendRequest(std::move(spdy_headers), body, fin);
     ++num_requests_;
   } else {
-    stream->WriteOrBufferBody(string(body), fin, ack_listener);
+    stream->WriteOrBufferBody(QuicString(body), fin, ack_listener);
     ret = body.length();
   }
   if (GetQuicReloadableFlag(enable_quic_stateless_reject_support)) {
@@ -428,12 +431,12 @@
   return ret;
 }
 
-ssize_t QuicTestClient::SendData(const string& data, bool last_data) {
+ssize_t QuicTestClient::SendData(const QuicString& data, bool last_data) {
   return SendData(data, last_data, nullptr);
 }
 
 ssize_t QuicTestClient::SendData(
-    const string& data,
+    const QuicString& data,
     bool last_data,
     QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener) {
   return GetOrCreateStreamAndSendRequest(nullptr, QuicStringPiece(data),
@@ -456,13 +459,13 @@
   buffer_body_ = buffer_body;
 }
 
-const string& QuicTestClient::response_body() const {
+const QuicString& QuicTestClient::response_body() const {
   return response_;
 }
 
-string QuicTestClient::SendCustomSynchronousRequest(
+QuicString QuicTestClient::SendCustomSynchronousRequest(
     const spdy::SpdyHeaderBlock& headers,
-    const string& body) {
+    const QuicString& body) {
   // Clear connection state here and only track this synchronous request.
   ClearPerConnectionState();
   if (SendMessage(headers, body) == 0) {
@@ -476,7 +479,7 @@
   return response_;
 }
 
-string QuicTestClient::SendSynchronousRequest(const string& uri) {
+QuicString QuicTestClient::SendSynchronousRequest(const QuicString& uri) {
   spdy::SpdyHeaderBlock headers;
   if (!PopulateHeaderBlockFromUrl(uri, &headers)) {
     return "";
@@ -528,12 +531,12 @@
   return client_.get();
 }
 
-const string& QuicTestClient::cert_common_name() const {
+const QuicString& QuicTestClient::cert_common_name() const {
   return reinterpret_cast<RecordingProofVerifier*>(client_->proof_verifier())
       ->common_name();
 }
 
-const string& QuicTestClient::cert_sct() const {
+const QuicString& QuicTestClient::cert_sct() const {
   return reinterpret_cast<RecordingProofVerifier*>(client_->proof_verifier())
       ->cert_sct();
 }
@@ -630,7 +633,7 @@
 }
 
 ssize_t QuicTestClient::Send(const void* buffer, size_t size) {
-  return SendData(string(static_cast<const char*>(buffer), size), false);
+  return SendData(QuicString(static_cast<const char*>(buffer), size), false);
 }
 
 bool QuicTestClient::response_headers_complete() const {
@@ -822,7 +825,7 @@
     bool response_headers_complete,
     const spdy::SpdyHeaderBlock& response_headers,
     const spdy::SpdyHeaderBlock& preliminary_headers,
-    const string& response,
+    const QuicString& response,
     const spdy::SpdyHeaderBlock& response_trailers,
     uint64_t bytes_read,
     uint64_t bytes_written,
@@ -841,9 +844,9 @@
 QuicTestClient::PerStreamState::~PerStreamState() = default;
 
 bool QuicTestClient::PopulateHeaderBlockFromUrl(
-    const string& uri,
+    const QuicString& uri,
     spdy::SpdyHeaderBlock* headers) {
-  string url;
+  QuicString url;
   if (QuicTextUtils::StartsWith(uri, "https://") ||
       QuicTextUtils::StartsWith(uri, "http://")) {
     url = uri;
diff --git a/net/third_party/quic/test_tools/quic_test_client.h b/net/third_party/quic/test_tools/quic_test_client.h
index b2d479d..4c09e07 100644
--- a/net/third_party/quic/test_tools/quic_test_client.h
+++ b/net/third_party/quic/test_tools/quic_test_client.h
@@ -78,14 +78,14 @@
                        public QuicClientPushPromiseIndex::Delegate {
  public:
   QuicTestClient(QuicSocketAddress server_address,
-                 const std::string& server_hostname,
+                 const QuicString& server_hostname,
                  const ParsedQuicVersionVector& supported_versions);
   QuicTestClient(QuicSocketAddress server_address,
-                 const std::string& server_hostname,
+                 const QuicString& server_hostname,
                  const QuicConfig& config,
                  const ParsedQuicVersionVector& supported_versions);
   QuicTestClient(QuicSocketAddress server_address,
-                 const std::string& server_hostname,
+                 const QuicString& server_hostname,
                  const QuicConfig& config,
                  const ParsedQuicVersionVector& supported_versions,
                  std::unique_ptr<ProofVerifier> proof_verifier);
@@ -93,26 +93,25 @@
   ~QuicTestClient() override;
 
   // Sets the |user_agent_id| of the |client_|.
-  void SetUserAgentID(const std::string& user_agent_id);
+  void SetUserAgentID(const QuicString& user_agent_id);
 
   // Wraps data in a quic packet and sends it.
-  ssize_t SendData(const std::string& data, bool last_data);
+  ssize_t SendData(const QuicString& data, bool last_data);
   // As above, but |delegate| will be notified when |data| is ACKed.
   ssize_t SendData(
-      const std::string& data,
+      const QuicString& data,
       bool last_data,
       QuicReferenceCountedPointer<QuicAckListenerInterface> ack_listener);
 
   // Clears any outstanding state and sends a simple GET of 'uri' to the
   // server.  Returns 0 if the request failed and no bytes were written.
-  ssize_t SendRequest(const std::string& uri);
+  ssize_t SendRequest(const QuicString& uri);
   // Send a request R and a RST_FRAME which resets R, in the same packet.
-  ssize_t SendRequestAndRstTogether(const std::string& uri);
+  ssize_t SendRequestAndRstTogether(const QuicString& uri);
   // Sends requests for all the urls and waits for the responses.  To process
   // the individual responses as they are returned, the caller should use the
   // set the response_listener on the client().
-  void SendRequestsAndWaitForResponses(
-      const std::vector<std::string>& url_list);
+  void SendRequestsAndWaitForResponses(const std::vector<QuicString>& url_list);
   // Sends a request containing |headers| and |body| and returns the number of
   // bytes sent (the size of the serialized request headers and body).
   ssize_t SendMessage(const spdy::SpdyHeaderBlock& headers,
@@ -133,11 +132,11 @@
                       bool flush);
   // Sends a request containing |headers| and |body|, waits for the response,
   // and returns the response body.
-  std::string SendCustomSynchronousRequest(const spdy::SpdyHeaderBlock& headers,
-                                           const std::string& body);
+  QuicString SendCustomSynchronousRequest(const spdy::SpdyHeaderBlock& headers,
+                                          const QuicString& body);
   // Sends a GET request for |uri|, waits for the response, and returns the
   // response body.
-  std::string SendSynchronousRequest(const std::string& uri);
+  QuicString SendSynchronousRequest(const QuicString& uri);
   void SendConnectivityProbing();
   void Connect();
   void ResetConnection();
@@ -158,7 +157,7 @@
   const spdy::SpdyHeaderBlock& response_trailers() const;
   bool response_complete() const;
   int64_t response_body_size() const;
-  const std::string& response_body() const;
+  const QuicString& response_body() const;
   // Group 2.
   bool response_headers_complete() const;
   const spdy::SpdyHeaderBlock* response_headers() const;
@@ -239,12 +238,12 @@
   MockableQuicClient* client();
 
   // cert_common_name returns the common name value of the server's certificate,
-  // or the empty string if no certificate was presented.
-  const std::string& cert_common_name() const;
+  // or the empty QuicString if no certificate was presented.
+  const QuicString& cert_common_name() const;
 
   // cert_sct returns the signed timestamp of the server's certificate,
-  // or the empty string if no signed timestamp was presented.
-  const std::string& cert_sct() const;
+  // or the empty QuicString if no signed timestamp was presented.
+  const QuicString& cert_sct() const;
 
   // Get the server config map.
   QuicTagValueMap GetServerConfig() const;
@@ -271,7 +270,7 @@
 
   // Explicitly set the SNI value for this client, overriding the default
   // behavior which extracts the SNI value from the request URL.
-  void OverrideSni(const std::string& sni) {
+  void OverrideSni(const QuicString& sni) {
     override_sni_set_ = true;
     override_sni_ = sni;
   }
@@ -288,7 +287,7 @@
                    bool response_headers_complete,
                    const spdy::SpdyHeaderBlock& response_headers,
                    const spdy::SpdyHeaderBlock& preliminary_headers,
-                   const std::string& response,
+                   const QuicString& response,
                    const spdy::SpdyHeaderBlock& response_trailers,
                    uint64_t bytes_read,
                    uint64_t bytes_written,
@@ -300,7 +299,7 @@
     bool response_headers_complete;
     spdy::SpdyHeaderBlock response_headers;
     spdy::SpdyHeaderBlock preliminary_headers;
-    std::string response;
+    QuicString response;
     spdy::SpdyHeaderBlock response_trailers;
     uint64_t bytes_read;
     uint64_t bytes_written;
@@ -310,7 +309,7 @@
   // Given |uri|, populates the fields in |headers| for a simple GET
   // request. If |uri| is a relative URL, the QuicServerId will be
   // use to specify the authority.
-  bool PopulateHeaderBlockFromUrl(const std::string& uri,
+  bool PopulateHeaderBlockFromUrl(const QuicString& uri,
                                   spdy::SpdyHeaderBlock* headers);
 
   // Waits for a period of time that is long enough to receive all delayed acks
@@ -370,7 +369,7 @@
   spdy::SpdyHeaderBlock response_trailers_;
 
   spdy::SpdyPriority priority_;
-  std::string response_;
+  QuicString response_;
   // bytes_read_ and bytes_written_ are updated only when stream_ is released;
   // prefer bytes_read() and bytes_written() member functions.
   uint64_t bytes_read_;
@@ -395,7 +394,7 @@
   // If set, this value is used for the connection SNI, overriding the usual
   // logic which extracts the SNI from the request URL.
   bool override_sni_set_ = false;
-  std::string override_sni_;
+  QuicString override_sni_;
 
   DISALLOW_COPY_AND_ASSIGN(QuicTestClient);
 };
diff --git a/net/third_party/quic/test_tools/quic_test_utils.cc b/net/third_party/quic/test_tools/quic_test_utils.cc
index 57e77c58..fb595f83 100644
--- a/net/third_party/quic/test_tools/quic_test_utils.cc
+++ b/net/third_party/quic/test_tools/quic_test_utils.cc
@@ -28,7 +28,6 @@
 #include "net/third_party/spdy/core/spdy_frame_builder.h"
 #include "third_party/boringssl/src/include/openssl/sha.h"
 
-using std::string;
 using testing::_;
 using testing::Invoke;
 
@@ -102,15 +101,15 @@
       header.nonce != nullptr, header.packet_number_length);
 }
 
-string Sha1Hash(QuicStringPiece data) {
+QuicString Sha1Hash(QuicStringPiece data) {
   char buffer[SHA_DIGEST_LENGTH];
   SHA1(reinterpret_cast<const uint8_t*>(data.data()), data.size(),
        reinterpret_cast<uint8_t*>(buffer));
-  return string(buffer, QUIC_ARRAYSIZE(buffer));
+  return QuicString(buffer, QUIC_ARRAYSIZE(buffer));
 }
 
 uint64_t SimpleRandom::RandUint64() {
-  string hash =
+  QuicString hash =
       Sha1Hash(QuicStringPiece(reinterpret_cast<char*>(&seed_), sizeof(seed_)));
   DCHECK_EQ(static_cast<size_t>(SHA_DIGEST_LENGTH), hash.length());
   memcpy(&seed_, hash.data(), sizeof(seed_));
@@ -587,7 +586,7 @@
 
 TestQuicSpdyClientSession::~TestQuicSpdyClientSession() {}
 
-bool TestQuicSpdyClientSession::IsAuthorized(const string& authority) {
+bool TestQuicSpdyClientSession::IsAuthorized(const QuicString& authority) {
   return true;
 }
 
@@ -651,10 +650,10 @@
 
 namespace {
 
-string HexDumpWithMarks(const char* data,
-                        int length,
-                        const bool* marks,
-                        int mark_length) {
+QuicString HexDumpWithMarks(const char* data,
+                            int length,
+                            const bool* marks,
+                            int mark_length) {
   static const char kHexChars[] = "0123456789abcdef";
   static const int kColumns = 4;
 
@@ -665,7 +664,7 @@
     mark_length = std::min(mark_length, kSizeLimit);
   }
 
-  string hex;
+  QuicString hex;
   for (const char *row = data; length > 0;
        row += kColumns, length -= kColumns) {
     for (const char* p = row; p < row + 4; ++p) {
@@ -719,7 +718,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const string& data) {
+    const QuicString& data) {
   return ConstructEncryptedPacket(
       destination_connection_id, source_connection_id, version_flag, reset_flag,
       packet_number, data, PACKET_8BYTE_CONNECTION_ID,
@@ -732,7 +731,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length) {
@@ -748,7 +747,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
@@ -765,7 +764,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
@@ -813,7 +812,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
@@ -853,7 +852,7 @@
   return new QuicEncryptedPacket(buffer, encrypted_length, true);
 }
 
-void CompareCharArraysWithHexError(const string& description,
+void CompareCharArraysWithHexError(const QuicString& description,
                                    const char* actual,
                                    const int actual_len,
                                    const char* expected,
diff --git a/net/third_party/quic/test_tools/quic_test_utils.h b/net/third_party/quic/test_tools/quic_test_utils.h
index b3b4b422..ef0d0fb 100644
--- a/net/third_party/quic/test_tools/quic_test_utils.h
+++ b/net/third_party/quic/test_tools/quic_test_utils.h
@@ -70,7 +70,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const std::string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
@@ -87,7 +87,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const std::string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
@@ -100,7 +100,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const std::string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length);
@@ -114,7 +114,7 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const std::string& data);
+    const QuicString& data);
 
 // Constructs a received packet for testing. The caller must take ownership of
 // the returned pointer.
@@ -133,14 +133,14 @@
     bool version_flag,
     bool reset_flag,
     QuicPacketNumber packet_number,
-    const std::string& data,
+    const QuicString& data,
     QuicConnectionIdLength destination_connection_id_length,
     QuicConnectionIdLength source_connection_id_length,
     QuicPacketNumberLength packet_number_length,
     ParsedQuicVersionVector* versions,
     Perspective perspective);
 
-void CompareCharArraysWithHexError(const std::string& description,
+void CompareCharArraysWithHexError(const QuicString& description,
                                    const char* actual,
                                    const int actual_len,
                                    const char* expected,
@@ -208,8 +208,8 @@
     const QuicFrames& frames,
     size_t packet_size);
 
-// Compute SHA-1 hash of the supplied std::string.
-std::string Sha1Hash(QuicStringPiece data);
+// Compute SHA-1 hash of the supplied QuicString.
+QuicString Sha1Hash(QuicStringPiece data);
 
 // Simple random number generator used to compute random numbers suitable
 // for pseudo-randomly dropping packets in tests.  It works by computing
@@ -339,7 +339,7 @@
   MOCK_METHOD1(OnGoAway, void(const QuicGoAwayFrame& frame));
   MOCK_METHOD3(OnConnectionClosed,
                void(QuicErrorCode error,
-                    const std::string& error_details,
+                    const QuicString& error_details,
                     ConnectionCloseSource source));
   MOCK_METHOD0(OnWriteBlocked, void());
   MOCK_METHOD0(OnCanWrite, void());
@@ -452,11 +452,11 @@
   MOCK_METHOD1(SendConnectionClose, void(QuicErrorCode error));
   MOCK_METHOD3(CloseConnection,
                void(QuicErrorCode error,
-                    const std::string& details,
+                    const QuicString& details,
                     ConnectionCloseBehavior connection_close_behavior));
   MOCK_METHOD3(SendConnectionClosePacket,
                void(QuicErrorCode error,
-                    const std::string& details,
+                    const QuicString& details,
                     AckBundling ack_mode));
   MOCK_METHOD3(SendRstStream,
                void(QuicStreamId id,
@@ -465,7 +465,7 @@
   MOCK_METHOD3(SendGoAway,
                void(QuicErrorCode error,
                     QuicStreamId last_good_stream_id,
-                    const std::string& reason));
+                    const QuicString& reason));
   MOCK_METHOD1(SendBlocked, void(QuicStreamId id));
   MOCK_METHOD2(SendWindowUpdate,
                void(QuicStreamId id, QuicStreamOffset byte_offset));
@@ -546,7 +546,7 @@
 
   MOCK_METHOD3(OnConnectionClosed,
                void(QuicErrorCode error,
-                    const std::string& error_details,
+                    const QuicString& error_details,
                     ConnectionCloseSource source));
   MOCK_METHOD1(CreateIncomingDynamicStream, QuicStream*(QuicStreamId id));
   MOCK_METHOD0(CreateOutgoingDynamicStream, QuicStream*());
@@ -623,7 +623,7 @@
   // From QuicSession.
   MOCK_METHOD3(OnConnectionClosed,
                void(QuicErrorCode error,
-                    const std::string& error_details,
+                    const QuicString& error_details,
                     ConnectionCloseSource source));
   MOCK_METHOD1(CreateIncomingDynamicStream, QuicSpdyStream*(QuicStreamId id));
   MOCK_METHOD0(CreateOutgoingDynamicStream, QuicSpdyStream*());
@@ -758,7 +758,7 @@
                             QuicCryptoClientConfig* crypto_config);
   ~TestQuicSpdyClientSession() override;
 
-  bool IsAuthorized(const std::string& authority) override;
+  bool IsAuthorized(const QuicString& authority) override;
 
   // QuicSpdyClientSessionBase
   MOCK_METHOD1(OnProofValid,
@@ -842,7 +842,7 @@
   MOCK_CONST_METHOD0(HasReliableBandwidthEstimate, bool());
   MOCK_METHOD1(OnRttUpdated, void(QuicPacketNumber));
   MOCK_CONST_METHOD0(GetCongestionWindow, QuicByteCount());
-  MOCK_CONST_METHOD0(GetDebugState, std::string());
+  MOCK_CONST_METHOD0(GetDebugState, QuicString());
   MOCK_CONST_METHOD0(InSlowStart, bool());
   MOCK_CONST_METHOD0(InRecovery, bool());
   MOCK_CONST_METHOD0(IsProbingForMoreBandwidth, bool());
@@ -983,7 +983,7 @@
 
   MOCK_METHOD3(OnUnrecoverableError,
                void(QuicErrorCode,
-                    const std::string&,
+                    const QuicString&,
                     ConnectionCloseSource source));
 };
 
@@ -996,7 +996,7 @@
   MOCK_METHOD1(OnSerializedPacket, void(SerializedPacket* packet));
   MOCK_METHOD3(OnUnrecoverableError,
                void(QuicErrorCode,
-                    const std::string&,
+                    const QuicString&,
                     ConnectionCloseSource source));
 
  private:
diff --git a/net/third_party/quic/test_tools/simple_quic_framer.cc b/net/third_party/quic/test_tools/simple_quic_framer.cc
index 06725384..7d33411 100644
--- a/net/third_party/quic/test_tools/simple_quic_framer.cc
+++ b/net/third_party/quic/test_tools/simple_quic_framer.cc
@@ -12,8 +12,6 @@
 #include "net/third_party/quic/platform/api/quic_ptr_util.h"
 #include "net/third_party/quic/platform/api/quic_string_piece.h"
 
-using std::string;
-
 namespace quic {
 namespace test {
 
@@ -54,7 +52,8 @@
 
   bool OnStreamFrame(const QuicStreamFrame& frame) override {
     // Save a copy of the data so it is valid after the packet is processed.
-    string* string_data = new string(frame.data_buffer, frame.data_length);
+    QuicString* string_data =
+        new QuicString(frame.data_buffer, frame.data_length);
     stream_data_.push_back(QuicWrapUnique(string_data));
     // TODO(ianswett): A pointer isn't necessary with emplace_back.
     stream_frames_.push_back(QuicMakeUnique<QuicStreamFrame>(
@@ -230,7 +229,7 @@
   std::vector<QuicWindowUpdateFrame> window_update_frames_;
   std::vector<QuicBlockedFrame> blocked_frames_;
   std::vector<QuicNewConnectionIdFrame> new_connection_id_frames_;
-  std::vector<std::unique_ptr<string>> stream_data_;
+  std::vector<std::unique_ptr<QuicString>> stream_data_;
 
   DISALLOW_COPY_AND_ASSIGN(SimpleFramerVisitor);
 };
diff --git a/net/third_party/quic/tools/quic_client_bin.cc b/net/third_party/quic/tools/quic_client_bin.cc
index 2c5cfef..5f57db2 100644
--- a/net/third_party/quic/tools/quic_client_bin.cc
+++ b/net/third_party/quic/tools/quic_client_bin.cc
@@ -135,6 +135,9 @@
       std::unique_ptr<quic::ProofVerifierCallback> /*callback*/) override {
     return quic::QUIC_SUCCESS;
   }
+  std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override {
+    return nullptr;
+  }
 };
 
 int main(int argc, char* argv[]) {
diff --git a/net/tools/quic/quic_simple_client_bin.cc b/net/tools/quic/quic_simple_client_bin.cc
index aeb53365..a27a99a 100644
--- a/net/tools/quic/quic_simple_client_bin.cc
+++ b/net/tools/quic/quic_simple_client_bin.cc
@@ -132,6 +132,10 @@
       std::unique_ptr<quic::ProofVerifierCallback> callback) override {
     return quic::QUIC_SUCCESS;
   }
+
+  std::unique_ptr<quic::ProofVerifyContext> CreateDefaultContext() override {
+    return nullptr;
+  }
 };
 
 int main(int argc, char* argv[]) {
diff --git a/remoting/resources/remoting_strings_bn.xtb b/remoting/resources/remoting_strings_bn.xtb
index e056ea14..f6d531c8 100644
--- a/remoting/resources/remoting_strings_bn.xtb
+++ b/remoting/resources/remoting_strings_bn.xtb
@@ -7,14 +7,14 @@
 <translation id="1199593201721843963">দূরবর্তী সংযোগগুলি অক্ষম করুন</translation>
 <translation id="1291443878853470558">আপনি যদি এই কম্পিউটার অ্যাক্সেসের জন্য Chromoting ব্যবহার করতে চান তাহলে আপনাকে অবশ্যই দূরবর্তী সংযোগগুলি সক্ষম করতে হবে৷</translation>
 <translation id="1297009705180977556"><ph name="HOSTNAME" /> এর সাথে সংযুক্ত করতে ত্রুটি হয়েছে</translation>
-<translation id="1300633907480909701">নিরাপদভাবে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷
+<translation id="1300633907480909701">নিরাপদে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷
 
-• আপনার প্রতিটি কম্পিউটারে, Chrome ওয়েব দোকান থেকে Chrome দূরবর্তী ডেস্কটপ অ্যাপ্লিকেশান ব্যবহার করে দূর থেকে অ্যাক্সেস সেট করুন: https://chrome.google.com/remotedesktop
-• আপনার Android ডিভাইসে, সংযোগ স্থাপন করার জন্য অ্যাপ্লিকেশানটি খুলুন এবং আপনার অনলাইন কম্পিউটারগুলির মধ্যে যেকোনো একটির উপরে আলতো চাপুন৷
+• আপনার প্রতিটি কম্পিউটারে, Chrome ওয়েব স্টোর থেকে Chrome রিমোট ডেস্কটপ অ্যাপ ব্যবহার করে দূর থেকে অ্যাক্সেস সেট করুন: https://chrome.google.com/remotedesktop
+• আপনার Android ডিভাইসে, কানেক্ট করার জন্য অ্যাপটি খুলুন এবং আপনার অনলাইন কম্পিউটারগুলির মধ্যে যেকোনও একটির উপরে ট্যাপ করুন।
 
-মার্কিন-ইংরাজি কীবোর্ড নেই এমন দূরবর্তী কম্পিউটারগুলি ভুল পাঠ্য ইনপুট পেতে পারে৷ অন্যান্য কীবোর্ড লেআউটের জন্য সমর্থন শীঘ্রই আসছে!
+মার্কিন-ইংরাজি কীবোর্ড নেই এমন রিমোট কম্পিউটারগুলি ভুল টেক্সট ইনপুট পেতে পারে৷ অন্যান্য কীবোর্ড লেআউটের জন্য সমর্থন শীঘ্রই আসছে!
 
-গোপনীয়তা সম্পর্কিত তথ্যের জন্য, দয়া করে Google এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation>
+গোপনীয়তা সম্পর্কিত তথ্যের জন্য, Google-এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome-এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation>
 <translation id="1324095856329524885">(এই বৈশিষ্ট্যটি এখনও আপনার কম্পিউটারের জন্য উপলব্ধ নয়)</translation>
 <translation id="1342297293546459414">একটি শেয়ার করা কম্পিউটার দেখুন ও নিয়ন্ত্রণ করুন৷</translation>
 <translation id="1389790901665088353">Chrome দূরবর্তী ডেস্কটপ হোস্ট ইনস্টলার ডাউনলোড করুন</translation>
@@ -44,12 +44,12 @@
 <translation id="2078880767960296260">হোস্ট প্রক্রিয়া</translation>
 <translation id="20876857123010370">ট্র্যাকপ্যাড মোড</translation>
 <translation id="2089514346391228378">এই কম্পিউটারটিতে দূরবর্তী সংযোগগুলি সক্ষম করা হয়েছে৷</translation>
-<translation id="2118549242412205620">নিরাপদভাবে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷
+<translation id="2118549242412205620">নিরাপদে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷
 
-• আপনার প্রতিটি কম্পিউটারে, Chrome ওয়েব দোকান থেকে Chrome দূরবর্তী ডেস্কটপ অ্যাপ্লিকেশান ব্যবহার করে দূর থেকে অ্যাক্সেস সেট করুন: https://chrome.google.com/remotedesktop
-• আপনার Android ডিভাইসে, সংযোগ স্থাপন করার জন্য অ্যাপ্লিকেশানটি খুলুন এবং আপনার অনলাইন কম্পিউটারগুলির মধ্যে যেকোনো একটির উপরে আলতো চাপুন৷
+• আপনার প্রতিটি কম্পিউটারে, Chrome ওয়েব স্টোর থেকে Chrome রিমোট ডেস্কটপ অ্যাপ ব্যবহার করে দূর থেকে অ্যাক্সেস সেট করুন: https://chrome.google.com/remotedesktop
+• আপনার Android ডিভাইসে কানেক্ট করার জন্য অ্যাপটি খুলুন এবং আপনার অনলাইন কম্পিউটারগুলির মধ্যে যেকোনও একটির উপরে ট্যাপ করুন।
 
-গোপনীয়তা সম্পর্কিত তথ্যের জন্য, দয়া করে Google এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation>
+গোপনীয়তা সম্পর্কিত তথ্যের জন্য, Google-এর গোপনীয়তা নীতি (http://goo.gl/SyrVzj) এবং Chrome-এর গোপনীয়তা নীতি (http://goo.gl/0uXE5d) দেখুন৷</translation>
 <translation id="2124408767156847088">নিরাপদভাবে আপনার Android ডিভাইস থেকে আপনার কম্পিউটারগুলি অ্যাক্সেস করুন৷</translation>
 <translation id="2208514473086078157">নীতি সেটিংস এই কম্পিউটারটিকে Chrome দূরবর্তী ডেস্কটপ হোস্ট হিসাবে শেয়ার করার অনুমতি দেয় না৷ সহায়তার জন্য আপনার সিস্টেম প্রসাশকের সাথে যোগাযোগ করুন৷</translation>
 <translation id="2220529011494928058">কোনো সমস্যার অভিযোগ করুন</translation>
diff --git a/remoting/resources/remoting_strings_fa.xtb b/remoting/resources/remoting_strings_fa.xtb
index ed3aef8..0d67400c 100644
--- a/remoting/resources/remoting_strings_fa.xtb
+++ b/remoting/resources/remoting_strings_fa.xtb
@@ -102,7 +102,7 @@
 <translation id="3171922709365450819">این دستگاه توسط این کارخواه پشتیبیانی نمی‌شود چون نیاز به احراز هویت شخص ثالث دارد.</translation>
 <translation id="3194245623920924351">‏رایانه راه دور Chrome</translation>
 <translation id="3197730452537982411">رایانه ازراه‌دور</translation>
-<translation id="324272851072175193">ارسال این دستورالعمل با رایانامه</translation>
+<translation id="324272851072175193">ارسال این دستورالعمل با ایمیل</translation>
 <translation id="3258789396564295715">‏می‌توانید با استفاده از کنترل رایانه ازراه‌دور Chrome به‌صورت امن به این رایانه دسترسی پیدا کنید.</translation>
 <translation id="3286521253923406898">‏کنترل‌کننده برنامه میزبان کار با Chrome</translation>
 <translation id="3305934114213025800"><ph name="PRODUCT_NAME" /> می‌خواهد تغییراتی ایجاد کند.</translation>
@@ -245,7 +245,7 @@
 <translation id="6502629188777329097">دسترسی ایمن به رایانه</translation>
 <translation id="652218476070540101">پین برای این رایانه در حال به‌روزرسانی شدن است...</translation>
 <translation id="6527303717912515753">اشتراک‌گذاری</translation>
-<translation id="6541219117979389420">‏گزارش‌های برنامه ممکن است دارای اطلاعات شخصی شامل هویت (رایانامه) و نام و مشخصات فایل‌ها و پوشه‌های Google Drive باشد.</translation>
+<translation id="6541219117979389420">‏گزارش‌های برنامه ممکن است دارای اطلاعات شخصی شامل هویت (ایمیل) و نام و مشخصات فایل‌ها و پوشه‌های Google Drive باشد.</translation>
 <translation id="6542902059648396432">گزارش مشکل...</translation>
 <translation id="6550675742724504774">گزینه‌ها</translation>
 <translation id="6570205395680337606">بازنشانی برنامه. کارهای ذخیره نشده از بین می‌روند.</translation>
@@ -316,7 +316,7 @@
 <translation id="8116630183974937060">یک خطای شبکه رخ داده است. لطفاً بررسی کنید که دستگاهتان آنلاین باشد و دوباره امتحان کنید.</translation>
 <translation id="8178433417677596899">اشتراک‌گذاری صفحه کاربر به کاربر٬ برای پشتیبانی فنی راه دور مناسب است.</translation>
 <translation id="8187079423890319756">‏حق نسخه‌برداری ۲۰۱۳ The Chromium Authors. کلیه حقوق محفوظ است.</translation>
-<translation id="8196755618196986400">برای اینکه بتوانیم برای اطلاعات بیشتر با شما تماس بگیریم، نشانی رایانامه شما در تمام بازخوردهای ارسالی شما قرار می‌گیرد.</translation>
+<translation id="8196755618196986400">برای اینکه بتوانیم برای اطلاعات بیشتر با شما تماس بگیریم، نشانی ایمیل شما در تمام بازخوردهای ارسالی شما قرار می‌گیرد.</translation>
 <translation id="8244400547700556338">اطلاعاتی درباره نحوه انجام کار کسب کنید.</translation>
 <translation id="8261506727792406068">حذف</translation>
 <translation id="8355326866731426344">این کد دسترسی در <ph name="TIMEOUT" /> منقضی میشود</translation>
diff --git a/services/identity/public/cpp/identity_manager.h b/services/identity/public/cpp/identity_manager.h
index 6e6c1fa..23e3afee 100644
--- a/services/identity/public/cpp/identity_manager.h
+++ b/services/identity/public/cpp/identity_manager.h
@@ -30,7 +30,7 @@
 
 // Necessary to declare this class as a friend.
 namespace file_manager {
-class MultiProfileFileManagerBrowserTest;
+class MultiProfileFilesAppBrowserTest;
 }
 
 // Necessary to declare these classes as friends.
@@ -185,7 +185,7 @@
                                        const std::string& email);
   friend MultiProfileDownloadNotificationTest;
   friend ProfileSyncServiceHarness;
-  friend file_manager::MultiProfileFileManagerBrowserTest;
+  friend file_manager::MultiProfileFilesAppBrowserTest;
 
   // These clients needs to call SetPrimaryAccountSynchronously().
   friend ArcSupportHostTest;
diff --git a/services/network/proxy_resolver_factory_mojo_unittest.cc b/services/network/proxy_resolver_factory_mojo_unittest.cc
index 07a3a8f..73d65533 100644
--- a/services/network/proxy_resolver_factory_mojo_unittest.cc
+++ b/services/network/proxy_resolver_factory_mojo_unittest.cc
@@ -478,6 +478,14 @@
   };
 
   // net::HostResolver overrides.
+  std::unique_ptr<HostResolver::ResolveHostRequest> CreateRequest(
+      const net::HostPortPair& host,
+      const net::NetLogWithSource& source_net_log) override {
+    // TODO(crbug.com/821021): Implement.
+    NOTIMPLEMENTED();
+    return nullptr;
+  }
+
   int Resolve(const RequestInfo& info,
               net::RequestPriority priority,
               net::AddressList* addresses,
diff --git a/services/shape_detection/barcode_detection_impl_mac_unittest.mm b/services/shape_detection/barcode_detection_impl_mac_unittest.mm
index 4d3774e1..c7cd19f 100644
--- a/services/shape_detection/barcode_detection_impl_mac_unittest.mm
+++ b/services/shape_detection/barcode_detection_impl_mac_unittest.mm
@@ -65,8 +65,7 @@
   BarcodeDetectorFactory factory;
 } kTestParams[] = {
     {1, kInfoString, base::Bind(&CreateBarcodeDetectorImplMac)},
-    // TODO(junwei.fu): add more tests https://crbug.com/848182.
-    {0, "", base::Bind(&CreateBarcodeDetectorImplMacVision)},
+    {1, kInfoString, base::Bind(&CreateBarcodeDetectorImplMacVision)},
 };
 }
 
diff --git a/services/shape_detection/barcode_detection_impl_mac_vision.h b/services/shape_detection/barcode_detection_impl_mac_vision.h
index a303562..3867926 100644
--- a/services/shape_detection/barcode_detection_impl_mac_vision.h
+++ b/services/shape_detection/barcode_detection_impl_mac_vision.h
@@ -5,8 +5,15 @@
 #ifndef SERVICES_SHAPE_DETECTION_BARCODE_DETECTION_IMPL_MAC_VISION_H_
 #define SERVICES_SHAPE_DETECTION_BARCODE_DETECTION_IMPL_MAC_VISION_H_
 
+#include <memory>
+#include <utility>
+
 #include "base/mac/availability.h"
+#include "base/mac/sdk_forward_declarations.h"
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/shape_detection/detection_utils_mac.h"
 #include "services/shape_detection/public/mojom/barcodedetection.mojom.h"
 #include "services/shape_detection/public/mojom/barcodedetection_provider.mojom.h"
 
@@ -26,7 +33,19 @@
   void Detect(const SkBitmap& bitmap,
               mojom::BarcodeDetection::DetectCallback callback) override;
 
+  void SetBinding(mojo::StrongBindingPtr<mojom::BarcodeDetection> binding) {
+    binding_ = std::move(binding);
+  }
+
  private:
+  void OnBarcodesDetected(VNRequest* request, NSError* error);
+
+  CGSize image_size_;
+  std::unique_ptr<VisionAPIAsyncRequestMac> barcodes_async_request_;
+  DetectCallback detected_callback_;
+  mojo::StrongBindingPtr<mojom::BarcodeDetection> binding_;
+  base::WeakPtrFactory<BarcodeDetectionImplMacVision> weak_factory_;
+
   DISALLOW_COPY_AND_ASSIGN(BarcodeDetectionImplMacVision);
 };
 
diff --git a/services/shape_detection/barcode_detection_impl_mac_vision.mm b/services/shape_detection/barcode_detection_impl_mac_vision.mm
index 590b4c35..4362b19 100644
--- a/services/shape_detection/barcode_detection_impl_mac_vision.mm
+++ b/services/shape_detection/barcode_detection_impl_mac_vision.mm
@@ -5,26 +5,80 @@
 #include "services/shape_detection/barcode_detection_impl_mac_vision.h"
 
 #include <Foundation/Foundation.h>
-#include <utility>
+#include <vector>
 
+#include "base/bind.h"
+#include "base/callback.h"
 #include "base/logging.h"
+#include "base/strings/sys_string_conversions.h"
+#include "third_party/skia/include/core/SkBitmap.h"
 
 namespace shape_detection {
 
 BarcodeDetectionImplMacVision::BarcodeDetectionImplMacVision(
-    mojom::BarcodeDetectorOptionsPtr options) {
+    mojom::BarcodeDetectorOptionsPtr options)
+    : weak_factory_(this) {
   Class request_class = NSClassFromString(@"VNDetectBarcodesRequest");
   if (!request_class) {
     DLOG(ERROR) << "Failed to load VNDetectBarcodesRequest class";
     return;
   }
+
+  // The repeating callback will not be run if BarcodeDetectionImplMacVision
+  // object has already been destroyed.
+  barcodes_async_request_ = VisionAPIAsyncRequestMac::Create(
+      request_class,
+      base::BindRepeating(&BarcodeDetectionImplMacVision::OnBarcodesDetected,
+                          weak_factory_.GetWeakPtr()));
 }
 
 BarcodeDetectionImplMacVision::~BarcodeDetectionImplMacVision() = default;
 
 void BarcodeDetectionImplMacVision::Detect(const SkBitmap& bitmap,
                                            DetectCallback callback) {
-  std::move(callback).Run({});
+  DCHECK(barcodes_async_request_);
+
+  if (!barcodes_async_request_->PerformRequest(bitmap)) {
+    std::move(callback).Run({});
+    return;
+  }
+
+  image_size_ = CGSizeMake(bitmap.width(), bitmap.height());
+  // Hold on the callback until async request completes.
+  detected_callback_ = std::move(callback);
+  // This prevents the Detect function from being called before the
+  // VisionAPIAsyncRequestMac completes.
+  if (binding_)  // Can be unbound in unit testing.
+    binding_->PauseIncomingMethodCallProcessing();
+}
+
+void BarcodeDetectionImplMacVision::OnBarcodesDetected(VNRequest* request,
+                                                       NSError* error) {
+  if (binding_)  // Can be unbound in unit testing.
+    binding_->ResumeIncomingMethodCallProcessing();
+
+  if ([request.results count] == 0 || error) {
+    std::move(detected_callback_).Run({});
+    return;
+  }
+
+  std::vector<mojom::BarcodeDetectionResultPtr> results;
+  for (VNBarcodeObservation* const observation in request.results) {
+    auto barcode = mojom::BarcodeDetectionResult::New();
+    // The coordinates are normalized to the dimensions of the processed image.
+    barcode->bounding_box = ConvertCGToGfxCoordinates(
+        CGRectMake(observation.boundingBox.origin.x * image_size_.width,
+                   observation.boundingBox.origin.y * image_size_.height,
+                   observation.boundingBox.size.width * image_size_.width,
+                   observation.boundingBox.size.height * image_size_.height),
+        image_size_.height);
+
+    barcode->raw_value =
+        base::SysNSStringToUTF8(observation.payloadStringValue);
+
+    results.push_back(std::move(barcode));
+  }
+  std::move(detected_callback_).Run(std::move(results));
 }
 
 }  // namespace shape_detection
diff --git a/services/shape_detection/barcode_detection_provider_mac.mm b/services/shape_detection/barcode_detection_provider_mac.mm
index 982ace39..06f710d 100644
--- a/services/shape_detection/barcode_detection_provider_mac.mm
+++ b/services/shape_detection/barcode_detection_provider_mac.mm
@@ -30,9 +30,11 @@
     mojom::BarcodeDetectorOptionsPtr options) {
   // Vision Framework needs at least MAC OS X 10.13.
   if (@available(macOS 10.13, *)) {
-    mojo::MakeStrongBinding(
-        std::make_unique<BarcodeDetectionImplMacVision>(std::move(options)),
-        std::move(request));
+    auto impl =
+        std::make_unique<BarcodeDetectionImplMacVision>(std::move(options));
+    auto* impl_ptr = impl.get();
+    impl_ptr->SetBinding(
+        mojo::MakeStrongBinding(std::move(impl), std::move(request)));
     return;
   }
 
diff --git a/services/ui/common/BUILD.gn b/services/ui/common/BUILD.gn
index 403d405..1737e15 100644
--- a/services/ui/common/BUILD.gn
+++ b/services/ui/common/BUILD.gn
@@ -8,25 +8,11 @@
 # TODO(sky): move everything but switches to services/ui/public/cpp
 source_set("mus_common") {
   sources = [
-    "accelerator_util.cc",
-    "accelerator_util.h",
-    "image_cursors_set.cc",
-    "image_cursors_set.h",
     "switches.cc",
     "switches.h",
     "types.h",
     "util.h",
   ]
-
-  deps = [
-    "//ui/events",
-    "//ui/gfx/ipc/geometry",
-  ]
-
-  public_deps = [
-    "//services/ui/public/interfaces",
-    "//ui/base",
-  ]
 }
 
 source_set("task_runner_test_base") {
diff --git a/services/ui/common/accelerator_util.cc b/services/ui/common/accelerator_util.cc
deleted file mode 100644
index 1c8c2efb9..0000000
--- a/services/ui/common/accelerator_util.cc
+++ /dev/null
@@ -1,44 +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.
-
-#include "services/ui/common/accelerator_util.h"
-
-namespace ui {
-
-mojom::EventMatcherPtr CreateKeyMatcher(ui::mojom::KeyboardCode code,
-                                        int flags) {
-  mojom::EventMatcherPtr matcher(mojom::EventMatcher::New());
-  matcher->type_matcher = mojom::EventTypeMatcher::New();
-  matcher->flags_matcher = mojom::EventFlagsMatcher::New();
-  matcher->ignore_flags_matcher = mojom::EventFlagsMatcher::New();
-  // Ignoring these makes most accelerator scenarios more straight forward. Code
-  // that needs to check them can override this setting.
-  matcher->ignore_flags_matcher->flags = ui::mojom::kEventFlagCapsLockOn |
-                                         ui::mojom::kEventFlagScrollLockOn |
-                                         ui::mojom::kEventFlagNumLockOn;
-  matcher->key_matcher = mojom::KeyEventMatcher::New();
-  matcher->type_matcher->type = ui::mojom::EventType::KEY_PRESSED;
-  matcher->flags_matcher->flags = flags;
-  matcher->key_matcher->keyboard_code = code;
-  return matcher;
-}
-
-std::vector<ui::mojom::WmAcceleratorPtr> CreateAcceleratorVector(
-    uint32_t id,
-    ui::mojom::EventMatcherPtr event_matcher) {
-  std::vector<ui::mojom::WmAcceleratorPtr> accelerators;
-  accelerators.push_back(CreateAccelerator(id, std::move(event_matcher)));
-  return accelerators;
-}
-
-ui::mojom::WmAcceleratorPtr CreateAccelerator(
-    uint32_t id,
-    ui::mojom::EventMatcherPtr event_matcher) {
-  ui::mojom::WmAcceleratorPtr accelerator_ptr = ui::mojom::WmAccelerator::New();
-  accelerator_ptr->id = id;
-  accelerator_ptr->event_matcher = std::move(event_matcher);
-  return accelerator_ptr;
-}
-
-}  // namespace ui
diff --git a/services/ui/common/accelerator_util.h b/services/ui/common/accelerator_util.h
deleted file mode 100644
index 06a306c..0000000
--- a/services/ui/common/accelerator_util.h
+++ /dev/null
@@ -1,32 +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.
-
-#ifndef SERVICES_UI_COMMON_ACCELERATOR_UTIL_H_
-#define SERVICES_UI_COMMON_ACCELERATOR_UTIL_H_
-
-#include "services/ui/public/interfaces/event_matcher.mojom.h"
-#include "services/ui/public/interfaces/window_manager.mojom.h"
-#include "ui/events/mojo/event_constants.mojom.h"
-#include "ui/events/mojo/keyboard_codes.mojom.h"
-
-namespace ui {
-
-// |flags| is a bitfield of kEventFlag* and kMouseEventFlag* values in
-// input_event_constants.mojom.
-mojom::EventMatcherPtr CreateKeyMatcher(ui::mojom::KeyboardCode code,
-                                        int flags);
-
-// Construct accelerator vector from the provided |id| and |event_matcher|
-std::vector<ui::mojom::WmAcceleratorPtr> CreateAcceleratorVector(
-    uint32_t id,
-    ui::mojom::EventMatcherPtr event_matcher);
-
-// Construct accelerator from the provided |id| and |event_matcher|
-ui::mojom::WmAcceleratorPtr CreateAccelerator(
-    uint32_t id,
-    ui::mojom::EventMatcherPtr event_matcher);
-
-}  // namespace ui
-
-#endif  // SERVICES_UI_COMMON_ACCELERATOR_UTIL_H_
diff --git a/services/ui/common/image_cursors_set.cc b/services/ui/common/image_cursors_set.cc
deleted file mode 100644
index 38b81f2..0000000
--- a/services/ui/common/image_cursors_set.cc
+++ /dev/null
@@ -1,37 +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 "services/ui/common/image_cursors_set.h"
-
-#include <algorithm>
-
-#include "ui/base/cursor/image_cursors.h"
-
-namespace ui {
-
-ImageCursorsSet::ImageCursorsSet() : weak_ptr_factory_(this) {}
-
-ImageCursorsSet::~ImageCursorsSet() {}
-
-void ImageCursorsSet::AddImageCursors(
-    std::unique_ptr<ImageCursors> image_cursors) {
-  auto result = image_cursors_set_.insert(std::move(image_cursors));
-  DCHECK(result.second);
-}
-
-void ImageCursorsSet::DeleteImageCursors(ImageCursors* image_cursors) {
-  auto it =
-      std::find_if(image_cursors_set_.begin(), image_cursors_set_.end(),
-                   [image_cursors](const std::unique_ptr<ImageCursors>& elmt) {
-                     return elmt.get() == image_cursors;
-                   });
-  DCHECK(it != image_cursors_set_.end());
-  image_cursors_set_.erase(it);
-}
-
-base::WeakPtr<ImageCursorsSet> ImageCursorsSet::GetWeakPtr() {
-  return weak_ptr_factory_.GetWeakPtr();
-}
-
-}  // namespace ui
diff --git a/services/ui/common/image_cursors_set.h b/services/ui/common/image_cursors_set.h
deleted file mode 100644
index 8616cf8..0000000
--- a/services/ui/common/image_cursors_set.h
+++ /dev/null
@@ -1,37 +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.
-
-#ifndef SERVICES_UI_COMMON_IMAGE_CURSORS_SET_H_
-#define SERVICES_UI_COMMON_IMAGE_CURSORS_SET_H_
-
-#include <memory>
-#include <set>
-
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-
-namespace ui {
-
-class ImageCursors;
-
-// Helper class wrapping a set of ImageCursors objects.
-class ImageCursorsSet {
- public:
-  ImageCursorsSet();
-  ~ImageCursorsSet();
-
-  void AddImageCursors(std::unique_ptr<ImageCursors> image_cursors);
-  void DeleteImageCursors(ImageCursors* image_cursors);
-  base::WeakPtr<ImageCursorsSet> GetWeakPtr();
-
- private:
-  std::set<std::unique_ptr<ImageCursors>> image_cursors_set_;
-  base::WeakPtrFactory<ImageCursorsSet> weak_ptr_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(ImageCursorsSet);
-};
-
-}  // namespace ui
-
-#endif  // SERVICES_UI_COMMON_IMAGE_CURSORS_SET_H_
diff --git a/services/ui/common/switches.h b/services/ui/common/switches.h
index 85709f0..1bf0d2b 100644
--- a/services/ui/common/switches.h
+++ b/services/ui/common/switches.h
@@ -5,7 +5,6 @@
 #ifndef SERVICES_UI_COMMON_SWITCHES_H_
 #define SERVICES_UI_COMMON_SWITCHES_H_
 
-
 namespace ui {
 namespace switches {
 
diff --git a/services/ui/manifest.json b/services/ui/manifest.json
index 1100673..041faca 100644
--- a/services/ui/manifest.json
+++ b/services/ui/manifest.json
@@ -15,7 +15,6 @@
           "ui.mojom.Gpu",
           "ui.mojom.IMEDriver",
           "ui.mojom.InputDeviceServer",
-          "ui.mojom.ScreenProvider",
           "ui.mojom.WindowTreeFactory"
         ],
         "arc_manager" : [
@@ -59,6 +58,7 @@
           "ui.mojom.EventInjector",
           "ui.mojom.RemotingEventInjector"
         ],
+        // TODO(sky): update this to reflect what is really possible.
         "window_manager": [
           "discardable_memory.mojom.DiscardableSharedMemoryManager",
           "display.mojom.DisplayController",
@@ -69,10 +69,8 @@
           "ui.mojom.IMEDriver",
           "ui.mojom.InputDeviceController",
           "ui.mojom.InputDeviceServer",
-          "ui.mojom.ScreenProvider",
           "ui.mojom.TouchDeviceServer",
-          "ui.mojom.UserActivityMonitor",
-          "ui.mojom.WindowManagerWindowTreeFactory"
+          "ui.mojom.UserActivityMonitor"
         ],
         "window_tree_host_factory": [
           "ui.mojom.WindowTreeHostFactory"
diff --git a/services/ui/public/interfaces/BUILD.gn b/services/ui/public/interfaces/BUILD.gn
index 6683076c..dec1ebb 100644
--- a/services/ui/public/interfaces/BUILD.gn
+++ b/services/ui/public/interfaces/BUILD.gn
@@ -9,7 +9,6 @@
   sources = [
     "accessibility_manager.mojom",
     "event_injector.mojom",
-    "event_matcher.mojom",
     "gpu.mojom",
     "remoting_event_injector.mojom",
     "screen_provider.mojom",
@@ -17,7 +16,6 @@
     "video_detector.mojom",
     "window_manager.mojom",
     "window_manager_constants.mojom",
-    "window_manager_window_tree_factory.mojom",
     "window_server_test.mojom",
     "window_tree.mojom",
     "window_tree_constants.mojom",
diff --git a/services/ui/public/interfaces/event_matcher.mojom b/services/ui/public/interfaces/event_matcher.mojom
deleted file mode 100644
index 22d8a1c..0000000
--- a/services/ui/public/interfaces/event_matcher.mojom
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2015 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 ui.mojom;
-
-import "ui/events/mojo/event_constants.mojom";
-import "ui/events/mojo/keyboard_codes.mojom";
-import "ui/gfx/geometry/mojo/geometry.mojom";
-
-struct KeyEventMatcher {
-  ui.mojom.KeyboardCode keyboard_code;
-};
-
-struct PointerKindMatcher {
-  ui.mojom.PointerKind pointer_kind;
-};
-
-struct PointerLocationMatcher {
-  gfx.mojom.RectF region;
-};
-
-struct EventTypeMatcher {
-  ui.mojom.EventType type;
-};
-
-struct EventFlagsMatcher {
-  // A bitfield of kEventFlag* and kMouseEventFlag* values in
-  // input_event_constants.mojom.
-  int32 flags;
-};
-
-// If a specific matcher is missing, then an Event will match this EventMatcher
-// (if relevant). For example, if |type_matcher| is missing, then events of all
-// types will match this EventMatcher. Similarly, if |key_matcher| is missing,
-// then all key-events will match.
-// An example matcher to match the Ctrl+A accelerator would be:
-// - |type_matcher.type| = ui::mojom::EventType::KEY_PRESSED
-// - |flags_matcher.flags| = ui::mojom::kEventFlagControlDown
-// - |key_matcher.keyboard_code| = ui::mojom::KeyboardCode::A
-//
-// A matcher to match any key-press event would be:
-// - |type_matcher.type| = ui::mojom::EventType::KEY_PRESSED
-struct EventMatcher {
-  // |accelerator_phase| is only applicable to accelerators.
-  // TODO(jamescook): Move this to somewhere accelerator-specific.
-  ui.mojom.AcceleratorPhase accelerator_phase;
-  EventTypeMatcher? type_matcher;
-  EventFlagsMatcher? flags_matcher;
-  // These flags will be stripped from incoming events' flags when comparing
-  // against |flags_matcher|.
-  EventFlagsMatcher? ignore_flags_matcher;
-  KeyEventMatcher? key_matcher;
-  PointerKindMatcher? pointer_kind_matcher;
-  PointerLocationMatcher? pointer_location_matcher;
-};
diff --git a/services/ui/public/interfaces/screen_provider.mojom b/services/ui/public/interfaces/screen_provider.mojom
index e784d5a..3ea030a 100644
--- a/services/ui/public/interfaces/screen_provider.mojom
+++ b/services/ui/public/interfaces/screen_provider.mojom
@@ -17,9 +17,3 @@
                     int64 primary_display_id,
                     int64 internal_display_id);
 };
-
-// TODO(sky): remove this once ws has been removed. https://crbug.com/837713
-interface ScreenProvider {
-  // Adding an observer triggers a notification with the initial values.
-  AddObserver(ScreenProviderObserver observer);
-};
diff --git a/services/ui/public/interfaces/window_manager.mojom b/services/ui/public/interfaces/window_manager.mojom
index c7581b0a..1d82173 100644
--- a/services/ui/public/interfaces/window_manager.mojom
+++ b/services/ui/public/interfaces/window_manager.mojom
@@ -4,31 +4,8 @@
 
 module ui.mojom;
 
-import "gpu/ipc/common/surface_handle.mojom";
-import "services/ui/public/interfaces/cursor/cursor.mojom";
-import "services/ui/public/interfaces/event_matcher.mojom";
-import "services/ui/public/interfaces/window_manager_constants.mojom";
-import "services/ui/public/interfaces/window_tree_constants.mojom";
-import "services/viz/public/interfaces/compositing/frame_sink_id.mojom";
-import "services/viz/public/interfaces/compositing/local_surface_id.mojom";
-import "ui/base/mojo/ui_base_types.mojom";
-import "ui/display/mojo/display.mojom";
-import "ui/events/mojo/event.mojom";
-import "ui/events/mojo/event_constants.mojom";
-import "ui/gfx/geometry/mojo/geometry.mojom";
-import "ui/gfx/image/mojo/image.mojom";
-import "ui/display/mojo/display.mojom";
-
-// WindowManager is used when a WindowTreeClient attempts to modify
-// a property of the embed root. When this happens WindowTree calls the
-// appropriate function on WindowManager. For example, if a
-// WindowTreeClient calls SetWindowBounds() on its embed root, WindowTree
-// calls WmSetBounds(). WindowManager can then decide if it wants to
-// change the bounds or not.
-//
-// This interface is only used as an associated interface and is associated
-// with WindowTreeClient, further WindowTree requests this interface from
-// WindowTreeClient supplied at the time the WindowTreeHost is created.
+// TODO(sky): consider moving these out of the WindowManager interface. At a
+// minimum they should move to window_manager_constants.mojom.
 interface WindowManager {
   // WindowManager defines two sets of distinct properties.
   // . Properties that are used at creation time only and not persisted.
@@ -175,238 +152,4 @@
   const string kWindowTitleShown_Property = "prop:window-title-shown";
 
   // End long lived properties. ------------------------------------------------
-
-  // Called immediately when the WindowManager is obtained.
-  OnConnect();
-
-  // Called to notify about the real AcceleratedWidget associated with a
-  // display. This is called only when mus is not hosting viz, and requires the
-  // window manager to instead host viz.
-  WmOnAcceleratedWidgetForDisplay(int64 display_id,
-                                  gpu.mojom.SurfaceHandle surface_handle);
-
-  // Called when a new display is added. |root| gives the root window specific
-  // to this WindowManager for |display|. |local_surface_id| identifies the ID
-  // to use to submit CompositorFrames.
-  WmNewDisplayAdded(display.mojom.Display display,
-                    WindowData root,
-                    bool parent_drawn,
-                    viz.mojom.LocalSurfaceId? local_surface_id);
-
-  // Called when a display is removed. The root of the specified display is
-  // still valid. It is expected the client calls DeleteWindow() shortly after
-  // this with the root.
-  WmDisplayRemoved(int64 display_id);
-
-  // Called when a display is modified. The root of the specified display will
-  // be resized by the WindowServer after this.
-  WmDisplayModified(display.mojom.Display display);
-
-  // When the WindowManager completes a request it must call back to
-  // WindowManagerClient::WmResponse().
-  WmSetBounds(uint32 change_id, uint64 window_id, gfx.mojom.Rect bounds);
-  WmSetProperty(uint32 change_id,
-                uint64 window_id,
-                string name,
-                array<uint8>? value);
-
-  WmSetModalType(uint64 window_id, ModalType type);
-  WmSetCanFocus(uint64 window_id, bool can_focus);
-
-  // Asks the WindowManager to create a new window.
-  // |frame_sink_id| is the FrameSinkId for the new window. Window manager
-  // tracks top level windows by client with |frame_sink_id|.client_id().
-  WmCreateTopLevelWindow(uint32 change_id,
-                         viz.mojom.FrameSinkId frame_sink_id,
-                         map<string, array<uint8>> properties);
-
-  // A WindowTreeClient is considered "janky" by Mus when it stops ACK'ing input
-  // events within a reasonable timeframe. When a client enters or exits this
-  // state, Mus will tell the window manager about it so that the window manager
-  // can update the UI for the janky windows.
-  WmClientJankinessChanged(uint32 client_id, bool janky);
-
-  // Asks the WindowManager to create a drag representation window: a window
-  // which contains a single image representation.
-  WmBuildDragImage(gfx.mojom.Point screen_location,
-                   gfx.mojom.ImageSkia? drag_image,
-                   gfx.mojom.Vector2d drag_image_offset,
-                   PointerKind source);
-
-  // Moves the drag representation image to |screen_location|. The window server
-  // queues further drags locally until they receive the callback.
-  WmMoveDragImage(gfx.mojom.Point screen_location) => ();
-
-  // Called when the drag image is no longer needed.
-  WmDestroyDragImage();
-
-  // Asks the WindowManager to interactively move the window. This will return
-  // whether this completed successfully or not through the client's
-  // OnWmMoveLoopCompleted().
-  WmPerformMoveLoop(uint32 change_id, uint64 window_id,
-                    MoveLoopSource source,
-                    gfx.mojom.Point cursor_location);
-
-  // Asks the WindowManager to cancel any outstanding move loop on |change_id|.
-  WmCancelMoveLoop(uint32 change_id);
-
-  // Asks the WindowManager to change the activation from the current window
-  // to the next. The window manager may completely ignore this message.
-  WmDeactivateWindow(uint64 window_id);
-
-  // Asks the WindowMangaer to stack |above_id| in front of |below_id|.
-  WmStackAbove(uint32 change_id, uint64 above_id, uint64 below_id);
-
-  // Asks the WindowManager to stack |window_id| as the first child of its
-  // window manager owned parent.
-  WmStackAtTop(uint32 change_id, uint64 window_id);
-
-  // Asks the WindowManager to perform |action| on |window_id|.
-  WmPerformWmAction(uint64 window_id, string action);
-
-  // An accelerator registered via AddAccelerator() has been triggered. If
-  // |ack_id| is non-zero the accelerator matches a PRE_TARGET and must be
-  // acknowledged by WindowManagerClient::OnAcceleratorAck().
-  OnAccelerator(uint32 ack_id, uint32 accelerator_id, ui.mojom.Event event);
-
-  // Whenever the visibility of the mouse cursor changes due to touch on the
-  // server, the window manager gets notified of the change.
-  OnCursorTouchVisibleChanged(bool enabled);
-
-  // Called when a pointer down event occurs on a window and the event is
-  // blocked by a modal window.
-  OnEventBlockedByModalWindow(uint64 window_id);
-};
-
-struct WmAccelerator {
-  uint32 id;
-  EventMatcher event_matcher;
-};
-
-// This interface is only used as an associated interface and is associated
-// with WindowTree.
-interface WindowManagerClient {
-  // Enables (or disables) child windows of |window_id| to be activated.
-  AddActivationParent(uint64 window_id);
-  RemoveActivationParent(uint64 window_id);
-
-  // Extends the hit area for children of |window_id| by the specified amount.
-  // |mouse_insets| is used for mouse events, and |touch_insets| for touch
-  // events. NOTE: the insets are expected to be negative (or zero). If one
-  // of the sizes of an inset is a positive value the call is ignored.
-  SetExtendedHitRegionForChildren(uint64 window_id,
-                                  gfx.mojom.Insets mouse_insets,
-                                  gfx.mojom.Insets touch_insets);
-
-  // Add and remove accelerators. When accelerators are registered the
-  // WindowManager receives the event via OnAccelerator() rather than the
-  // target window. The id is defined by the client and can be used to more
-  // easily identify the accelerator's action.
-  // Accelerator ids 1 << 31 and above are reserved for internal use.
-
-  // See WindowTree for details on event dispatch.
-  // This ignores any accelerators already defined with the same id or matcher.
-  // Returns true if all accelerators were added successfully.
-  AddAccelerators(array<WmAccelerator> accelerators) => (bool success);
-  RemoveAccelerator(uint32 id);
-
-  // Some platforms want to hide the cursor when the user presses a key, but
-  // only on certain keys. When |dont_hide_cursor_list| is non-empty, the window
-  // server will attempt to match all keys being dispatched to windows to this
-  // list. If there is no match, the window server will hide the cursor. (The
-  // list of keys to *not* hide on is much shorter than the list of all keys.)
-  // The cursor will automatically be unhidden on the next mouse event.
-  SetKeyEventsThatDontHideCursor(array<EventMatcher> dont_hide_cursor_list);
-
-  // Sets the root window for a new |display|. This is only applicable if the
-  // WindowTree does not |automatically_create_display_roots| (see
-  // WindowManagerWindowTreeFactory::CreateWindowTree() for details).
-  // This may also be called to move an existing root window to a new display.
-  // |mirrors| contains a list of physical displays presenting contents mirrored
-  // from another physical display, or from part of a virtual unified display.
-  SetDisplayRoot(display.mojom.Display display,
-                 WmViewportMetrics viewport_metrics,
-                 bool is_primary_display,
-                 uint64 window_id,
-                 array<display.mojom.Display> mirrors) => (bool success);
-
-  // Configures metrics for the displays and notifies observers. This is only
-  // applicable if the WindowTree does not |automatically_create_display_roots|.
-  // This *must* be called after any display related changes to inform
-  // observers, for example, after calling SetDisplayRoot() this must be called
-  // to inform observers of the display changes.
-  // |mirrors| contains a list of physical displays presenting contents mirrored
-  // from another physical display, or from part of a virtual unified display.
-  SetDisplayConfiguration(
-      array<display.mojom.Display> displays,
-      array<WmViewportMetrics> viewport_metrics,
-      int64 primary_display_id,
-      int64 internal_display_id,
-      array<display.mojom.Display> mirrors) => (bool success);
-
-  // Swaps the display roots of the two displays.
-  SwapDisplayRoots(int64 display_id1, int64 display_id2) => (bool success);
-
-  // Sets the BlockingContainers; one per display. This should be called any
-  // time displays are added or removed. See description of BlockingContainers
-  // for details on what this does.
-  SetBlockingContainers(array<BlockingContainers> blocking_containers) =>
-      (bool success);
-
-  // The window manager has completed a request with the specific change id.
-  WmResponse(uint32 change_id, bool response);
-
-  // The window manager has completed a SetBounds request with the specified
-  // change id
-  WmSetBoundsResponse(uint32 change_id);
-
-  // Calls WindowTreeClient::RequestClose() on the embedded app at the
-  // specified window.
-  WmRequestClose(uint64 window_id);
-
-  // Sets the frame decoration constants of the display the window manager is
-  // associated with.
-  WmSetFrameDecorationValues(FrameDecorationValues values);
-
-  // Sets the cursor that the non-client areas of the window should use.
-  WmSetNonClientCursor(uint64 window_id, CursorData cursor);
-
-  // Locks and unlocks the cursor globally. Used during window management tasks
-  // where the cursor shouldn't change.
-  WmLockCursor();
-  WmUnlockCursor();
-
-  // Shows and hides the cursor globally. Used during window management tasks.
-  WmSetCursorVisible(bool visible);
-
-  // Sets whether we're using normal or large cursors.
-  WmSetCursorSize(CursorSize cursor_size);
-
-  // Sets a global cursor which overrides per-window cursors. Pass null to
-  // clear.
-  WmSetGlobalOverrideCursor(CursorData? cursor);
-
-  // Moves the cursor to the given location on the given display.
-  WmMoveCursorToDisplayLocation(gfx.mojom.Point display_pixels,
-                                int64 display_id);
-
-  // Confines the cursor to a rectangle in pixels on |display_id|.
-  WmConfineCursorToBounds(gfx.mojom.Rect bounds_in_pixels,
-                          int64 display_id);
-
-  // The cursor is hidden and shown by touch events naturally, but the
-  // window manager also can manually show/hide it for features.
-  WmSetCursorTouchVisible(bool enabled);
-
-  // Response from WmCreateTopLevelWindow() informing the client of the id for
-  // the new window.
-  OnWmCreatedTopLevelWindow(uint32 change_id, uint64 window_id);
-
-  // See description in WindowManager::OnAccelerator(). |ack_id| is the value
-  // that was passed to OnAccelerator(). If the accelerator is a pre-target
-  // handler and |event_result| is UNHANDLED, then |properties| is added to
-  // the KeyEvent that is dispatched to the client with the focused window.
-  OnAcceleratorAck(uint32 ack_id,
-                   EventResult event_result,
-                   map<string, array<uint8>> properties);
 };
diff --git a/services/ui/public/interfaces/window_manager_constants.mojom b/services/ui/public/interfaces/window_manager_constants.mojom
index bad0b22c..3a9f064 100644
--- a/services/ui/public/interfaces/window_manager_constants.mojom
+++ b/services/ui/public/interfaces/window_manager_constants.mojom
@@ -7,33 +7,9 @@
 import "ui/display/mojo/display.mojom";
 import "ui/gfx/geometry/mojo/geometry.mojom";
 
-enum WindowManagerErrorCode {
-  SUCCESS,
-  ACCESS_DENIED
-};
-
 // Used when the window manager explicitly adds a new display.
 struct WmViewportMetrics {
   gfx.mojom.Rect bounds_in_pixels;
   float device_scale_factor;
   float ui_scale_factor;
 };
-
-// Scale factor applied to cursor movement on external displays.
-// TODO(sky): remove this once classic ash is removed.
-const float kCursorMultiplierForExternalDisplays = 1.2;
-
-// Used to specify containers (windows) that may block events. There is a pair
-// of these per display.
-struct BlockingContainers {
-  // Specifies the window that system modal windows are children of. If there a
-  // system modal window in this container, then only events targetted at the
-  // system modal window or one if its descendants (including transient windows)
-  // are delivered. All others are eaten.
-  uint64 system_modal_container_id;
-
-  // If there is no system modal window in |system_modal_container_id|, and
-  // this identifies a valid window, then events that fall behind
-  // |min_container_id| are ignored.
-  uint64 min_container_id;
-};
diff --git a/services/ui/public/interfaces/window_manager_window_tree_factory.mojom b/services/ui/public/interfaces/window_manager_window_tree_factory.mojom
deleted file mode 100644
index 0f05dde..0000000
--- a/services/ui/public/interfaces/window_manager_window_tree_factory.mojom
+++ /dev/null
@@ -1,22 +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.
-
-module ui.mojom;
-
-import "services/ui/public/interfaces/window_tree.mojom";
-
-// Interface used by the WindowManager to obtain a WindowTree. Server may be
-// configured in two distinct modes by way of the
-// |automatically_create_display_roots| parameter:
-// . If true, then mus creates windows for displays as displays are added and
-//   calls WmNewDisplayAdded() (see it for more details).
-// . If false, the client is responsible for creating and setting windows for
-//   displays (via SetDisplayRoot()). In this mode it is assumed the client is
-//   detecting displays via another mechanism.
-interface WindowManagerWindowTreeFactory {
-  // NOTE: it is expected this is called only once.
-  CreateWindowTree(WindowTree& tree_request,
-                   WindowTreeClient client,
-                   bool automatically_create_display_roots);
-};
diff --git a/services/ui/public/interfaces/window_tree.mojom b/services/ui/public/interfaces/window_tree.mojom
index 2606ac25..059db11 100644
--- a/services/ui/public/interfaces/window_tree.mojom
+++ b/services/ui/public/interfaces/window_tree.mojom
@@ -6,9 +6,7 @@
 
 import "mojo/public/mojom/base/unguessable_token.mojom";
 import "services/ui/public/interfaces/cursor/cursor.mojom";
-import "services/ui/public/interfaces/event_matcher.mojom";
 import "services/ui/public/interfaces/screen_provider.mojom";
-import "services/ui/public/interfaces/window_manager.mojom";
 import "services/ui/public/interfaces/window_manager_constants.mojom";
 import "services/ui/public/interfaces/window_tree_constants.mojom";
 import "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom";
@@ -301,8 +299,6 @@
   // Sets the cursor when the pointer is inside |window_id|.
   SetCursor(uint32 change_id, uint64 window_id, CursorData cursor);
 
-  // TODO(erg): Additional cursor methods. Visibility, and cursor locking.
-
   // Set text input state for the given window.
   SetWindowTextInputState(uint64 window_id, TextInputState state);
 
@@ -333,9 +329,6 @@
   // Tells the window manager to perform |string_action| for |window_id|.
   PerformWmAction(uint64 window_id, string action);
 
-  // See description of WindowManager for details.
-  GetWindowManagerClient(associated WindowManagerClient& internal);
-
   // Returns a shared memory segment that contains two 16-bit ints packed into a
   // single Atomic32, which represent the current location of the mouse cursor
   // where the location is (x << 16) | y.
@@ -440,10 +433,6 @@
                            gfx.mojom.Transform old_transform,
                            gfx.mojom.Transform new_transform);
 
-  OnClientAreaChanged(uint64 window_id,
-                      gfx.mojom.Insets new_client_area,
-                      array<gfx.mojom.Rect> new_additional_client_areas);
-
   OnTransientWindowAdded(uint64 window_id,
                          uint64 transient_window_id);
 
@@ -505,13 +494,9 @@
   // specified by StartPointerWatcher(). The client will not receive farther
   // events until the event is ack'ed, regardless of the value of
   // |matches_pointer_watcher|.
-  // TODO(sky): remove |event_location_in_screen_pixel_layout| temporary until
-  // http://crbug.com/747465 is fixed.
   OnWindowInputEvent(uint32 event_id,
                      uint64 window,
                      int64 display_id,
-                     uint64 display_root_window,
-                     gfx.mojom.PointF event_location_in_screen_pixel_layout,
                      ui.mojom.Event event,
                      bool matches_pointer_watcher);
 
@@ -595,9 +580,6 @@
   // client allows the change it should delete the window.
   RequestClose(uint64 window_id);
 
-  // See description of WindowManager for details.
-  GetWindowManager(associated WindowManager& internal);
-
   // Requests the ScreenProviderObserver from the client. See
   // ScreenProviderObserver for details.
   GetScreenProviderObserver(associated ScreenProviderObserver& observer);
diff --git a/services/ui/ws2/test_change_tracker.cc b/services/ui/ws2/test_change_tracker.cc
index d0d316be..bc0e86d 100644
--- a/services/ui/ws2/test_change_tracker.cc
+++ b/services/ui/ws2/test_change_tracker.cc
@@ -435,7 +435,6 @@
     Id window_id,
     const ui::Event& event,
     int64_t display_id,
-    const gfx::PointF& event_location_in_screen_pixel_layout,
     bool matches_pointer_watcher) {
   Change change;
   change.type = CHANGE_TYPE_INPUT_EVENT;
@@ -445,7 +444,6 @@
   change.display_id = display_id;
   if (event.IsLocatedEvent())
     change.location1 = event.AsLocatedEvent()->root_location();
-  change.location2 = event_location_in_screen_pixel_layout;
   if (event.IsKeyEvent() && event.AsKeyEvent()->properties())
     change.key_event_properties = *event.AsKeyEvent()->properties();
   AddChange(change);
diff --git a/services/ui/ws2/test_change_tracker.h b/services/ui/ws2/test_change_tracker.h
index 4410d81..b4812b7b 100644
--- a/services/ui/ws2/test_change_tracker.h
+++ b/services/ui/ws2/test_change_tracker.h
@@ -110,7 +110,6 @@
   base::flat_map<std::string, std::vector<uint8_t>> key_event_properties;
   int64_t display_id;
   gfx::Point location1;
-  gfx::PointF location2;
   base::flat_map<std::string, std::vector<uint8_t>> drag_data;
   uint32_t drag_drop_action;
 };
@@ -206,7 +205,6 @@
       Id window_id,
       const ui::Event& event,
       int64_t display_id,
-      const gfx::PointF& event_location_in_screen_pixel_layout,
       bool matches_pointer_watcher);
   void OnPointerEventObserved(const ui::Event& event, Id window_id);
   void OnWindowSharedPropertyChanged(
diff --git a/services/ui/ws2/test_window_tree_client.cc b/services/ui/ws2/test_window_tree_client.cc
index 6993798..b2189041 100644
--- a/services/ui/ws2/test_window_tree_client.cc
+++ b/services/ui/ws2/test_window_tree_client.cc
@@ -137,11 +137,6 @@
   tracker_.OnWindowTransformChanged(window_id);
 }
 
-void TestWindowTreeClient::OnClientAreaChanged(
-    Id window_id,
-    const gfx::Insets& new_client_area,
-    const std::vector<gfx::Rect>& new_additional_client_areas) {}
-
 void TestWindowTreeClient::OnTransientWindowAdded(Id window_id,
                                                   Id transient_window_id) {
   tracker_.OnTransientWindowAdded(window_id, transient_window_id);
@@ -190,12 +185,9 @@
     uint32_t event_id,
     Id window_id,
     int64_t display_id,
-    Id display_root_window_id,
-    const gfx::PointF& event_location_in_screen_pixel_layout,
     std::unique_ptr<ui::Event> event,
     bool matches_pointer_watcher) {
   tracker_.OnWindowInputEvent(window_id, *event, display_id,
-                              event_location_in_screen_pixel_layout,
                               matches_pointer_watcher);
 
   InputEvent input_event;
@@ -294,9 +286,6 @@
   tracker_.RequestClose(window_id);
 }
 
-void TestWindowTreeClient::GetWindowManager(
-    mojo::AssociatedInterfaceRequest<mojom::WindowManager> internal) {}
-
 void TestWindowTreeClient::GetScreenProviderObserver(
     mojom::ScreenProviderObserverAssociatedRequest observer) {
   screen_provider_observer_binding_.Bind(std::move(observer));
diff --git a/services/ui/ws2/test_window_tree_client.h b/services/ui/ws2/test_window_tree_client.h
index c57b094..0b6342ef 100644
--- a/services/ui/ws2/test_window_tree_client.h
+++ b/services/ui/ws2/test_window_tree_client.h
@@ -127,10 +127,6 @@
   void OnWindowTransformChanged(Id window_id,
                                 const gfx::Transform& old_transform,
                                 const gfx::Transform& new_transform) override;
-  void OnClientAreaChanged(
-      Id window_id,
-      const gfx::Insets& new_client_area,
-      const std::vector<gfx::Rect>& new_additional_client_areas) override;
   void OnTransientWindowAdded(Id window_id, Id transient_window_id) override;
   void OnTransientWindowRemoved(Id window_id, Id transient_window_id) override;
   void OnWindowHierarchyChanged(
@@ -151,8 +147,6 @@
       uint32_t event_id,
       Id window_id,
       int64_t display_id,
-      Id display_root_window_id,
-      const gfx::PointF& event_location_in_screen_pixel_layout,
       std::unique_ptr<ui::Event> event,
       bool matches_pointer_watcher) override;
   void OnPointerEventObserved(std::unique_ptr<ui::Event> event,
@@ -190,8 +184,6 @@
   void OnDragDropDone() override;
   void OnChangeCompleted(uint32_t change_id, bool success) override;
   void RequestClose(Id window_id) override;
-  void GetWindowManager(
-      mojo::AssociatedInterfaceRequest<mojom::WindowManager> internal) override;
   void GetScreenProviderObserver(
       mojom::ScreenProviderObserverAssociatedRequest observer) override;
 
diff --git a/services/ui/ws2/window_service.cc b/services/ui/ws2/window_service.cc
index 1872604..ba8f9da 100644
--- a/services/ui/ws2/window_service.cc
+++ b/services/ui/ws2/window_service.cc
@@ -11,6 +11,7 @@
 #include "services/service_manager/public/cpp/bind_source_info.h"
 #include "services/ui/common/switches.h"
 #include "services/ui/public/interfaces/event_injector.mojom.h"
+#include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "services/ui/ws2/gpu_interface_provider.h"
 #include "services/ui/ws2/remoting_event_injector.h"
 #include "services/ui/ws2/screen_provider.h"
diff --git a/services/ui/ws2/window_tree.cc b/services/ui/ws2/window_tree.cc
index fc5109a9..15728cd 100644
--- a/services/ui/ws2/window_tree.cc
+++ b/services/ui/ws2/window_tree.cc
@@ -158,7 +158,7 @@
   if (pointer_watcher_)
     pointer_watcher_->ClearPendingEvent();
   window_tree_client_->OnWindowInputEvent(
-      event_id, TransportIdForWindow(window), display_id, 0u, gfx::PointF(),
+      event_id, TransportIdForWindow(window), display_id,
       PointerWatcher::CreateEventForClient(event), matches_pointer_watcher);
 }
 
@@ -1665,11 +1665,6 @@
   NOTIMPLEMENTED_LOG_ONCE();
 }
 
-void WindowTree::GetWindowManagerClient(
-    ::ui::mojom::WindowManagerClientAssociatedRequest internal) {
-  NOTIMPLEMENTED_LOG_ONCE();
-}
-
 void WindowTree::GetCursorLocationMemory(
     GetCursorLocationMemoryCallback callback) {
   auto shared_buffer_handle =
diff --git a/services/ui/ws2/window_tree.h b/services/ui/ws2/window_tree.h
index 2d8cf28..da9516d 100644
--- a/services/ui/ws2/window_tree.h
+++ b/services/ui/ws2/window_tree.h
@@ -403,8 +403,6 @@
   void StackAbove(uint32_t change_id, Id above_id, Id below_id) override;
   void StackAtTop(uint32_t change_id, Id window_id) override;
   void PerformWmAction(Id window_id, const std::string& action) override;
-  void GetWindowManagerClient(
-      ::ui::mojom::WindowManagerClientAssociatedRequest internal) override;
   void GetCursorLocationMemory(
       GetCursorLocationMemoryCallback callback) override;
   void PerformWindowMove(uint32_t change_id,
diff --git a/services/ui/ws2/window_tree_client_unittest.cc b/services/ui/ws2/window_tree_client_unittest.cc
index dfee249..0d7ca25 100644
--- a/services/ui/ws2/window_tree_client_unittest.cc
+++ b/services/ui/ws2/window_tree_client_unittest.cc
@@ -148,10 +148,9 @@
 
 // -----------------------------------------------------------------------------
 
-// Extends TestWindowTreeClient to also implement WindowManager as well as
-// adding functions to block until WindowTree acks the change.
-class TestWindowTreeClient2 : public TestWindowTreeClient,
-                              public mojom::WindowManager {
+// Extends TestWindowTreeClient, adding functions to block until WindowTree
+// acks the change.
+class TestWindowTreeClient2 : public TestWindowTreeClient {
  public:
   TestWindowTreeClient2()
       : binding_(this),
@@ -339,10 +338,6 @@
                                 const gfx::Transform& new_transform) override {
     tracker()->OnWindowTransformChanged(window_id);
   }
-  void OnClientAreaChanged(
-      Id window_id,
-      const gfx::Insets& new_client_area,
-      const std::vector<gfx::Rect>& new_additional_client_areas) override {}
   void OnTransientWindowAdded(Id window_id, Id transient_window_id) override {
     tracker()->OnTransientWindowAdded(window_id, transient_window_id);
   }
@@ -379,8 +374,6 @@
       uint32_t event_id,
       Id window_id,
       int64_t display_id,
-      Id display_root_window_id,
-      const gfx::PointF& event_location_in_screen_pixel_layout,
       std::unique_ptr<ui::Event> event,
       bool matches_pointer_watcher) override {
     // Ack input events to clear the state on the server. These can be received
@@ -443,70 +436,6 @@
     }
   }
   void RequestClose(Id window_id) override {}
-  void GetWindowManager(mojo::AssociatedInterfaceRequest<mojom::WindowManager>
-                            internal) override {
-    window_manager_binding_ =
-        std::make_unique<mojo::AssociatedBinding<mojom::WindowManager>>(
-            this, std::move(internal));
-    tree_->GetWindowManagerClient(MakeRequest(&window_manager_client_));
-  }
-
-  // mojom::WindowManager:
-  void OnConnect() override {}
-  void WmOnAcceleratedWidgetForDisplay(
-      int64_t display,
-      gpu::SurfaceHandle surface_handle) override {}
-  void WmNewDisplayAdded(
-      const display::Display& display,
-      mojom::WindowDataPtr root_data,
-      bool drawn,
-      const base::Optional<viz::LocalSurfaceId>& local_surface_id) override {}
-  void WmDisplayRemoved(int64_t display_id) override {}
-  void WmDisplayModified(const display::Display& display) override {}
-  void WmSetBounds(uint32_t change_id,
-                   Id window_id,
-                   const gfx::Rect& bounds) override {
-    window_manager_client_->WmResponse(change_id, false);
-  }
-  void WmSetProperty(
-      uint32_t change_id,
-      Id window_id,
-      const std::string& name,
-      const base::Optional<std::vector<uint8_t>>& value) override {
-    window_manager_client_->WmResponse(change_id, false);
-  }
-  void WmSetModalType(Id window_id, ui::ModalType type) override {}
-  void WmSetCanFocus(Id window_id, bool can_focus) override {}
-  void WmCreateTopLevelWindow(
-      uint32_t change_id,
-      const viz::FrameSinkId& frame_sink_id,
-      const base::flat_map<std::string, std::vector<uint8_t>>& properties)
-      override {}
-  void WmClientJankinessChanged(ClientSpecificId client_id,
-                                bool janky) override {}
-  void WmBuildDragImage(const gfx::Point& screen_location,
-                        const gfx::ImageSkia& drag_image,
-                        const gfx::Vector2d& drag_image_offset,
-                        ui::mojom::PointerKind source) override {}
-  void WmMoveDragImage(const gfx::Point& screen_location,
-                       WmMoveDragImageCallback callback) override {
-    std::move(callback).Run();
-  }
-  void WmDestroyDragImage() override {}
-  void WmPerformMoveLoop(uint32_t change_id,
-                         Id window_id,
-                         mojom::MoveLoopSource source,
-                         const gfx::Point& cursor_location) override {}
-  void WmCancelMoveLoop(uint32_t change_id) override {}
-  void WmDeactivateWindow(Id window_id) override {}
-  void WmStackAbove(uint32_t change_id, Id above_id, Id below_id) override {}
-  void WmStackAtTop(uint32_t change_id, Id window_id) override {}
-  void WmPerformWmAction(Id window_id, const std::string& action) override {}
-  void OnAccelerator(uint32_t ack_id,
-                     uint32_t accelerator_id,
-                     std::unique_ptr<ui::Event> event) override {}
-  void OnCursorTouchVisibleChanged(bool enabled) override {}
-  void OnEventBlockedByModalWindow(Id window_id) override {}
 
   // If non-null we're waiting for OnEmbed() using this RunLoop.
   std::unique_ptr<base::RunLoop> embed_run_loop_;
@@ -521,10 +450,6 @@
   bool on_change_completed_result_;
   std::unique_ptr<base::RunLoop> change_completed_run_loop_;
 
-  std::unique_ptr<mojo::AssociatedBinding<mojom::WindowManager>>
-      window_manager_binding_;
-  mojom::WindowManagerClientAssociatedPtr window_manager_client_;
-
   DISALLOW_COPY_AND_ASSIGN(TestWindowTreeClient2);
 };
 
diff --git a/sql/sql_memory_dump_provider.cc b/sql/sql_memory_dump_provider.cc
index 133a830c..f59f811 100644
--- a/sql/sql_memory_dump_provider.cc
+++ b/sql/sql_memory_dump_provider.cc
@@ -24,10 +24,10 @@
 bool SqlMemoryDumpProvider::OnMemoryDump(
     const base::trace_event::MemoryDumpArgs& args,
     base::trace_event::ProcessMemoryDump* pmd) {
-  int memory_used = 0;
-  int memory_high_water = 0;
-  int status = sqlite3_status(SQLITE_STATUS_MEMORY_USED, &memory_used,
-                              &memory_high_water, 1 /*resetFlag */);
+  sqlite3_int64 memory_used = 0;
+  sqlite3_int64 memory_high_water = 0;
+  int status = sqlite3_status64(SQLITE_STATUS_MEMORY_USED, &memory_used,
+                                &memory_high_water, /* resetFlag= */ 1);
   if (status != SQLITE_OK)
     return false;
 
@@ -40,10 +40,10 @@
                   base::trace_event::MemoryAllocatorDump::kUnitsBytes,
                   memory_high_water);
 
-  int dummy_high_water = -1;
-  int malloc_count = -1;
-  status = sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &malloc_count,
-                          &dummy_high_water, 0 /* resetFlag */);
+  sqlite3_int64 dummy_high_water = -1;
+  sqlite3_int64 malloc_count = -1;
+  status = sqlite3_status64(SQLITE_STATUS_MALLOC_COUNT, &malloc_count,
+                            &dummy_high_water, /* resetFlag= */ 0);
   if (status == SQLITE_OK) {
     dump->AddScalar("malloc_count",
                     base::trace_event::MemoryAllocatorDump::kUnitsObjects,
diff --git a/sql/sqlite_features_unittest.cc b/sql/sqlite_features_unittest.cc
index 778ca1a..962b16b 100644
--- a/sql/sqlite_features_unittest.cc
+++ b/sql/sqlite_features_unittest.cc
@@ -317,9 +317,7 @@
 
 // If a database file is marked to be excluded from Time Machine, verify that
 // journal files are also excluded.
-// TODO(shess): Disabled because CSBackupSetItemExcluded() does not work on the
-// bots, though it's fine on dev machines.  See <http://crbug.com/410350>.
-TEST_F(SQLiteFeaturesTest, DISABLED_TimeMachine) {
+TEST_F(SQLiteFeaturesTest, TimeMachine) {
   ASSERT_TRUE(db().Execute("CREATE TABLE t (id INTEGER PRIMARY KEY)"));
   db().Close();
 
diff --git a/sql/statement.cc b/sql/statement.cc
index ddaa4b7..8178dbf 100644
--- a/sql/statement.cc
+++ b/sql/statement.cc
@@ -122,18 +122,13 @@
 }
 
 bool Statement::Succeeded() const {
-  if (!is_valid())
-    return false;
-
-  return succeeded_;
+  return is_valid() && succeeded_;
 }
 
 bool Statement::BindNull(int col) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(sqlite3_bind_null(ref_->stmt(), col + 1));
+  return is_valid() && CheckOk(sqlite3_bind_null(ref_->stmt(), col + 1));
 }
 
 bool Statement::BindBool(int col, bool val) {
@@ -142,47 +137,35 @@
 
 bool Statement::BindInt(int col, int val) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(sqlite3_bind_int(ref_->stmt(), col + 1, val));
+  return is_valid() && CheckOk(sqlite3_bind_int(ref_->stmt(), col + 1, val));
 }
 
 bool Statement::BindInt64(int col, int64_t val) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(sqlite3_bind_int64(ref_->stmt(), col + 1, val));
+  return is_valid() && CheckOk(sqlite3_bind_int64(ref_->stmt(), col + 1, val));
 }
 
 bool Statement::BindDouble(int col, double val) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(sqlite3_bind_double(ref_->stmt(), col + 1, val));
+  return is_valid() && CheckOk(sqlite3_bind_double(ref_->stmt(), col + 1, val));
 }
 
 bool Statement::BindCString(int col, const char* val) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(
-      sqlite3_bind_text(ref_->stmt(), col + 1, val, -1, SQLITE_TRANSIENT));
+  return is_valid() && CheckOk(sqlite3_bind_text(ref_->stmt(), col + 1, val, -1,
+                                                 SQLITE_TRANSIENT));
 }
 
 bool Statement::BindString(int col, const std::string& val) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(sqlite3_bind_text(ref_->stmt(),
-                                   col + 1,
-                                   val.data(),
-                                   val.size(),
-                                   SQLITE_TRANSIENT));
+  return is_valid() &&
+         CheckOk(sqlite3_bind_text(ref_->stmt(), col + 1, val.data(),
+                                   val.size(), SQLITE_TRANSIENT));
 }
 
 bool Statement::BindString16(int col, const base::string16& value) {
@@ -191,69 +174,47 @@
 
 bool Statement::BindBlob(int col, const void* val, int val_len) {
   DCHECK(!stepped_);
-  if (!is_valid())
-    return false;
 
-  return CheckOk(
-      sqlite3_bind_blob(ref_->stmt(), col + 1, val, val_len, SQLITE_TRANSIENT));
+  return is_valid() && CheckOk(sqlite3_bind_blob(ref_->stmt(), col + 1, val,
+                                                 val_len, SQLITE_TRANSIENT));
 }
 
 int Statement::ColumnCount() const {
   if (!is_valid())
     return 0;
-
   return sqlite3_column_count(ref_->stmt());
 }
 
-ColType Statement::ColumnType(int col) const {
-  // Verify that our enum matches sqlite's values.
-  static_assert(COLUMN_TYPE_INTEGER == SQLITE_INTEGER, "integer no match");
-  static_assert(COLUMN_TYPE_FLOAT == SQLITE_FLOAT, "float no match");
-  static_assert(COLUMN_TYPE_TEXT == SQLITE_TEXT, "integer no match");
-  static_assert(COLUMN_TYPE_BLOB == SQLITE_BLOB, "blob no match");
-  static_assert(COLUMN_TYPE_NULL == SQLITE_NULL, "null no match");
+// Verify that our enum matches sqlite's values.
+static_assert(COLUMN_TYPE_INTEGER == SQLITE_INTEGER, "integer no match");
+static_assert(COLUMN_TYPE_FLOAT == SQLITE_FLOAT, "float no match");
+static_assert(COLUMN_TYPE_TEXT == SQLITE_TEXT, "integer no match");
+static_assert(COLUMN_TYPE_BLOB == SQLITE_BLOB, "blob no match");
+static_assert(COLUMN_TYPE_NULL == SQLITE_NULL, "null no match");
 
+ColType Statement::ColumnType(int col) const {
   return static_cast<ColType>(sqlite3_column_type(ref_->stmt(), col));
 }
 
-ColType Statement::DeclaredColumnType(int col) const {
-  std::string column_type = base::ToLowerASCII(
-      sqlite3_column_decltype(ref_->stmt(), col));
-
-  if (column_type == "integer")
-    return COLUMN_TYPE_INTEGER;
-  else if (column_type == "float")
-    return COLUMN_TYPE_FLOAT;
-  else if (column_type == "text")
-    return COLUMN_TYPE_TEXT;
-  else if (column_type == "blob")
-    return COLUMN_TYPE_BLOB;
-
-  return COLUMN_TYPE_NULL;
-}
-
 bool Statement::ColumnBool(int col) const {
-  return !!ColumnInt(col);
+  return static_cast<bool>(ColumnInt(col));
 }
 
 int Statement::ColumnInt(int col) const {
   if (!CheckValid())
     return 0;
-
   return sqlite3_column_int(ref_->stmt(), col);
 }
 
 int64_t Statement::ColumnInt64(int col) const {
   if (!CheckValid())
     return 0;
-
   return sqlite3_column_int64(ref_->stmt(), col);
 }
 
 double Statement::ColumnDouble(int col) const {
   if (!CheckValid())
     return 0;
-
   return sqlite3_column_double(ref_->stmt(), col);
 }
 
@@ -282,7 +243,6 @@
 int Statement::ColumnByteLength(int col) const {
   if (!CheckValid())
     return 0;
-
   return sqlite3_column_bytes(ref_->stmt(), col);
 }
 
@@ -349,8 +309,7 @@
   // Binding to a non-existent variable is evidence of a serious error.
   // TODO(gbillock,shess): make this invalidate the statement so it
   // can't wreak havoc.
-  if (err == SQLITE_RANGE)
-    DLOG(DCHECK) << "Bind value out of range";
+  DCHECK_NE(err, SQLITE_RANGE) << "Bind value out of range";
   return err == SQLITE_OK;
 }
 
diff --git a/sql/statement.h b/sql/statement.h
index c461ad84..bbd2ec7 100644
--- a/sql/statement.h
+++ b/sql/statement.h
@@ -11,6 +11,7 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
+#include "base/sequence_checker.h"
 #include "base/strings/string16.h"
 #include "sql/connection.h"
 #include "sql/sql_export.h"
@@ -124,7 +125,6 @@
   // where that type is not the native type. For safety, call ColumnType only
   // on a column before getting the value out in any way.
   ColType ColumnType(int col) const;
-  ColType DeclaredColumnType(int col) const;
 
   // These all take a 0-based argument index.
   bool ColumnBool(int col) const;
@@ -187,7 +187,7 @@
   bool RunWithoutTimers();
 
   // The actual sqlite statement. This may be unique to us, or it may be cached
-  // by the connection, which is why it's refcounted. This pointer is
+  // by the connection, which is why it's ref-counted. This pointer is
   // guaranteed non-null.
   scoped_refptr<Connection::StatementRef> ref_;
 
diff --git a/storage/browser/BUILD.gn b/storage/browser/BUILD.gn
index 4b2d919..bdc7a36f 100644
--- a/storage/browser/BUILD.gn
+++ b/storage/browser/BUILD.gn
@@ -311,6 +311,7 @@
     "//sql:test_support",
     "//testing/gtest",
     "//third_party/leveldatabase",
+    "//third_party/sqlite",
   ]
 }
 
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json
index 958f2eb..4ab245d 100644
--- a/testing/buildbot/chromium.android.fyi.json
+++ b/testing/buildbot/chromium.android.fyi.json
@@ -601,6 +601,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "name": "heap_profiling.mobile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6336,6 +6337,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json
index 71e15c0..972d50b 100644
--- a/testing/buildbot/chromium.android.json
+++ b/testing/buildbot/chromium.android.json
@@ -19148,6 +19148,7 @@
       {
         "isolate_name": "monochrome_apk_checker",
         "name": "monochrome_apk_checker",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -21818,6 +21819,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -21832,6 +21834,7 @@
       {
         "isolate_name": "monochrome_apk_checker",
         "name": "monochrome_apk_checker",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -21850,6 +21853,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json
index 35b5256e..ebf63ac 100644
--- a/testing/buildbot/chromium.clang.json
+++ b/testing/buildbot/chromium.clang.json
@@ -10133,6 +10133,7 @@
       {
         "isolate_name": "monochrome_apk_checker",
         "name": "monochrome_apk_checker",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16749,6 +16750,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16756,6 +16758,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16763,6 +16766,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16770,6 +16774,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16777,6 +16782,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16784,6 +16790,7 @@
       {
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -16796,6 +16803,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -16804,6 +16812,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -16834,6 +16843,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json
index 95d1709..f847cac 100644
--- a/testing/buildbot/chromium.fyi.json
+++ b/testing/buildbot/chromium.fyi.json
@@ -813,6 +813,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -820,6 +821,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -827,6 +829,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -834,6 +837,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -841,6 +845,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -848,6 +853,7 @@
       {
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -860,6 +866,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -868,6 +875,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -891,6 +899,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1046,6 +1055,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -1062,6 +1072,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests_viz",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -1071,6 +1082,7 @@
       {
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -1084,6 +1096,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests_viz",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -2971,6 +2984,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2996,6 +3010,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4717,6 +4732,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4724,6 +4740,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4731,6 +4748,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4738,6 +4756,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4745,6 +4764,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4766,6 +4786,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "name": "site_per_process_webkit_layout_tests",
+        "only_retry_failed_tests": true,
         "results_handler": "layout tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -4780,6 +4801,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4787,6 +4809,7 @@
       {
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -4799,6 +4822,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -4807,6 +4831,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4830,6 +4855,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
diff --git a/testing/buildbot/chromium.gpu.fyi.json b/testing/buildbot/chromium.gpu.fyi.json
index fe9ec4f..adb2085 100644
--- a/testing/buildbot/chromium.gpu.fyi.json
+++ b/testing/buildbot/chromium.gpu.fyi.json
@@ -82,6 +82,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -177,6 +178,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -360,6 +362,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -455,6 +458,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -743,6 +747,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -766,6 +771,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -789,6 +795,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -812,6 +819,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -835,6 +843,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -862,6 +871,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -892,6 +902,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -927,6 +938,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -954,6 +966,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -977,6 +990,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1001,6 +1015,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1167,6 +1182,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1190,6 +1206,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1213,6 +1230,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1236,6 +1254,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1259,6 +1278,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1286,6 +1306,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1316,6 +1337,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1351,6 +1373,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1378,6 +1401,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1401,6 +1425,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1425,6 +1450,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1519,6 +1545,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1541,6 +1568,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1563,6 +1591,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1585,6 +1614,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1607,6 +1637,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1633,6 +1664,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1662,6 +1694,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1696,6 +1729,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1722,6 +1756,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1744,6 +1779,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1767,6 +1803,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1936,6 +1973,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1959,6 +1997,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1982,6 +2021,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2005,6 +2045,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2032,6 +2073,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2062,6 +2104,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2097,6 +2140,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -2124,6 +2168,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2147,6 +2192,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2171,6 +2217,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2372,6 +2419,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2395,6 +2443,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2418,6 +2467,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2441,6 +2491,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2464,6 +2515,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2491,6 +2543,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2521,6 +2574,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2556,6 +2610,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -2583,6 +2638,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2606,6 +2662,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2630,6 +2687,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2796,6 +2854,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2819,6 +2878,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2842,6 +2902,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2865,6 +2926,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2888,6 +2950,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2915,6 +2978,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2945,6 +3009,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2980,6 +3045,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -3007,6 +3073,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3030,6 +3097,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3054,6 +3122,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3330,6 +3399,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3352,6 +3422,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3374,6 +3445,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3396,6 +3468,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3422,6 +3495,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3451,6 +3525,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3485,6 +3560,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -3511,6 +3587,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3533,6 +3610,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3556,6 +3634,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3578,6 +3657,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3601,6 +3681,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3740,6 +3821,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3914,6 +3996,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3937,6 +4020,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3960,6 +4044,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3983,6 +4068,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4010,6 +4096,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4040,6 +4127,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4075,6 +4163,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -4102,6 +4191,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4125,6 +4215,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4149,6 +4240,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4174,6 +4266,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4198,6 +4291,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4222,6 +4316,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4387,6 +4482,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4409,6 +4505,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4431,6 +4528,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4453,6 +4551,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4479,6 +4578,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4508,6 +4608,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4542,6 +4643,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -4568,6 +4670,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4590,6 +4693,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4613,6 +4717,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4637,6 +4742,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4660,6 +4766,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4683,6 +4790,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4843,6 +4951,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4865,6 +4974,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4887,6 +4997,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4909,6 +5020,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4931,6 +5043,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4957,6 +5070,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4986,6 +5100,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5020,6 +5135,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -5046,6 +5162,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5068,6 +5185,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5091,6 +5209,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5115,6 +5234,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5140,6 +5260,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5163,6 +5284,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5186,6 +5308,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5436,6 +5559,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5457,6 +5581,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5478,6 +5603,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5499,6 +5625,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5524,6 +5651,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5552,6 +5680,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5585,6 +5714,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -5610,6 +5740,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5631,6 +5762,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5652,6 +5784,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5813,6 +5946,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5835,6 +5969,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5857,6 +5992,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5879,6 +6015,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5905,6 +6042,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5934,6 +6072,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -5968,6 +6107,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -5994,6 +6134,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6016,6 +6157,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6040,6 +6182,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6063,6 +6206,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6233,6 +6377,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6256,6 +6401,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6279,6 +6425,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6302,6 +6449,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6329,6 +6477,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6359,6 +6508,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6394,6 +6544,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -6421,6 +6572,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6444,6 +6596,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6469,6 +6622,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6493,6 +6647,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6672,6 +6827,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6696,6 +6852,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6720,6 +6877,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6744,6 +6902,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6772,6 +6931,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6803,6 +6963,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6839,6 +7000,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -6867,6 +7029,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6891,6 +7054,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6917,6 +7081,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -6942,6 +7107,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7165,6 +7331,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7192,6 +7359,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7219,6 +7387,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7246,6 +7415,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7280,6 +7450,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7319,6 +7490,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -7350,6 +7522,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7377,6 +7550,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7407,6 +7581,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7436,6 +7611,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7607,6 +7783,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7628,6 +7805,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7649,6 +7827,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7670,6 +7849,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7695,6 +7875,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7723,6 +7904,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7756,6 +7938,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -7781,6 +7964,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7802,6 +7986,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7825,6 +8010,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -7847,6 +8033,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8009,6 +8196,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8032,6 +8220,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8055,6 +8244,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8078,6 +8268,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8105,6 +8296,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8135,6 +8327,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8170,6 +8363,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -8197,6 +8391,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8220,6 +8415,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8243,6 +8439,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8407,6 +8604,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8430,6 +8628,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8453,6 +8652,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8476,6 +8676,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8503,6 +8704,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8533,6 +8735,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8568,6 +8771,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -8595,6 +8799,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8618,6 +8823,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8641,6 +8847,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8826,6 +9033,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8849,6 +9057,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8872,6 +9081,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8895,6 +9105,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8922,6 +9133,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8952,6 +9164,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -8987,6 +9200,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -9014,6 +9228,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9037,6 +9252,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9062,6 +9278,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9086,6 +9303,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9271,6 +9489,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9294,6 +9513,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9317,6 +9537,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9340,6 +9561,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9367,6 +9589,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9397,6 +9620,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9432,6 +9656,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -9459,6 +9684,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9482,6 +9708,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9507,6 +9734,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9531,6 +9759,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9806,6 +10035,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9829,6 +10059,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9852,6 +10083,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9875,6 +10107,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9902,6 +10135,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9932,6 +10166,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -9967,6 +10202,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -9994,6 +10230,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10017,6 +10254,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10042,6 +10280,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10066,6 +10305,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10163,6 +10403,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10187,6 +10428,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10210,6 +10452,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10297,6 +10540,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10323,6 +10567,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10347,6 +10592,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10370,6 +10616,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10474,6 +10721,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10497,6 +10745,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10610,6 +10859,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10635,6 +10885,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10750,6 +11001,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10970,6 +11222,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -10994,6 +11247,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11017,6 +11271,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11040,6 +11295,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11063,6 +11319,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11086,6 +11343,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11425,6 +11683,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11460,6 +11719,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11488,6 +11748,7 @@
         ],
         "isolate_name": "command_buffer_perftests",
         "name": "passthrough_command_buffer_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11516,6 +11777,7 @@
         ],
         "isolate_name": "command_buffer_perftests",
         "name": "validating_command_buffer_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11549,6 +11811,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11581,6 +11844,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11613,6 +11877,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11645,6 +11910,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11677,6 +11943,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -11990,6 +12257,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12012,6 +12280,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12034,6 +12303,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12056,6 +12326,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12082,6 +12353,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12111,6 +12383,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12145,6 +12418,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -12171,6 +12445,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12193,6 +12468,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12216,6 +12492,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12238,6 +12515,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12261,6 +12539,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12284,6 +12563,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12307,6 +12587,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12330,6 +12611,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12613,6 +12895,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12635,6 +12918,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12657,6 +12941,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12679,6 +12964,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12705,6 +12991,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12734,6 +13021,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12768,6 +13056,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -12794,6 +13083,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12816,6 +13106,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12839,6 +13130,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12863,6 +13155,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12886,6 +13179,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12909,6 +13203,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12932,6 +13227,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -12959,6 +13255,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "noop_sleep_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13263,6 +13560,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13285,6 +13583,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13307,6 +13606,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13329,6 +13629,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13355,6 +13656,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13384,6 +13686,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13418,6 +13721,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -13444,6 +13748,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13466,6 +13771,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13489,6 +13795,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13513,6 +13820,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13536,6 +13844,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13559,6 +13868,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13582,6 +13892,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13605,6 +13916,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -13628,6 +13940,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14101,6 +14414,7 @@
         ],
         "isolate_name": "angle_perftests",
         "name": "angle_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14132,6 +14446,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14163,6 +14478,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14194,6 +14510,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14225,6 +14542,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14260,6 +14578,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14298,6 +14617,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14326,6 +14646,7 @@
         ],
         "isolate_name": "command_buffer_perftests",
         "name": "passthrough_command_buffer_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14369,6 +14690,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -14404,6 +14726,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14435,6 +14758,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14463,6 +14787,7 @@
         ],
         "isolate_name": "command_buffer_perftests",
         "name": "validating_command_buffer_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14495,6 +14820,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14528,6 +14854,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14562,6 +14889,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14596,6 +14924,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14628,6 +14957,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14660,6 +14990,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14692,6 +15023,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14724,6 +15056,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -14756,6 +15089,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15006,6 +15340,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15029,6 +15364,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15311,6 +15647,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15333,6 +15670,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15355,6 +15693,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15377,6 +15716,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15403,6 +15743,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15432,6 +15773,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15466,6 +15808,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -15492,6 +15835,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15514,6 +15858,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15537,6 +15882,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15559,6 +15905,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15582,6 +15929,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15605,6 +15953,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15628,6 +15977,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15930,6 +16280,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15952,6 +16303,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15974,6 +16326,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -15996,6 +16349,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16022,6 +16376,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16051,6 +16406,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16085,6 +16441,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -16111,6 +16468,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16133,6 +16491,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16156,6 +16515,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16180,6 +16540,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16203,6 +16564,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16226,6 +16588,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16249,6 +16612,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16272,6 +16636,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16718,6 +17083,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16749,6 +17115,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16780,6 +17147,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16811,6 +17179,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16846,6 +17215,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16884,6 +17254,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16927,6 +17298,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -16962,6 +17334,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -16993,6 +17366,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17025,6 +17399,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17058,6 +17433,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17090,6 +17466,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17122,6 +17499,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17154,6 +17532,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17186,6 +17565,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17218,6 +17598,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17571,6 +17952,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17593,6 +17975,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17615,6 +17998,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17637,6 +18021,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17663,6 +18048,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17692,6 +18078,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17726,6 +18113,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -17752,6 +18140,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17774,6 +18163,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17797,6 +18187,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17821,6 +18212,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17844,6 +18236,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d11_validating_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17867,6 +18260,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17890,6 +18284,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_d3d9_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17913,6 +18308,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_gl_passthrough_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -17936,6 +18332,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.gpu.json b/testing/buildbot/chromium.gpu.json
index 7e441b26..c7fbadcd 100644
--- a/testing/buildbot/chromium.gpu.json
+++ b/testing/buildbot/chromium.gpu.json
@@ -14,6 +14,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -36,6 +37,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -58,6 +60,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -80,6 +83,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -106,6 +110,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -135,6 +140,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -169,6 +175,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -195,6 +202,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -217,6 +225,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -240,6 +249,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -327,6 +337,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -349,6 +360,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -371,6 +383,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -393,6 +406,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -419,6 +433,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -448,6 +463,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -482,6 +498,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -508,6 +525,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -530,6 +548,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -553,6 +572,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -575,6 +595,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -677,6 +698,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -699,6 +721,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -721,6 +744,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -743,6 +767,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -769,6 +794,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -798,6 +824,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -832,6 +859,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -858,6 +886,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -880,6 +909,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -903,6 +933,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -925,6 +956,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1001,6 +1033,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1022,6 +1055,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1043,6 +1077,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1064,6 +1099,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1089,6 +1125,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1117,6 +1154,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1150,6 +1188,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1175,6 +1214,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1196,6 +1236,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1217,6 +1258,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1311,6 +1353,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1332,6 +1375,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1353,6 +1397,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1374,6 +1419,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1399,6 +1445,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1427,6 +1474,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1460,6 +1508,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1485,6 +1534,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1506,6 +1556,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1527,6 +1578,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1608,6 +1660,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1631,6 +1684,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1654,6 +1708,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1677,6 +1732,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1704,6 +1760,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1734,6 +1791,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1769,6 +1827,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1796,6 +1855,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1819,6 +1879,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1842,6 +1903,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1946,6 +2008,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1969,6 +2032,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1992,6 +2056,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2015,6 +2080,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2042,6 +2108,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2072,6 +2139,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2107,6 +2175,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -2134,6 +2203,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2157,6 +2227,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2180,6 +2251,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2319,6 +2391,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2341,6 +2414,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2363,6 +2437,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2385,6 +2460,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2411,6 +2487,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2440,6 +2517,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2474,6 +2552,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -2500,6 +2579,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2522,6 +2602,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2545,6 +2626,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2567,6 +2649,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2788,6 +2871,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2819,6 +2903,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2850,6 +2935,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2881,6 +2967,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2916,6 +3003,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "info_collection_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2954,6 +3042,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2997,6 +3086,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -3032,6 +3122,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3063,6 +3154,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3095,6 +3187,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "viz_screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -3126,6 +3219,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json
index d4517ac..f8b5f1ee 100644
--- a/testing/buildbot/chromium.linux.json
+++ b/testing/buildbot/chromium.linux.json
@@ -792,6 +792,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "name": "memory.leak_detection",
+        "only_retry_failed_tests": true,
         "override_compile_targets": [
           "performance_test_suite"
         ],
@@ -1529,6 +1530,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1536,6 +1538,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1543,6 +1546,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1550,6 +1554,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1557,6 +1562,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1578,6 +1584,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "name": "site_per_process_webkit_layout_tests",
+        "only_retry_failed_tests": true,
         "results_handler": "layout tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -1592,6 +1599,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1603,6 +1611,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -1615,6 +1624,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -1623,6 +1633,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1651,6 +1662,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2371,6 +2383,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2378,6 +2391,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2385,6 +2399,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2392,6 +2407,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2399,6 +2415,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2410,6 +2427,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -2422,6 +2440,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -2430,6 +2449,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2461,6 +2481,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3059,6 +3080,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3066,6 +3088,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3073,6 +3096,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3080,6 +3104,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3090,6 +3115,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -3098,6 +3124,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3105,6 +3132,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -4349,6 +4377,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4361,6 +4390,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4373,6 +4403,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4385,6 +4416,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4397,6 +4429,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4423,6 +4456,7 @@
           "script": "//third_party/blink/tools/merge_web_test_results.py"
         },
         "name": "site_per_process_webkit_layout_tests",
+        "only_retry_failed_tests": true,
         "results_handler": "layout tests",
         "swarming": {
           "can_use_on_swarming_builders": true,
@@ -4437,6 +4471,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4453,6 +4488,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4470,6 +4506,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4483,6 +4520,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -4516,6 +4554,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.mac.json b/testing/buildbot/chromium.mac.json
index c3b058f..ad439c6 100644
--- a/testing/buildbot/chromium.mac.json
+++ b/testing/buildbot/chromium.mac.json
@@ -496,6 +496,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -503,6 +504,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -510,6 +512,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -517,6 +520,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -524,6 +528,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -534,6 +539,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -546,6 +552,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -554,6 +561,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -583,6 +591,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1096,6 +1105,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1103,6 +1113,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1110,6 +1121,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1117,6 +1129,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1124,6 +1137,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1134,6 +1148,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -1146,6 +1161,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -1154,6 +1170,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1183,6 +1200,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2165,6 +2183,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2178,6 +2197,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2191,6 +2211,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2204,6 +2225,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2217,6 +2239,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2233,6 +2256,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2251,6 +2275,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2265,6 +2290,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2301,6 +2327,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -2821,6 +2848,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2828,6 +2856,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2835,6 +2864,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2842,6 +2872,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2849,6 +2880,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2859,6 +2891,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -2867,6 +2900,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2897,6 +2931,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3413,6 +3448,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3420,6 +3456,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3438,6 +3475,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "name": "performance_test_suite",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -3447,6 +3485,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3457,6 +3496,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -3465,6 +3505,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3491,6 +3532,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
diff --git a/testing/buildbot/chromium.swarm.json b/testing/buildbot/chromium.swarm.json
index b2e0d7a..59a04d37 100644
--- a/testing/buildbot/chromium.swarm.json
+++ b/testing/buildbot/chromium.swarm.json
@@ -696,6 +696,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -716,6 +717,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 6400d98..af172ea 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -652,6 +652,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -659,6 +660,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -666,6 +668,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -673,6 +676,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -680,6 +684,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -687,6 +692,7 @@
       {
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -699,6 +705,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -707,6 +714,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -714,6 +722,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -1379,6 +1388,7 @@
       {
         "isolate_name": "mini_installer_tests",
         "name": "mini_installer_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1997,6 +2007,7 @@
         "experiment_percentage": 100,
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2004,6 +2015,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2023,6 +2035,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "name": "performance_test_suite",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -2032,6 +2045,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2042,6 +2056,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -2050,6 +2065,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2057,6 +2073,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2711,6 +2728,7 @@
         ],
         "isolate_name": "chromedriver_py_tests",
         "name": "chromedriver_py_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2718,6 +2736,7 @@
       {
         "isolate_name": "components_perftests",
         "name": "components_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2725,6 +2744,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2732,6 +2752,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2739,6 +2760,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2746,6 +2768,7 @@
       {
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -2758,6 +2781,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -2766,6 +2790,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -2789,6 +2814,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3469,6 +3495,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3476,6 +3503,7 @@
       {
         "isolate_name": "metrics_python_tests",
         "name": "metrics_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3494,6 +3522,7 @@
           "script": "//tools/perf/process_perf_results.py"
         },
         "name": "performance_test_suite",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -3503,6 +3532,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3514,6 +3544,7 @@
         "experiment_percentage": 100,
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -3526,6 +3557,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -3534,6 +3566,7 @@
       {
         "isolate_name": "views_perftests",
         "name": "views_perftests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -3568,6 +3601,7 @@
       {
         "isolate_name": "webkit_python_tests",
         "name": "webkit_python_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
diff --git a/testing/buildbot/client.v8.chromium.json b/testing/buildbot/client.v8.chromium.json
index 34e9c2eb..dce3ac84 100644
--- a/testing/buildbot/client.v8.chromium.json
+++ b/testing/buildbot/client.v8.chromium.json
@@ -225,6 +225,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -232,6 +233,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -239,6 +241,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -246,6 +249,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -256,6 +260,7 @@
         ],
         "isolate_name": "telemetry_perf_unittests",
         "name": "telemetry_perf_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "hard_timeout": 960,
@@ -268,6 +273,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
@@ -500,6 +506,7 @@
       {
         "isolate_name": "content_shell_crash_test",
         "name": "content_shell_crash_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -507,6 +514,7 @@
       {
         "isolate_name": "devtools_closure_compile",
         "name": "devtools_closure_compile",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -514,6 +522,7 @@
       {
         "isolate_name": "devtools_eslint",
         "name": "devtools_eslint",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -521,6 +530,7 @@
       {
         "isolate_name": "telemetry_gpu_unittests",
         "name": "telemetry_gpu_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -531,6 +541,7 @@
         ],
         "isolate_name": "telemetry_unittests",
         "name": "telemetry_unittests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "shards": 4
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json
index 4789212..184a79e 100644
--- a/testing/buildbot/client.v8.fyi.json
+++ b/testing/buildbot/client.v8.fyi.json
@@ -14,6 +14,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -36,6 +37,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -58,6 +60,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -80,6 +83,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -109,6 +113,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -143,6 +148,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -169,6 +175,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -191,6 +198,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -214,6 +222,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -241,6 +250,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -263,6 +273,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -285,6 +296,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -307,6 +319,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -336,6 +349,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -370,6 +384,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -396,6 +411,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -418,6 +434,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -442,6 +459,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -465,6 +483,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -492,6 +511,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -514,6 +534,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -536,6 +557,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -558,6 +580,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -587,6 +610,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -621,6 +645,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -647,6 +672,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -669,6 +695,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -693,6 +720,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -716,6 +744,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -743,6 +772,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -764,6 +794,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -785,6 +816,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -806,6 +838,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -834,6 +867,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -867,6 +901,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -892,6 +927,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -913,6 +949,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -936,6 +973,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -958,6 +996,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1039,6 +1078,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "context_lost_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1061,6 +1101,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "depth_capture_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1083,6 +1124,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "gpu_process_launch_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1105,6 +1147,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "hardware_accelerated_feature_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1134,6 +1177,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "maps_pixel_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1168,6 +1212,7 @@
         "non_precommit_args": [
           "--upload-refimg-to-cloud-storage"
         ],
+        "only_retry_failed_tests": true,
         "precommit_args": [
           "--download-refimg-from-cloud-storage"
         ],
@@ -1194,6 +1239,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "screenshot_sync_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1216,6 +1262,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "trace_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1240,6 +1287,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl2_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
@@ -1263,6 +1311,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "webgl_conformance_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/filters/mash.browser_tests.filter b/testing/buildbot/filters/mash.browser_tests.filter
index 5ce613d4..184cd337 100644
--- a/testing/buildbot/filters/mash.browser_tests.filter
+++ b/testing/buildbot/filters/mash.browser_tests.filter
@@ -31,17 +31,23 @@
 -AutomationApiTestWithDeviceScaleFactor.*
 -AutomationManagerAuraBrowserTest.*
 
-# Direct access to ash window frames, tablet mode, overview mode, etc.
+# The browser frame is a work in progress.
 -BrowserNonClientFrameViewAshBackButtonTest.*
 -BrowserNonClientFrameViewAshTest.*
+# Individual tests that work.
+BrowserNonClientFrameViewAshTest.NonImmersiveFullscreen*
+BrowserNonClientFrameViewAshTest.ImmersiveFullscreen*
+BrowserNonClientFrameViewAshTest.FrameMinSizeIsUpdated*
+
+# Direct access to ash window frames, tablet mode, overview mode, etc.
 -ExtensionUninstallDialogViewBrowserTest.BookmarkAppWindowAshCrash
 -HostedAppNonClientFrameViewAshTest.*
--ImmersiveModeControllerAshHostedAppBrowserTest.*
 -HomeLauncherBrowserNonClientFrameViewAshTest.*
 
 # Fix immersive fullscreen mode in mash. https://crbug.com/844748.
 -ImmersiveModeBrowserViewTest.TestCaptionButtonsReceiveEventsInAppImmersiveMode*
 -ImmersiveModeBrowserViewTest.TestCaptionButtonsReceiveEventsInBrowserImmersiveMode*
+-ImmersiveModeControllerAshHostedAppBrowserTest.*
 -FileDisplay/FilesAppBrowserTest.Test/fileDisplayDownloads_TabletMode
 -FileDisplay/FilesAppBrowserTest.Test/fileDisplayDrive_TabletMode
 -QuickView/FilesAppBrowserTest.Test/openQuickView_TabletMode
diff --git a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
index 29edda3..5a12e05 100644
--- a/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
+++ b/testing/buildbot/filters/mojo.fyi.network_browser_tests.filter
@@ -16,7 +16,6 @@
 -SSLUITest.TestBadHTTPSDownload/0
 -SSLUITest.TestBadHTTPSDownload/1
 -SubresourceFilterBrowserTest.FailedProvisionalLoadInMainframe
--WebstoreInstallerBrowserTest.SimultaneousInstall
 -WebViewTest.WebViewInBackgroundPage
 
 # A large number of Cloud Print files use URLFetchers.
@@ -162,12 +161,14 @@
 -DnsProbeBrowserTest.NoInternetProbeResultWithSlowBrokenCorrections
 
 # crbug.com/776589 Intercepting requests with net::URLRequestFilter.
--DownloadExtensionTest.DownloadExtensionTest_Download_FileSystemURL
 -PolicyTest.CertificateTransparencyEnforcementDisabledForUrls/0
 -PolicyTest.CertificateTransparencyEnforcementDisabledForUrls/1
 -PolicyTest.ExtensionInstallSources
 -PolicyTest.ForceGoogleSafeSearch
 
+# crbug.com/859594 Migrate storage::FileWriterDelegate to use SimpleURLLoader
+-SBNavigationObserverBrowserTest.DownloadViaHTML5FileApi
+
 # https://bugs.chromium.org/p/chromium/issues/detail?id=789670
 -DiceBrowserTest.Reauth
 -DiceBrowserTest.Signin
@@ -209,6 +210,8 @@
 -ExtensionWebRequestApiTest.WebRequestDeclarative2
 -ExtensionWebRequestApiTest.WebRequestDiceHeaderProtection
 -ExtensionWebRequestApiTest.WebRequestTypes
+# Needs synchronization to wait until after URLLoaderFactories are rebound.
+-DevToolsFrontendInWebRequestApiTest.HiddenRequests
 # Note WebRequestUnloadImmediately is disabled on Linux
 -ExtensionWebRequestApiTest.WebRequestUnloadImmediately
 
@@ -217,16 +220,6 @@
 -MimeHandlerViewTests/MimeHandlerViewTest.Abort/0
 -MimeHandlerViewTests/MimeHandlerViewTest.Abort/1
 
-# http://crbug.com/784576
-# Convert ExtensionRequestLimitingThrottle into a URLLoaderThrottle.
--ExtensionRequestLimitingThrottleBrowserTest.DoNotThrottleCachedResponse
--ExtensionRequestLimitingThrottleBrowserTest.DoNotThrottleCachedResponse_NonRedirectCached
--ExtensionRequestLimitingThrottleBrowserTest.DoNotThrottleCachedResponse_Redirect
--ExtensionRequestLimitingThrottleBrowserTest.ThrottleRequest
--ExtensionRequestLimitingThrottleBrowserTest.ThrottleRequest_Redirect
--ExtensionRequestLimitingThrottleBrowserTest.ThrottleRequest_RedirectCached
--ExtensionRequestLimitingThrottleCommandLineBrowserTest.ThrottleRequestDisabled
-
 # Switch test from using a custom net::URLRequestFileJob to using a test
 # URLLoaderFactory via SetNetworkFactoryForTesting.
 -ErrorPageSniffTest.SniffSmallHttpErrorResponseAsDownload
diff --git a/testing/buildbot/filters/viz.android.content_browsertests.filter b/testing/buildbot/filters/viz.android.content_browsertests.filter
index 6b5a0e2..7acc2fa 100644
--- a/testing/buildbot/filters/viz.android.content_browsertests.filter
+++ b/testing/buildbot/filters/viz.android.content_browsertests.filter
@@ -1,4 +1,3 @@
 # Android Failures
 # Flaky failures with incorrect Input event acks. https://crbug.com/855532
--TouchInputBrowserTest.TouchHandlerConsume
 -TouchInputBrowserTest.TouchHandlerNoConsume
\ No newline at end of file
diff --git a/testing/buildbot/generate_buildbot_json.py b/testing/buildbot/generate_buildbot_json.py
index d0d09f5..29e698f 100755
--- a/testing/buildbot/generate_buildbot_json.py
+++ b/testing/buildbot/generate_buildbot_json.py
@@ -500,6 +500,9 @@
     self.initialize_args_for_test(result, tester_config)
     result = self.update_and_cleanup_test(result, test_name, tester_name)
     self.add_common_test_properties(result, tester_config)
+
+    # TODO(martiniss): Remove this. https://crbug.com/533481
+    result['only_retry_failed_tests'] = True
     return result
 
   def generate_script_test(self, waterfall, tester_name, tester_config,
diff --git a/testing/buildbot/generate_buildbot_json_unittest.py b/testing/buildbot/generate_buildbot_json_unittest.py
index 8ffc29a3..0e5fc430 100755
--- a/testing/buildbot/generate_buildbot_json_unittest.py
+++ b/testing/buildbot/generate_buildbot_json_unittest.py
@@ -804,6 +804,7 @@
       {
         "isolate_name": "foo_test",
         "name": "foo_test",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true
         }
@@ -925,6 +926,7 @@
         ],
         "isolate_name": "telemetry_gpu_integration_test",
         "name": "foo_tests",
+        "only_retry_failed_tests": true,
         "swarming": {
           "can_use_on_swarming_builders": true,
           "dimension_sets": [
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl
index 6d75618..f9316cc 100644
--- a/testing/buildbot/test_suites.pyl
+++ b/testing/buildbot/test_suites.pyl
@@ -614,7 +614,6 @@
         ],
         'script': '//third_party/blink/tools/merge_web_test_results.py',
       },
-      'only_retry_failed_tests': True,
       'results_handler': 'layout tests',
       'swarming': {
         'shards': 12,
@@ -873,7 +872,6 @@
         ],
         'script': '//third_party/blink/tools/merge_web_test_results.py',
       },
-      'only_retry_failed_tests': True,
       'results_handler': 'layout tests',
       'swarming': {
         'shards': 12,
@@ -1677,7 +1675,6 @@
         ],
         'script': '//third_party/blink/tools/merge_web_test_results.py',
       },
-      'only_retry_failed_tests': True,
       'results_handler': 'layout tests',
       'swarming': {
         'shards': 12,
@@ -2124,7 +2121,6 @@
         ],
         'script': '//third_party/blink/tools/merge_web_test_results.py',
       },
-      'only_retry_failed_tests': True,
       'results_handler': 'layout tests',
     },
   },
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 11aeec55..f9cc1a4 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -2739,6 +2739,25 @@
             ]
         }
     ],
+    "OriginTypePriorityExperiment": [
+        {
+            "platforms": [
+                "windows",
+                "mac",
+                "chromeos",
+                "linux",
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "LowPriorityForCrossOriginFrame",
+                    "enable_features": [
+                        "BlinkSchedulerLowPriorityForCrossOrigin"
+                    ]
+                }
+            ]
+        }
+    ],
     "OverflowIconsForMediaControls": [
         {
             "platforms": [
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
index 1bb9a98..82326085 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-features=LayoutNG
@@ -285,8 +285,6 @@
 crbug.com/591099 external/wpt/css/css-writing-modes/sizing-orthog-vlr-in-htb-008.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes/sizing-orthog-vrl-in-htb-004.xht [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes/sizing-orthog-vrl-in-htb-013.xht [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes/text-combine-upright-decorations-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/css-writing-modes/text-combine-upright-layout-rules-001.html [ Failure ]
 crbug.com/591099 external/wpt/css/css-writing-modes/text-orientation-script-001a.html [ Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes/text-orientation-script-001c.html [ Pass ]
 crbug.com/591099 external/wpt/css/css-writing-modes/text-orientation-script-001j.html [ Pass ]
@@ -341,9 +339,6 @@
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-padding-box-border-radius-002.html [ Pass ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-021.html [ Failure ]
 crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-polygon-022.html [ Pass ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-break-inside-001.html [ Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-break-inside-001a.html [ Failure ]
-crbug.com/591099 external/wpt/css/vendor-imports/mozilla/mozilla-central-reftests/writing-modes-3/text-combine-upright-compression-007.html [ Failure ]
 crbug.com/591099 external/wpt/editing/run/bold.html [ Pass ]
 crbug.com/591099 external/wpt/editing/run/fontname.html [ Pass ]
 crbug.com/591099 external/wpt/editing/run/formatblock.html [ Pass ]
@@ -500,7 +495,6 @@
 crbug.com/714962 fast/borders/border-image-outset-split-inline.html [ Failure ]
 crbug.com/714962 fast/borders/border-styles-split.html [ Failure ]
 crbug.com/591099 fast/borders/inline-mask-overlay-image-outset-vertical-rl.html [ Failure ]
-crbug.com/591099 fast/box-decoration-break/box-decoration-break-rendering.html [ Failure ]
 crbug.com/591099 fast/box-shadow/box-shadow.html [ Failure ]
 crbug.com/591099 fast/box-shadow/inset-subpixel.html [ Failure ]
 crbug.com/591099 fast/box-shadow/inset.html [ Failure ]
@@ -540,7 +534,6 @@
 crbug.com/591099 fast/dom/HTMLAreaElement/area-download.html [ Failure ]
 crbug.com/591099 fast/dom/nodesFromRect/nodesFromRect-basic.html [ Failure ]
 crbug.com/591099 fast/dynamic/first-letter-after-list-marker.html [ Failure ]
-crbug.com/591099 fast/dynamic/text-combine.html [ Failure ]
 crbug.com/591099 fast/encoding/utf-16-big-endian.html [ Failure ]
 crbug.com/591099 fast/encoding/utf-16-little-endian.html [ Failure ]
 crbug.com/591099 fast/events/background-tab-on-submit-ctrl-click.html [ Failure ]
@@ -589,18 +582,14 @@
 crbug.com/591099 fast/table/table-display-types-vertical.html [ Failure ]
 crbug.com/591099 fast/table/unbreakable-images-quirk.html [ Failure ]
 crbug.com/591099 fast/table/vertical-align-baseline-readjust.html [ Failure ]
-crbug.com/591099 fast/text/decorations-with-text-combine.html [ Failure ]
 crbug.com/591099 fast/text/descent-clip-in-scaled-page.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-in-relative-inline-right.html [ Failure ]
 crbug.com/591099 fast/text/ellipsis-in-relative-inline.html [ Failure ]
 crbug.com/714962 fast/text/emoticons.html [ Failure ]
-crbug.com/591099 fast/text/emphasis-combined-text.html [ Failure ]
 crbug.com/591099 fast/text/hide-atomic-inlines-after-ellipsis.html [ Failure ]
 crbug.com/796943 fast/text/international/shape-across-elements-simple.html [ Pass ]
-crbug.com/591099 fast/text/international/text-combine-image-test.html [ Failure ]
 crbug.com/591099 fast/text/orientation-sideways.html [ Failure ]
 crbug.com/591099 fast/text/selection/emphasis.html [ Failure ]
-crbug.com/591099 fast/text/text-combine-first-line-crash.html [ Crash ]
 crbug.com/591099 fast/text/unicode-fallback-font.html [ Failure ]
 crbug.com/591099 fast/text/whitespace/018.html [ Failure ]
 crbug.com/591099 fast/writing-mode/auto-sizing-orthogonal-flows.html [ Failure ]
@@ -616,9 +605,6 @@
 crbug.com/714962 fast/writing-mode/flipped-blocks-hit-test-line-edges.html [ Failure ]
 crbug.com/591099 fast/writing-mode/percentage-height-orthogonal-writing-modes.html [ Failure ]
 crbug.com/591099 fast/writing-mode/table-percent-width-quirk.html [ Pass ]
-crbug.com/591099 fast/writing-mode/text-combine-justify.html [ Failure ]
-crbug.com/591099 fast/writing-mode/text-combine-line-break.html [ Failure ]
-crbug.com/591099 fast/writing-mode/text-combine-various-fonts.html [ Failure ]
 crbug.com/591099 fullscreen/full-screen-with-flex-item.html [ Failure ]
 crbug.com/591099 hittesting/inline-with-clip-path.html [ Failure ]
 crbug.com/855039 html/details_summary/details-writing-mode-align-center.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
index b88ee95..e0ccde5 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-blink-gen-property-trees
@@ -404,71 +404,9 @@
 Bug(none) fast/clip/overflow-border-radius-composited-parent.html [ Failure ]
 Bug(none) fast/clip/overflow-border-radius-composited.html [ Failure ]
 
-# These test are flaky in various ways
-Bug(none) fast/events/hr-timestamp/input-events.html [ Failure Pass ]
-Bug(none) fast/events/mouse-focus-imagemap.html [ Failure Pass ]
-Bug(none) fast/events/popup-blocking-timers6.html [ Failure Pass Timeout ]
-Bug(none) virtual/threaded/fast/scrolling/abspos-relayout-overflow-style-change.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-frame-scrolling-no-visibility-hidden-child.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-frame-visibility-hidden-child.html [ Crash Failure Pass ]
-Bug(none) fast/events/drag-and-drop-autoscroll-use-count.html [ Failure Pass ]
-Bug(none) fast/events/pointerevents/pointerevent_touch-adjustment_click_target.html [ Failure Pass Timeout ]
-Bug(none) fast/events/setDragImage-with-detached-node.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/custom-scrollbar-style-applied-with-overflow-attribute.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/doc-write-to-iframe.html [ Crash Failure Pass ]
-Bug(none) fast/events/drag-and-drop-dataTransfer-types-nocrash.html [ Failure Pass ]
-Bug(none) fast/events/onchange-textfield.html [ Failure Pass ]
-Bug(none) fast/events/pointerevents/mouse-pointer-chorded-buttons.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/hide-scrollbars.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollbar-mousedown-move-mouseup.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollbar-prevent-default.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scroll-into-view-ignores-invisible-selection.html [ Crash Failure Pass ]
-Bug(none) fast/events/drag-svg-image-crash.html [ Failure Pass Timeout ]
-Bug(none) fast/events/mouse-events-on-textarea-resize.html [ Failure Pass ]
-Bug(none) fast/events/selectstart-by-drag.html [ Failure Pass ]
-Bug(none) fast/scrolling/absolute-position-behind-scrollbar.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/background-paint-scrolled-out-and-in.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-overflow-not-set.html [ Crash Failure Pass ]
-Bug(none) fast/events/simulated-click-on-anchor-with-target-blank.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/absolute-position-behind-scrollbar.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-overflow-auto.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrolling-apis-subpixel.html [ Crash Failure Pass ]
-Bug(none) fast/events/pointerevents/pointer-use-count.html [ Failure Pass ]
-Bug(none) fast/events/selectstart-prevent-selection-on-right-click.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/background-paint-composited-scrolled.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/fixed-position-behind-scrollbar.html [ Crash Failure Pass ]
-Bug(none) fast/events/anchor-image-scrolled-x-y.html [ Failure Pass Timeout ]
-Bug(none) fast/events/keydown-numpad-keys.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/fixed-position.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/horizontal-overflow-quirks.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollbar-tickmarks-hittest.html [ Crash Failure Pass Timeout ]
-Bug(none) fast/events/pointerevents/mouse-pointer-haspointercapture.html [ Failure Pass ]
-Bug(none) fast/events/tab-test-not-visible-imagemap.html [ Failure Pass ]
-Bug(none) fast/scrolling/hashtag-autoscroll.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-frame-overried-inherited-visibility-hidden.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/subpixel-overflow-mouse-drag.html [ Crash Failure Pass ]
-Bug(none) fast/events/pointerevents/mouse-pointer-preventdefault.html [ Failure Pass ]
-Bug(none) fast/events/popup-allowed-from-gesture-only-once-iframes.html [ Failure Pass Timeout ]
-Bug(none) fast/events/window-events-bubble.html [ Failure Pass ]
-Bug(none) fast/scrolling/fixed-position-behind-scrollbar.html [ Failure Pass ]
-Bug(none) fast/events/focus-change-crash.html [ Failure Pass ]
-Bug(none) fast/events/pointerevents/mouse-pointer-capture.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scroll-max-value.html [ Crash Failure Pass ]
-Bug(none) fast/events/input-tab-focus-no-duplicate-events.html [ Failure Pass ]
-Bug(none) fast/events/multiline-link-arrow-navigation.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/fractional-scroll-offset-iframe-fixed-position.html [ Crash Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollable-area-overflow-auto-display-none-in-parent.html [ Crash Failure Pass ]
-Bug(none) fast/events/clear-edit-drag-state.html [ Failure Pass ]
-Bug(none) fast/events/keydown-keypress-focus-change.html [ Failure Pass ]
-Bug(none) fast/events/onchange-searchfield.html [ Failure Pass ]
-Bug(none) virtual/threaded/fast/scrolling/scrollbar-tickmarks-styled.html [ Crash Failure Pass ]
-
 # Something wrong with vertical-rl scrollbars
 crbug.com/853945 fast/block/positioning/vertical-rl/002.html [ Failure ]
 
-# Something with the pattern is wrong. Needs investigation.
-crbug.com/853947 fast/canvas/synchronous-create-pattern.html [ Failure ]
-
 # Composited multicolumn paints differently.
 crbug.com/854192 fast/multicol/composited-layer-nested.html [ Failure ]
 crbug.com/854192 fast/multicol/vertical-rl/composited-relpos-overlapping-will-change.html [ Failure ]
diff --git a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2 b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
index 2e290ec..bbc9e56 100644
--- a/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
+++ b/third_party/WebKit/LayoutTests/FlagExpectations/enable-slimming-paint-v2
@@ -1037,16 +1037,8 @@
 # The following debug crashes / failures have not been triaged.
 crbug.com/702805 fast/forms/select-popup/popup-menu-appearance-coarse.html [ Crash Timeout Failure ]
 
-crbug.com/730284 fast/borders/border-radius-mask-canvas-all.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-canvas-border.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-canvas-padding.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-canvas-with-mask.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-canvas-with-shadow.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-canvas.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-video-ratio.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-video-shadow.html [ Failure ]
-crbug.com/730284 fast/borders/border-radius-mask-video.html [ Failure ]
-crbug.com/730284 fast/replaced/border-radius-clip.html [ Failure ]
+crbug.com/866647 fast/borders/border-radius-mask-video-ratio.html [ Failure ]
+crbug.com/866647 fast/borders/border-radius-mask-video-shadow.html [ Failure ]
 
 # Check failed: layer_list_.empty() || *page_scale_factor == 1
 crbug.com/706066 clipboard/copy-image-at-with-pinch-zoom.html [ Crash Timeout ]
diff --git a/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/form-in-tables.xhtml b/third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/form-in-tables-xhtml.xhtml
similarity index 100%
rename from third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/form-in-tables.xhtml
rename to third_party/WebKit/LayoutTests/external/wpt/html/rendering/non-replaced-elements/tables/form-in-tables-xhtml.xhtml
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js
new file mode 100644
index 0000000..30515fd8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js
@@ -0,0 +1 @@
+testServerTiming(document.currentScript, [{"name":"metric", "desc":"tabs-should-get-trimmed", "dur": 42.0}])
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js.sub.headers b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js.sub.headers
new file mode 100644
index 0000000..ae864b5
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/resources/parsing/84.js.sub.headers
@@ -0,0 +1 @@
+Server-Timing: metric;	desc=	tabs-should-get-trimmed	;dur=	42	
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing-expected.txt
index d9c3ecf64..4ea8991 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing-expected.txt
@@ -1,5 +1,5 @@
 This is a testharness.js-based test.
-Found 324 tests; 322 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
+Found 328 tests; 326 PASS, 2 FAIL, 0 TIMEOUT, 0 NOTRUN.
 PASS 0.js - count (0 ?== 0)
 PASS 1.js - count (1 ?== 1)
 PASS 1.js - name (metric ?== metric)
@@ -324,5 +324,9 @@
 PASS 81.js - count (0 ?== 0)
 PASS 82.js - count (0 ?== 0)
 PASS 83.js - count (0 ?== 0)
+PASS 84.js - count (1 ?== 1)
+PASS 84.js - name (metric ?== metric)
+PASS 84.js - duration (42 ?== 42)
+PASS 84.js - description (tabs-should-get-trimmed ?== tabs-should-get-trimmed)
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html
index f74ffeb..156dfcd 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.html
@@ -43,7 +43,7 @@
         })
         done()
       }
-      for (let i = 0; i <= 83; i++) {
+      for (let i = 0; i <= 84; i++) {
         const script = document.createElement('script')
         script.src = `./resources/parsing/${i}.js`
         document.getElementsByTagName('head')[0].appendChild(script)
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt
index eadb4d2..c87e661 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https-expected.txt
@@ -323,5 +323,9 @@
 PASS 81.js - count (0 ?== 0)
 PASS 82.js - count (0 ?== 0)
 PASS 83.js - count (0 ?== 0)
+PASS 84.js - count (1 ?== 1)
+PASS 84.js - name (metric ?== metric)
+PASS 84.js - duration (42 ?== 42)
+PASS 84.js - description (tabs-should-get-trimmed ?== tabs-should-get-trimmed)
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https.html b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https.html
index f74ffeb..156dfcd 100644
--- a/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https.html
+++ b/third_party/WebKit/LayoutTests/external/wpt/server-timing/server_timing_header-parsing.https.html
@@ -43,7 +43,7 @@
         })
         done()
       }
-      for (let i = 0; i <= 83; i++) {
+      for (let i = 0; i <= 84; i++) {
         const script = document.createElement('script')
         script.src = `./resources/parsing/${i}.js`
         document.getElementsByTagName('head')[0].appendChild(script)
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping-expected.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping-expected.html
new file mode 100644
index 0000000..9127edf6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping-expected.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="position:relative; left:1px; top:1px; width:100px; height:100px; border-left:1px solid black; border-top:1px solid black; background:green;"></div>
\ No newline at end of file
diff --git a/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping.html b/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping.html
new file mode 100644
index 0000000..91654f1
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/fast/sub-pixel/iframe-overflow-due-to-snapping.html
@@ -0,0 +1,3 @@
+<!DOCTYPE html>
+<iframe style="position:relative; left:0.75px; top:0.75px; width:99.625px; height:99.625px; border:1px solid black;" src="data:text/html;charset=utf-8;base64,PCFET0NUWVBFIGh0bWw+DQo8Ym9keSBzdHlsZT0iYmFja2dyb3VuZDpncmVlbiI+PC9ib2R5Pg=="/>
+<!-- This test demostrates iframes may overflow by 1px due to snapping -->
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/direct-image-compositing-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/direct-image-compositing-expected.png
new file mode 100644
index 0000000..fb597a8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-blink-gen-property-trees/compositing/direct-image-compositing-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.png
new file mode 100644
index 0000000..75811178
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.txt
new file mode 100644
index 0000000..e1c93d9c
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-all-expected.txt
@@ -0,0 +1,29 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x496
+  LayoutBlockFlow {HTML} at (0,0) size 800x496.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x469.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x80
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 393x19
+            text run at (0,0) width 393: "the 10px gray background is visible around the canvas content"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 152x19
+            text run at (0,0) width 152: "has 5px solid red border"
+        LayoutListItem {LI} at (40,40) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 316x19
+            text run at (0,0) width 316: "all the corners for border and padding are rounded"
+        LayoutListItem {LI} at (40,60) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 366x19
+            text run at (0,0) width 366: "the bottom right corner of canvas content is NOT rounded"
+      LayoutBlockFlow (anonymous) at (0,137.72) size 784x332
+        LayoutText {#text} at (0,0) size 0x0
+layer at (28,176) size 287x287
+  LayoutHTMLCanvas {CANVAS} at (20,20) size 287x287 [bgcolor=#808080] [border: (5px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.png
new file mode 100644
index 0000000..c337eb8
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.txt
new file mode 100644
index 0000000..4933c7b
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-border-expected.txt
@@ -0,0 +1,25 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x426
+  LayoutBlockFlow {HTML} at (0,0) size 800x426.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x399.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x60
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 391x19
+            text run at (0,0) width 391: "the canvas content has rounded corners (top-left and top-right)"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 351x19
+            text run at (0,0) width 351: "the 10px red border is visible around the canvas content"
+        LayoutListItem {LI} at (40,40) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 156x19
+            text run at (0,0) width 156: "gray border is not visible"
+      LayoutBlockFlow (anonymous) at (0,117.72) size 784x282
+        LayoutText {#text} at (0,0) size 0x0
+layer at (8,136) size 277x277
+  LayoutHTMLCanvas {CANVAS} at (0,0) size 277x277 [bgcolor=#808080] [border: (10px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.png
new file mode 100644
index 0000000..4551cc9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.txt
new file mode 100644
index 0000000..0486da0ae
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-expected.txt
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x386
+  LayoutBlockFlow {HTML} at (0,0) size 800x386.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x359.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x40
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 415x19
+            text run at (0,0) width 415: "the canvas content has rounded corners (top-left and bottom-right)"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 190x19
+            text run at (0,0) width 190: "gray background is not visible"
+      LayoutBlockFlow (anonymous) at (0,97.72) size 784x262
+        LayoutText {#text} at (0,0) size 0x0
+layer at (8,116) size 257x257
+  LayoutHTMLCanvas {CANVAS} at (0,0) size 257x257 [bgcolor=#808080]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.png
new file mode 100644
index 0000000..0597b0f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.txt
new file mode 100644
index 0000000..fe35cab
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-padding-expected.txt
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x406
+  LayoutBlockFlow {HTML} at (0,0) size 800x406.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x379.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x40
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 415x19
+            text run at (0,0) width 415: "the canvas content has rounded corners (bottom-left and top-right)"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 393x19
+            text run at (0,0) width 393: "the 10px gray background is visible around the canvas content"
+      LayoutBlockFlow (anonymous) at (0,97.72) size 784x282
+        LayoutText {#text} at (0,0) size 0x0
+layer at (8,116) size 277x277
+  LayoutHTMLCanvas {CANVAS} at (0,0) size 277x277 [bgcolor=#808080]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.png
new file mode 100644
index 0000000..eadac89e
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.txt
new file mode 100644
index 0000000..4a65654ee
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-mask-expected.txt
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x456
+  LayoutBlockFlow {HTML} at (0,0) size 800x456.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x429.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x40
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 297x19
+            text run at (0,0) width 297: "the canvas element has a gradient mask applied"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 247x19
+            text run at (0,0) width 247: "the canvas content has rounded corners"
+      LayoutBlockFlow (anonymous) at (0,97.72) size 784x332
+        LayoutText {#text} at (0,0) size 0x0
+layer at (28,136) size 287x287 transparent
+  LayoutHTMLCanvas {CANVAS} at (20,20) size 287x287 [bgcolor=#808080] [border: (5px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.png
new file mode 100644
index 0000000..42ee4528
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.txt
new file mode 100644
index 0000000..3a8d1f6
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-canvas-with-shadow-expected.txt
@@ -0,0 +1,21 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x456
+  LayoutBlockFlow {HTML} at (0,0) size 800x456.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x429.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x40
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 305x19
+            text run at (0,0) width 305: "the canvas element has 8px gray shadow around"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 247x19
+            text run at (0,0) width 247: "the canvas content has rounded corners"
+      LayoutBlockFlow (anonymous) at (0,97.72) size 784x332
+        LayoutText {#text} at (0,0) size 0x0
+layer at (28,136) size 287x287
+  LayoutHTMLCanvas {CANVAS} at (20,20) size 287x287 [bgcolor=#808080] [border: (5px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.png
new file mode 100644
index 0000000..4bce27f
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.txt
new file mode 100644
index 0000000..49d0179
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/borders/border-radius-mask-video-expected.txt
@@ -0,0 +1,26 @@
+layer at (0,0) size 800x600
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 800x354
+  LayoutBlockFlow {HTML} at (0,0) size 800x354.44
+    LayoutBlockFlow {BODY} at (8,18.72) size 784x327.72
+      LayoutBlockFlow {H3} at (0,0) size 784x23
+        LayoutText {#text} at (0,0) size 90x22
+          text run at (0,0) width 90: "It passes if:"
+      LayoutBlockFlow {UL} at (0,41.72) size 784x40
+        LayoutListItem {LI} at (40,0) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 405x19
+            text run at (0,0) width 405: "the video content has rounded corners (top left and bottom right)"
+        LayoutListItem {LI} at (40,20) size 744x20
+          LayoutListMarker (anonymous) at (-18,0) size 7x19: bullet
+          LayoutText {#text} at (0,0) size 190x19
+            text run at (0,0) width 190: "gray background is not visible"
+      LayoutBlockFlow (anonymous) at (0,97.72) size 784x230
+        LayoutText {#text} at (0,0) size 0x0
+layer at (8,116) size 400x225
+  LayoutVideo {VIDEO} at (0,0) size 400x225 [bgcolor=#808080]
+layer at (8,116) size 400x225
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 400x225
+    LayoutFlexibleBox {DIV} at (0,0) size 400x225
+layer at (8,116) size 400x225
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 400x225
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.png b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.png
new file mode 100644
index 0000000..7f831a49
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.txt b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.txt
new file mode 100644
index 0000000..fee7d2d
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/flag-specific/enable-slimming-paint-v2/fast/replaced/border-radius-clip-expected.txt
@@ -0,0 +1,40 @@
+layer at (0,0) size 800x600 clip at (0,0) size 785x600 scrollHeight 958
+  LayoutView at (0,0) size 800x600
+layer at (0,0) size 785x934 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+  LayoutBlockFlow {HTML} at (0,0) size 785x934
+    LayoutBlockFlow {BODY} at (8,8) size 769x918
+      LayoutText {#text} at (0,0) size 457x19
+        text run at (0,0) width 457: "All of the replaced elements below should be clipped to a border-radius. "
+      LayoutBR {BR} at (0,0) size 0x0
+      LayoutImage {IMG} at (0,20) size 100x100
+      LayoutText {#text} at (100,105) size 4x19
+        text run at (100,105) width 4: " "
+      LayoutBR {BR} at (0,0) size 0x0
+      LayoutImage {INPUT} at (0,125) size 100x100
+      LayoutText {#text} at (100,210) size 4x19
+        text run at (100,210) width 4: " "
+      LayoutBR {BR} at (0,0) size 0x0
+      LayoutText {#text} at (304,369) size 4x19
+        text run at (304,369) width 4: " "
+      LayoutBR {BR} at (0,0) size 0x0
+      LayoutText {#text} at (300,524) size 4x19
+        text run at (300,524) width 4: " "
+      LayoutBR {BR} at (0,0) size 0x0
+      LayoutText {#text} at (0,0) size 0x0
+layer at (8,238) size 304x154 clip at (10,240) size 300x150
+  LayoutIFrame {IFRAME} at (0,230) size 304x154 [border: (2px inset #EEEEEE)]
+    layer at (0,0) size 300x150
+      LayoutView at (0,0) size 300x150
+    layer at (0,0) size 300x150
+      LayoutBlockFlow {HTML} at (0,0) size 300x150
+        LayoutBlockFlow {BODY} at (0,0) size 300x150
+          LayoutImage {IMG} at (0,0) size 100x100
+layer at (8,397) size 300x150
+  LayoutVideo {VIDEO} at (0,389) size 300x150
+layer at (8,552) size 556x406 backgroundClip at (0,0) size 785x600 clip at (11,555) size 550x45
+  LayoutEmbeddedObject {EMBED} at (0,544) size 556x406 [bgcolor=#00FF00] [border: (3px solid #000000)]
+layer at (8,397) size 300x150
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 300x150
+    LayoutFlexibleBox {DIV} at (0,0) size 300x150
+layer at (8,397) size 300x150
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 300x150
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath-expected.txt b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath-expected.txt
index 32f9158..1da0e27 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath-expected.txt
@@ -1,18 +1,18 @@
 Tests $x for iterator and non-iterator types.
 
 $x('42')
-$x('name(/html)')
-$x('not(42)')
-$x('/html/body/p').length
-$x('//a/@href')[0]
-$x('./a/@href', document.body)[0]
-$x('./a@href', document.body)
 42
+$x('name(/html)')
 "html"
+$x('not(42)')
 false
+$x('/html/body/p').length
 1
+$x('//a/@href')[0]
 href="http://chromium.org"
+$x('./a/@href', document.body)[0]
 href="http://chromium.org"
+$x('./a@href', document.body)
 VM:1 Uncaught DOMException: Failed to execute '$x' on 'CommandLineAPI': The string './a@href' is not a valid XPath expression.
     at <anonymous>:1:1
 (anonymous) @ VM:1
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath.js b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath.js
index ba9716c..5c01995 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath.js
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/console-xpath.js
@@ -15,13 +15,13 @@
       Console.ConsoleViewMessage.prototype, '_formattedParameterAsNodeForTest', formattedParameter, true);
   ConsoleTestRunner.addConsoleViewSniffer(messageSniffer, true);
 
-  ConsoleTestRunner.evaluateInConsole('$x(\'42\')');                           // number
-  ConsoleTestRunner.evaluateInConsole('$x(\'name(/html)\')');                  // string
-  ConsoleTestRunner.evaluateInConsole('$x(\'not(42)\')');                      // boolean
-  ConsoleTestRunner.evaluateInConsole('$x(\'/html/body/p\').length');          // node iterator
-  ConsoleTestRunner.evaluateInConsole('$x(\'//a/@href\')[0]');                 // href, should not throw
-  ConsoleTestRunner.evaluateInConsole('$x(\'./a/@href\', document.body)[0]');  // relative to document.body selector
-  ConsoleTestRunner.evaluateInConsole('$x(\'./a@href\', document.body)');      // incorrect selector, shouldn't crash
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'42\')');                           // number
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'name(/html)\')');                  // string
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'not(42)\')');                      // boolean
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'/html/body/p\').length');          // node iterator
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'//a/@href\')[0]');                 // href, should not throw
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'./a/@href\', document.body)[0]');  // relative to document.body selector
+  await ConsoleTestRunner.evaluateInConsolePromise('$x(\'./a@href\', document.body)');      // incorrect selector, shouldn't crash
   TestRunner.evaluateInPage('console.log(\'complete\')');                      // node iterator
 
   var completeMessageReceived = false;
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/console/viewport-testing/console-runtime-result-below-prompt.js b/third_party/WebKit/LayoutTests/http/tests/devtools/console/viewport-testing/console-runtime-result-below-prompt.js
index 1de66f6..14d9f47f 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/console/viewport-testing/console-runtime-result-below-prompt.js
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/console/viewport-testing/console-runtime-result-below-prompt.js
@@ -32,10 +32,10 @@
 
     async function testNoOpForLongText(next) {
       TestRunner.addResult('Setting max length for evaluation to 0');
-      const originalMaxLength = Console.ConsolePrompt._MaxLengthForEvaluation;
-      Console.ConsolePrompt._MaxLengthForEvaluation = 0;
+      const originalMaxLength = ObjectUI.JavaScriptREPL._MaxLengthForEvaluation;
+      ObjectUI.JavaScriptREPL._MaxLengthForEvaluation = 0;
       await checkExpression(`1 + 2`);
-      Console.ConsolePrompt._MaxLengthForEvaluation = originalMaxLength;
+      ObjectUI.JavaScriptREPL._MaxLengthForEvaluation = originalMaxLength;
 
       next();
     },
diff --git a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-console/debug-console-command.js b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-console/debug-console-command.js
index df444ca8..ce5415e1 100644
--- a/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-console/debug-console-command.js
+++ b/third_party/WebKit/LayoutTests/http/tests/devtools/sources/debugger-console/debug-console-command.js
@@ -50,18 +50,18 @@
     }
   ]);
 
-  function setBreakpointAndRun(next, functionName, runCmd) {
-    ConsoleTestRunner.evaluateInConsole('debug(' + functionName + ')');
+  async function setBreakpointAndRun(next, functionName, runCmd) {
+    await ConsoleTestRunner.evaluateInConsolePromise('debug(' + functionName + ')');
 
     TestRunner.addResult('Breakpoint added.');
-    ConsoleTestRunner.evaluateInConsole('setTimeout(function() { ' + runCmd + ' }, 0)');
+    await ConsoleTestRunner.evaluateInConsolePromise('setTimeout(function() { ' + runCmd + ' }, 20)');
     TestRunner.addResult('Set timer for test function.');
     SourcesTestRunner.waitUntilPaused(didPause);
 
-    function didPause(callFrames, reason) {
+    async function didPause(callFrames, reason) {
       TestRunner.addResult('Script execution paused.');
       SourcesTestRunner.captureStackTrace(callFrames);
-      ConsoleTestRunner.evaluateInConsole('undebug(' + functionName + ')');
+      await ConsoleTestRunner.evaluateInConsolePromise('undebug(' + functionName + ')');
       TestRunner.addResult('Breakpoint removed.');
       TestRunner.assertEquals(reason, SDK.DebuggerModel.BreakReason.DebugCommand);
       SourcesTestRunner.resumeExecution(didResume);
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https-expected.txt b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https-expected.txt
new file mode 100644
index 0000000..9a6ca8e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-base-https-other-https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "scheme-blob"
+PASS Startup
+PASS scheme-blob
+PASS scheme-blob
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-expected.txt b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-expected.txt
new file mode 100644
index 0000000..9a6ca8e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "scheme-blob"
+PASS Startup
+PASS scheme-blob
+PASS scheme-blob
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-other-https-expected.txt b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-other-https-expected.txt
new file mode 100644
index 0000000..9a6ca8e7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/fetch/serviceworker/thorough/scheme-blob-other-https-expected.txt
@@ -0,0 +1,7 @@
+This is a testharness.js-based test.
+Harness Error. harness_status.status = 1 , harness_status.message = 1 duplicate test name: "scheme-blob"
+PASS Startup
+PASS scheme-blob
+PASS scheme-blob
+Harness: the test ran to completion.
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain-expected.txt
new file mode 100644
index 0000000..79ce8b7
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain-expected.txt
@@ -0,0 +1,10 @@
+Tests that requests produced by redirects injected via mocked response are intercepted when followed.
+Intercepted: http://test-url/
+Redirecting to http://test-url/redirect1
+Intercepted: http://test-url/redirect1
+Redirecting to http://test-url/redirect2
+Intercepted: http://test-url/redirect2
+Redirecting to http://test-url/final
+Intercepted: http://test-url/final
+Response body: Hello, world!
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain.js
new file mode 100644
index 0000000..f3dfcab2
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/interception-mocked-redirect-chain.js
@@ -0,0 +1,48 @@
+(async function(testRunner) {
+  var {page, session, dp} = await testRunner.startBlank(
+      `Tests that requests produced by redirects injected via mocked response are intercepted when followed.`);
+
+  await session.protocol.Network.clearBrowserCache();
+  await session.protocol.Network.setCacheDisabled({cacheDisabled: true});
+  await session.protocol.Network.enable();
+  await session.protocol.Page.enable();
+  await dp.Page.setLifecycleEventsEnabled({enabled: true});
+
+  await dp.Network.setRequestInterception({patterns: [{}]});
+
+  session.navigate('http://test-url/');
+
+  let params = (await dp.Network.onceRequestIntercepted()).params;
+  testRunner.log(`Intercepted: ${params.request.url}`);
+  respondWithRedirct(params, 'http://test-url/redirect1');
+
+  params = (await dp.Network.onceRequestIntercepted()).params;
+  testRunner.log(`Intercepted: ${params.request.url}`);
+  respondWithRedirct(params, 'http://test-url/redirect2');
+
+  params = (await dp.Network.onceRequestIntercepted()).params;
+  testRunner.log(`Intercepted: ${params.request.url}`);
+  respondWithRedirct(params, 'http://test-url/final');
+
+  params = (await dp.Network.onceRequestIntercepted()).params;
+  testRunner.log(`Intercepted: ${params.request.url}`);
+  respond(params, ['HTTP/1.1 200 OK', 'Content-Type: text/html'], '<body>Hello, world!</body>');
+
+  await dp.Page.onceLifecycleEvent(event => event.params.name === 'load');
+  const body = await session.evaluate('document.body.textContent');
+  testRunner.log(`Response body: ${body}`);
+
+  testRunner.completeTest();
+
+  function respond(params, headers, body) {
+    const headersText = headers.join("\r\n");
+    const response = headersText + "\r\n\r\n" + (body || "");
+    dp.Network.continueInterceptedRequest({interceptionId: params.interceptionId, rawResponse: btoa(response)});
+  }
+
+  function respondWithRedirct(params, url) {
+    testRunner.log(`Redirecting to ${url}`);
+    respond(params, ['HTTP/1.1 302 Moved', `Location: ${url}`], null);
+  }
+})
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-blocked-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-blocked-expected.txt
index c409c25..58e86269 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-blocked-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-blocked-expected.txt
@@ -9,10 +9,8 @@
 Network.responseReceived redirect-iframe.html 200 text/html
 Network.requestIntercepted ID 2 GET redirect1.pl type: Script
 allowRequest ID 2
-Network.requestIntercepted ID 2 307 redirect redirect1.pl -> redirect2.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 302 redirect redirect2.pl -> redirect3.pl
-blockRequest ID 2 AddressUnreachable
+Network.requestIntercepted ID 3 GET redirect2.pl type: Script
+blockRequest ID 3 AddressUnreachable
 Network.loadingFailed redirect2.pl net::ERR_ADDRESS_UNREACHABLE
 Page.frameStoppedLoading
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both-expected.txt
new file mode 100644
index 0000000..d6f93f9
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both-expected.txt
@@ -0,0 +1,31 @@
+Tests interception of redirects.
+Test started
+Network agent enabled
+Request interception enabled
+Page agent enabled
+Runtime agent enabled
+Network.requestIntercepted ID 1 GET redirect-iframe.html type: Document
+allowRequest ID 1
+Network.requestIntercepted ID 1 GET redirect-iframe.html type: Document
+allowRequest ID 1
+Network.responseReceived redirect-iframe.html 200 text/html
+Network.requestIntercepted ID 2 GET redirect1.pl type: Script
+allowRequest ID 2
+Network.requestIntercepted ID 2 307 redirect redirect1.pl -> redirect2.pl
+allowRequest ID 2
+Network.requestIntercepted ID 3 GET redirect2.pl type: Script
+allowRequest ID 3
+Network.requestIntercepted ID 3 302 redirect redirect2.pl -> redirect3.pl
+allowRequest ID 3
+Network.requestIntercepted ID 4 GET redirect3.pl type: Script
+allowRequest ID 4
+Network.requestIntercepted ID 4 301 redirect redirect3.pl -> final.js
+allowRequest ID 4
+Network.requestIntercepted ID 5 GET final.js type: Script
+allowRequest ID 5
+Network.requestIntercepted ID 5 GET final.js type: Script
+allowRequest ID 5
+Network.responseReceived final.js 200 application/x-javascript
+Page.frameStoppedLoading
+Hello from final.js!
+
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both.js
new file mode 100644
index 0000000..b17859eaf3
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-both.js
@@ -0,0 +1,22 @@
+(async function(testRunner) {
+  var {page, session, dp} = await testRunner.startBlank(
+      `Tests interception of redirects.`);
+
+  var InterceptionHelper = await testRunner.loadScript('../resources/interception-test.js');
+  var helper = new InterceptionHelper(testRunner, session);
+
+  var requestInterceptedDict = {
+    'redirect-iframe.html': event => helper.allowRequest(event),
+    'redirect1.pl': event => helper.allowRequest(event),
+    'redirect2.pl': event => helper.allowRequest(event),
+    'redirect3.pl': event => helper.allowRequest(event),
+    'final.js': event => helper.allowRequest(event),
+  };
+
+  await helper.startInterceptionTest(requestInterceptedDict, 1, 'Both');
+  session.evaluate(`
+    var iframe = document.createElement('iframe');
+    iframe.src = '${testRunner.url('./resources/redirect-iframe.html')}';
+    document.body.appendChild(iframe);
+  `);
+})
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-expected.txt
index 7e75fe1..3caa131 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-expected.txt
@@ -9,12 +9,12 @@
 Network.responseReceived redirect-iframe.html 200 text/html
 Network.requestIntercepted ID 2 GET redirect1.pl type: Script
 allowRequest ID 2
-Network.requestIntercepted ID 2 307 redirect redirect1.pl -> redirect2.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 302 redirect redirect2.pl -> redirect3.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 301 redirect redirect3.pl -> final.js
-allowRequest ID 2
+Network.requestIntercepted ID 3 GET redirect2.pl type: Script
+allowRequest ID 3
+Network.requestIntercepted ID 4 GET redirect3.pl type: Script
+allowRequest ID 4
+Network.requestIntercepted ID 5 GET final.js type: Script
+allowRequest ID 5
 Network.responseReceived final.js 200 application/x-javascript
 Page.frameStoppedLoading
 Hello from final.js!
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-mocked-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-mocked-expected.txt
index 53215ba..56b541cb 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-mocked-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-mocked-expected.txt
@@ -9,12 +9,10 @@
 Network.responseReceived redirect-iframe.html 200 text/html
 Network.requestIntercepted ID 2 GET redirect1.pl type: Script
 allowRequest ID 2
-Network.requestIntercepted ID 2 307 redirect redirect1.pl -> redirect2.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 302 redirect redirect2.pl -> redirect3.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 301 redirect redirect3.pl -> final.js
-mockResponse ID 2
+Network.requestIntercepted ID 3 GET redirect2.pl type: Script
+allowRequest ID 3
+Network.requestIntercepted ID 4 GET redirect3.pl type: Script
+mockResponse ID 4
 Network.responseReceived redirect3.pl 200 application/javascript
 Page.frameStoppedLoading
 Hello from the mock resource
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified-expected.txt
index e5d82aa..fb7b2b0 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified-expected.txt
@@ -9,13 +9,11 @@
 Network.responseReceived redirect-iframe.html 200 text/html
 Network.requestIntercepted ID 2 GET redirect1.pl type: Script
 allowRequest ID 2
-Network.requestIntercepted ID 2 307 redirect redirect1.pl -> redirect2.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 302 redirect redirect2.pl -> redirect3.pl
-allowRequest ID 2
-Network.requestIntercepted ID 2 301 redirect redirect3.pl -> final.js
-modifyRequest ID 2: url final.js -> alternative.js
-Network.responseReceived alternative.js 200 application/x-javascript
+Network.requestIntercepted ID 3 GET redirect2.pl type: Script
+allowRequest ID 3
+Network.requestIntercepted ID 4 GET redirect3.pl type: Script
+modifyRequest ID 4: url redirect3.pl -> alternative.js
+Network.responseReceived redirect3.pl 200 application/x-javascript
 Page.frameStoppedLoading
 Hello from alternative.js!
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified.js
index 213299b2b..64fd461 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified.js
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/redirect-interception-modified.js
@@ -10,6 +10,7 @@
     'redirect1.pl': event => helper.allowRequest(event),
     'redirect2.pl': event => helper.allowRequest(event),
     'redirect3.pl': event => helper.modifyRequest(event, {url: 'alternative.js'}),
+    'alternative.js': event => helper.allowRequest(event)
   };
 
   await helper.startInterceptionTest(requestInterceptedDict, 1);
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-mock302-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-mock302-expected.txt
index dad8aef92..31fb1332 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-mock302-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-mock302-expected.txt
@@ -9,6 +9,8 @@
 Network.responseReceived redirect-iframe.html 200 text/html
 Network.requestIntercepted ID 2 GET redirect1.pl type: Script
 mockResponse ID 2
+Network.requestIntercepted ID 3 GET final.js type: Script
+allowRequest ID 3
 Network.responseReceived final.js 200 application/x-javascript
 Page.frameStoppedLoading
 Hello from final.js!
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite-expected.txt b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite-expected.txt
index 5668d922..f5c0575 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite-expected.txt
@@ -5,10 +5,9 @@
   responseErrorReason: undefined
   responseStatusCode: undefined
   responseHeaders: <None>
+Continuing a request to http://127.0.0.1:8000/inspector-protocol/resources/redirect1.php
   responseBody:
     Error<Can only get response body on requests captured after headers received.>
-Continuing redirect1.php request.
-
 Request Intercepted: redirect1.php
   responseErrorReason: undefined
   responseStatusCode: 307
@@ -24,10 +23,16 @@
     Pragma: no-cache
     Server: <Masked>
   redirectUrl: redirect2.php
+Continuing a request to http://127.0.0.1:8000/inspector-protocol/resources/redirect1.php
   responseBody:
     Error<Can only get response body on requests captured after headers received.>
-Continuing redirect1.php and allow to redirect to redirect2.php.
-
+Request Intercepted: redirect2.php
+  responseErrorReason: undefined
+  responseStatusCode: undefined
+  responseHeaders: <None>
+Continuing a request to http://127.0.0.1:8000/inspector-protocol/resources/redirect2.php
+  responseBody:
+    Error<Can only get response body on requests captured after headers received.>
 Request Intercepted: redirect2.php
   responseErrorReason: undefined
   responseStatusCode: 307
@@ -43,25 +48,16 @@
     Pragma: no-cache
     Server: <Masked>
   redirectUrl: final.html
+Continuing a request to http://127.0.0.1:8000/inspector-protocol/resources/redirect2.php
   responseBody:
     Error<Can only get response body on requests captured after headers received.>
-Continuing redriect2.php and allow to redirect to final.html.
-
 Request Intercepted: final.html
   responseErrorReason: undefined
-  responseStatusCode: 200
-  responseHeaders:
-    Accept-Ranges: bytes
-    Connection: Keep-Alive
-    Content-Length: 56
-    Content-Type: text/html
-    Date: <Masked>
-    ETag: <Masked>
-    Keep-Alive: <Masked>
-    Last-Modified: <Masked>
-    Server: <Masked>
+  responseStatusCode: undefined
+  responseHeaders: <None>
+Continuing a request to http://127.0.0.1:8000/inspector-protocol/resources/final.html
   responseBody:
-<html><body>This is the final destination.</body></html>
+    Error<Can only get response body on requests captured after headers received.>
 Modifying final.html's response after we receive response.
 Modifying request with new body.
 
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite.js
index 1e31efa1..74aaffa 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite.js
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/network/request-interception-on-both-redirect-rewrite.js
@@ -20,30 +20,17 @@
 
   session.evaluate(`fetch('${testRunner.url('../resources/redirect1.php')}')`);
 
-  // Should be redirect1.php as request.
-  var interceptionEvent = await waitForInterceptionEvent();
-  await logInterceptionEvent(interceptionEvent);
-  testRunner.log('Continuing redirect1.php request.');
-  testRunner.log('');
-  session.protocol.Network.continueInterceptedRequest({interceptionId: interceptionEvent.params.interceptionId});
+  await waitForInterceptionEventAndContinue("/redirect1.php");
+  await waitForInterceptionEventAndContinue("/redirect1.php");
 
-  // Should be redirect1.php as redirect going to redirect2.php.
-  interceptionEvent = await waitForInterceptionEvent();
-  await logInterceptionEvent(interceptionEvent);
-  testRunner.log('Continuing redirect1.php and allow to redirect to redirect2.php.');
-  testRunner.log('');
-  session.protocol.Network.continueInterceptedRequest({interceptionId: interceptionEvent.params.interceptionId});
 
   // Should be redirect2.php as redirecting to final.html.
-  interceptionEvent = await waitForInterceptionEvent();
-  await logInterceptionEvent(interceptionEvent);
-  testRunner.log('Continuing redriect2.php and allow to redirect to final.html.');
-  testRunner.log('');
-  session.protocol.Network.continueInterceptedRequest({interceptionId: interceptionEvent.params.interceptionId});
+  await waitForInterceptionEventAndContinue("/redirect2.php");
+  await waitForInterceptionEventAndContinue("/redirect2.php");
 
-  // Should be final.html as response.
-  interceptionEvent = await waitForInterceptionEvent();
-  await logInterceptionEvent(interceptionEvent);
+  // Should be final.html as request.
+  await waitForInterceptionEventAndContinue("/final.html");
+  const interceptionEvent = await waitForInterceptionEvent("/final.html");
   testRunner.log('Modifying final.html\'s response after we receive response.');
   var body = '<html>\n<body>This content was rewritten!</body>\n</html>';
   var dummyHeaders = [
@@ -91,14 +78,24 @@
     });
   }
 
-  function waitForInterceptionEvent() {
-    return new Promise(resolve => {
-      session.protocol.Network.onRequestIntercepted(onInterception);
-      function onInterception(event) {
-        session.protocol.Network.removeEventListener(onInterception);
-        resolve(event);
-      }
-    });
+  async function waitForInterceptionEvent(expectedUrlSuffix) {
+    const event = await session.protocol.Network.onceRequestIntercepted();
+    const url = event.params.request.url;
+    if (!url.endsWith(expectedUrlSuffix)) {
+      testRunner.log(`FAIL: expected url ending with "${expectedUrlSuffix}", got "${url}"`);
+      testRunner.completeTest();
+      return null;
+    }
+    return event;
+  }
+
+  async function waitForInterceptionEventAndContinue(expectedUrlSuffix) {
+    const event = await waitForInterceptionEvent(expectedUrlSuffix);
+    if (!event)
+      return;
+    logInterceptionEvent(event);
+    testRunner.log(`Continuing a request to ${event.params.request.url}`);
+    session.protocol.Network.continueInterceptedRequest({interceptionId: event.params.interceptionId});
   }
 
   function waitForResponseReceivedEvent(fileName) {
diff --git a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/resources/interception-test.js b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/resources/interception-test.js
index d04a172..4921107 100644
--- a/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/resources/interception-test.js
+++ b/third_party/WebKit/LayoutTests/http/tests/inspector-protocol/resources/interception-test.js
@@ -79,7 +79,8 @@
         this._log(id, 'Auth required for ' + id);
         requestInterceptedDict[filename + '+Auth'](event);
         return;
-      } else if (event.params.hasOwnProperty('redirectUrl')) {
+      }
+      if (event.params.hasOwnProperty('redirectUrl')) {
         var errorReason = '';
         if (event.params.responseErrorReason)
           errorReason = event.params.responseErrorReason + ' ';
diff --git a/third_party/WebKit/LayoutTests/http/tests/security/deprecated-subresource-requests-expected.txt b/third_party/WebKit/LayoutTests/http/tests/security/deprecated-subresource-requests-expected.txt
index 187d2b76..24ce0f3 100644
--- a/third_party/WebKit/LayoutTests/http/tests/security/deprecated-subresource-requests-expected.txt
+++ b/third_party/WebKit/LayoutTests/http/tests/security/deprecated-subresource-requests-expected.txt
@@ -1,6 +1,6 @@
 CONSOLE WARNING: Subresource requests using legacy protocols (like `ftp:`) are blocked. Please deliver web-accessible resources over modern protocols like HTTPS. See https://www.chromestatus.com/feature/5709390967472128 for details.
 CONSOLE WARNING: Subresource requests whose URLs contain embedded credentials (e.g. `https://user:pass@host/`) are blocked. See https://www.chromestatus.com/feature/5669008342777856 for more details.
 This is a testharness.js-based test.
-PASS Untitled
+PASS deprecated-subresource-requests
 Harness: the test ran to completion.
 
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
index c56dc40c..43a474f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.txt
index cd19ca0..cb728bb4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-dark-rendering-expected.txt
@@ -31,10 +31,10 @@
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (16,550) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.txt
index fb3ca1b2..a011331 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/controls/video-overlay-cast-light-rendering-expected.txt
@@ -22,17 +22,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (16,60) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
 layer at (16,353) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,611.81) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
index 83be889..12a15e1e 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-controls-rendering-expected.txt
@@ -87,10 +87,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,524) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt
index d47aa30d..d0dceff 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-layer-crash-expected.txt
@@ -18,10 +18,10 @@
         LayoutBR {BR} at (210,337) size 0x0
 layer at (12,64) size 206x156
   LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)]
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150
     LayoutFlexibleBox {DIV} at (0,0) size 200x150
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
 layer at (12,225) size 206x156
   LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.txt
index a7dec7e..7981923 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/media/video-zoom-expected.txt
@@ -26,8 +26,8 @@
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
 layer at (17,49) size 480x360
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
-layer at (17,475) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,475) size 480x360 backgroundClip at (17,475) size 480x125 clip at (17,475) size 480x125
   LayoutFlexibleBox (relative positioned) {DIV} at (4.50,4.50) size 480x360
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
-layer at (17,475) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,475) size 480x360 backgroundClip at (17,475) size 480x125 clip at (17,475) size 480x125
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
diff --git a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
index 79f24383..98204a3 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/svg/zoom/page/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
index c56dc40c..43a474f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.txt
index cd19ca0..cb728bb4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-dark-rendering-expected.txt
@@ -31,10 +31,10 @@
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (16,550) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.txt
index fb3ca1b2..a011331 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/new-remote-playback-pipeline/media/controls/video-overlay-cast-light-rendering-expected.txt
@@ -22,17 +22,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (16,60) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
 layer at (16,353) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,611.81) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 365e81d..50af13c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
index c56dc40c..43a474f 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-dark-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-dark-rendering-expected.txt
index cd19ca0..cb728bb4 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-dark-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-dark-rendering-expected.txt
@@ -31,10 +31,10 @@
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (16,550) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-light-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-light-rendering-expected.txt
index fb3ca1b2..a011331 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-light-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/controls/video-overlay-cast-light-rendering-expected.txt
@@ -22,17 +22,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (16,60) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
 layer at (16,353) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,611.81) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index dee9f38c..e4f6394c 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,524) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt
index d47aa30d..d0dceff 100644
--- a/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/linux/virtual/video-surface-layer/media/video-layer-crash-expected.txt
@@ -18,10 +18,10 @@
         LayoutBR {BR} at (210,337) size 0x0
 layer at (12,64) size 206x156
   LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)]
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150
     LayoutFlexibleBox {DIV} at (0,0) size 200x150
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
 layer at (12,225) size 206x156
   LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
index ca1b998..254b536d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.txt
index 15f4528c..5ccb2b3 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -17,123 +17,111 @@
   LayoutVideo {VIDEO} at (0,0) size 320x240
 layer at (8,50) size 320x240
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,50) size 320x198
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,258) size 320x32 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 23.36x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 23.36x32
-        LayoutText {#text} at (0,9) size 24x14
-          text run at (0,9) width 24: "0:00"
-    LayoutSlider {INPUT} at (73.36,1) size 71.64x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71.64x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,258) size 32x32
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (63,274) size 108x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107.64x0
-layer at (81,273) size 72x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71.64x2 [bgcolor=#DADADA]
-layer at (203,274) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,273) size 25x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (81,273) size 72x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 72x2 [bgcolor=#5A5A5A]
-layer at (81,273) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,273) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,273) size 25x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (63,250) size 36x48 backgroundClip at (8,258) size 320x32 clip at (8,258) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,250) size 36x48 backgroundClip at (8,258) size 320x32 clip at (8,258) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,50) size 320x240
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,50) size 320x240
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,50) size 320x224 clip at (9,51) size 318x222
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (1px solid #D8D8D8) (1px solid #D1D1D1) (1px solid #BABABA) (1px solid #D1D1D1)]
+    LayoutFlexibleBox (anonymous) at (8,81.50) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,226) size 320x48
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31.14x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 32x18
+        text run at (0,15) width 32: "0:00"
+    LayoutBlockFlow {DIV} at (51.14,0) size 40.03x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 41x18
+        text run at (0,15) width 41: "/ 0:06"
+    LayoutBlockFlow {DIV} at (91.17,48) size 84.83x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,274) size 320x16
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#909090]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,274) size 288x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,270) size 12x12
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,274) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,274) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,274) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,294) size 320x240
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,294) size 320x198
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,502) size 320x32 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 23.36x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 23.36x32
-        LayoutText {#text} at (0,9) size 24x14
-          text run at (0,9) width 24: "0:00"
-    LayoutSlider {INPUT} at (73.36,1) size 71.64x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71.64x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,502) size 32x32
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (63,518) size 108x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107.64x0
-layer at (81,517) size 72x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71.64x2 [bgcolor=#DADADA]
-layer at (203,518) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,517) size 25x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (81,517) size 72x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 72x2 [bgcolor=#5A5A5A]
-layer at (81,517) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,517) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,517) size 25x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (63,494) size 36x48 backgroundClip at (8,502) size 320x32 clip at (8,502) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,494) size 36x48 backgroundClip at (8,502) size 320x32 clip at (8,502) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,294) size 320x240
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,294) size 320x240
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,294) size 320x224 clip at (9,295) size 318x222
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (1px solid #D8D8D8) (1px solid #D1D1D1) (1px solid #BABABA) (1px solid #D1D1D1)]
+    LayoutFlexibleBox (anonymous) at (8,81.50) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,470) size 320x48
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31.14x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 32x18
+        text run at (0,15) width 32: "0:00"
+    LayoutBlockFlow {DIV} at (51.14,0) size 40.03x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 41x18
+        text run at (0,15) width 41: "/ 0:06"
+    LayoutBlockFlow {DIV} at (91.17,48) size 84.83x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,518) size 320x16
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#909090]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,518) size 288x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,514) size 12x12
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,518) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,518) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,518) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,538) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,538) size 320x240
-layer at (8,538) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,538) size 320x240 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,538) size 320x198 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,746) size 320x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 23.36x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 23.36x32
-        LayoutText {#text} at (0,9) size 24x14
-          text run at (0,9) width 24: "0:00"
-    LayoutSlider {INPUT} at (73.36,1) size 71.64x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71.64x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,746) size 32x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (63,762) size 108x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107.64x0
-layer at (81,761) size 72x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71.64x2 [bgcolor=#DADADA]
-layer at (203,762) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,761) size 25x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (81,761) size 72x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 72x2 [bgcolor=#5A5A5A]
-layer at (81,761) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,761) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,761) size 25x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (63,738) size 36x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,738) size 36x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,538) size 320x240 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,538) size 320x240 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,538) size 320x224 backgroundClip at (8,538) size 320x62 clip at (9,539) size 318x61
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (1px solid #D8D8D8) (1px solid #D1D1D1) (1px solid #BABABA) (1px solid #D1D1D1)]
+    LayoutFlexibleBox (anonymous) at (8,81.50) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,714) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31.14x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 32x18
+        text run at (0,15) width 32: "0:00"
+    LayoutBlockFlow {DIV} at (51.14,0) size 40.03x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 41x18
+        text run at (0,15) width 41: "/ 0:06"
+    LayoutBlockFlow {DIV} at (91.17,48) size 84.83x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,762) size 320x16 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#909090]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,762) size 288x4 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,758) size 12x12 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,762) size 288x4 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,762) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,762) size 288x4 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.txt
index fa6de9d..ca694cf 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-dark-rendering-expected.txt
@@ -31,10 +31,10 @@
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,538) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,538) size 320x240
-layer at (8,538) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,538) size 320x240 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,538) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,538) size 320x240 backgroundClip at (8,538) size 320x62 clip at (8,538) size 320x62
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (16,546) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.txt
index d2b9613..e339a13 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/controls/video-overlay-cast-light-rendering-expected.txt
@@ -22,17 +22,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (16,58) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
-layer at (8,342) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,342) size 320x262 backgroundClip at (8,342) size 320x258 clip at (8,342) size 320x258
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,342) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,342) size 320x262 backgroundClip at (8,342) size 320x258 clip at (8,342) size 320x258
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
 layer at (16,350) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,608) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,607.81) size 320x261.81
-layer at (8,608) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,608) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,608) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,608) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
index 37e02d5..d1d5098 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-controls-rendering-expected.txt
@@ -87,10 +87,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,522) size 320x240
-layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt
index 2deba9e..273ce98 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-layer-crash-expected.txt
@@ -18,10 +18,10 @@
         LayoutBR {BR} at (210,334) size 0x0
 layer at (12,60) size 206x156
   LayoutVideo {VIDEO} at (4,18) size 206x156 [border: (3px solid #FF0000)]
-layer at (15,63) size 200x150
+layer at (15,63) size 200x150 backgroundClip at (65,101) size 100x75 clip at (65,101) size 100x75
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150
     LayoutFlexibleBox {DIV} at (0,0) size 200x150
-layer at (15,63) size 200x150
+layer at (15,63) size 200x150 backgroundClip at (65,101) size 100x75 clip at (65,101) size 100x75
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
 layer at (12,220) size 206x156
   LayoutVideo {VIDEO} at (4,178) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-poster-scale-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-poster-scale-expected.txt
index 544c47b..5c9cb4b 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-poster-scale-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-poster-scale-expected.txt
@@ -45,18 +45,18 @@
     LayoutFlexibleBox {DIV} at (0,0) size 76x103
 layer at (97,171) size 76x103
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 76x103
-layer at (11,284) size 50x320 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (11,284) size 50x320 backgroundClip at (11,284) size 50x316 clip at (11,284) size 50x316
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 50x320
     LayoutFlexibleBox {DIV} at (0,0) size 50x320
-layer at (11,284) size 50x320 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (11,284) size 50x320 backgroundClip at (11,284) size 50x316 clip at (11,284) size 50x316
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 50x320
-layer at (71,364) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (71,364) size 320x240 backgroundClip at (71,364) size 320x236 clip at (71,364) size 320x236
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (71,364) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (71,364) size 320x240 backgroundClip at (71,364) size 320x236 clip at (71,364) size 320x236
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
-layer at (401,554) size 320x50 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (401,554) size 320x50 backgroundClip at (401,554) size 320x46 clip at (401,554) size 320x46
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 320x50
     LayoutFlexibleBox {DIV} at (0,0) size 320x50
-layer at (401,554) size 320x50 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (401,554) size 320x50 backgroundClip at (401,554) size 320x46 clip at (401,554) size 320x46
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x50
diff --git a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-expected.txt
index a445a6c6..b504427 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/media/video-zoom-expected.txt
@@ -26,8 +26,8 @@
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
 layer at (17,47) size 480x360
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
-layer at (17,470) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,470) size 480x360 backgroundClip at (17,470) size 480x130 clip at (17,470) size 480x130
   LayoutFlexibleBox (relative positioned) {DIV} at (4.50,4.50) size 480x360
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
-layer at (17,470) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,470) size 480x360 backgroundClip at (17,470) size 480x130 clip at (17,470) size 480x130
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
diff --git a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-float-border-padding-expected.png b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-float-border-padding-expected.png
index c4849c16..becbb0d 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-float-border-padding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/mac/svg/zoom/page/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index f1e1691..8ec6bec 100644
--- a/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/mac/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,522) size 320x240
-layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,522) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,522) size 320x240 backgroundClip at (8,522) size 320x78 clip at (8,522) size 320x78
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
index 5ba393f..5272474d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.txt
index 6cf1ab8..74f2841 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-controls-with-cast-rendering-expected.txt
@@ -17,123 +17,111 @@
   LayoutVideo {VIDEO} at (0,0) size 320x240
 layer at (8,52) size 320x240
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,52) size 320x198
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,260) size 320x32 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 24x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 24x32
-        LayoutText {#text} at (0,8) size 24x15
-          text run at (0,8) width 24: "0:00"
-    LayoutSlider {INPUT} at (74,1) size 71x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,260) size 32x32
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (64,276) size 107x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107x0
-layer at (82,275) size 71x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71x2 [bgcolor=#DADADA]
-layer at (203,276) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,275) size 25x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (82,275) size 71x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 71x2 [bgcolor=#5A5A5A]
-layer at (82,275) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,275) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,275) size 25x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (64,252) size 36x48 backgroundClip at (8,260) size 320x32 clip at (8,260) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,252) size 36x48 backgroundClip at (8,260) size 320x32 clip at (8,260) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,52) size 320x240
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,52) size 320x240
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,52) size 320x224 clip at (10,54) size 316x220
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (2px outset #C0C0C0)]
+    LayoutFlexibleBox (anonymous) at (8,82) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,228) size 320x48
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 31x18
+        text run at (0,15) width 31: "0:00"
+    LayoutBlockFlow {DIV} at (51,0) size 39x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 39x18
+        text run at (0,15) width 39: "/ 0:06"
+    LayoutBlockFlow {DIV} at (90,48) size 86x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,276) size 320x16
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,276) size 288x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,272) size 12x12
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,276) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,276) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,276) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,297) size 320x240
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,297) size 320x198
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,505) size 320x32 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 24x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 24x32
-        LayoutText {#text} at (0,8) size 24x15
-          text run at (0,8) width 24: "0:00"
-    LayoutSlider {INPUT} at (74,1) size 71x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,505) size 32x32
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (64,521) size 107x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107x0
-layer at (82,520) size 71x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71x2 [bgcolor=#DADADA]
-layer at (203,521) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,520) size 25x2
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (82,520) size 71x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 71x2 [bgcolor=#5A5A5A]
-layer at (82,520) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,520) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,520) size 25x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (64,497) size 36x48 backgroundClip at (8,505) size 320x32 clip at (8,505) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,497) size 36x48 backgroundClip at (8,505) size 320x32 clip at (8,505) size 320x32
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,297) size 320x240
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,297) size 320x240
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,297) size 320x224 clip at (10,299) size 316x220
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (2px outset #C0C0C0)]
+    LayoutFlexibleBox (anonymous) at (8,82) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,473) size 320x48
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 31x18
+        text run at (0,15) width 31: "0:00"
+    LayoutBlockFlow {DIV} at (51,0) size 39x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 39x18
+        text run at (0,15) width 39: "/ 0:06"
+    LayoutBlockFlow {DIV} at (90,48) size 86x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,521) size 320x16
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,521) size 288x4
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,517) size 12x12
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,521) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,521) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,521) size 288x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
-    LayoutBlockFlow {DIV} at (0,208) size 320x32
-layer at (8,542) size 320x198 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x198
-layer at (8,750) size 320x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0 scrollHeight 40
-  LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x32 [bgcolor=#FAFAFA]
-    LayoutButton {INPUT} at (0,0) size 32x32
-    LayoutFlexibleBox {DIV} at (32,0) size 24x32 [color=#5A5A5A]
-      LayoutBlockFlow (anonymous) at (0,0) size 24x32
-        LayoutText {#text} at (0,8) size 24x15
-          text run at (0,8) width 24: "0:00"
-    LayoutSlider {INPUT} at (74,1) size 71x30
-      LayoutFlexibleBox {DIV} at (0,14) size 71x2
-    LayoutButton {INPUT} at (163,0) size 32x32
-    LayoutSlider {INPUT} at (213,1) size 25x30
-      LayoutFlexibleBox {DIV} at (0,14) size 25x2
-    LayoutButton {INPUT} at (288,0) size 32x32
-layer at (264,750) size 32x32 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutButton {INPUT} at (256,0) size 32x32
-layer at (64,766) size 107x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 107x0
-layer at (82,765) size 71x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 71x2 [bgcolor=#DADADA]
-layer at (203,766) size 61x0
-  LayoutBlockFlow (relative positioned) {DIV} at (-18,1) size 61x0
-layer at (221,765) size 25x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) {DIV} at (18,-1) size 25x2 [bgcolor=#DADADA]
-layer at (82,765) size 71x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 71x2 [bgcolor=#5A5A5A]
-layer at (82,765) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#4285F4]
-layer at (221,765) size 0x2
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 0x2 [bgcolor=#5A5A5A]
-layer at (221,765) size 25x2 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 1 {DIV} at (0,0) size 25x2 [bgcolor=#4285F4]
-layer at (64,742) size 36x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (0,-24) size 36x48
-layer at (228,742) size 36x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
-  LayoutBlockFlow (positioned) zI: 2 {DIV} at (25,-24) size 36x48
+    LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
+  LayoutFlexibleBox {DIV} at (0,0) size 320x240
+layer at (8,542) size 320x224 backgroundClip at (8,542) size 320x58 clip at (10,544) size 316x56
+  LayoutButton (relative positioned) {INPUT} at (0,0) size 320x224 [border: (2px outset #C0C0C0)]
+    LayoutFlexibleBox (anonymous) at (8,82) size 304x60
+      LayoutBlockFlow {DIV} at (122,0) size 60x60 [bgcolor=#FFFFFFE6]
+layer at (8,718) size 320x48 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutFlexibleBox (relative positioned) {DIV} at (0,176) size 320x48
+    LayoutBlockFlow {DIV} at (16,0) size 31x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 31x18
+        text run at (0,15) width 31: "0:00"
+    LayoutBlockFlow {DIV} at (51,0) size 39x48 [color=#FFFFFF]
+      LayoutText {#text} at (0,15) size 39x18
+        text run at (0,15) width 39: "/ 0:06"
+    LayoutBlockFlow {DIV} at (90,48) size 86x0
+    LayoutButton {INPUT} at (176,0) size 48x48
+    LayoutButton {INPUT} at (224,0) size 48x48
+    LayoutButton {INPUT} at (272,0) size 48x48
+layer at (8,766) size 320x16 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
+  LayoutSlider {INPUT} at (0,224) size 320x16 [color=#C4C4C4]
+    LayoutFlexibleBox {DIV} at (16,0) size 288x4
+layer at (24,766) size 288x4 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
+  LayoutBlockFlow (relative positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF4D]
+layer at (24,762) size 12x12 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
+  LayoutBlockFlow (relative positioned) {DIV} at (0,-4) size 12x12 [bgcolor=#FFFFFF]
+layer at (24,766) size 288x4 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4
+layer at (24,766) size 0x4
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 0x4 [bgcolor=#FFFFFF]
+layer at (24,766) size 288x4 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
+  LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-dark-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-dark-rendering-expected.txt
index a13b453b..349c1b9d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-dark-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-dark-rendering-expected.txt
@@ -31,10 +31,10 @@
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,542) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,542) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,542) size 320x240 backgroundClip at (8,542) size 320x58 clip at (8,542) size 320x58
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (16,550) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-light-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-light-rendering-expected.txt
index 32b4c728..b1b4ee1 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-light-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/controls/video-overlay-cast-light-rendering-expected.txt
@@ -22,17 +22,17 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 352x288
 layer at (16,60) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,345) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,345) size 320x262 backgroundClip at (8,345) size 320x255 clip at (8,345) size 320x255
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
 layer at (16,353) size 48x48
   LayoutButton (positioned) {INPUT} at (8,8) size 48x48
 layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,611.81) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x261.81
     LayoutFlexibleBox {DIV} at (0,0) size 320x261.81
-layer at (8,612) size 320x262 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,612) size 320x262 backgroundClip at (0,0) size 0x0 clip at (0,0) size 0x0
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x261.81
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
index 339bdb0b..07b7db4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-controls-rendering-expected.txt
@@ -87,10 +87,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,524) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt
index e1f1fdc..86c5cd83 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-layer-crash-expected.txt
@@ -18,10 +18,10 @@
         LayoutBR {BR} at (210,337) size 0x0
 layer at (12,64) size 206x156
   LayoutVideo {VIDEO} at (4,20) size 206x156 [border: (3px solid #FF0000)]
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 200x150
     LayoutFlexibleBox {DIV} at (0,0) size 200x150
-layer at (15,67) size 200x150
+layer at (15,67) size 200x150 backgroundClip at (65,105) size 100x75 clip at (65,105) size 100x75
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 200x150
 layer at (12,225) size 206x156
   LayoutVideo {VIDEO} at (4,181) size 206x156 [border: (3px solid #FF0000)]
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-poster-scale-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-poster-scale-expected.txt
index 9ebcf2df..a1ba6a48 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-poster-scale-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-poster-scale-expected.txt
@@ -45,18 +45,18 @@
     LayoutFlexibleBox {DIV} at (0,0) size 76x103
 layer at (97,172) size 76x103
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 76x103
-layer at (11,286) size 50x320 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (11,286) size 50x320 backgroundClip at (11,286) size 50x314 clip at (11,286) size 50x314
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 50x320
     LayoutFlexibleBox {DIV} at (0,0) size 50x320
-layer at (11,286) size 50x320 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (11,286) size 50x320 backgroundClip at (11,286) size 50x314 clip at (11,286) size 50x314
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 50x320
-layer at (71,366) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (71,366) size 320x240 backgroundClip at (71,366) size 320x234 clip at (71,366) size 320x234
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (71,366) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (71,366) size 320x240 backgroundClip at (71,366) size 320x234 clip at (71,366) size 320x234
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
-layer at (401,556) size 320x50 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (401,556) size 320x50 backgroundClip at (401,556) size 320x44 clip at (401,556) size 320x44
   LayoutFlexibleBox (relative positioned) {DIV} at (3,3) size 320x50
     LayoutFlexibleBox {DIV} at (0,0) size 320x50
-layer at (401,556) size 320x50 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (401,556) size 320x50 backgroundClip at (401,556) size 320x44 clip at (401,556) size 320x44
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x50
diff --git a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-expected.txt b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-expected.txt
index d30ad6d5..2378949d 100644
--- a/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/media/video-zoom-expected.txt
@@ -26,8 +26,8 @@
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
 layer at (17,49) size 480x360
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
-layer at (17,475) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,475) size 480x360 backgroundClip at (17,475) size 480x125 clip at (17,475) size 480x125
   LayoutFlexibleBox (relative positioned) {DIV} at (4.50,4.50) size 480x360
     LayoutFlexibleBox {DIV} at (0,0) size 480x360
-layer at (17,475) size 480x360 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (17,475) size 480x360 backgroundClip at (17,475) size 480x125 clip at (17,475) size 480x125
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 480x360
diff --git a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-float-border-padding-expected.png b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-float-border-padding-expected.png
index a014447..24df2d4 100644
--- a/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-float-border-padding-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/svg/zoom/page/zoom-svg-float-border-padding-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/WebKit/LayoutTests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 0f13c16..47aa870 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
index 630f45f9..c0621124 100644
--- a/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
+++ b/third_party/WebKit/LayoutTests/platform/win/virtual/video-surface-layer/media/video-controls-rendering-expected.txt
@@ -89,10 +89,10 @@
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 288x4 [bgcolor=#FFFFFF8A]
 layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
   LayoutVideo (positioned) {VIDEO} at (8,524) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox (relative positioned) {DIV} at (0,0) size 320x240
     LayoutFlexibleBox {DIV} at (0,0) size 320x240
-layer at (8,524) size 320x240 backgroundClip at (0,0) size 785x600 clip at (0,0) size 785x600
+layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutBlockFlow (positioned) {DIV} at (0,0) size 320x240
 layer at (8,524) size 320x240 backgroundClip at (8,524) size 320x76 clip at (8,524) size 320x76
   LayoutFlexibleBox {DIV} at (0,0) size 320x240
diff --git a/third_party/WebKit/LayoutTests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png b/third_party/WebKit/LayoutTests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
index 3ade83d3..4b3da3b 100644
--- a/third_party/WebKit/LayoutTests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
+++ b/third_party/WebKit/LayoutTests/platform/win7/virtual/scalefactor150/fast/hidpi/static/calendar-picker-appearance-expected.png
Binary files differ
diff --git a/third_party/WebKit/LayoutTests/resources/idlharness.js b/third_party/WebKit/LayoutTests/resources/idlharness.js
index 773d5528..bfb2582 100644
--- a/third_party/WebKit/LayoutTests/resources/idlharness.js
+++ b/third_party/WebKit/LayoutTests/resources/idlharness.js
@@ -70,6 +70,11 @@
 function minOverloadLength(overloads)
 //@{
 {
+    // "The value of the Function object’s “length” property is
+    // a Number determined as follows:
+    // ". . .
+    // "Return the length of the shortest argument list of the
+    // entries in S."
     if (!overloads.length) {
         return 0;
     }
@@ -365,7 +370,8 @@
 
     parsed_idls.forEach(function(parsed_idl)
     {
-        if (parsed_idl.partial && ["interface", "dictionary"].includes(parsed_idl.type))
+        if (parsed_idl.partial
+            && ["interface", "dictionary", "namespace"].includes(parsed_idl.type))
         {
             if (should_skip(parsed_idl.name))
             {
@@ -459,6 +465,10 @@
                 new IdlInterface(parsed_idl, /* is_callback = */ true, /* is_mixin = */ false);
             break;
 
+        case "namespace":
+            this.members[parsed_idl.name] = new IdlNamespace(parsed_idl);
+            break;
+
         default:
             throw parsed_idl.name + ": " + parsed_idl.type + " not yet supported";
         }
@@ -845,7 +855,8 @@
     {
         const originalExists = parsed_idl.name in this.members
             && (this.members[parsed_idl.name] instanceof IdlInterface
-                || this.members[parsed_idl.name] instanceof IdlDictionary);
+                || this.members[parsed_idl.name] instanceof IdlDictionary
+                || this.members[parsed_idl.name] instanceof IdlNamespace);
 
         let partialTestName = parsed_idl.name;
         if (!parsed_idl.untested) {
@@ -2255,15 +2266,13 @@
     // behavior is as follows . . ."
     assert_equals(typeof memberHolderObject[member.name], "function",
                   "property must be a function");
-    // "The value of the Function object’s “length” property is
-    // a Number determined as follows:
-    // ". . .
-    // "Return the length of the shortest argument list of the
-    // entries in S."
-    assert_equals(memberHolderObject[member.name].length,
-        minOverloadLength(this.members.filter(function(m) {
-            return m.type == "operation" && m.name == member.name;
-        })),
+
+    const ctors = this.members.filter(function(m) {
+        return m.type == "operation" && m.name == member.name;
+    });
+    assert_equals(
+        memberHolderObject[member.name].length,
+        minOverloadLength(ctors),
         "property has wrong .length");
 
     // Make some suitable arguments
@@ -3012,5 +3021,179 @@
 
 IdlTypedef.prototype = Object.create(IdlObject.prototype);
 
+/// IdlNamespace ///
+function IdlNamespace(obj)
+//@{
+{
+    this.name = obj.name;
+    this.extAttrs = obj.extAttrs;
+    this.untested = obj.untested;
+    /** A back-reference to our IdlArray. */
+    this.array = obj.array;
+
+    /** An array of IdlInterfaceMembers. */
+    this.members = obj.members.map(m => new IdlInterfaceMember(m));
+}
+//@}
+
+IdlNamespace.prototype = Object.create(IdlObject.prototype);
+
+IdlNamespace.prototype.do_member_operation_asserts = function (memberHolderObject, member, a_test)
+//@{
+{
+    var desc = Object.getOwnPropertyDescriptor(memberHolderObject, member.name);
+
+    assert_false("get" in desc, "property should not have a getter");
+    assert_false("set" in desc, "property should not have a setter");
+    assert_equals(
+        desc.writable,
+        !member.isUnforgeable,
+        "property should be writable if and only if not unforgeable");
+    assert_true(desc.enumerable, "property should be enumerable");
+    assert_equals(
+        desc.configurable,
+        !member.isUnforgeable,
+        "property should be configurable if and only if not unforgeable");
+
+    assert_equals(
+        typeof memberHolderObject[member.name],
+        "function",
+         "property must be a function");
+
+    assert_equals(
+        memberHolderObject[member.name].length,
+        minOverloadLength(this.members.filter(function(m) {
+            return m.type == "operation" && m.name == member.name;
+        })),
+        "operation has wrong .length");
+    a_test.done();
+}
+//@}
+
+IdlNamespace.prototype.test_member_operation = function(member)
+//@{
+{
+    if (!shouldRunSubTest(this.name)) {
+        return;
+    }
+    var args = member.arguments.map(function(a) {
+        var s = a.idlType.idlType;
+        if (a.variadic) {
+            s += '...';
+        }
+        return s;
+    }).join(", ");
+    var a_test = subsetTestByKey(
+        this.name,
+        async_test,
+        this.name + ' namespace: operation ' + member.name + '(' + args + ')');
+    a_test.step(function() {
+        assert_own_property(
+            self[this.name],
+            member.name,
+            'namespace object missing operation ' + format_value(member.name));
+
+        this.do_member_operation_asserts(self[this.name], member, a_test);
+    }.bind(this));
+};
+//@}
+
+IdlNamespace.prototype.test_member_attribute = function (member)
+//@{
+{
+    if (!shouldRunSubTest(this.name)) {
+        return;
+    }
+    var a_test = subsetTestByKey(
+        this.name,
+        async_test,
+        this.name + ' namespace: attribute ' + member.name);
+    a_test.step(function()
+    {
+        assert_own_property(
+            self[this.name],
+            member.name,
+            this.name + ' does not have property ' + format_value(member.name));
+
+        var desc = Object.getOwnPropertyDescriptor(self[this.name], member.name);
+        assert_equals(desc.set, undefined, "setter must be undefined for namespace members");
+        a_test.done();
+    }.bind(this));
+};
+//@}
+
+IdlNamespace.prototype.test = function ()
+//@{
+{
+    /**
+     * TODO(lukebjerring): Assert:
+     * - "Note that unlike interfaces or dictionaries, namespaces do not create types."
+     * - "Of the extended attributes defined in this specification, only the
+     *     [Exposed] and [SecureContext] extended attributes are applicable to namespaces."
+     * - "Namespaces must be annotated with the [Exposed] extended attribute."
+     */
+
+    for (const v of Object.values(this.members)) {
+        switch (v.type) {
+
+        case 'operation':
+            this.test_member_operation(v);
+            break;
+
+        case 'attribute':
+            this.test_member_attribute(v);
+            break;
+
+        default:
+            throw 'Invalid namespace member ' + v.name + ': ' + v.type + ' not supported';
+        }
+    };
+};
+//@}
+
 }());
+
+/**
+ * idl_test is a promise_test wrapper that handles the fetching of the IDL,
+ * avoiding repetitive boilerplate.
+ *
+ * @param {String|String[]} srcs Spec name(s) for source idl files (fetched from
+ *      /interfaces/{name}.idl).
+ * @param {String|String[]} deps Spec name(s) for dependency idl files (fetched
+ *      from /interfaces/{name}.idl). Order is important - dependencies from
+ *      each source will only be included if they're already know to be a
+ *      dependency (i.e. have already been seen).
+ * @param {Function} setup_func Function for extra setup of the idl_array, such
+ *      as adding objects. Do not call idl_array.test() in the setup; it is
+ *      called by this function (idl_test).
+ */
+function idl_test(srcs, deps, idl_setup_func, test_name) {
+    return promise_test(function (t) {
+        var idl_array = new IdlArray();
+        srcs = (srcs instanceof Array) ? srcs : [srcs] || [];
+        deps = (deps instanceof Array) ? deps : [deps] || [];
+        return Promise.all(
+            srcs.concat(deps).map(function(spec) {
+                return fetch('/interfaces/' + spec + '.idl').then(function(r) {
+                    return r.text();
+                });
+            }))
+            .then(function(idls) {
+                for (var i = 0; i < srcs.length; i++) {
+                    idl_array.add_idls(idls[i]);
+                }
+                for (var i = srcs.length; i < srcs.length + deps.length; i++) {
+                    idl_array.add_dependency_idls(idls[i]);
+                }
+            })
+            .then(function() {
+                return idl_setup_func(idl_array, t);
+            })
+            .then(function() { idl_array.test(); })
+            .catch(function (reason) {
+                idl_array.test(); // Test what we can.
+                return Promise.reject(reason || 'IDL setup failed.');
+            });
+    }, test_name);
+}
 // vim: set expandtab shiftwidth=4 tabstop=4 foldmarker=@{,@} foldmethod=marker:
diff --git a/third_party/WebKit/LayoutTests/resources/testdriver.js b/third_party/WebKit/LayoutTests/resources/testdriver.js
index bc86636..c9231d9 100644
--- a/third_party/WebKit/LayoutTests/resources/testdriver.js
+++ b/third_party/WebKit/LayoutTests/resources/testdriver.js
@@ -1,5 +1,6 @@
 (function() {
     "use strict";
+    var idCounter = 0;
 
     function getInViewCenterPoint(rect) {
         var left = Math.max(0, rect.left);
@@ -47,6 +48,41 @@
      */
     window.test_driver = {
         /**
+         * Trigger user interaction in order to grant additional privileges to
+         * a provided function.
+         *
+         * https://html.spec.whatwg.org/#triggered-by-user-activation
+         *
+         * @param {String} intent - a description of the action which much be
+         *                          triggered by user interaction
+         * @param {Function} action - code requiring escalated privileges
+         *
+         * @returns {Promise} fulfilled following user interaction and
+         *                    execution of the provided `action` function;
+         *                    rejected if interaction fails or the provided
+         *                    function throws an error
+         */
+        bless: function(intent, action) {
+            var button = document.createElement("button");
+            button.innerHTML = "This test requires user interaction.<br />" +
+                "Please click here to allow " + intent + ".";
+            button.id = "wpt-test-driver-bless-" + (idCounter += 1);
+            document.body.appendChild(button);
+
+            return new Promise(function(resolve, reject) {
+                    button.addEventListener("click", resolve);
+
+                    test_driver.click(button).catch(reject);
+                }).then(function() {
+                    button.remove();
+
+                    if (typeof action === "function") {
+                        return action();
+                    }
+                });
+        },
+
+        /**
          * Triggers a user-initiated click
          *
          * This matches the behaviour of the {@link
diff --git a/third_party/WebKit/LayoutTests/resources/testharness.js b/third_party/WebKit/LayoutTests/resources/testharness.js
index 9889795..fdd9820 100644
--- a/third_party/WebKit/LayoutTests/resources/testharness.js
+++ b/third_party/WebKit/LayoutTests/resources/testharness.js
@@ -213,12 +213,9 @@
     }
 
     WindowTestEnvironment.prototype.next_default_test_name = function() {
-        //Don't use document.title to work around an Opera bug in XHTML documents
-        var title = document.getElementsByTagName("title")[0];
-        var prefix = (title && title.firstChild && title.firstChild.data) || "Untitled";
         var suffix = this.name_counter > 0 ? " " + this.name_counter : "";
         this.name_counter++;
-        return prefix + suffix;
+        return get_title() + suffix;
     };
 
     WindowTestEnvironment.prototype.on_new_harness_properties = function(properties) {
@@ -288,7 +285,7 @@
     WorkerTestEnvironment.prototype.next_default_test_name = function() {
         var suffix = this.name_counter > 0 ? " " + this.name_counter : "";
         this.name_counter++;
-        return "Untitled" + suffix;
+        return get_title() + suffix;
     };
 
     WorkerTestEnvironment.prototype.on_new_harness_properties = function() {};
@@ -1000,6 +997,9 @@
 
     function assert_object_equals(actual, expected, description)
     {
+         assert(typeof actual === "object" && actual !== null, "assert_object_equals", description,
+                                                               "value is ${actual}, expected object",
+                                                               {actual: actual});
          //This needs to be improved a great deal
          function check_equal(actual, expected, stack)
          {
@@ -1833,6 +1833,15 @@
         }
         this.message_target.removeEventListener("message", this.message_handler);
         this.running = false;
+
+        // If remote context is cross origin assigning to onerror is not
+        // possible, so silently catch those errors.
+        try {
+          this.remote.onerror = null;
+        } catch (e) {
+          // Ignore.
+        }
+
         this.remote = null;
         this.message_target = null;
         if (this.doneResolve) {
@@ -2917,6 +2926,25 @@
         return undefined;
     }
 
+    /** Returns the <title> or filename or "Untitled" */
+    function get_title()
+    {
+        if ('document' in global_scope) {
+            //Don't use document.title to work around an Opera bug in XHTML documents
+            var title = document.getElementsByTagName("title")[0];
+            if (title && title.firstChild && title.firstChild.data) {
+                return title.firstChild.data;
+            }
+        }
+        if ('META_TITLE' in global_scope && META_TITLE) {
+            return META_TITLE;
+        }
+        if ('location' in global_scope) {
+            return location.pathname.substring(location.pathname.lastIndexOf('/') + 1, location.pathname.indexOf('.'));
+        }
+        return "Untitled";
+    }
+
     function supports_post_message(w)
     {
         var supports;
diff --git a/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box-expected.html b/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box-expected.html
new file mode 100644
index 0000000..c7786dba
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box-expected.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<div style="width:100px; height:100px; padding:10px; border:10px dashed black;">
+  <div style="width:100px; height:100px; background:green;"></div>
+</div>
diff --git a/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box.html b/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box.html
new file mode 100644
index 0000000..3451907
--- /dev/null
+++ b/third_party/WebKit/LayoutTests/svg/in-html/svg-clip-to-content-box.html
@@ -0,0 +1,4 @@
+<!DOCTYPE html>
+<svg style="width:100px; height:100px; padding:10px; border:10px dashed black;">
+  <rect style="x:-20px; y:-20px; width:140px; height:140px; fill:green;"/>
+</svg>
diff --git a/third_party/arcore-android-sdk/BUILD.gn b/third_party/arcore-android-sdk/BUILD.gn
index 9f54c602..417f8cd2f 100644
--- a/third_party/arcore-android-sdk/BUILD.gn
+++ b/third_party/arcore-android-sdk/BUILD.gn
@@ -10,26 +10,28 @@
   jar_path = "libarcore_client_c.jar"
 }
 
-source_set("libarcore_sdk") {
-  deps = [
-    ":libarcore_library",
-  ]
-  libs = [ "${root_out_dir}/libarcore_sdk_c_minimal.so" ]
-}
-
-copy("libarcore_library") {
-  if (current_cpu == "arm") {
-    sources = [
-      "libraries/android_arm/libarcore_sdk_c_minimal.so",
-    ]
-  } else if (current_cpu == "arm64") {
-    sources = [
-      "libraries/android_arm64/libarcore_sdk_c_minimal.so",
+if (!android_64bit_target_cpu || !build_apk_secondary_abi ||
+    current_toolchain == android_secondary_abi_toolchain) {
+  copy("libarcore_library") {
+    if (current_cpu == "arm") {
+      sources = [
+        "libraries/android_arm/libarcore_sdk_c_minimal.so",
+      ]
+    } else if (current_cpu == "arm64") {
+      sources = [
+        "libraries/android_arm64/libarcore_sdk_c_minimal.so",
+      ]
+    }
+    outputs = [
+      "${root_out_dir}/libarcore_sdk_c_minimal.so",
     ]
   }
-  outputs = [
-    "${root_out_dir}/libarcore_sdk_c_minimal.so",
-  ]
+} else {
+  group("libarcore_library_secondary_abi") {
+    public_deps = [
+      ":libarcore_library($android_secondary_abi_toolchain)",
+    ]
+  }
 }
 
 config("libarcore_config") {
diff --git a/third_party/arcore-android-sdk/README.chromium b/third_party/arcore-android-sdk/README.chromium
index 9b490e56..2595b40 100644
--- a/third_party/arcore-android-sdk/README.chromium
+++ b/third_party/arcore-android-sdk/README.chromium
@@ -26,4 +26,7 @@
  * https://github.com/google-ar/arcore-unity-sdk/blob/master/LICENSE
 
 Changes:
+2018-07-19 - Updated BUILD.gn to support secondary abi (the previous change for
+             arm64 support turned out to be insufficient) and removed the unused
+             libarcore_sdk target.
 2018-05-04 - Updated BUILD.gn to work properly for arm64.
diff --git a/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h b/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
index b770e668..19963c0 100644
--- a/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
+++ b/third_party/blink/public/platform/modules/service_worker/web_service_worker_network_provider.h
@@ -35,12 +35,9 @@
 
 #include "base/memory/scoped_refptr.h"
 #include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom-shared.h"
+#include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 
-namespace base {
-class SingleThreadTaskRunner;
-}
-
 namespace blink {
 
 class WebURLRequest;
@@ -78,7 +75,7 @@
   // if this doesn't provide a ServiceWorker specific URLLoader.
   virtual std::unique_ptr<WebURLLoader> CreateURLLoader(
       const WebURLRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+      std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle>) {
     return nullptr;
   }
 
diff --git a/third_party/blink/public/platform/platform.h b/third_party/blink/public/platform/platform.h
index e406f9f..ff0d114 100644
--- a/third_party/blink/public/platform/platform.h
+++ b/third_party/blink/public/platform/platform.h
@@ -101,7 +101,6 @@
 class WebCookieJar;
 class WebCrypto;
 class WebDatabaseObserver;
-class WebPlatformEventListener;
 class WebFileSystem;
 class WebGraphicsContext3DProvider;
 class WebIDBFactory;
@@ -631,18 +630,6 @@
 
   virtual const char* GetBrowserServiceName() const { return ""; }
 
-  // Platform events -----------------------------------------------------
-  // Device Orientation, Device Motion, Battery, Gamepad.
-
-  // Request the platform to start listening to the events of the specified
-  // type and notify the given listener (if not null) when there is an update.
-  virtual void StartListening(WebPlatformEventType type,
-                              WebPlatformEventListener* listener) {}
-
-  // Request the platform to stop listening to the specified event and no
-  // longer notify the listener, if any.
-  virtual void StopListening(WebPlatformEventType type) {}
-
   // This method converts from the supplied DOM code enum to the
   // embedder's DOM code value for the key pressed. |dom_code| values are
   // based on the value defined in
diff --git a/third_party/blink/public/platform/task_type.h b/third_party/blink/public/platform/task_type.h
index 18c083f8..4e26935 100644
--- a/third_party/blink/public/platform/task_type.h
+++ b/third_party/blink/public/platform/task_type.h
@@ -124,6 +124,9 @@
   // The task runner may be throttled.
   kMiscPlatformAPI = 22,
 
+  // Tasks used for DedicatedWorker's requestAnimationFrame.
+  kWorkerAnimation = 51,
+
   ///////////////////////////////////////
   // Not-speced tasks should use one of the following task types
   ///////////////////////////////////////
@@ -194,7 +197,7 @@
   kWorkerThreadTaskQueueV8 = 47,
   kWorkerThreadTaskQueueCompositor = 48,
 
-  kCount = 51,
+  kCount = 52,
 };
 
 }  // namespace blink
diff --git a/third_party/blink/public/platform/web_feature.mojom b/third_party/blink/public/platform/web_feature.mojom
index 331f8ec18..40516ff 100644
--- a/third_party/blink/public/platform/web_feature.mojom
+++ b/third_party/blink/public/platform/web_feature.mojom
@@ -1970,6 +1970,10 @@
   kPopupOpenWhileFileChooserOpened = 2509,
   kCookieStoreAPI = 2510,
   kFeaturePolicyJSAPI = 2511,
+  kV8RTCPeerConnection_GetTransceivers_Method = 2512,
+  kV8RTCPeerConnection_AddTransceiver_Method = 2513,
+  kV8RTCRtpTransceiver_Direction_AttributeGetter = 2514,
+  kV8RTCRtpTransceiver_Direction_AttributeSetter = 2515,
 
   // Add new features immediately above this line. Don't change assigned
   // numbers of any item, and don't reuse removed slots.
diff --git a/third_party/blink/public/platform/web_url_loader_factory.h b/third_party/blink/public/platform/web_url_loader_factory.h
index 72fee65..bf73e20 100644
--- a/third_party/blink/public/platform/web_url_loader_factory.h
+++ b/third_party/blink/public/platform/web_url_loader_factory.h
@@ -5,11 +5,10 @@
 #ifndef THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_LOADER_FACTORY_H_
 #define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_URL_LOADER_FACTORY_H_
 
-#include "base/memory/scoped_refptr.h"
+#include <memory>
 
-namespace base {
-class SingleThreadTaskRunner;
-}
+#include "base/memory/scoped_refptr.h"
+#include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 
 namespace blink {
 
@@ -26,7 +25,7 @@
   // the most appropriate URLLoaderFactory implementation.
   virtual std::unique_ptr<WebURLLoader> CreateURLLoader(
       const WebURLRequest&,
-      scoped_refptr<base::SingleThreadTaskRunner>) = 0;
+      std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle>) = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
index 6cf10ae..a3ef60fb 100644
--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl_test.cc
@@ -145,7 +145,9 @@
     EXPECT_TRUE(
         V8String(scope.GetIsolate(), "bogus!")
             ->Equals(
-                v8_exception->ToString(scope.GetContext()).ToLocalChecked()));
+                scope.GetContext(),
+                v8_exception->ToString(scope.GetContext()).ToLocalChecked())
+            .ToChecked());
   }
   {
     v8::Local<v8::Object> v8_object = v8::Object::New(scope.GetIsolate());
diff --git a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
index e1ec82b..4768bf10 100644
--- a/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
+++ b/third_party/blink/renderer/bindings/core/v8/referrer_script_info.cc
@@ -29,28 +29,31 @@
     return ReferrerScriptInfo();
   }
 
-  v8::Local<v8::Primitive> base_url_value = host_defined_options->Get(kBaseURL);
+  v8::Isolate* isolate = context->GetIsolate();
+  v8::Local<v8::Primitive> base_url_value =
+      host_defined_options->Get(isolate, kBaseURL);
   String base_url_string =
       ToCoreStringWithNullCheck(v8::Local<v8::String>::Cast(base_url_value));
   KURL base_url = base_url_string.IsEmpty() ? KURL() : KURL(base_url_string);
   DCHECK(base_url.IsNull() || base_url.IsValid());
 
   v8::Local<v8::Primitive> credentials_mode_value =
-      host_defined_options->Get(kCredentialsMode);
+      host_defined_options->Get(isolate, kCredentialsMode);
   auto credentials_mode = static_cast<network::mojom::FetchCredentialsMode>(
       credentials_mode_value->IntegerValue(context).ToChecked());
 
-  v8::Local<v8::Primitive> nonce_value = host_defined_options->Get(kNonce);
+  v8::Local<v8::Primitive> nonce_value =
+      host_defined_options->Get(isolate, kNonce);
   String nonce =
       ToCoreStringWithNullCheck(v8::Local<v8::String>::Cast(nonce_value));
 
   v8::Local<v8::Primitive> parser_state_value =
-      host_defined_options->Get(kParserState);
+      host_defined_options->Get(isolate, kParserState);
   ParserDisposition parser_state = static_cast<ParserDisposition>(
       parser_state_value->IntegerValue(context).ToChecked());
 
   v8::Local<v8::Primitive> referrer_policy_value =
-      host_defined_options->Get(kReferrerPolicy);
+      host_defined_options->Get(isolate, kReferrerPolicy);
   ReferrerPolicy referrer_policy = static_cast<ReferrerPolicy>(
       referrer_policy_value->IntegerValue(context).ToChecked());
 
@@ -68,25 +71,27 @@
 
   v8::Local<v8::Primitive> base_url_value =
       V8String(isolate, base_url_.GetString());
-  host_defined_options->Set(HostDefinedOptionsIndex::kBaseURL, base_url_value);
+  host_defined_options->Set(isolate, HostDefinedOptionsIndex::kBaseURL,
+                            base_url_value);
 
   v8::Local<v8::Primitive> credentials_mode_value =
       v8::Integer::NewFromUnsigned(isolate,
                                    static_cast<uint32_t>(credentials_mode_));
-  host_defined_options->Set(HostDefinedOptionsIndex::kCredentialsMode,
+  host_defined_options->Set(isolate, HostDefinedOptionsIndex::kCredentialsMode,
                             credentials_mode_value);
 
   v8::Local<v8::Primitive> nonce_value = V8String(isolate, nonce_);
-  host_defined_options->Set(HostDefinedOptionsIndex::kNonce, nonce_value);
+  host_defined_options->Set(isolate, HostDefinedOptionsIndex::kNonce,
+                            nonce_value);
 
   v8::Local<v8::Primitive> parser_state_value = v8::Integer::NewFromUnsigned(
       isolate, static_cast<uint32_t>(parser_state_));
-  host_defined_options->Set(HostDefinedOptionsIndex::kParserState,
+  host_defined_options->Set(isolate, HostDefinedOptionsIndex::kParserState,
                             parser_state_value);
 
   v8::Local<v8::Primitive> referrer_policy_value = v8::Integer::NewFromUnsigned(
       isolate, static_cast<uint32_t>(referrer_policy_));
-  host_defined_options->Set(HostDefinedOptionsIndex::kReferrerPolicy,
+  host_defined_options->Set(isolate, HostDefinedOptionsIndex::kReferrerPolicy,
                             referrer_policy_value);
 
   return host_defined_options;
diff --git a/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc b/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc
index f3702be4a..8433fcd 100644
--- a/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/script_wrappable_marking_visitor_test.cc
@@ -114,7 +114,8 @@
   v8::Local<v8::Value> wrapper =
       ToV8(object, scope.GetContext()->Global(), isolate);
   EXPECT_TRUE(wrapper->IsObject());
-  v8::Local<v8::Object> wrapper_object = wrapper->ToObject();
+  v8::Local<v8::Object> wrapper_object =
+      wrapper->ToObject(scope.GetContext()).ToLocalChecked();
   // V8 collects wrappers with unmodified maps (as they can be recreated
   // without loosing any data if needed). We need to create some property on
   // wrapper so V8 will not see it as unmodified.
diff --git a/third_party/blink/renderer/bindings/core/v8/source_location.cc b/third_party/blink/renderer/bindings/core/v8/source_location.cc
index 1b1c656..216a2176 100644
--- a/third_party/blink/renderer/bindings/core/v8/source_location.cc
+++ b/third_party/blink/renderer/bindings/core/v8/source_location.cc
@@ -89,7 +89,7 @@
 
   int script_id = message->GetScriptOrigin().ScriptID()->Value();
   if (!stack.IsEmpty() && stack->GetFrameCount() > 0) {
-    int top_script_id = stack->GetFrame(0)->GetScriptId();
+    int top_script_id = stack->GetFrame(isolate, 0)->GetScriptId();
     if (top_script_id == script_id)
       script_id = 0;
   }
diff --git a/third_party/blink/renderer/bindings/core/v8/to_v8_test.cc b/third_party/blink/renderer/bindings/core/v8/to_v8_test.cc
index 4e1ca0dc..022abeb 100644
--- a/third_party/blink/renderer/bindings/core/v8/to_v8_test.cc
+++ b/third_party/blink/renderer/bindings/core/v8/to_v8_test.cc
@@ -245,12 +245,14 @@
       result->Get(context, V8String(scope.GetIsolate(), "one"))
           .ToLocalChecked();
   EXPECT_TRUE(one->IsObject());
-  EXPECT_EQ(String("foo"), ToCoreString(one->ToString()));
+  EXPECT_EQ(String("foo"),
+            ToCoreString(one->ToString(context).ToLocalChecked()));
   v8::Local<v8::Value> two =
       result->Get(context, V8String(scope.GetIsolate(), "two"))
           .ToLocalChecked();
   EXPECT_TRUE(two->IsObject());
-  EXPECT_EQ(String("bar"), ToCoreString(two->ToString()));
+  EXPECT_EQ(String("bar"),
+            ToCoreString(two->ToString(context).ToLocalChecked()));
 }
 
 TEST(ToV8Test, stringVectorVector) {
diff --git a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
index 75f4589d1..9d3e53b 100644
--- a/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
+++ b/third_party/blink/renderer/bindings/core/v8/v8_script_runner.cc
@@ -280,7 +280,7 @@
                                          v8::MicrotasksScope::kRunMicrotasks);
     // ToCoreString here should be zero copy due to externalized string
     // unpacked.
-    String script_url = ToCoreString(script_name->ToString());
+    String script_url = ToCoreString(script_name->ToString(isolate));
     probe::ExecuteScript probe(context, script_url);
     result = script->Run(isolate->GetCurrentContext());
   }
diff --git a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
index bf8570f..b9d0df5 100644
--- a/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_adjuster.cc
@@ -88,6 +88,49 @@
     return true;
   return false;
 }
+
+bool ShouldForceLegacyLayout(const ComputedStyle& style,
+                             const Element& element) {
+  // Form controls are not supported yet.
+  if (element.ShouldForceLegacyLayout())
+    return true;
+
+  // TODO(layout-dev): Once LayoutNG handles inline content editable, we
+  // should get rid of following code fragment.
+  const Document& document = element.GetDocument();
+  if (style.UserModify() != EUserModify::kReadOnly || document.InDesignMode() ||
+      style.Display() == EDisplay::kWebkitBox ||
+      style.Display() == EDisplay::kWebkitInlineBox)
+    return true;
+
+  if (!RuntimeEnabledFeatures::LayoutNGBlockFragmentationEnabled()) {
+    // Disable NG for the entire subtree if we're establishing a block
+    // fragmentation context.
+    if (style.SpecifiesColumns() ||
+        (style.IsOverflowPaged() &&
+         &element != document.ViewportDefiningElement()))
+      return true;
+    if (document.Printing()) {
+      // This needs to be discovered on the root element.
+      DCHECK_EQ(element, document.documentElement());
+      return true;
+    }
+  }
+
+  // The custom container is laid out by the legacy engine. Its children may
+  // not establish new formatting contexts, so we need to protect against
+  // re-entering LayoutNG there.
+  if (style.Display() == EDisplay::kLayoutCustom ||
+      style.Display() == EDisplay::kInlineLayoutCustom)
+    return true;
+
+  // 'text-combine-upright' property is not supported yet.
+  if (style.HasTextCombine() && !style.IsHorizontalWritingMode())
+    return true;
+
+  return false;
+}
+
 }  // namespace
 
 static EDisplay EquivalentBlockDisplay(EDisplay display) {
@@ -668,40 +711,8 @@
   }
 
   if (RuntimeEnabledFeatures::LayoutNGEnabled() && !style.ForceLegacyLayout() &&
-      element) {
-    const Document& document = element->GetDocument();
-    if (element->ShouldForceLegacyLayout()) {
-      // Form controls are not supported yet.
-      style.SetForceLegacyLayout(true);
-    } else if (style.UserModify() != EUserModify::kReadOnly ||
-               document.InDesignMode() ||
-               style.Display() == EDisplay::kWebkitBox ||
-               style.Display() == EDisplay::kWebkitInlineBox) {
-      // TODO(layout-dev): Once LayoutNG handles inline content editable, we
-      // should get rid of following code fragment.
-      style.SetForceLegacyLayout(true);
-
-    } else if (!RuntimeEnabledFeatures::LayoutNGBlockFragmentationEnabled()) {
-      // Disable NG for the entire subtree if we're establishing a block
-      // fragmentation context.
-      if (style.SpecifiesColumns() ||
-          (style.IsOverflowPaged() &&
-           element != document.ViewportDefiningElement())) {
-        style.SetForceLegacyLayout(true);
-      } else if (document.Printing()) {
-        // This needs to be discovered on the root element.
-        DCHECK_EQ(element, document.documentElement());
-        style.SetForceLegacyLayout(true);
-      }
-    }
-    if (!style.ForceLegacyLayout()) {
-      // The custom container is laid out by the legacy engine. Its children may
-      // not establish new formatting contexts, so we need to protect against
-      // re-entering LayoutNG there.
-      if (style.Display() == EDisplay::kLayoutCustom ||
-          style.Display() == EDisplay::kInlineLayoutCustom)
-        style.SetForceLegacyLayout(true);
-    }
+      element && ShouldForceLegacyLayout(style, *element)) {
+    style.SetForceLegacyLayout(true);
   }
 
   // If intrinsically sized images or videos are disallowed by feature policy,
diff --git a/third_party/blink/renderer/core/css/style_engine_test.cc b/third_party/blink/renderer/core/css/style_engine_test.cc
index 53346fb3..09a2848 100644
--- a/third_party/blink/renderer/core/css/style_engine_test.cc
+++ b/third_party/blink/renderer/core/css/style_engine_test.cc
@@ -1455,4 +1455,21 @@
   GetDocument().View()->UpdateAllLifecyclePhases();
 }
 
+TEST_F(StyleEngineTest, GetComputedStyleOutsideFlatTreeCrash) {
+  GetDocument().body()->SetInnerHTMLFromString(R"HTML(
+    <style>
+      body, div { display: contents }
+      div::before { display: contents; content: "" }
+    </style>
+    <div id=inner></div>
+  )HTML");
+
+  GetDocument().documentElement()->CreateV0ShadowRootForTesting();
+  GetDocument().View()->UpdateAllLifecyclePhases();
+  GetDocument().body()->EnsureComputedStyle();
+  GetDocument().getElementById("inner")->SetInlineStyleProperty(
+      CSSPropertyColor, "blue");
+  GetDocument().View()->UpdateAllLifecyclePhases();
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index 54a70a4..2ca28ce 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -4143,9 +4143,14 @@
   if (is_before_or_after) {
     const ComputedStyle* layout_parent_style = style;
     if (style->Display() == EDisplay::kContents) {
-      Node* layout_parent = LayoutTreeBuilderTraversal::LayoutParent(*this);
-      DCHECK(layout_parent);
-      layout_parent_style = layout_parent->GetComputedStyle();
+      // TODO(futhark@chromium.org): Calling getComputedStyle for elements
+      // outside the flat tree should return empty styles, but currently we do
+      // not. See issue https://crbug.com/831568. We can replace the if-test
+      // with DCHECK(layout_parent) when that issue is fixed.
+      if (Node* layout_parent =
+              LayoutTreeBuilderTraversal::LayoutParent(*this)) {
+        layout_parent_style = layout_parent->GetComputedStyle();
+      }
     }
     return GetDocument().EnsureStyleResolver().PseudoStyleForElement(
         this, request, style, layout_parent_style);
diff --git a/third_party/blink/renderer/core/exported/web_frame_test.cc b/third_party/blink/renderer/core/exported/web_frame_test.cc
index ca50a72..0b2dc78 100644
--- a/third_party/blink/renderer/core/exported/web_frame_test.cc
+++ b/third_party/blink/renderer/core/exported/web_frame_test.cc
@@ -12769,16 +12769,18 @@
   ScopedFakePluginRegistry fake_plugins;
   FrameTestHelpers::WebViewHelper web_view_helper;
   web_view_helper.Initialize();
-  v8::HandleScope scope(v8::Isolate::GetCurrent());
+  v8::Isolate* isolate = v8::Isolate::GetCurrent();
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
+  v8::HandleScope scope(isolate);
   v8::Local<v8::Value> result =
       web_view_helper.LocalMainFrame()->ExecuteScriptAndReturnValue(
           WebScriptSource("navigator.plugins.length"));
-  EXPECT_NE(0, result->Int32Value());
+  EXPECT_NE(0, result->Int32Value(context).ToChecked());
   web_view_helper.GetWebView()->GetPage()->GetSettings().SetPluginsEnabled(
       false);
   result = web_view_helper.LocalMainFrame()->ExecuteScriptAndReturnValue(
       WebScriptSource("navigator.plugins.length"));
-  EXPECT_EQ(0, result->Int32Value());
+  EXPECT_EQ(0, result->Int32Value(context).ToChecked());
 }
 
 TEST_F(WebFrameTest, RecordSameDocumentNavigationToHistogram) {
diff --git a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
index f49ecea..438594b 100644
--- a/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
+++ b/third_party/blink/renderer/core/exported/web_shared_worker_impl.cc
@@ -318,7 +318,7 @@
                                     std::move(web_worker_fetch_context));
 
   ContentSecurityPolicy* content_security_policy =
-      main_script_loader_->ReleaseContentSecurityPolicy();
+      main_script_loader_->GetContentSecurityPolicy();
   ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
   if (!main_script_loader_->GetReferrerPolicy().IsNull()) {
     SecurityPolicy::ReferrerPolicyFromHeaderValue(
diff --git a/third_party/blink/renderer/core/exported/worker_shadow_page.cc b/third_party/blink/renderer/core/exported/worker_shadow_page.cc
index 56312ab..34b9901b 100644
--- a/third_party/blink/renderer/core/exported/worker_shadow_page.cc
+++ b/third_party/blink/renderer/core/exported/worker_shadow_page.cc
@@ -8,7 +8,6 @@
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/web/web_settings.h"
 #include "third_party/blink/renderer/core/exported/web_view_impl.h"
-#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
 #include "third_party/blink/renderer/core/loader/frame_load_request.h"
 #include "third_party/blink/renderer/platform/loader/fetch/substitute_data.h"
@@ -66,16 +65,6 @@
       nullptr, ResourceRequest(script_url), SubstituteData(buffer)));
 }
 
-void WorkerShadowPage::SetContentSecurityPolicyAndReferrerPolicy(
-    ContentSecurityPolicy* content_security_policy,
-    String referrer_policy) {
-  DCHECK(IsMainThread());
-  content_security_policy->SetOverrideURLForSelf(GetDocument()->Url());
-  GetDocument()->InitContentSecurityPolicy(content_security_policy);
-  if (!referrer_policy.IsNull())
-    GetDocument()->ParseAndSetReferrerPolicy(referrer_policy);
-}
-
 void WorkerShadowPage::DidFinishDocumentLoad() {
   DCHECK(IsMainThread());
   AdvanceState(State::kInitialized);
diff --git a/third_party/blink/renderer/core/exported/worker_shadow_page.h b/third_party/blink/renderer/core/exported/worker_shadow_page.h
index bde2d73f..7e639a0 100644
--- a/third_party/blink/renderer/core/exported/worker_shadow_page.h
+++ b/third_party/blink/renderer/core/exported/worker_shadow_page.h
@@ -18,7 +18,6 @@
 
 namespace blink {
 
-class ContentSecurityPolicy;
 class WebApplicationCacheHost;
 class WebApplicationCacheHostClient;
 class WebSettings;
@@ -28,7 +27,7 @@
 // Loading components are strongly associated with frames, but out-of-process
 // workers (i.e., SharedWorker and ServiceWorker) don't have frames. To enable
 // loading on such workers, this class provides a virtual frame (a.k.a, shadow
-// page) to them.
+// page) to them. Note that this class is now only used for main script loading.
 //
 // WorkerShadowPage lives on the main thread.
 //
@@ -64,9 +63,6 @@
   // complete.
   void Initialize(const KURL& script_url);
 
-  void SetContentSecurityPolicyAndReferrerPolicy(ContentSecurityPolicy*,
-                                                 String referrer_policy);
-
   // WebLocalFrameClient overrides.
   std::unique_ptr<WebApplicationCacheHost> CreateApplicationCacheHost(
       WebApplicationCacheHostClient*) override;
diff --git a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
index 8596b77e5..71b6440 100644
--- a/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
+++ b/third_party/blink/renderer/core/html/canvas/html_canvas_element.cc
@@ -420,14 +420,15 @@
         GetOrCreateCanvasResourceProvider(kPreferAcceleration)) {
       // Push a frame
       base::TimeTicks start_time = WTF::CurrentTimeTicks();
-      scoped_refptr<StaticBitmapImage> image =
-          canvas2d_bridge_->NewImageSnapshot(kPreferAcceleration);
+      scoped_refptr<CanvasResource> canvas_resource =
+          ResourceProvider()->ProduceFrame();
       FloatRect src_rect(0, 0, Size().Width(), Size().Height());
       dirty_rect_.Intersect(src_rect);
       IntRect int_dirty = EnclosingIntRect(dirty_rect_);
       SkIRect damage_rect = SkIRect::MakeXYWH(
           int_dirty.X(), int_dirty.Y(), int_dirty.Width(), int_dirty.Height());
-      frame_dispatcher_->DispatchFrameSync(image, start_time, damage_rect);
+      frame_dispatcher_->DispatchFrameSync(std::move(canvas_resource),
+                                           start_time, damage_rect);
       (void)start_time;
       (void)damage_rect;
       dirty_rect_ = FloatRect();
diff --git a/third_party/blink/renderer/core/layout/layout_box.cc b/third_party/blink/renderer/core/layout/layout_box.cc
index 9435e5f..5d8072d 100644
--- a/third_party/blink/renderer/core/layout/layout_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_box.cc
@@ -6038,10 +6038,10 @@
 }
 
 void LayoutBox::MutableForPainting::
-    SavePreviousContentBoxSizeAndLayoutOverflowRect() {
+    SavePreviousContentBoxRectAndLayoutOverflowRect() {
   auto& rare_data = GetLayoutBox().EnsureRareData();
-  rare_data.has_previous_content_box_size_and_layout_overflow_rect_ = true;
-  rare_data.previous_content_box_size_ = GetLayoutBox().ContentSize();
+  rare_data.has_previous_content_box_rect_and_layout_overflow_rect_ = true;
+  rare_data.previous_content_box_rect_ = GetLayoutBox().ContentBoxRect();
   rare_data.previous_physical_layout_overflow_rect_ =
       GetLayoutBox().PhysicalLayoutOverflowRect();
 }
diff --git a/third_party/blink/renderer/core/layout/layout_box.h b/third_party/blink/renderer/core/layout/layout_box.h
index f780aa5..896588a 100644
--- a/third_party/blink/renderer/core/layout/layout_box.h
+++ b/third_party/blink/renderer/core/layout/layout_box.h
@@ -70,7 +70,7 @@
         override_logical_height_(-1),
         has_override_containing_block_content_logical_width_(false),
         has_override_containing_block_content_logical_height_(false),
-        has_previous_content_box_size_and_layout_overflow_rect_(false),
+        has_previous_content_box_rect_and_layout_overflow_rect_(false),
         percent_height_container_(nullptr),
         snap_container_(nullptr),
         snap_areas_(nullptr) {}
@@ -84,7 +84,7 @@
 
   bool has_override_containing_block_content_logical_width_ : 1;
   bool has_override_containing_block_content_logical_height_ : 1;
-  bool has_previous_content_box_size_and_layout_overflow_rect_ : 1;
+  bool has_previous_content_box_rect_and_layout_overflow_rect_ : 1;
 
   LayoutUnit override_containing_block_content_logical_width_;
   LayoutUnit override_containing_block_content_logical_height_;
@@ -109,8 +109,8 @@
 
   // Used by BoxPaintInvalidator. Stores the previous content box size and
   // layout overflow rect after the last paint invalidation. They are valid if
-  // m_hasPreviousContentBoxSizeAndLayoutOverflowRect is true.
-  LayoutSize previous_content_box_size_;
+  // m_hasPreviousContentBoxRectAndLayoutOverflowRect is true.
+  LayoutRect previous_content_box_rect_;
   LayoutRect previous_physical_layout_overflow_rect_;
 
   // Used by LocalFrameView::ScrollIntoView. When the scroll is sequenced
@@ -1372,12 +1372,12 @@
     void SavePreviousSize() {
       GetLayoutBox().previous_size_ = GetLayoutBox().Size();
     }
-    void SavePreviousContentBoxSizeAndLayoutOverflowRect();
-    void ClearPreviousContentBoxSizeAndLayoutOverflowRect() {
+    void SavePreviousContentBoxRectAndLayoutOverflowRect();
+    void ClearPreviousContentBoxRectAndLayoutOverflowRect() {
       if (!GetLayoutBox().rare_data_)
         return;
       GetLayoutBox()
-          .rare_data_->has_previous_content_box_size_and_layout_overflow_rect_ =
+          .rare_data_->has_previous_content_box_rect_and_layout_overflow_rect_ =
           false;
     }
 
@@ -1395,17 +1395,17 @@
   }
 
   LayoutSize PreviousSize() const { return previous_size_; }
-  LayoutSize PreviousContentBoxSize() const {
+  LayoutRect PreviousContentBoxRect() const {
     return rare_data_ &&
                    rare_data_
-                       ->has_previous_content_box_size_and_layout_overflow_rect_
-               ? rare_data_->previous_content_box_size_
-               : PreviousSize();
+                       ->has_previous_content_box_rect_and_layout_overflow_rect_
+               ? rare_data_->previous_content_box_rect_
+               : LayoutRect(LayoutPoint(), PreviousSize());
   }
   LayoutRect PreviousPhysicalLayoutOverflowRect() const {
     return rare_data_ &&
                    rare_data_
-                       ->has_previous_content_box_size_and_layout_overflow_rect_
+                       ->has_previous_content_box_rect_and_layout_overflow_rect_
                ? rare_data_->previous_physical_layout_overflow_rect_
                : LayoutRect(LayoutPoint(), PreviousSize());
   }
diff --git a/third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h b/third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h
index dc01037..204d76fb 100644
--- a/third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h
+++ b/third_party/blink/renderer/core/layout/ng/geometry/ng_box_strut.h
@@ -108,6 +108,7 @@
   NGLineBoxStrut(const NGBoxStrut&, bool is_flipped_lines);
 
   LayoutUnit InlineSum() const { return inline_start + inline_end; }
+  LayoutUnit BlockSum() const { return line_over + line_under; }
 
   LayoutUnit inline_start;
   LayoutUnit inline_end;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
index 97202bc..dde3252 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.cc
@@ -119,10 +119,9 @@
         box.metrics = box.text_metrics = NGLineHeightMetrics();
       if (box.needs_box_fragment) {
         // Existing box states are wrapped before they were closed, and hence
-        // they do not have start edges.
-        box.has_start_edge = false;
-        box.margin_inline_start = LayoutUnit();
-        box.margin_border_padding_inline_start = LayoutUnit();
+        // they do not have start edges, unless 'box-decoration-break: clone'.
+        box.has_start_edge =
+            box.style->BoxDecorationBreak() == EBoxDecorationBreak::kClone;
       }
       DCHECK(box.pending_descendants.IsEmpty());
     }
@@ -155,18 +154,11 @@
 
   // Compute box properties regardless of needs_box_fragment since close tag may
   // also set needs_box_fragment.
-  box->padding = item_result.padding;
   box->has_start_edge = item_result.has_edge;
-  if (box->has_start_edge) {
-    box->margin_inline_start = item_result.margins.inline_start;
-    // The open tag item has the start margin+border+padding in |inline_size|.
-    box->margin_border_padding_inline_start = item_result.inline_size;
-  } else {
-    DCHECK_EQ(item_result.margins.inline_start, LayoutUnit());
-    DCHECK_EQ(item_result.inline_size, LayoutUnit());
-  }
-  box->border_padding_line_over = item_result.borders_paddings_line_over;
-  box->border_padding_line_under = item_result.borders_paddings_line_under;
+  box->margin_inline_start = item_result.margins.inline_start;
+  box->margin_inline_end = item_result.margins.inline_end;
+  box->borders = item_result.borders;
+  box->padding = item_result.padding;
   return box;
 }
 
@@ -183,7 +175,10 @@
 NGInlineBoxState* NGInlineLayoutStateStack::OnCloseTag(
     NGLineBoxFragmentBuilder::ChildList* line_box,
     NGInlineBoxState* box,
-    FontBaseline baseline_type) {
+    FontBaseline baseline_type,
+    bool has_end_edge) {
+  DCHECK_EQ(box, &stack_.back());
+  box->has_end_edge = has_end_edge;
   EndBoxState(box, line_box, baseline_type);
   // TODO(kojii): When the algorithm restarts from a break token, the stack may
   // underflow. We need either synthesize a missing box state, or push all
@@ -197,6 +192,9 @@
     FontBaseline baseline_type) {
   for (auto it = stack_.rbegin(); it != stack_.rend(); ++it) {
     NGInlineBoxState* box = &(*it);
+    if (!box->has_end_edge && box->needs_box_fragment &&
+        box->style->BoxDecorationBreak() == EBoxDecorationBreak::kClone)
+      box->has_end_edge = true;
     EndBoxState(box, line_box, baseline_type);
   }
 }
@@ -233,28 +231,14 @@
   needs_box_fragment = true;
 }
 
-void NGInlineBoxState::SetLineRightForBoxFragment(
-    const NGInlineItem& item,
-    const NGInlineItemResult& item_result) {
-  DCHECK(needs_box_fragment);
-  has_end_edge = item_result.has_edge;
-  if (has_end_edge) {
-    margin_inline_end = item_result.margins.inline_end;
-    // The close tag item has the end margin+border+padding in |inline_size|.
-    margin_border_padding_inline_end = item_result.inline_size;
-  } else {
-    DCHECK_EQ(item_result.margins.inline_end, LayoutUnit());
-    DCHECK_EQ(item_result.inline_size, LayoutUnit());
-  }
-}
-
 bool NGInlineBoxState::ParentNeedsBoxFragment(
     const NGInlineBoxState& parent) const {
   if (!parent.item)
     return false;
   // Below are the known cases where parent rect may not equal the union of
   // its child rects.
-  if (margin_inline_start || margin_inline_end)
+  if ((has_start_edge && margin_inline_start) ||
+      (has_end_edge && margin_inline_end))
     return true;
   // Inline box height is determined by font metrics, which can be different
   // from the height of its child atomic inline.
@@ -284,11 +268,12 @@
 
   // Extend the block direction of the box by borders and paddings. Inline
   // direction is already included into positions in NGLineBreaker.
-  NGLogicalOffset offset(LayoutUnit(),
-                         -metrics.ascent - box->border_padding_line_over);
-  NGLogicalSize size(LayoutUnit(), metrics.LineHeight() +
-                                       box->border_padding_line_over +
-                                       box->border_padding_line_under);
+  NGLogicalOffset offset(
+      LayoutUnit(),
+      -metrics.ascent - (box->borders.line_over + box->padding.line_over));
+  NGLogicalSize size(
+      LayoutUnit(),
+      metrics.LineHeight() + box->borders.BlockSum() + box->padding.BlockSum());
 
   unsigned fragment_end = line_box->size();
   DCHECK(box->item);
@@ -299,14 +284,16 @@
   if (box->has_start_edge) {
     box_data.has_line_left_edge = true;
     box_data.margin_line_left = box->margin_inline_start;
-    box_data.margin_border_padding_line_left =
-        box->margin_border_padding_inline_start;
+    box_data.margin_border_padding_line_left = box->margin_inline_start +
+                                               box->borders.inline_start +
+                                               box->padding.inline_start;
   }
   if (box->has_end_edge) {
     box_data.has_line_right_edge = true;
     box_data.margin_line_right = box->margin_inline_end;
-    box_data.margin_border_padding_line_right =
-        box->margin_border_padding_inline_end;
+    box_data.margin_border_padding_line_right = box->margin_inline_end +
+                                                box->borders.inline_end +
+                                                box->padding.inline_end;
   }
   if (IsRtl(style.Direction())) {
     std::swap(box_data.has_line_left_edge, box_data.has_line_right_edge);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
index bfd5b61..dd9e4438 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_box_state.h
@@ -57,14 +57,10 @@
   // is set.
   bool has_start_edge = false;
   bool has_end_edge = false;
-  NGLineBoxStrut padding;
-  // |CreateBoxFragment()| needs margin, border+padding, and the sum of them.
   LayoutUnit margin_inline_start;
   LayoutUnit margin_inline_end;
-  LayoutUnit margin_border_padding_inline_start;
-  LayoutUnit margin_border_padding_inline_end;
-  LayoutUnit border_padding_line_over;
-  LayoutUnit border_padding_line_under;
+  NGLineBoxStrut borders;
+  NGLineBoxStrut padding;
 
   Vector<NGPendingPositions> pending_descendants;
   bool include_used_fonts = false;
@@ -88,8 +84,6 @@
 
   // Create a box fragment for this box.
   void SetNeedsBoxFragment();
-  void SetLineRightForBoxFragment(const NGInlineItem&,
-                                  const NGInlineItemResult&);
 
   // In certain circumstances, the parent's rects is not a simple union of its
   // children fragments' rects, e.g., when children have margin. In such cases,
@@ -126,7 +120,8 @@
   // Pop a box state stack.
   NGInlineBoxState* OnCloseTag(NGLineBoxFragmentBuilder::ChildList*,
                                NGInlineBoxState*,
-                               FontBaseline);
+                               FontBaseline,
+                               bool has_end_edge = true);
 
   // Compute all the pending positioning at the end of a line.
   void OnEndPlaceItems(NGLineBoxFragmentBuilder::ChildList*, FontBaseline);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h
index 70ecc25c..619f9f95 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h
@@ -50,14 +50,11 @@
   // NGLayoutResult for atomic inline items.
   scoped_refptr<NGLayoutResult> layout_result;
 
-  // Margins and padding for atomic inline items and open/close tags.
+  // Margins, borders, and padding for atomic inline items and open tags.
   NGLineBoxStrut margins;
+  NGLineBoxStrut borders;
   NGLineBoxStrut padding;
 
-  // Borders/padding for open tags.
-  LayoutUnit borders_paddings_line_over;
-  LayoutUnit borders_paddings_line_under;
-
   // Has start/end edge for open/close tags.
   bool has_edge = false;
 
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index dc03fc2..b88db59 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -231,12 +231,10 @@
     } else if (item.Type() == NGInlineItem::kCloseTag) {
       if (!box->needs_box_fragment && item_result.inline_size)
         box->SetNeedsBoxFragment();
-      if (box->needs_box_fragment) {
-        box->SetLineRightForBoxFragment(item, item_result);
-        if (quirks_mode_)
-          box->EnsureTextMetrics(*item.Style(), baseline_type_);
-      }
-      box = box_states_->OnCloseTag(&line_box_, box, baseline_type_);
+      if (quirks_mode_ && box->needs_box_fragment)
+        box->EnsureTextMetrics(*item.Style(), baseline_type_);
+      box = box_states_->OnCloseTag(&line_box_, box, baseline_type_,
+                                    item.HasEndEdge());
     } else if (item.Type() == NGInlineItem::kAtomicInline) {
       box = PlaceAtomicInline(item, &item_result, *line_info);
     } else if (item.Type() == NGInlineItem::kListMarker) {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
index 62b2bc3..3bd7a29 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -913,19 +913,15 @@
       (style.HasBorder() || style.HasPadding() ||
        (style.HasMargin() && item_result->has_edge))) {
     bool is_flipped_lines = style.IsFlippedLinesWritingMode();
-    NGLineBoxStrut borders = NGLineBoxStrut(
+    item_result->borders = NGLineBoxStrut(
         ComputeBorders(constraint_space, style), is_flipped_lines);
     item_result->padding = NGLineBoxStrut(
         ComputePadding(constraint_space, style), is_flipped_lines);
-    item_result->borders_paddings_line_over =
-        borders.line_over + item_result->padding.line_over;
-    item_result->borders_paddings_line_under =
-        borders.line_under + item_result->padding.line_under;
     if (item_result->has_edge) {
       item_result->margins = NGLineBoxStrut(
           ComputeMarginsForSelf(constraint_space, style), is_flipped_lines);
       item_result->inline_size = item_result->margins.inline_start +
-                                 borders.inline_start +
+                                 item_result->borders.inline_start +
                                  item_result->padding.inline_start;
       return true;
     }
@@ -962,18 +958,16 @@
   if (item_result->has_edge) {
     DCHECK(item.Style());
     const ComputedStyle& style = *item.Style();
-    bool is_flipped_lines = style.IsFlippedLinesWritingMode();
-    item_result->margins = NGLineBoxStrut(
-        ComputeMarginsForSelf(constraint_space_, style), is_flipped_lines);
+    NGBoxStrut margins = ComputeMarginsForSelf(constraint_space_, style);
     NGBoxStrut borders = ComputeBorders(constraint_space_, style);
     NGBoxStrut paddings = ComputePadding(constraint_space_, style);
-    item_result->inline_size = item_result->margins.inline_end +
-                               borders.inline_end + paddings.inline_end;
+    item_result->inline_size =
+        margins.inline_end + borders.inline_end + paddings.inline_end;
     position_ += item_result->inline_size;
 
     if (!item_result->should_create_line_box &&
         (item_result->inline_size ||
-         (item_result->margins.inline_end && !in_line_height_quirks_mode_)))
+         (margins.inline_end && !in_line_height_quirks_mode_)))
       item_result->should_create_line_box = true;
   }
   DCHECK(item.GetLayoutObject() && item.GetLayoutObject()->Parent());
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_builder.h b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_builder.h
index 716d3ac..1177050 100644
--- a/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_builder.h
+++ b/third_party/blink/renderer/core/layout/ng/inline/ng_offset_mapping_builder.h
@@ -25,22 +25,6 @@
   STACK_ALLOCATED();
 
  public:
-  NGOffsetMappingBuilder();
-
-  // Append an identity offset mapping of the specified length with null
-  // annotation to the builder.
-  void AppendIdentityMapping(unsigned length);
-
-  // Append a collapsed offset mapping from the specified length with null
-  // annotation to the builder.
-  void AppendCollapsedMapping(unsigned length);
-
-  // TODO(xiaochengh): Add the following API when we start to fix offset mapping
-  // for text-transform.
-  // Append an expanded offset mapping to the specified length with null
-  // annotation to the builder.
-  // void AppendExpandedMapping(unsigned length);
-
   // A scope-like object that, mappings appended inside the scope are marked as
   // from the given source node. When multiple scopes nest, only the inner-most
   // scope is effective. Note that at most one of the nested scopes may have a
@@ -89,6 +73,22 @@
     DISALLOW_COPY_AND_ASSIGN(SourceNodeScope);
   };
 
+  NGOffsetMappingBuilder();
+
+  // Append an identity offset mapping of the specified length with null
+  // annotation to the builder.
+  void AppendIdentityMapping(unsigned length);
+
+  // Append a collapsed offset mapping from the specified length with null
+  // annotation to the builder.
+  void AppendCollapsedMapping(unsigned length);
+
+  // TODO(xiaochengh): Add the following API when we start to fix offset mapping
+  // for text-transform.
+  // Append an expanded offset mapping to the specified length with null
+  // annotation to the builder.
+  // void AppendExpandedMapping(unsigned length);
+
   // This function should only be called by NGInlineItemsBuilder during
   // whitespace collapsing, and in the case that the target string of the
   // currently held mapping:
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.cc b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
index 8dd92139..ac8766cd6 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.cc
@@ -343,6 +343,17 @@
   return GetFrame()->GetTaskRunner(TaskType::kNetworking);
 }
 
+std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle>
+FrameFetchContext::CreateResourceLoadingTaskRunnerHandle() {
+  if (IsDetached()) {
+    return scheduler::WebResourceLoadingTaskRunnerHandle::CreateUnprioritized(
+        FetchContext::GetLoadingTaskRunner());
+  }
+  return GetFrame()
+      ->GetFrameScheduler()
+      ->CreateResourceLoadingTaskRunnerHandle();
+}
+
 FrameScheduler* FrameFetchContext::GetFrameScheduler() const {
   if (IsDetached())
     return nullptr;
@@ -1365,7 +1376,6 @@
 
 std::unique_ptr<WebURLLoader> FrameFetchContext::CreateURLLoader(
     const ResourceRequest& request,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
     const ResourceLoaderOptions& options) {
   DCHECK(!IsDetached());
   WrappedResourceRequest webreq(request);
@@ -1400,18 +1410,19 @@
   if (url_loader_factory) {
     return Platform::Current()
         ->WrapURLLoaderFactory(url_loader_factory.PassInterface().PassHandle())
-        ->CreateURLLoader(webreq, task_runner);
+        ->CreateURLLoader(webreq, CreateResourceLoadingTaskRunnerHandle());
   }
 
   if (MasterDocumentLoader()->GetServiceWorkerNetworkProvider()) {
-    auto loader = MasterDocumentLoader()
-                      ->GetServiceWorkerNetworkProvider()
-                      ->CreateURLLoader(webreq, task_runner);
+    auto loader =
+        MasterDocumentLoader()
+            ->GetServiceWorkerNetworkProvider()
+            ->CreateURLLoader(webreq, CreateResourceLoadingTaskRunnerHandle());
     if (loader)
       return loader;
   }
-  return GetFrame()->GetURLLoaderFactory()->CreateURLLoader(webreq,
-                                                            task_runner);
+  return GetFrame()->GetURLLoaderFactory()->CreateURLLoader(
+      webreq, CreateResourceLoadingTaskRunnerHandle());
 }
 
 FetchContext* FrameFetchContext::Detach() {
diff --git a/third_party/blink/renderer/core/loader/frame_fetch_context.h b/third_party/blink/renderer/core/loader/frame_fetch_context.h
index 0eab67f6..c48424b 100644
--- a/third_party/blink/renderer/core/loader/frame_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/frame_fetch_context.h
@@ -166,7 +166,6 @@
 
   std::unique_ptr<WebURLLoader> CreateURLLoader(
       const ResourceRequest&,
-      scoped_refptr<base::SingleThreadTaskRunner>,
       const ResourceLoaderOptions&) override;
 
   ResourceLoadScheduler::ThrottlingPolicy InitialLoadThrottlingPolicy()
@@ -207,6 +206,8 @@
   // FetchContext overrides:
   FrameScheduler* GetFrameScheduler() const override;
   scoped_refptr<base::SingleThreadTaskRunner> GetLoadingTaskRunner() override;
+  std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle>
+  CreateResourceLoadingTaskRunnerHandle() override;
 
   // BaseFetchContext overrides:
   const FetchClientSettingsObject* GetFetchClientSettingsObject()
diff --git a/third_party/blink/renderer/core/loader/frame_loader.cc b/third_party/blink/renderer/core/loader/frame_loader.cc
index f1679c9..5e1175b 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.cc
+++ b/third_party/blink/renderer/core/loader/frame_loader.cc
@@ -770,19 +770,21 @@
     return;
 
   FrameLoadRequest request(passed_request);
-  request.GetResourceRequest().SetHasUserGesture(
-      Frame::HasTransientUserActivation(frame_));
+  ResourceRequest& resource_request = request.GetResourceRequest();
+  const KURL& url = resource_request.Url();
+  Document* origin_document = request.OriginDocument();
+
+  resource_request.SetHasUserGesture(Frame::HasTransientUserActivation(frame_));
 
   if (!PrepareRequestForThisFrame(request))
     return;
 
   // Form submissions appear to need their special-case of finding the target at
   // schedule rather than at fire.
-  Frame* target_frame = request.Form()
-                            ? nullptr
-                            : frame_->FindFrameForNavigation(
-                                  AtomicString(request.FrameName()), *frame_,
-                                  request.GetResourceRequest().Url());
+  Frame* target_frame =
+      request.Form() ? nullptr
+                     : frame_->FindFrameForNavigation(
+                           AtomicString(request.FrameName()), *frame_, url);
 
   // Downloads and navigations which specifically target a *new* frame
   // (e.g. because of a ctrl-click) should ignore the target.
@@ -808,11 +810,11 @@
 
   if (!target_frame && !request.FrameName().IsEmpty()) {
     if (policy == kNavigationPolicyDownload) {
-      Client()->DownloadURL(request.GetResourceRequest(),
+      Client()->DownloadURL(resource_request,
                             DownloadCrossOriginRedirects::kFollow);
       return;  // Navigation/download will be handled by the client.
     } else if (should_navigate_target_frame) {
-      request.GetResourceRequest().SetFrameType(
+      resource_request.SetFrameType(
           network::mojom::RequestContextFrameType::kAuxiliary);
       CreateWindowForRequest(request, *frame_);
       return;  // Navigation will be handled by the new frame/window.
@@ -826,37 +828,135 @@
     return;
   }
 
-  const KURL& url = request.GetResourceRequest().Url();
   if (frame_load_type == WebFrameLoadType::kStandard)
     frame_load_type = DetermineFrameLoadType(request);
 
   bool same_document_navigation =
       policy == kNavigationPolicyCurrentTab &&
-      ShouldPerformFragmentNavigation(request.Form(),
-                                      request.GetResourceRequest().HttpMethod(),
-                                      frame_load_type, url);
+      ShouldPerformFragmentNavigation(
+          request.Form(), resource_request.HttpMethod(), frame_load_type, url);
 
   // Perform same document navigation.
   if (same_document_navigation) {
     CommitSameDocumentNavigation(
-        request.GetResourceRequest().Url(), frame_load_type, nullptr,
-        request.ClientRedirect(), request.OriginDocument(),
+        url, frame_load_type, nullptr, request.ClientRedirect(),
+        origin_document,
         request.TriggeringEventInfo() != WebTriggeringEventInfo::kNotFromEvent);
     return;
   }
 
-  StartLoad(request, frame_load_type, policy, nullptr,
-            true /* check_with_client */, nullptr /* extra_data */,
-            WebNavigationTimings());
+  WebNavigationType navigation_type = DetermineNavigationType(
+      frame_load_type, resource_request.HttpBody() || request.Form(),
+      request.TriggeringEventInfo() != WebTriggeringEventInfo::kNotFromEvent);
+  resource_request.SetRequestContext(
+      DetermineRequestContextFromNavigationType(navigation_type));
+  resource_request.SetFrameType(
+      frame_->IsMainFrame() ? network::mojom::RequestContextFrameType::kTopLevel
+                            : network::mojom::RequestContextFrameType::kNested);
+
+  if (origin_document && origin_document->GetContentSecurityPolicy()
+                             ->ExperimentalFeaturesEnabled()) {
+    WebContentSecurityPolicyList initiator_csp =
+        origin_document->GetContentSecurityPolicy()
+            ->ExposeForNavigationalChecks();
+    resource_request.SetInitiatorCSP(initiator_csp);
+  }
+
+  // Record the latest requiredCSP value that will be used when sending this
+  // request.
+  RecordLatestRequiredCSP();
+
+  // TODO(arthursonzogni): 'frame-src' check is disabled on the
+  // renderer side, but is enforced on the browser side.
+  // See http://crbug.com/692595 for understanding why it
+  // can't be enforced on both sides instead.
+
+  // 'form-action' check in the frame that is navigating is disabled on the
+  // renderer side, but is enforced on the browser side instead.
+  // N.B. check in the frame that initiates the navigation stills occurs in
+  // blink and is not enforced on the browser-side.
+  // TODO(arthursonzogni) The 'form-action' check should be fully disabled
+  // in blink, except when the form submission doesn't trigger a navigation
+  // (i.e. javascript urls). Please see https://crbug.com/701749.
+
+  // Report-only CSP headers are checked in browser.
+  ModifyRequestForCSP(resource_request, origin_document);
+
+  DCHECK(Client()->HasWebView());
+  // Check for non-escaped new lines in the url.
+  if (url.PotentiallyDanglingMarkup() && url.ProtocolIsInHTTPFamily()) {
+    Deprecation::CountDeprecation(
+        frame_, WebFeature::kCanRequestURLHTTPContainingNewline);
+    if (RuntimeEnabledFeatures::RestrictCanRequestURLCharacterSetEnabled())
+      return;
+  }
+
+  policy = Client()->DecidePolicyForNavigation(
+      resource_request, origin_document, nullptr /* document_loader */,
+      navigation_type, policy,
+      frame_load_type == WebFrameLoadType::kReplaceCurrentItem,
+      request.ClientRedirect() == ClientRedirectPolicy::kClientRedirect,
+      request.TriggeringEventInfo(), request.Form(),
+      request.ShouldCheckMainWorldContentSecurityPolicy(),
+      request.GetBlobURLToken());
+
+  // 'beforeunload' can be fired above, which can detach this frame from inside
+  // the event handler.
+  if (!frame_->GetPage())
+    return;
+
+  if (policy == kNavigationPolicyIgnore) {
+    CHECK(resource_request.CheckForBrowserSideNavigation());
+    return;
+  }
+  DCHECK(policy == kNavigationPolicyCurrentTab ||
+         policy == kNavigationPolicyHandledByClient ||
+         policy == kNavigationPolicyHandledByClientForInitialHistory);
+
+  if (!CancelProvisionalLoaderForNewNavigation(policy))
+    return;
+
+  provisional_document_loader_ = CreateDocumentLoader(
+      resource_request, request, frame_load_type, navigation_type,
+      nullptr /* extra_data */, WebNavigationTimings());
+
+  if (request.Form())
+    Client()->DispatchWillSubmitForm(request.Form());
+
+  provisional_document_loader_->AppendRedirect(
+      provisional_document_loader_->Url());
+  frame_->GetFrameScheduler()->DidStartProvisionalLoad(frame_->IsMainFrame());
+
+  // TODO(ananta):
+  // We should get rid of the dependency on the DocumentLoader in consumers of
+  // the DidStartProvisionalLoad() notification.
+  Client()->DispatchDidStartProvisionalLoad(provisional_document_loader_,
+                                            resource_request);
+  DCHECK(provisional_document_loader_);
+
+  // TODO(dgozman): there is still a possibility of
+  // |kNavigationPolicyCurrentTab| when starting a navigation. Perhaps, we can
+  // just call CommitNavigation in this case instead, maybe from client side?
+  if (policy == kNavigationPolicyCurrentTab) {
+    provisional_document_loader_->StartLoading();
+    // This should happen after the request is sent, so that the state
+    // the inspector stored in the matching frameScheduledClientNavigation()
+    // is available while sending the request.
+    probe::frameClearedScheduledClientNavigation(frame_);
+  } else {
+    DCHECK(policy == kNavigationPolicyHandledByClient);
+    probe::frameScheduledClientNavigation(frame_);
+  }
 
   // TODO(csharrison): In M70 when UserActivation v2 should ship, we can remove
   // the check that the pages are equal, because consumption should not be
   // shared across pages.
-  const Document* origin_document = request.OriginDocument();
   if (frame_->IsMainFrame() && origin_document &&
       frame_->GetPage() == origin_document->GetPage()) {
     Frame::ConsumeTransientUserActivation(frame_);
   }
+
+  TakeObjectSnapshot();
 }
 
 void FrameLoader::CommitNavigation(
@@ -871,6 +971,7 @@
   CHECK(passed_request.TriggeringEventInfo() ==
         WebTriggeringEventInfo::kNotFromEvent);
   DCHECK(frame_->GetDocument());
+  DCHECK(Client()->HasWebView());
 
   if (in_stop_all_loaders_ || !frame_->IsNavigationAllowed() ||
       frame_->GetDocument()->PageDismissalEventBeingDispatched() !=
@@ -886,13 +987,13 @@
 
   // TODO(dgozman): figure out the better place for this check
   // to cancel lazy load both on start and commit. Perhaps
-  // CreateDocumentLoader() is a good one.
+  // CancelProvisionalLoaderForNewNavigation() is a good one.
   if (HTMLFrameOwnerElement* element = frame_->DeprecatedLocalOwner())
     element->CancelPendingLazyLoad();
 
   FrameLoadRequest request(passed_request);
-  request.GetResourceRequest().SetHasUserGesture(
-      Frame::HasTransientUserActivation(frame_));
+  ResourceRequest& resource_request = request.GetResourceRequest();
+  resource_request.SetHasUserGesture(Frame::HasTransientUserActivation(frame_));
 
   if (frame_load_type == WebFrameLoadType::kStandard)
     frame_load_type = DetermineFrameLoadType(request);
@@ -905,9 +1006,45 @@
   //   "cross-document" navigation, while it's actually same-document
   //   with regards to the last commit.
   // In this rare case, we intentionally proceed as cross-document.
-  StartLoad(request, frame_load_type, kNavigationPolicyCurrentTab, history_item,
-            false /* check_with_client */, std::move(extra_data),
-            navigation_timings);
+
+  RecordLatestRequiredCSP();
+
+  if (!CancelProvisionalLoaderForNewNavigation(kNavigationPolicyCurrentTab))
+    return;
+
+  // TODO(dgozman): navigation type should probably be passed by the caller.
+  // It seems incorrect to pass |false| for |have_event| and then use
+  // determined navigation type to update resource request.
+  WebNavigationType navigation_type = DetermineNavigationType(
+      frame_load_type, resource_request.HttpBody(), false /* have_event */);
+  // TODO(dgozman): should these fields be propagated from StartNavigation
+  // and/or set by the caller instead?
+  resource_request.SetRequestContext(
+      DetermineRequestContextFromNavigationType(navigation_type));
+  resource_request.SetFrameType(
+      frame_->IsMainFrame() ? network::mojom::RequestContextFrameType::kTopLevel
+                            : network::mojom::RequestContextFrameType::kNested);
+
+  // TODO(dgozman): get rid of provisional document loader and most of the code
+  // below. We should probably call DocumentLoader::CommitNavigation directly.
+  provisional_document_loader_ = CreateDocumentLoader(
+      resource_request, request, frame_load_type, navigation_type,
+      std::move(extra_data), navigation_timings);
+  provisional_document_loader_->AppendRedirect(
+      provisional_document_loader_->Url());
+  if (IsBackForwardLoadType(frame_load_type)) {
+    DCHECK(history_item);
+    provisional_document_loader_->SetItemForHistoryNavigation(history_item);
+  }
+
+  frame_->GetFrameScheduler()->DidStartProvisionalLoad(frame_->IsMainFrame());
+  Client()->DispatchDidStartProvisionalLoad(provisional_document_loader_,
+                                            resource_request);
+
+  provisional_document_loader_->StartLoading();
+  probe::frameClearedScheduledClientNavigation(frame_);
+
+  TakeObjectSnapshot();
 }
 
 mojom::CommitResult FrameLoader::CommitSameDocumentNavigation(
@@ -1336,54 +1473,6 @@
   return should_close;
 }
 
-NavigationPolicy FrameLoader::ShouldContinueForNavigationPolicy(
-    const ResourceRequest& request,
-    Document* origin_document,
-    const SubstituteData& substitute_data,
-    DocumentLoader* loader,
-    ContentSecurityPolicyDisposition
-        should_check_main_world_content_security_policy,
-    WebNavigationType type,
-    NavigationPolicy policy,
-    WebFrameLoadType frame_load_type,
-    bool is_client_redirect,
-    WebTriggeringEventInfo triggering_event_info,
-    HTMLFormElement* form,
-    mojom::blink::BlobURLTokenPtr blob_url_token,
-    bool check_with_client) {
-  // Don't ask if we already have the data.
-  if (substitute_data.IsValid())
-    return kNavigationPolicyCurrentTab;
-
-  // Check for non-escaped new lines in the url.
-  if (request.Url().PotentiallyDanglingMarkup() &&
-      request.Url().ProtocolIsInHTTPFamily()) {
-    Deprecation::CountDeprecation(
-        frame_, WebFeature::kCanRequestURLHTTPContainingNewline);
-    if (RuntimeEnabledFeatures::RestrictCanRequestURLCharacterSetEnabled())
-      return kNavigationPolicyIgnore;
-  }
-
-  if (!check_with_client) {
-    DCHECK_EQ(kNavigationPolicyCurrentTab, policy);
-    return policy;
-  }
-
-  bool replaces_current_history_item =
-      frame_load_type == WebFrameLoadType::kReplaceCurrentItem;
-  policy = Client()->DecidePolicyForNavigation(
-      request, origin_document, loader, type, policy,
-      replaces_current_history_item, is_client_redirect, triggering_event_info,
-      form, should_check_main_world_content_security_policy,
-      std::move(blob_url_token));
-  DCHECK(policy == kNavigationPolicyCurrentTab ||
-         policy == kNavigationPolicyIgnore ||
-         policy == kNavigationPolicyHandledByClient ||
-         policy == kNavigationPolicyHandledByClientForInitialHistory)
-      << policy;
-  return policy;
-}
-
 void FrameLoader::ClientDroppedNavigation() {
   if (!provisional_document_loader_ || provisional_document_loader_->DidStart())
     return;
@@ -1402,116 +1491,6 @@
   }
 }
 
-void FrameLoader::StartLoad(
-    FrameLoadRequest& frame_load_request,
-    WebFrameLoadType type,
-    NavigationPolicy navigation_policy,
-    HistoryItem* history_item,
-    bool check_with_client,
-    std::unique_ptr<WebDocumentLoader::ExtraData> extra_data,
-    const WebNavigationTimings& navigation_timings) {
-  DCHECK(Client()->HasWebView());
-  ResourceRequest& resource_request = frame_load_request.GetResourceRequest();
-  WebNavigationType navigation_type = DetermineNavigationType(
-      type, resource_request.HttpBody() || frame_load_request.Form(),
-      frame_load_request.TriggeringEventInfo() !=
-          WebTriggeringEventInfo::kNotFromEvent);
-  resource_request.SetRequestContext(
-      DetermineRequestContextFromNavigationType(navigation_type));
-  resource_request.SetFrameType(
-      frame_->IsMainFrame() ? network::mojom::RequestContextFrameType::kTopLevel
-                            : network::mojom::RequestContextFrameType::kNested);
-
-  Document* origin_document = frame_load_request.OriginDocument();
-  if (origin_document && origin_document->GetContentSecurityPolicy()
-                             ->ExperimentalFeaturesEnabled()) {
-    WebContentSecurityPolicyList initiator_csp =
-        origin_document->GetContentSecurityPolicy()
-            ->ExposeForNavigationalChecks();
-    resource_request.SetInitiatorCSP(initiator_csp);
-  }
-
-  // Record the latest requiredCSP value that will be used when sending this
-  // request.
-  RecordLatestRequiredCSP();
-
-  // TODO(arthursonzogni): 'frame-src' check is disabled on the
-  // renderer side, but is enforced on the browser side.
-  // See http://crbug.com/692595 for understanding why it
-  // can't be enforced on both sides instead.
-
-  // 'form-action' check in the frame that is navigating is disabled on the
-  // renderer side, but is enforced on the browser side instead.
-  // N.B. check in the frame that initiates the navigation stills occurs in
-  // blink and is not enforced on the browser-side.
-  // TODO(arthursonzogni) The 'form-action' check should be fully disabled
-  // in blink, except when the form submission doesn't trigger a navigation
-  // (i.e. javascript urls). Please see https://crbug.com/701749.
-
-  // Report-only CSP headers are checked in browser.
-  ModifyRequestForCSP(resource_request, origin_document);
-
-  navigation_policy = ShouldContinueForNavigationPolicy(
-      resource_request, origin_document, frame_load_request.GetSubstituteData(),
-      nullptr, frame_load_request.ShouldCheckMainWorldContentSecurityPolicy(),
-      navigation_type, navigation_policy, type,
-      frame_load_request.ClientRedirect() ==
-          ClientRedirectPolicy::kClientRedirect,
-      frame_load_request.TriggeringEventInfo(), frame_load_request.Form(),
-      frame_load_request.GetBlobURLToken(), check_with_client);
-
-  // 'beforeunload' can be fired above, which can detach this frame from inside
-  // the event handler.
-  if (!frame_->GetPage())
-    return;
-
-  if (navigation_policy == kNavigationPolicyIgnore) {
-    // This could only happen from StartNavigation, which must not clear
-    // CheckForBrowserSideNavigation bit.
-    CHECK(resource_request.CheckForBrowserSideNavigation());
-    return;
-  }
-
-  if (!CancelProvisionalLoaderForNewNavigation(navigation_policy))
-    return;
-
-  provisional_document_loader_ = CreateDocumentLoader(
-      resource_request, frame_load_request, type, navigation_type,
-      std::move(extra_data), navigation_timings);
-
-  if (frame_load_request.Form())
-    Client()->DispatchWillSubmitForm(frame_load_request.Form());
-
-  provisional_document_loader_->AppendRedirect(
-      provisional_document_loader_->Url());
-
-  if (IsBackForwardLoadType(type)) {
-    DCHECK(history_item);
-    provisional_document_loader_->SetItemForHistoryNavigation(history_item);
-  }
-
-  frame_->GetFrameScheduler()->DidStartProvisionalLoad(frame_->IsMainFrame());
-
-  // TODO(ananta):
-  // We should get rid of the dependency on the DocumentLoader in consumers of
-  // the DidStartProvisionalLoad() notification.
-  Client()->DispatchDidStartProvisionalLoad(provisional_document_loader_,
-                                            resource_request);
-  DCHECK(provisional_document_loader_);
-
-  if (navigation_policy == kNavigationPolicyCurrentTab) {
-    provisional_document_loader_->StartLoading();
-    // This should happen after the request is sent, so that the state
-    // the inspector stored in the matching frameScheduledClientNavigation()
-    // is available while sending the request.
-    probe::frameClearedScheduledClientNavigation(frame_);
-  } else {
-    probe::frameScheduledClientNavigation(frame_);
-  }
-
-  TakeObjectSnapshot();
-}
-
 bool FrameLoader::CancelProvisionalLoaderForNewNavigation(
     NavigationPolicy navigation_policy) {
   bool had_placeholder_client_document_loader =
diff --git a/third_party/blink/renderer/core/loader/frame_loader.h b/third_party/blink/renderer/core/loader/frame_loader.h
index 60752b59..cfd082b 100644
--- a/third_party/blink/renderer/core/loader/frame_loader.h
+++ b/third_party/blink/renderer/core/loader/frame_loader.h
@@ -65,7 +65,6 @@
 class Document;
 class DocumentLoader;
 class ExecutionContext;
-class HTMLFormElement;
 class LocalFrame;
 class Frame;
 class LocalFrameClient;
@@ -209,23 +208,6 @@
   void SaveScrollState();
   void RestoreScrollPositionAndViewState();
 
-  // The navigation should only be continued immediately in this frame if this
-  // returns NavigationPolicyCurrentTab.
-  NavigationPolicy ShouldContinueForNavigationPolicy(
-      const ResourceRequest&,
-      Document* origin_document,
-      const SubstituteData&,
-      DocumentLoader*,
-      ContentSecurityPolicyDisposition,
-      WebNavigationType,
-      NavigationPolicy,
-      WebFrameLoadType,
-      bool is_client_redirect,
-      WebTriggeringEventInfo,
-      HTMLFormElement*,
-      mojom::blink::BlobURLTokenPtr,
-      bool check_with_client);
-
   // Note: When a PlzNavigtate navigation is handled by the client, we will
   // have created a dummy provisional DocumentLoader, so this will return true
   // while the client handles the navigation.
@@ -257,14 +239,6 @@
   // Returns whether we should continue with new navigation.
   bool CancelProvisionalLoaderForNewNavigation(NavigationPolicy);
 
-  void StartLoad(FrameLoadRequest&,
-                 WebFrameLoadType,
-                 NavigationPolicy,
-                 HistoryItem*,
-                 bool check_with_client,
-                 std::unique_ptr<WebDocumentLoader::ExtraData>,
-                 const WebNavigationTimings&);
-
   void ClearInitialScrollState();
 
   void LoadInSameDocument(const KURL&,
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.cc b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
index 869e43e..4bd68cbb 100644
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.cc
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.cc
@@ -241,7 +241,6 @@
 
 std::unique_ptr<WebURLLoader> WorkerFetchContext::CreateURLLoader(
     const ResourceRequest& request,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
     const ResourceLoaderOptions& options) {
   CountUsage(WebFeature::kOffMainThreadFetch);
   WrappedResourceRequest wrapped(request);
@@ -264,19 +263,22 @@
   if (url_loader_factory) {
     return web_context_
         ->WrapURLLoaderFactory(url_loader_factory.PassInterface().PassHandle())
-        ->CreateURLLoader(wrapped, task_runner);
+        ->CreateURLLoader(wrapped, CreateResourceLoadingTaskRunnerHandle());
   }
 
   if (request.GetRequestContext() == WebURLRequest::kRequestContextScript) {
     if (!script_loader_factory_)
       script_loader_factory_ = web_context_->CreateScriptLoaderFactory();
-    if (script_loader_factory_)
-      return script_loader_factory_->CreateURLLoader(wrapped, task_runner);
+    if (script_loader_factory_) {
+      return script_loader_factory_->CreateURLLoader(
+          wrapped, CreateResourceLoadingTaskRunnerHandle());
+    }
   }
 
   if (!url_loader_factory_)
     url_loader_factory_ = web_context_->CreateURLLoaderFactory();
-  return url_loader_factory_->CreateURLLoader(wrapped, task_runner);
+  return url_loader_factory_->CreateURLLoader(
+      wrapped, CreateResourceLoadingTaskRunnerHandle());
 }
 
 blink::mojom::ControllerServiceWorkerMode
@@ -409,6 +411,12 @@
   return loading_task_runner_;
 }
 
+std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+WorkerFetchContext::CreateResourceLoadingTaskRunnerHandle() {
+  return scheduler::WebResourceLoadingTaskRunnerHandle::CreateUnprioritized(
+      GetLoadingTaskRunner());
+}
+
 SecurityContext& WorkerFetchContext::GetSecurityContext() const {
   return global_scope_->GetSecurityContext();
 }
diff --git a/third_party/blink/renderer/core/loader/worker_fetch_context.h b/third_party/blink/renderer/core/loader/worker_fetch_context.h
index 9fc1970..39dbdb3 100644
--- a/third_party/blink/renderer/core/loader/worker_fetch_context.h
+++ b/third_party/blink/renderer/core/loader/worker_fetch_context.h
@@ -75,7 +75,6 @@
   const SecurityOrigin* GetSecurityOrigin() const override;
   std::unique_ptr<WebURLLoader> CreateURLLoader(
       const ResourceRequest&,
-      scoped_refptr<base::SingleThreadTaskRunner>,
       const ResourceLoaderOptions&) override;
   void PrepareRequest(ResourceRequest&, RedirectType) override;
   blink::mojom::ControllerServiceWorkerMode IsControlledByServiceWorker()
@@ -116,6 +115,9 @@
                                ResourceRequest&) override;
   scoped_refptr<base::SingleThreadTaskRunner> GetLoadingTaskRunner() override;
 
+  std::unique_ptr<scheduler::WebResourceLoadingTaskRunnerHandle>
+  CreateResourceLoadingTaskRunnerHandle() override;
+
   SecurityContext& GetSecurityContext() const;
   WorkerSettings* GetWorkerSettings() const;
   WorkerContentSettingsClient* GetWorkerContentSettingsClient() const;
diff --git a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
index bb38c588..be9b52cb 100644
--- a/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
+++ b/third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.cc
@@ -45,13 +45,14 @@
 
 void OffscreenCanvas::Commit(scoped_refptr<CanvasResource> canvas_resource,
                              const SkIRect& damage_rect) {
-  if (!HasPlaceholderCanvas())
+  if (!HasPlaceholderCanvas() || !canvas_resource)
     return;
 
   base::TimeTicks commit_start_time = WTF::CurrentTimeTicks();
   current_frame_damage_rect_.join(damage_rect);
   GetOrCreateResourceDispatcher()->DispatchFrameSync(
-      canvas_resource->Bitmap(), commit_start_time, current_frame_damage_rect_);
+      std::move(canvas_resource), commit_start_time,
+      current_frame_damage_rect_);
   current_frame_damage_rect_ = SkIRect::MakeEmpty();
 }
 
@@ -387,11 +388,12 @@
   DCHECK(needs_push_frame_);
   needs_push_frame_ = false;
   current_frame_damage_rect_.join(damage_rect);
-  if (current_frame_damage_rect_.isEmpty())
+  if (current_frame_damage_rect_.isEmpty() || !canvas_resource)
     return;
   base::TimeTicks commit_start_time = WTF::CurrentTimeTicks();
-  GetOrCreateResourceDispatcher()->DispatchFrame(
-      canvas_resource->Bitmap(), commit_start_time, current_frame_damage_rect_);
+  GetOrCreateResourceDispatcher()->DispatchFrame(std::move(canvas_resource),
+                                                 commit_start_time,
+                                                 current_frame_damage_rect_);
   current_frame_damage_rect_ = SkIRect::MakeEmpty();
 }
 
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
index 0a67271..562dcfd 100644
--- a/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
+++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.cc
@@ -27,7 +27,7 @@
 
   if ((style.BackgroundLayers().ThisOrNextLayersUseContentBox() ||
        style.MaskLayers().ThisOrNextLayersUseContentBox()) &&
-      box_.PreviousContentBoxSize() != box_.ContentSize()) {
+      box_.PreviousContentBoxRect() != box_.ContentBoxRect()) {
     return PaintInvalidationReason::kGeometry;
   }
 
@@ -258,7 +258,7 @@
 }
 
 bool BoxPaintInvalidator::
-    NeedsToSavePreviousContentBoxSizeOrLayoutOverflowRect() {
+    NeedsToSavePreviousContentBoxRectOrLayoutOverflowRect() {
   // The LayoutView depends on the document element's layout overflow rect (see:
   // ViewBackgroundShouldFullyInvalidate) and needs to invalidate before the
   // document element invalidates. There are few document elements so the
@@ -267,6 +267,11 @@
   if (box_.IsDocumentElement())
     return true;
 
+  // Replaced elements are clipped to the content box thus we need to check
+  // for its size.
+  if (box_.IsLayoutReplaced())
+    return true;
+
   // Don't save old box geometries if the paint rect is empty because we'll
   // fully invalidate once the paint rect becomes non-empty.
   if (context_.fragment_data->VisualRect().IsEmpty())
@@ -294,12 +299,12 @@
 void BoxPaintInvalidator::SavePreviousBoxGeometriesIfNeeded() {
   box_.GetMutableForPainting().SavePreviousSize();
 
-  if (NeedsToSavePreviousContentBoxSizeOrLayoutOverflowRect()) {
+  if (NeedsToSavePreviousContentBoxRectOrLayoutOverflowRect()) {
     box_.GetMutableForPainting()
-        .SavePreviousContentBoxSizeAndLayoutOverflowRect();
+        .SavePreviousContentBoxRectAndLayoutOverflowRect();
   } else {
     box_.GetMutableForPainting()
-        .ClearPreviousContentBoxSizeAndLayoutOverflowRect();
+        .ClearPreviousContentBoxRectAndLayoutOverflowRect();
   }
 }
 
diff --git a/third_party/blink/renderer/core/paint/box_paint_invalidator.h b/third_party/blink/renderer/core/paint/box_paint_invalidator.h
index 8f94dba..120692d 100644
--- a/third_party/blink/renderer/core/paint/box_paint_invalidator.h
+++ b/third_party/blink/renderer/core/paint/box_paint_invalidator.h
@@ -43,7 +43,7 @@
 
   PaintInvalidationReason ComputePaintInvalidationReason();
 
-  bool NeedsToSavePreviousContentBoxSizeOrLayoutOverflowRect();
+  bool NeedsToSavePreviousContentBoxRectOrLayoutOverflowRect();
   void SavePreviousBoxGeometriesIfNeeded();
 
   const LayoutBox& box_;
diff --git a/third_party/blink/renderer/core/paint/embedded_content_painter.cc b/third_party/blink/renderer/core/paint/embedded_content_painter.cc
index 6945ceb..ca814c2d 100644
--- a/third_party/blink/renderer/core/paint/embedded_content_painter.cc
+++ b/third_party/blink/renderer/core/paint/embedded_content_painter.cc
@@ -45,8 +45,6 @@
            .ShouldPaint(local_paint_info, paint_offset))
     return;
 
-  LayoutRect border_rect(paint_offset, layout_embedded_content_.Size());
-
   if (layout_embedded_content_.HasBoxDecorationBackground() &&
       (local_paint_info.phase == PaintPhase::kForeground ||
        local_paint_info.phase == PaintPhase::kSelection)) {
@@ -69,20 +67,21 @@
     return;
 
   if (layout_embedded_content_.GetEmbeddedContentView()) {
-    base::Optional<ScopedPaintChunkProperties> scoped_paint_chunk_properties;
-    if (layout_embedded_content_.Style()->HasBorderRadius()) {
-      if (border_rect.IsEmpty())
-        return;
+    LayoutRect border_rect(paint_offset, layout_embedded_content_.Size());
+    if (border_rect.IsEmpty())
+      return;
 
-      const auto* fragment =
-          local_paint_info.FragmentToPaint(layout_embedded_content_);
-      if (!fragment)
-        return;
-      const auto* properties = fragment->PaintProperties();
-      DCHECK(properties && properties->InnerBorderRadiusClip());
+    base::Optional<ScopedPaintChunkProperties> scoped_paint_chunk_properties;
+    const auto* fragment =
+        local_paint_info.FragmentToPaint(layout_embedded_content_);
+    if (!fragment)
+      return;
+    const auto* properties = fragment->PaintProperties();
+
+    if (properties && properties->OverflowClip()) {
       scoped_paint_chunk_properties.emplace(
           local_paint_info.context.GetPaintController(),
-          properties->InnerBorderRadiusClip(), layout_embedded_content_,
+          properties->OverflowClip(), layout_embedded_content_,
           DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase));
     }
 
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 b1a44f0..00d6c247 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
@@ -915,7 +915,27 @@
   return !ToLocalFrame(parent_frame)->GetDocument()->Printing();
 }
 
+static bool NeedsOverflowClipForReplacedContents(
+    const LayoutReplaced& replaced) {
+  // <svg> may optionally allow overflow. If an overflow clip is required,
+  // always create it without checking whether the actual content overflows.
+  if (replaced.IsSVGRoot())
+    return ToLayoutSVGRoot(replaced).ShouldApplyViewportClip();
+
+  if (replaced.StyleRef().HasBorderRadius())
+    return true;
+
+  // Embedded objects are always sized to fit the content rect.
+  if (replaced.IsLayoutEmbeddedContent())
+    return false;
+
+  return true;
+}
+
 static bool NeedsOverflowClip(const LayoutObject& object) {
+  if (object.IsLayoutReplaced())
+    return NeedsOverflowClipForReplacedContents(ToLayoutReplaced(object));
+
   if (object.IsSVGViewportContainer() &&
       SVGLayoutSupport::IsOverflowHidden(object))
     return true;
@@ -943,16 +963,15 @@
 }
 
 static bool NeedsInnerBorderRadiusClip(const LayoutObject& object) {
-  if (!object.StyleRef().HasBorderRadius())
+  // Replaced elements don't have scrollbars thus needs no separate clip
+  // for the padding box (InnerBorderRadiusClip) and the client box (padding
+  // box minus scrollbar, OverflowClip).
+  // Furthermore, replaced elements clip to the content box instead,
+  if (object.IsLayoutReplaced())
     return false;
-  if (object.IsBox() && NeedsOverflowClip(object))
-    return true;
-  // LayoutReplaced applies inner border-radius clip on the foreground. This
-  // doesn't apply to SVGRoot which uses the NeedsOverflowClip() rule above.
-  // This includes iframes which applies border-radius clip on the subdocument.
-  if (object.IsLayoutReplaced() && !object.IsSVGRoot())
-    return true;
-  return false;
+
+  return object.StyleRef().HasBorderRadius() && object.IsBox() &&
+         NeedsOverflowClip(object);
 }
 
 static LayoutPoint VisualOffsetFromPaintOffsetRoot(
@@ -1007,18 +1026,8 @@
       const LayoutBox& box = ToLayoutBox(object_);
       ClipPaintPropertyNode::State state;
       state.local_transform_space = context_.current.transform;
-      if (box.IsLayoutReplaced()) {
-        // LayoutReplaced clips the foreground by rounded inner content box.
-        state.clip_rect = box.StyleRef().GetRoundedInnerBorderFor(
-            LayoutRect(context_.current.paint_offset, box.Size()),
-            LayoutRectOutsets(-(box.PaddingTop() + box.BorderTop()),
-                              -(box.PaddingRight() + box.BorderRight()),
-                              -(box.PaddingBottom() + box.BorderBottom()),
-                              -(box.PaddingLeft() + box.BorderLeft())));
-      } else {
-        state.clip_rect = box.StyleRef().GetRoundedInnerBorderFor(
-            LayoutRect(context_.current.paint_offset, box.Size()));
-      }
+      state.clip_rect = box.StyleRef().GetRoundedInnerBorderFor(
+          LayoutRect(context_.current.paint_offset, box.Size()));
       OnUpdateClip(properties_->UpdateInnerBorderRadiusClip(
           *context_.current.clip, std::move(state)));
     } else {
@@ -1051,6 +1060,15 @@
   if (block.HasControlClip() || block.ShouldPaintCarets())
     return false;
 
+  if (object.IsLayoutReplaced()) {
+    const LayoutReplaced& replaced = ToLayoutReplaced(object);
+    if (replaced.StyleRef().HasBorderRadius())
+      return false;
+    LayoutRect replaced_content_rect = replaced.ReplacedContentRect();
+    return replaced_content_rect.IsEmpty() ||
+           replaced.ContentBoxRect().Contains(replaced_content_rect);
+  }
+
   // We need OverflowClip for hit-testing if the clip rect excluding overlay
   // scrollbars is different from the normal clip rect.
   auto clip_rect = block.OverflowClipRect(LayoutPoint());
@@ -1069,7 +1087,26 @@
       ClipPaintPropertyNode::State state;
       state.local_transform_space = context_.current.transform;
 
-      if (object_.IsBox()) {
+      if (object_.IsLayoutReplaced()) {
+        const LayoutReplaced& replaced = ToLayoutReplaced(object_);
+        // LayoutReplaced clips the foreground by rounded content box.
+        state.clip_rect = replaced.StyleRef().GetRoundedInnerBorderFor(
+            LayoutRect(context_.current.paint_offset, replaced.Size()),
+            LayoutRectOutsets(
+                -(replaced.PaddingTop() + replaced.BorderTop()),
+                -(replaced.PaddingRight() + replaced.BorderRight()),
+                -(replaced.PaddingBottom() + replaced.BorderBottom()),
+                -(replaced.PaddingLeft() + replaced.BorderLeft())));
+        if (replaced.IsLayoutEmbeddedContent()) {
+          // Embedded objects are always sized to fit the content rect, but
+          // they could overflow by 1px due to pre-snapping. Adjust clip rect
+          // to match pre-snapped box as a special case.
+          FloatRect adjusted_rect = state.clip_rect.Rect();
+          adjusted_rect.SetSize(
+              FloatSize(replaced.ReplacedContentRect().Size()));
+          state.clip_rect.SetRect(adjusted_rect);
+        }
+      } else if (object_.IsBox()) {
         state.clip_rect = ToClipRect(ToLayoutBox(object_).OverflowClipRect(
             context_.current.paint_offset));
         state.clip_rect_excluding_overlay_scrollbars =
@@ -1612,6 +1649,10 @@
       box.GetMutableForPainting().SetNeedsPaintPropertyUpdate();
   }
 
+  if (box.IsLayoutReplaced() &&
+      box.PreviousContentBoxRect() != box.ContentBoxRect())
+    box.GetMutableForPainting().SetNeedsPaintPropertyUpdate();
+
   if (box.Size() == box.PreviousSize())
     return;
 
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 4a65eaa..5db643f5eb 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
@@ -4839,7 +4839,7 @@
   )HTML");
 
   const auto* properties = PaintPropertiesForElement("iframe");
-  const auto* border_radius_clip = properties->InnerBorderRadiusClip();
+  const auto* border_radius_clip = properties->OverflowClip();
   ASSERT_NE(nullptr, border_radius_clip);
   FloatSize radius(30, 30);
   EXPECT_EQ(FloatRoundedRect(FloatRect(28, 28, 200, 200), radius, radius,
@@ -4847,7 +4847,7 @@
             border_radius_clip->ClipRect());
   EXPECT_EQ(DocContentClip(), border_radius_clip->Parent());
   EXPECT_EQ(DocPreTranslation(), border_radius_clip->LocalTransformSpace());
-  EXPECT_EQ(nullptr, properties->OverflowClip());
+  EXPECT_EQ(nullptr, properties->InnerBorderRadiusClip());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, NoPropertyForSVGTextWithReflection) {
@@ -4866,7 +4866,7 @@
   )HTML");
 
   const auto* properties = PaintPropertiesForElement("img");
-  const auto* border_radius_clip = properties->InnerBorderRadiusClip();
+  const auto* border_radius_clip = properties->OverflowClip();
   ASSERT_NE(nullptr, border_radius_clip);
   FloatSize radius(20, 20);
   EXPECT_EQ(FloatRoundedRect(FloatRect(18, 18, 50, 50), radius, radius, radius,
@@ -4874,7 +4874,7 @@
             border_radius_clip->ClipRect());
   EXPECT_EQ(DocContentClip(), border_radius_clip->Parent());
   EXPECT_EQ(DocPreTranslation(), border_radius_clip->LocalTransformSpace());
-  EXPECT_EQ(nullptr, properties->OverflowClip());
+  EXPECT_EQ(nullptr, properties->InnerBorderRadiusClip());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, FrameClipWhenPrinting) {
@@ -5504,7 +5504,7 @@
   ToLayoutImage(GetLayoutObjectByElementId("img"))
       ->UpdateShouldInvertColorForTest(false);
   GetDocument().View()->UpdateAllLifecyclePhases();
-  EXPECT_EQ(nullptr, PaintPropertiesForElement("img"));
+  EXPECT_EQ(nullptr, PaintPropertiesForElement("img")->Filter());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest, LayeredImageWithInvertFilter) {
@@ -5537,7 +5537,7 @@
   ToLayoutImage(GetLayoutObjectByElementId("img"))
       ->UpdateShouldInvertColorForTest(false);
   GetDocument().View()->UpdateAllLifecyclePhases();
-  EXPECT_EQ(nullptr, PaintPropertiesForElement("img"));
+  EXPECT_EQ(nullptr, PaintPropertiesForElement("img")->Filter());
 }
 
 TEST_P(PaintPropertyTreeBuilderTest,
@@ -5594,4 +5594,44 @@
   EXPECT_EQ(LayoutPoint(100, 85), paint_offset("float-right-rtl-vlr"));
 }
 
+TEST_P(PaintPropertyTreeBuilderTest, ClipInvalidationForReplacedElement) {
+  // This test verifies clip nodes are correctly updated in response to
+  // content box mutation.
+  SetBodyInnerHTML(R"HTML(
+    <style>
+    img {
+      box-sizing: border-box;
+      width: 8px;
+      height: 8px;
+      object-fit: none;
+    }
+    </style>
+    <!-- An image of 10x10 white pixels. -->
+    <img id="target" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAA
+        AAKCAIAAAACUFjqAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gcVABQvx8CBmA
+        AAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAFUlEQVQY02P
+        8//8/A27AxIAXjFRpAKXjAxH/0Dm5AAAAAElFTkSuQmCC"/>
+  )HTML");
+
+  {
+    const auto* properties = PaintPropertiesForElement("target");
+    ASSERT_TRUE(properties);
+    ASSERT_TRUE(properties->OverflowClip());
+    EXPECT_EQ(FloatRect(8, 8, 8, 8),
+              properties->OverflowClip()->ClipRect().Rect());
+  }
+
+  GetDocument().getElementById("target")->setAttribute(
+      HTMLNames::styleAttr, "padding: 1px 2px 3px 4px;");
+  GetDocument().View()->UpdateAllLifecyclePhases();
+
+  {
+    const auto* properties = PaintPropertiesForElement("target");
+    ASSERT_TRUE(properties);
+    ASSERT_TRUE(properties->OverflowClip());
+    EXPECT_EQ(FloatRect(12, 9, 2, 4),
+              properties->OverflowClip()->ClipRect().Rect());
+  }
+}
+
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/paint/replaced_painter.cc b/third_party/blink/renderer/core/paint/replaced_painter.cc
index af26f37..820d3ce 100644
--- a/third_party/blink/renderer/core/paint/replaced_painter.cc
+++ b/third_party/blink/renderer/core/paint/replaced_painter.cc
@@ -90,10 +90,10 @@
                 fragment->ContentsProperties(), layout_replaced_,
                 DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase));
           } else if (layout_replaced_.Style()->HasBorderRadius()) {
-            DCHECK(paint_properties->InnerBorderRadiusClip());
+            DCHECK(paint_properties->OverflowClip());
             chunk_properties.emplace(
                 local_paint_info.context.GetPaintController(),
-                paint_properties->InnerBorderRadiusClip(), layout_replaced_,
+                paint_properties->OverflowClip(), layout_replaced_,
                 DisplayItem::PaintPhaseToDrawingType(local_paint_info.phase));
           }
         }
diff --git a/third_party/blink/renderer/core/script/html_parser_script_runner.cc b/third_party/blink/renderer/core/script/html_parser_script_runner.cc
index 8fa3c5aa..7bc37e8 100644
--- a/third_party/blink/renderer/core/script/html_parser_script_runner.cc
+++ b/third_party/blink/renderer/core/script/html_parser_script_runner.cc
@@ -185,19 +185,72 @@
   return ParserBlockingScript()->IsReady();
 }
 
-// This has two callers and corresponds to different concepts in the spec:
-// - When called from executeParsingBlockingScripts(), this corresponds to some
-//   steps of the "Otherwise" Clause of 'An end tag whose tag name is "script"'
-//   [scriptEndTag]
-//   https://html.spec.whatwg.org/multipage/parsing.html#scriptEndTag
-// - When called from executeScriptsWaitingForParsing(), this corresponds
-//   [ESB]
-//   https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block
-//   and thus currently this function does more than specced.
-// TODO(hiroshige): Make the spec and implementation consistent.
-void HTMLParserScriptRunner::ExecutePendingScriptAndDispatchEvent(
-    PendingScript* pending_script,
-    ScriptStreamer::Type pending_script_type) {
+// Corresponds to some steps of the "Otherwise" Clause of 'An end tag whose
+// tag name is "script"'
+// https://html.spec.whatwg.org/multipage/parsing.html#scriptEndTag
+void HTMLParserScriptRunner::
+    ExecutePendingParserBlockingScriptAndDispatchEvent() {
+  // Stop watching loads before executeScript to prevent recursion if the script
+  // reloads itself.
+  // TODO(kouhei): Consider merging this w/ pendingScript->dispose() after the
+  // if block.
+  // TODO(kouhei, hiroshige): Consider merging this w/ the code clearing
+  // |parser_blocking_script_| below.
+  PendingScript* pending_script = parser_blocking_script_;
+  pending_script->StopWatchingForLoad();
+
+  if (!IsExecutingScript()) {
+    // TODO(kouhei, hiroshige): Investigate why we need checkpoint here.
+    Microtask::PerformCheckpoint(V8PerIsolateData::MainThreadIsolate());
+    // The parser cannot be unblocked as a microtask requested another
+    // resource
+    if (!document_->IsScriptExecutionReady())
+      return;
+  }
+
+  // <spec step="B.1">Let the script be the pending
+  // parsing-blocking script. There is no longer a pending parsing-blocking
+  // script.</spec>
+  parser_blocking_script_ = nullptr;
+
+  {
+    // <spec step="B.7">Increment the parser's script
+    // nesting level by one (it should be zero before this step, so this sets it
+    // to one).</spec>
+    HTMLParserReentryPermit::ScriptNestingLevelIncrementer
+        nesting_level_incrementer =
+            reentry_permit_->IncrementScriptNestingLevel();
+
+    // TODO(hiroshige): Remove IgnoreDestructiveWriteCountIncrementer here,
+    // according to the spec. After https://crbug.com/721914 is resolved,
+    // |document_| is equal to the element's context document used in
+    // PendingScript::ExecuteScriptBlockInternal(), and thus this can be removed
+    // more easily.
+    IgnoreDestructiveWriteCountIncrementer
+        ignore_destructive_write_count_incrementer(document_);
+
+    // <spec step="B.8">Execute the script.</spec>
+    DCHECK(IsExecutingScript());
+    DoExecuteScript(pending_script, DocumentURLForScriptExecution(document_));
+
+    // <spec step="B.9">Decrement the parser's script
+    // nesting level by one. If the parser's script nesting level is zero (which
+    // it always should be at this point), then set the parser pause flag to
+    // false.</spec>
+    //
+    // This is implemented by ~ScriptNestingLevelIncrementer().
+  }
+
+  DCHECK(!IsExecutingScript());
+}
+
+// Should be correspond to
+// https://html.spec.whatwg.org/multipage/scripting.html#execute-the-script-block
+// but currently does more than specced, because historically this and
+// ExecutePendingParserBlockingScriptAndDispatchEvent() was the same method.
+// TODO(hiroshige): Make this spec-conformant.
+void HTMLParserScriptRunner::ExecutePendingDeferredScriptAndDispatchEvent(
+    PendingScript* pending_script) {
   // Stop watching loads before executeScript to prevent recursion if the script
   // reloads itself.
   // TODO(kouhei): Consider merging this w/ pendingScript->dispose() after the
@@ -205,20 +258,8 @@
   pending_script->StopWatchingForLoad();
 
   if (!IsExecutingScript()) {
+    // TODO(kouhei, hiroshige): Investigate why we need checkpoint here.
     Microtask::PerformCheckpoint(V8PerIsolateData::MainThreadIsolate());
-    if (pending_script_type == ScriptStreamer::kParsingBlocking) {
-      // The parser cannot be unblocked as a microtask requested another
-      // resource
-      if (!document_->IsScriptExecutionReady())
-        return;
-    }
-  }
-
-  // <spec label="scriptEndTag" step="B.1">Let the script be the pending
-  // parsing-blocking script. There is no longer a pending parsing-blocking
-  // script.</spec>
-  if (pending_script_type == ScriptStreamer::kParsingBlocking) {
-    parser_blocking_script_ = nullptr;
   }
 
   {
@@ -345,8 +386,7 @@
     InsertionPointRecord insertion_point_record(host_->InputStream());
 
     // 1., 7.--9.
-    ExecutePendingScriptAndDispatchEvent(parser_blocking_script_,
-                                         ScriptStreamer::kParsingBlocking);
+    ExecutePendingParserBlockingScriptAndDispatchEvent();
 
     // <spec step="B.10">Let the insertion point be undefined again.</spec>
     //
@@ -411,7 +451,7 @@
 
     // <spec step="3.2">Execute the first script in the list of scripts that
     // will execute when the document has finished parsing.</spec>
-    ExecutePendingScriptAndDispatchEvent(first, ScriptStreamer::kDeferred);
+    ExecutePendingDeferredScriptAndDispatchEvent(first);
 
     // FIXME: What is this m_document check for?
     if (!document_)
diff --git a/third_party/blink/renderer/core/script/html_parser_script_runner.h b/third_party/blink/renderer/core/script/html_parser_script_runner.h
index a5e1596e..d59ededb 100644
--- a/third_party/blink/renderer/core/script/html_parser_script_runner.h
+++ b/third_party/blink/renderer/core/script/html_parser_script_runner.h
@@ -110,8 +110,8 @@
   // PendingScriptClient
   void PendingScriptFinished(PendingScript*) override;
 
-  void ExecutePendingScriptAndDispatchEvent(PendingScript*,
-                                            ScriptStreamer::Type);
+  void ExecutePendingParserBlockingScriptAndDispatchEvent();
+  void ExecutePendingDeferredScriptAndDispatchEvent(PendingScript*);
   void ExecuteParsingBlockingScripts();
 
   void RequestParsingBlockingScript(ScriptLoader*);
diff --git a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
index cb0c7c1..55b9ed9 100644
--- a/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
+++ b/third_party/blink/renderer/core/workers/parent_execution_context_task_runners.cc
@@ -30,9 +30,10 @@
   // For now we only support very limited task types. Sort in the TaskType enum
   // value order.
   for (auto type : {TaskType::kNetworking, TaskType::kPostedMessage,
-                    TaskType::kInternalDefault, TaskType::kInternalLoading,
-                    TaskType::kInternalTest, TaskType::kInternalMedia,
-                    TaskType::kInternalInspector, TaskType::kInternalWorker}) {
+                    TaskType::kWorkerAnimation, TaskType::kInternalDefault,
+                    TaskType::kInternalLoading, TaskType::kInternalTest,
+                    TaskType::kInternalMedia, TaskType::kInternalInspector,
+                    TaskType::kInternalWorker}) {
     auto task_runner =
         context ? context->GetTaskRunner(type)
                 : Platform::Current()->CurrentThread()->GetTaskRunner();
diff --git a/third_party/blink/renderer/core/workers/worker_animation_frame_provider.cc b/third_party/blink/renderer/core/workers/worker_animation_frame_provider.cc
index 03ca9af..bdbf04b 100644
--- a/third_party/blink/renderer/core/workers/worker_animation_frame_provider.cc
+++ b/third_party/blink/renderer/core/workers/worker_animation_frame_provider.cc
@@ -5,6 +5,7 @@
 #include "third_party/blink/renderer/core/workers/worker_animation_frame_provider.h"
 
 #include "third_party/blink/renderer/core/offscreencanvas/offscreen_canvas.h"
+#include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/wtf/time.h"
 
 namespace blink {
@@ -15,7 +16,9 @@
     : begin_frame_provider_(
           std::make_unique<BeginFrameProvider>(begin_frame_provider_params,
                                                this)),
-      callback_collection_(context) {}
+      callback_collection_(context),
+      context_(context),
+      weak_factory_(this) {}
 
 int WorkerAnimationFrameProvider::RegisterCallback(
     FrameRequestCallbackCollection::FrameCallback* callback) {
@@ -30,15 +33,23 @@
 }
 
 void WorkerAnimationFrameProvider::BeginFrame() {
-  double time = WTF::CurrentTimeTicksInMilliseconds();
-  // We don't want to expose microseconds residues to users.
-  time = round(time * 60) / 60;
+  // TODO(fserb): Remove this once the Mojo changes for scheduling are in.
+  context_->GetTaskRunner(TaskType::kWorkerAnimation)
+      ->PostTask(
+          FROM_HERE,
+          WTF::Bind(
+              [](base::WeakPtr<WorkerAnimationFrameProvider> provider) {
+                double time = WTF::CurrentTimeTicksInMilliseconds();
+                // We don't want to expose microseconds residues to users.
+                time = round(time * 60) / 60;
 
-  callback_collection_.ExecuteCallbacks(time, time);
+                provider->callback_collection_.ExecuteCallbacks(time, time);
 
-  for (auto& offscreen_canvas : offscreen_canvases_) {
-    offscreen_canvas->PushFrameIfNeeded();
-  }
+                for (auto& offscreen_canvas : provider->offscreen_canvases_) {
+                  offscreen_canvas->PushFrameIfNeeded();
+                }
+              },
+              weak_factory_.GetWeakPtr()));
 }
 
 void WorkerAnimationFrameProvider::RegisterOffscreenCanvas(
@@ -57,6 +68,7 @@
 
 void WorkerAnimationFrameProvider::Trace(blink::Visitor* visitor) {
   visitor->Trace(callback_collection_);
+  visitor->Trace(context_);
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/workers/worker_animation_frame_provider.h b/third_party/blink/renderer/core/workers/worker_animation_frame_provider.h
index 48641f3..d7759cb 100644
--- a/third_party/blink/renderer/core/workers/worker_animation_frame_provider.h
+++ b/third_party/blink/renderer/core/workers/worker_animation_frame_provider.h
@@ -62,6 +62,10 @@
   // not hold strong references.
   Vector<UntracedMember<OffscreenCanvas>> offscreen_canvases_;
   bool in_begin_frame_;
+
+  Member<ExecutionContext> context_;
+
+  base::WeakPtrFactory<WorkerAnimationFrameProvider> weak_factory_;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/workers/worker_classic_script_loader.h b/third_party/blink/renderer/core/workers/worker_classic_script_loader.h
index 402db73..93b27ba6 100644
--- a/third_party/blink/renderer/core/workers/worker_classic_script_loader.h
+++ b/third_party/blink/renderer/core/workers/worker_classic_script_loader.h
@@ -96,9 +96,6 @@
   ContentSecurityPolicy* GetContentSecurityPolicy() {
     return content_security_policy_.Get();
   }
-  ContentSecurityPolicy* ReleaseContentSecurityPolicy() {
-    return content_security_policy_.Release();
-  }
 
   const String& GetReferrerPolicy() const { return referrer_policy_; }
 
diff --git a/third_party/blink/renderer/core/workers/worker_reporting_proxy.h b/third_party/blink/renderer/core/workers/worker_reporting_proxy.h
index 7ff01d3..26ef69a 100644
--- a/third_party/blink/renderer/core/workers/worker_reporting_proxy.h
+++ b/third_party/blink/renderer/core/workers/worker_reporting_proxy.h
@@ -37,7 +37,6 @@
 #include "third_party/blink/renderer/core/frame/web_feature_forward.h"
 #include "third_party/blink/renderer/core/inspector/console_types.h"
 #include "third_party/blink/renderer/platform/heap/handle.h"
-#include "third_party/blink/renderer/platform/network/content_security_policy_response_headers.h"
 #include "third_party/blink/renderer/platform/wtf/forward.h"
 
 namespace blink {
@@ -74,15 +73,8 @@
   // Invoked when the worker's main script is loaded on
   // WorkerThread::InitializeOnWorkerThread(). Only invoked when the script was
   // loaded on the worker thread, i.e., via InstalledScriptsManager rather than
-  // via ResourceLoader. ContentSecurityPolicy and ReferrerPolicy are read from
-  // the response header of the main script.
-  // This may block until CSP/ReferrerPolicy are set on the main thread
-  // since they are required for script evaluation, which happens soon after
-  // this function is called.
-  // Called before WillEvaluateClassicScript().
-  virtual void DidLoadInstalledScript(
-      const ContentSecurityPolicyResponseHeaders&,
-      const String& referrer_policy_on_worker_thread) {}
+  // via ResourceLoader. Called before WillEvaluateClassicScript().
+  virtual void DidLoadInstalledScript() {}
 
   // Invoked when the main classic script is about to be evaluated.
   virtual void WillEvaluateClassicScript(size_t script_size,
diff --git a/third_party/blink/renderer/devtools/BUILD.gn b/third_party/blink/renderer/devtools/BUILD.gn
index e21a157..358c518 100644
--- a/third_party/blink/renderer/devtools/BUILD.gn
+++ b/third_party/blink/renderer/devtools/BUILD.gn
@@ -449,6 +449,7 @@
   "front_end/object_ui/customPreviewComponent.css",
   "front_end/object_ui/CustomPreviewComponent.js",
   "front_end/object_ui/JavaScriptAutocomplete.js",
+  "front_end/object_ui/JavaScriptREPL.js",
   "front_end/object_ui/module.json",
   "front_end/object_ui/objectPopover.css",
   "front_end/object_ui/ObjectPopoverHelper.js",
diff --git a/third_party/blink/renderer/devtools/front_end/console/ConsolePrompt.js b/third_party/blink/renderer/devtools/front_end/console/ConsolePrompt.js
index 96070e1..1334e88 100644
--- a/third_party/blink/renderer/devtools/front_end/console/ConsolePrompt.js
+++ b/third_party/blink/renderer/devtools/front_end/console/ConsolePrompt.js
@@ -104,40 +104,10 @@
    */
   async _requestPreview() {
     const text = this._editor.textWithCurrentSuggestion().trim();
-    const executionContext = UI.context.flavor(SDK.ExecutionContext);
-    if (!executionContext || !text || text.length > Console.ConsolePrompt._MaxLengthForEvaluation) {
-      this._innerPreviewElement.removeChildren();
-      return;
-    }
-
-    const options = {
-      expression: SDK.RuntimeModel.wrapObjectLiteralExpressionIfNeeded(text),
-      includeCommandLineAPI: true,
-      generatePreview: true,
-      throwOnSideEffect: true,
-      timeout: 500
-    };
-    const result = await executionContext.evaluate(options, true /* userGesture */, false /* awaitPromise */);
+    const {preview} = await ObjectUI.JavaScriptREPL.evaluateAndBuildPreview(text, true /* throwOnSideEffect */, 500);
     this._innerPreviewElement.removeChildren();
-    if (result.error)
-      return;
-
-    if (result.exceptionDetails) {
-      const exception = result.exceptionDetails.exception.description;
-      if (exception.startsWith('TypeError: '))
-        this._innerPreviewElement.textContent = exception;
-      return;
-    }
-
-    const {preview, type, subtype, description} = result.object;
-    if (preview && type === 'object' && subtype !== 'node') {
-      this._formatter.appendObjectPreview(this._innerPreviewElement, preview, false /* isEntry */);
-    } else {
-      const nonObjectPreview = this._formatter.renderPropertyPreview(type, subtype, description.trimEnd(400));
-      this._innerPreviewElement.appendChild(nonObjectPreview);
-    }
-    if (this._innerPreviewElement.deepTextContent() === this._editor.textWithCurrentSuggestion().trim())
-      this._innerPreviewElement.removeChildren();
+    if (preview.deepTextContent() !== this._editor.textWithCurrentSuggestion().trim())
+      this._innerPreviewElement.appendChild(preview);
   }
 
   /**
@@ -292,15 +262,10 @@
     if (currentExecutionContext) {
       const executionContext = currentExecutionContext;
       const message = SDK.consoleModel.addCommandMessage(executionContext, text);
-      text = SDK.RuntimeModel.wrapObjectLiteralExpressionIfNeeded(text);
-      let preprocessed = false;
-      if (text.indexOf('await') !== -1) {
-        const preprocessedText = await Formatter.formatterWorkerPool().preprocessTopLevelAwaitExpressions(text);
-        preprocessed = !!preprocessedText;
-        text = preprocessedText || text;
-      }
+      const wrappedResult = await ObjectUI.JavaScriptREPL.preprocessExpression(text);
       SDK.consoleModel.evaluateCommandInConsole(
-          executionContext, message, text, useCommandLineAPI, /* awaitPromise */ preprocessed);
+          executionContext, message, wrappedResult.text, useCommandLineAPI,
+          /* awaitPromise */ wrappedResult.preprocessed);
       if (Console.ConsolePanel.instance().isShowing())
         Host.userMetrics.actionTaken(Host.UserMetrics.Action.CommandEvaluatedInConsolePanel);
     }
@@ -362,12 +327,6 @@
 };
 
 /**
- * @const
- * @type {number}
- */
-Console.ConsolePrompt._MaxLengthForEvaluation = 2000;
-
-/**
  * @unrestricted
  */
 Console.ConsoleHistoryManager = class {
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js
new file mode 100644
index 0000000..8dc9cc95
--- /dev/null
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/JavaScriptREPL.js
@@ -0,0 +1,103 @@
+// 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.
+
+ObjectUI.JavaScriptREPL = class {
+  /**
+   * @param {string} code
+   * @return {string}
+   */
+  static wrapObjectLiteral(code) {
+    // Only parenthesize what appears to be an object literal.
+    if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code)))
+      return code;
+
+    const parse = (async () => 0).constructor;
+    try {
+      // Check if the code can be interpreted as an expression.
+      parse('return ' + code + ';');
+
+      // No syntax error! Does it work parenthesized?
+      const wrappedCode = '(' + code + ')';
+      parse(wrappedCode);
+
+      return wrappedCode;
+    } catch (e) {
+      return code;
+    }
+  }
+
+  /**
+   * @param {string} text
+   * @return {!Promise<!{text: string, preprocessed: boolean}>}
+   */
+  static async preprocessExpression(text) {
+    text = ObjectUI.JavaScriptREPL.wrapObjectLiteral(text);
+    let preprocessed = false;
+    if (text.indexOf('await') !== -1) {
+      const preprocessedText = await Formatter.formatterWorkerPool().preprocessTopLevelAwaitExpressions(text);
+      preprocessed = !!preprocessedText;
+      text = preprocessedText || text;
+    }
+    return {text, preprocessed};
+  }
+
+  /**
+   * @param {string} text
+   * @param {boolean} throwOnSideEffect
+   * @param {number=} timeout
+   * @return {!Promise<!{preview: !DocumentFragment, result: ?SDK.RuntimeModel.EvaluationResult}>}
+   */
+  static async evaluateAndBuildPreview(text, throwOnSideEffect, timeout) {
+    const executionContext = UI.context.flavor(SDK.ExecutionContext);
+    const isTextLong = text.length > ObjectUI.JavaScriptREPL._MaxLengthForEvaluation;
+    if (!text || !executionContext || (throwOnSideEffect && isTextLong))
+      return {preview: createDocumentFragment(), result: null};
+
+    const wrappedResult = await ObjectUI.JavaScriptREPL.preprocessExpression(text);
+    const options = {
+      expression: wrappedResult.text,
+      generatePreview: true,
+      includeCommandLineAPI: true,
+      throwOnSideEffect: throwOnSideEffect,
+      timeout: timeout
+    };
+    const result = await executionContext.evaluate(
+        options, false /* userGesture */, wrappedResult.preprocessed /* awaitPromise */);
+    const preview = ObjectUI.JavaScriptREPL._buildEvaluationPreview(result);
+    return {preview, result};
+  }
+
+  /**
+   * @param {!SDK.RuntimeModel.EvaluationResult} result
+   * @return {!DocumentFragment}
+   */
+  static _buildEvaluationPreview(result) {
+    const fragment = createDocumentFragment();
+    if (result.error)
+      return fragment;
+
+    if (result.exceptionDetails) {
+      const exception = result.exceptionDetails.exception.description;
+      if (exception.startsWith('TypeError: '))
+        fragment.createChild('span').textContent = exception;
+      return fragment;
+    }
+
+    const formatter = new ObjectUI.RemoteObjectPreviewFormatter();
+    const {preview, type, subtype, description} = result.object;
+    if (preview && type === 'object' && subtype !== 'node') {
+      formatter.appendObjectPreview(fragment, preview, false /* isEntry */);
+    } else {
+      const nonObjectPreview = formatter.renderPropertyPreview(type, subtype, description.trimEnd(400));
+      fragment.appendChild(nonObjectPreview);
+    }
+    return fragment;
+  }
+};
+
+/**
+ * @const
+ * @type {number}
+ */
+ObjectUI.JavaScriptREPL._MaxLengthForEvaluation = 2000;
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
index 88a7f85..44f94ef 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/ObjectPropertiesSection.js
@@ -918,7 +918,7 @@
    */
   async _applyExpression(expression) {
     const property = SDK.RemoteObject.toCallArgument(this.property.symbol || this.property.name);
-    expression = SDK.RuntimeModel.wrapObjectLiteralExpressionIfNeeded(expression.trim());
+    expression = ObjectUI.JavaScriptREPL.wrapObjectLiteral(expression.trim());
 
     if (this.property.synthetic) {
       let invalidate = false;
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js b/third_party/blink/renderer/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
index 3a67026..37c61c7 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/RemoteObjectPreviewFormatter.js
@@ -32,7 +32,7 @@
   }
 
   /**
-   * @param {!Element} parentElement
+   * @param {!DocumentFragment|!Element} parentElement
    * @param {!Protocol.Runtime.ObjectPreview} preview
    * @param {boolean} isEntry
    */
diff --git a/third_party/blink/renderer/devtools/front_end/object_ui/module.json b/third_party/blink/renderer/devtools/front_end/object_ui/module.json
index 3cfab83..d56753b 100644
--- a/third_party/blink/renderer/devtools/front_end/object_ui/module.json
+++ b/third_party/blink/renderer/devtools/front_end/object_ui/module.json
@@ -19,6 +19,7 @@
         "ObjectPopoverHelper.js",
         "ObjectPropertiesSection.js",
         "JavaScriptAutocomplete.js",
+        "JavaScriptREPL.js",
         "RemoteObjectPreviewFormatter.js"
     ],
     "resources": [
diff --git a/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js b/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
index 3356ea5e..8cb0c686 100644
--- a/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
+++ b/third_party/blink/renderer/devtools/front_end/sdk/RuntimeModel.js
@@ -54,30 +54,6 @@
   }
 
   /**
-   * @param {string} code
-   * @return {string}
-   */
-  static wrapObjectLiteralExpressionIfNeeded(code) {
-    // Only parenthesize what appears to be an object literal.
-    if (!(/^\s*\{/.test(code) && /\}\s*$/.test(code)))
-      return code;
-
-    const parse = (async () => 0).constructor;
-    try {
-      // Check if the code can be interpreted as an expression.
-      parse('return ' + code + ';');
-
-      // No syntax error! Does it work parenthesized?
-      const wrappedCode = '(' + code + ')';
-      parse(wrappedCode);
-
-      return wrappedCode;
-    } catch (e) {
-      return code;
-    }
-  }
-
-  /**
    * @return {!SDK.DebuggerModel}
    */
   debuggerModel() {
diff --git a/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js b/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
index 8204f22..23ed009 100644
--- a/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
+++ b/third_party/blink/renderer/devtools/front_end/sources/SourcesPanel.js
@@ -868,7 +868,7 @@
       const executionContext = /** @type {!SDK.ExecutionContext} */ (currentExecutionContext);
       let text = /** @type {string} */ (callFunctionResult.object.value);
       const message = SDK.consoleModel.addCommandMessage(executionContext, text);
-      text = SDK.RuntimeModel.wrapObjectLiteralExpressionIfNeeded(text);
+      text = ObjectUI.JavaScriptREPL.wrapObjectLiteral(text);
       SDK.consoleModel.evaluateCommandInConsole(
           executionContext, message, text,
           /* useCommandLineAPI */ false, /* awaitPromise */ false);
@@ -1202,7 +1202,7 @@
           const executionContext = UI.context.flavor(SDK.ExecutionContext);
           if (executionContext) {
             const message = SDK.consoleModel.addCommandMessage(executionContext, text);
-            text = SDK.RuntimeModel.wrapObjectLiteralExpressionIfNeeded(text);
+            text = ObjectUI.JavaScriptREPL.wrapObjectLiteral(text);
             SDK.consoleModel.evaluateCommandInConsole(
                 executionContext, message, text, /* useCommandLineAPI */ true, /* awaitPromise */ false);
           }
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
index 8af8db1..de2cb24 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc
@@ -67,7 +67,9 @@
 #include "third_party/blink/renderer/platform/network/network_utils.h"
 #include "third_party/blink/renderer/platform/runtime_enabled_features.h"
 #include "third_party/blink/renderer/platform/shared_buffer.h"
+#include "third_party/blink/renderer/platform/weborigin/referrer_policy.h"
 #include "third_party/blink/renderer/platform/weborigin/security_origin.h"
+#include "third_party/blink/renderer/platform/weborigin/security_policy.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
@@ -247,14 +249,6 @@
   worker_inspector_proxy_->DispatchMessageFromWorker(session_id, message);
 }
 
-void WebEmbeddedWorkerImpl::SetContentSecurityPolicyAndReferrerPolicy(
-    ContentSecurityPolicy* content_security_policy,
-    String referrer_policy) {
-  DCHECK(IsMainThread());
-  shadow_page_->SetContentSecurityPolicyAndReferrerPolicy(
-      content_security_policy, std::move(referrer_policy));
-}
-
 std::unique_ptr<WebApplicationCacheHost>
 WebEmbeddedWorkerImpl::CreateApplicationCacheHost(
     WebApplicationCacheHostClient*) {
@@ -371,17 +365,21 @@
   // |main_script_loader_| isn't created if the InstalledScriptsManager had the
   // script.
   if (main_script_loader_) {
-    // We need to set the CSP to both the shadow page's document and the
-    // ServiceWorkerGlobalScope.
-    SetContentSecurityPolicyAndReferrerPolicy(
-        main_script_loader_->ReleaseContentSecurityPolicy(),
-        main_script_loader_->GetReferrerPolicy());
+    ContentSecurityPolicy* content_security_policy =
+        main_script_loader_->GetContentSecurityPolicy();
+    ReferrerPolicy referrer_policy = kReferrerPolicyDefault;
+    if (!main_script_loader_->GetReferrerPolicy().IsNull()) {
+      SecurityPolicy::ReferrerPolicyFromHeaderValue(
+          main_script_loader_->GetReferrerPolicy(),
+          kDoNotSupportReferrerPolicyLegacyKeywords, &referrer_policy);
+    }
     global_scope_creation_params = std::make_unique<GlobalScopeCreationParams>(
         worker_start_data_.script_url, script_type,
         worker_start_data_.user_agent,
-        document->GetContentSecurityPolicy()->Headers(),
-        document->GetReferrerPolicy(), starter_origin, starter_secure_context,
-        worker_clients, main_script_loader_->ResponseAddressSpace(),
+        content_security_policy ? content_security_policy->Headers()
+                                : Vector<CSPHeaderAndType>(),
+        referrer_policy, starter_origin, starter_secure_context, worker_clients,
+        main_script_loader_->ResponseAddressSpace(),
         main_script_loader_->OriginTrialTokens(), devtools_worker_token_,
         std::move(worker_settings),
         static_cast<V8CacheOptions>(worker_start_data_.v8_cache_options),
@@ -391,9 +389,8 @@
     cached_meta_data = main_script_loader_->ReleaseCachedMetadata();
     main_script_loader_ = nullptr;
   } else {
-    // ContentSecurityPolicy and ReferrerPolicy are applied to |document| at
-    // SetContentSecurityPolicyAndReferrerPolicy() before evaluating the main
-    // script.
+    // We don't have to set ContentSecurityPolicy and ReferrerPolicy. They're
+    // served by the installed scripts manager on the worker thread.
     global_scope_creation_params = std::make_unique<GlobalScopeCreationParams>(
         worker_start_data_.script_url, script_type,
         worker_start_data_.user_agent, Vector<CSPHeaderAndType>(),
diff --git a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
index d8d935f..ffb8994 100644
--- a/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
+++ b/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.h
@@ -46,7 +46,6 @@
 
 namespace blink {
 
-class ContentSecurityPolicy;
 class ServiceWorkerInstalledScriptsManager;
 class WorkerClassicScriptLoader;
 class WorkerInspectorProxy;
@@ -76,13 +75,6 @@
 
   void PostMessageToPageInspector(int session_id, const WTF::String&);
 
-  // Applies the specified CSP and referrer policy to the worker, so that
-  // fetches initiated by the worker (other than for the main worker script
-  // itself) are affected by these policies. This must be called before starting
-  // script execution on the worker thread.
-  void SetContentSecurityPolicyAndReferrerPolicy(ContentSecurityPolicy*,
-                                                 String referrer_policy);
-
   // WorkerShadowPage::Client overrides.
   std::unique_ptr<WebApplicationCacheHost> CreateApplicationCacheHost(
       WebApplicationCacheHostClient*) override;
diff --git a/third_party/blink/renderer/modules/indexeddb/BUILD.gn b/third_party/blink/renderer/modules/indexeddb/BUILD.gn
index 58571e7..b16dcc0 100644
--- a/third_party/blink/renderer/modules/indexeddb/BUILD.gn
+++ b/third_party/blink/renderer/modules/indexeddb/BUILD.gn
@@ -22,7 +22,6 @@
     "idb_event_dispatcher.h",
     "idb_factory.cc",
     "idb_factory.h",
-    "idb_histograms.h",
     "idb_index.cc",
     "idb_index.h",
     "idb_key.cc",
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_database.cc b/third_party/blink/renderer/modules/indexeddb/idb_database.cc
index 75ccc9d06..32f6f19 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_database.cc
+++ b/third_party/blink/renderer/modules/indexeddb/idb_database.cc
@@ -265,7 +265,6 @@
     bool auto_increment,
     ExceptionState& exception_state) {
   IDB_TRACE("IDBDatabase::createObjectStore");
-  RecordApiCallsHistogram(kIDBCreateObjectStoreCall);
 
   if (!version_change_transaction_) {
     exception_state.ThrowDOMException(
@@ -331,7 +330,6 @@
 void IDBDatabase::deleteObjectStore(const String& name,
                                     ExceptionState& exception_state) {
   IDB_TRACE("IDBDatabase::deleteObjectStore");
-  RecordApiCallsHistogram(kIDBDeleteObjectStoreCall);
   if (!version_change_transaction_) {
     exception_state.ThrowDOMException(
         DOMExceptionCode::kInvalidStateError,
@@ -371,7 +369,6 @@
     const String& mode_string,
     ExceptionState& exception_state) {
   IDB_TRACE("IDBDatabase::transaction");
-  RecordApiCallsHistogram(kIDBTransactionCall);
 
   HashSet<String> scope;
   if (store_names.IsString()) {
@@ -598,13 +595,6 @@
   return ContextLifecycleObserver::GetExecutionContext();
 }
 
-void IDBDatabase::RecordApiCallsHistogram(IndexedDatabaseMethods method) {
-  DEFINE_THREAD_SAFE_STATIC_LOCAL(
-      EnumerationHistogram, api_calls_histogram,
-      ("WebCore.IndexedDB.FrontEndAPICalls", kIDBMethodsMax));
-  api_calls_histogram.Count(method);
-}
-
 STATIC_ASSERT_ENUM(kWebIDBDatabaseExceptionUnknownError,
                    DOMExceptionCode::kUnknownError);
 STATIC_ASSERT_ENUM(kWebIDBDatabaseExceptionConstraintError,
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_database.h b/third_party/blink/renderer/modules/indexeddb/idb_database.h
index 183bfbd..24a6484 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_database.h
+++ b/third_party/blink/renderer/modules/indexeddb/idb_database.h
@@ -38,7 +38,6 @@
 #include "third_party/blink/renderer/modules/event_modules.h"
 #include "third_party/blink/renderer/modules/event_target_modules.h"
 #include "third_party/blink/renderer/modules/indexeddb/idb_database_callbacks.h"
-#include "third_party/blink/renderer/modules/indexeddb/idb_histograms.h"
 #include "third_party/blink/renderer/modules/indexeddb/idb_metadata.h"
 #include "third_party/blink/renderer/modules/indexeddb/idb_object_store.h"
 #include "third_party/blink/renderer/modules/indexeddb/idb_object_store_parameters.h"
@@ -171,8 +170,6 @@
   static const char kTransactionReadOnlyErrorMessage[];
   static const char kDatabaseClosedErrorMessage[];
 
-  static void RecordApiCallsHistogram(IndexedDatabaseMethods);
-
  protected:
   // EventTarget
   DispatchEventResult DispatchEventInternal(Event*) override;
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_factory.cc b/third_party/blink/renderer/modules/indexeddb/idb_factory.cc
index 15d4f746..4a5c58d5 100644
--- a/third_party/blink/renderer/modules/indexeddb/idb_factory.cc
+++ b/third_party/blink/renderer/modules/indexeddb/idb_factory.cc
@@ -120,7 +120,6 @@
                                            ExceptionState& exception_state) {
   IDB_TRACE1("IDBFactory::open", "name", name.Utf8());
   IDBRequest::AsyncTraceState metrics("IDBFactory::open");
-  IDBDatabase::RecordApiCallsHistogram(kIDBOpenCall);
   DCHECK(version >= 1 || version == IDBDatabaseMetadata::kNoVersion);
   if (!IsContextValid(ExecutionContext::From(script_state)))
     return nullptr;
@@ -190,7 +189,6 @@
     bool force_close) {
   IDB_TRACE1("IDBFactory::deleteDatabase", "name", name.Utf8());
   IDBRequest::AsyncTraceState metrics("IDBFactory::deleteDatabase");
-  IDBDatabase::RecordApiCallsHistogram(kIDBDeleteDatabaseCall);
   if (!IsContextValid(ExecutionContext::From(script_state)))
     return nullptr;
   if (!ExecutionContext::From(script_state)
diff --git a/third_party/blink/renderer/modules/indexeddb/idb_histograms.h b/third_party/blink/renderer/modules/indexeddb/idb_histograms.h
deleted file mode 100644
index d4ee531..0000000
--- a/third_party/blink/renderer/modules/indexeddb/idb_histograms.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2013 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
- *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GOOGLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_INDEXEDDB_IDB_HISTOGRAMS_H_
-#define THIRD_PARTY_BLINK_RENDERER_MODULES_INDEXEDDB_IDB_HISTOGRAMS_H_
-
-namespace blink {
-
-enum IndexedDatabaseMethods {
-  kIDBCreateObjectStoreCall,
-  kIDBDeleteObjectStoreCall,
-  kIDBTransactionCall,
-  kIDBDeleteDatabaseCall,
-  kIDBOpenCall,
-  kIDBMethodsMax,
-};
-
-}  // namespace blink
-
-#endif
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
index 761b827d..35913ca 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.idl
@@ -133,14 +133,15 @@
 
     // RTP Media API
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-gettransceivers
-    sequence<RTCRtpTranceiver> getTransceivers();
+    [Measure] sequence<RTCRtpTranceiver> getTransceivers();
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getsenders
     [Measure] sequence<RTCRtpSender> getSenders();
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-getreceivers
     [Measure] sequence<RTCRtpReceiver> getReceivers();
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtransceiver
-    [RaisesException] RTCRtpTransceiver addTransceiver((MediaStreamTrack or DOMString) track_or_kind,
-                                                       optional RTCRtpTransceiverInit init);
+    [Measure, RaisesException] RTCRtpTransceiver addTransceiver(
+        (MediaStreamTrack or DOMString) track_or_kind,
+        optional RTCRtpTransceiverInit init);
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-addtrack
     [Measure, RaisesException] RTCRtpSender addTrack(MediaStreamTrack track, MediaStream... streams);
     // https://w3c.github.io/webrtc-pc/#dom-rtcpeerconnection-removetrack
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver.idl b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver.idl
index 6cd3809..a8ad59b 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver.idl
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver.idl
@@ -17,6 +17,6 @@
     [SameObject] readonly attribute RTCRtpSender sender;
     [SameObject] readonly attribute RTCRtpReceiver receiver;
     readonly attribute boolean stopped;
-    [RaisesException=Setter] attribute RTCRtpTransceiverDirection direction;
+    [Measure, RaisesException=Setter] attribute RTCRtpTransceiverDirection direction;
     readonly attribute RTCRtpTransceiverDirection? currentDirection;
 };
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
index 8108927..1b70ae8 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope.cc
@@ -159,10 +159,7 @@
         script_data.CreateOriginTrialTokens();
     OriginTrialContext::AddTokens(this, origin_trial_tokens.get());
 
-    // This may block until CSP and referrer policy are set on the main
-    // thread.
-    ReportingProxy().DidLoadInstalledScript(
-        content_security_policy_raw_headers.value(), referrer_policy);
+    ReportingProxy().DidLoadInstalledScript();
   }
 
   WorkerGlobalScope::EvaluateClassicScript(script_url, source_code,
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
index 88c47ee..5766e6e7 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
@@ -44,7 +44,6 @@
 #include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
 #include "third_party/blink/renderer/core/execution_context/execution_context.h"
 #include "third_party/blink/renderer/core/fetch/headers.h"
-#include "third_party/blink/renderer/core/frame/csp/content_security_policy.h"
 #include "third_party/blink/renderer/core/inspector/console_message.h"
 #include "third_party/blink/renderer/core/messaging/blink_transferable_message.h"
 #include "third_party/blink/renderer/core/messaging/message_port.h"
@@ -88,31 +87,11 @@
 #include "third_party/blink/renderer/modules/service_worker/wait_until_observer.h"
 #include "third_party/blink/renderer/platform/cross_thread_functional.h"
 #include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
-#include "third_party/blink/renderer/platform/network/content_security_policy_response_headers.h"
-#include "third_party/blink/renderer/platform/waitable_event.h"
 #include "third_party/blink/renderer/platform/wtf/assertions.h"
 #include "third_party/blink/renderer/platform/wtf/functional.h"
 
 namespace blink {
 
-namespace {
-
-void SetContentSecurityPolicyAndReferrerPolicyOnMainThread(
-    WebEmbeddedWorkerImpl* embedded_worker,
-    ContentSecurityPolicyResponseHeaders csp_headers,
-    String referrer_policy,
-    WaitableEvent* waitable_event) {
-  DCHECK(IsMainThread());
-  ContentSecurityPolicy* content_security_policy =
-      ContentSecurityPolicy::Create();
-  content_security_policy->DidReceiveHeaders(csp_headers);
-  embedded_worker->SetContentSecurityPolicyAndReferrerPolicy(
-      content_security_policy, std::move(referrer_policy));
-  waitable_event->Signal();
-}
-
-}  // namespace
-
 ServiceWorkerGlobalScopeProxy* ServiceWorkerGlobalScopeProxy::Create(
     WebEmbeddedWorkerImpl& embedded_worker,
     WebServiceWorkerContextClient& client) {
@@ -599,27 +578,9 @@
       WorkerGlobalScope()->ScriptController()->GetContext());
 }
 
-void ServiceWorkerGlobalScopeProxy::DidLoadInstalledScript(
-    const ContentSecurityPolicyResponseHeaders& csp_headers_on_worker_thread,
-    const String& referrer_policy_on_worker_thread) {
-  // Post a task to the main thread to set CSP and ReferrerPolicy on the shadow
-  // page.
-  DCHECK(embedded_worker_);
-  WaitableEvent waitable_event;
-  PostCrossThreadTask(
-      *parent_execution_context_task_runners_->Get(TaskType::kInternalWorker),
-      FROM_HERE,
-      CrossThreadBind(&SetContentSecurityPolicyAndReferrerPolicyOnMainThread,
-                      CrossThreadUnretained(embedded_worker_),
-                      csp_headers_on_worker_thread,
-                      referrer_policy_on_worker_thread,
-                      CrossThreadUnretained(&waitable_event)));
+void ServiceWorkerGlobalScopeProxy::DidLoadInstalledScript() {
+  DCHECK(WorkerGlobalScope()->IsContextThread());
   Client().WorkerScriptLoaded();
-
-  // Wait for the task to complete before returning. This ensures that worker
-  // script evaluation can't start and issue any fetches until CSP and
-  // ReferrerPolicy are set.
-  waitable_event.Wait();
 }
 
 void ServiceWorkerGlobalScopeProxy::WillEvaluateClassicScript(
diff --git a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
index 89c1dcd..b49f22b 100644
--- a/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
+++ b/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.h
@@ -159,9 +159,7 @@
   void PostMessageToPageInspector(int session_id, const String&) override;
   void DidCreateWorkerGlobalScope(WorkerOrWorkletGlobalScope*) override;
   void DidInitializeWorkerContext() override;
-  void DidLoadInstalledScript(
-      const ContentSecurityPolicyResponseHeaders&,
-      const String& referrer_policy_on_worker_thread) override;
+  void DidLoadInstalledScript() override;
   void WillEvaluateClassicScript(size_t script_size,
                                  size_t cached_metadata_size) override;
   void WillEvaluateImportedClassicScript(size_t script_size,
diff --git a/third_party/blink/renderer/platform/graphics/begin_frame_provider.cc b/third_party/blink/renderer/platform/graphics/begin_frame_provider.cc
index cbc0164..f6a0cca 100644
--- a/third_party/blink/renderer/platform/graphics/begin_frame_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/begin_frame_provider.cc
@@ -76,8 +76,9 @@
 
 void BeginFrameProvider::RequestBeginFrame() {
   requested_needs_begin_frame_ = true;
-  if (needs_begin_frame_)
+  if (needs_begin_frame_) {
     return;
+  }
 
   CreateCompositorFrameSinkIfNeeded();
 
@@ -87,11 +88,10 @@
 
 void BeginFrameProvider::OnBeginFrame(const viz::BeginFrameArgs& args) {
   // If there was no need for a BeginFrame, just skip it.
-  if (needs_begin_frame_) {
+  if (needs_begin_frame_ && requested_needs_begin_frame_) {
     requested_needs_begin_frame_ = false;
-
     begin_frame_client_->BeginFrame();
-
+  } else {
     if (!requested_needs_begin_frame_) {
       needs_begin_frame_ = false;
       compositor_frame_sink_->SetNeedsBeginFrame(false);
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc
index 829faff..70f352861 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.cc
@@ -127,14 +127,9 @@
 }
 
 void CanvasResourceDispatcher::DispatchFrameSync(
-    scoped_refptr<StaticBitmapImage> image,
+    scoped_refptr<CanvasResource> canvas_resource,
     base::TimeTicks commit_start_time,
     const SkIRect& damage_rect) {
-  scoped_refptr<CanvasResource> canvas_resource = CanvasResourceBitmap::Create(
-      std::move(image),
-      nullptr,  // Resource provider not specified -> recycling will not work
-      kLow_SkFilterQuality, CanvasColorParams());
-
   viz::CompositorFrame frame;
   if (!PrepareFrame(std::move(canvas_resource), commit_start_time, damage_rect,
                     &frame))
@@ -149,14 +144,9 @@
 }
 
 void CanvasResourceDispatcher::DispatchFrame(
-    scoped_refptr<StaticBitmapImage> image,
+    scoped_refptr<CanvasResource> canvas_resource,
     base::TimeTicks commit_start_time,
     const SkIRect& damage_rect) {
-  scoped_refptr<CanvasResource> canvas_resource = CanvasResourceBitmap::Create(
-      std::move(image),
-      nullptr,  // Resource provider not specified -> recycling will not work
-      kLow_SkFilterQuality, CanvasColorParams());
-
   viz::CompositorFrame frame;
   if (!PrepareFrame(std::move(canvas_resource), commit_start_time, damage_rect,
                     &frame))
@@ -229,38 +219,24 @@
     if (SharedGpuContext::IsGpuCompositingEnabled()) {
       // Case 1: both canvas and compositor are gpu accelerated.
       commit_type = kCommitGPUCanvasGPUCompositing;
-      offscreen_canvas_resource_provider_
-          ->SetTransferableResourceToStaticBitmapImage(&resource,
-                                                       canvas_resource);
       yflipped = true;
     } else {
       // Case 2: canvas is accelerated but gpu compositing is disabled.
       commit_type = kCommitGPUCanvasSoftwareCompositing;
-      offscreen_canvas_resource_provider_
-          ->SetTransferableResourceToSharedBitmap(resource,
-                                                  canvas_resource->Bitmap());
     }
   } else {
     if (SharedGpuContext::IsGpuCompositingEnabled()) {
       // Case 3: canvas is not gpu-accelerated, but compositor is.
       commit_type = kCommitSoftwareCanvasGPUCompositing;
-      scoped_refptr<CanvasResource> accelerated_resource =
-          canvas_resource->MakeAccelerated(
-              SharedGpuContext::ContextProviderWrapper());
-      if (!accelerated_resource)
-        return false;
-      offscreen_canvas_resource_provider_
-          ->SetTransferableResourceToStaticBitmapImage(&resource,
-                                                       accelerated_resource);
     } else {
       // Case 4: both canvas and compositor are not gpu accelerated.
       commit_type = kCommitSoftwareCanvasSoftwareCompositing;
-      offscreen_canvas_resource_provider_
-          ->SetTransferableResourceToSharedBitmap(resource,
-                                                  canvas_resource->Bitmap());
     }
   }
 
+  offscreen_canvas_resource_provider_->SetTransferableResource(&resource,
+                                                               canvas_resource);
+
   commit_type_histogram.Count(commit_type);
 
   PostImageToPlaceholderIfNotBlocked(
@@ -477,12 +453,14 @@
 void CanvasResourceDispatcher::DidAllocateSharedBitmap(
     mojo::ScopedSharedBufferHandle buffer,
     ::gpu::mojom::blink::MailboxPtr id) {
-  sink_->DidAllocateSharedBitmap(std::move(buffer), std::move(id));
+  if (sink_)
+    sink_->DidAllocateSharedBitmap(std::move(buffer), std::move(id));
 }
 
 void CanvasResourceDispatcher::DidDeleteSharedBitmap(
     ::gpu::mojom::blink::MailboxPtr id) {
-  sink_->DidDeleteSharedBitmap(std::move(id));
+  if (sink_)
+    sink_->DidDeleteSharedBitmap(std::move(id));
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
index d2afb6a..0de60f33 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h
@@ -47,11 +47,11 @@
   void SetSuspendAnimation(bool);
   bool NeedsBeginFrame() const { return needs_begin_frame_; }
   bool IsAnimationSuspended() const { return suspend_animation_; }
-  void DispatchFrame(scoped_refptr<StaticBitmapImage>,
+  void DispatchFrame(scoped_refptr<CanvasResource>,
                      base::TimeTicks commit_start_time,
                      const SkIRect& damage_rect);
   void ReclaimResource(viz::ResourceId);
-  void DispatchFrameSync(scoped_refptr<StaticBitmapImage>,
+  void DispatchFrameSync(scoped_refptr<CanvasResource>,
                          base::TimeTicks commit_start_time,
                          const SkIRect& damage_rect);
 
diff --git a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
index cfa543e5..661aa5d 100644
--- a/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
+++ b/third_party/blink/renderer/platform/graphics/canvas_resource_provider.h
@@ -179,7 +179,7 @@
   std::unique_ptr<cc::SkiaPaintCanvas> canvas_;
   mutable sk_sp<SkSurface> surface_;  // mutable for lazy init
   std::unique_ptr<SkCanvas> xform_canvas_;
-  SkFilterQuality filter_quality_;
+  SkFilterQuality filter_quality_ = kLow_SkFilterQuality;
 
   const cc::PaintImage::Id snapshot_paint_image_id_;
   cc::PaintImage::ContentId snapshot_paint_image_content_id_ =
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc b/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc
index 86812fc..eea63df 100644
--- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc
+++ b/third_party/blink/renderer/platform/graphics/offscreen_canvas_frame_dispatcher_test.cc
@@ -10,6 +10,7 @@
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource.h"
+#include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
 #include "third_party/skia/include/core/SkSurface.h"
 
 using testing::_;
@@ -48,6 +49,13 @@
  protected:
   CanvasResourceDispatcherTest() {
     dispatcher_ = std::make_unique<MockCanvasResourceDispatcher>();
+    resource_provider_ = CanvasResourceProvider::Create(
+        IntSize(10, 10),
+        CanvasResourceProvider::kSoftwareCompositedResourceUsage,
+        nullptr,  // context_provider_wrapper
+        0,        // msaa_sample_count
+        CanvasColorParams(), CanvasResourceProvider::kDefaultPresentationMode,
+        dispatcher_->GetWeakPtr());
   }
 
   MockCanvasResourceDispatcher* Dispatcher() { return dispatcher_.get(); }
@@ -55,13 +63,12 @@
  private:
   scoped_refptr<StaticBitmapImage> PrepareStaticBitmapImage();
   std::unique_ptr<MockCanvasResourceDispatcher> dispatcher_;
+  std::unique_ptr<CanvasResourceProvider> resource_provider_;
 };
 
 void CanvasResourceDispatcherTest::DispatchOneFrame() {
-  sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul(10, 10);
-  dispatcher_->DispatchFrame(
-      StaticBitmapImage::Create(surface->makeImageSnapshot()),
-      base::TimeTicks(), SkIRect::MakeEmpty());
+  dispatcher_->DispatchFrame(resource_provider_->ProduceFrame(),
+                             base::TimeTicks(), SkIRect::MakeEmpty());
 }
 
 TEST_F(CanvasResourceDispatcherTest, PlaceholderRunsNormally) {
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc
index a99595fb..6ad642b 100644
--- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.cc
@@ -4,28 +4,9 @@
 
 #include "third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h"
 
-#include "base/memory/shared_memory.h"
-#include "base/numerics/checked_math.h"
-#include "components/viz/common/resources/bitmap_allocation.h"
-#include "components/viz/common/resources/shared_bitmap.h"
 #include "components/viz/common/resources/single_release_callback.h"
-#include "gpu/command_buffer/client/gles2_interface.h"
-#include "gpu/command_buffer/common/capabilities.h"
-#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom-blink.h"
-#include "third_party/blink/public/platform/platform.h"
-#include "third_party/blink/public/platform/web_graphics_context_3d_provider.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource.h"
 #include "third_party/blink/renderer/platform/graphics/canvas_resource_dispatcher.h"
-#include "third_party/blink/renderer/platform/graphics/gpu/shared_gpu_context.h"
-#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
-#include "third_party/blink/renderer/platform/wtf/typed_arrays/array_buffer.h"
-#include "third_party/blink/renderer/platform/wtf/typed_arrays/uint8_array.h"
-#include "third_party/khronos/GLES2/gl2.h"
-#include "third_party/khronos/GLES2/gl2ext.h"
-#include "third_party/skia/include/core/SkColor.h"
-#include "third_party/skia/include/core/SkImage.h"
-#include "third_party/skia/include/core/SkSwizzle.h"
-#include "third_party/skia/include/gpu/GrContext.h"
 
 namespace blink {
 
@@ -46,68 +27,9 @@
   return std::make_unique<FrameResource>();
 }
 
-void OffscreenCanvasResourceProvider::SetTransferableResourceToSharedBitmap(
-    viz::TransferableResource& resource,
-    scoped_refptr<StaticBitmapImage> image) {
-  std::unique_ptr<FrameResource> frame_resource =
-      CreateOrRecycleFrameResource();
-  if (!frame_resource->shared_memory) {
-    frame_resource->provider = this;
-    frame_resource->shared_bitmap_id = viz::SharedBitmap::GenerateId();
-    frame_resource->shared_memory =
-        viz::bitmap_allocation::AllocateMappedBitmap(gfx::Size(width_, height_),
-                                                     resource.format);
-    frame_dispatcher_->DidAllocateSharedBitmap(
-        viz::bitmap_allocation::DuplicateAndCloseMappedBitmap(
-            frame_resource->shared_memory.get(), gfx::Size(width_, height_),
-            resource.format),
-        SharedBitmapIdToGpuMailboxPtr(frame_resource->shared_bitmap_id));
-  }
-  void* pixels = frame_resource->shared_memory->memory();
-  DCHECK(pixels);
-  // When |image| is texture backed, this function does a GPU readback which is
-  // required.
-  sk_sp<SkImage> sk_image = image->PaintImageForCurrentFrame().GetSkImage();
-  if (sk_image->bounds().isEmpty())
-    return;
-  SkImageInfo image_info = SkImageInfo::Make(
-      width_, height_, kN32_SkColorType,
-      image->IsPremultiplied() ? kPremul_SkAlphaType : kUnpremul_SkAlphaType,
-      sk_image->refColorSpace());
-  if (image_info.isEmpty())
-    return;
-
-  if (RuntimeEnabledFeatures::CanvasColorManagementEnabled()) {
-    image_info = image_info.makeColorType(sk_image->colorType());
-  }
-
-  // TODO(junov): Optimize to avoid copying pixels for non-texture-backed
-  // sk_image. See crbug.com/651456.
-  bool read_pixels_successful =
-      sk_image->readPixels(image_info, pixels, image_info.minRowBytes(), 0, 0);
-  DCHECK(read_pixels_successful);
-  if (!read_pixels_successful)
-    return;
-  resource.mailbox_holder.mailbox = frame_resource->shared_bitmap_id;
-  resource.mailbox_holder.texture_target = 0;
-  resource.is_software = true;
-  resource.id = next_resource_id_;
-  resource.format = viz::ResourceFormat::RGBA_8888;
-  resource.size = gfx::Size(width_, height_);
-  // This indicates the filtering on the resource inherently, not the desired
-  // filtering effect on the quad.
-  resource.filter = GL_NEAREST;
-  // TODO(crbug.com/646022): making this overlay-able.
-  resource.is_overlay_candidate = false;
-
-  resources_.insert(next_resource_id_, std::move(frame_resource));
-}
-
-void OffscreenCanvasResourceProvider::
-    SetTransferableResourceToStaticBitmapImage(
-        viz::TransferableResource* out_resource,
-        scoped_refptr<CanvasResource> image) {
-  DCHECK(image->IsAccelerated());
+void OffscreenCanvasResourceProvider::SetTransferableResource(
+    viz::TransferableResource* out_resource,
+    scoped_refptr<CanvasResource> image) {
   DCHECK(image->IsValid());
 
   std::unique_ptr<FrameResource> frame_resource =
@@ -166,10 +88,6 @@
 OffscreenCanvasResourceProvider::FrameResource::~FrameResource() {
   if (release_callback)
     release_callback->Run(sync_token, is_lost);
-  if (provider && !shared_bitmap_id.IsZero()) {
-    provider->frame_dispatcher_->DidDeleteSharedBitmap(
-        SharedBitmapIdToGpuMailboxPtr(shared_bitmap_id));
-  }
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h
index a1615b3..6ef51de4 100644
--- a/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h
+++ b/third_party/blink/renderer/platform/graphics/offscreen_canvas_resource_provider.h
@@ -9,10 +9,6 @@
 #include "components/viz/common/resources/transferable_resource.h"
 #include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
 
-namespace base {
-class SharedMemory;
-}
-
 namespace viz {
 class SingleReleaseCallback;
 namespace mojom {
@@ -38,11 +34,8 @@
 
   ~OffscreenCanvasResourceProvider();
 
-  void SetTransferableResourceToSharedBitmap(viz::TransferableResource&,
-                                             scoped_refptr<StaticBitmapImage>);
-  void SetTransferableResourceToStaticBitmapImage(
-      viz::TransferableResource* out_resource,
-      scoped_refptr<CanvasResource>);
+  void SetTransferableResource(viz::TransferableResource* out_resource,
+                               scoped_refptr<CanvasResource>);
 
   void ReclaimResource(unsigned resource_id);
   void ReclaimResources(const WTF::Vector<viz::ReturnedResource>& resources);
@@ -63,12 +56,6 @@
     // TODO(junov):  What does this do?
     bool spare_lock = true;
 
-    // Holds the backing for a software-backed resource.
-    std::unique_ptr<base::SharedMemory> shared_memory;
-    // The id given to  the display compositor to display a software-backed
-    // resource.
-    viz::SharedBitmapId shared_bitmap_id;
-
     // Back-pointer to the OffscreenCanvasResourceProvider. FrameResource does
     // not outlive the provider.
     OffscreenCanvasResourceProvider* provider = nullptr;
diff --git a/third_party/blink/renderer/platform/graphics/surface_layer_bridge.cc b/third_party/blink/renderer/platform/graphics/surface_layer_bridge.cc
index 3aa75b4d..c42c311 100644
--- a/third_party/blink/renderer/platform/graphics/surface_layer_bridge.cc
+++ b/third_party/blink/renderer/platform/graphics/surface_layer_bridge.cc
@@ -78,8 +78,8 @@
 
   current_surface_id_ = surface_info.id();
 
-  surface_layer_->SetPrimarySurfaceId(surface_info.id(),
-                                      cc::DeadlinePolicy::UseDefaultDeadline());
+  surface_layer_->SetPrimarySurfaceId(
+      surface_info.id(), cc::DeadlinePolicy::UseSpecifiedDeadline(0u));
   surface_layer_->SetFallbackSurfaceId(surface_info.id());
 
   if (observer_) {
diff --git a/third_party/blink/renderer/platform/loader/fetch/fetch_context.h b/third_party/blink/renderer/platform/loader/fetch/fetch_context.h
index 1cc04ca..1b713826 100644
--- a/third_party/blink/renderer/platform/loader/fetch/fetch_context.h
+++ b/third_party/blink/renderer/platform/loader/fetch/fetch_context.h
@@ -31,6 +31,8 @@
 #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CONTEXT_H_
 #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_LOADER_FETCH_FETCH_CONTEXT_H_
 
+#include <memory>
+
 #include "base/optional.h"
 #include "base/single_thread_task_runner.h"
 #include "services/network/public/mojom/request_context_frame_type.mojom-shared.h"
@@ -38,6 +40,7 @@
 #include "third_party/blink/public/platform/modules/fetch/fetch_api_request.mojom-shared.h"
 #include "third_party/blink/public/platform/platform.h"
 #include "third_party/blink/public/platform/resource_request_blocked_reason.h"
+#include "third_party/blink/public/platform/scheduler/web_resource_loading_task_runner_handle.h"
 #include "third_party/blink/public/platform/web_application_cache_host.h"
 #include "third_party/blink/public/platform/web_url_loader.h"
 #include "third_party/blink/public/platform/web_url_request.h"
@@ -231,7 +234,6 @@
 
   virtual std::unique_ptr<WebURLLoader> CreateURLLoader(
       const ResourceRequest&,
-      scoped_refptr<base::SingleThreadTaskRunner>,
       const ResourceLoaderOptions&) {
     NOTREACHED();
     return nullptr;
@@ -259,6 +261,16 @@
     return Platform::Current()->CurrentThread()->GetTaskRunner();
   }
 
+  // TODO(altimin): This is used when creating a URLLoader, and
+  // FetchContext::GetLoadingTaskRunner is used whenever asynchronous tasks
+  // around resource loading are posted. Modify the code so that all
+  // the tasks related to loading a resource use the resource loader handle's
+  // task runner.
+  virtual std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+  CreateResourceLoadingTaskRunnerHandle() {
+    return nullptr;
+  }
+
   // Called when the underlying context is detached. Note that some
   // FetchContexts continue working after detached (e.g., for fetch() operations
   // with "keepalive" specified).
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
index 518bf6dc..40c3acbf 100644
--- a/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
+++ b/third_party/blink/renderer/platform/loader/fetch/resource_loader.cc
@@ -115,8 +115,7 @@
 void ResourceLoader::Start() {
   const ResourceRequest& request = resource_->GetResourceRequest();
   ActivateCacheAwareLoadingIfNeeded(request);
-  loader_ = Context().CreateURLLoader(request, Context().GetLoadingTaskRunner(),
-                                      resource_->Options());
+  loader_ = Context().CreateURLLoader(request, resource_->Options());
   DCHECK_EQ(ResourceLoadScheduler::kInvalidClientId, scheduler_client_id_);
   auto throttle_option = ResourceLoadScheduler::ThrottleOption::kThrottleable;
 
@@ -188,8 +187,7 @@
 void ResourceLoader::Restart(const ResourceRequest& request) {
   CHECK_EQ(resource_->Options().synchronous_policy, kRequestAsynchronously);
 
-  loader_ = Context().CreateURLLoader(request, Context().GetLoadingTaskRunner(),
-                                      resource_->Options());
+  loader_ = Context().CreateURLLoader(request, resource_->Options());
   StartWith(request);
 }
 
diff --git a/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h b/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
index e234dc60..a2e6067e 100644
--- a/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
+++ b/third_party/blink/renderer/platform/loader/testing/mock_fetch_context.h
@@ -97,14 +97,14 @@
 
   std::unique_ptr<WebURLLoader> CreateURLLoader(
       const ResourceRequest& request,
-      scoped_refptr<base::SingleThreadTaskRunner> task_runner,
       const ResourceLoaderOptions&) override {
     if (!url_loader_factory_) {
       url_loader_factory_ =
           Platform::Current()->CreateDefaultURLLoaderFactory();
     }
     WrappedResourceRequest wrapped(request);
-    return url_loader_factory_->CreateURLLoader(wrapped, task_runner);
+    return url_loader_factory_->CreateURLLoader(
+        wrapped, CreateResourceLoadingTaskRunnerHandle());
   }
 
   ResourceLoadScheduler::ThrottlingPolicy InitialLoadThrottlingPolicy()
@@ -120,6 +120,12 @@
     return frame_scheduler_->GetTaskRunner(TaskType::kInternalTest);
   }
 
+  std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>
+  CreateResourceLoadingTaskRunnerHandle() override {
+    return scheduler::WebResourceLoadingTaskRunnerHandle::CreateUnprioritized(
+        GetLoadingTaskRunner());
+  }
+
  private:
   class MockFrameScheduler final : public scheduler::FakeFrameScheduler {
    public:
diff --git a/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.cc b/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.cc
index 3297570..674b469 100644
--- a/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.cc
+++ b/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.cc
@@ -17,7 +17,7 @@
 
 std::unique_ptr<WebURLLoader> WebURLLoaderFactoryWithMock::CreateURLLoader(
     const WebURLRequest& request,
-    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+    std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>) {
   return mock_factory_->CreateURLLoader(nullptr);
 }
 
diff --git a/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h b/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h
index 3949dfb1..fb02d9e 100644
--- a/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h
+++ b/third_party/blink/renderer/platform/loader/testing/web_url_loader_factory_with_mock.h
@@ -21,7 +21,8 @@
 
   std::unique_ptr<WebURLLoader> CreateURLLoader(
       const WebURLRequest&,
-      scoped_refptr<base::SingleThreadTaskRunner>) override;
+      std::unique_ptr<blink::scheduler::WebResourceLoadingTaskRunnerHandle>)
+      override;
 
  private:
   // Not owned. The mock factory should outlive |this|.
diff --git a/third_party/blink/renderer/platform/network/header_field_tokenizer.cc b/third_party/blink/renderer/platform/network/header_field_tokenizer.cc
index 7825946b..b48dfaf 100644
--- a/third_party/blink/renderer/platform/network/header_field_tokenizer.cc
+++ b/third_party/blink/renderer/platform/network/header_field_tokenizer.cc
@@ -55,7 +55,7 @@
 
 HeaderFieldTokenizer::HeaderFieldTokenizer(const String& header_field)
     : index_(0u), input_(header_field) {
-  SkipSpaces();
+  SkipOptionalWhitespace();
 }
 
 HeaderFieldTokenizer::HeaderFieldTokenizer(HeaderFieldTokenizer&&) = default;
@@ -63,12 +63,13 @@
 bool HeaderFieldTokenizer::Consume(char c) {
   // TODO(cvazac) change this to use LChar
   DCHECK_NE(c, ' ');
+  DCHECK_NE(c, '\t');
 
   if (IsConsumed() || input_[index_] != c)
     return false;
 
   ++index_;
-  SkipSpaces();
+  SkipOptionalWhitespace();
   return true;
 }
 
@@ -82,7 +83,7 @@
     if (input_[index_] == '"') {
       output = builder.ToString();
       ++index_;
-      SkipSpaces();
+      SkipOptionalWhitespace();
       return true;
     }
     if (input_[index_] == '\\') {
@@ -107,7 +108,7 @@
     return false;
 
   output = StringView(input_, start, index_ - start);
-  SkipSpaces();
+  SkipOptionalWhitespace();
   return true;
 }
 
@@ -126,10 +127,8 @@
   return true;
 }
 
-void HeaderFieldTokenizer::SkipSpaces() {
-  // TODO(cvazac) skip tabs, per:
-  // https://tools.ietf.org/html/rfc7230#section-3.2.3
-  while (!IsConsumed() && input_[index_] == ' ')
+void HeaderFieldTokenizer::SkipOptionalWhitespace() {
+  while (!IsConsumed() && (input_[index_] == ' ' || input_[index_] == '\t'))
     ++index_;
 }
 
diff --git a/third_party/blink/renderer/platform/network/header_field_tokenizer.h b/third_party/blink/renderer/platform/network/header_field_tokenizer.h
index 71702553..f8da70c 100644
--- a/third_party/blink/renderer/platform/network/header_field_tokenizer.h
+++ b/third_party/blink/renderer/platform/network/header_field_tokenizer.h
@@ -41,7 +41,7 @@
 
  private:
   bool ConsumeQuotedString(String& output);
-  void SkipSpaces();
+  void SkipOptionalWhitespace();
 
   unsigned index_;
   const String input_;
@@ -49,4 +49,4 @@
 
 }  // namespace blink
 
-#endif
+#endif  // THIRD_PARTY_BLINK_RENDERER_PLATFORM_NETWORK_HEADER_FIELD_TOKENIZER_H_
diff --git a/third_party/blink/renderer/platform/network/parsed_content_header_field_parameters_test.cc b/third_party/blink/renderer/platform/network/parsed_content_header_field_parameters_test.cc
index d1ea6bb..dec0e74 100644
--- a/third_party/blink/renderer/platform/network/parsed_content_header_field_parameters_test.cc
+++ b/third_party/blink/renderer/platform/network/parsed_content_header_field_parameters_test.cc
@@ -35,21 +35,32 @@
 TEST(ParsedContentHeaderFieldParametersTest, Validity) {
   CheckValidity(true, "");
   CheckValidity(true, "  ");
+  CheckValidity(true, "\t");
   CheckValidity(true, "  ;p1=v1");
+  CheckValidity(true, "\t;p1=v1");
   CheckValidity(true, ";  p1=v1");
+  CheckValidity(true, ";\tp1=v1");
   CheckValidity(true, ";p1=v1  ");
+  CheckValidity(true, ";p1=v1\t");
   CheckValidity(true, ";p1 = v1");
+  CheckValidity(true, ";p1\t=\tv1");
+  CheckValidity(true, ";  p1  =  v1  ");
+  CheckValidity(true, ";\tp1\t=\tv1\t");
   CheckValidity(true, ";z=\"ttx&r=z;;\\u\\\"kd==\"");
   CheckValidity(true, "; z=\"\xff\"");
 
   CheckValidity(false, "\r");
   CheckValidity(false, "\n");
   CheckValidity(false, " p1=v1");
+  CheckValidity(false, "\tp1=v1");
   CheckValidity(false, ";p1=v1;");
   CheckValidity(false, ";");
   CheckValidity(false, ";  ");
+  CheckValidity(false, ";\t");
   CheckValidity(false, "; p1");
+  CheckValidity(false, ";\tp1");
   CheckValidity(false, "; p1;");
+  CheckValidity(false, ";\tp1;");
   CheckValidity(false, ";\"xx");
   CheckValidity(false, ";\"xx=y");
   CheckValidity(false, "; \"z\"=u");
diff --git a/third_party/blink/renderer/platform/scheduler/child/features.h b/third_party/blink/renderer/platform/scheduler/child/features.h
index b518589..e8da69a 100644
--- a/third_party/blink/renderer/platform/scheduler/child/features.h
+++ b/third_party/blink/renderer/platform/scheduler/child/features.h
@@ -100,6 +100,12 @@
 const base::Feature kUseResourceFetchPriority{
     "BlinkSchedulerResourceFetchPriority", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enables setting the priority of cross-origin task queues to
+// low priority.
+const base::Feature kLowPriorityForCrossOrigin{
+    "BlinkSchedulerLowPriorityForCrossOrigin",
+    base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enables a chosen experiments only during the load use case.
 const base::Feature kExperimentOnlyWhenLoading{
     "BlinkSchedulerExperimentOnlyWhenLoading",
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
index 55c2249..a2d2fee 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/frame_scheduler_impl.cc
@@ -333,6 +333,7 @@
     // PostedMessage can be used for navigation, so we shouldn't defer it
     // when expecting a user gesture.
     case TaskType::kPostedMessage:
+    case TaskType::kWorkerAnimation:
     // UserInteraction tasks should be run even when expecting a user gesture.
     case TaskType::kUserInteraction:
     // Media events should not be deferred to ensure that media playback is
@@ -857,6 +858,12 @@
         IsAdFrame()) {
       return TaskQueue::QueuePriority::kBestEffortPriority;
     }
+
+    if (main_thread_scheduler_->scheduling_settings()
+            .low_priority_cross_origin &&
+        IsCrossOrigin()) {
+      return TaskQueue::QueuePriority::kLowPriority;
+    }
   }
 
   return task_queue->queue_type() ==
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 9fbcb9a..86834b2 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
@@ -1382,6 +1382,109 @@
   EXPECT_EQ(task_queue->GetQueuePriority(), priority);
 }
 
+class LowPriorityCrossOriginTaskExperimentTest : public FrameSchedulerImplTest {
+ public:
+  LowPriorityCrossOriginTaskExperimentTest()
+      : FrameSchedulerImplTest({kLowPriorityForCrossOrigin},
+                               {kExperimentOnlyWhenLoading}) {}
+};
+
+TEST_F(LowPriorityCrossOriginTaskExperimentTest, FrameQueuesPriorities) {
+  EXPECT_FALSE(frame_scheduler_->IsCrossOrigin());
+
+  // Same Origin Task Queues.
+  EXPECT_EQ(LoadingTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(LoadingControlTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kHighPriority);
+  EXPECT_EQ(DeferrableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(ThrottleableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(PausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(UnpausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+
+  frame_scheduler_->SetCrossOrigin(true);
+  EXPECT_TRUE(frame_scheduler_->IsCrossOrigin());
+
+  EXPECT_EQ(LoadingTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(LoadingControlTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(DeferrableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(ThrottleableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(PausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(UnpausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+}
+
+class LowPriorityCrossOriginTaskDuringLoadingExperimentTest
+    : public FrameSchedulerImplTest {
+ public:
+  LowPriorityCrossOriginTaskDuringLoadingExperimentTest()
+      : FrameSchedulerImplTest(
+            {kLowPriorityForCrossOrigin, kExperimentOnlyWhenLoading},
+            {}) {}
+};
+
+TEST_F(LowPriorityCrossOriginTaskDuringLoadingExperimentTest,
+       FrameQueuesPriorities) {
+  // Main thread is in the loading use case.
+  scheduler_->DidStartProvisionalLoad(true);
+  EXPECT_TRUE(page_scheduler_->IsLoading());
+
+  EXPECT_EQ(LoadingTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(LoadingControlTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kHighPriority);
+  EXPECT_EQ(DeferrableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(ThrottleableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(PausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(UnpausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+
+  frame_scheduler_->SetCrossOrigin(true);
+  EXPECT_TRUE(frame_scheduler_->IsCrossOrigin());
+
+  EXPECT_EQ(LoadingTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(LoadingControlTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(DeferrableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(ThrottleableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(PausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+  EXPECT_EQ(UnpausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kLowPriority);
+
+  // Main thread is no longer in loading use case.
+  scheduler_->OnFirstMeaningfulPaint();
+  EXPECT_FALSE(page_scheduler_->IsLoading());
+
+  EXPECT_EQ(LoadingTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(LoadingControlTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kHighPriority);
+  EXPECT_EQ(DeferrableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(ThrottleableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(PausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+  EXPECT_EQ(UnpausableTaskQueue()->GetQueuePriority(),
+            TaskQueue::QueuePriority::kNormalPriority);
+}
+
 }  // namespace frame_scheduler_impl_unittest
 }  // namespace scheduler
 }  // namespace blink
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
index b69d7c6d..0708030 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.cc
@@ -219,6 +219,8 @@
       return "WorkerThreadTaskQueueV8";
     case TaskType::kWorkerThreadTaskQueueCompositor:
       return "WorkerThreadTaskQueueCompositor";
+    case TaskType::kWorkerAnimation:
+      return "WorkerAnimation";
     case TaskType::kCount:
       return "Count";
   }
@@ -685,6 +687,9 @@
   best_effort_ad_frame =
       base::FeatureList::IsEnabled(kBestEffortPriorityForAdFrame);
 
+  low_priority_cross_origin =
+      base::FeatureList::IsEnabled(kLowPriorityForCrossOrigin);
+
   use_resource_fetch_priority =
       base::FeatureList::IsEnabled(kUseResourceFetchPriority);
 
diff --git a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
index d15386e..1c26f39 100644
--- a/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
+++ b/third_party/blink/renderer/platform/scheduler/main_thread/main_thread_scheduler_impl.h
@@ -104,6 +104,9 @@
     bool low_priority_ad_frame;
     bool best_effort_ad_frame;
 
+    // Origin type priority experiment (crbug.com/856158).
+    bool low_priority_cross_origin;
+
     // Use resource fetch priority for resource loading tasks
     // (crbug.com/860545).
     bool use_resource_fetch_priority;
diff --git a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
index 94051ea..61bb507f 100644
--- a/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
+++ b/third_party/blink/renderer/platform/scheduler/worker/worker_scheduler.cc
@@ -92,6 +92,7 @@
   switch (type) {
     case TaskType::kJavascriptTimer:
     case TaskType::kPostedMessage:
+    case TaskType::kWorkerAnimation:
       return TaskQueueWithTaskType::Create(throttleable_task_queue_, type);
     case TaskType::kDeprecatedNone:
     case TaskType::kDOMManipulation:
diff --git a/third_party/khronos/GLES2/gl2ext.h b/third_party/khronos/GLES2/gl2ext.h
index 77e06829..f7c7ed4a 100644
--- a/third_party/khronos/GLES2/gl2ext.h
+++ b/third_party/khronos/GLES2/gl2ext.h
@@ -2168,6 +2168,11 @@
 #endif
 #endif /* GL_INTEL_performance_query */
 
+#ifndef GL_MESA_framebuffer_flip_y
+#define GL_MESA_framebuffer_flip_y 1
+#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB
+#endif /* GL_MESA_framebuffer_flip_y */
+
 #ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers
 #define GL_NVX_blend_equation_advanced_multi_draw_buffers 1
 #endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */
diff --git a/third_party/libprotobuf-mutator/BUILD.gn b/third_party/libprotobuf-mutator/BUILD.gn
index 3d81890..c329eaf 100644
--- a/third_party/libprotobuf-mutator/BUILD.gn
+++ b/third_party/libprotobuf-mutator/BUILD.gn
@@ -98,13 +98,14 @@
   ]
 }
 
-# Component that can provide protobuf_full to non-testonly targets
-component("protobuf_full") {
-  # Stop people from using me by accident.
-  if (!use_libfuzzer) {
-    testonly = true
+# Avoid CQ complaints on platforms we don't care about (ie: iOS).
+# Also prevent people from using this to include protobuf_full into a production
+# build of Chrome.
+if (use_libfuzzer) {
+  # Component that can provide protobuf_full to non-testonly targets
+  static_library("protobuf_full") {
+    public_deps = [
+      "//third_party/protobuf:protobuf_full",
+    ]
   }
-  public_deps = [
-    "//third_party/protobuf:protobuf_full",
-  ]
 }
diff --git a/third_party/libprotobuf-mutator/fuzzable_proto_library.gni b/third_party/libprotobuf-mutator/fuzzable_proto_library.gni
index 4e70c62..369df0d 100644
--- a/third_party/libprotobuf-mutator/fuzzable_proto_library.gni
+++ b/third_party/libprotobuf-mutator/fuzzable_proto_library.gni
@@ -19,9 +19,19 @@
       generate_python = false
     }
 
-    # Use a component for the build target with target_name. That way we can
-    # also force dependencies to build using protobuf_full.
-    component(target_name) {
+    # Inspired by proto_library.gni's handling of
+    # component_build_force_source_set.
+    if (defined(component_build_force_source_set) &&
+        component_build_force_source_set && is_component_build) {
+      link_target_type = "source_set"
+    } else {
+      link_target_type = "static_library"
+    }
+
+    # Use a static_library for the build target with target_name or
+    # source_set. That way we can also force dependencies to build using
+    # protobuf_full.
+    target(link_target_type, target_name) {
       public_deps = [
         ":proto_library_" + target_name,
         "//third_party/libprotobuf-mutator:protobuf_full",
diff --git a/third_party/sqlite/BUILD.gn b/third_party/sqlite/BUILD.gn
index 28889b6d..8b9d383 100644
--- a/third_party/sqlite/BUILD.gn
+++ b/third_party/sqlite/BUILD.gn
@@ -56,6 +56,13 @@
     # TODO(pwnall): Upstream the ability to use this define.
     "SQLITE_MMAP_READ_ONLY=1",
 
+    # Needed by the SQL MemoryDumpProvider.
+    #
+    # Setting this to 1 is needed to collect the information reported by
+    # sqlite3_status64(SQLITE_STATUS_MEMORY_USED). Without this setting, the API
+    # still exists, but does not work as promised.
+    "SQLITE_DEFAULT_MEMSTATUS=1",
+
     # By default SQLite pre-allocates 100 pages of pcache data, which will not
     # be released until the handle is closed.  This is contrary to Chromium's
     # memory-usage goals.
@@ -84,6 +91,15 @@
     # Chromium calls sqlite3_reset() correctly to reset prepared statements.
     "SQLITE_OMIT_AUTORESET",
 
+    # Chrome doesn't ship the SQLite shell, so command auto-completion is not
+    # needed. Chrome developers who build the SQLite shell living at
+    # //third_party/sqlite:sqlite_shell for diagnostic purposes will have to
+    # live without auto-completion.
+    "SQLITE_OMIT_COMPLETE",
+
+    # Chrome does not use sqlite3_column_decltype().
+    "SQLITE_OMIT_DECLTYPE",
+
     # Chromium does not use sqlite3_{get,free}_table().
     "SQLITE_OMIT_GET_TABLE",
 
@@ -100,8 +116,8 @@
     # Chromium doesn't use sqlite3_{profile,trace}().
     "SQLITE_OMIT_TRACE",
 
-    # TODO(pwnall): Add SQLITE_OMIT_COMPLETE when we import a SQLite release
-    #               including https://www.sqlite.org/src/info/c3e816cca4ddf096
+    # Uses isnan() in the C99 standard library.
+    "SQLITE_HAVE_ISNAN",
   ]
 
   # On OSX, SQLite has extra logic for detecting the use of network
@@ -182,12 +198,17 @@
 # Naming the library "sqlite3" can cause conflicts with the system library.
 component("chromium_sqlite3") {
   visibility = [ ":*" ]
+
+  public = [
+    "sqlite3.h",
+    "src/src/recover.h",
+  ]
+
   sources = [
     "amalgamation/config.h",
     "amalgamation/sqlite3.c",
     "amalgamation/sqlite3.h",
     "src/src/recover.c",
-    "src/src/recover.h",
     "src/src/recover_varint.c",
   ]
 
@@ -243,9 +264,7 @@
     ":sqlite_warnings",
   ]
 
-  if (is_linux) {
-    libs = [ "dl" ]
-  } else if (is_mac || is_ios) {
+  if (is_mac || is_ios) {
     libs = [ "CoreFoundation.framework" ]
     if (!is_ios) {
       libs += [ "CoreServices.framework" ]
@@ -255,8 +274,6 @@
       "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576",
       "SQLITE_DEFAULT_AUTOVACUUM=1",
       "SQLITE_TEMP_STORE=3",
-      "SQLITE_ENABLE_FTS3_BACKWARDS",
-      "DSQLITE_DEFAULT_FILE_FORMAT=4",
     ]
   }
 
diff --git a/third_party/tcmalloc/BUILD.gn b/third_party/tcmalloc/BUILD.gn
index 4249264..bfccb3c 100644
--- a/third_party/tcmalloc/BUILD.gn
+++ b/third_party/tcmalloc/BUILD.gn
@@ -2,12 +2,19 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/config/allocator.gni")
 import("//build/config/compiler/compiler.gni")
 
 executable("addr2line-pdb") {
-  sources = [
-    "gperftools-2.0/chromium/src/windows/addr2line-pdb.c",
-  ]
+  if (use_new_tcmalloc) {
+    sources = [
+      "chromium/src/windows/addr2line-pdb.c",
+    ]
+  } else {
+    sources = [
+      "gperftools-2.0/chromium/src/windows/addr2line-pdb.c",
+    ]
+  }
 
   configs -= [ "//build/config/compiler:chromium_code" ]
   configs += [ "//build/config/compiler:no_chromium_code" ]
diff --git a/third_party/tcmalloc/README.chromium b/third_party/tcmalloc/README.chromium
index c3ef25a..f910370a 100644
--- a/third_party/tcmalloc/README.chromium
+++ b/third_party/tcmalloc/README.chromium
@@ -114,3 +114,4 @@
 - Added support for mips64el.
 - Pulled SuggestedDelayNS() implementation for 32bit architectures which do not support 64bit atomicity
 - Pulled several mipsel related changes from lss project to fix compile errors
+- Fixed line endings in vendor/README_windows.txt to Unix (LF)
diff --git a/third_party/tcmalloc/vendor/README_windows.txt b/third_party/tcmalloc/vendor/README_windows.txt
index 7bba122..406bd01 100644
--- a/third_party/tcmalloc/vendor/README_windows.txt
+++ b/third_party/tcmalloc/vendor/README_windows.txt
@@ -1,120 +1,120 @@
---- COMPILING

-

-This project has begun being ported to Windows, only tcmalloc_minimal

-is supported at this time.  A working solution file exists in this

-directory:

-    gperftools.sln

-

-You can load this solution file into VC++ 7.1 (Visual Studio 2003) or

-later -- in the latter case, it will automatically convert the files

-to the latest format for you.

-

-When you build the solution, it will create a number of unittests,

-which you can run by hand (or, more easily, under the Visual Studio

-debugger) to make sure everything is working properly on your system.

-The binaries will end up in a directory called "debug" or "release" in

-the top-level directory (next to the .sln file).  It will also create

-two binaries, nm-pdb and addr2line-pdb, which you should install in

-the same directory you install the 'pprof' perl script.

-

-I don't know very much about how to install DLLs on Windows, so you'll

-have to figure out that part for yourself.  If you choose to just

-re-use the existing .sln, make sure you set the IncludeDir's

-appropriately!  Look at the properties for libtcmalloc_minimal.dll.

-

-Note that these systems are set to build in Debug mode by default.

-You may want to change them to Release mode.

-

-To use tcmalloc_minimal in your own projects, you should only need to

-build the dll and install it someplace, so you can link it into

-further binaries.  To use the dll, you need to add the following to

-the linker line of your executable:

-   "libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc" 

-

-Here is how to accomplish this in Visual Studio 2005 (VC8):

-

-1) Have your executable depend on the tcmalloc library by selecting

-   "Project Dependencies..." from the "Project" menu.  Your executable

-   should depend on "libtcmalloc_minimal".

-

-2) Have your executable depend on a tcmalloc symbol -- this is

-   necessary so the linker doesn't "optimize out" the libtcmalloc

-   dependency -- by right-clicking on your executable's project (in

-   the solution explorer), selecting Properties from the pull-down

-   menu, then selecting "Configuration Properties" -> "Linker" ->

-   "Input".  Then, in the "Force Symbol References" field, enter the

-   text "__tcmalloc" (without the quotes).  Be sure to do this for both

-   debug and release modes!

-

-You can also link tcmalloc code in statically -- see the example

-project tcmalloc_minimal_unittest-static, which does this.  For this

-to work, you'll need to add "/D PERFTOOLS_DLL_DECL=" to the compile

-line of every perftools .cc file.  You do not need to depend on the

-tcmalloc symbol in this case (that is, you don't need to do either

-step 1 or step 2 from above).

-

-An alternative to all the above is to statically link your application

-with libc, and then replace its malloc with tcmalloc.  This allows you

-to just build and link your program normally; the tcmalloc support

-comes in a post-processing step.  This is more reliable than the above

-technique (which depends on run-time patching, which is inherently

-fragile), though more work to set up.  For details, see

-   https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b

-

-

---- THE HEAP-PROFILER

-

-The heap-profiler has had a preliminary port to Windows but does not

-build on Windows by default.  It has not been well tested, and

-probably does not work at all when Frame Pointer Optimization (FPO) is

-enabled -- that is, in release mode.  The other features of perftools,

-such as the cpu-profiler and leak-checker, have not yet been ported to

-Windows at all.

-

-

---- WIN64

-

-The function-patcher has to disassemble code, and is very

-x86-specific.  However, the rest of perftools should work fine for

-both x86 and x64.  In particular, if you use the 'statically link with

-libc, and replace its malloc with tcmalloc' approach, mentioned above,

-it should be possible to use tcmalloc with 64-bit windows.

-

-As of perftools 1.10, there is some support for disassembling x86_64

-instructions, for work with win64.  This work is preliminary, but the

-test file preamble_patcher_test.cc is provided to play around with

-that a bit.  preamble_patcher_test will not compile on win32.

-

-

---- ISSUES

-

-NOTE FOR WIN2K USERS: According to reports

-(http://code.google.com/p/gperftools/issues/detail?id=127)

-the stack-tracing necessary for the heap-profiler does not work on

-Win2K.  The best workaround is, if you are building on a Win2k system

-is to add "/D NO_TCMALLOC_SAMPLES=" to your build, to turn off the

-stack-tracing.  You will not be able to use the heap-profiler if you

-do this.

-

-NOTE ON _MSIZE and _RECALLOC: The tcmalloc version of _msize returns

-the size of the region tcmalloc allocated for you -- which is at least

-as many bytes you asked for, but may be more.  (btw, these *are* bytes

-you own, even if you didn't ask for all of them, so it's correct code

-to access all of them if you want.)  Unfortunately, the Windows CRT

-_recalloc() routine assumes that _msize returns exactly as many bytes

-as were requested.  As a result, _recalloc() may not zero out new

-bytes correctly.  IT'S SAFEST NOT TO USE _RECALLOC WITH TCMALLOC.

-_recalloc() is a tricky routine to use in any case (it's not safe to

-use with realloc, for instance).

-

-

-I have little experience with Windows programming, so there may be

-better ways to set this up than I've done!  If you run across any

-problems, please post to the google-perftools Google Group, or report

-them on the gperftools Google Code site:

-   http://groups.google.com/group/google-perftools

-   http://code.google.com/p/gperftools/issues/list

-

--- craig

-

-Last modified: 2 February 2012

+--- COMPILING
+
+This project has begun being ported to Windows, only tcmalloc_minimal
+is supported at this time.  A working solution file exists in this
+directory:
+    gperftools.sln
+
+You can load this solution file into VC++ 7.1 (Visual Studio 2003) or
+later -- in the latter case, it will automatically convert the files
+to the latest format for you.
+
+When you build the solution, it will create a number of unittests,
+which you can run by hand (or, more easily, under the Visual Studio
+debugger) to make sure everything is working properly on your system.
+The binaries will end up in a directory called "debug" or "release" in
+the top-level directory (next to the .sln file).  It will also create
+two binaries, nm-pdb and addr2line-pdb, which you should install in
+the same directory you install the 'pprof' perl script.
+
+I don't know very much about how to install DLLs on Windows, so you'll
+have to figure out that part for yourself.  If you choose to just
+re-use the existing .sln, make sure you set the IncludeDir's
+appropriately!  Look at the properties for libtcmalloc_minimal.dll.
+
+Note that these systems are set to build in Debug mode by default.
+You may want to change them to Release mode.
+
+To use tcmalloc_minimal in your own projects, you should only need to
+build the dll and install it someplace, so you can link it into
+further binaries.  To use the dll, you need to add the following to
+the linker line of your executable:
+   "libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc" 
+
+Here is how to accomplish this in Visual Studio 2005 (VC8):
+
+1) Have your executable depend on the tcmalloc library by selecting
+   "Project Dependencies..." from the "Project" menu.  Your executable
+   should depend on "libtcmalloc_minimal".
+
+2) Have your executable depend on a tcmalloc symbol -- this is
+   necessary so the linker doesn't "optimize out" the libtcmalloc
+   dependency -- by right-clicking on your executable's project (in
+   the solution explorer), selecting Properties from the pull-down
+   menu, then selecting "Configuration Properties" -> "Linker" ->
+   "Input".  Then, in the "Force Symbol References" field, enter the
+   text "__tcmalloc" (without the quotes).  Be sure to do this for both
+   debug and release modes!
+
+You can also link tcmalloc code in statically -- see the example
+project tcmalloc_minimal_unittest-static, which does this.  For this
+to work, you'll need to add "/D PERFTOOLS_DLL_DECL=" to the compile
+line of every perftools .cc file.  You do not need to depend on the
+tcmalloc symbol in this case (that is, you don't need to do either
+step 1 or step 2 from above).
+
+An alternative to all the above is to statically link your application
+with libc, and then replace its malloc with tcmalloc.  This allows you
+to just build and link your program normally; the tcmalloc support
+comes in a post-processing step.  This is more reliable than the above
+technique (which depends on run-time patching, which is inherently
+fragile), though more work to set up.  For details, see
+   https://groups.google.com/group/google-perftools/browse_thread/thread/41cd3710af85e57b
+
+
+--- THE HEAP-PROFILER
+
+The heap-profiler has had a preliminary port to Windows but does not
+build on Windows by default.  It has not been well tested, and
+probably does not work at all when Frame Pointer Optimization (FPO) is
+enabled -- that is, in release mode.  The other features of perftools,
+such as the cpu-profiler and leak-checker, have not yet been ported to
+Windows at all.
+
+
+--- WIN64
+
+The function-patcher has to disassemble code, and is very
+x86-specific.  However, the rest of perftools should work fine for
+both x86 and x64.  In particular, if you use the 'statically link with
+libc, and replace its malloc with tcmalloc' approach, mentioned above,
+it should be possible to use tcmalloc with 64-bit windows.
+
+As of perftools 1.10, there is some support for disassembling x86_64
+instructions, for work with win64.  This work is preliminary, but the
+test file preamble_patcher_test.cc is provided to play around with
+that a bit.  preamble_patcher_test will not compile on win32.
+
+
+--- ISSUES
+
+NOTE FOR WIN2K USERS: According to reports
+(http://code.google.com/p/gperftools/issues/detail?id=127)
+the stack-tracing necessary for the heap-profiler does not work on
+Win2K.  The best workaround is, if you are building on a Win2k system
+is to add "/D NO_TCMALLOC_SAMPLES=" to your build, to turn off the
+stack-tracing.  You will not be able to use the heap-profiler if you
+do this.
+
+NOTE ON _MSIZE and _RECALLOC: The tcmalloc version of _msize returns
+the size of the region tcmalloc allocated for you -- which is at least
+as many bytes you asked for, but may be more.  (btw, these *are* bytes
+you own, even if you didn't ask for all of them, so it's correct code
+to access all of them if you want.)  Unfortunately, the Windows CRT
+_recalloc() routine assumes that _msize returns exactly as many bytes
+as were requested.  As a result, _recalloc() may not zero out new
+bytes correctly.  IT'S SAFEST NOT TO USE _RECALLOC WITH TCMALLOC.
+_recalloc() is a tricky routine to use in any case (it's not safe to
+use with realloc, for instance).
+
+
+I have little experience with Windows programming, so there may be
+better ways to set this up than I've done!  If you run across any
+problems, please post to the google-perftools Google Group, or report
+them on the gperftools Google Code site:
+   http://groups.google.com/group/google-perftools
+   http://code.google.com/p/gperftools/issues/list
+
+-- craig
+
+Last modified: 2 February 2012
diff --git a/tools/android/errorprone_plugin/BUILD.gn b/tools/android/errorprone_plugin/BUILD.gn
index be727d8c..d7f192dd 100644
--- a/tools/android/errorprone_plugin/BUILD.gn
+++ b/tools/android/errorprone_plugin/BUILD.gn
@@ -6,6 +6,8 @@
 
 java_library("errorprone_plugin_java") {
   java_files = [
+    # Turned off because of existing code which fails the check
+    # "src/org/chromium/tools/errorprone/plugin/NoContextGetApplicationContext.java",
     "src/org/chromium/tools/errorprone/plugin/NoSynchronizedMethodCheck.java",
     "src/org/chromium/tools/errorprone/plugin/NoSynchronizedThisCheck.java",
   ]
diff --git a/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoContextGetApplicationContext.java b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoContextGetApplicationContext.java
new file mode 100644
index 0000000..95205a09b
--- /dev/null
+++ b/tools/android/errorprone_plugin/src/org/chromium/tools/errorprone/plugin/NoContextGetApplicationContext.java
@@ -0,0 +1,62 @@
+// 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.
+
+package org.chromium.tools.errorprone.plugin;
+
+import static com.google.errorprone.matchers.Matchers.instanceMethod;
+
+import com.google.auto.service.AutoService;
+import com.google.errorprone.BugPattern;
+import com.google.errorprone.VisitorState;
+import com.google.errorprone.bugpatterns.BugChecker;
+import com.google.errorprone.matchers.Description;
+import com.google.errorprone.matchers.Matcher;
+import com.google.errorprone.suppliers.Supplier;
+import com.google.errorprone.suppliers.Suppliers;
+import com.sun.source.tree.ExpressionTree;
+import com.sun.source.tree.MethodInvocationTree;
+import com.sun.tools.javac.code.Type;
+
+/**
+ * Checks for calls to getApplicationContext from {@link android.content.Context}.
+ * These calls should be replaced with the static getApplicationContext method in
+ * {@link org.chromium.base.ContextUtils}.
+ */
+@AutoService(BugChecker.class)
+@BugPattern(name = "NoContextGetApplicationContext",
+        summary = "Do not use Context#getApplicationContext",
+        severity = BugPattern.SeverityLevel.ERROR, linkType = BugPattern.LinkType.CUSTOM,
+        link = "https://bugs.chromium.org/p/chromium/issues/detail?id=560466")
+public class NoContextGetApplicationContext
+        extends BugChecker implements BugChecker.MethodInvocationTreeMatcher {
+    private static final String CONTEXT_CLASS_NAME = "android.content.Context";
+    private static final String CONTEXT_UTILS_CLASS_NAME = "org.chromium.base.ContextUtils";
+    private static final String METHOD_NAME = "getApplicationContext";
+
+    private static final Supplier<Type> CONTEXT_UTILS_SUPPLIER =
+            Suppliers.typeFromString(CONTEXT_UTILS_CLASS_NAME);
+    private static final Matcher<ExpressionTree> CONTEXT_MATCHER =
+            instanceMethod()
+                    .onDescendantOf(Suppliers.typeFromString(CONTEXT_CLASS_NAME))
+                    .named(METHOD_NAME);
+
+    @Override
+    public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState visitorState) {
+        if (!CONTEXT_MATCHER.matches(tree, visitorState)) {
+            return Description.NO_MATCH;
+        }
+
+        // If ContextUtils can't be loaded, we are probably inside a third_party lib and shouldn't
+        // check for errors.
+        boolean canLoadContextUtils = CONTEXT_UTILS_SUPPLIER.get(visitorState) != null;
+        if (!canLoadContextUtils) {
+            return Description.NO_MATCH;
+        }
+
+        return buildDescription(tree)
+                .setMessage("Don't use Context#getApplicationContext - "
+                        + "call ContextUtils.getApplicationContext instead")
+                .build();
+    }
+}
diff --git a/tools/binary_size/libsupersize/archive.py b/tools/binary_size/libsupersize/archive.py
index 687f9d3..e198ee7f 100644
--- a/tools/binary_size/libsupersize/archive.py
+++ b/tools/binary_size/libsupersize/archive.py
@@ -817,8 +817,8 @@
       # More likely for there to be a bug in supersize than an ELF to not have a
       # single string literal.
       assert merge_string_syms
-      string_positions = [(s.address, s.size) for s in merge_string_syms]
-      bulk_analyzer.AnalyzeStringLiterals(elf_path, string_positions)
+      string_ranges = [(s.address, s.size) for s in merge_string_syms]
+      bulk_analyzer.AnalyzeStringLiterals(elf_path, string_ranges)
 
   logging.info('Stripping linker prefixes from symbol names')
   _StripLinkerAddedSymbolPrefixes(raw_symbols)
diff --git a/tools/binary_size/libsupersize/nm.py b/tools/binary_size/libsupersize/nm.py
index e5afe97c..466ade18 100644
--- a/tools/binary_size/libsupersize/nm.py
+++ b/tools/binary_size/libsupersize/nm.py
@@ -2,12 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-"""Runs nm on every .o file that comprises an ELF (plus some analysis).
-
-The design of this file is entirely to work around Python's lack of concurrency.
+"""Runs nm on specified .a and .o file, plus some analysis.
 
 CollectAliasesByAddress():
-  Runs "nm" on the elf to collect all symbol names. This reveals symbol names of
+  Runs nm on the elf to collect all symbol names. This reveals symbol names of
   identical-code-folded functions.
 
 CollectAliasesByAddressAsync():
@@ -20,7 +18,6 @@
 """
 
 import collections
-import os
 import subprocess
 
 import concurrent
@@ -146,7 +143,7 @@
         string_addresses.append(line[:space_idx].lstrip('0') or '0')
       elif _IsRelevantObjectFileName(mangled_name):
         symbol_names.add(mangled_name)
-  return string_addresses, symbol_names
+  return symbol_names, string_addresses
 
 
 # This is a target for BulkForkAndCall().
@@ -176,14 +173,14 @@
     assert not is_archive
     path = target[0]
 
-  string_addresses_by_path = {}
   symbol_names_by_path = {}
+  string_addresses_by_path = {}
   while path:
     if is_archive:
       # E.g. foo/bar.a(baz.o)
       path = '%s(%s)' % (target, path)
 
-    string_addresses, mangled_symbol_names = _ParseOneObjectFileNmOutput(lines)
+    mangled_symbol_names, string_addresses = _ParseOneObjectFileNmOutput(lines)
     symbol_names_by_path[path] = mangled_symbol_names
     if string_addresses:
       string_addresses_by_path[path] = string_addresses
diff --git a/tools/binary_size/libsupersize/obj_analyzer.py b/tools/binary_size/libsupersize/obj_analyzer.py
index eee679b..acbd9e82 100755
--- a/tools/binary_size/libsupersize/obj_analyzer.py
+++ b/tools/binary_size/libsupersize/obj_analyzer.py
@@ -7,6 +7,10 @@
 
 This file works around Python's lack of concurrency.
 
+_BulkObjectFileAnalyzerWorker:
+  Performs the actual work. Uses Process Pools to shard out per-object-file
+  work and then aggregates results.
+
 _BulkObjectFileAnalyzerMaster:
   Creates a subprocess and sends IPCs to it asking it to do work.
 
@@ -15,19 +19,17 @@
   Runs _BulkObjectFileAnalyzerWorker on a background thread in order to stay
   responsive to IPCs.
 
-_BulkObjectFileAnalyzerWorker:
-  Performs the actual work. Uses Process Pools to shard out per-object-file
-  work and then aggregates results.
-
 BulkObjectFileAnalyzer:
-  Alias for _BulkObjectFileAnalyzerMaster, but when SUPERSIZE_DISABLE_ASYNC=1,
-  alias for _BulkObjectFileAnalyzerWorker.
-  * AnalyzePaths: Run "nm" on all .o files to collect symbol names that exist
+  Extracts information from .o files. Alias for _BulkObjectFileAnalyzerMaster,
+  but when SUPERSIZE_DISABLE_ASYNC=1, alias for _BulkObjectFileAnalyzerWorker.
+  * AnalyzePaths(): Processes all .o files to collect symbol names that exist
     within each. Does not work with thin archives (expand them first).
-  * SortPaths: Sort results of AnalyzePaths().
-  * AnalyzeStringLiterals: Must be run after AnalyzePaths() has completed.
+  * SortPaths(): Sort results of AnalyzePaths().
+  * AnalyzeStringLiterals(): Must be run after AnalyzePaths() has completed.
     Extracts string literals from .o files, and then locates them within the
     "** merge strings" sections within an ELF's .rodata section.
+  * GetSymbolNames(): Accessor.
+  * Close(): Disposes data.
 
 This file can also be run stand-alone in order to test out the logic on smaller
 sample sizes.
@@ -78,36 +80,58 @@
   return tool_prefix
 
 
+class _PathsByType:
+  def __init__(self, arch, obj):
+    self.arch = arch
+    self.obj = obj
+
+
 class _BulkObjectFileAnalyzerWorker(object):
   def __init__(self, tool_prefix, output_directory):
     self._tool_prefix = _MakeToolPrefixAbsolute(tool_prefix)
     self._output_directory = output_directory
+    self._list_of_encoded_elf_string_ranges_by_path = None
     self._paths_by_name = collections.defaultdict(list)
     self._encoded_string_addresses_by_path_chunks = []
-    self._list_of_encoded_elf_string_positions_by_path = None
 
-  def AnalyzePaths(self, paths):
-    def iter_job_params():
-      object_paths = []
-      for path in paths:
-        # Note: ResolveStringPieces() relies upon .a not being grouped.
-        if path.endswith('.a'):
-          yield (path,)
-        else:
-          object_paths.append(path)
+  def _ClassifyPaths(self, paths):
+    """Classifies |paths| (.o and .a files) by file type into separate lists.
 
-      BATCH_SIZE = 50  # Chosen arbitrarily.
-      for i in xrange(0, len(object_paths), BATCH_SIZE):
-        batch = object_paths[i:i + BATCH_SIZE]
-        yield (batch,)
+    Returns:
+      A _PathsByType instance storing classified disjoint sublists of |paths|.
+    """
+    arch_paths = []
+    obj_paths = []
+    for path in paths:
+      if path.endswith('.a'):
+        arch_paths.append(path)
+      else:
+        obj_paths.append(path)
+    return _PathsByType(arch=arch_paths, obj=obj_paths)
 
-    params = list(iter_job_params())
+  def _MakeBatches(self, paths, size=None):
+    if size is None:
+      # Create 1-tuples of strings.
+      return [(p,) for p in paths]
+    # Create 1-tuples of arrays of strings.
+    return [(paths[i:i + size],) for i in xrange(0, len(paths), size)]
+
+  def _DoBulkFork(self, runner, batches):
     # Order of the jobs doesn't matter since each job owns independent paths,
     # and our output is a dict where paths are the key.
-    results = concurrent.BulkForkAndCall(
-        nm.RunNmOnIntermediates, params, tool_prefix=self._tool_prefix,
+    return concurrent.BulkForkAndCall(
+        runner, batches, tool_prefix=self._tool_prefix,
         output_directory=self._output_directory)
 
+  def _RunNm(self, paths_by_type):
+    """Calls nm to get symbols and string addresses."""
+    # Downstream functions rely upon .a not being grouped.
+    batches = self._MakeBatches(paths_by_type.arch, None)
+    # Combine object files and Bitcode files for nm
+    BATCH_SIZE = 50  # Arbitrarily chosen.
+    batches.extend(self._MakeBatches(paths_by_type.obj, BATCH_SIZE))
+    results = self._DoBulkFork(nm.RunNmOnIntermediates, batches)
+
     # Names are still mangled.
     all_paths_by_name = self._paths_by_name
     for encoded_syms, encoded_strs in results:
@@ -118,40 +142,60 @@
 
       if encoded_strs != concurrent.EMPTY_ENCODED_DICT:
         self._encoded_string_addresses_by_path_chunks.append(encoded_strs)
+
+  def AnalyzePaths(self, paths):
+    logging.debug('worker: AnalyzePaths() started.')
+    paths_by_type = self._ClassifyPaths(paths)
+    logging.info('File counts: {\'arch\': %d, \'obj\': %d}',
+                 len(paths_by_type.arch), len(paths_by_type.obj))
+    self._RunNm(paths_by_type)
     logging.debug('worker: AnalyzePaths() completed.')
 
   def SortPaths(self):
-    # Finally, demangle all names, which can result in some merging of lists.
+    # Demangle all names, which can result in some merging of lists.
     self._paths_by_name = demangle.DemangleKeysAndMergeLists(
         self._paths_by_name, self._tool_prefix)
     # Sort and uniquefy.
     for key in self._paths_by_name.iterkeys():
       self._paths_by_name[key] = sorted(set(self._paths_by_name[key]))
 
-  def AnalyzeStringLiterals(self, elf_path, elf_string_positions):
-    logging.debug('worker: AnalyzeStringLiterals() started.')
-    # Read string_data from elf_path, to be shared by forked processes.
+  def _ReadElfStringData(self, elf_path, elf_string_ranges):
+    # Read string_data from elf_path, to be shared with forked processes.
     address, offset, _ = string_extract.LookupElfRodataInfo(
         elf_path, self._tool_prefix)
     adjust = address - offset
-    abs_string_positions = (
-        (addr - adjust, s) for addr, s in elf_string_positions)
-    string_data = string_extract.ReadFileChunks(elf_path, abs_string_positions)
+    abs_elf_string_ranges = (
+        (addr - adjust, s) for addr, s in elf_string_ranges)
+    return string_extract.ReadFileChunks(elf_path, abs_elf_string_ranges)
 
+  def _GetEncodedRangesFromStringAddresses(self, string_data):
     params = ((chunk,)
         for chunk in self._encoded_string_addresses_by_path_chunks)
     # Order of the jobs doesn't matter since each job owns independent paths,
     # and our output is a dict where paths are the key.
     results = concurrent.BulkForkAndCall(
-        string_extract.ResolveStringPieces, params, string_data=string_data,
-        tool_prefix=self._tool_prefix, output_directory=self._output_directory)
-    results = list(results)
+        string_extract.ResolveStringPiecesIndirect, params,
+        string_data=string_data, tool_prefix=self._tool_prefix,
+        output_directory=self._output_directory)
+    return list(results)
 
-    final_result = []
-    for i in xrange(len(elf_string_positions)):
-      final_result.append(
-          concurrent.JoinEncodedDictOfLists([r[i] for r in results]))
-    self._list_of_encoded_elf_string_positions_by_path = final_result
+  def AnalyzeStringLiterals(self, elf_path, elf_string_ranges):
+    logging.debug('worker: AnalyzeStringLiterals() started.')
+    string_data = self._ReadElfStringData(elf_path, elf_string_ranges)
+
+    # [source_idx][batch_idx][section_idx] -> Encoded {path: [string_ranges]}.
+    encoded_ranges_sources = [
+      self._GetEncodedRangesFromStringAddresses(string_data),
+    ]
+    # [section_idx] -> {path: [string_ranges]}.
+    self._list_of_encoded_elf_string_ranges_by_path = []
+    # Contract [source_idx] and [batch_idx], then decode and join.
+    for section_idx in xrange(len(elf_string_ranges)):  # Fetch result.
+      t = []
+      for encoded_ranges in encoded_ranges_sources:  # [source_idx].
+        t.extend([b[section_idx] for b in encoded_ranges])  # [batch_idx].
+      self._list_of_encoded_elf_string_ranges_by_path.append(
+        concurrent.JoinEncodedDictOfLists(t))
     logging.debug('worker: AnalyzeStringLiterals() completed.')
 
   def GetSymbolNames(self):
@@ -159,10 +203,10 @@
 
   def GetStringPositions(self):
     return [concurrent.DecodeDictOfLists(x, value_transform=_DecodePosition)
-            for x in self._list_of_encoded_elf_string_positions_by_path]
+            for x in self._list_of_encoded_elf_string_ranges_by_path]
 
   def GetEncodedStringPositions(self):
-    return self._list_of_encoded_elf_string_positions_by_path
+    return self._list_of_encoded_elf_string_ranges_by_path
 
   def Close(self):
     pass
@@ -198,7 +242,7 @@
     else:
       # We are the child process.
       logging.root.handlers[0].setFormatter(logging.Formatter(
-          'nm: %(levelname).1s %(relativeCreated)6d %(message)s'))
+          'obj_analyzer: %(levelname).1s %(relativeCreated)6d %(message)s'))
       worker_analyzer = _BulkObjectFileAnalyzerWorker(
           self._tool_prefix, self._output_directory)
       slave = _BulkObjectFileAnalyzerSlave(worker_analyzer, child_conn)
@@ -215,8 +259,8 @@
   def SortPaths(self):
     self._pipe.send((_MSG_SORT_PATHS,))
 
-  def AnalyzeStringLiterals(self, elf_path, string_positions):
-    self._pipe.send((_MSG_ANALYZE_STRINGS, elf_path, string_positions))
+  def AnalyzeStringLiterals(self, elf_path, elf_string_ranges):
+    self._pipe.send((_MSG_ANALYZE_STRINGS, elf_path, elf_string_ranges))
 
   def GetSymbolNames(self):
     self._pipe.send((_MSG_GET_SYMBOL_NAMES,))
@@ -308,7 +352,7 @@
       if e.errno in (errno.EPIPE, errno.ECONNRESET):
         sys.exit(1)
 
-    logging.debug('nm bulk subprocess finished.')
+    logging.debug('bulk subprocess finished.')
     sys.exit(0)
 
 
diff --git a/tools/binary_size/libsupersize/string_extract.py b/tools/binary_size/libsupersize/string_extract.py
index 216052f0..5442e82 100644
--- a/tools/binary_size/libsupersize/string_extract.py
+++ b/tools/binary_size/libsupersize/string_extract.py
@@ -10,7 +10,7 @@
 ReadFileChunks():
   Reads raw data from a file, given a list of ranges in the file.
 
-ResolveStringPieces():
+ResolveStringPiecesIndirect():
   BulkForkAndCall() target: Given {path: [string addresses]} and
   [raw_string_data for each string_section]:
   - Reads {path: [src_strings]}.
@@ -46,17 +46,17 @@
   raise AssertionError('No .rodata for command: ' + repr(args))
 
 
-def ReadFileChunks(path, positions):
-  """Returns a list of strings corresponding to |positions|.
+def ReadFileChunks(path, section_ranges):
+  """Returns a list of raw data from |path|, specified by |section_ranges|.
 
   Args:
-    positions: List of (offset, size).
+    section_ranges: List of (offset, size).
   """
   ret = []
-  if not positions:
+  if not section_ranges:
     return ret
   with open(path, 'rb') as f:
-    for offset, size in positions:
+    for offset, size in section_ranges:
       f.seek(offset)
       ret.append(f.read(size))
   return ret
@@ -190,9 +190,59 @@
       yield section_data[prev_offset:]
 
 
+def _AnnotateStringData(string_data, path_value_gen):
+  """Annotates each |string_data| section data with paths and ranges.
+
+  Args:
+    string_data: [raw_string_data for each string_section] from an ELF file.
+    path_value_gen: A generator of (path, value) pairs, where |path|
+      is the path to an object file and |value| is a string to annotate.
+
+  Returns:
+    [{path: [string_ranges]} for each string_section].
+  """
+  ret = [collections.defaultdict(list) for _ in string_data]
+
+  # Brute-force search ** merge strings sections in |string_data| for string
+  # values from |path_value_gen|. This is by far the slowest part of
+  # AnalyzeStringLiterals().
+  # TODO(agrieve): Pre-process |string_data| into a dict of literal->address (at
+  # least for ASCII strings).
+  for path, value in path_value_gen:
+    first_match = -1
+    first_match_dict = None
+    for target_dict, data in itertools.izip(ret, string_data):
+      # Set offset so that it will be 0 when len(value) is added to it below.
+      offset = -len(value)
+      while True:
+        offset = data.find(value, offset + len(value))
+        if offset == -1:
+          break
+        # Preferring exact matches (those following \0) over substring matches
+        # significantly increases accuracy (although shows that linker isn't
+        # being optimal).
+        if offset == 0 or data[offset - 1] == '\0':
+          break
+        if first_match == -1:
+          first_match = offset
+          first_match_dict = target_dict
+      if offset != -1:
+        break
+    if offset == -1:
+      # Exact match not found, so take suffix match if it exists.
+      offset = first_match
+      target_dict = first_match_dict
+    # Missing strings happen when optimization make them unused.
+    if offset != -1:
+      # Encode tuple as a string for easier mashalling.
+      target_dict[path].append(str(offset) + ':' + str(len(value)))
+
+  return ret
+
+
 # This is a target for BulkForkAndCall().
-def ResolveStringPieces(encoded_string_addresses_by_path, string_data,
-                        tool_prefix, output_directory):
+def ResolveStringPiecesIndirect(encoded_string_addresses_by_path, string_data,
+                                tool_prefix, output_directory):
   string_addresses_by_path = concurrent.DecodeDictOfLists(
       encoded_string_addresses_by_path)
   # Assign |target| as archive path, or a list of object paths.
@@ -208,42 +258,11 @@
   string_sections_by_path = _ReadStringSections(
       target, output_directory, section_positions_by_path)
 
-  # list of elf_positions_by_path.
-  ret = [collections.defaultdict(list) for _ in string_data]
-  # Brute-force search of strings within ** merge strings sections.
-  # This is by far the slowest part of AnalyzeStringLiterals().
-  # TODO(agrieve): Pre-process string_data into a dict of literal->address (at
-  #     least for ascii strings).
-  for path, object_addresses in string_addresses_by_path.iteritems():
-    for value in _IterStringLiterals(
-        path, object_addresses, string_sections_by_path.get(path)):
-      first_match = -1
-      first_match_dict = None
-      for target_dict, data in itertools.izip(ret, string_data):
-        # Set offset so that it will be 0 when len(value) is added to it below.
-        offset = -len(value)
-        while True:
-          offset = data.find(value, offset + len(value))
-          if offset == -1:
-            break
-          # Preferring exact matches (those following \0) over substring matches
-          # significantly increases accuracy (although shows that linker isn't
-          # being optimal).
-          if offset == 0 or data[offset - 1] == '\0':
-            break
-          if first_match == -1:
-            first_match = offset
-            first_match_dict = target_dict
-        if offset != -1:
-          break
-      if offset == -1:
-        # Exact match not found, so take suffix match if it exists.
-        offset = first_match
-        target_dict = first_match_dict
-      # Missing strings happen when optimization make them unused.
-      if offset != -1:
-        # Encode tuple as a string for easier mashalling.
-        target_dict[path].append(
-            str(offset) + ':' + str(len(value)))
+  def GeneratePathAndValues():
+    for path, object_addresses in string_addresses_by_path.iteritems():
+      for value in _IterStringLiterals(
+          path, object_addresses, string_sections_by_path.get(path)):
+        yield path, value
 
+  ret = _AnnotateStringData(string_data, GeneratePathAndValues())
   return [concurrent.EncodeDictOfLists(x) for x in ret]
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index f473bd21..4d1aa96 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -2661,6 +2661,10 @@
   <int value="25"
       label="Submitted with fail-luhn-check card without selecting
              suggestions (once)"/>
+  <int value="26" label="The form changed dynamically"/>
+  <int value="27" label="The form changed dynamically and was fillable"/>
+  <int value="28" label="The form changed dynamically and was re-filled"/>
+  <int value="29" label="The form changed dynamically again after the refill"/>
 </enum>
 
 <enum name="AutofillFormSubmittedState">
@@ -19418,6 +19422,10 @@
   <int value="2509" label="PopupOpenWhileFileChooserOpened"/>
   <int value="2510" label="CookieStoreAPI"/>
   <int value="2511" label="FeaturePolicyJSAPI"/>
+  <int value="2512" label="V8RTCPeerConnection_GetTransceivers_Method"/>
+  <int value="2513" label="V8RTCPeerConnection_AddTransceiver_Method"/>
+  <int value="2514" label="V8RTCRtpTransceiver_Direction_AttributeGetter"/>
+  <int value="2515" label="V8RTCRtpTransceiver_Direction_AttributeSetter"/>
 </enum>
 
 <enum name="FeedbackSource">
@@ -24360,6 +24368,9 @@
 </enum>
 
 <enum name="IndexedDatabaseMethods">
+  <obsolete>
+    Deprecated as of July 2018.
+  </obsolete>
   <int value="0" label="CreateObjectStore()"/>
   <int value="1" label="DeleteObjectStore()"/>
   <int value="2" label="Transaction()"/>
@@ -27714,6 +27725,7 @@
   <int value="-1594298767" label="FullscreenToolbarReveal:enabled"/>
   <int value="-1586642651" label="MaterialDesignExtensions:disabled"/>
   <int value="-1584944853" label="TrilinearFiltering:enabled"/>
+  <int value="-1584499823" label="EnableZeroStateSuggestions:enabled"/>
   <int value="-1583728573" label="AutofillCreditCardSigninPromo:disabled"/>
   <int value="-1583533050" label="RuntimeHostPermissions:disabled"/>
   <int value="-1581724231" label="ModalPermissionPrompts:enabled"/>
@@ -27901,6 +27913,7 @@
   <int value="-1259901957" label="VrBrowserKeyboard:disabled"/>
   <int value="-1255427595" label="HomePageButtonForceEnabled:enabled"/>
   <int value="-1254070521" label="enable-slimming-paint-invalidation"/>
+  <int value="-1253608371" label="IncognitoStrings:disabled"/>
   <int value="-1251411236" label="disable-new-md-input-view"/>
   <int value="-1250611337" label="ChromeVoxArcSupport:disabled"/>
   <int value="-1248478422" label="enable-zip-archiver-packer"/>
@@ -28018,6 +28031,7 @@
   <int value="-1016669222" label="CloudPrinterHandler:enabled"/>
   <int value="-1016202433" label="disable-add-to-shelf"/>
   <int value="-1015006759" label="ImportantSitesInCBD:disabled"/>
+  <int value="-1014936248" label="SyncUSSBookmarks:enabled"/>
   <int value="-1014649471" label="committed-interstitials"/>
   <int value="-998255750" label="ExperimentalKeyboardLockUI:enabled"/>
   <int value="-996673716" label="enable-web-app-frame"/>
@@ -28552,6 +28566,7 @@
   <int value="120429808" label="disable-new-profile-management"/>
   <int value="121684313" label="QuickUnlockPin:enabled"/>
   <int value="121858954" label="enable-supervised-user-safesites"/>
+  <int value="122812452" label="IdnNavigationSuggestions:enabled"/>
   <int value="123097915" label="FaviconsFromWebManifest:enabled"/>
   <int value="125581289" label="WebRtcHWVP8Encoding:disabled"/>
   <int value="125934378" label="enable-password-link"/>
@@ -28709,6 +28724,7 @@
   <int value="497137719" label="OmniboxVoiceSearchAlwaysVisible:disabled"/>
   <int value="500177932" label="ArcSmartTextSelection:disabled"/>
   <int value="501477022" label="DrawOcclusion:enabled"/>
+  <int value="502551931" label="IncognitoStrings:enabled"/>
   <int value="503189154" label="ViewsBrowserWindows:disabled"/>
   <int value="503245473" label="disable-translate-new-ux"/>
   <int value="504994663" label="GenericSensor:disabled"/>
@@ -28862,6 +28878,7 @@
   <int value="807447752" label="ChromeMemex:disabled"/>
   <int value="807734471" label="tab-management-experiment-type-disabled"/>
   <int value="811374216" label="disable-new-bookmark-apps"/>
+  <int value="812710781" label="SyncUSSBookmarks:disabled"/>
   <int value="820650704" label="disable-ntp-popular-sites"/>
   <int value="821192723" label="show-fps-counter"/>
   <int value="824961931" label="use-simple-cache-backend"/>
@@ -28975,6 +28992,7 @@
   <int value="1054910800" label="enable-timezone-tracking-option"/>
   <int value="1057887829" label="AutofillScanThemeDialog:disabled"/>
   <int value="1059007599" label="enable-gpu-appcontainer"/>
+  <int value="1059698271" label="EnableZeroStateSuggestions:disabled"/>
   <int value="1060319397" label="enable-data-reduction-proxy-carrier-test"/>
   <int value="1062357243" label="remember-cert-error-decisions"/>
   <int value="1064288458" label="OfflineRecentPages:enabled"/>
@@ -29338,6 +29356,7 @@
   <int value="1810311887" label="WebAssemblyThreads:enabled"/>
   <int value="1812368073" label="enable-new-app-list-mixer"/>
   <int value="1814671708" label="disable-password-manager-reauthentication"/>
+  <int value="1815359532" label="IdnNavigationSuggestions:disabled"/>
   <int value="1816843861" label="ServiceWorkerServicification:enabled"/>
   <int value="1817312143" label="num-raster-threads"/>
   <int value="1819256299" label="disable-webrtc-hw-decoding"/>
@@ -30866,6 +30885,13 @@
   <int value="3" label="Supported with type"/>
 </enum>
 
+<enum name="MediaLauncherActivityMediaType">
+  <int value="0" label="Audio"/>
+  <int value="1" label="Image"/>
+  <int value="2" label="Video"/>
+  <int value="3" label="Unknown"/>
+</enum>
+
 <enum name="MediaLoadType">
   <int value="0" label="URL"/>
   <int value="1" label="MediaSource"/>
@@ -43652,6 +43678,7 @@
   <int value="23" label="SNIPPET_FETCH_NO_NEW_SUGGESTIONS"/>
   <int value="24" label="MISSING_FILES_NO_SD_CARD"/>
   <int value="25" label="OFFLINE_INDICATOR"/>
+  <int value="26" label="FEED_NTP_STREAM"/>
 </enum>
 
 <enum name="SnippetOpenMethod">
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 2691519..e1270fd 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -2407,6 +2407,9 @@
 </histogram>
 
 <histogram name="appcache.JobStartDelay.AppCache" units="ms">
+  <obsolete>
+    Deprecated 2018-03-20. No longer tracked.
+  </obsolete>
   <owner>michaeln@chromium.org</owner>
   <summary>
     How long URLRequests to be retrieved from the appcache are delayed.
@@ -2414,6 +2417,9 @@
 </histogram>
 
 <histogram name="appcache.JobStartDelay.Error" units="ms">
+  <obsolete>
+    Deprecated 2018-03-20. No longer tracked.
+  </obsolete>
   <owner>michaeln@chromium.org</owner>
   <summary>
     How long URLRequests that result in a synthesized error are delayed.
@@ -2421,6 +2427,9 @@
 </histogram>
 
 <histogram name="appcache.JobStartDelay.Network" units="ms">
+  <obsolete>
+    Deprecated 2018-03-20. No longer tracked.
+  </obsolete>
   <owner>michaeln@chromium.org</owner>
   <summary>
     How long URLRequests to be retrieved over the network are delayed.
@@ -12967,6 +12976,17 @@
   </summary>
 </histogram>
 
+<histogram
+    name="Compositing.SurfaceAggregator.LatestInFlightSurface.
+          ManhattanDistanceToPrimary" units="surfaces">
+  <owner>akaba@chromium.org</owner>
+  <owner>fsamuel@chromium.org</owner>
+  <summary>
+    The distance between the latest inflight surface and the primary surface.
+    This is logged for each call to HandleSurfaceQuad().
+  </summary>
+</histogram>
+
 <histogram name="Compositing.SurfaceAggregator.SurfaceDrawQuad.MissingSurface"
     units="quads">
   <owner>kylechar@chromium.org</owner>
@@ -13033,6 +13053,14 @@
   </summary>
 </histogram>
 
+<histogram name="Compositing.SurfaceManager.AliveSurfaces" units="surfaces">
+  <owner>akaba@chromium.org</owner>
+  <owner>fsamuel@chromium.org</owner>
+  <summary>
+    Tracks the number of alive surfaces after each garbage collection operation.
+  </summary>
+</histogram>
+
 <histogram name="Compositing.SurfaceManager.NumOldTemporaryReferences">
   <obsolete>
     Deprecated 2018/01/24.
@@ -13050,6 +13078,16 @@
   <summary>Tracks the reason for removing a temporary reference.</summary>
 </histogram>
 
+<histogram name="Compositing.SurfaceManager.TemporarySurfaces"
+    units="references">
+  <owner>akaba@chromium.org</owner>
+  <owner>fsamuel@chromium.org</owner>
+  <summary>
+    Tracks the number of temporary references after each garbage collection
+    operation.
+  </summary>
+</histogram>
+
 <histogram name="Conflicts.ConfirmedBadModules" units="modules">
   <owner>chrisha@chromium.org</owner>
   <summary>
@@ -42845,6 +42883,15 @@
   <summary>Various usage counts for media galleries.</summary>
 </histogram>
 
+<histogram name="MediaLauncherActivity.MediaType"
+    enum="MediaLauncherActivityMediaType">
+  <owner>steimel@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    The type of media that a user is opening via the MediaLauncherActivity.
+  </summary>
+</histogram>
+
 <histogram base="true" name="MediaRouter.Cast.App.Availability" units="ms">
 <!-- Name completed by histogram_suffixes name="MediaRouterSuccess" -->
 
@@ -110266,6 +110313,9 @@
 
 <histogram name="WebCore.IndexedDB.FrontEndAPICalls"
     enum="IndexedDatabaseMethods">
+  <obsolete>
+    Deprecated as of July 2018.
+  </obsolete>
   <owner>dgrogan@chromium.org</owner>
   <summary>
     Count total number of front end API calls of IndexedDB methods.
diff --git a/tools/perf/chrome_telemetry_build/chromium_config.py b/tools/perf/chrome_telemetry_build/chromium_config.py
index fa5de39..296c2160 100644
--- a/tools/perf/chrome_telemetry_build/chromium_config.py
+++ b/tools/perf/chrome_telemetry_build/chromium_config.py
@@ -4,6 +4,7 @@
 
 import os
 
+# pylint: disable=wrong-import-position
 from core import path_util
 
 CLIENT_CONFIG_PATH = os.path.join(
diff --git a/tools/perf/contrib/cluster_telemetry/screenshot.py b/tools/perf/contrib/cluster_telemetry/screenshot.py
index 4ea259fbf..6a22d85 100644
--- a/tools/perf/contrib/cluster_telemetry/screenshot.py
+++ b/tools/perf/contrib/cluster_telemetry/screenshot.py
@@ -4,9 +4,10 @@
 
 import logging
 import os
-import py_utils
 import time
 
+import py_utils
+
 from telemetry.page import legacy_page_test
 from telemetry.util import image_util
 
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py
index 089a047..17c2638 100755
--- a/tools/perf/core/perf_data_generator.py
+++ b/tools/perf/core/perf_data_generator.py
@@ -772,7 +772,7 @@
 def _verify_benchmark_owners(benchmark_metadata):
   unowned_benchmarks = set()
   for benchmark_name in benchmark_metadata:
-    if benchmark_metadata[benchmark_name].emails == None:
+    if benchmark_metadata[benchmark_name].emails is None:
       unowned_benchmarks.add(benchmark_name)
 
   assert not unowned_benchmarks, (
diff --git a/tools/perf/core/perf_data_generator_unittest.py b/tools/perf/core/perf_data_generator_unittest.py
index ad5b4da4..33c197d 100644
--- a/tools/perf/core/perf_data_generator_unittest.py
+++ b/tools/perf/core/perf_data_generator_unittest.py
@@ -1,13 +1,13 @@
 # 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.
+import json
 import unittest
 
 from core import perf_data_generator
 from core.perf_data_generator import BenchmarkMetadata
 
 import mock
-import json
 
 
 class PerfDataGeneratorTest(unittest.TestCase):
diff --git a/tools/perf/core/results_dashboard.py b/tools/perf/core/results_dashboard.py
index c46a40b8..ea2ecb3 100755
--- a/tools/perf/core/results_dashboard.py
+++ b/tools/perf/core/results_dashboard.py
@@ -11,7 +11,6 @@
 import calendar
 import datetime
 import httplib
-import httplib2
 import json
 import os
 import subprocess
@@ -21,24 +20,21 @@
 import tempfile
 import urllib
 import urllib2
-import uuid
 import zlib
 
+import httplib2
+
 from telemetry.internal.util import external_modules
 
-psutil = external_modules.ImportOptionalModule('psutil')
-
 from core import path_util
 
+psutil = external_modules.ImportOptionalModule('psutil')
+
 
 # The paths in the results dashboard URLs for sending results.
 SEND_RESULTS_PATH = '/add_point'
 SEND_HISTOGRAMS_PATH = '/add_histograms'
 
-# CACHE_DIR/CACHE_FILENAME will be created in a tmp_dir to cache
-# results which need to be retried.
-CACHE_DIR = 'results_dashboard'
-CACHE_FILENAME = 'results_to_retry'
 
 ERROR_NO_OAUTH_TOKEN = (
     'No oauth token provided, cannot upload HistogramSet. Discarding.')
@@ -56,35 +52,23 @@
   pass
 
 
-def SendResults(data, url, tmp_dir,
-                send_as_histograms=False, oauth_token=None):
+def SendResults(data, url, send_as_histograms=False, oauth_token=None):
   """Sends results to the Chrome Performance Dashboard.
 
-  This function tries to send the given data to the dashboard, in addition to
-  any data from the cache file. The cache file contains any data that wasn't
-  successfully sent in a previous run.
+  This function tries to send the given data to the dashboard.
 
   Args:
     data: The data to try to send. Must be JSON-serializable.
     url: Performance Dashboard URL (including schema).
-    tmp_dir: Directory name, where the cache directory shall be.
-    json_url_file: Optional file to which to write the dashboard viewing URL.
     send_as_histograms: True if result is to be sent to /add_histograms.
     oauth_token: string; used for flushing oauth uploads from cache.
   """
   start = time.time()
-  results_json = json.dumps({
-      'is_histogramset': send_as_histograms,
-      'data': data
-  })
 
-  # Write the new request line to the cache file, which contains all lines
-  # that we shall try to send now.
-  cache_file_name = _GetCacheFileName(tmp_dir)
-  _AddLineToCacheFile(results_json, cache_file_name)
-
-  # Send all the results from this run and the previous cache to the dashboard.
-  fatal_error, errors = _SendResultsFromCache(cache_file_name, url, oauth_token)
+  # Send all the results from this run and the previous cache to the
+  # dashboard.
+  fatal_error, errors = _SendResultsToDashboard(
+      data, url, oauth_token, is_histogramset=send_as_histograms)
 
   print 'Time spent sending results to %s: %s' % (url, time.time() - start)
 
@@ -96,32 +80,11 @@
   return True
 
 
-def _GetCacheFileName(tmp_dir):
-  """Gets the cache filename, creating the file if it does not exist."""
-  cache_dir = os.path.join(os.path.abspath(tmp_dir), CACHE_DIR, str(uuid.uuid4()))
-  if not os.path.exists(cache_dir):
-    os.makedirs(cache_dir)
-  # Since this is multi-processed, add a unique identifier to the cache dir
-  cache_filename = os.path.join(cache_dir, CACHE_FILENAME)
-  if not os.path.exists(cache_filename):
-    # Create the file.
-    open(cache_filename, 'wb').close()
-  return cache_filename
-
-
-def _AddLineToCacheFile(line, cache_file_name):
-  """Appends a line to the given file."""
-  with open(cache_file_name, 'ab') as cache:
-    cache.write('\n' + line)
-
-
-def _SendResultsFromCache(cache_file_name, url, oauth_token):
-  """Tries to send each line from the cache file in a separate request.
-
-  This also writes data which failed to send back to the cache file.
+def _SendResultsToDashboard(dashboard_data, url, oauth_token, is_histogramset):
+  """Tries to send perf dashboard data to |url|.
 
   Args:
-    cache_file_name: A file name.
+    perf_results_file_path: A file name.
     url: The instance URL to which to post results.
     oauth_token: An oauth token to use for histogram uploads. Might be None.
 
@@ -130,78 +93,42 @@
     whether there there was a major error and the step should fail, and errors
     is a list of error strings.
   """
-  with open(cache_file_name, 'rb') as cache:
-    cache_lines = cache.readlines()
-  total_results = len(cache_lines)
 
   fatal_error = False
   errors = []
 
-  lines_to_retry = []
-  for index, line in enumerate(cache_lines):
-    line = line.strip()
-    if not line:
-      continue
-    # We need to check whether we're trying to upload histograms. If the JSON
-    # is invalid, we should not try to send this data or re-try it later.
-    # Instead, we'll print an error.
-    try:
-      is_histogramset, data = _GetData(line)
-    except ValueError:
-      errors.append('Could not parse JSON: %s' % line)
-      continue
+  data_type = ('histogram' if is_histogramset else 'chartjson')
+  print 'Sending %s result to dashboard.' % data_type
 
-    data_type = ('histogram' if is_histogramset else 'chartjson')
-    print 'Sending %s result %d of %d to dashboard.' % (
-        data_type, index + 1, total_results)
+  try:
+    if is_histogramset:
+      # TODO(eakuefner): Remove this discard logic once all bots use
+      # histograms.
+      if oauth_token is None:
+        raise SendResultsFatalException(ERROR_NO_OAUTH_TOKEN)
 
-    try:
-      if is_histogramset:
-        # TODO(eakuefner): Remove this discard logic once all bots use
-        # histograms.
-        if oauth_token is None:
-          raise SendResultsFatalException(ERROR_NO_OAUTH_TOKEN)
-
-        _SendHistogramJson(url, json.dumps(data), oauth_token)
-      else:
-        _SendResultsJson(url, json.dumps(data))
-    except SendResultsRetryException as e:
-      error = 'Error while uploading %s data: %s' % (data_type, str(e))
-      if index != len(cache_lines) - 1:
-        # The very last item in the cache_lines list is the new results line.
-        # If this line is not the new results line, then this results line
-        # has already been tried before; now it's considered fatal.
-        fatal_error = True
-
-      # The lines to retry are all lines starting from the current one.
-      lines_to_retry = [l.strip() for l in cache_lines[index:] if l.strip()]
-      errors.append(error)
-      break
-    except SendResultsFatalException as e:
-      error = 'Error uploading %s data: %s' % (data_type, str(e))
-      errors.append(error)
-      fatal_error = True
-      break
-    except Exception:
-      error = 'Unexpected error while uploading %s data: %s' % (
-          data_type, traceback.format_exc())
-      errors.append(error)
-      fatal_error = True
-      break
-
-  # Write any failing requests to the cache file.
-  cache = open(cache_file_name, 'wb')
-  cache.write('\n'.join(set(lines_to_retry)))
-  cache.close()
+      _SendHistogramJson(url, json.dumps(dashboard_data), oauth_token)
+    else:
+      _SendResultsJson(url, json.dumps(dashboard_data))
+  except SendResultsRetryException as e:
+    # TODO(crbug.com/864565): retry sending to the perf dashboard with this
+    # error.
+    error = 'Error while uploading %s data: %s' % (data_type, str(e))
+    fatal_error = True
+    errors.append(error)
+  except SendResultsFatalException as e:
+    error = 'Error uploading %s data: %s' % (data_type, str(e))
+    errors.append(error)
+    fatal_error = True
+  except Exception:
+    error = 'Unexpected error while uploading %s data: %s' % (
+        data_type, traceback.format_exc())
+    errors.append(error)
+    fatal_error = True
 
   return fatal_error, errors
 
 
-def _GetData(line):
-  line_dict = json.loads(line)
-  return bool(line_dict.get('is_histogramset')), line_dict['data']
-
-
 def MakeHistogramSetWithDiagnostics(histograms_file,
                                     test_name, bot, buildername, buildnumber,
                                     revisions_dict, is_reference_build,
diff --git a/tools/perf/core/sharding_map_generator.py b/tools/perf/core/sharding_map_generator.py
index bb9dd7f..eef5263 100644
--- a/tools/perf/core/sharding_map_generator.py
+++ b/tools/perf/core/sharding_map_generator.py
@@ -62,9 +62,11 @@
 """
 
 import argparse
-from collections import OrderedDict
-import core.path_util
+import collections
 import json
+import sys
+
+import core.path_util
 
 core.path_util.AddTelemetryToPath()
 
@@ -153,16 +155,16 @@
       story_timing_ordered_dict, num_shards)
 
   total_time = 0
-  sharding_map = OrderedDict()
-  debug_map = OrderedDict()
-  min_shard_time = float('inf')
+  sharding_map = collections.OrderedDict()
+  debug_map = collections.OrderedDict()
+  min_shard_time = sys.maxint
   min_shard_index = None
   max_shard_time = 0
   max_shard_index = None
   num_stories = len(story_timing_ordered_dict)
   for i in range(num_shards):
-    sharding_map[str(i)] = {'benchmarks': OrderedDict()}
-    debug_map[str(i)] = OrderedDict()
+    sharding_map[str(i)] = {'benchmarks': collections.OrderedDict()}
+    debug_map[str(i)] = collections.OrderedDict()
     time_per_shard = 0
     stories_in_shard = []
     expected_total_time = expected_time_per_shard * (i + 1)
@@ -194,7 +196,7 @@
       json.dump(debug_map, output_file, indent = 4, separators=(',', ': '))
 
 
-  sharding_map['extra_infos'] = OrderedDict([
+  sharding_map['extra_infos'] = collections.OrderedDict([
       ('num_stories', num_stories),
       # Double all the time stats by 2 to account for reference build.
       ('predicted_min_shard_time', min_shard_time * 2),
@@ -214,7 +216,7 @@
 
 def _add_benchmarks_to_shard(sharding_map, shard_index, stories_in_shard,
     all_stories):
-  benchmarks = OrderedDict()
+  benchmarks = collections.OrderedDict()
   for story in stories_in_shard:
     (b, story) = story.split('/', 1)
     if b not in benchmarks:
@@ -222,7 +224,7 @@
     benchmarks[b].append(story)
 
   # Format the benchmark's stories by indices
-  benchmarks_in_shard = OrderedDict()
+  benchmarks_in_shard = collections.OrderedDict()
   for b in benchmarks:
     benchmarks_in_shard[b] = {}
     first_story = all_stories[b].index(benchmarks[b][0])
@@ -251,7 +253,7 @@
 
 
 def _init_timing_dict_for_benchmarks(benchmarks_data):
-  timing_data = OrderedDict()
+  timing_data = collections.OrderedDict()
   for b in benchmarks_data:
     story_list = benchmarks_data[b]['stories']
     for story in story_list:
@@ -260,20 +262,20 @@
 
 
 def _generate_empty_sharding_map(num_shards):
-  sharding_map = OrderedDict()
+  sharding_map = collections.OrderedDict()
   for i in range(0, num_shards):
-    sharding_map[str(i)] = {'benchmarks': OrderedDict()}
+    sharding_map[str(i)] = {'benchmarks': collections.OrderedDict()}
   return sharding_map
 
 
 def test_sharding_map(sharding_map_file, timing_data, all_stories):
-  results = OrderedDict()
+  results = collections.OrderedDict()
 
   with open(sharding_map_file) as f:
-    sharding_map = json.load(f, object_pairs_hook=OrderedDict)
+    sharding_map = json.load(f, object_pairs_hook=collections.OrderedDict)
     sharding_map.pop('extra_infos', None)
     for shard in sharding_map:
-      results[shard] = OrderedDict()
+      results[shard] = collections.OrderedDict()
       shard_total_time = 0
       for benchmark_name in sharding_map[shard]['benchmarks']:
         benchmark = sharding_map[shard]['benchmarks'][benchmark_name]
diff --git a/tools/perf/core/sharding_map_generator_unittest.py b/tools/perf/core/sharding_map_generator_unittest.py
index 8318d66..33819ac 100644
--- a/tools/perf/core/sharding_map_generator_unittest.py
+++ b/tools/perf/core/sharding_map_generator_unittest.py
@@ -2,26 +2,27 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-from collections import OrderedDict
+import collections
 import copy
-from core import sharding_map_generator
 import json
 import os
 import tempfile
 import unittest
 
+from core import sharding_map_generator
+
 from py_utils import tempfile_ext
 
 
 class TestShardingMapGenerator(unittest.TestCase):
 
   def _init_sample_timing_data(self, times):
-    timing_data = OrderedDict()
+    timing_data = collections.OrderedDict()
     all_stories = {}
-    for i in range(len(times)):
+    for i, _ in enumerate(times):
       all_stories['benchmark_' + str(i)] = []
       story_times = times[i]
-      for j in range(len(story_times)):
+      for j, _ in enumerate(story_times):
         all_stories['benchmark_' + str(i)].append('story_' + str(j))
         timing_data['benchmark_' + str(i) + '/' + 'story_' + str(j)] = (
             story_times[j])
diff --git a/tools/perf/core/upload_results_to_perf_dashboard.py b/tools/perf/core/upload_results_to_perf_dashboard.py
index 2bff331..6133c8d 100755
--- a/tools/perf/core/upload_results_to_perf_dashboard.py
+++ b/tools/perf/core/upload_results_to_perf_dashboard.py
@@ -42,8 +42,9 @@
   with open(options.results_file) as f:
     results = json.load(f)
   dashboard_json = {}
-  if not 'charts' in results:
+  if 'charts' not in results:
     # These are legacy results.
+    # pylint: disable=redefined-variable-type
     dashboard_json = results_dashboard.MakeListOfPoints(
       results, options.configuration_name, stripped_test_name,
       options.buildername, options.buildnumber, {},
@@ -88,7 +89,6 @@
   parser = optparse.OptionParser()
   parser.add_option('--name')
   parser.add_option('--results-file')
-  parser.add_option('--tmp-dir')
   parser.add_option('--output-json-file')
   parser.add_option('--got-revision-cp')
   parser.add_option('--configuration-name')
@@ -147,7 +147,6 @@
     if not results_dashboard.SendResults(
         dashboard_json,
         options.results_url,
-        options.tmp_dir,
         send_as_histograms=options.send_as_histograms,
         oauth_token=oauth_token):
       return 1
diff --git a/tools/perf/expectations.config b/tools/perf/expectations.config
index 664a293e..6407a9f 100644
--- a/tools/perf/expectations.config
+++ b/tools/perf/expectations.config
@@ -4,7 +4,7 @@
 
 # tags: All Android_Go Android_One Android_Svelte Android_Low_End
 # tags: Android_Webview Android_but_not_webview Mac Win Linux
-# tags: ChromeOS Android Desktop Nexus_5 Nexus_5X Nexus_6 Nexus_6P
+# tags: ChromeOS Android Desktop Nexus_5 Nexus_5X Nexus_6P
 # tags: Nexus_7 Mac_10.11 Mac_10.12 Nexus6_Webview Nexus5X_Webview
 
 # Benchmark: battor.steady_state
@@ -18,12 +18,10 @@
 
 # Benchmark: blink_perf.canvas
 crbug.com/593973 [ Android_Svelte ] blink_perf.canvas/* [ Skip ]
-crbug.com/765799 [ Nexus_6 ] blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html [ Skip ]
 crbug.com/784540 [ Nexus_5 ] blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html [ Skip ]
 crbug.com/784540 [ Nexus_5X ] blink_perf.canvas/draw-static-canvas-2d-to-hw-accelerated-canvas-2d.html [ Skip ]
 crbug.com/784540 [ Nexus_5 ] blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html [ Skip ]
 crbug.com/784540 [ Nexus_5X ] blink_perf.canvas/draw-dynamic-canvas-2d-to-hw-accelerated-canvas-2d.html [ Skip ]
-crbug.com/738453 [ Nexus_6 ] blink_perf.canvas/putImageData.html [ Skip ]
 crbug.com/853738 [ Android_Webview ] blink_perf.canvas/draw-video-to-hw-accelerated-canvas-2d.html [ Skip ]
 crbug.com/853738 [ Android_Webview ] blink_perf.canvas/upload-video-to-sub-texture.html [ Skip ]
 crbug.com/853738 [ Android_Webview ] blink_perf.canvas/upload-video-to-texture.html [ Skip ]
@@ -248,10 +246,8 @@
 
 # Benchmark: system_health.common_mobile
 crbug.com/865464 [ Android_Webview ] system_health.common_mobile/browse:chrome:omnibox [ Skip ]
-crbug.com/736497 [ Nexus_6 ] system_health.common_mobile/browse:shopping:avito [ Skip ]
 crbug.com/657433 [ Android ] system_health.common_mobile/load:tools:gmail [ Skip ]
 crbug.com/714650 [ Android ] system_health.common_mobile/browse:news:globo [ Skip ]
-crbug.com/728081 [ Android ] system_health.common_mobile/browse:news:toi [ Skip ]
 crbug.com/865466 [ Android_Webview ] system_health.common_mobile/long_running:tools:gmail-background [ Skip ]
 crbug.com/787001 [ Android_Webview ] system_health.common_mobile/load:media:soundcloud [ Skip ]
 crbug.com/708300 [ Android ] system_health.common_mobile/browse:shopping:flipkart [ Skip ]
@@ -263,8 +259,6 @@
 crbug.com/798536 [ Android ] system_health.common_mobile/load:games:spychase [ Skip ]
 crbug.com/736147 [ Android_One ] system_health.common_mobile/browse:social:tumblr_infinite_scroll [ Skip ]
 crbug.com/803461 [ Nexus_5 ] system_health.common_mobile/browse:chrome:newtab [ Skip ]
-crbug.com/842163 [ Android_One ] system_health.common_mobile/browse:social:facebook_infinite_scroll [ Skip ]
-crbug.com/842163 [ Android_One ] system_health.common_mobile/browse:social:pinterest_infinite_scroll [ Skip ]
 
 # Benchmark: system_health.memory_desktop
 crbug.com/728576 [ Mac ] system_health.memory_desktop/browse:news:cnn [ Skip ]
@@ -294,7 +288,6 @@
 [ Android_Webview ] system_health.memory_mobile/browse:chrome:omnibox [ Skip ]
 crbug.com/819552 [ Nexus_5X ] system_health.memory_mobile/browse:chrome:omnibox [ Skip ]
 crbug.com/657433 [ Android ] system_health.memory_mobile/load:tools:gmail [ Skip ]
-crbug.com/728081 [ Android ] system_health.memory_mobile/browse:news:toi [ Skip ]
 crbug.com/777355 [ Android_Low_End ] system_health.memory_mobile/long_running:tools:gmail-background [ Skip ]
 crbug.com/777355 [ Android_Webview ] system_health.memory_mobile/long_running:tools:gmail-foreground [ Skip ]
 [ Android_Webview ] system_health.memory_mobile/long_running:tools:gmail-background [ Skip ]
@@ -304,7 +297,6 @@
 crbug.com/738854 [ Nexus_5X ] system_health.memory_mobile/load:tools:drive [ Skip ]
 crbug.com/738854 [ Android_Webview ] system_health.memory_mobile/load:tools:drive [ Skip ]
 crbug.com/797261 [ Android_Webview ] system_health.memory_mobile/load:games:spychase [ Skip ]
-crbug.com/803462 [ Nexus_5 ] system_health.memory_mobile/browse:chrome:newtab [ Skip ]
 crbug.com/834905 [ Nexus_5 ] system_health.memory_mobile/browse:social:pinterest_infinite_scroll [ Skip ]
 crbug.com/842731 [ Android_One ] system_health.memory_mobile/background:news:nytimes [ Skip ]
 crbug.com/843547 [ Android_Go ] system_health.memory_mobile/background:news:nytimes [ Skip ]
@@ -353,7 +345,6 @@
 
 # Benchmark: v8.browsing_mobile
 crbug.com/714650 [ Android ] v8.browsing_mobile/browse:news:globo [ Skip ]
-crbug.com/728081 [ Android ] v8.browsing_mobile/browse:news:toi [ Skip ]
 crbug.com/767970 [ Android ] v8.browsing_mobile/browse:shopping:flipkart [ Skip ]
 crbug.com/708300 [ Android ] v8.browsing_mobile/browse:shopping:flipkart [ Skip ]
 crbug.com/788797 [ Android_One ] v8.browsing_mobile/browse:social:facebook_infinite_scroll [ Skip ]
@@ -372,7 +363,6 @@
 
 # Benchmark: v8.browsing_mobile-future
 crbug.com/714650 [ Android ] v8.browsing_mobile-future/browse:news:globo [ Skip ]
-crbug.com/728081 [ Android ] v8.browsing_mobile-future/browse:news:toi [ Skip ]
 crbug.com/767970 [ Android ] v8.browsing_mobile-future/browse:shopping:flipkart [ Skip ]
 crbug.com/708300 [ Android ] v8.browsing_mobile-future/browse:shopping:flipkart [ Skip ]
 crbug.com/788797 [ Android_One ] v8.browsing_mobile-future/browse:social:facebook_infinite_scroll [ Skip ]
diff --git a/tools/perf/fetch_benchmark_deps_unittest.py b/tools/perf/fetch_benchmark_deps_unittest.py
index 64ea9832..a4ae5667 100644
--- a/tools/perf/fetch_benchmark_deps_unittest.py
+++ b/tools/perf/fetch_benchmark_deps_unittest.py
@@ -15,6 +15,7 @@
 from core import path_util
 import fetch_benchmark_deps
 
+
 def NormPaths(paths):
   return sorted([os.path.normcase(p) for p in paths.splitlines()])
 
diff --git a/tools/perf/generate_legacy_perf_dashboard_json.py b/tools/perf/generate_legacy_perf_dashboard_json.py
index 2d387a07..3b39aff4 100755
--- a/tools/perf/generate_legacy_perf_dashboard_json.py
+++ b/tools/perf/generate_legacy_perf_dashboard_json.py
@@ -252,6 +252,6 @@
     exponent += 1
   if digits >= 100:
     # Don't append a meaningless '.0' to an integer number.
-    digits = int(digits)
+    digits = int(digits)  # pylint: disable=redefined-variable-type
   # Exponent is now divisible by 3, between -3 and 6 inclusive: (-3, 0, 3, 6).
   return '%s%s' % (digits, metric_prefixes[exponent])
diff --git a/tools/perf/page_sets/google_pages.py b/tools/perf/page_sets/google_pages.py
index 03d51626..4e9b622 100644
--- a/tools/perf/page_sets/google_pages.py
+++ b/tools/perf/page_sets/google_pages.py
@@ -2,12 +2,13 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import os
+
 from page_sets.login_helpers import google_login
 
 from telemetry.page import page as page_module
 from telemetry.page import shared_page_state
 
-import os
 
 def _DeterministicPerformanceCounters():
   with open(os.path.join(os.path.dirname(__file__),
diff --git a/tools/perf/page_sets/rendering/rendering_story.py b/tools/perf/page_sets/rendering/rendering_story.py
index 54df6ea..f96403f 100644
--- a/tools/perf/page_sets/rendering/rendering_story.py
+++ b/tools/perf/page_sets/rendering/rendering_story.py
@@ -30,7 +30,7 @@
   URL = NotImplemented
   ABSTRACT_STORY = True
   SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS
-  TAGS = None
+  TAGS =[]
   PLATFORM_SPECIFIC = False
   YEAR = None
 
@@ -42,10 +42,9 @@
                make_javascript_deterministic=True,
                base_dir=None):
     tags = []
-    if self.TAGS:
-      for t in self.TAGS:
-        assert t in story_tags.ALL_TAGS
-        tags.append(t.name)
+    for t in self.TAGS:
+      assert t in story_tags.ALL_TAGS
+      tags.append(t.name)
     name = self.BASE_NAME + name_suffix
     if self.YEAR:
       name += ('_' + self.YEAR)
diff --git a/tools/perf/page_sets/system_health/multi_tab_stories.py b/tools/perf/page_sets/system_health/multi_tab_stories.py
index ddf3d641..76fb15d 100644
--- a/tools/perf/page_sets/system_health/multi_tab_stories.py
+++ b/tools/perf/page_sets/system_health/multi_tab_stories.py
@@ -2,9 +2,10 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
-import py_utils
 import logging
 
+import py_utils
+
 from page_sets.system_health import system_health_story
 from page_sets.system_health import story_tags
 from page_sets.system_health import platforms
diff --git a/tools/perf/page_sets/system_health/system_health_story.py b/tools/perf/page_sets/system_health/system_health_story.py
index f6fb025..83656f58 100644
--- a/tools/perf/page_sets/system_health/system_health_story.py
+++ b/tools/perf/page_sets/system_health/system_health_story.py
@@ -54,17 +54,16 @@
   # flow during replay. Switch this to False when recording.
   SKIP_LOGIN = True
   SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS
-  TAGS = None
+  TAGS = []
   PLATFORM_SPECIFIC = False
 
   def __init__(self, story_set, take_memory_measurement,
       extra_browser_args=None):
     case, group, _ = self.NAME.split(':')
     tags = []
-    if self.TAGS:
-      for t in self.TAGS:
-        assert t in story_tags.ALL_TAGS
-        tags.append(t.name)
+    for t in self.TAGS:  # pylint: disable=not-an-iterable
+      assert t in story_tags.ALL_TAGS
+      tags.append(t.name)
     super(SystemHealthStory, self).__init__(
         shared_page_state_class=_SystemHealthSharedState,
         page_set=story_set, name=self.NAME, url=self.URL, tags=tags,
diff --git a/tools/perf/process_perf_results.py b/tools/perf/process_perf_results.py
index 32cee78..961bd02b 100755
--- a/tools/perf/process_perf_results.py
+++ b/tools/perf/process_perf_results.py
@@ -8,6 +8,8 @@
 import logging
 import multiprocessing as mp
 import os
+from os import listdir
+from os.path import isfile, join, basename
 import shutil
 import sys
 import tempfile
@@ -18,8 +20,6 @@
 from core import path_util
 from core import upload_results_to_perf_dashboard
 from core import results_merger
-from os import listdir
-from os.path import isfile, join, basename
 
 path_util.AddAndroidPylibToPath()
 
@@ -64,10 +64,9 @@
 
 
 def _upload_perf_results(json_to_upload, name, configuration_name,
-    build_properties, oauth_file, tmp_dir, output_json_file):
+    build_properties, oauth_file, output_json_file):
   """Upload the contents of result JSON(s) to the perf dashboard."""
   args= [
-      '--tmp-dir', tmp_dir,
       '--buildername', build_properties['buildername'],
       '--buildnumber', build_properties['buildnumber'],
       '--name', name,
@@ -331,7 +330,7 @@
 def _upload_individual(
     benchmark_name, directories, configuration_name,
     build_properties, output_json_file, service_account_file):
-  tmpfile_dir = tempfile.mkdtemp('resultscache')
+  tmpfile_dir = tempfile.mkdtemp()
   try:
     upload_begin_time = time.time()
     # There are potentially multiple directores with results, re-write and
@@ -358,7 +357,7 @@
         upload_fail = _upload_perf_results(
           results_filename,
           benchmark_name, configuration_name, build_properties,
-          oauth_file, tmpfile_dir, oj)
+          oauth_file, oj)
         upload_end_time = time.time()
         print_duration(('%s upload time' % (benchmark_name)),
                        upload_begin_time, upload_end_time)
@@ -402,7 +401,7 @@
       # Create a place to write the perf results that you will write out to
       # logdog.
       output_json_file = os.path.join(
-          os.path.abspath(tmpfile_dir), (str(uuid.uuid4()) + benchmark_name))
+          tmpfile_dir, (str(uuid.uuid4()) + benchmark_name))
       results_dict[benchmark_name] = output_json_file
       invocations.append((
           benchmark_name, directories, configuration_name,
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn
index ef79ede..2613f91 100644
--- a/ui/aura/BUILD.gn
+++ b/ui/aura/BUILD.gn
@@ -60,7 +60,6 @@
     "mus/system_input_injector_mus.h",
     "mus/text_input_client_impl.h",
     "mus/user_activity_forwarder.h",
-    "mus/window_manager_delegate.h",
     "mus/window_mus.h",
     "mus/window_port_mus.h",
     "mus/window_tree_client.h",
@@ -129,7 +128,6 @@
     "mus/system_input_injector_mus.cc",
     "mus/text_input_client_impl.cc",
     "mus/user_activity_forwarder.cc",
-    "mus/window_manager_delegate.cc",
     "mus/window_port_mus.cc",
     "mus/window_tree_client.cc",
     "mus/window_tree_client_delegate.cc",
@@ -209,14 +207,7 @@
   }
 
   if (use_ozone) {
-    deps += [
-      "//ui/events/ozone:events_ozone_layout",
-      "//ui/ozone",
-    ]
-    sources += [
-      "mus/platform_event_source_mus_ozone.cc",
-      "mus/platform_event_source_mus_ozone.h",
-    ]
+    deps += [ "//ui/ozone" ]
   }
 
   if (is_android) {
@@ -249,10 +240,6 @@
     "test/mus/change_completion_waiter.cc",
     "test/mus/change_completion_waiter.h",
     "test/mus/input_method_mus_test_api.h",
-    "test/mus/test_window_manager_client.cc",
-    "test/mus/test_window_manager_client.h",
-    "test/mus/test_window_manager_delegate.cc",
-    "test/mus/test_window_manager_delegate.h",
     "test/mus/test_window_tree.cc",
     "test/mus/test_window_tree.h",
     "test/mus/test_window_tree_client_delegate.cc",
@@ -382,7 +369,6 @@
     "mus/input_method_mus_unittest.cc",
     "mus/os_exchange_data_provider_mus_unittest.cc",
     "mus/property_converter_unittest.cc",
-    "mus/system_input_injector_mus_unittest.cc",
     "mus/user_activity_forwarder_unittest.cc",
     "mus/window_port_mus_unittest.cc",
     "mus/window_tree_client_unittest.cc",
diff --git a/ui/aura/client/aura_constants.h b/ui/aura/client/aura_constants.h
index 0d889c502..99dd8ff 100644
--- a/ui/aura/client/aura_constants.h
+++ b/ui/aura/client/aura_constants.h
@@ -26,7 +26,6 @@
 enum class WindowEmbedType {
   NONE,
   EMBED_IN_OWNER,
-  TOP_LEVEL_IN_WM,
 };
 
 // Alphabetical sort.
diff --git a/ui/aura/env.cc b/ui/aura/env.cc
index b8824e9..6f009fa 100644
--- a/ui/aura/env.cc
+++ b/ui/aura/env.cc
@@ -101,9 +101,6 @@
     case aura::client::WindowEmbedType::NONE:
       window_mus_type = WindowMusType::LOCAL;
       break;
-    case aura::client::WindowEmbedType::TOP_LEVEL_IN_WM:
-      window_mus_type = WindowMusType::TOP_LEVEL_IN_WM;
-      break;
     case aura::client::WindowEmbedType::EMBED_IN_OWNER:
       window_mus_type = WindowMusType::EMBED_IN_OWNER;
       break;
diff --git a/ui/aura/hit_test_data_provider_aura_unittest.cc b/ui/aura/hit_test_data_provider_aura_unittest.cc
index 5e623aa..f104be8 100644
--- a/ui/aura/hit_test_data_provider_aura_unittest.cc
+++ b/ui/aura/hit_test_data_provider_aura_unittest.cc
@@ -74,7 +74,7 @@
 
     root_ = std::make_unique<Window>(nullptr);
     root_->SetProperty(aura::client::kEmbedType,
-                       aura::client::WindowEmbedType::TOP_LEVEL_IN_WM);
+                       aura::client::WindowEmbedType::EMBED_IN_OWNER);
     root_->Init(ui::LAYER_NOT_DRAWN);
     root_->SetEventTargeter(std::make_unique<WindowTargeter>());
     root_->SetBounds(gfx::Rect(0, 0, 300, 200));
diff --git a/ui/aura/mus/drag_drop_controller_mus_unittest.cc b/ui/aura/mus/drag_drop_controller_mus_unittest.cc
index 24227cf7..34da908c 100644
--- a/ui/aura/mus/drag_drop_controller_mus_unittest.cc
+++ b/ui/aura/mus/drag_drop_controller_mus_unittest.cc
@@ -16,29 +16,32 @@
 #include "ui/aura/mus/window_mus.h"
 #include "ui/aura/test/aura_mus_test_base.h"
 #include "ui/aura/test/mus/test_window_tree.h"
+#include "ui/aura/window.h"
 #include "ui/base/dragdrop/drop_target_event.h"
 #include "ui/events/event_utils.h"
 
 namespace aura {
 namespace {
 
-class DragDropControllerMusTest : public test::AuraMusWmTestBase {
+class DragDropControllerMusTest : public test::AuraTestBase {
  public:
   DragDropControllerMusTest() = default;
 
-  // test::AuraMusWmTestBase
+  // test::AuraMusClientTestBase
   void SetUp() override {
-    AuraMusWmTestBase::SetUp();
+    ConfigureEnvMode(Env::Mode::MUS);
+    SetCreateHostForPrimaryDisplay(true);
+    AuraTestBase::SetUp();
     controller_ = std::make_unique<DragDropControllerMus>(&controller_host_,
                                                           window_tree());
-    window_ = std::unique_ptr<aura::Window>(
-        CreateNormalWindow(0, root_window(), nullptr));
+    window_ =
+        std::unique_ptr<Window>(CreateNormalWindow(0, root_window(), nullptr));
   }
 
   void TearDown() override {
     window_.reset();
     controller_.reset();
-    AuraMusWmTestBase::TearDown();
+    AuraTestBase::TearDown();
   }
 
  protected:
@@ -58,7 +61,7 @@
   }
 
   std::unique_ptr<DragDropControllerMus> controller_;
-  std::unique_ptr<aura::Window> window_;
+  std::unique_ptr<Window> window_;
 
  private:
   void DragMoveAndDrop() {
@@ -127,7 +130,7 @@
 
   class TestDelegate : public client::DragDropDelegate {
    public:
-    TestDelegate(aura::Window* window) : window_(window) {}
+    explicit TestDelegate(Window* window) : window_(window) {}
     State state() const { return state_; }
 
     // Overrides from client::DragDropClientObserver:
@@ -152,7 +155,7 @@
     }
 
    private:
-    aura::Window* const window_;
+    Window* const window_;
     State state_{State::kNotInvoked};
 
     DISALLOW_COPY_AND_ASSIGN(TestDelegate);
diff --git a/ui/aura/mus/mus_types.h b/ui/aura/mus/mus_types.h
index bc82f73..acaa8b1 100644
--- a/ui/aura/mus/mus_types.h
+++ b/ui/aura/mus/mus_types.h
@@ -33,33 +33,15 @@
 
   // The window was created by requesting a top level
   // (WindowTree::NewTopLevel()).
-  // NOTE: in the window manager (the one responsible for actually creating the
-  // real window) the window is of type TOP_LEVEL_IN_WM.
   TOP_LEVEL,
 
-  // The window is a top level window in the window manager.
-  // TODO(sky): this should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  TOP_LEVEL_IN_WM,
-
-  // The window is a display root for the window manager and was automatically
-  // created by mus.
-  // TODO(sky): this should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  DISPLAY_AUTOMATICALLY_CREATED,
-
-  // The window is a display root for the window manager and was manually
-  // created.
-  // TODO(sky): this should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  DISPLAY_MANUALLY_CREATED,
-
   // The window was created locally.
   LOCAL,
 
   // Not one of the above. This means the window is visible to the client and
-  // not one of the above values. Practically this means this client is the
-  // window manager and the window was created by another client.
+  // not one of the above values. For example, if
+  // |kEmbedFlagEmbedderInterceptsEvents| is used, then the embedder sees
+  // Windows created by the embedded client.
   OTHER,
 };
 
diff --git a/ui/aura/mus/platform_event_source_mus_ozone.cc b/ui/aura/mus/platform_event_source_mus_ozone.cc
deleted file mode 100644
index dfd4133..0000000
--- a/ui/aura/mus/platform_event_source_mus_ozone.cc
+++ /dev/null
@@ -1,26 +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.
-
-#include "ui/aura/mus/platform_event_source_mus_ozone.h"
-
-#include "ui/events/event.h"
-#include "ui/events/platform/platform_event_observer.h"
-
-namespace aura {
-
-PlatformEventSourceMus::PlatformEventSourceMus() = default;
-
-PlatformEventSourceMus::~PlatformEventSourceMus() = default;
-
-void PlatformEventSourceMus::OnWillProcessEvent(ui::Event* event) {
-  for (ui::PlatformEventObserver& observer : observers())
-    observer.WillProcessEvent(event);
-}
-
-void PlatformEventSourceMus::OnDidProcessEvent(ui::Event* event) {
-  for (ui::PlatformEventObserver& observer : observers())
-    observer.DidProcessEvent(event);
-}
-
-}  // namespace aura
diff --git a/ui/aura/mus/platform_event_source_mus_ozone.h b/ui/aura/mus/platform_event_source_mus_ozone.h
deleted file mode 100644
index 8557688..0000000
--- a/ui/aura/mus/platform_event_source_mus_ozone.h
+++ /dev/null
@@ -1,35 +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.
-
-#ifndef UI_AURA_MUS_PLATFORM_EVENT_SOURCE_MUS_OZONE_H_
-#define UI_AURA_MUS_PLATFORM_EVENT_SOURCE_MUS_OZONE_H_
-
-#include "ui/events/platform/platform_event_source.h"
-
-namespace ui {
-class Event;
-}
-
-namespace aura {
-
-// PlatformEventSource implementation for mus with ozone. WindowTreeClient owns
-// and installs this. WindowTreeClient calls this to notify observers as
-// necessary.
-class PlatformEventSourceMus : public ui::PlatformEventSource {
- public:
-  PlatformEventSourceMus();
-  ~PlatformEventSourceMus() override;
-
-  // These two functions are called from WindowTreeClient before/after
-  // dispatching events. They forward to observers.
-  void OnWillProcessEvent(ui::Event* event);
-  void OnDidProcessEvent(ui::Event* event);
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(PlatformEventSourceMus);
-};
-
-}  // namespace aura
-
-#endif  // UI_AURA_MUS_PLATFORM_EVENT_SOURCE_MUS_OZONE_H_
diff --git a/ui/aura/mus/property_converter.cc b/ui/aura/mus/property_converter.cc
index f90bc3c..0ca39cc 100644
--- a/ui/aura/mus/property_converter.cc
+++ b/ui/aura/mus/property_converter.cc
@@ -8,6 +8,7 @@
 #include "mojo/public/cpp/bindings/type_converter.h"
 #include "services/ui/public/cpp/property_type_converters.h"
 #include "services/ui/public/interfaces/window_manager.mojom.h"
+#include "services/ui/public/interfaces/window_tree_constants.mojom.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/base/class_property.h"
 
diff --git a/ui/aura/mus/system_input_injector_mus_unittest.cc b/ui/aura/mus/system_input_injector_mus_unittest.cc
deleted file mode 100644
index baa10c7..0000000
--- a/ui/aura/mus/system_input_injector_mus_unittest.cc
+++ /dev/null
@@ -1,82 +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 "ui/aura/mus/system_input_injector_mus.h"
-
-#include <vector>
-
-#include "ui/aura/mus/window_manager_delegate.h"
-#include "ui/aura/mus/window_tree_host_mus_init_params.h"
-#include "ui/aura/test/aura_test_base.h"
-#include "ui/events/event.h"
-#include "ui/events/keycodes/dom/dom_code.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-
-namespace aura {
-
-class TestDispaterchWindowManagerClient : public aura::WindowManagerClient {
- public:
-  TestDispaterchWindowManagerClient() {}
-  ~TestDispaterchWindowManagerClient() override {}
-
-  const std::vector<std::unique_ptr<ui::Event>>& events() const {
-    return events_;
-  }
-
-  // This is the one method in this interface that we're using to grab data.
-  void InjectEvent(const ui::Event& event, int64_t display_id) override {
-    events_.push_back(ui::Event::Clone(event));
-  }
-
-  // The rest of these interfaces aren't relevant to testing
-  // SystemInputInjectorMus and are left empty.
-  void SetFrameDecorationValues(
-      ui::mojom::FrameDecorationValuesPtr values) override {}
-  void SetNonClientCursor(Window* window,
-                          const ui::CursorData& non_client_cursor) override {}
-  void AddAccelerators(std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-                       const base::Callback<void(bool)>& callback) override {}
-  void RemoveAccelerator(uint32_t id) override {}
-  void AddActivationParent(Window* window) override {}
-  void RemoveActivationParent(Window* window) override {}
-  void SetExtendedHitRegionForChildren(Window* window,
-                                       const gfx::Insets& mouse_area,
-                                       const gfx::Insets& touch_area) override {
-  }
-  void LockCursor() override {}
-  void UnlockCursor() override {}
-  void SetCursorVisible(bool visible) override {}
-  void SetCursorSize(ui::CursorSize cursor_size) override {}
-  void SetGlobalOverrideCursor(base::Optional<ui::CursorData> cursor) override {
-  }
-  void SetCursorTouchVisible(bool enabled) override {}
-  void SetKeyEventsThatDontHideCursor(
-      std::vector<ui::mojom::EventMatcherPtr> cursor_key_list) override {}
-  void RequestClose(Window* window) override {}
-  void SetBlockingContainers(
-      const std::vector<BlockingContainers>& all_blocking_containers) override {
-  }
-  bool WaitForInitialDisplays() override { return false; }
-  WindowTreeHostMusInitParams CreateInitParamsForNewDisplay() override {
-    return WindowTreeHostMusInitParams();
-  }
-  void SetDisplayConfiguration(
-      const std::vector<display::Display>& displays,
-      std::vector<ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-      int64_t primary_display_id,
-      const std::vector<display::Display>& mirrors) override {}
-  void AddDisplayReusingWindowTreeHost(
-      WindowTreeHostMus* window_tree_host,
-      const display::Display& display,
-      ui::mojom::WmViewportMetricsPtr viewport_metrics) override {}
-  void SwapDisplayRoots(WindowTreeHostMus* window_tree_host1,
-                        WindowTreeHostMus* window_tree_host2) override {}
-
- private:
-  std::vector<std::unique_ptr<ui::Event>> events_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestDispaterchWindowManagerClient);
-};
-
-}  // namespace aura
diff --git a/ui/aura/mus/window_manager_delegate.cc b/ui/aura/mus/window_manager_delegate.cc
deleted file mode 100644
index 9f38090..0000000
--- a/ui/aura/mus/window_manager_delegate.cc
+++ /dev/null
@@ -1,23 +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.
-
-#include "ui/aura/mus/window_manager_delegate.h"
-
-namespace aura {
-
-void WindowManagerDelegate::OnWmConnected() {}
-
-ui::mojom::EventResult WindowManagerDelegate::OnAccelerator(
-    uint32_t id,
-    const ui::Event& event,
-    base::flat_map<std::string, std::vector<uint8_t>>* properties) {
-  return ui::mojom::EventResult::UNHANDLED;
-}
-
-void WindowManagerDelegate::OnWmPerformAction(Window* window,
-                                              const std::string& action) {}
-
-void WindowManagerDelegate::OnEventBlockedByModalWindow(Window* window) {}
-
-}  // namespace aura
diff --git a/ui/aura/mus/window_manager_delegate.h b/ui/aura/mus/window_manager_delegate.h
deleted file mode 100644
index a171f69a2..0000000
--- a/ui/aura/mus/window_manager_delegate.h
+++ /dev/null
@@ -1,286 +0,0 @@
-// Copyright 2015 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_AURA_MUS_WINDOW_MANAGER_DELEGATE_H_
-#define UI_AURA_MUS_WINDOW_MANAGER_DELEGATE_H_
-
-#include <stdint.h>
-
-#include <map>
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/callback_forward.h"
-#include "base/containers/flat_map.h"
-#include "services/ui/public/interfaces/cursor/cursor.mojom.h"
-#include "services/ui/public/interfaces/window_manager.mojom.h"
-#include "services/ui/public/interfaces/window_tree_constants.mojom.h"
-#include "ui/aura/aura_export.h"
-#include "ui/events/mojo/event.mojom.h"
-#include "ui/gfx/native_widget_types.h"
-
-namespace display {
-class Display;
-}
-
-namespace gfx {
-class Insets;
-class Rect;
-}
-
-namespace ui {
-class Event;
-}
-
-namespace aura {
-
-class Window;
-class WindowTreeHostMus;
-
-struct WindowTreeHostMusInitParams;
-
-// This mirrors ui::mojom::BlockingContainers. See it for details.
-struct BlockingContainers {
-  aura::Window* system_modal_container = nullptr;
-  aura::Window* min_container = nullptr;
-};
-
-// See the mojom with the same name for details on the functions in this
-// interface.
-class AURA_EXPORT WindowManagerClient {
- public:
-  virtual void SetFrameDecorationValues(
-      ui::mojom::FrameDecorationValuesPtr values) = 0;
-  virtual void SetNonClientCursor(Window* window,
-                                  const ui::CursorData& non_client_cursor) = 0;
-
-  virtual void AddAccelerators(
-      std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-      const base::Callback<void(bool)>& callback) = 0;
-  virtual void RemoveAccelerator(uint32_t id) = 0;
-  virtual void AddActivationParent(Window* window) = 0;
-  virtual void RemoveActivationParent(Window* window) = 0;
-  virtual void SetExtendedHitRegionForChildren(
-      Window* window,
-      const gfx::Insets& mouse_area,
-      const gfx::Insets& touch_area) = 0;
-
-  // Queues changes to the cursor instead of applying them instantly. Queued
-  // changes will be executed on UnlockCursor().
-  virtual void LockCursor() = 0;
-
-  // Executes queued changes.
-  virtual void UnlockCursor() = 0;
-
-  // Globally shows or hides the cursor.
-  virtual void SetCursorVisible(bool visible) = 0;
-
-  // Globally sets whether we use normal or large cursors.
-  virtual void SetCursorSize(ui::CursorSize cursor_size) = 0;
-
-  // Sets a cursor which is used instead of the per window cursors. Pass a
-  // nullopt in |cursor| to clear the override.
-  virtual void SetGlobalOverrideCursor(
-      base::Optional<ui::CursorData> cursor) = 0;
-
-  // Sets whether the cursor is visible because the user touched the
-  // screen. This bit is separate from SetCursorVisible(), as it implicitly is
-  // set in the window server when a touch event occurs, and is implicitly
-  // cleared when the mouse moves.
-  virtual void SetCursorTouchVisible(bool enabled) = 0;
-
-  // Sends |event| to mus to be dispatched.
-  virtual void InjectEvent(const ui::Event& event, int64_t display_id) = 0;
-
-  // Sets the list of keys which don't hide the cursor.
-  virtual void SetKeyEventsThatDontHideCursor(
-      std::vector<ui::mojom::EventMatcherPtr> cursor_key_list) = 0;
-
-  // Requests the client embedded in |window| to close the window. Only
-  // applicable to top-level windows. If a client is not embedded in |window|,
-  // this does nothing.
-  virtual void RequestClose(Window* window) = 0;
-
-  // See mojom::WindowManager::SetBlockingContainers() and
-  // mojom::BlockingContainers for details on what this does.
-  virtual void SetBlockingContainers(
-      const std::vector<BlockingContainers>& all_blocking_containers) = 0;
-
-  // Blocks until the initial displays have been received, or if displays are
-  // not automatically created until the connection to mus has been
-  // established.
-  virtual bool WaitForInitialDisplays() = 0;
-
-  // Used by the window manager to create a new display. This is only useful if
-  // the WindowTreeClient was configured not to automatically create displays
-  // (see ConnectAsWindowManager()). The caller needs to configure
-  // DisplayInitParams on the returned object.
-  virtual WindowTreeHostMusInitParams CreateInitParamsForNewDisplay() = 0;
-
-  // Configures the displays. This is used when the window manager manually
-  // configures display roots.
-  virtual void SetDisplayConfiguration(
-      const std::vector<display::Display>& displays,
-      std::vector<ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-      int64_t primary_display_id,
-      const std::vector<display::Display>& mirrors) = 0;
-
-  // Adds |display| as a new display moving |window_tree_host| to the new
-  // display. This results in closing the previous display |window_tree_host|
-  // was associated with.
-  virtual void AddDisplayReusingWindowTreeHost(
-      WindowTreeHostMus* window_tree_host,
-      const display::Display& display,
-      ui::mojom::WmViewportMetricsPtr viewport_metrics) = 0;
-
-  // Swaps the roots of the two displays.
-  virtual void SwapDisplayRoots(WindowTreeHostMus* window_tree_host1,
-                                WindowTreeHostMus* window_tree_host2) = 0;
-
- protected:
-  virtual ~WindowManagerClient() {}
-};
-
-// Used by clients implementing a window manager.
-// TODO(sky): this should be called WindowManager, but that's rather confusing
-// currently.
-class AURA_EXPORT WindowManagerDelegate {
- public:
-  // Called once to give the delegate access to functions only exposed to
-  // the WindowManager.
-  virtual void SetWindowManagerClient(WindowManagerClient* client) = 0;
-
-  // Called if the window server requires the window manager to manage the real
-  // accelerated widget. This is the case when mus expects the window manager to
-  // set up viz (instead of mus itself hosting viz).
-  virtual void OnWmAcceleratedWidgetAvailableForDisplay(
-      int64_t display_id,
-      gfx::AcceleratedWidget widget) = 0;
-
-  // Called when the connection to mus has been fully established.
-  virtual void OnWmConnected();
-
-  // A client requested the bounds of |window| to change to |bounds|.
-  virtual void OnWmSetBounds(Window* window, const gfx::Rect& bounds) = 0;
-
-  // A client requested the shared property named |name| to change to
-  // |new_data|. Return true to allow the change to |new_data|, false
-  // otherwise. If true is returned the property is set via
-  // PropertyConverter::SetPropertyFromTransportValue().
-  virtual bool OnWmSetProperty(
-      Window* window,
-      const std::string& name,
-      std::unique_ptr<std::vector<uint8_t>>* new_data) = 0;
-
-  // A client requested the modal type to be changed to |type|.
-  virtual void OnWmSetModalType(Window* window, ui::ModalType type) = 0;
-
-  // A client requested to change focusibility of |window|. We currently assume
-  // this always succeeds.
-  virtual void OnWmSetCanFocus(Window* window, bool can_focus) = 0;
-
-  // A client has requested a new top level window. The delegate should create
-  // and parent the window appropriately and return it. |properties| is the
-  // supplied properties from the client requesting the new window. The
-  // delegate may modify |properties| before calling NewWindow(), but the
-  // delegate does *not* own |properties|, they are valid only for the life
-  // of OnWmCreateTopLevelWindow(). |window_type| is the type of window
-  // requested by the client. Use SetWindowType() with |window_type| (in
-  // property_utils.h) to configure the type on the newly created window.
-  virtual Window* OnWmCreateTopLevelWindow(
-      ui::mojom::WindowType window_type,
-      std::map<std::string, std::vector<uint8_t>>* properties) = 0;
-
-  // Called when a Mus client's jankiness changes. |windows| is the set of
-  // windows owned by the window manager in which the client is embedded.
-  virtual void OnWmClientJankinessChanged(
-      const std::set<Window*>& client_windows,
-      bool janky) = 0;
-
-  // Called when a Mus client has started a drag, and wants this image to be
-  // the drag representation.
-  virtual void OnWmBuildDragImage(const gfx::Point& screen_location,
-                                  const gfx::ImageSkia& drag_image,
-                                  const gfx::Vector2d& drag_image_offset,
-                                  ui::mojom::PointerKind source) = 0;
-
-  // Called during drags when the drag location has changed and the drag
-  // representation must be moved.
-  virtual void OnWmMoveDragImage(const gfx::Point& screen_location) = 0;
-
-  // Called when a drag is complete or canceled, and signals that the drag image
-  // should be removed.
-  virtual void OnWmDestroyDragImage() = 0;
-
-  // When a new display is added OnWmWillCreateDisplay() is called, and then
-  // OnWmNewDisplay(). OnWmWillCreateDisplay() is intended to add the display
-  // to the set of displays (see Screen).
-  virtual void OnWmWillCreateDisplay(const display::Display& display) = 0;
-
-  // Called when a WindowTreeHostMus is created for a new display
-  // Called when a display is added. |window_tree_host| is the WindowTreeHost
-  // for the new display.
-  virtual void OnWmNewDisplay(
-      std::unique_ptr<WindowTreeHostMus> window_tree_host,
-      const display::Display& display) = 0;
-
-  // Called when a display is removed. |window_tree_host| is the WindowTreeHost
-  // for the display.
-  virtual void OnWmDisplayRemoved(WindowTreeHostMus* window_tree_host) = 0;
-
-  // Called when a display is modified.
-  virtual void OnWmDisplayModified(const display::Display& display) = 0;
-
-  // Called when an accelerator is received. |id| is the id previously
-  // registered via AddAccelerators(). For pre-target accelerators the delegate
-  // may add key/value pairs to |properties| that are then added to the
-  // KeyEvent that is sent to the client with the focused window (only if this
-  // returns UNHANDLED). |properties| may be used to pass around state from the
-  // window manager to clients.
-  virtual ui::mojom::EventResult OnAccelerator(
-      uint32_t id,
-      const ui::Event& event,
-      base::flat_map<std::string, std::vector<uint8_t>>* properties);
-
-  // Called when the mouse cursor is shown or hidden in response to a touch
-  // event or window manager call.
-  virtual void OnCursorTouchVisibleChanged(bool enabled) = 0;
-
-  virtual void OnWmPerformMoveLoop(
-      Window* window,
-      ui::mojom::MoveLoopSource source,
-      const gfx::Point& cursor_location,
-      const base::Callback<void(bool)>& on_done) = 0;
-
-  virtual void OnWmCancelMoveLoop(Window* window) = 0;
-
-  // Called when then client changes the client area of a window.
-  virtual void OnWmSetClientArea(
-      Window* window,
-      const gfx::Insets& insets,
-      const std::vector<gfx::Rect>& additional_client_areas) = 0;
-
-  // Returns whether |window| is the current active window.
-  virtual bool IsWindowActive(Window* window) = 0;
-
-  // Called when a client requests that its activation be given to another
-  // window.
-  virtual void OnWmDeactivateWindow(Window* window) = 0;
-
-  // Called when a client requests that a generic action be performed. |window|
-  // can never be null.
-  virtual void OnWmPerformAction(Window* window, const std::string& action);
-
-  // Called when an event is blocked by a modal window. |window| is the modal
-  // window that blocked the event.
-  virtual void OnEventBlockedByModalWindow(Window* window);
-
- protected:
-  virtual ~WindowManagerDelegate() {}
-};
-
-}  // namespace ui
-
-#endif  // UI_AURA_MUS_WINDOW_MANAGER_DELEGATE_H_
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index 074d5453..336d3009 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -85,13 +85,6 @@
   window_tree_client_->SetCanAcceptDrops(this, can_accept_drops);
 }
 
-void WindowPortMus::SetExtendedHitRegionForChildren(
-    const gfx::Insets& mouse_insets,
-    const gfx::Insets& touch_insets) {
-  window_tree_client_->SetExtendedHitRegionForChildren(window_, mouse_insets,
-                                                       touch_insets);
-}
-
 void WindowPortMus::SetHitTestMask(const base::Optional<gfx::Rect>& rect) {
   window_tree_client_->SetHitTestMask(this, rect);
 }
@@ -312,8 +305,7 @@
 
 void WindowPortMus::SetFrameSinkIdFromServer(
     const viz::FrameSinkId& frame_sink_id) {
-  DCHECK(window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM ||
-         window_mus_type() == WindowMusType::EMBED_IN_OWNER);
+  DCHECK(window_mus_type() == WindowMusType::EMBED_IN_OWNER);
   window_->SetEmbedFrameSinkId(frame_sink_id);
   UpdatePrimarySurfaceId();
 }
@@ -491,8 +483,6 @@
     local_surface_id_ = parent_local_surface_id_allocator_.GenerateId();
     local_layer_tree_frame_sink_->SetLocalSurfaceId(local_surface_id_);
   }
-  window_tree_client_->OnWindowMusDeviceScaleFactorChanged(
-      this, old_device_scale_factor, new_device_scale_factor);
 
   if (window_->delegate()) {
     window_->delegate()->OnDeviceScaleFactorChanged(old_device_scale_factor,
@@ -610,9 +600,7 @@
 }
 
 void WindowPortMus::UpdatePrimarySurfaceId() {
-  if (window_mus_type() != WindowMusType::TOP_LEVEL_IN_WM &&
-      window_mus_type() != WindowMusType::EMBED_IN_OWNER &&
-      window_mus_type() != WindowMusType::DISPLAY_MANUALLY_CREATED &&
+  if (window_mus_type() != WindowMusType::EMBED_IN_OWNER &&
       window_mus_type() != WindowMusType::LOCAL) {
     return;
   }
@@ -626,17 +614,14 @@
 }
 
 void WindowPortMus::UpdateClientSurfaceEmbedder() {
-  if (window_mus_type() != WindowMusType::TOP_LEVEL_IN_WM &&
-      window_mus_type() != WindowMusType::EMBED_IN_OWNER &&
-      window_mus_type() != WindowMusType::DISPLAY_MANUALLY_CREATED &&
+  if (window_mus_type() != WindowMusType::EMBED_IN_OWNER &&
       window_mus_type() != WindowMusType::LOCAL) {
     return;
   }
 
   if (!client_surface_embedder_) {
     client_surface_embedder_ = std::make_unique<ClientSurfaceEmbedder>(
-        window_, window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM,
-        window_tree_client_->normal_client_area_insets_);
+        window_, /* inject_gutter */ false, gfx::Insets());
   }
 
   client_surface_embedder_->SetPrimarySurfaceId(primary_surface_id_);
diff --git a/ui/aura/mus/window_port_mus.h b/ui/aura/mus/window_port_mus.h
index a23afac3..4a5d977 100644
--- a/ui/aura/mus/window_port_mus.h
+++ b/ui/aura/mus/window_port_mus.h
@@ -33,10 +33,6 @@
 }
 }
 
-namespace gfx {
-class Insets;
-}
-
 namespace aura {
 
 class ClientSurfaceEmbedder;
@@ -83,11 +79,6 @@
   // Sets whether this window can accept drops, defaults to false.
   void SetCanAcceptDrops(bool can_accept_drops);
 
-  // See description in mojom for details on this. Has no effect if not running
-  // in the window manager.
-  void SetExtendedHitRegionForChildren(const gfx::Insets& mouse_insets,
-                                       const gfx::Insets& touch_insets);
-
   // See description in mojom for details on this.
   void SetHitTestMask(const base::Optional<gfx::Rect>& rect);
 
diff --git a/ui/aura/mus/window_tree_client.cc b/ui/aura/mus/window_tree_client.cc
index 55b4a9ee..b2f00dcb 100644
--- a/ui/aura/mus/window_tree_client.cc
+++ b/ui/aura/mus/window_tree_client.cc
@@ -23,13 +23,10 @@
 #include "components/discardable_memory/client/client_discardable_shared_memory_manager.h"
 #include "mojo/public/cpp/bindings/map.h"
 #include "services/service_manager/public/cpp/connector.h"
-#include "services/ui/common/accelerator_util.h"
 #include "services/ui/common/util.h"
 #include "services/ui/public/cpp/gpu/gpu.h"
 #include "services/ui/public/cpp/property_type_converters.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
-#include "services/ui/public/interfaces/window_manager.mojom.h"
-#include "services/ui/public/interfaces/window_manager_window_tree_factory.mojom.h"
 #include "services/ui/public/interfaces/window_tree_host_factory.mojom.h"
 #include "ui/aura/client/aura_constants.h"
 #include "ui/aura/client/drag_drop_client.h"
@@ -46,7 +43,6 @@
 #include "ui/aura/mus/mus_context_factory.h"
 #include "ui/aura/mus/property_converter.h"
 #include "ui/aura/mus/property_utils.h"
-#include "ui/aura/mus/window_manager_delegate.h"
 #include "ui/aura/mus/window_mus.h"
 #include "ui/aura/mus/window_port_mus.h"
 #include "ui/aura/mus/window_tree_client_delegate.h"
@@ -70,10 +66,6 @@
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/geometry/size.h"
 
-#if defined(USE_OZONE)
-#include "ui/aura/mus/platform_event_source_mus_ozone.h"
-#endif
-
 namespace aura {
 namespace {
 
@@ -95,48 +87,25 @@
   ~EventAckHandler() override {
     base::RunLoop::RemoveNestingObserverOnCurrentThread(this);
     if (ack_callback_) {
-      NotifyPlatformEventSource();
       std::move(ack_callback_)
           .Run(handled_ ? ui::mojom::EventResult::HANDLED
                         : ui::mojom::EventResult::UNHANDLED);
     }
   }
 
-#if defined(USE_OZONE)
-  void SetPlatformEventSourceAndEvent(
-      PlatformEventSourceMus* platform_event_source,
-      ui::Event* event) {
-    event_ = event;
-    platform_event_source_ = platform_event_source;
-  }
-#endif
-
   void set_handled(bool handled) { handled_ = handled; }
 
   // base::RunLoop::NestingObserver:
   void OnBeginNestedRunLoop() override {
     // Acknowledge the event immediately if a nested run loop starts.
     // Otherwise we appear unresponsive for the life of the nested run loop.
-    if (ack_callback_) {
-      NotifyPlatformEventSource();
+    if (ack_callback_)
       std::move(ack_callback_).Run(ui::mojom::EventResult::HANDLED);
-    }
   }
 
  private:
-  void NotifyPlatformEventSource() {
-#if defined(USE_OZONE)
-    if (platform_event_source_)
-      platform_event_source_->OnDidProcessEvent(event_);
-#endif
-  }
-
   EventResultCallback ack_callback_;
   bool handled_ = false;
-#if defined(USE_OZONE)
-  ui::Event* event_ = nullptr;
-  PlatformEventSourceMus* platform_event_source_ = nullptr;
-#endif
 
   DISALLOW_COPY_AND_ASSIGN(EventAckHandler);
 };
@@ -178,80 +147,17 @@
   return ui::Event::Clone(event);
 }
 
-// Use for acks from mus that are expected to always succeed and if they don't
-// a crash is triggered.
-void OnAckMustSucceed(const base::Location& from_here, bool success) {
-  CHECK(success) << "Context: " << from_here.ToString();
-}
-
-ui::Id GetServerIdForWindow(Window* window) {
-  return window ? WindowMus::Get(window)->server_id() : kInvalidServerId;
-}
-
-gfx::Transform ConvertTransformFromServer(WindowMus* window,
-                                          const gfx::Transform& transform) {
-  const float scale = window->GetDeviceScaleFactor();
-  if (scale == 1.0f)
-    return transform;
-
-  gfx::Transform dip_transform = transform;
-  dip_transform.matrix().set(0, 3, dip_transform.matrix().get(0, 3) / scale);
-  dip_transform.matrix().set(1, 3, dip_transform.matrix().get(1, 3) / scale);
-  dip_transform.matrix().set(2, 3, dip_transform.matrix().get(2, 3) / scale);
-  return dip_transform;
-}
-
-// See the comment for ConvertTransformFromServer().
-gfx::Transform ConvertTransformToServer(WindowMus* window,
-                                        const gfx::Transform& transform) {
-  const float scale = window->GetDeviceScaleFactor();
-  if (scale == 1.0f)
-    return transform;
-
-  gfx::Transform pixel_transform = transform;
-  pixel_transform.matrix().set(0, 3, transform.matrix().get(0, 3) * scale);
-  pixel_transform.matrix().set(1, 3, transform.matrix().get(1, 3) * scale);
-  pixel_transform.matrix().set(2, 3, transform.matrix().get(2, 3) * scale);
-  return pixel_transform;
-}
-
 }  // namespace
 
 // static
-std::unique_ptr<WindowTreeClient> WindowTreeClient::CreateForWindowManager(
-    service_manager::Connector* connector,
-    WindowTreeClientDelegate* delegate,
-    WindowManagerDelegate* window_manager_delegate,
-    bool automatically_create_display_roots,
-    bool create_discardable_memory) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  std::unique_ptr<WindowTreeClient> wtc(
-      new WindowTreeClient(connector, delegate, window_manager_delegate,
-                           nullptr, nullptr, create_discardable_memory));
-
-  ui::mojom::WindowManagerWindowTreeFactoryPtr factory;
-  connector->BindInterface(ui::mojom::kServiceName, &factory);
-  ui::mojom::WindowTreePtr window_tree;
-  ui::mojom::WindowTreeClientPtr client;
-  wtc->binding_.Bind(MakeRequest(&client));
-  factory->CreateWindowTree(MakeRequest(&window_tree), std::move(client),
-                            automatically_create_display_roots);
-  wtc->SetWindowTree(std::move(window_tree));
-  wtc->CreatePlatformEventSourceIfNecessary();
-  return wtc;
-}
-
-// static
 std::unique_ptr<WindowTreeClient> WindowTreeClient::CreateForEmbedding(
     service_manager::Connector* connector,
     WindowTreeClientDelegate* delegate,
     ui::mojom::WindowTreeClientRequest request,
-    bool create_discardable_memory,
-    Config config) {
+    bool create_discardable_memory) {
   std::unique_ptr<WindowTreeClient> wtc(
-      new WindowTreeClient(connector, delegate, nullptr, std::move(request),
-                           nullptr, create_discardable_memory, config));
+      new WindowTreeClient(connector, delegate, std::move(request), nullptr,
+                           create_discardable_memory));
   return wtc;
 }
 
@@ -261,9 +167,8 @@
     WindowTreeClientDelegate* delegate,
     bool create_discardable_memory,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner) {
-  std::unique_ptr<WindowTreeClient> wtc(
-      new WindowTreeClient(connector, delegate, nullptr, nullptr, nullptr,
-                           create_discardable_memory, Config::kMus2));
+  std::unique_ptr<WindowTreeClient> wtc(new WindowTreeClient(
+      connector, delegate, nullptr, nullptr, create_discardable_memory));
   ui::mojom::WindowTreeFactoryPtr factory;
   connector->BindInterface(ui::mojom::kServiceName, &factory);
   ui::mojom::WindowTreePtr window_tree;
@@ -280,9 +185,8 @@
     service_manager::Connector* connector,
     WindowTreeClientDelegate* delegate,
     bool create_discardable_memory) {
-  std::unique_ptr<WindowTreeClient> wtc(
-      new WindowTreeClient(connector, delegate, nullptr, nullptr, nullptr,
-                           create_discardable_memory));
+  std::unique_ptr<WindowTreeClient> wtc(new WindowTreeClient(
+      connector, delegate, nullptr, nullptr, create_discardable_memory));
   ui::mojom::WindowTreeHostFactoryPtr factory;
   connector->BindInterface(ui::mojom::kServiceName, &factory);
 
@@ -345,8 +249,14 @@
 }
 
 bool WindowTreeClient::WaitForDisplays() {
-  // TODO(sky): move WaitForInitialDisplays() here. https://crbug.com/837713
-  return WaitForInitialDisplays();
+  if (got_initial_displays_)
+    return true;
+
+  bool valid_wait = true;
+  // TODO(sky): having to block here is not ideal. http://crbug.com/594852.
+  while (!got_initial_displays_ && valid_wait)
+    valid_wait = binding_.WaitForIncomingMethodCall();
+  return valid_wait;
 }
 
 void WindowTreeClient::SetCanFocus(Window* window, bool can_focus) {
@@ -383,14 +293,8 @@
     WindowMus* window,
     const base::Optional<gfx::Rect>& mask_rect) {
   base::Optional<gfx::Rect> out_rect = base::nullopt;
-  if (mask_rect) {
-    if (is_using_pixels()) {
-      out_rect = gfx::ConvertRectToPixel(window->GetDeviceScaleFactor(),
-                                         mask_rect.value());
-    } else {
-      out_rect = mask_rect.value();
-    }
-  }
+  if (mask_rect)
+    out_rect = mask_rect.value();
 
   tree_->SetHitTestMask(window->server_id(), out_rect);
 }
@@ -462,17 +366,13 @@
 WindowTreeClient::WindowTreeClient(
     service_manager::Connector* connector,
     WindowTreeClientDelegate* delegate,
-    WindowManagerDelegate* window_manager_delegate,
     mojo::InterfaceRequest<ui::mojom::WindowTreeClient> request,
     scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
-    bool create_discardable_memory,
-    Config config)
-    : config_(config),
-      connector_(connector),
+    bool create_discardable_memory)
+    : connector_(connector),
       next_window_id_(1),
       next_change_id_(1),
       delegate_(delegate),
-      window_manager_delegate_(window_manager_delegate),
       binding_(this),
       tree_(nullptr),
       in_destructor_(false),
@@ -484,8 +384,6 @@
   // Some tests may not create a TransientWindowClient.
   if (client::GetTransientWindowClient())
     client::GetTransientWindowClient()->AddObserver(this);
-  if (window_manager_delegate)
-    window_manager_delegate->SetWindowManagerClient(this);
   if (connector) {  // |connector| can be null in tests.
     if (!io_task_runner) {
       // |io_task_runner| is null in most case. But for the browser process,
@@ -517,13 +415,6 @@
   }
 }
 
-void WindowTreeClient::CreatePlatformEventSourceIfNecessary() {
-#if defined(USE_OZONE)
-  if (!ui::PlatformEventSource::GetInstance())
-    platform_event_source_ = std::make_unique<PlatformEventSourceMus>();
-#endif
-}
-
 void WindowTreeClient::RegisterWindowMus(WindowMus* window) {
   DCHECK(windows_.find(window->server_id()) == windows_.end());
   windows_[window->server_id()] = window;
@@ -544,78 +435,6 @@
   return windows_.count(window_mus->server_id()) > 0;
 }
 
-void WindowTreeClient::ConvertPointerEventLocationToDip(
-    int64_t display_id,
-    WindowMus* window,
-    ui::LocatedEvent* event) const {
-  // PointerEvents shouldn't have the target set.
-  DCHECK(!event->target());
-
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  if (!is_using_pixels()) {
-    if (!window) {
-      // When there is no window force the root and location to be the same.
-      // They may differ if |window| was valid at the time of the event, but
-      // was since deleted.
-      event->set_location_f(event->root_location_f());
-    }
-    return;
-  }
-
-  if (window_manager_delegate_) {
-    ConvertPointerEventLocationToDipInWindowManager(display_id, window, event);
-    return;
-  }
-  display::Screen* screen = display::Screen::GetScreen();
-  display::Display display;
-  // TODO(sky): this needs to take into account the ui display scale.
-  // http://crbug.com/758399.
-  if (!screen->GetDisplayWithDisplayId(display_id, &display) ||
-      display.device_scale_factor() == 1.f) {
-    return;
-  }
-  const gfx::Point root_location = gfx::ConvertPointToDIP(
-      display.device_scale_factor(), event->root_location());
-  event->set_root_location(root_location);
-  if (window) {
-    const gfx::Point host_location = gfx::ConvertPointToDIP(
-        display.device_scale_factor(), event->location());
-    event->set_location(host_location);
-  } else {
-    // When there is no window force the root and location to be the same. They
-    // may differ it |window| was valid at the time of the event, but was since
-    // deleted.
-    event->set_location(root_location);
-  }
-}
-
-void WindowTreeClient::ConvertPointerEventLocationToDipInWindowManager(
-    int64_t display_id,
-    WindowMus* window,
-    ui::LocatedEvent* event) const {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  const WindowTreeHostMus* window_tree_host =
-      GetWindowTreeHostForDisplayId(display_id);
-  if (!window_tree_host)
-    return;
-
-  ui::Event::DispatcherApi dispatcher_api(event);
-  if (window) {
-    dispatcher_api.set_target(window->GetWindow());
-  } else {
-    // UpdateForRootTransform() in the case of no target uses |location_|.
-    // |location_| may be relative to a window that wasn't found. To ensure we
-    // convert from the root, reset |location_| to |root_location_|.
-    event->set_location_f(event->root_location_f());
-  }
-  event->UpdateForRootTransform(
-      window_tree_host->GetInverseRootTransform(),
-      window_tree_host->GetInverseRootTransformForLocalEventCoordinates());
-  dispatcher_api.set_target(nullptr);
-}
-
 InFlightChange* WindowTreeClient::GetOldestInFlightChangeMatching(
     const InFlightChange& change) {
   for (const auto& pair : in_flight_map_) {
@@ -711,20 +530,6 @@
     window->SetPropertyFromServer(pair.first, &pair.second);
 }
 
-const WindowTreeHostMus* WindowTreeClient::GetWindowTreeHostForDisplayId(
-    int64_t display_id) const {
-  if (!window_manager_delegate_)
-    return nullptr;
-
-  for (WindowMus* window : roots_) {
-    WindowTreeHostMus* window_tree_host =
-        static_cast<WindowTreeHostMus*>(window->GetWindow()->GetHost());
-    if (window_tree_host->display_id() == display_id)
-      return window_tree_host;
-  }
-  return nullptr;
-}
-
 std::unique_ptr<WindowTreeHostMus> WindowTreeClient::CreateWindowTreeHost(
     WindowMusType window_mus_type,
     const ui::mojom::WindowData& window_data,
@@ -771,12 +576,7 @@
   SetWindowType(window, GetWindowTypeFromProperties(properties));
   window->Init(ui::LAYER_NOT_DRAWN);
   SetLocalPropertiesFromServerProperties(window_mus, window_data);
-  window_mus->SetBoundsFromServer(
-      is_using_pixels()
-          ? gfx::ConvertRectToDIP(window_mus->GetDeviceScaleFactor(),
-                                  window_data.bounds)
-          : window_data.bounds,
-      base::nullopt);
+  window_mus->SetBoundsFromServer(window_data.bounds, base::nullopt);
   if (parent)
     parent->AddChildFromServer(window_port_mus_ptr);
   if (window_data.visible)
@@ -794,12 +594,6 @@
 
   tree_ptr_.set_connection_error_handler(base::BindOnce(
       &WindowTreeClient::OnConnectionLost, weak_factory_.GetWeakPtr()));
-
-  if (window_manager_delegate_) {
-    tree_ptr_->GetWindowManagerClient(
-        MakeRequest(&window_manager_internal_client_));
-    window_manager_client_ = window_manager_internal_client_.get();
-  }
 }
 
 void WindowTreeClient::WindowTreeConnectionEstablished(
@@ -872,29 +666,6 @@
   embed_roots_.erase(embed_root);
 }
 
-WindowTreeHostMus* WindowTreeClient::WmNewDisplayAddedImpl(
-    const display::Display& display,
-    ui::mojom::WindowDataPtr root_data,
-    bool parent_drawn,
-    const base::Optional<viz::LocalSurfaceId>& local_surface_id) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  DCHECK(window_manager_delegate_);
-
-  got_initial_displays_ = true;
-
-  window_manager_delegate_->OnWmWillCreateDisplay(display);
-
-  std::unique_ptr<WindowTreeHostMus> window_tree_host =
-      CreateWindowTreeHost(WindowMusType::DISPLAY_AUTOMATICALLY_CREATED,
-                           *root_data, display.id(), local_surface_id);
-
-  WindowTreeHostMus* window_tree_host_ptr = window_tree_host.get();
-  window_manager_delegate_->OnWmNewDisplay(std::move(window_tree_host),
-                                           display);
-  return window_tree_host_ptr;
-}
-
 EventResultCallback WindowTreeClient::CreateEventResultCallback(
     int32_t event_id) {
   return base::BindOnce(&ui::mojom::WindowTree::OnWindowInputEventAck,
@@ -920,30 +691,18 @@
     // factor in the Compositor.
     const float dsf = ui::GetScaleFactorForNativeView(window->GetWindow());
     GetWindowTreeHostMus(window)->SetBoundsFromServerInPixels(
-        is_using_pixels() ? revert_bounds
-                          : gfx::ConvertRectToPixel(dsf, revert_bounds),
+        gfx::ConvertRectToPixel(dsf, revert_bounds),
         local_surface_id ? *local_surface_id : viz::LocalSurfaceId());
     return;
   }
 
-  // NOTE: |revert_bounds| is pixels for kMash, and DIPs for kMus2.
-  // Window::SetBoundsFromServer() expects DIPs.
-  window->SetBoundsFromServer(
-      is_using_pixels()
-          ? gfx::ConvertRectToDIP(window->GetDeviceScaleFactor(), revert_bounds)
-          : revert_bounds,
-      local_surface_id);
+  window->SetBoundsFromServer(revert_bounds, local_surface_id);
 }
 
 void WindowTreeClient::SetWindowTransformFromServer(
     WindowMus* window,
     const gfx::Transform& transform) {
-  if (is_using_pixels()) {
-    window->SetTransformFromServer(
-        ConvertTransformFromServer(window, transform));
-  } else {
-    window->SetTransformFromServer(transform);
-  }
+  window->SetTransformFromServer(transform);
 }
 
 void WindowTreeClient::SetWindowVisibleFromServer(WindowMus* window,
@@ -962,8 +721,6 @@
     window_tree_host->Hide();
 }
 
-// NOTE: this function takes pixels if is_using_pixels() is true, otherwise
-// DIPs. Eventually this will only take DIPs (https://crbug.com/842365).
 void WindowTreeClient::ScheduleInFlightBoundsChange(
     WindowMus* window,
     const gfx::Rect& old_bounds,
@@ -972,15 +729,11 @@
       ScheduleInFlightChange(std::make_unique<InFlightBoundsChange>(
           this, window, old_bounds, window->GetLocalSurfaceId()));
   base::Optional<viz::LocalSurfaceId> local_surface_id;
-  if (window->window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM ||
-      window->window_mus_type() == WindowMusType::EMBED_IN_OWNER ||
-      window->window_mus_type() == WindowMusType::DISPLAY_MANUALLY_CREATED ||
+  if (window->window_mus_type() == WindowMusType::EMBED_IN_OWNER ||
       window->HasLocalLayerTreeFrameSink()) {
     local_surface_id = window->GetOrAllocateLocalSurfaceId(
-        is_using_pixels() ? new_bounds.size()
-                          : gfx::ConvertRectToPixel(
-                                window->GetDeviceScaleFactor(), new_bounds)
-                                .size());
+        gfx::ConvertRectToPixel(window->GetDeviceScaleFactor(), new_bounds)
+            .size());
     // |window_tree_host| may be null if this is called during creation of
     // the window associated with the WindowTreeHostMus.
     WindowTreeHost* window_tree_host = window->GetWindow()->GetHost();
@@ -998,7 +751,7 @@
   window->set_server_id(next_window_id_++);
   RegisterWindowMus(window);
 
-  DCHECK(window_manager_delegate_ || !IsRoot(window));
+  DCHECK(!IsRoot(window));
 
   PropertyConverter* property_converter = delegate_->GetPropertyConverter();
   base::flat_map<std::string, std::vector<uint8_t>> transport_properties =
@@ -1013,37 +766,6 @@
     SetEventTargetingPolicy(window,
                             window->GetWindow()->event_targeting_policy());
   }
-  if (window->window_mus_type() == WindowMusType::DISPLAY_MANUALLY_CREATED) {
-    WindowTreeHostMus* window_tree_host = GetWindowTreeHostMus(window);
-    std::unique_ptr<DisplayInitParams> display_init_params =
-        window_tree_host->ReleaseDisplayInitParams();
-    DCHECK(display_init_params);
-    display::Display display;
-    if (display_init_params->display) {
-      display = *display_init_params->display;
-    } else {
-      const bool has_display =
-          display::Screen::GetScreen()->GetDisplayWithDisplayId(
-              window_tree_host->display_id(), &display);
-      DCHECK(has_display);
-    }
-    // As |window| is a root, changes to its bounds are ignored (it's assumed
-    // bounds changes are routed through OnWindowTreeHostBoundsWillChange()).
-    // But the display is created with an initial bounds, and we need to push
-    // that to the server.
-    ScheduleInFlightBoundsChange(
-        window, gfx::Rect(),
-        gfx::Rect(
-            display_init_params->viewport_metrics.bounds_in_pixels.size()));
-
-    if (window_manager_client_) {
-      window_manager_client_->SetDisplayRoot(
-          display, display_init_params->viewport_metrics.Clone(),
-          display_init_params->is_primary_display, window->server_id(),
-          display_init_params->mirrors,
-          base::BindOnce(&OnAckMustSucceed, FROM_HERE));
-    }
-  }
 }
 
 void WindowTreeClient::OnWindowMusDestroyed(WindowMus* window, Origin origin) {
@@ -1064,14 +786,6 @@
 
   windows_.erase(window->server_id());
 
-  for (auto& entry : embedded_windows_) {
-    auto it = entry.second.find(window->GetWindow());
-    if (it != entry.second.end()) {
-      entry.second.erase(it);
-      break;
-    }
-  }
-
   // Remove any InFlightChanges associated with the window.
   std::set<uint32_t> in_flight_change_ids_to_remove;
   for (const auto& pair : in_flight_map_) {
@@ -1095,15 +809,7 @@
     // already been set.
     return;
   }
-  const float device_scale_factor = window->GetDeviceScaleFactor();
-  ScheduleInFlightBoundsChange(
-      window,
-      is_using_pixels()
-          ? gfx::ConvertRectToPixel(device_scale_factor, old_bounds)
-          : old_bounds,
-      is_using_pixels()
-          ? gfx::ConvertRectToPixel(device_scale_factor, new_bounds)
-          : new_bounds);
+  ScheduleInFlightBoundsChange(window, old_bounds, new_bounds);
 }
 
 void WindowTreeClient::OnWindowMusTransformChanged(
@@ -1112,10 +818,7 @@
     const gfx::Transform& new_transform) {
   const uint32_t change_id = ScheduleInFlightChange(
       std::make_unique<InFlightTransformChange>(this, window, old_transform));
-  tree_->SetWindowTransform(
-      change_id, window->server_id(),
-      is_using_pixels() ? ConvertTransformToServer(window, new_transform)
-                        : new_transform);
+  tree_->SetWindowTransform(change_id, window->server_id(), new_transform);
 }
 
 void WindowTreeClient::OnWindowMusAddChild(WindowMus* parent,
@@ -1212,35 +915,6 @@
                            transport_value_mojo);
 }
 
-void WindowTreeClient::OnWindowMusDeviceScaleFactorChanged(
-    WindowMus* window,
-    float old_scale_factor,
-    float new_scale_factor) {
-  if (!is_using_pixels())
-    return;  // device-scale factor doesn't impact DIP bounds.
-
-  // Root changes are handled else where.
-  if (IsRoot(window))
-    return;
-
-  const gfx::Rect old_bounds =
-      gfx::ConvertRectToPixel(old_scale_factor, window->GetWindow()->bounds());
-  const gfx::Rect new_bounds =
-      gfx::ConvertRectToPixel(new_scale_factor, window->GetWindow()->bounds());
-  ScheduleInFlightBoundsChange(window, old_bounds, new_bounds);
-}
-
-void WindowTreeClient::OnWmMoveLoopCompleted(uint32_t change_id,
-                                             bool completed) {
-  if (window_manager_client_)
-    window_manager_client_->WmResponse(change_id, completed);
-
-  if (change_id == current_wm_move_loop_change_) {
-    current_wm_move_loop_change_ = 0;
-    current_wm_move_loop_window_id_ = 0;
-  }
-}
-
 std::set<Window*> WindowTreeClient::GetRoots() {
   std::set<Window*> roots;
   for (WindowMus* window : roots_)
@@ -1321,11 +995,6 @@
   is_from_embed_ = true;
   got_initial_displays_ = true;
 
-  if (window_manager_delegate_) {
-    tree_ptr_->GetWindowManagerClient(
-        MakeRequest(&window_manager_internal_client_));
-    window_manager_client_ = window_manager_internal_client_.get();
-  }
   OnEmbedImpl(tree_ptr_.get(), std::move(root_data), display_id,
               focused_window_id, drawn, local_surface_id);
 }
@@ -1438,11 +1107,7 @@
     if (current_change) {
       current_change->SetRevertValueFrom(bounds_change);
     } else {
-      const gfx::Rect window_bounds =
-          is_using_pixels()
-              ? gfx::ConvertRectToPixel(window->GetDeviceScaleFactor(),
-                                        window->GetWindow()->bounds())
-              : window->GetWindow()->bounds();
+      const gfx::Rect& window_bounds = window->GetWindow()->bounds();
       if (window_bounds != bounds)
         SetWindowBoundsFromServer(window, bounds, local_surface_id);
     }
@@ -1499,31 +1164,6 @@
   SetWindowTransformFromServer(window, new_transform);
 }
 
-void WindowTreeClient::OnClientAreaChanged(
-    ui::Id window_id,
-    const gfx::Insets& new_client_area,
-    const std::vector<gfx::Rect>& new_additional_client_areas) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  if (!is_using_pixels())
-    return;
-
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (!window)
-    return;
-
-  float device_scale_factor = window->GetDeviceScaleFactor();
-  std::vector<gfx::Rect> new_additional_client_areas_in_dip;
-  for (const gfx::Rect& area : new_additional_client_areas) {
-    new_additional_client_areas_in_dip.push_back(
-        gfx::ConvertRectToDIP(device_scale_factor, area));
-  }
-  window_manager_delegate_->OnWmSetClientArea(
-      window->GetWindow(),
-      gfx::ConvertInsetsToDIP(device_scale_factor, new_client_area),
-      new_additional_client_areas_in_dip);
-}
-
 void WindowTreeClient::OnTransientWindowAdded(ui::Id window_id,
                                               ui::Id transient_window_id) {
   WindowMus* window = GetWindowByServerId(window_id);
@@ -1662,8 +1302,6 @@
     uint32_t event_id,
     ui::Id window_id,
     int64_t display_id,
-    ui::Id display_root_window_id,
-    const gfx::PointF& event_location_in_screen_pixel_layout,
     std::unique_ptr<ui::Event> event,
     bool matches_pointer_watcher) {
   DCHECK(event);
@@ -1672,8 +1310,13 @@
   if (matches_pointer_watcher && has_pointer_watcher_) {
     DCHECK(event->IsPointerEvent());
     std::unique_ptr<ui::Event> event_in_dip(ui::Event::Clone(*event));
-    ConvertPointerEventLocationToDip(display_id, window,
-                                     event_in_dip->AsLocatedEvent());
+    if (!window) {
+      // When there is no window force the root and location to be the same.
+      // They may differ if |window| was valid at the time of the event, but
+      // was since deleted.
+      event_in_dip->AsLocatedEvent()->set_location_f(
+          event_in_dip->AsLocatedEvent()->root_location_f());
+    }
     delegate_->OnPointerEventObserved(*event_in_dip->AsPointerEvent(),
                                       display_id,
                                       window ? window->GetWindow() : nullptr);
@@ -1708,66 +1351,15 @@
   // ui::TouchEvent once we have proper support for pointer events.
   std::unique_ptr<ui::Event> mapped_event = MapEvent(*event.get());
   ui::Event* event_to_dispatch = mapped_event.get();
-// Ash wants the native events in one place (see ExtendedMouseWarpController).
-// By using the constructor that takes a MouseEvent we ensure the MouseEvent
-// has a NativeEvent that can be used to extract the pixel coordinates.
-//
-// TODO: this should really be covered by |root_location|. See 608547 for
-// details.
-#if defined(USE_OZONE)
-  // TODO(sky): remove conditional. This code was only necessary when ash used
-  // this code. Now that ash does not use it, it can be removed once --mash is
-  // removed. https://crbug.com/842365.
-  std::unique_ptr<ui::MouseEvent> mapped_event_with_native;
-  if (config_ == Config::kMashDeprecated) {
-    if (mapped_event->type() == ui::ET_MOUSE_MOVED ||
-        mapped_event->type() == ui::ET_MOUSE_DRAGGED) {
-      mapped_event_with_native = std::make_unique<ui::MouseEvent>(
-          static_cast<const ui::PlatformEvent&>(mapped_event.get()));
-      // MouseEvent(NativeEvent) sets the root_location to location.
-      mapped_event_with_native->set_root_location_f(
-          event_location_in_screen_pixel_layout);
-      // |mapped_event| is now the NativeEvent. It's expected the location of
-      // the NativeEvent is the same as root_location.
-      mapped_event->AsMouseEvent()->set_location_f(
-          event_location_in_screen_pixel_layout);
-      event_to_dispatch = mapped_event_with_native.get();
-    }
-  }
-#endif
   // |ack_handler| may use |event_to_dispatch| from its destructor, so it needs
   // to be destroyed after |event_to_dispatch| is destroyed.
   EventAckHandler ack_handler(CreateEventResultCallback(event_id));
-#if defined(USE_OZONE)
-  ack_handler.SetPlatformEventSourceAndEvent(platform_event_source_.get(),
-                                             event_to_dispatch);
-#endif
 
-  WindowMus* display_root_window = GetWindowByServerId(display_root_window_id);
-  // TODO(sky): simplify conditional. See comment in USE_OZONE above for why
-  // this isn't necessary with kMus2. https://crbug.com/842365.
-  if (config_ == Config::kMashDeprecated && display_root_window &&
-      event->IsLocatedEvent() &&
-      display::Screen::GetScreen()->GetPrimaryDisplay().id() ==
-          display::kUnifiedDisplayId) {
-    // In Ash's unified desktop mode, each physical display mirrors part of a
-    // single virtual display. Dispatch events to the root window of the mirror
-    // display supplying the event, using locations relative to that display.
-    // Use a null target to ensure events reach the MusUnifiedEventTargeter.
-    // This paralells the behavior of unified desktop mode in classic Ash.
-    ui::Event::DispatcherApi(event_to_dispatch).set_target(nullptr);
-    ui::LocatedEvent* located_event = event_to_dispatch->AsLocatedEvent();
-    located_event->set_location_f(located_event->root_location_f());
-    window = display_root_window;
-  } else if (!event->IsKeyEvent()) {
+  if (!event->IsKeyEvent()) {
     // Set |window| as the target, except for key events. Key events go to the
     // focused window, which may have changed by the time we process the event.
     ui::Event::DispatcherApi(event_to_dispatch).set_target(window->GetWindow());
   }
-#if defined(USE_OZONE)
-  if (platform_event_source_)
-    platform_event_source_->OnWillProcessEvent(event_to_dispatch);
-#endif
 
   GetWindowTreeHostMus(window)->SendEventToSink(event_to_dispatch);
 
@@ -1783,8 +1375,13 @@
     return;
 
   WindowMus* target_window = GetWindowByServerId(window_id);
-  ConvertPointerEventLocationToDip(display_id, target_window,
-                                   event->AsLocatedEvent());
+  if (!target_window) {
+    // When there is no window force the root and location to be the same.
+    // They may differ if |window| was valid at the time of the event, but
+    // was since deleted.
+    event->AsLocatedEvent()->set_location_f(
+        event->AsLocatedEvent()->root_location_f());
+  }
   delegate_->OnPointerEventObserved(
       *event->AsPointerEvent(), display_id,
       target_window ? target_window->GetWindow() : nullptr);
@@ -1903,39 +1500,8 @@
   }
 }
 
-void WindowTreeClient::SetBlockingContainers(
-    const std::vector<BlockingContainers>& all_blocking_containers) {
-  std::vector<ui::mojom::BlockingContainersPtr>
-      transport_all_blocking_containers;
-  for (const BlockingContainers& blocking_containers :
-       all_blocking_containers) {
-    ui::mojom::BlockingContainersPtr transport_blocking_containers =
-        ui::mojom::BlockingContainers::New();
-    // The |system_modal_container| must be specified, |min_container| may be
-    // null.
-    DCHECK(blocking_containers.system_modal_container);
-    transport_blocking_containers->system_modal_container_id =
-        GetServerIdForWindow(blocking_containers.system_modal_container);
-    transport_blocking_containers->min_container_id =
-        GetServerIdForWindow(blocking_containers.min_container);
-    transport_all_blocking_containers.push_back(
-        std::move(transport_blocking_containers));
-  }
-  window_manager_client_->SetBlockingContainers(
-      std::move(transport_all_blocking_containers),
-      base::BindOnce(&OnAckMustSucceed, FROM_HERE));
-}
-
-void WindowTreeClient::GetWindowManager(
-    mojo::AssociatedInterfaceRequest<WindowManager> internal) {
-  window_manager_internal_.reset(
-      new mojo::AssociatedBinding<ui::mojom::WindowManager>(
-          this, std::move(internal)));
-}
-
 void WindowTreeClient::GetScreenProviderObserver(
     ui::mojom::ScreenProviderObserverAssociatedRequest observer) {
-  DCHECK_EQ(Config::kMus2, config_);
   screen_provider_observer_binding_.Bind(std::move(observer));
 }
 
@@ -1958,527 +1524,14 @@
   GetWindowTreeHostMus(window->GetWindow())->OnCloseRequest();
 }
 
-bool WindowTreeClient::WaitForInitialDisplays() {
-  if (got_initial_displays_)
-    return true;
-
-  bool valid_wait = true;
-  // TODO(sky): having to block here is not ideal. http://crbug.com/594852.
-  while (!got_initial_displays_ && valid_wait)
-    valid_wait = binding_.WaitForIncomingMethodCall();
-  return valid_wait;
-}
-
-WindowTreeHostMusInitParams WindowTreeClient::CreateInitParamsForNewDisplay() {
-  WindowTreeHostMusInitParams init_params;
-  init_params.window_port = std::make_unique<WindowPortMus>(
-      this, WindowMusType::DISPLAY_MANUALLY_CREATED);
-  roots_.insert(init_params.window_port.get());
-  init_params.window_tree_client = this;
-  return init_params;
-}
-
-void WindowTreeClient::OnConnect() {
-  got_initial_displays_ = true;
-  if (window_manager_delegate_)
-    window_manager_delegate_->OnWmConnected();
-}
-
-void WindowTreeClient::WmOnAcceleratedWidgetForDisplay(
-    int64_t display,
-    gpu::SurfaceHandle surface_handle) {
-  if (window_manager_delegate_) {
-    window_manager_delegate_->OnWmAcceleratedWidgetAvailableForDisplay(
-        display, surface_handle);
-  }
-}
-
-void WindowTreeClient::WmNewDisplayAdded(
-    const display::Display& display,
-    ui::mojom::WindowDataPtr root_data,
-    bool parent_drawn,
-    const base::Optional<viz::LocalSurfaceId>& local_surface_id) {
-  WmNewDisplayAddedImpl(display, std::move(root_data), parent_drawn,
-                        local_surface_id);
-}
-
-void WindowTreeClient::WmDisplayRemoved(int64_t display_id) {
-  DCHECK(window_manager_delegate_);
-  for (WindowMus* root : roots_) {
-    DCHECK(root->GetWindow()->GetHost());
-    WindowTreeHostMus* window_tree_host =
-        static_cast<WindowTreeHostMus*>(root->GetWindow()->GetHost());
-    if (window_tree_host->display_id() == display_id) {
-      window_manager_delegate_->OnWmDisplayRemoved(window_tree_host);
-      return;
-    }
-  }
-}
-
-void WindowTreeClient::WmDisplayModified(const display::Display& display) {
-  DCHECK(window_manager_delegate_);
-  // TODO(sky): this should likely route to WindowTreeHost.
-  window_manager_delegate_->OnWmDisplayModified(display);
-}
-
-void WindowTreeClient::WmSetBounds(uint32_t change_id,
-                                   ui::Id window_id,
-                                   const gfx::Rect& transit_bounds_in_pixels) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window) {
-    float device_scale_factor = window->GetDeviceScaleFactor();
-    DCHECK(window_manager_delegate_);
-    gfx::Rect transit_bounds_in_dip =
-        gfx::ConvertRectToDIP(device_scale_factor, transit_bounds_in_pixels);
-    window_manager_delegate_->OnWmSetBounds(window->GetWindow(),
-                                            transit_bounds_in_dip);
-  } else {
-    DVLOG(1) << "Unknown window passed to WmSetBounds().";
-  }
-  if (window_manager_client_)
-    window_manager_client_->WmSetBoundsResponse(change_id);
-}
-
-void WindowTreeClient::WmSetProperty(
-    uint32_t change_id,
-    ui::Id window_id,
-    const std::string& name,
-    const base::Optional<std::vector<uint8_t>>& transit_data) {
-  WindowMus* window = GetWindowByServerId(window_id);
-  bool result = false;
-  if (window) {
-    DCHECK(window_manager_delegate_);
-    std::unique_ptr<std::vector<uint8_t>> data;
-    if (transit_data.has_value())
-      data.reset(new std::vector<uint8_t>(transit_data.value()));
-
-    result = window_manager_delegate_->OnWmSetProperty(window->GetWindow(),
-                                                       name, &data);
-    if (result) {
-      delegate_->GetPropertyConverter()->SetPropertyFromTransportValue(
-          window->GetWindow(), name, data.get());
-    }
-  }
-  if (window_manager_client_)
-    window_manager_client_->WmResponse(change_id, result);
-}
-
-void WindowTreeClient::WmSetModalType(ui::Id window_id, ui::ModalType type) {
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window)
-    window_manager_delegate_->OnWmSetModalType(window->GetWindow(), type);
-}
-
-void WindowTreeClient::WmSetCanFocus(ui::Id window_id, bool can_focus) {
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window)
-    window_manager_delegate_->OnWmSetCanFocus(window->GetWindow(), can_focus);
-}
-
-void WindowTreeClient::WmCreateTopLevelWindow(
-    uint32_t change_id,
-    const viz::FrameSinkId& frame_sink_id,
-    const base::flat_map<std::string, std::vector<uint8_t>>&
-        transport_properties) {
-  DCHECK(frame_sink_id.is_valid());
-  std::map<std::string, std::vector<uint8_t>> properties =
-      mojo::FlatMapToMap(transport_properties);
-  ui::mojom::WindowType window_type = GetWindowTypeFromProperties(properties);
-  Window* window = window_manager_delegate_->OnWmCreateTopLevelWindow(
-      window_type, &properties);
-  if (!window) {
-    window_manager_client_->OnWmCreatedTopLevelWindow(change_id,
-                                                      kInvalidServerId);
-    return;
-  }
-  embedded_windows_[base::checked_cast<ui::ClientSpecificId>(
-                        frame_sink_id.client_id())]
-      .insert(window);
-  if (window_manager_client_) {
-    window_manager_client_->OnWmCreatedTopLevelWindow(
-        change_id, WindowMus::Get(window)->server_id());
-    OnFrameSinkIdAllocated(WindowMus::Get(window)->server_id(), frame_sink_id);
-  }
-}
-
-void WindowTreeClient::WmClientJankinessChanged(ui::ClientSpecificId client_id,
-                                                bool janky) {
-  if (window_manager_delegate_) {
-    auto it = embedded_windows_.find(client_id);
-    // TODO(sky): early return necessitated because of http://crbug.com/766890.
-    if (it == embedded_windows_.end())
-      return;
-    window_manager_delegate_->OnWmClientJankinessChanged(
-        embedded_windows_[client_id], janky);
-  }
-}
-
-void WindowTreeClient::WmBuildDragImage(const gfx::Point& screen_location,
-                                        const gfx::ImageSkia& drag_image,
-                                        const gfx::Vector2d& drag_image_offset,
-                                        ui::mojom::PointerKind source) {
-  if (!window_manager_delegate_)
-    return;
-
-  window_manager_delegate_->OnWmBuildDragImage(screen_location, drag_image,
-                                               drag_image_offset, source);
-}
-
-void WindowTreeClient::WmMoveDragImage(const gfx::Point& screen_location,
-                                       WmMoveDragImageCallback callback) {
-  if (window_manager_delegate_)
-    window_manager_delegate_->OnWmMoveDragImage(screen_location);
-  std::move(callback).Run();
-}
-
-void WindowTreeClient::WmDestroyDragImage() {
-  if (!window_manager_delegate_)
-    return;
-
-  window_manager_delegate_->OnWmDestroyDragImage();
-}
-
-void WindowTreeClient::WmPerformMoveLoop(uint32_t change_id,
-                                         ui::Id window_id,
-                                         ui::mojom::MoveLoopSource source,
-                                         const gfx::Point& cursor_location) {
-  if (!window_manager_delegate_ || current_wm_move_loop_change_ != 0) {
-    OnWmMoveLoopCompleted(change_id, false);
-    return;
-  }
-
-  current_wm_move_loop_change_ = change_id;
-  current_wm_move_loop_window_id_ = window_id;
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window) {
-    window_manager_delegate_->OnWmPerformMoveLoop(
-        window->GetWindow(), source, cursor_location,
-        base::Bind(&WindowTreeClient::OnWmMoveLoopCompleted,
-                   weak_factory_.GetWeakPtr(), change_id));
-  } else {
-    OnWmMoveLoopCompleted(change_id, false);
-  }
-}
-
-void WindowTreeClient::WmCancelMoveLoop(uint32_t change_id) {
-  if (!window_manager_delegate_ || change_id != current_wm_move_loop_change_)
-    return;
-
-  WindowMus* window = GetWindowByServerId(current_wm_move_loop_window_id_);
-  if (window)
-    window_manager_delegate_->OnWmCancelMoveLoop(window->GetWindow());
-}
-
-void WindowTreeClient::WmDeactivateWindow(ui::Id window_id) {
-  if (!window_manager_delegate_)
-    return;
-
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (!window) {
-    DVLOG(1) << "Attempt to deactivate invalid window " << window_id;
-    return;
-  }
-
-  if (!window_manager_delegate_->IsWindowActive(window->GetWindow())) {
-    DVLOG(1) << "Non-active window requested deactivation.";
-    return;
-  }
-
-  window_manager_delegate_->OnWmDeactivateWindow(window->GetWindow());
-}
-
-void WindowTreeClient::WmStackAbove(uint32_t wm_change_id,
-                                    ui::Id above_id,
-                                    ui::Id below_id) {
-  if (!window_manager_delegate_)
-    return;
-
-  WindowMus* below_mus = GetWindowByServerId(below_id);
-  if (!below_mus) {
-    DVLOG(1) << "Attempt to stack at top invalid window " << below_id;
-    if (window_manager_client_)
-      window_manager_client_->WmResponse(wm_change_id, false);
-    return;
-  }
-
-  WindowMus* above_mus = GetWindowByServerId(above_id);
-  if (!above_mus) {
-    DVLOG(1) << "Attempt to stack at top invalid window " << above_id;
-    if (window_manager_client_)
-      window_manager_client_->WmResponse(wm_change_id, false);
-    return;
-  }
-
-  Window* above = above_mus->GetWindow();
-  Window* below = below_mus->GetWindow();
-
-  if (above->parent() != below->parent()) {
-    DVLOG(1) << "Windows do not share the same parent";
-    if (window_manager_client_)
-      window_manager_client_->WmResponse(wm_change_id, false);
-    return;
-  }
-
-  above->parent()->StackChildAbove(above, below);
-
-  if (window_manager_client_)
-    window_manager_client_->WmResponse(wm_change_id, true);
-}
-
-void WindowTreeClient::WmStackAtTop(uint32_t wm_change_id, ui::Id window_id) {
-  if (!window_manager_delegate_)
-    return;
-
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (!window) {
-    DVLOG(1) << "Attempt to stack at top invalid window " << window_id;
-    if (window_manager_client_)
-      window_manager_client_->WmResponse(wm_change_id, false);
-    return;
-  }
-
-  Window* parent = window->GetWindow()->parent();
-  parent->StackChildAtTop(window->GetWindow());
-
-  if (window_manager_client_)
-    window_manager_client_->WmResponse(wm_change_id, true);
-}
-
-void WindowTreeClient::WmPerformWmAction(ui::Id window_id,
-                                         const std::string& action) {
-  if (!window_manager_delegate_)
-    return;
-
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window)
-    window_manager_delegate_->OnWmPerformAction(window->GetWindow(), action);
-}
-
-void WindowTreeClient::OnAccelerator(uint32_t ack_id,
-                                     uint32_t accelerator_id,
-                                     std::unique_ptr<ui::Event> event) {
-  DCHECK(event);
-  base::flat_map<std::string, std::vector<uint8_t>> properties;
-  const ui::mojom::EventResult result = window_manager_delegate_->OnAccelerator(
-      accelerator_id, *event.get(), &properties);
-  if (ack_id && window_manager_client_)
-    window_manager_client_->OnAcceleratorAck(ack_id, result, properties);
-}
-
-void WindowTreeClient::OnCursorTouchVisibleChanged(bool enabled) {
-  if (window_manager_client_)
-    window_manager_delegate_->OnCursorTouchVisibleChanged(enabled);
-}
-
-void WindowTreeClient::OnEventBlockedByModalWindow(ui::Id window_id) {
-  if (!window_manager_delegate_)
-    return;
-
-  WindowMus* window = GetWindowByServerId(window_id);
-  if (window)
-    window_manager_delegate_->OnEventBlockedByModalWindow(window->GetWindow());
-}
-
-void WindowTreeClient::SetFrameDecorationValues(
-    ui::mojom::FrameDecorationValuesPtr values) {
-  if (window_manager_client_) {
-    normal_client_area_insets_ = values->normal_client_area_insets;
-    window_manager_client_->WmSetFrameDecorationValues(std::move(values));
-  }
-}
-
-void WindowTreeClient::SetNonClientCursor(Window* window,
-                                          const ui::CursorData& cursor) {
-  if (window_manager_client_) {
-    window_manager_client_->WmSetNonClientCursor(
-        WindowMus::Get(window)->server_id(), cursor);
-  }
-}
-
-void WindowTreeClient::AddAccelerators(
-    std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-    const base::Callback<void(bool)>& callback) {
-  if (window_manager_client_) {
-    window_manager_client_->AddAccelerators(std::move(accelerators), callback);
-  }
-}
-
-void WindowTreeClient::RemoveAccelerator(uint32_t id) {
-  if (window_manager_client_) {
-    window_manager_client_->RemoveAccelerator(id);
-  }
-}
-
-void WindowTreeClient::AddActivationParent(Window* window) {
-  if (window_manager_client_) {
-    window_manager_client_->AddActivationParent(
-        WindowMus::Get(window)->server_id());
-  }
-}
-
-void WindowTreeClient::RemoveActivationParent(Window* window) {
-  if (window_manager_client_) {
-    window_manager_client_->RemoveActivationParent(
-        WindowMus::Get(window)->server_id());
-  }
-}
-
-void WindowTreeClient::SetExtendedHitRegionForChildren(
-    Window* window,
-    const gfx::Insets& mouse_insets,
-    const gfx::Insets& touch_insets) {
-  if (!window_manager_client_)
-    return;
-
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  WindowMus* window_mus = WindowMus::Get(window);
-  const float device_scale_factor = window_mus->GetDeviceScaleFactor();
-  window_manager_client_->SetExtendedHitRegionForChildren(
-      window_mus->server_id(),
-      gfx::ConvertInsetsToPixel(device_scale_factor, mouse_insets),
-      gfx::ConvertInsetsToPixel(device_scale_factor, touch_insets));
-}
-
-void WindowTreeClient::LockCursor() {
-  if (window_manager_client_)
-    window_manager_client_->WmLockCursor();
-}
-
-void WindowTreeClient::UnlockCursor() {
-  if (window_manager_client_)
-    window_manager_client_->WmUnlockCursor();
-}
-
-void WindowTreeClient::SetCursorVisible(bool visible) {
-  if (window_manager_client_)
-    window_manager_client_->WmSetCursorVisible(visible);
-}
-
-void WindowTreeClient::SetCursorSize(ui::CursorSize cursor_size) {
-  if (window_manager_client_)
-    window_manager_client_->WmSetCursorSize(cursor_size);
-}
-
-void WindowTreeClient::SetGlobalOverrideCursor(
-    base::Optional<ui::CursorData> cursor) {
-  if (window_manager_client_)
-    window_manager_client_->WmSetGlobalOverrideCursor(std::move(cursor));
-}
-
-void WindowTreeClient::SetCursorTouchVisible(bool enabled) {
-  if (window_manager_client_)
-    window_manager_client_->WmSetCursorTouchVisible(enabled);
-}
-
-void WindowTreeClient::InjectEvent(const ui::Event& event, int64_t display_id) {
-  if (!event_injector_)
-    connector()->BindInterface(ui::mojom::kServiceName, &event_injector_);
-  // Check event_injector_ so we don't crash if access to the interface was
-  // refused.
-  if (event_injector_) {
-    event_injector_->InjectEvent(display_id, ui::Event::Clone(event),
-                                 base::DoNothing());
-  }
-}
-
-void WindowTreeClient::SetKeyEventsThatDontHideCursor(
-    std::vector<ui::mojom::EventMatcherPtr> cursor_key_list) {
-  if (window_manager_client_) {
-    window_manager_client_->SetKeyEventsThatDontHideCursor(
-        std::move(cursor_key_list));
-  }
-}
-
-void WindowTreeClient::RequestClose(Window* window) {
-  DCHECK(window);
-  if (window_manager_client_)
-    window_manager_client_->WmRequestClose(WindowMus::Get(window)->server_id());
-}
-
-void WindowTreeClient::SetDisplayConfiguration(
-    const std::vector<display::Display>& displays,
-    std::vector<ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-    int64_t primary_display_id,
-    const std::vector<display::Display>& mirrors) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  DCHECK_EQ(displays.size() + mirrors.size(), viewport_metrics.size());
-  if (window_manager_client_) {
-    const int64_t internal_display_id =
-        display::Display::HasInternalDisplay()
-            ? display::Display::InternalDisplayId()
-            : display::kInvalidDisplayId;
-    window_manager_client_->SetDisplayConfiguration(
-        displays, std::move(viewport_metrics), primary_display_id,
-        internal_display_id, mirrors,
-        base::BindOnce(&OnAckMustSucceed, FROM_HERE));
-  }
-}
-
-void WindowTreeClient::AddDisplayReusingWindowTreeHost(
-    WindowTreeHostMus* window_tree_host,
-    const display::Display& display,
-    ui::mojom::WmViewportMetricsPtr viewport_metrics) {
-  // TODO(sky): this function should be removed when --mash goes away.
-  // https://crbug.com/842365.
-  DCHECK_NE(display.id(), window_tree_host->display_id());
-  window_tree_host->set_display_id(display.id());
-  if (window_manager_client_) {
-    // NOTE: The values of |is_primary_display| and |mirrors| do not matter,
-    // because SetDisplayConfiguration() is called shortly after this completes.
-    const bool is_primary_display = true;
-    std::vector<display::Display> mirrors;
-    WindowMus* display_root_window = WindowMus::Get(window_tree_host->window());
-    window_manager_client_->SetDisplayRoot(
-        display, std::move(viewport_metrics), is_primary_display,
-        display_root_window->server_id(), mirrors,
-        base::BindOnce(&OnAckMustSucceed, FROM_HERE));
-    window_tree_host->compositor()->SetLocalSurfaceId(
-        display_root_window->GetOrAllocateLocalSurfaceId(
-            window_tree_host->GetBoundsInPixels().size()));
-  }
-}
-
-void WindowTreeClient::SwapDisplayRoots(WindowTreeHostMus* window_tree_host1,
-                                        WindowTreeHostMus* window_tree_host2) {
-  DCHECK_NE(window_tree_host1, window_tree_host2);
-  const int64_t display_id1 = window_tree_host1->display_id();
-  const int64_t display_id2 = window_tree_host2->display_id();
-  DCHECK_NE(display_id1, display_id2);
-  window_tree_host1->set_display_id(display_id2);
-  window_tree_host2->set_display_id(display_id1);
-
-  // Swap the accelerated widgets so each host paints to the correct display.
-  gfx::AcceleratedWidget widget1 = window_tree_host1->GetAcceleratedWidget();
-  gfx::AcceleratedWidget widget2 = window_tree_host2->GetAcceleratedWidget();
-  window_tree_host1->OverrideAcceleratedWidget(widget2);
-  window_tree_host2->OverrideAcceleratedWidget(widget1);
-
-  if (window_manager_client_) {
-    window_manager_client_->SwapDisplayRoots(
-        display_id1, display_id2, base::BindOnce(&OnAckMustSucceed, FROM_HERE));
-  }
-}
-
 void WindowTreeClient::OnWindowTreeHostBoundsWillChange(
     WindowTreeHostMus* window_tree_host,
     const gfx::Rect& bounds_in_pixels) {
   gfx::Rect old_bounds = window_tree_host->GetBoundsInPixels();
   gfx::Rect new_bounds = bounds_in_pixels;
-  if (!is_using_pixels()) {
-    const float device_scale_factor = window_tree_host->device_scale_factor();
-    old_bounds = gfx::ConvertRectToDIP(device_scale_factor, old_bounds);
-    new_bounds = gfx::ConvertRectToDIP(device_scale_factor, new_bounds);
-  }
-  if (window_manager_delegate_) {
-    // The window manager origins should always be 0x0. The real origin is
-    // communicated by way of SetDisplayConfiguration().
-    old_bounds.set_origin(gfx::Point());
-    new_bounds.set_origin(gfx::Point());
-  }
+  const float device_scale_factor = window_tree_host->device_scale_factor();
+  old_bounds = gfx::ConvertRectToDIP(device_scale_factor, old_bounds);
+  new_bounds = gfx::ConvertRectToDIP(device_scale_factor, new_bounds);
   ScheduleInFlightBoundsChange(WindowMus::Get(window_tree_host->window()),
                                old_bounds, new_bounds);
 }
@@ -2489,21 +1542,8 @@
     const std::vector<gfx::Rect>& additional_client_areas) {
   DCHECK(tree_);
   WindowMus* window = WindowMus::Get(window_tree_host->window());
-  if (is_using_pixels()) {
-    const float device_scale_factor = window->GetDeviceScaleFactor();
-    std::vector<gfx::Rect> additional_client_areas_in_pixels;
-    for (const gfx::Rect& area : additional_client_areas) {
-      additional_client_areas_in_pixels.push_back(
-          gfx::ConvertRectToPixel(device_scale_factor, area));
-    }
-    tree_->SetClientArea(
-        window->server_id(),
-        gfx::ConvertInsetsToPixel(device_scale_factor, client_area),
-        additional_client_areas_in_pixels);
-  } else {
-    tree_->SetClientArea(window->server_id(), client_area,
-                         additional_client_areas);
-  }
+  tree_->SetClientArea(window->server_id(), client_area,
+                       additional_client_areas);
 }
 
 void WindowTreeClient::OnWindowTreeHostSetOpacity(
@@ -2568,26 +1608,6 @@
       WindowMus::Get(window_tree_host->window())->server_id());
 }
 
-void WindowTreeClient::OnWindowTreeHostMoveCursorToDisplayLocation(
-    const gfx::Point& location_in_pixels,
-    int64_t display_id) {
-  DCHECK(window_manager_client_);
-  if (window_manager_client_) {
-    window_manager_client_->WmMoveCursorToDisplayLocation(location_in_pixels,
-                                                          display_id);
-  }
-}
-
-void WindowTreeClient::OnWindowTreeHostConfineCursorToBounds(
-    const gfx::Rect& bounds_in_pixels,
-    int64_t display_id) {
-  DCHECK(window_manager_client_);
-  if (window_manager_client_) {
-    window_manager_client_->WmConfineCursorToBounds(bounds_in_pixels,
-                                                    display_id);
-  }
-}
-
 std::unique_ptr<WindowPortMus> WindowTreeClient::CreateWindowPortForTopLevel(
     const std::map<std::string, std::vector<uint8_t>>* properties) {
   std::unique_ptr<WindowPortMus> window_port =
diff --git a/ui/aura/mus/window_tree_client.h b/ui/aura/mus/window_tree_client.h
index e59d4133..36f220c 100644
--- a/ui/aura/mus/window_tree_client.h
+++ b/ui/aura/mus/window_tree_client.h
@@ -21,10 +21,8 @@
 #include "base/observer_list.h"
 #include "base/optional.h"
 #include "base/single_thread_task_runner.h"
-#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
-#include "mojo/public/cpp/bindings/strong_binding.h"
-#include "services/ui/public/interfaces/event_injector.mojom.h"
+#include "mojo/public/cpp/bindings/binding.h"
 #include "services/ui/public/interfaces/screen_provider.mojom.h"
 #include "services/ui/public/interfaces/window_tree.mojom.h"
 #include "ui/aura/aura_export.h"
@@ -33,7 +31,6 @@
 #include "ui/aura/mus/drag_drop_controller_host.h"
 #include "ui/aura/mus/focus_synchronizer_delegate.h"
 #include "ui/aura/mus/mus_types.h"
-#include "ui/aura/mus/window_manager_delegate.h"
 #include "ui/aura/mus/window_tree_host_mus_delegate.h"
 #include "ui/base/ui_base_types.h"
 
@@ -45,14 +42,6 @@
 class ClientDiscardableSharedMemoryManager;
 }
 
-namespace display {
-class Display;
-}
-
-namespace gfx {
-class Insets;
-}
-
 namespace service_manager {
 class Connector;
 }
@@ -74,7 +63,6 @@
 class InFlightFocusChange;
 class InFlightPropertyChange;
 class InFlightVisibleChange;
-class PlatformEventSourceMus;
 class MusContextFactory;
 class WindowMus;
 class WindowPortMus;
@@ -98,43 +86,19 @@
 // notified).
 class AURA_EXPORT WindowTreeClient
     : public ui::mojom::WindowTreeClient,
-      public ui::mojom::WindowManager,
       public ui::mojom::ScreenProviderObserver,
       public CaptureSynchronizerDelegate,
       public FocusSynchronizerDelegate,
       public DragDropControllerHost,
-      public WindowManagerClient,
       public WindowTreeHostMusDelegate,
       public client::TransientWindowClientObserver {
  public:
-  // TODO(sky): remove Config. https://crbug.com/842365.
-  enum class Config {
-    kMashDeprecated,
-
-    // kMus2 targets ws2. services/ui/Service and services/ui/ws2/WindowService
-    // provide an implementation of the same mojom interfaces, but differ in a
-    // few key areas (such as whether pixels vs dips are used). The Config
-    // parameter controls which server is being used.
-    kMus2,
-  };
-
-  // Creates a WindowTreeClient to act as the window manager. See mojom for
-  // details on |automatically_create_display_roots|.
-  // TODO(sky): move |create_discardable_memory| out of this class.
-  static std::unique_ptr<WindowTreeClient> CreateForWindowManager(
-      service_manager::Connector* connector,
-      WindowTreeClientDelegate* delegate,
-      WindowManagerDelegate* window_manager_delegate,
-      bool automatically_create_display_roots = true,
-      bool create_discardable_memory = true);
-
   // Creates a WindowTreeClient for use in embedding.
   static std::unique_ptr<WindowTreeClient> CreateForEmbedding(
       service_manager::Connector* connector,
       WindowTreeClientDelegate* delegate,
       ui::mojom::WindowTreeClientRequest request,
-      bool create_discardable_memory = true,
-      Config config = Config::kMashDeprecated);
+      bool create_discardable_memory = true);
 
   // Creates a WindowTreeClient useful for creating top-level windows.
   static std::unique_ptr<WindowTreeClient> CreateForWindowTreeFactory(
@@ -152,12 +116,6 @@
 
   ~WindowTreeClient() override;
 
-  // Returns true if the server coordinate system is in pixels. If false, the
-  // coordinate system is DIPs.
-  bool is_using_pixels() const { return config_ != Config::kMus2; }
-
-  Config config() const { return config_; }
-
   service_manager::Connector* connector() { return connector_; }
   CaptureSynchronizer* capture_synchronizer() {
     return capture_synchronizer_.get();
@@ -261,14 +219,9 @@
   WindowTreeClient(
       service_manager::Connector* connector,
       WindowTreeClientDelegate* delegate,
-      WindowManagerDelegate* window_manager_delegate = nullptr,
       ui::mojom::WindowTreeClientRequest request = nullptr,
       scoped_refptr<base::SingleThreadTaskRunner> io_task_runner = nullptr,
-      bool create_discardable_memory = true,
-      Config config = Config::kMashDeprecated);
-
-  // Creates a PlatformEventSourceMus if not created yet.
-  void CreatePlatformEventSourceIfNecessary();
+      bool create_discardable_memory = true);
 
   void RegisterWindowMus(WindowMus* window);
 
@@ -276,22 +229,6 @@
 
   bool IsWindowKnown(aura::Window* window);
 
-  // Updates the coordinates of |event| to be in DIPs. |window| is the source
-  // of the event, and may be null. A null |window| means either there is no
-  // local window the event is targeted at *or* |window| was valid at the time
-  // the event was generated at the server but was deleted locally before the
-  // event was received.
-  void ConvertPointerEventLocationToDip(int64_t display_id,
-                                        WindowMus* window,
-                                        ui::LocatedEvent* event) const;
-
-  // Variant of ConvertPointerEventLocationToDip() that is used when in
-  // the window-manager.
-  void ConvertPointerEventLocationToDipInWindowManager(
-      int64_t display_id,
-      WindowMus* window,
-      ui::LocatedEvent* event) const;
-
   // Returns the oldest InFlightChange that matches |change|.
   InFlightChange* GetOldestInFlightChangeMatching(const InFlightChange& change);
 
@@ -321,9 +258,6 @@
       WindowMus* window,
       const ui::mojom::WindowData& window_data);
 
-  const WindowTreeHostMus* GetWindowTreeHostForDisplayId(
-      int64_t display_id) const;
-
   // Creates a new WindowTreeHostMus.
   std::unique_ptr<WindowTreeHostMus> CreateWindowTreeHost(
       WindowMusType window_mus_type,
@@ -364,13 +298,6 @@
   // Called from EmbedRoot's destructor.
   void OnEmbedRootDestroyed(EmbedRoot* embed_root);
 
-  // Called by WmNewDisplayAdded().
-  WindowTreeHostMus* WmNewDisplayAddedImpl(
-      const display::Display& display,
-      ui::mojom::WindowDataPtr root_data,
-      bool parent_drawn,
-      const base::Optional<viz::LocalSurfaceId>& local_surface_id);
-
   EventResultCallback CreateEventResultCallback(int32_t event_id);
 
   void OnReceivedCursorLocationMemory(mojo::ScopedSharedBufferHandle handle);
@@ -412,12 +339,6 @@
                                   const void* key,
                                   int64_t old_value,
                                   std::unique_ptr<ui::PropertyData> data);
-  void OnWindowMusDeviceScaleFactorChanged(WindowMus* window,
-                                           float old_scale_factor,
-                                           float new_scale_factor);
-
-  // Callback passed from WmPerformMoveLoop().
-  void OnWmMoveLoopCompleted(uint32_t change_id, bool completed);
 
   // Overridden from WindowTreeClient:
   void OnEmbed(
@@ -452,10 +373,6 @@
   void OnWindowTransformChanged(ui::Id window_id,
                                 const gfx::Transform& old_transform,
                                 const gfx::Transform& new_transform) override;
-  void OnClientAreaChanged(
-      ui::Id window_id,
-      const gfx::Insets& new_client_area,
-      const std::vector<gfx::Rect>& new_additional_client_areas) override;
   void OnTransientWindowAdded(ui::Id window_id,
                               ui::Id transient_window_id) override;
   void OnTransientWindowRemoved(ui::Id window_id,
@@ -482,8 +399,6 @@
       uint32_t event_id,
       ui::Id window_id,
       int64_t display_id,
-      ui::Id display_root_window_id,
-      const gfx::PointF& event_location_in_screen_pixel_layout,
       std::unique_ptr<ui::Event> event,
       bool matches_pointer_watcher) override;
   void OnPointerEventObserved(std::unique_ptr<ui::Event> event,
@@ -517,10 +432,6 @@
   void OnDragDropDone() override;
   void OnChangeCompleted(uint32_t change_id, bool success) override;
   void RequestClose(ui::Id window_id) override;
-  void SetBlockingContainers(
-      const std::vector<BlockingContainers>& all_blocking_containers) override;
-  void GetWindowManager(
-      mojo::AssociatedInterfaceRequest<WindowManager> internal) override;
   void GetScreenProviderObserver(
       ui::mojom::ScreenProviderObserverAssociatedRequest observer) override;
 
@@ -529,97 +440,6 @@
                          int64_t primary_display_id,
                          int64_t internal_display_id) override;
 
-  // Overridden from WindowManager:
-  void OnConnect() override;
-  void WmOnAcceleratedWidgetForDisplay(
-      int64_t display,
-      gpu::SurfaceHandle surface_handle) override;
-  void WmNewDisplayAdded(
-      const display::Display& display,
-      ui::mojom::WindowDataPtr root_data,
-      bool parent_drawn,
-      const base::Optional<viz::LocalSurfaceId>& local_surface_id) override;
-  void WmDisplayRemoved(int64_t display_id) override;
-  void WmDisplayModified(const display::Display& display) override;
-  void WmSetBounds(uint32_t change_id,
-                   ui::Id window_id,
-                   const gfx::Rect& transit_bounds_in_pixels) override;
-  void WmSetProperty(
-      uint32_t change_id,
-      ui::Id window_id,
-      const std::string& name,
-      const base::Optional<std::vector<uint8_t>>& transit_data) override;
-  void WmSetModalType(ui::Id window_id, ui::ModalType type) override;
-  void WmSetCanFocus(ui::Id window_id, bool can_focus) override;
-  void WmCreateTopLevelWindow(
-      uint32_t change_id,
-      const viz::FrameSinkId& frame_sink_id,
-      const base::flat_map<std::string, std::vector<uint8_t>>&
-          transport_properties) override;
-  void WmClientJankinessChanged(ui::ClientSpecificId client_id,
-                                bool janky) override;
-  void WmBuildDragImage(const gfx::Point& screen_location,
-                        const gfx::ImageSkia& drag_image,
-                        const gfx::Vector2d& drag_image_offset,
-                        ui::mojom::PointerKind source) override;
-  void WmMoveDragImage(const gfx::Point& screen_location,
-                       WmMoveDragImageCallback callback) override;
-  void WmDestroyDragImage() override;
-  void WmPerformMoveLoop(uint32_t change_id,
-                         ui::Id window_id,
-                         ui::mojom::MoveLoopSource source,
-                         const gfx::Point& cursor_location) override;
-  void WmCancelMoveLoop(uint32_t change_id) override;
-  void WmDeactivateWindow(ui::Id window_id) override;
-  void WmStackAbove(uint32_t change_id,
-                    ui::Id above_id,
-                    ui::Id below_id) override;
-  void WmStackAtTop(uint32_t change_id, ui::Id window_id) override;
-  void WmPerformWmAction(ui::Id window_id, const std::string& action) override;
-  void OnAccelerator(uint32_t ack_id,
-                     uint32_t accelerator_id,
-                     std::unique_ptr<ui::Event> event) override;
-  void OnCursorTouchVisibleChanged(bool enabled) override;
-  void OnEventBlockedByModalWindow(ui::Id window_id) override;
-
-  // Overridden from WindowManagerClient:
-  void SetFrameDecorationValues(
-      ui::mojom::FrameDecorationValuesPtr values) override;
-  void SetNonClientCursor(Window* window,
-                          const ui::CursorData& cursor) override;
-  void AddAccelerators(std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-                       const base::Callback<void(bool)>& callback) override;
-  void RemoveAccelerator(uint32_t id) override;
-  void AddActivationParent(Window* window) override;
-  void RemoveActivationParent(Window* window) override;
-  void SetExtendedHitRegionForChildren(
-      Window* window,
-      const gfx::Insets& mouse_insets,
-      const gfx::Insets& touch_insets) override;
-  void LockCursor() override;
-  void UnlockCursor() override;
-  void SetCursorVisible(bool visible) override;
-  void SetCursorSize(ui::CursorSize cursor_size) override;
-  void SetGlobalOverrideCursor(base::Optional<ui::CursorData> cursor) override;
-  void SetCursorTouchVisible(bool enabled) override;
-  void InjectEvent(const ui::Event& event, int64_t display_id) override;
-  void SetKeyEventsThatDontHideCursor(
-      std::vector<ui::mojom::EventMatcherPtr> cursor_key_list) override;
-  void RequestClose(Window* window) override;
-  bool WaitForInitialDisplays() override;
-  WindowTreeHostMusInitParams CreateInitParamsForNewDisplay() override;
-  void SetDisplayConfiguration(
-      const std::vector<display::Display>& displays,
-      std::vector<ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-      int64_t primary_display_id,
-      const std::vector<display::Display>& mirrors) override;
-  void AddDisplayReusingWindowTreeHost(
-      WindowTreeHostMus* window_tree_host,
-      const display::Display& display,
-      ui::mojom::WmViewportMetricsPtr viewport_metrics) override;
-  void SwapDisplayRoots(WindowTreeHostMus* window_tree_host1,
-                        WindowTreeHostMus* window_tree_host2) override;
-
   // Overriden from WindowTreeHostMusDelegate:
   void OnWindowTreeHostBoundsWillChange(
       WindowTreeHostMus* window_tree_host,
@@ -644,11 +464,6 @@
       const base::Callback<void(bool)>& callback) override;
   void OnWindowTreeHostCancelWindowMove(
       WindowTreeHostMus* window_tree_host) override;
-  void OnWindowTreeHostMoveCursorToDisplayLocation(
-      const gfx::Point& location_in_pixels,
-      int64_t display_id) override;
-  void OnWindowTreeHostConfineCursorToBounds(const gfx::Rect& bounds_in_pixels,
-                                             int64_t display_id) override;
   std::unique_ptr<WindowPortMus> CreateWindowPortForTopLevel(
       const std::map<std::string, std::vector<uint8_t>>* properties) override;
   void OnWindowTreeHostCreated(WindowTreeHostMus* window_tree_host) override;
@@ -675,8 +490,6 @@
         cursor_location_mapping_.get());
   }
 
-  const Config config_;
-
   // This may be null in tests.
   service_manager::Connector* connector_;
 
@@ -689,14 +502,11 @@
 
   WindowTreeClientDelegate* delegate_;
 
-  WindowManagerDelegate* window_manager_delegate_;
-
   std::set<WindowMus*> roots_;
 
   base::flat_set<EmbedRoot*> embed_roots_;
 
   IdToWindowMap windows_;
-  std::map<ui::ClientSpecificId, std::set<Window*>> embedded_windows_;
 
   std::unique_ptr<CaptureSynchronizer> capture_synchronizer_;
 
@@ -719,17 +529,6 @@
 
   base::ObserverList<WindowTreeClientObserver> observers_;
 
-  std::unique_ptr<mojo::AssociatedBinding<ui::mojom::WindowManager>>
-      window_manager_internal_;
-  ui::mojom::WindowManagerClientAssociatedPtr window_manager_internal_client_;
-  // Normally the same as |window_manager_internal_client_|. Tests typically
-  // run without a service_manager::Connector, which means this (and
-  // |window_manager_internal_client_|) are null. Tests that need to test
-  // WindowManagerClient set this, but not |window_manager_internal_client_|.
-  ui::mojom::WindowManagerClient* window_manager_client_ = nullptr;
-
-  ui::mojom::EventInjectorPtr event_injector_;
-
   bool has_pointer_watcher_ = false;
 
   // The current change id for the client.
@@ -739,10 +538,6 @@
   // completed.
   base::Callback<void(bool)> on_current_move_finished_;
 
-  // The current change id for the window manager.
-  uint32_t current_wm_move_loop_change_ = 0u;
-  ui::Id current_wm_move_loop_window_id_ = 0u;
-
   std::unique_ptr<DragDropControllerMus> drag_drop_controller_;
 
   base::ObserverList<WindowTreeClientTestObserver> test_observers_;
@@ -763,14 +558,8 @@
   // Set to true once OnWmDisplayAdded() is called.
   bool got_initial_displays_ = false;
 
-  gfx::Insets normal_client_area_insets_;
-
   bool in_shutdown_ = false;
 
-#if defined(USE_OZONE)
-  std::unique_ptr<PlatformEventSourceMus> platform_event_source_;
-#endif
-
   mojo::AssociatedBinding<ui::mojom::ScreenProviderObserver>
       screen_provider_observer_binding_{this};
 
diff --git a/ui/aura/mus/window_tree_client_unittest.cc b/ui/aura/mus/window_tree_client_unittest.cc
index 010e8a5a..5cf50e320 100644
--- a/ui/aura/mus/window_tree_client_unittest.cc
+++ b/ui/aura/mus/window_tree_client_unittest.cc
@@ -119,34 +119,31 @@
   return mojo::ConvertTo<std::vector<uint8_t>>(value);
 }
 
-WindowTreeHostMusInitParams CreateWindowTreeHostMusInitParams(
-    WindowTreeClient* window_tree_client,
-    const gfx::Rect& bounds,
-    int64_t display_id) {
-  std::unique_ptr<DisplayInitParams> display_params =
-      std::make_unique<DisplayInitParams>();
-  display_params->display = std::make_unique<display::Display>(display_id);
-  display_params->display->set_bounds(bounds);
-  display_params->viewport_metrics.bounds_in_pixels = bounds;
-  display_params->viewport_metrics.device_scale_factor = 1.0f;
-  display_params->viewport_metrics.ui_scale_factor = 1.0f;
-  WindowTreeHostMusInitParams init_params =
-      WindowTreeClientPrivate(window_tree_client)
-          .CallCreateInitParamsForNewDisplay();
-  init_params.use_classic_ime = true;
-  init_params.display_id = display_params->display->id();
-  init_params.display_init_params = std::move(display_params);
-  return init_params;
-}
-
 }  // namespace
 
-using WindowTreeClientWmTest = test::AuraMusWmTestBase;
-
-class WindowTreeClientClientTest : public test::AuraMusClientTestBase {
+// Trivial subclass of AuraTestBase that configures MUS *and* makes the test
+// create a WindowTreeHostMus.
+// TODO(sky): this is only necessary because AuraMusClientTestBase does not
+// create a default WindowTreeHost. Update AuraMusClientTestBase to create a
+// default WindowTreeHost and remove this. https://crbug.com/866634
+class WindowTreeClientWithHostTest : public test::AuraTestBase {
  public:
-  WindowTreeClientClientTest() = default;
-  ~WindowTreeClientClientTest() override = default;
+  WindowTreeClientWithHostTest() = default;
+  ~WindowTreeClientWithHostTest() override = default;
+
+  void SetUp() override {
+    ConfigureEnvMode(Env::Mode::MUS);
+    AuraTestBase::SetUp();
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWithHostTest);
+};
+
+class WindowTreeClientTest : public test::AuraMusClientTestBase {
+ public:
+  WindowTreeClientTest() = default;
+  ~WindowTreeClientTest() override = default;
 
   struct TopLevel {
     std::unique_ptr<client::DefaultCaptureClient> capture_client;
@@ -185,61 +182,45 @@
  private:
   int64_t next_display_id_ = 1;
 
-  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientClientTest);
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientTest);
 };
 
-class WindowTreeClientWmTestSurfaceSync
-    : public WindowTreeClientWmTest,
+class WindowTreeClientTestSurfaceSync
+    : public WindowTreeClientWithHostTest,
       public ::testing::WithParamInterface<bool> {
  public:
-  WindowTreeClientWmTestSurfaceSync() {}
-  ~WindowTreeClientWmTestSurfaceSync() override {}
+  WindowTreeClientTestSurfaceSync() {}
+  ~WindowTreeClientTestSurfaceSync() override {}
 
-  // WindowTreeClientWmTest:
+  // WindowTreeClientTest:
   void SetUp() override {
     if (GetParam()) {
       base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
           switches::kForceDeviceScaleFactor, "2");
     }
-    WindowTreeClientWmTest::SetUp();
+    WindowTreeClientWithHostTest::SetUp();
   }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWmTestSurfaceSync);
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientTestSurfaceSync);
 };
 
-// WindowTreeClientWmTest with --force-device-scale-factor=2.
-class WindowTreeClientWmTestHighDPI : public WindowTreeClientWmTest {
+// WindowTreeClientWithHostTest with --force-device-scale-factor=2.
+class WindowTreeClientWithHostTestHighDPI
+    : public WindowTreeClientWithHostTest {
  public:
-  WindowTreeClientWmTestHighDPI() {}
-  ~WindowTreeClientWmTestHighDPI() override {}
-
-  // WindowTreeClientWmTest:
-  void SetUp() override {
-    base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
-        switches::kForceDeviceScaleFactor, "2");
-    WindowTreeClientWmTest::SetUp();
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWmTestHighDPI);
-};
-
-// WindowTreeClientClientTest with --force-device-scale-factor=2.
-class WindowTreeClientClientTestHighDPI : public WindowTreeClientClientTest {
- public:
-  WindowTreeClientClientTestHighDPI() {}
-  ~WindowTreeClientClientTestHighDPI() override {}
+  WindowTreeClientWithHostTestHighDPI() {}
+  ~WindowTreeClientWithHostTestHighDPI() override {}
 
   const ui::PointerEvent* last_event_observed() const {
     return last_event_observed_.get();
   }
 
-  // WindowTreeClientClientTest:
+  // WindowTreeClientTest:
   void SetUp() override {
     base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
         switches::kForceDeviceScaleFactor, "2");
-    WindowTreeClientClientTest::SetUp();
+    WindowTreeClientWithHostTest::SetUp();
   }
   void OnPointerEventObserved(const ui::PointerEvent& event,
                               int64_t display_id,
@@ -249,11 +230,40 @@
 
  private:
   std::unique_ptr<ui::PointerEvent> last_event_observed_;
-  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientClientTestHighDPI);
+
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientWithHostTestHighDPI);
+};
+
+// WindowTreeClientTest with --force-device-scale-factor=2.
+class WindowTreeClientTestHighDPI : public WindowTreeClientTest {
+ public:
+  WindowTreeClientTestHighDPI() {}
+  ~WindowTreeClientTestHighDPI() override {}
+
+  const ui::PointerEvent* last_event_observed() const {
+    return last_event_observed_.get();
+  }
+
+  // WindowTreeClientTest:
+  void SetUp() override {
+    base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
+        switches::kForceDeviceScaleFactor, "2");
+    WindowTreeClientTest::SetUp();
+  }
+  void OnPointerEventObserved(const ui::PointerEvent& event,
+                              int64_t display_id,
+                              Window* target) override {
+    last_event_observed_.reset(new ui::PointerEvent(event));
+  }
+
+ private:
+  std::unique_ptr<ui::PointerEvent> last_event_observed_;
+
+  DISALLOW_COPY_AND_ASSIGN(WindowTreeClientTestHighDPI);
 };
 
 // Verifies bounds are reverted if the server replied that the change failed.
-TEST_F(WindowTreeClientWmTest, SetBoundsFailed) {
+TEST_F(WindowTreeClientWithHostTest, SetBoundsFailed) {
   Window window(nullptr);
   window.Init(ui::LAYER_NOT_DRAWN);
   const gfx::Rect original_bounds(window.bounds());
@@ -268,7 +278,7 @@
 
 // Verifies bounds and the viz::LocalSurfaceId associated with the bounds are
 // reverted if the server replied that the change failed.
-TEST_F(WindowTreeClientWmTest, SetBoundsFailedLocalSurfaceId) {
+TEST_F(WindowTreeClientWithHostTest, SetBoundsFailedLocalSurfaceId) {
   Window window(nullptr);
   // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate viz::LocalSurfaceIds
   // when their sizes change.
@@ -293,7 +303,7 @@
 }
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
-                        WindowTreeClientWmTestSurfaceSync,
+                        WindowTreeClientTestSurfaceSync,
                         ::testing::Bool());
 
 namespace {
@@ -321,14 +331,13 @@
 
 // Verifies that a ClientSurfaceEmbedder is created for a window once it has
 // a bounds, and a valid FrameSinkId.
-TEST_P(WindowTreeClientWmTestSurfaceSync,
-       ClientSurfaceEmbedderOnValidEmbedding) {
+TEST_P(WindowTreeClientTestSurfaceSync, ClientSurfaceEmbedderOnValidEmbedding) {
   FirstSurfaceActivationWindowDelegate delegate;
   Window window(&delegate);
-  // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate viz::LocalSurfaceIds
-  // when their sizes change.
+  // EMBED_IN_OWNER windows allocate viz::LocalSurfaceIds when their sizes
+  // change.
   window.SetProperty(aura::client::kEmbedType,
-                     aura::client::WindowEmbedType::TOP_LEVEL_IN_WM);
+                     aura::client::WindowEmbedType::EMBED_IN_OWNER);
   window.Init(ui::LAYER_NOT_DRAWN);
 
   // The window will allocate a viz::LocalSurfaceId once it has a bounds.
@@ -356,16 +365,6 @@
   ASSERT_NE(nullptr, client_surface_embedder);
   EXPECT_FALSE(delegate.last_surface_info().is_valid());
 
-  // Until the fallback surface fills the window, we will have gutter.
-  {
-    ui::Layer* right_gutter = client_surface_embedder->RightGutterForTesting();
-    ASSERT_NE(nullptr, right_gutter);
-    EXPECT_EQ(gfx::Rect(100, 100), right_gutter->bounds());
-    // We don't have a bottom gutter if the fallback surface size is (0, 0) as
-    // the right gutter will fill the whole area.
-    ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
-  }
-
   // When a SurfaceInfo arrives from the window server, we use it as the
   // fallback SurfaceInfo. Here we issue the primary SurfaceId back to the
   // client lib. This should cause the gutter to go away, eliminating overdraw.
@@ -376,33 +375,10 @@
   EXPECT_TRUE(delegate.last_surface_info().is_valid());
   EXPECT_EQ(delegate.last_surface_info().id(),
             window_port_mus->PrimarySurfaceIdForTesting());
-
-  // The gutter is gone.
-  ASSERT_EQ(nullptr, client_surface_embedder->BottomGutterForTesting());
-  ASSERT_EQ(nullptr, client_surface_embedder->RightGutterForTesting());
-
-  // Resize again: we should have gutter.
-  new_bounds.SetRect(0, 0, 150, 150);
-  ASSERT_NE(new_bounds, window.bounds());
-  window.SetBounds(new_bounds);
-  ASSERT_NE(nullptr, client_surface_embedder->BottomGutterForTesting());
-  ASSERT_NE(nullptr, client_surface_embedder->RightGutterForTesting());
-
-  // Until the fallback surface fills the window, we will have gutter.
-  {
-    ui::Layer* right_gutter = client_surface_embedder->RightGutterForTesting();
-    ASSERT_NE(nullptr, right_gutter);
-    EXPECT_EQ(gfx::Rect(100, 0, 50, 150), right_gutter->bounds());
-
-    ui::Layer* bottom_gutter =
-        client_surface_embedder->BottomGutterForTesting();
-    ASSERT_NE(nullptr, bottom_gutter);
-    EXPECT_EQ(gfx::Rect(0, 100, 100, 50), bottom_gutter->bounds());
-  }
 }
 
 // Verifies that EMBED_IN_OWNER windows do not gutter.
-TEST_P(WindowTreeClientWmTestSurfaceSync, NoEmbedInOwnerGutter) {
+TEST_P(WindowTreeClientTestSurfaceSync, NoEmbedInOwnerGutter) {
   FirstSurfaceActivationWindowDelegate delegate;
   Window window(&delegate);
   // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate viz::LocalSurfaceIds
@@ -442,7 +418,7 @@
 
 // Verifies that the viz::LocalSurfaceId generated by an embedder changes when
 // the size changes, but not when the position changes.
-TEST_P(WindowTreeClientWmTestSurfaceSync, SetBoundsLocalSurfaceIdChanges) {
+TEST_P(WindowTreeClientTestSurfaceSync, SetBoundsLocalSurfaceIdChanges) {
   ASSERT_EQ(base::nullopt, window_tree()->last_local_surface_id());
   Window window(nullptr);
   // TOP_LEVEL_IN_WM and EMBED_IN_OWNER windows allocate viz::LocalSurfaceIds
@@ -485,7 +461,7 @@
 
 // Verifies a new window from the server doesn't result in attempting to add
 // the window back to the server.
-TEST_F(WindowTreeClientWmTest, AddFromServerDoesntAddAgain) {
+TEST_F(WindowTreeClientWithHostTest, AddFromServerDoesntAddAgain) {
   const ui::Id child_window_id = server_id(root_window()) + 11;
   ui::mojom::WindowDataPtr data = ui::mojom::WindowData::New();
   data->parent_id = server_id(root_window());
@@ -504,7 +480,7 @@
 }
 
 // Verifies a reparent from the server doesn't attempt signal the server.
-TEST_F(WindowTreeClientWmTest, ReparentFromServerDoesntAddAgain) {
+TEST_F(WindowTreeClientWithHostTest, ReparentFromServerDoesntAddAgain) {
   Window window1(nullptr);
   window1.Init(ui::LAYER_NOT_DRAWN);
   Window window2(nullptr);
@@ -525,7 +501,7 @@
 
 // Verifies properties passed in OnWindowHierarchyChanged() make there way to
 // the new window.
-TEST_F(WindowTreeClientWmTest, OnWindowHierarchyChangedWithProperties) {
+TEST_F(WindowTreeClientWithHostTest, OnWindowHierarchyChangedWithProperties) {
   RegisterTestProperties(GetPropertyConverter());
   window_tree()->AckAllChanges();
   const ui::Id child_window_id = server_id(root_window()) + 11;
@@ -561,7 +537,7 @@
 }
 
 // Verifies a move from the server doesn't attempt signal the server.
-TEST_F(WindowTreeClientWmTest, MoveFromServerDoesntAddAgain) {
+TEST_F(WindowTreeClientWithHostTest, MoveFromServerDoesntAddAgain) {
   Window window1(nullptr);
   window1.Init(ui::LAYER_NOT_DRAWN);
   Window window2(nullptr);
@@ -580,7 +556,7 @@
   EXPECT_EQ(&window1, root_window()->children()[1]);
 }
 
-TEST_F(WindowTreeClientWmTest, FocusFromServer) {
+TEST_F(WindowTreeClientWithHostTest, FocusFromServer) {
   Window window1(nullptr);
   window1.Init(ui::LAYER_NOT_DRAWN);
   Window window2(nullptr);
@@ -601,7 +577,7 @@
 // server replies with a new bounds and the original bounds change fails.
 // The server bounds change takes hold along with the associated
 // viz::LocalSurfaceId.
-TEST_F(WindowTreeClientClientTest, SetBoundsFailedWithPendingChange) {
+TEST_F(WindowTreeClientTest, SetBoundsFailedWithPendingChange) {
   aura::Window root_window(nullptr);
   root_window.Init(ui::LAYER_NOT_DRAWN);
   const gfx::Rect original_bounds(root_window.bounds());
@@ -641,7 +617,7 @@
   EXPECT_FALSE(root_window_mus->GetLocalSurfaceId().is_valid());
 }
 
-TEST_F(WindowTreeClientClientTest, TwoInFlightBoundsChangesBothCanceled) {
+TEST_F(WindowTreeClientTest, TwoInFlightBoundsChangesBothCanceled) {
   aura::Window root_window(nullptr);
   root_window.Init(ui::LAYER_NOT_DRAWN);
   const gfx::Rect original_bounds(root_window.bounds());
@@ -666,7 +642,7 @@
   EXPECT_EQ(original_bounds, root_window.bounds());
 }
 
-TEST_F(WindowTreeClientWmTest, TwoInFlightTransformsChangesBothCanceled) {
+TEST_F(WindowTreeClientWithHostTest, TwoInFlightTransformsChangesBothCanceled) {
   const gfx::Transform original_transform(root_window()->layer()->transform());
   gfx::Transform transform1;
   transform1.Scale(SkIntToMScalar(2), SkIntToMScalar(2));
@@ -692,7 +668,7 @@
 }
 
 // Verifies properties are set if the server replied that the change succeeded.
-TEST_F(WindowTreeClientWmTest, SetPropertySucceeded) {
+TEST_F(WindowTreeClientWithHostTest, SetPropertySucceeded) {
   ASSERT_FALSE(root_window()->GetProperty(client::kAlwaysOnTopKey));
   root_window()->SetProperty(client::kAlwaysOnTopKey, true);
   EXPECT_TRUE(root_window()->GetProperty(client::kAlwaysOnTopKey));
@@ -709,7 +685,7 @@
 
 // Verifies properties are reverted if the server replied that the change
 // failed.
-TEST_F(WindowTreeClientWmTest, SetPropertyFailed) {
+TEST_F(WindowTreeClientWithHostTest, SetPropertyFailed) {
   ASSERT_FALSE(root_window()->GetProperty(client::kAlwaysOnTopKey));
   root_window()->SetProperty(client::kAlwaysOnTopKey, true);
   EXPECT_TRUE(root_window()->GetProperty(client::kAlwaysOnTopKey));
@@ -726,7 +702,7 @@
 
 // Simulates a property change, and while the property change is in flight the
 // server replies with a new property and the original property change fails.
-TEST_F(WindowTreeClientWmTest, SetPropertyFailedWithPendingChange) {
+TEST_F(WindowTreeClientWithHostTest, SetPropertyFailedWithPendingChange) {
   RegisterTestProperties(GetPropertyConverter());
   const uint8_t value1 = 11;
   root_window()->SetProperty(kTestPropertyKey1, value1);
@@ -755,7 +731,7 @@
 }
 
 // Verifies property setting behavior with failures for primitive properties.
-TEST_F(WindowTreeClientWmTest, SetPrimitiveProperties) {
+TEST_F(WindowTreeClientWithHostTest, SetPrimitiveProperties) {
   PropertyConverter* property_converter = GetPropertyConverter();
   RegisterTestProperties(property_converter);
 
@@ -793,7 +769,7 @@
 }
 
 // Verifies property setting behavior for a gfx::Rect* property.
-TEST_F(WindowTreeClientWmTest, SetRectProperty) {
+TEST_F(WindowTreeClientWithHostTest, SetRectProperty) {
   gfx::Rect example(1, 2, 3, 4);
   ASSERT_EQ(nullptr, root_window()->GetProperty(client::kRestoreBoundsKey));
   root_window()->SetProperty(client::kRestoreBoundsKey, new gfx::Rect(example));
@@ -815,7 +791,7 @@
 }
 
 // Verifies property setting behavior for a std::string* property.
-TEST_F(WindowTreeClientWmTest, SetStringProperty) {
+TEST_F(WindowTreeClientWithHostTest, SetStringProperty) {
   std::string example = "123";
   ASSERT_NE(nullptr, root_window()->GetProperty(client::kNameKey));
   root_window()->SetProperty(client::kNameKey, new std::string(example));
@@ -836,7 +812,7 @@
 }
 
 // Verifies visible is reverted if the server replied that the change failed.
-TEST_F(WindowTreeClientWmTest, SetVisibleFailed) {
+TEST_F(WindowTreeClientWithHostTest, SetVisibleFailed) {
   const bool original_visible = root_window()->TargetVisibility();
   const bool new_visible = !original_visible;
   SetWindowVisibility(root_window(), new_visible);
@@ -847,7 +823,7 @@
 
 // Simulates a visible change, and while the visible change is in flight the
 // server replies with a new visible and the original visible change fails.
-TEST_F(WindowTreeClientWmTest, SetVisibleFailedWithPendingChange) {
+TEST_F(WindowTreeClientWithHostTest, SetVisibleFailedWithPendingChange) {
   const bool original_visible = root_window()->TargetVisibility();
   const bool new_visible = !original_visible;
   SetWindowVisibility(root_window(), new_visible);
@@ -990,7 +966,7 @@
 
 }  // namespace
 
-TEST_F(WindowTreeClientClientTest, InputEventBasic) {
+TEST_F(WindowTreeClientTest, InputEventBasic) {
   InputEventBasicTestWindowDelegate window_delegate(window_tree());
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
@@ -1015,9 +991,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location_in_child,
                          gfx::Point(), ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location_in_child), ui::Event::Clone(*ui_event.get()),
-      0);
+      event_id, server_id(&child), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1026,7 +1001,7 @@
   EXPECT_EQ(event_location_in_child, window_delegate.last_event_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventPointerEvent) {
+TEST_F(WindowTreeClientTest, InputEventPointerEvent) {
   InputEventBasicTestWindowDelegate window_delegate(window_tree());
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
@@ -1050,9 +1025,9 @@
       ui::ET_POINTER_MOVED, event_location, gfx::Point(), ui::EF_NONE, 0,
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_MOUSE, 0),
       base::TimeTicks());
-  window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(pointer_event), 0);
+  window_tree_client()->OnWindowInputEvent(event_id, server_id(&child),
+                                           window_tree_host.display_id(),
+                                           ui::Event::Clone(pointer_event), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1060,7 +1035,7 @@
   EXPECT_EQ(event_location, window_delegate.last_event_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventPen) {
+TEST_F(WindowTreeClientTest, InputEventPen) {
   // Create a root window.
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
@@ -1086,9 +1061,9 @@
       ui::ET_POINTER_DOWN, event_location, gfx::Point(), ui::EF_NONE, 0,
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_PEN, 0),
       ui::EventTimeForNow());
-  window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(pointer_event), 0);
+  window_tree_client()->OnWindowInputEvent(event_id, server_id(&child),
+                                           window_tree_host.display_id(),
+                                           ui::Event::Clone(pointer_event), 0);
 
   // Pen event was handled.
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
@@ -1098,7 +1073,7 @@
             window_delegate.last_pointer_type());
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventFindTargetAndConversion) {
+TEST_F(WindowTreeClientTest, InputEventFindTargetAndConversion) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   Window* top_level = window_tree_host.window();
@@ -1135,8 +1110,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, gfx::Point(),
                          ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child1), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(&child1), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1156,8 +1131,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, gfx::Point(),
                          ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child1), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event1.get()), 0);
+      event_id, server_id(&child1), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event1.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1166,7 +1141,7 @@
   EXPECT_EQ(gfx::Point(50, 60), window_delegate1.last_event_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventCustomWindowTargeter) {
+TEST_F(WindowTreeClientTest, InputEventCustomWindowTargeter) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   Window* top_level = window_tree_host.window();
@@ -1195,7 +1170,7 @@
 
   // child1 has a custom targeter set which would always return itself as the
   // target window therefore event should go to child1 unlike
-  // WindowTreeClientClientTest.InputEventFindTargetAndConversion.
+  // WindowTreeClientTest.InputEventFindTargetAndConversion.
   const gfx::Point event_location(50, 60);
   uint32_t event_id = 1;
   window_delegate1.set_event_id(event_id);
@@ -1204,8 +1179,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, gfx::Point(),
                          ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child1), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(&child1), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1221,8 +1196,8 @@
   window_delegate1.set_event_id(event_id);
   window_delegate2.set_event_id(event_id);
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child2), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(&child2), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1231,7 +1206,7 @@
   EXPECT_EQ(gfx::Point(70, 90), window_delegate1.last_event_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventCaptureWindow) {
+TEST_F(WindowTreeClientTest, InputEventCaptureWindow) {
   std::unique_ptr<WindowTreeHostMus> window_tree_host =
       std::make_unique<WindowTreeHostMus>(
           CreateInitParamsForTopLevel(window_tree_client_impl()));
@@ -1275,8 +1250,7 @@
                          ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
       event_id, server_id(child1.get()), window_tree_host->display_id(),
-      ui::Id(), gfx::PointF(root_location), ui::Event::Clone(*ui_event.get()),
-      0);
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1299,8 +1273,7 @@
   window_delegate2->set_event_id(event_id);
   window_tree_client()->OnWindowInputEvent(
       event_id, server_id(child1.get()), window_tree_host->display_id(),
-      ui::Id(), gfx::PointF(root_location), ui::Event::Clone(*ui_event.get()),
-      0);
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1316,7 +1289,7 @@
   capture_client.reset();
 }
 
-TEST_F(WindowTreeClientClientTest, InputEventRootWindow) {
+TEST_F(WindowTreeClientTest, InputEventRootWindow) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   Window* top_level = window_tree_host.window();
@@ -1346,8 +1319,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location_in_child,
                          gfx::Point(), ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(top_level), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(top_level), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
 
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
@@ -1358,7 +1331,7 @@
   EXPECT_EQ(gfx::Point(), child_delegate.last_event_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputMouseEventNoWindow) {
+TEST_F(WindowTreeClientTest, InputMouseEventNoWindow) {
   Env* env = Env::GetInstance();
   InputEventBasicTestWindowDelegate window_delegate(window_tree());
   WindowTreeHostMus window_tree_host(
@@ -1390,8 +1363,8 @@
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_MOUSE, 0),
       ui::EventTimeForNow());
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(pointer_event_down), 0);
+      event_id, server_id(&child), window_tree_host.display_id(),
+      ui::Event::Clone(pointer_event_down), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1410,8 +1383,8 @@
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_MOUSE, 0),
       ui::EventTimeForNow());
   window_tree_client()->OnWindowInputEvent(
-      event_id, kInvalidServerId, window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(pointer_event_up), 0);
+      event_id, kInvalidServerId, window_tree_host.display_id(),
+      ui::Event::Clone(pointer_event_up), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   // WindowTreeClient::OnWindowInputEvent cannot find a target window with
   // kInvalidServerId but should use the event to update event states kept in
@@ -1424,7 +1397,7 @@
   EXPECT_EQ(event_location, env->last_mouse_location());
 }
 
-TEST_F(WindowTreeClientClientTest, InputTouchEventNoWindow) {
+TEST_F(WindowTreeClientTest, InputTouchEventNoWindow) {
   Env* env = Env::GetInstance();
   InputEventBasicTestWindowDelegate window_delegate(window_tree());
   WindowTreeHostMus window_tree_host(
@@ -1453,8 +1426,8 @@
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0),
       ui::EventTimeForNow());
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(), ui::Event::Clone(pointer_event_down), 0);
+      event_id, server_id(&child), window_tree_host.display_id(),
+      ui::Event::Clone(pointer_event_down), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -1469,8 +1442,8 @@
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0),
       ui::EventTimeForNow());
   window_tree_client()->OnWindowInputEvent(
-      event_id, kInvalidServerId, window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(), ui::Event::Clone(pointer_event_up), 0);
+      event_id, kInvalidServerId, window_tree_host.display_id(),
+      ui::Event::Clone(pointer_event_up), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   // WindowTreeClient::OnWindowInputEvent cannot find a target window with
   // kInvalidServerId but should use the event to update event states kept in
@@ -1481,7 +1454,7 @@
   EXPECT_FALSE(env->is_touch_down());
 }
 
-class WindowTreeClientPointerObserverTest : public WindowTreeClientClientTest {
+class WindowTreeClientPointerObserverTest : public WindowTreeClientTest {
  public:
   WindowTreeClientPointerObserverTest() {}
   ~WindowTreeClientPointerObserverTest() override {}
@@ -1492,7 +1465,7 @@
   }
   int64_t last_display_id() const { return last_display_id_; }
 
-  // WindowTreeClientClientTest:
+  // WindowTreeClientTest:
   void OnPointerEventObserved(const ui::PointerEvent& event,
                               int64_t display_id,
                               Window* target) override {
@@ -1571,8 +1544,7 @@
       ui::ET_POINTER_DOWN, gfx::Point(), gfx::Point(), ui::EF_CONTROL_DOWN, 0,
       ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 1),
       base::TimeTicks::Now()));
-  window_tree_client()->OnWindowInputEvent(1, server_id(top_level), 0, ui::Id(),
-                                           gfx::PointF(),
+  window_tree_client()->OnWindowInputEvent(1, server_id(top_level), 0,
                                            std::move(pointer_event_down), true);
 
   // Delegate sensed the event.
@@ -1583,12 +1555,12 @@
 }
 
 // Verifies focus is reverted if the server replied that the change failed.
-TEST_F(WindowTreeClientWmTest, SetFocusFailed) {
+TEST_F(WindowTreeClientWithHostTest, SetFocusFailed) {
   Window child(nullptr);
   child.Init(ui::LAYER_NOT_DRAWN);
   root_window()->AddChild(&child);
   // AuraTestHelper::SetUp sets the active focus client and focus client root,
-  // root_window() is assumed to have focus until we actually focus on a
+  // root_window is assumed to have focus until we actually focus on a
   // certain window.
   EXPECT_EQ(WindowMus::Get(root_window()),
             window_tree_client_impl()->focus_synchronizer()->focused_window());
@@ -1604,7 +1576,7 @@
 
 // Simulates a focus change, and while the focus change is in flight the server
 // replies with a new focus and the original focus change fails.
-TEST_F(WindowTreeClientWmTest, SetFocusFailedWithPendingChange) {
+TEST_F(WindowTreeClientWithHostTest, SetFocusFailedWithPendingChange) {
   Window child1(nullptr);
   child1.Init(ui::LAYER_NOT_DRAWN);
   root_window()->AddChild(&child1);
@@ -1636,7 +1608,8 @@
   EXPECT_TRUE(child1.HasFocus());
 }
 
-TEST_F(WindowTreeClientWmTest, FocusOnRemovedWindowWithInFlightFocusChange) {
+TEST_F(WindowTreeClientWithHostTest,
+       FocusOnRemovedWindowWithInFlightFocusChange) {
   std::unique_ptr<Window> child1(std::make_unique<Window>(nullptr));
   child1->Init(ui::LAYER_NOT_DRAWN);
   root_window()->AddChild(child1.get());
@@ -1690,7 +1663,7 @@
   DISALLOW_COPY_AND_ASSIGN(ToggleVisibilityFromDestroyedObserver);
 };
 
-TEST_F(WindowTreeClientWmTest, ToggleVisibilityFromWindowDestroyed) {
+TEST_F(WindowTreeClientWithHostTest, ToggleVisibilityFromWindowDestroyed) {
   std::unique_ptr<Window> child(std::make_unique<Window>(nullptr));
   child->Init(ui::LAYER_NOT_DRAWN);
   root_window()->AddChild(child.get());
@@ -1704,7 +1677,7 @@
       WindowTreeChangeType::VISIBLE, true));
 }
 
-TEST_F(WindowTreeClientClientTest, NewTopLevelWindow) {
+TEST_F(WindowTreeClientTest, NewTopLevelWindow) {
   const size_t initial_root_count =
       window_tree_client_impl()->GetRoots().size();
   std::unique_ptr<WindowTreeHostMus> window_tree_host =
@@ -1741,7 +1714,7 @@
   EXPECT_EQ(initial_root_count, window_tree_client_impl()->GetRoots().size());
 }
 
-TEST_F(WindowTreeClientClientTest, NewTopLevelWindowGetsPropertiesFromData) {
+TEST_F(WindowTreeClientTest, NewTopLevelWindowGetsPropertiesFromData) {
   const size_t initial_root_count =
       window_tree_client_impl()->GetRoots().size();
   WindowTreeHostMus window_tree_host(
@@ -1780,7 +1753,7 @@
   EXPECT_EQ(gfx::Rect(1, 2, 3, 4), top_level->GetHost()->GetBoundsInPixels());
 }
 
-TEST_F(WindowTreeClientClientTest, NewWindowGetsAllChangesInFlight) {
+TEST_F(WindowTreeClientTest, NewWindowGetsAllChangesInFlight) {
   RegisterTestProperties(GetPropertyConverter());
 
   WindowTreeHostMus window_tree_host(
@@ -1854,7 +1827,7 @@
             top_level->GetProperty(kTestPropertyKey2));
 }
 
-TEST_F(WindowTreeClientClientTest, NewWindowGetsProperties) {
+TEST_F(WindowTreeClientTest, NewWindowGetsProperties) {
   RegisterTestProperties(GetPropertyConverter());
   Window window(nullptr);
   const uint8_t explicitly_set_test_property1_value = 29;
@@ -1874,7 +1847,7 @@
 }
 
 // Assertions around transient windows.
-TEST_F(WindowTreeClientClientTest, Transients) {
+TEST_F(WindowTreeClientTest, Transients) {
   aura::Window root_window(nullptr);
   root_window.Init(ui::LAYER_NOT_DRAWN);
   client::TransientWindowClient* transient_client =
@@ -1910,7 +1883,7 @@
   EXPECT_EQ(server_id(&transient), window_tree()->transient_data().child_id);
 }
 
-TEST_F(WindowTreeClientClientTest, DontRestackTransientsFromOtherClients) {
+TEST_F(WindowTreeClientTest, DontRestackTransientsFromOtherClients) {
   // Create a window from another client with 3 children.
   const int32_t other_client_id = 11 << 16;
   int32_t other_client_window_id = 1;
@@ -1951,8 +1924,7 @@
 
 // Verifies adding/removing a transient child notifies the server of the restack
 // when the change originates from the server.
-TEST_F(WindowTreeClientClientTest,
-       TransientChildServerMutateNotifiesOfRestack) {
+TEST_F(WindowTreeClientTest, TransientChildServerMutateNotifiesOfRestack) {
   aura::Window root_window(nullptr);
   root_window.Init(ui::LAYER_NOT_DRAWN);
   Window* w1 = new Window(nullptr);
@@ -2000,8 +1972,7 @@
 
 // Verifies adding/removing a transient child notifies the server of the
 // restacks;
-TEST_F(WindowTreeClientClientTest,
-       TransientChildClientMutateNotifiesOfRestack) {
+TEST_F(WindowTreeClientTest, TransientChildClientMutateNotifiesOfRestack) {
   aura::Window root_window(nullptr);
   root_window.Init(ui::LAYER_NOT_DRAWN);
 
@@ -2076,8 +2047,7 @@
   EXPECT_EQ(0u, window_tree()->number_of_changes());
 }
 
-TEST_F(WindowTreeClientClientTest,
-       TopLevelWindowDestroyedBeforeCreateComplete) {
+TEST_F(WindowTreeClientTest, TopLevelWindowDestroyedBeforeCreateComplete) {
   const size_t initial_root_count =
       window_tree_client_impl()->GetRoots().size();
   std::unique_ptr<WindowTreeHostMus> window_tree_host =
@@ -2106,7 +2076,7 @@
   EXPECT_EQ(initial_root_count, window_tree_client_impl()->GetRoots().size());
 }
 
-TEST_F(WindowTreeClientClientTest, NewTopLevelWindowGetsProperties) {
+TEST_F(WindowTreeClientTest, NewTopLevelWindowGetsProperties) {
   RegisterTestProperties(GetPropertyConverter());
   const uint8_t property_value = 11;
   std::map<std::string, std::vector<uint8_t>> properties;
@@ -2171,7 +2141,7 @@
 
 }  // namespace
 
-TEST_F(WindowTreeClientClientTest, CloseWindow) {
+TEST_F(WindowTreeClientTest, CloseWindow) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   window_tree_host.InitHost();
@@ -2188,7 +2158,7 @@
 
 // Tests both SetCapture and ReleaseCapture, to ensure that Window is properly
 // updated on failures.
-TEST_F(WindowTreeClientWmTest, ExplicitCapture) {
+TEST_F(WindowTreeClientWithHostTest, ExplicitCapture) {
   root_window()->SetCapture();
   EXPECT_TRUE(root_window()->HasCapture());
   ASSERT_TRUE(window_tree()->AckSingleChangeOfType(
@@ -2215,7 +2185,7 @@
 
 // Tests that when capture is lost, while there is a release capture request
 // inflight, that the revert value of that request is updated correctly.
-TEST_F(WindowTreeClientWmTest, LostCaptureDifferentInFlightChange) {
+TEST_F(WindowTreeClientWithHostTest, LostCaptureDifferentInFlightChange) {
   root_window()->SetCapture();
   EXPECT_TRUE(root_window()->HasCapture());
   ASSERT_TRUE(window_tree()->AckSingleChangeOfType(
@@ -2235,7 +2205,7 @@
 
 // Tests that while two windows can inflight capture requests, that the
 // WindowTreeClient only identifies one as having the current capture.
-TEST_F(WindowTreeClientWmTest, TwoWindowsRequestCapture) {
+TEST_F(WindowTreeClientWithHostTest, TwoWindowsRequestCapture) {
   Window child(nullptr);
   child.Init(ui::LAYER_NOT_DRAWN);
   root_window()->AddChild(&child);
@@ -2262,7 +2232,8 @@
   EXPECT_FALSE(root_window()->HasCapture());
 }
 
-TEST_F(WindowTreeClientWmTest, WindowDestroyedWhileTransientChildHasCapture) {
+TEST_F(WindowTreeClientWithHostTest,
+       WindowDestroyedWhileTransientChildHasCapture) {
   std::unique_ptr<Window> transient_parent(std::make_unique<Window>(nullptr));
   transient_parent->Init(ui::LAYER_NOT_DRAWN);
   // Owned by |transient_parent|.
@@ -2334,7 +2305,7 @@
 
 }  // namespace
 
-TEST_F(WindowTreeClientWmTest, OnWindowTreeCaptureChanged) {
+TEST_F(WindowTreeClientWithHostTest, OnWindowTreeCaptureChanged) {
   CaptureRecorder capture_recorder(root_window());
 
   std::unique_ptr<Window> child1(std::make_unique<Window>(nullptr));
@@ -2382,7 +2353,7 @@
   capture_recorder.reset_capture_captured_count();
 }
 
-TEST_F(WindowTreeClientClientTest, TwoWindowTreesRequestCapture) {
+TEST_F(WindowTreeClientTest, TwoWindowTreesRequestCapture) {
   std::unique_ptr<TopLevel> top_level1 = CreateWindowTreeHostForTopLevel();
   std::unique_ptr<TopLevel> top_level2 = CreateWindowTreeHostForTopLevel();
 
@@ -2429,7 +2400,7 @@
   capture_recorder2.reset();
 }
 
-TEST_F(WindowTreeClientClientTest, ModalTypeWindowFail) {
+TEST_F(WindowTreeClientTest, ModalTypeWindowFail) {
   Window window(nullptr);
   window.Init(ui::LAYER_NOT_DRAWN);
   window.SetProperty(client::kModalKey, ui::MODAL_TYPE_WINDOW);
@@ -2446,7 +2417,7 @@
   EXPECT_EQ(ui::MODAL_TYPE_NONE, window.GetProperty(client::kModalKey));
 }
 
-TEST_F(WindowTreeClientClientTest, ModalTypeNoneFail) {
+TEST_F(WindowTreeClientTest, ModalTypeNoneFail) {
   Window window(nullptr);
   window.Init(ui::LAYER_NOT_DRAWN);
   // First, set modality type to window sucessfully.
@@ -2468,7 +2439,7 @@
   EXPECT_EQ(ui::MODAL_TYPE_WINDOW, window.GetProperty(client::kModalKey));
 }
 
-TEST_F(WindowTreeClientClientTest, ModalTypeSuccess) {
+TEST_F(WindowTreeClientTest, ModalTypeSuccess) {
   Window window(nullptr);
   window.Init(ui::LAYER_NOT_DRAWN);
 
@@ -2491,7 +2462,8 @@
 
 // Verifies OnWindowHierarchyChanged() deals correctly with identifying existing
 // windows.
-TEST_F(WindowTreeClientWmTest, OnWindowHierarchyChangedWithExistingWindow) {
+TEST_F(WindowTreeClientWithHostTest,
+       OnWindowHierarchyChangedWithExistingWindow) {
   Window* window1 = new Window(nullptr);
   window1->Init(ui::LAYER_NOT_DRAWN);
   Window* window2 = new Window(nullptr);
@@ -2528,7 +2500,7 @@
 
 // Ensures when WindowTreeClient::OnWindowDeleted() is called nothing is
 // scheduled on the server side.
-TEST_F(WindowTreeClientClientTest, OnWindowDeletedDoesntNotifyServer) {
+TEST_F(WindowTreeClientTest, OnWindowDeletedDoesntNotifyServer) {
   Window window1(nullptr);
   window1.Init(ui::LAYER_NOT_DRAWN);
   Window* window2 = new Window(nullptr);
@@ -2539,200 +2511,23 @@
   EXPECT_FALSE(window_tree()->has_change());
 }
 
-TEST_F(WindowTreeClientWmTest, NewWindowTreeHostIsConfiguredCorrectly) {
-  display::Display display(201);
-  display.set_bounds(gfx::Rect(1, 2, 101, 102));
-
-  ui::mojom::WindowDataPtr root_data(ui::mojom::WindowData::New());
-  root_data->parent_id = 0;
-  root_data->window_id = 101;
-  root_data->visible = true;
-  root_data->bounds = display.bounds();
-  const bool parent_drawn = true;
-
-  // AuraTestBase ends up owning WindowTreeHost.
-  WindowTreeHostMus* window_tree_host =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallWmNewDisplayAdded(display, std::move(root_data), parent_drawn);
-  EXPECT_EQ(display.bounds(), window_tree_host->GetBoundsInPixels());
-  // The root window of the WindowTreeHost always has an origin of 0,0.
-  EXPECT_EQ(gfx::Rect(display.bounds().size()),
-            window_tree_host->window()->bounds());
-  EXPECT_TRUE(window_tree_host->window()->IsVisible());
-  EXPECT_EQ(display.id(), window_tree_host->display_id());
-}
-
-TEST_F(WindowTreeClientWmTest, ManuallyCreateDisplay) {
-  const gfx::Rect bounds(1, 2, 101, 102);
-  std::unique_ptr<DisplayInitParams> display_params =
-      std::make_unique<DisplayInitParams>();
-  display_params->display = std::make_unique<display::Display>(201);
-  display_params->display->set_bounds(bounds);
-  display_params->viewport_metrics.bounds_in_pixels = bounds;
-  display_params->viewport_metrics.device_scale_factor = 1.0f;
-  display_params->viewport_metrics.ui_scale_factor = 1.0f;
-  WindowTreeHostMusInitParams init_params =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallCreateInitParamsForNewDisplay();
-  init_params.display_id = display_params->display->id();
-  init_params.display_init_params = std::move(display_params);
-  WindowTreeHostMus window_tree_host(std::move(init_params));
-  window_tree_host.InitHost();
-  EXPECT_EQ(bounds, window_tree_host.GetBoundsInPixels());
-  EXPECT_EQ(gfx::Rect(bounds.size()), window_tree_host.window()->bounds());
-}
-
-TEST_F(WindowTreeClientWmTest, FocusInDifferentDisplayThanEvent) {
-  constexpr int64_t kDisplayId1 = 201;
-  WindowTreeHostMusInitParams init_params1 = CreateWindowTreeHostMusInitParams(
-      window_tree_client_impl(), gfx::Rect(1, 2, 101, 102), kDisplayId1);
-  WindowTreeHostMus window_tree_host1(std::move(init_params1));
-  window_tree_host1.InitHost();
-  window_tree_host1.Show();
-  client::SetFocusClient(window_tree_host1.window(), focus_client());
-
-  constexpr int64_t kDisplayId2 = 202;
-  WindowTreeHostMusInitParams init_params2 = CreateWindowTreeHostMusInitParams(
-      window_tree_client_impl(), gfx::Rect(501, 2, 101, 102), kDisplayId2);
-  WindowTreeHostMus window_tree_host2(std::move(init_params2));
-  window_tree_host2.InitHost();
-  window_tree_host2.Show();
-  client::SetFocusClient(window_tree_host2.window(), focus_client());
-
-  aura::Window child1(nullptr);
-  child1.Init(ui::LAYER_NOT_DRAWN);
-  child1.Show();
-  window_tree_host1.window()->AddChild(&child1);
-  child1.Focus();
-
-  aura::Window child2(nullptr);
-  child2.Init(ui::LAYER_NOT_DRAWN);
-  child2.Show();
-  child2.SetEventTargeter(std::make_unique<WindowTargeter>());
-  window_tree_host2.window()->AddChild(&child2);
-
-  EXPECT_TRUE(child1.HasFocus());
-
-  std::unique_ptr<ui::KeyEvent> key_event = std::make_unique<ui::KeyEvent>(
-      ui::ET_KEY_PRESSED, ui::VKEY_ESCAPE, ui::EF_NONE);
-  window_tree_client()->OnWindowInputEvent(1, server_id(&child2), kDisplayId2,
-                                           ui::Id(), gfx::PointF(),
-                                           std::move(key_event), false);
-}
-
-// Test accelerated widget values cause compositor crashes without Ozone.
-#if defined(USE_OZONE)
-#define MAYBE_SwapDisplayRoots SwapDisplayRoots
-#else
-#define MAYBE_SwapDisplayRoots DISABLED_SwapDisplayRoots
-#endif
-TEST_F(WindowTreeClientWmTest, MAYBE_SwapDisplayRoots) {
-  display::Display display1(201);
-  ui::mojom::WindowDataPtr root_data1(ui::mojom::WindowData::New());
-  root_data1->window_id = 101;
-
-  display::Display display2(202);
-  ui::mojom::WindowDataPtr root_data2(ui::mojom::WindowData::New());
-  root_data2->window_id = 102;
-
-  const bool parent_drawn = true;
-
-  // AuraTestBase ends up owning WindowTreeHost.
-  WindowTreeHostMus* window_tree_host1 =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallWmNewDisplayAdded(display1, std::move(root_data1), parent_drawn);
-  WindowTreeHostMus* window_tree_host2 =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallWmNewDisplayAdded(display2, std::move(root_data2), parent_drawn);
-
-#if defined(OS_WIN) || defined(OS_ANDROID)
-  gfx::AcceleratedWidget widget1 = reinterpret_cast<gfx::AcceleratedWidget>(1U);
-  gfx::AcceleratedWidget widget2 = reinterpret_cast<gfx::AcceleratedWidget>(2U);
-#else
-  gfx::AcceleratedWidget widget1 = static_cast<gfx::AcceleratedWidget>(1U);
-  gfx::AcceleratedWidget widget2 = static_cast<gfx::AcceleratedWidget>(2U);
-#endif
-
-  window_tree_host1->OverrideAcceleratedWidget(widget1);
-  window_tree_host2->OverrideAcceleratedWidget(widget2);
-  EXPECT_EQ(widget1, window_tree_host1->GetAcceleratedWidget());
-  EXPECT_EQ(widget2, window_tree_host2->GetAcceleratedWidget());
-
-  static_cast<WindowManagerClient*>(window_tree_client_impl())
-      ->SwapDisplayRoots(window_tree_host1, window_tree_host2);
-
-  // SwapDisplayRoots swaps the display ids and accelerated widgets.
-  EXPECT_EQ(display2.id(), window_tree_host1->display_id());
-  EXPECT_EQ(display1.id(), window_tree_host2->display_id());
-  EXPECT_EQ(widget2, window_tree_host1->GetAcceleratedWidget());
-  EXPECT_EQ(widget1, window_tree_host2->GetAcceleratedWidget());
-}
-
-TEST_F(WindowTreeClientWmTestHighDPI, BoundsChangeWhenAdded) {
-  const gfx::Rect bounds(1, 2, 101, 102);
-  std::unique_ptr<DisplayInitParams> display_params =
-      std::make_unique<DisplayInitParams>();
-  display_params->display = std::make_unique<display::Display>(201);
-  display_params->display->set_bounds(bounds);
-  display_params->viewport_metrics.bounds_in_pixels = bounds;
-  const float device_scale_factor = 2.0f;
-  display_params->viewport_metrics.device_scale_factor = device_scale_factor;
-  display_params->viewport_metrics.ui_scale_factor = 1.0f;
-  WindowTreeHostMusInitParams init_params =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallCreateInitParamsForNewDisplay();
-  init_params.display_id = display_params->display->id();
-  init_params.display_init_params = std::move(display_params);
-  WindowTreeHostMus window_tree_host(std::move(init_params));
-  window_tree_host.InitHost();
-
-  const gfx::Rect bounds_in_dips(1, 2, 3, 4);
-  aura::Window child_window(nullptr);
-  child_window.SetProperty(aura::client::kEmbedType,
-                           aura::client::WindowEmbedType::EMBED_IN_OWNER);
-  child_window.Init(ui::LAYER_NOT_DRAWN);
-  EXPECT_EQ(1.0f, WindowMus::Get(&child_window)->GetDeviceScaleFactor());
-  window_tree()->AckAllChanges();
-  child_window.SetBounds(bounds_in_dips);
-  ASSERT_EQ(1u,
-            window_tree()->GetChangeCountForType(WindowTreeChangeType::BOUNDS));
-  EXPECT_EQ(bounds_in_dips, window_tree()->last_set_window_bounds());
-  base::Optional<viz::LocalSurfaceId> child_window_local_surface_id =
-      window_tree()->last_local_surface_id();
-  ASSERT_TRUE(child_window_local_surface_id);
-  window_tree()->AckAllChanges();
-
-  window_tree_host.window()->AddChild(&child_window);
-  EXPECT_EQ(2.0f, WindowMus::Get(&child_window)->GetDeviceScaleFactor());
-  EXPECT_EQ(bounds_in_dips, child_window.bounds());
-  ASSERT_EQ(1u,
-            window_tree()->GetChangeCountForType(WindowTreeChangeType::BOUNDS));
-  EXPECT_EQ(gfx::ConvertRectToPixel(device_scale_factor, bounds_in_dips),
-            window_tree()->last_set_window_bounds());
-  base::Optional<viz::LocalSurfaceId> updated_child_window_local_surface_id =
-      window_tree()->last_local_surface_id();
-  ASSERT_TRUE(child_window_local_surface_id);
-  EXPECT_NE(*child_window_local_surface_id,
-            *updated_child_window_local_surface_id);
-}
-
-TEST_F(WindowTreeClientWmTestHighDPI, SetBounds) {
+TEST_F(WindowTreeClientWithHostTestHighDPI, SetBounds) {
   const gfx::Rect original_bounds(root_window()->bounds());
   const gfx::Rect new_bounds(gfx::Rect(0, 0, 100, 100));
   ASSERT_NE(new_bounds, root_window()->bounds());
   root_window()->SetBounds(new_bounds);
   EXPECT_EQ(new_bounds, root_window()->bounds());
 
-  // Simulate the server responding with a bounds change. Server should operate
-  // in pixels.
+  // Simulate the server responding with a bounds change. Server operates in
+  // dips.
   const gfx::Rect server_changed_bounds(gfx::Rect(0, 0, 200, 200));
   window_tree_client()->OnWindowBoundsChanged(
       server_id(root_window()), original_bounds, server_changed_bounds,
       base::nullopt);
-  EXPECT_EQ(new_bounds, root_window()->bounds());
+  EXPECT_EQ(server_changed_bounds, root_window()->bounds());
 }
 
-TEST_F(WindowTreeClientClientTestHighDPI, NewTopLevelWindowBounds) {
+TEST_F(WindowTreeClientTestHighDPI, NewTopLevelWindowBounds) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   Window* top_level = window_tree_host.window();
@@ -2758,7 +2553,7 @@
             top_level->GetHost()->GetBoundsInPixels());
 }
 
-TEST_F(WindowTreeClientClientTestHighDPI, PointerEventsInDip) {
+TEST_F(WindowTreeClientTestHighDPI, PointerEventsInDip) {
   display::Screen* screen = display::Screen::GetScreen();
   const display::Display primary_display = screen->GetPrimaryDisplay();
   ASSERT_EQ(2.0f, primary_display.device_scale_factor());
@@ -2791,7 +2586,7 @@
   EXPECT_EQ(root_location, last_event->root_location());
 }
 
-TEST_F(WindowTreeClientClientTestHighDPI, InputEventsInDip) {
+TEST_F(WindowTreeClientTestHighDPI, InputEventsInDip) {
   WindowTreeHostMus window_tree_host(
       CreateInitParamsForTopLevel(window_tree_client_impl()));
   display::Screen* screen = display::Screen::GetScreen();
@@ -2835,8 +2630,8 @@
       new ui::MouseEvent(ui::ET_MOUSE_MOVED, event_location, event_location,
                          ui::EventTimeForNow(), ui::EF_NONE, 0));
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child1), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(&child1), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -2851,8 +2646,8 @@
   window_delegate1.set_event_id(event_id);
   window_delegate2.set_event_id(event_id);
   window_tree_client()->OnWindowInputEvent(
-      event_id, server_id(&child2), window_tree_host.display_id(), ui::Id(),
-      gfx::PointF(event_location), ui::Event::Clone(*ui_event.get()), 0);
+      event_id, server_id(&child2), window_tree_host.display_id(),
+      ui::Event::Clone(*ui_event.get()), 0);
   EXPECT_TRUE(window_tree()->WasEventAcked(event_id));
   EXPECT_EQ(ui::mojom::EventResult::HANDLED,
             window_tree()->GetEventResult(event_id));
@@ -2889,78 +2684,6 @@
   EXPECT_TRUE(window_tracker.windows().empty());
 }
 
-TEST_F(WindowTreeClientWmTestHighDPI, ObservedPointerEvents) {
-  const gfx::Rect bounds(1, 2, 101, 102);
-  std::unique_ptr<DisplayInitParams> display_params =
-      std::make_unique<DisplayInitParams>();
-  const int64_t display_id = 201;
-  float device_scale_factor = 2.0f;
-  float ui_scale_factor = 1.5f;
-  display_params->display = std::make_unique<display::Display>(display_id);
-  display_params->display->set_bounds(bounds);
-  display_params->viewport_metrics.bounds_in_pixels = bounds;
-  display_params->viewport_metrics.device_scale_factor = device_scale_factor;
-  display_params->viewport_metrics.ui_scale_factor = ui_scale_factor;
-  WindowTreeHostMusInitParams init_params =
-      WindowTreeClientPrivate(window_tree_client_impl())
-          .CallCreateInitParamsForNewDisplay();
-  init_params.display_id = display_id;
-  init_params.display_init_params = std::move(display_params);
-
-  WindowTreeHostMus window_tree_host(std::move(init_params));
-  window_tree_host.InitHost();
-  gfx::Transform scale_transform;
-  scale_transform.Scale(ui_scale_factor, ui_scale_factor);
-  window_tree_host.window()->SetTransform(scale_transform);
-  window_tree_host.compositor()->SetScaleAndSize(
-      device_scale_factor, bounds.size(), viz::LocalSurfaceId());
-
-  // Start a pointer watcher for all events excluding move events.
-  window_tree_client_impl()->StartPointerWatcher(false /* want_moves */);
-
-  // Simulate the server sending an observed event.
-  const gfx::Point location_pixels(10, 12);
-  const gfx::Point root_location_pixels(14, 16);
-  std::unique_ptr<ui::PointerEvent> pointer_event_down(new ui::PointerEvent(
-      ui::ET_POINTER_DOWN, location_pixels, root_location_pixels,
-      ui::EF_CONTROL_DOWN, 0,
-      ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 1),
-      base::TimeTicks()));
-  std::unique_ptr<ui::PointerEvent> pointer_event_down2(
-      ui::Event::Clone(*pointer_event_down).release()->AsPointerEvent());
-  window_tree_client()->OnPointerEventObserved(std::move(pointer_event_down),
-                                               0u, display_id);
-
-  ASSERT_FALSE(observed_pointer_events().empty());
-  const ui::PointerEvent* last_event = observed_pointer_events().back().get();
-  ASSERT_TRUE(last_event);
-  EXPECT_EQ(nullptr, last_event->target());
-  // NOTE: the root and location are the same as there was no window supplied to
-  // OnPointerEventObserved().
-  EXPECT_EQ(gfx::ConvertPointToDIP(device_scale_factor * ui_scale_factor,
-                                   root_location_pixels),
-            last_event->location());
-  EXPECT_EQ(gfx::ConvertPointToDIP(device_scale_factor * ui_scale_factor,
-                                   root_location_pixels),
-            last_event->root_location());
-
-  observed_pointer_events().clear();
-  window_tree_client()->OnPointerEventObserved(
-      std::move(pointer_event_down2),
-      WindowMus::Get(window_tree_host.window())->server_id(), display_id);
-  ASSERT_FALSE(observed_pointer_events().empty());
-  last_event = observed_pointer_events().back().get();
-  ASSERT_TRUE(last_event);
-  EXPECT_EQ(nullptr, last_event->target());
-  // |location| from the server has already had |ui_scale_factor| applied, so
-  // it won't be reapplied here.
-  EXPECT_EQ(gfx::ConvertPointToDIP(device_scale_factor, location_pixels),
-            last_event->location());
-  EXPECT_EQ(gfx::ConvertPointToDIP(device_scale_factor * ui_scale_factor,
-                                   root_location_pixels),
-            last_event->root_location());
-}
-
 class TestEmbedRootDelegate : public EmbedRootDelegate {
  public:
   TestEmbedRootDelegate() = default;
@@ -2976,7 +2699,7 @@
 };
 
 // Verifies we don't crash when focus changes to a window in an EmbedRoot.
-TEST_F(WindowTreeClientClientTest, ChangeFocusInEmbedRootWindow) {
+TEST_F(WindowTreeClientTest, ChangeFocusInEmbedRootWindow) {
   TestEmbedRootDelegate embed_root_delegate;
   std::unique_ptr<EmbedRoot> embed_root =
       window_tree_client_impl()->CreateEmbedRoot(&embed_root_delegate);
diff --git a/ui/aura/mus/window_tree_host_mus.cc b/ui/aura/mus/window_tree_host_mus.cc
index 1fe190d..469e620 100644
--- a/ui/aura/mus/window_tree_host_mus.cc
+++ b/ui/aura/mus/window_tree_host_mus.cc
@@ -42,12 +42,6 @@
       display_id_(init_params.display_id),
       delegate_(init_params.window_tree_client) {
   gfx::Rect bounds_in_pixels;
-  display_init_params_ = std::move(init_params.display_init_params);
-  if (display_init_params_) {
-    bounds_in_pixels = display_init_params_->viewport_metrics.bounds_in_pixels;
-    if (display_init_params_->display)
-      DCHECK_EQ(display_id_, display_init_params_->display->id());
-  }
   window()->SetProperty(kWindowTreeHostMusKey, this);
   // TODO(sky): find a cleaner way to set this! Better solution is to likely
   // have constructor take aura::Window.
@@ -62,8 +56,7 @@
   // context_factory_private().
   const bool force_software_compositor = false;
   const bool external_begin_frames_enabled = false;
-  const bool are_events_in_pixels =
-      init_params.window_tree_client->is_using_pixels();
+  const bool are_events_in_pixels = false;
   CreateCompositor(window_mus->GenerateFrameSinkIdFromServerId(),
                    force_software_compositor, external_begin_frames_enabled,
                    are_events_in_pixels);
@@ -168,37 +161,12 @@
   delegate_->OnWindowTreeHostCancelWindowMove(this);
 }
 
-void WindowTreeHostMus::ConfineCursorToBounds(
-    const gfx::Rect& bounds_in_pixels) {
-  delegate_->OnWindowTreeHostConfineCursorToBounds(bounds_in_pixels,
-                                                   display_id_);
-}
-
 display::Display WindowTreeHostMus::GetDisplay() const {
   display::Display display;
   display::Screen::GetScreen()->GetDisplayWithDisplayId(display_id_, &display);
   return display;
 }
 
-void WindowTreeHostMus::OverrideAcceleratedWidget(
-    gfx::AcceleratedWidget widget) {
-  bool was_visible = compositor()->IsVisible();
-  if (was_visible)
-    compositor()->SetVisible(false);
-  compositor()->ReleaseAcceleratedWidget();
-  OnAcceleratedWidgetAvailable(widget, GetDisplay().device_scale_factor());
-  if (was_visible)
-    compositor()->SetVisible(true);
-
-  for (WindowTreeHostObserver& observer : observers())
-    observer.OnAcceleratedWidgetOverridden(this);
-}
-
-std::unique_ptr<DisplayInitParams>
-WindowTreeHostMus::ReleaseDisplayInitParams() {
-  return std::move(display_init_params_);
-}
-
 void WindowTreeHostMus::HideImpl() {
   WindowTreeHostPlatform::HideImpl();
   window()->Hide();
@@ -232,27 +200,6 @@
   OnHostCloseRequested();
 }
 
-void WindowTreeHostMus::MoveCursorToScreenLocationInPixels(
-    const gfx::Point& location_in_pixels) {
-  // |location_in_pixels| is relative to the display.
-  delegate_->OnWindowTreeHostMoveCursorToDisplayLocation(location_in_pixels,
-                                                         display_id_);
-}
-
-gfx::Transform WindowTreeHostMus::GetRootTransformForLocalEventCoordinates()
-    const {
-  if (WindowMus::Get(window())->window_mus_type() !=
-      WindowMusType::DISPLAY_MANUALLY_CREATED) {
-    return WindowTreeHost::GetRootTransformForLocalEventCoordinates();
-  }
-  // Local events already have the transform set on the window applied, so
-  // don't apply it again.
-  gfx::Transform transform;
-  const float scale = window()->layer()->device_scale_factor();
-  transform.Scale(scale, scale);
-  return transform;
-}
-
 int64_t WindowTreeHostMus::GetDisplayId() {
   return display_id_;
 }
diff --git a/ui/aura/mus/window_tree_host_mus.h b/ui/aura/mus/window_tree_host_mus.h
index 1ce0eec..51392d4 100644
--- a/ui/aura/mus/window_tree_host_mus.h
+++ b/ui/aura/mus/window_tree_host_mus.h
@@ -27,7 +27,6 @@
 class WindowTreeClient;
 class WindowTreeHostMusDelegate;
 
-struct DisplayInitParams;
 struct WindowTreeHostMusInitParams;
 
 class AURA_EXPORT WindowTreeHostMus : public WindowTreeHostPlatform,
@@ -82,22 +81,11 @@
   // PerformWindowMove().
   void CancelWindowMove();
 
-  // Tells the window manager to confine the cursor to these specific bounds.
-  void ConfineCursorToBounds(const gfx::Rect& pixel_bounds);
-
-  // Used during initial setup. Returns the DisplayInitParams
-  // supplied to the constructor.
-  std::unique_ptr<DisplayInitParams> ReleaseDisplayInitParams();
-
   // Intended only for WindowTreeClient to call.
   void set_display_id(int64_t id) { display_id_ = id; }
   int64_t display_id() const { return display_id_; }
   display::Display GetDisplay() const;
 
-  // Forces WindowTreeHost to re-setup the compositor to use the provided
-  // |widget|.
-  void OverrideAcceleratedWidget(gfx::AcceleratedWidget widget);
-
   // aura::WindowTreeHostPlatform:
   void HideImpl() override;
   void SetBoundsInPixels(const gfx::Rect& bounds,
@@ -107,9 +95,6 @@
   void OnClosed() override;
   void OnActivationChanged(bool active) override;
   void OnCloseRequest() override;
-  void MoveCursorToScreenLocationInPixels(
-      const gfx::Point& location_in_pixels) override;
-  gfx::Transform GetRootTransformForLocalEventCoordinates() const override;
   int64_t GetDisplayId() override;
 
   // InputMethodMusDelegate:
@@ -126,8 +111,6 @@
 
   std::unique_ptr<InputMethodMus> input_method_;
 
-  std::unique_ptr<DisplayInitParams> display_init_params_;
-
   DISALLOW_COPY_AND_ASSIGN(WindowTreeHostMus);
 };
 
diff --git a/ui/aura/mus/window_tree_host_mus_delegate.h b/ui/aura/mus/window_tree_host_mus_delegate.h
index e9131d8..4ccb30a 100644
--- a/ui/aura/mus/window_tree_host_mus_delegate.h
+++ b/ui/aura/mus/window_tree_host_mus_delegate.h
@@ -71,17 +71,6 @@
   virtual void OnWindowTreeHostCancelWindowMove(
       WindowTreeHostMus* window_tree_host) = 0;
 
-  // Called to move the location of the cursor.
-  virtual void OnWindowTreeHostMoveCursorToDisplayLocation(
-      const gfx::Point& location_in_pixels,
-      int64_t display_id) = 0;
-
-  // Called to confine the cursor to a set of bounds in pixels. Only available
-  // to the window manager.
-  virtual void OnWindowTreeHostConfineCursorToBounds(
-      const gfx::Rect& bounds_in_pixels,
-      int64_t display_id) = 0;
-
   // Called when a WindowTreeHostMus is created without a WindowPort.
   // TODO: this should take an unordered_map, see http://crbug.com/670515.
   virtual std::unique_ptr<WindowPortMus> CreateWindowPortForTopLevel(
diff --git a/ui/aura/mus/window_tree_host_mus_init_params.cc b/ui/aura/mus/window_tree_host_mus_init_params.cc
index 0f24ecc5..a882d81 100644
--- a/ui/aura/mus/window_tree_host_mus_init_params.cc
+++ b/ui/aura/mus/window_tree_host_mus_init_params.cc
@@ -38,10 +38,6 @@
 
 }  // namespace
 
-DisplayInitParams::DisplayInitParams() = default;
-
-DisplayInitParams::~DisplayInitParams() = default;
-
 WindowTreeHostMusInitParams::WindowTreeHostMusInitParams() = default;
 
 WindowTreeHostMusInitParams::WindowTreeHostMusInitParams(
diff --git a/ui/aura/mus/window_tree_host_mus_init_params.h b/ui/aura/mus/window_tree_host_mus_init_params.h
index 4a59380..1793bbd 100644
--- a/ui/aura/mus/window_tree_host_mus_init_params.h
+++ b/ui/aura/mus/window_tree_host_mus_init_params.h
@@ -16,36 +16,11 @@
 #include "services/ui/public/interfaces/window_manager_constants.mojom.h"
 #include "ui/aura/aura_export.h"
 
-namespace display {
-class Display;
-}
-
 namespace aura {
 
 class WindowPortMus;
 class WindowTreeClient;
 
-// Used for a WindowTreeHost that corresponds to a Display that is manually
-// created by the window manager.
-struct AURA_EXPORT DisplayInitParams {
-  DisplayInitParams();
-  ~DisplayInitParams();
-
-  // The display, if not provided then the Display identified by
-  // |WindowTreeHostMusInitParams::display_id| must be one of the Displays
-  // contained in Screen.
-  std::unique_ptr<display::Display> display;
-
-  ui::mojom::WmViewportMetrics viewport_metrics;
-
-  bool is_primary_display = false;
-
-  // |mirrors| contains a list of physical displays presenting contents mirrored
-  // from another physical display, or from part of a virtual unified display.
-  // See |display::DisplayManager::software_mirroring_display_list_| for info.
-  std::vector<display::Display> mirrors;
-};
-
 // Used to create a WindowTreeHostMus. The typical case is to use
 // CreateInitParamsForTopLevel().
 struct AURA_EXPORT WindowTreeHostMusInitParams {
@@ -67,10 +42,6 @@
   // Id of the display the window should be created on.
   int64_t display_id = 0;
 
-  // Used when the WindowTreeHostMus corresponds to a new display manually
-  // created by the window manager.
-  std::unique_ptr<DisplayInitParams> display_init_params;
-
   // Use classic IME (i.e. InputMethodChromeOS) instead of servicified IME
   // (i.e. InputMethodMus).
   bool use_classic_ime = false;
diff --git a/ui/aura/test/aura_mus_test_base.cc b/ui/aura/test/aura_mus_test_base.cc
index c77a656b..87620d9a 100644
--- a/ui/aura/test/aura_mus_test_base.cc
+++ b/ui/aura/test/aura_mus_test_base.cc
@@ -7,26 +7,18 @@
 namespace aura {
 namespace test {
 
-AuraMusWmTestBase::AuraMusWmTestBase() {}
+AuraMusClientTestBase::AuraMusClientTestBase() = default;
 
-AuraMusWmTestBase::~AuraMusWmTestBase() {}
-
-void AuraMusWmTestBase::SetUp() {
-  // Run AuraTestBase::SetUp() first because it puts an InProcessContextFactory
-  // in env.
-  EnableMusWithTestWindowTree();
-  AuraTestBase::SetUp();
-}
-
-AuraMusClientTestBase::AuraMusClientTestBase() {}
-
-AuraMusClientTestBase::~AuraMusClientTestBase() {}
+AuraMusClientTestBase::~AuraMusClientTestBase() = default;
 
 void AuraMusClientTestBase::SetUp() {
   // Run AuraTestBase::SetUp() first because it puts an InProcessContextFactory
   // in env.
-  ConfigureBackend(BackendType::MUS2);
-  set_window_manager_delegate(nullptr);
+  ConfigureEnvMode(Env::Mode::MUS);
+  // Don't create a WindowTreeHost by default.
+  // TODO(sky): update tests so that this isn't necessary (make the test code
+  // always create a host for the primary display). https://crbug.com/866634
+  SetCreateHostForPrimaryDisplay(false);
   AuraTestBase::SetUp();
 }
 
diff --git a/ui/aura/test/aura_mus_test_base.h b/ui/aura/test/aura_mus_test_base.h
index 8964dfba..d56724c 100644
--- a/ui/aura/test/aura_mus_test_base.h
+++ b/ui/aura/test/aura_mus_test_base.h
@@ -14,26 +14,6 @@
 // A base class for aura unit tests that use mus. You can also use AuraTestBase
 // directly and call EnableMusWithTestWindowTree() before SetUp(). Prefer this
 // if you don't need to subclass and want to target mus.
-//
-// This test class sets up the connection to mus as the window manager.
-class AuraMusWmTestBase : public AuraTestBase {
- public:
-  AuraMusWmTestBase();
-  ~AuraMusWmTestBase() override;
-
-  // AuraTestBase:
-  void SetUp() override;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(AuraMusWmTestBase);
-};
-
-// A base class for aura unit tests that use mus. You can also use AuraTestBase
-// directly and call EnableMusWithTestWindowTree() before SetUp(). Prefer this
-// if you don't need to subclass and want to target mus.
-//
-// This test class sets up the connection to mus as a normal client (not the
-// window manager).
 class AuraMusClientTestBase : public AuraTestBase {
  public:
   AuraMusClientTestBase();
diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc
index 3f44e55..d5158e8d 100644
--- a/ui/aura/test/aura_test_base.cc
+++ b/ui/aura/test/aura_test_base.cc
@@ -29,7 +29,6 @@
 AuraTestBase::AuraTestBase()
     : scoped_task_environment_(
           base::test::ScopedTaskEnvironment::MainThreadType::UI),
-      window_manager_delegate_(this),
       window_tree_client_delegate_(this) {}
 
 AuraTestBase::~AuraTestBase() {
@@ -83,7 +82,7 @@
   // The ContextFactory must exist before any Compositors are created.
   ui::ContextFactory* context_factory = nullptr;
   ui::ContextFactoryPrivate* context_factory_private = nullptr;
-  if (backend_type_ != BackendType::CLASSIC) {
+  if (env_mode_ == Env::Mode::MUS) {
     mus_context_factory_ = std::make_unique<AuraTestContextFactory>();
     context_factory = mus_context_factory_.get();
   } else {
@@ -93,13 +92,10 @@
   }
 
   helper_ = std::make_unique<AuraTestHelper>();
-  if (backend_type_ != BackendType::CLASSIC) {
-    helper_->EnableMusWithTestWindowTree(
-        window_tree_client_delegate_, window_manager_delegate_,
-        backend_type_ == BackendType::MUS2
-            ? WindowTreeClient::Config::kMus2
-            : WindowTreeClient::Config::kMashDeprecated);
-  }
+  if (env_mode_ == Env::Mode::MUS)
+    helper_->EnableMusWithTestWindowTree(window_tree_client_delegate_);
+  helper_->set_create_host_for_primary_display(
+      create_host_for_primary_display_);
   helper_->SetUp(context_factory, context_factory_private);
 }
 
@@ -110,18 +106,7 @@
   // and these tasks if un-executed would upset Valgrind.
   RunAllPendingInMessageLoop();
 
-  // AuraTestHelper may own a WindowTreeHost, don't delete it here else
-  // AuraTestHelper will have use after frees.
-  for (size_t i = window_tree_hosts_.size(); i > 0; --i) {
-    if (window_tree_hosts_[i - 1].get() == helper_->host()) {
-      window_tree_hosts_[i - 1].release();
-      window_tree_hosts_.erase(window_tree_hosts_.begin() + i - 1);
-      break;
-    }
-  }
-
   helper_->TearDown();
-  window_tree_hosts_.clear();
   ui::TerminateContextFactoryForTests();
   ui::ShutdownInputMethodForTesting();
   testing::Test::TearDown();
@@ -142,17 +127,17 @@
 
 void AuraTestBase::EnableMusWithTestWindowTree() {
   DCHECK(!setup_called_);
-  backend_type_ = BackendType::MUS;
+  env_mode_ = Env::Mode::MUS;
 }
 
 void AuraTestBase::DeleteWindowTreeClient() {
-  DCHECK_NE(backend_type_, BackendType::CLASSIC);
+  DCHECK_EQ(env_mode_, Env::Mode::MUS);
   helper_->DeleteWindowTreeClient();
 }
 
-void AuraTestBase::ConfigureBackend(BackendType type) {
+void AuraTestBase::ConfigureEnvMode(Env::Mode mode) {
   DCHECK(!setup_called_);
-  backend_type_ = type;
+  env_mode_ = mode;
 }
 
 void AuraTestBase::RunAllPendingInMessageLoop() {
@@ -173,6 +158,11 @@
   return helper_->window_tree_client();
 }
 
+void AuraTestBase::SetCreateHostForPrimaryDisplay(bool value) {
+  DCHECK(!setup_called_);
+  create_host_for_primary_display_ = value;
+}
+
 void AuraTestBase::OnEmbed(
     std::unique_ptr<WindowTreeHostMus> window_tree_host) {}
 
@@ -189,84 +179,6 @@
       static_cast<ui::PointerEvent*>(ui::Event::Clone(event).release())));
 }
 
-void AuraTestBase::SetWindowManagerClient(WindowManagerClient* client) {}
-
-void AuraTestBase::OnWmConnected() {}
-
-void AuraTestBase::OnWmSetBounds(Window* window, const gfx::Rect& bounds) {}
-
-bool AuraTestBase::OnWmSetProperty(
-    Window* window,
-    const std::string& name,
-    std::unique_ptr<std::vector<uint8_t>>* new_data) {
-  return true;
-}
-
-void AuraTestBase::OnWmSetModalType(Window* window, ui::ModalType type) {}
-
-void AuraTestBase::OnWmSetCanFocus(Window* window, bool can_focus) {}
-
-Window* AuraTestBase::OnWmCreateTopLevelWindow(
-    ui::mojom::WindowType window_type,
-    std::map<std::string, std::vector<uint8_t>>* properties) {
-  Window* window = new Window(nullptr);
-  SetWindowType(window, window_type);
-  window->Init(ui::LAYER_NOT_DRAWN);
-  return window;
-}
-
-void AuraTestBase::OnWmClientJankinessChanged(
-    const std::set<Window*>& client_windows,
-    bool janky) {}
-
-void AuraTestBase::OnWmWillCreateDisplay(const display::Display& display) {}
-
-void AuraTestBase::OnWmNewDisplay(
-    std::unique_ptr<WindowTreeHostMus> window_tree_host,
-    const display::Display& display) {
-  // Take ownership of the WindowTreeHost.
-  window_tree_hosts_.push_back(std::move(window_tree_host));
-}
-
-void AuraTestBase::OnWmDisplayRemoved(WindowTreeHostMus* window_tree_host) {
-  for (auto iter = window_tree_hosts_.begin(); iter != window_tree_hosts_.end();
-       ++iter) {
-    if (iter->get() == window_tree_host) {
-      window_tree_hosts_.erase(iter);
-      return;
-    }
-  }
-  NOTREACHED();
-}
-
-void AuraTestBase::OnWmDisplayModified(const display::Display& display) {}
-
-ui::mojom::EventResult AuraTestBase::OnAccelerator(
-    uint32_t id,
-    const ui::Event& event,
-    base::flat_map<std::string, std::vector<uint8_t>>* properties) {
-  return ui::mojom::EventResult::HANDLED;
-}
-
-void AuraTestBase::OnCursorTouchVisibleChanged(bool enabled) {}
-
-void AuraTestBase::OnWmPerformMoveLoop(
-    Window* window,
-    ui::mojom::MoveLoopSource source,
-    const gfx::Point& cursor_location,
-    const base::Callback<void(bool)>& on_done) {}
-
-void AuraTestBase::OnWmCancelMoveLoop(Window* window) {}
-
-void AuraTestBase::OnWmSetClientArea(
-    Window* window,
-    const gfx::Insets& insets,
-    const std::vector<gfx::Rect>& additional_client_areas) {}
-
-bool AuraTestBase::IsWindowActive(aura::Window* window) { return false; }
-
-void AuraTestBase::OnWmDeactivateWindow(Window* window) {}
-
 PropertyConverter* AuraTestBase::GetPropertyConverter() {
   return &property_converter_;
 }
@@ -280,7 +192,7 @@
 void AuraTestBaseWithType::SetUp() {
   DCHECK(!setup_called_);
   setup_called_ = true;
-  ConfigureBackend(GetParam());
+  ConfigureEnvMode(GetParam());
   AuraTestBase::SetUp();
 }
 
@@ -289,7 +201,7 @@
 AuraTestBaseMus::~AuraTestBaseMus() {}
 
 void AuraTestBaseMus::SetUp() {
-  ConfigureBackend(test::BackendType::MUS);
+  ConfigureEnvMode(Env::Mode::MUS);
   AuraTestBase::SetUp();
 }
 
diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h
index 985c497e..528716c 100644
--- a/ui/aura/test/aura_test_base.h
+++ b/ui/aura/test/aura_test_base.h
@@ -12,8 +12,8 @@
 #include "base/macros.h"
 #include "base/test/scoped_task_environment.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "ui/aura/env.h"
 #include "ui/aura/mus/property_converter.h"
-#include "ui/aura/mus/window_manager_delegate.h"
 #include "ui/aura/mus/window_tree_client_delegate.h"
 #include "ui/aura/test/aura_test_helper.h"
 
@@ -26,7 +26,6 @@
 namespace aura {
 class Window;
 class WindowDelegate;
-class WindowManagerDelegate;
 class WindowTreeClientDelegate;
 
 namespace client {
@@ -37,15 +36,9 @@
 
 class AuraTestContextFactory;
 
-// TODO(sky): remove MUS. https://crbug.com/842365.
-// MUS2 targets ws2. See WindowTreeClient::Config::kMus2 for details.
-enum class BackendType { CLASSIC, MUS, MUS2 };
-
 // A base class for aura unit tests.
 // TODO(beng): Instances of this test will create and own a RootWindow.
-class AuraTestBase : public testing::Test,
-                     public WindowTreeClientDelegate,
-                     public WindowManagerDelegate {
+class AuraTestBase : public testing::Test, public WindowTreeClientDelegate {
  public:
   AuraTestBase();
   ~AuraTestBase() override;
@@ -59,11 +52,6 @@
                                    aura::WindowDelegate* delegate);
 
  protected:
-  void set_window_manager_delegate(
-      WindowManagerDelegate* window_manager_delegate) {
-    window_manager_delegate_ = window_manager_delegate;
-  }
-
   void set_window_tree_client_delegate(
       WindowTreeClientDelegate* window_tree_client_delegate) {
     window_tree_client_delegate_ = window_tree_client_delegate;
@@ -79,7 +67,7 @@
 
   // Used to configure the backend. This is exposed to make parameterized tests
   // easy to write. This *must* be called from SetUp().
-  void ConfigureBackend(BackendType type);
+  void ConfigureEnvMode(Env::Mode mode);
 
   void RunAllPendingInMessageLoop();
 
@@ -105,6 +93,10 @@
     return observed_pointer_events_;
   }
 
+  // See AuraTestHelper for details on what this does. Must be called before
+  // SetUp().
+  void SetCreateHostForPrimaryDisplay(bool value);
+
   // WindowTreeClientDelegate:
   void OnEmbed(std::unique_ptr<WindowTreeHostMus> window_tree_host) override;
   void OnUnembed(Window* root) override;
@@ -113,76 +105,29 @@
   void OnPointerEventObserved(const ui::PointerEvent& event,
                               int64_t display_id,
                               Window* target) override;
-
-  // WindowManagerDelegate:
-  void SetWindowManagerClient(WindowManagerClient* client) override;
-  void OnWmConnected() override;
-  void OnWmAcceleratedWidgetAvailableForDisplay(
-      int64_t display_id,
-      gfx::AcceleratedWidget widget) override {}
-  void OnWmSetBounds(Window* window, const gfx::Rect& bounds) override;
-  bool OnWmSetProperty(
-      Window* window,
-      const std::string& name,
-      std::unique_ptr<std::vector<uint8_t>>* new_data) override;
-  void OnWmSetModalType(Window* window, ui::ModalType type) override;
-  void OnWmSetCanFocus(Window* window, bool can_focus) override;
-  Window* OnWmCreateTopLevelWindow(
-      ui::mojom::WindowType window_type,
-      std::map<std::string, std::vector<uint8_t>>* properties) override;
-  void OnWmClientJankinessChanged(const std::set<Window*>& client_windows,
-                                  bool janky) override;
-  void OnWmBuildDragImage(const gfx::Point& cursor_location,
-                          const gfx::ImageSkia& drag_image,
-                          const gfx::Vector2d& drag_image_offset,
-                          ui::mojom::PointerKind source) override {}
-  void OnWmMoveDragImage(const gfx::Point& cursor_location) override {}
-  void OnWmDestroyDragImage() override {}
-  void OnWmWillCreateDisplay(const display::Display& display) override;
-  void OnWmNewDisplay(std::unique_ptr<WindowTreeHostMus> window_tree_host,
-                      const display::Display& display) override;
-  void OnWmDisplayRemoved(WindowTreeHostMus* window_tree_host) override;
-  void OnWmDisplayModified(const display::Display& display) override;
-  ui::mojom::EventResult OnAccelerator(
-      uint32_t id,
-      const ui::Event& event,
-      base::flat_map<std::string, std::vector<uint8_t>>* properties) override;
-  void OnCursorTouchVisibleChanged(bool enabled) override;
-  void OnWmPerformMoveLoop(Window* window,
-                           ui::mojom::MoveLoopSource source,
-                           const gfx::Point& cursor_location,
-                           const base::Callback<void(bool)>& on_done) override;
-  void OnWmCancelMoveLoop(Window* window) override;
-  void OnWmSetClientArea(
-      Window* window,
-      const gfx::Insets& insets,
-      const std::vector<gfx::Rect>& additional_client_areas) override;
-  bool IsWindowActive(aura::Window* window) override;
-  void OnWmDeactivateWindow(Window* window) override;
   PropertyConverter* GetPropertyConverter() override;
 
  private:
   base::test::ScopedTaskEnvironment scoped_task_environment_;
 
-  // Only used for mus. Both are are initialized to this, but may be reset.
-  WindowManagerDelegate* window_manager_delegate_;
+  // Only used for mus, initially set to this, but may be reset.
   WindowTreeClientDelegate* window_tree_client_delegate_;
 
-  BackendType backend_type_ = BackendType::CLASSIC;
+  Env::Mode env_mode_ = Env::Mode::LOCAL;
   bool setup_called_ = false;
   bool teardown_called_ = false;
   PropertyConverter property_converter_;
   std::unique_ptr<AuraTestHelper> helper_;
   std::unique_ptr<AuraTestContextFactory> mus_context_factory_;
-  std::vector<std::unique_ptr<WindowTreeHostMus>> window_tree_hosts_;
   std::vector<std::unique_ptr<ui::PointerEvent>> observed_pointer_events_;
+  bool create_host_for_primary_display_ = true;
 
   DISALLOW_COPY_AND_ASSIGN(AuraTestBase);
 };
 
 // Use as a base class for tests that want to target both backends.
 class AuraTestBaseWithType : public AuraTestBase,
-                             public ::testing::WithParamInterface<BackendType> {
+                             public ::testing::WithParamInterface<Env::Mode> {
  public:
   AuraTestBaseWithType();
   ~AuraTestBaseWithType() override;
diff --git a/ui/aura/test/aura_test_helper.cc b/ui/aura/test/aura_test_helper.cc
index 1d87c5a..1e66789 100644
--- a/ui/aura/test/aura_test_helper.cc
+++ b/ui/aura/test/aura_test_helper.cc
@@ -17,7 +17,6 @@
 #include "ui/aura/mus/window_tree_client.h"
 #include "ui/aura/test/env_test_helper.h"
 #include "ui/aura/test/event_generator_delegate_aura.h"
-#include "ui/aura/test/mus/test_window_manager_delegate.h"
 #include "ui/aura/test/mus/test_window_tree.h"
 #include "ui/aura/test/mus/test_window_tree_client_delegate.h"
 #include "ui/aura/test/mus/test_window_tree_client_setup.h"
@@ -70,16 +69,11 @@
 }
 
 void AuraTestHelper::EnableMusWithTestWindowTree(
-    WindowTreeClientDelegate* window_tree_delegate,
-    WindowManagerDelegate* window_manager_delegate,
-    WindowTreeClient::Config config) {
+    WindowTreeClientDelegate* window_tree_delegate) {
   DCHECK(!setup_called_);
   DCHECK_EQ(Mode::LOCAL, mode_);
-  mode_ = (config == WindowTreeClient::Config::kMashDeprecated)
-              ? Mode::MUS_CREATE_WINDOW_TREE_CLIENT
-              : Mode::MUS2_CREATE_WINDOW_TREE_CLIENT;
+  mode_ = Mode::MUS_CREATE_WINDOW_TREE_CLIENT;
   window_tree_delegate_ = window_tree_delegate;
-  window_manager_delegate_ = window_manager_delegate;
 }
 
 void AuraTestHelper::EnableMusWithWindowTreeClient(
@@ -104,10 +98,7 @@
       mode_ == Mode::LOCAL) {
     test_window_tree_client_delegate_ =
         std::make_unique<TestWindowTreeClientDelegate>();
-    test_window_manager_delegate_ =
-        std::make_unique<TestWindowManagerDelegate>();
-    EnableMusWithTestWindowTree(test_window_tree_client_delegate_.get(),
-                                test_window_manager_delegate_.get());
+    EnableMusWithTestWindowTree(test_window_tree_client_delegate_.get());
   }
 
   setup_called_ = true;
@@ -123,10 +114,8 @@
   const Env::Mode env_mode =
       (mode_ == Mode::LOCAL) ? Env::Mode::LOCAL : Env::Mode::MUS;
 
-  if (mode_ == Mode::MUS_CREATE_WINDOW_TREE_CLIENT ||
-      mode_ == Mode::MUS2_CREATE_WINDOW_TREE_CLIENT) {
+  if (mode_ == Mode::MUS_CREATE_WINDOW_TREE_CLIENT)
     InitWindowTreeClient();
-  }
   if (!Env::GetInstanceDontCreate())
     env_ = Env::CreateInstance(env_mode);
   else
@@ -164,7 +153,7 @@
     test_screen_.reset(TestScreen::Create(host_size, window_tree_client_));
     if (!screen)
       display::Screen::SetScreenInstance(test_screen_.get());
-    if (env_mode == Env::Mode::LOCAL || window_manager_delegate_) {
+    if (env_mode == Env::Mode::LOCAL || create_host_for_primary_display_) {
       host_.reset(test_screen_->CreateHostForPrimaryDisplay());
       host_->window()->SetEventTargeter(
           std::unique_ptr<ui::EventTargeter>(new WindowTargeter()));
@@ -179,8 +168,7 @@
     }
   }
 
-  if (mode_ == Mode::MUS_CREATE_WINDOW_TREE_CLIENT ||
-      mode_ == Mode::MUS2_CREATE_WINDOW_TREE_CLIENT) {
+  if (mode_ == Mode::MUS_CREATE_WINDOW_TREE_CLIENT) {
     window_tree_client_->focus_synchronizer()->SetActiveFocusClient(
         focus_client_.get(), root_window());
     window_tree()->AckAllChanges();
@@ -247,13 +235,7 @@
 
 void AuraTestHelper::InitWindowTreeClient() {
   window_tree_client_setup_ = std::make_unique<TestWindowTreeClientSetup>();
-  if (mode_ == Mode::MUS2_CREATE_WINDOW_TREE_CLIENT) {
-    window_tree_client_setup_->InitWithoutEmbed(
-        window_tree_delegate_, WindowTreeClient::Config::kMus2);
-  } else {
-    window_tree_client_setup_->InitForWindowManager(window_tree_delegate_,
-                                                    window_manager_delegate_);
-  }
+  window_tree_client_setup_->InitWithoutEmbed(window_tree_delegate_);
   window_tree_client_ = window_tree_client_setup_->window_tree_client();
   window_tree_client_->capture_synchronizer()->AttachToCaptureClient(
       capture_client_.get());
diff --git a/ui/aura/test/aura_test_helper.h b/ui/aura/test/aura_test_helper.h
index d2dafcfd..16a184c 100644
--- a/ui/aura/test/aura_test_helper.h
+++ b/ui/aura/test/aura_test_helper.h
@@ -26,12 +26,10 @@
 namespace aura {
 class Env;
 class TestScreen;
-class TestWindowManagerDelegate;
 class TestWindowTree;
 class TestWindowTreeClientDelegate;
 class TestWindowTreeClientSetup;
 class Window;
-class WindowManagerDelegate;
 class WindowTreeClient;
 class WindowTreeClientDelegate;
 
@@ -57,12 +55,8 @@
 
   // Makes aura target mus with a mock WindowTree (TestWindowTree). Must be
   // called before SetUp().
-  // TODO(sky): remove |config|. https://crbug.com/842365
   void EnableMusWithTestWindowTree(
-      WindowTreeClientDelegate* window_tree_delegate,
-      WindowManagerDelegate* window_manager_delegate,
-      WindowTreeClient::Config config =
-          WindowTreeClient::Config::kMashDeprecated);
+      WindowTreeClientDelegate* window_tree_delegate);
 
   // Makes aura target mus with the specified WindowTreeClient. Must be called
   // before SetUp().
@@ -73,6 +67,10 @@
   // testing shutdown ordering.
   void DeleteWindowTreeClient();
 
+  void set_create_host_for_primary_display(bool value) {
+    create_host_for_primary_display_ = value;
+  }
+
   // Creates and initializes (shows and sizes) the RootWindow for use in tests.
   void SetUp(ui::ContextFactory* context_factory,
              ui::ContextFactoryPrivate* context_factory_private);
@@ -110,15 +108,9 @@
     // service:ui.
     MUS_CREATE_WINDOW_TREE_CLIENT,
 
-    // Mus with a test WindowTree implementation that does not target the real
-    // service:ui.
-    // TODO(sky): combine this with MUS_CREATE_WINDOW_TREE_CLIENT.
-    // https://crbug.com/842365.
-    MUS2_CREATE_WINDOW_TREE_CLIENT,
-
-    // Mus without creating a WindowTree. This is used when the test wants to
-    // create the WindowTreeClient itself. This mode is enabled by way of
-    // EnableMusWithWindowTreeClient().
+    // Mus without creating a WindowTree and WindowTreeHost. This is used when
+    // the test wants to create the WindowTreeClient itself. This mode is
+    // enabled by way of EnableMusWithWindowTreeClient().
     MUS,
   };
 
@@ -134,8 +126,6 @@
   // This is only created if Env has already been created and it's Mode is MUS.
   std::unique_ptr<TestWindowTreeClientDelegate>
       test_window_tree_client_delegate_;
-  // This is only created if Env has already been created and it's Mode is MUS.
-  std::unique_ptr<TestWindowManagerDelegate> test_window_manager_delegate_;
   std::unique_ptr<TestWindowTreeClientSetup> window_tree_client_setup_;
   Env::Mode env_mode_to_restore_ = Env::Mode::LOCAL;
   std::unique_ptr<aura::Env> env_;
@@ -147,10 +137,13 @@
   std::unique_ptr<TestScreen> test_screen_;
   std::unique_ptr<ui::ScopedAnimationDurationScaleMode> zero_duration_mode_;
   WindowTreeClientDelegate* window_tree_delegate_ = nullptr;
-  WindowManagerDelegate* window_manager_delegate_ = nullptr;
 
   WindowTreeClient* window_tree_client_ = nullptr;
 
+  // Whether SetUp() should create a WindowTreeHost for the primary display. The
+  // value of this is *not* used if Mode is MUS.
+  bool create_host_for_primary_display_ = true;
+
   DISALLOW_COPY_AND_ASSIGN(AuraTestHelper);
 };
 
diff --git a/ui/aura/test/mus/test_window_manager_client.cc b/ui/aura/test/mus/test_window_manager_client.cc
deleted file mode 100644
index 2cbb216..0000000
--- a/ui/aura/test/mus/test_window_manager_client.cc
+++ /dev/null
@@ -1,126 +0,0 @@
-// Copyright 2015 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/aura/test/mus/test_window_manager_client.h"
-
-#include <algorithm>
-
-namespace aura {
-
-TestWindowManagerClient::TestWindowManagerClient() {}
-
-TestWindowManagerClient::~TestWindowManagerClient() {}
-
-size_t TestWindowManagerClient::GetChangeCountForType(
-    WindowManagerClientChangeType type) {
-  size_t count = 0;
-  for (const auto change_type : changes_) {
-    if (change_type == type)
-      ++count;
-  }
-  return count;
-}
-
-size_t TestWindowManagerClient::IndexOfFirstChangeOfType(
-    WindowManagerClientChangeType type) const {
-  auto iter = std::find(changes_.begin(), changes_.end(), type);
-  return iter == changes_.end() ? static_cast<size_t>(-1)
-                                : iter - changes_.begin();
-}
-
-void TestWindowManagerClient::AddActivationParent(ui::Id transport_window_id) {
-  changes_.push_back(WindowManagerClientChangeType::ADD_ACTIVATION_PARENT);
-}
-
-void TestWindowManagerClient::RemoveActivationParent(
-    ui::Id transport_window_id) {}
-
-void TestWindowManagerClient::SetExtendedHitRegionForChildren(
-    ui::Id window_id,
-    const gfx::Insets& mouse_insets,
-    const gfx::Insets& touch_insets) {}
-
-void TestWindowManagerClient::AddAccelerators(
-    std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-    AddAcceleratorsCallback callback) {}
-
-void TestWindowManagerClient::RemoveAccelerator(uint32_t id) {}
-
-void TestWindowManagerClient::SetKeyEventsThatDontHideCursor(
-    std::vector<::ui::mojom::EventMatcherPtr> dont_hide_cursor_list) {}
-
-void TestWindowManagerClient::SetDisplayRoot(
-    const display::Display& display,
-    ui::mojom::WmViewportMetricsPtr viewport_metrics,
-    bool is_primary_display,
-    ui::Id window_id,
-    const std::vector<display::Display>& mirrors,
-    SetDisplayRootCallback callback) {}
-
-void TestWindowManagerClient::SetDisplayConfiguration(
-    const std::vector<display::Display>& displays,
-    std::vector<::ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-    int64_t primary_display_id,
-    int64_t internal_display_id,
-    const std::vector<display::Display>& mirrors,
-    SetDisplayConfigurationCallback callback) {
-  last_internal_display_id_ = internal_display_id;
-  changes_.push_back(WindowManagerClientChangeType::SET_DISPLAY_CONFIGURATION);
-}
-
-void TestWindowManagerClient::SwapDisplayRoots(
-    int64_t display_id1,
-    int64_t display_id2,
-    SwapDisplayRootsCallback callback) {}
-
-void TestWindowManagerClient::SetBlockingContainers(
-    std::vector<ui::mojom::BlockingContainersPtr> blocking_containers,
-    SetBlockingContainersCallback callback) {}
-
-void TestWindowManagerClient::WmResponse(uint32_t change_id, bool response) {}
-
-void TestWindowManagerClient::WmSetBoundsResponse(uint32_t change_id) {}
-
-void TestWindowManagerClient::WmRequestClose(ui::Id transport_window_id) {}
-
-void TestWindowManagerClient::WmSetFrameDecorationValues(
-    ui::mojom::FrameDecorationValuesPtr values) {
-  changes_.push_back(WindowManagerClientChangeType::SET_FRAME_DECORATIONS);
-}
-
-void TestWindowManagerClient::WmSetNonClientCursor(ui::Id window_id,
-                                                   ui::CursorData cursor_data) {
-}
-
-void TestWindowManagerClient::WmLockCursor() {}
-
-void TestWindowManagerClient::WmUnlockCursor() {}
-
-void TestWindowManagerClient::WmSetCursorVisible(bool visible) {}
-
-void TestWindowManagerClient::WmSetCursorSize(ui::CursorSize cursor_size) {}
-
-void TestWindowManagerClient::WmSetGlobalOverrideCursor(
-    base::Optional<ui::CursorData> cursor) {}
-
-void TestWindowManagerClient::WmMoveCursorToDisplayLocation(
-    const gfx::Point& display_pixels,
-    int64_t display_id) {}
-
-void TestWindowManagerClient::WmConfineCursorToBounds(
-    const gfx::Rect& bounds_in_pixles,
-    int64_t display_id) {}
-
-void TestWindowManagerClient::WmSetCursorTouchVisible(bool enabled) {}
-
-void TestWindowManagerClient::OnWmCreatedTopLevelWindow(
-    uint32_t change_id,
-    ui::Id transport_window_id) {}
-
-void TestWindowManagerClient::OnAcceleratorAck(
-    uint32_t event_id,
-    ui::mojom::EventResult result,
-    const base::flat_map<std::string, std::vector<uint8_t>>& properties) {}
-
-}  // namespace aura
diff --git a/ui/aura/test/mus/test_window_manager_client.h b/ui/aura/test/mus/test_window_manager_client.h
deleted file mode 100644
index 2b91a0d..0000000
--- a/ui/aura/test/mus/test_window_manager_client.h
+++ /dev/null
@@ -1,99 +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.
-
-#ifndef UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_CLIENT_H_
-#define UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_CLIENT_H_
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "base/macros.h"
-#include "services/ui/public/interfaces/window_manager.mojom.h"
-#include "ui/aura/mus/mus_types.h"
-
-namespace aura {
-
-enum class WindowManagerClientChangeType {
-  ADD_ACTIVATION_PARENT,
-  SET_DISPLAY_CONFIGURATION,
-  SET_FRAME_DECORATIONS,
-};
-
-// WindowManagerClient implementation for tests.
-class TestWindowManagerClient : public ui::mojom::WindowManagerClient {
- public:
-  TestWindowManagerClient();
-  ~TestWindowManagerClient() override;
-
-  size_t GetChangeCountForType(WindowManagerClientChangeType type);
-  int64_t last_internal_display_id() const { return last_internal_display_id_; }
-  size_t IndexOfFirstChangeOfType(WindowManagerClientChangeType type) const;
-
- private:
-  // ui::mojom::WindowManagerClient:
-  void AddActivationParent(ui::Id transport_window_id) override;
-  void RemoveActivationParent(ui::Id transport_window_id) override;
-  void SetExtendedHitRegionForChildren(
-      ui::Id window_id,
-      const gfx::Insets& mouse_insets,
-      const gfx::Insets& touch_insets) override;
-  void AddAccelerators(std::vector<ui::mojom::WmAcceleratorPtr> accelerators,
-                       AddAcceleratorsCallback callback) override;
-  void RemoveAccelerator(uint32_t id) override;
-  void SetKeyEventsThatDontHideCursor(
-      std::vector<::ui::mojom::EventMatcherPtr> dont_hide_cursor_list) override;
-  void SetDisplayRoot(const display::Display& display,
-                      ui::mojom::WmViewportMetricsPtr viewport_metrics,
-                      bool is_primary_display,
-                      ui::Id window_id,
-                      const std::vector<display::Display>& mirrors,
-                      SetDisplayRootCallback callback) override;
-  void SetDisplayConfiguration(
-      const std::vector<display::Display>& displays,
-      std::vector<::ui::mojom::WmViewportMetricsPtr> viewport_metrics,
-      int64_t primary_display_id,
-      int64_t internal_display_id,
-      const std::vector<display::Display>& mirrors,
-      SetDisplayConfigurationCallback callback) override;
-  void SwapDisplayRoots(int64_t display_id1,
-                        int64_t display_id2,
-                        SwapDisplayRootsCallback callback) override;
-  void SetBlockingContainers(
-      std::vector<ui::mojom::BlockingContainersPtr> blocking_containers,
-      SetBlockingContainersCallback callback) override;
-  void WmResponse(uint32_t change_id, bool response) override;
-  void WmSetBoundsResponse(uint32_t change_id) override;
-  void WmRequestClose(ui::Id transport_window_id) override;
-  void WmSetFrameDecorationValues(
-      ui::mojom::FrameDecorationValuesPtr values) override;
-  void WmSetNonClientCursor(ui::Id window_id,
-                            ui::CursorData cursor_data) override;
-  void WmLockCursor() override;
-  void WmUnlockCursor() override;
-  void WmSetCursorVisible(bool visible) override;
-  void WmSetCursorSize(ui::CursorSize cursor_size) override;
-  void WmSetGlobalOverrideCursor(
-      base::Optional<ui::CursorData> cursor) override;
-  void WmMoveCursorToDisplayLocation(const gfx::Point& display_pixels,
-                                     int64_t display_id) override;
-  void WmConfineCursorToBounds(const gfx::Rect& bounds_in_pixles,
-                               int64_t display_id) override;
-  void WmSetCursorTouchVisible(bool enabled) override;
-  void OnWmCreatedTopLevelWindow(uint32_t change_id,
-                                 ui::Id transport_window_id) override;
-  void OnAcceleratorAck(uint32_t event_id,
-                        ui::mojom::EventResult result,
-                        const base::flat_map<std::string, std::vector<uint8_t>>&
-                            properties) override;
-
-  std::vector<WindowManagerClientChangeType> changes_;
-  int64_t last_internal_display_id_ = -1;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWindowManagerClient);
-};
-
-}  // namespace aura
-
-#endif  // UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_CLIENT_H_
diff --git a/ui/aura/test/mus/test_window_manager_delegate.cc b/ui/aura/test/mus/test_window_manager_delegate.cc
deleted file mode 100644
index df2742cc..0000000
--- a/ui/aura/test/mus/test_window_manager_delegate.cc
+++ /dev/null
@@ -1,106 +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 "ui/aura/test/mus/test_window_manager_delegate.h"
-
-#include "ui/aura/mus/window_tree_host_mus.h"
-
-namespace aura {
-
-TestWindowManagerDelegate::TestWindowManagerDelegate() = default;
-
-TestWindowManagerDelegate::~TestWindowManagerDelegate() = default;
-
-void TestWindowManagerDelegate::SetWindowManagerClient(
-    aura::WindowManagerClient* client) {}
-
-void TestWindowManagerDelegate::OnWmAcceleratedWidgetAvailableForDisplay(
-    int64_t display_id,
-    gfx::AcceleratedWidget widget) {}
-
-void TestWindowManagerDelegate::OnWmConnected() {}
-
-void TestWindowManagerDelegate::OnWmSetBounds(aura::Window* window,
-                                              const gfx::Rect& bounds) {}
-
-bool TestWindowManagerDelegate::OnWmSetProperty(
-    aura::Window* window,
-    const std::string& name,
-    std::unique_ptr<std::vector<uint8_t>>* new_data) {
-  return false;
-}
-
-void TestWindowManagerDelegate::OnWmSetModalType(aura::Window* window,
-                                                 ui::ModalType type) {}
-
-void TestWindowManagerDelegate::OnWmSetCanFocus(aura::Window* window,
-                                                bool can_focus) {}
-
-aura::Window* TestWindowManagerDelegate::OnWmCreateTopLevelWindow(
-    ui::mojom::WindowType window_type,
-    std::map<std::string, std::vector<uint8_t>>* properties) {
-  return nullptr;
-}
-
-void TestWindowManagerDelegate::OnWmClientJankinessChanged(
-    const std::set<aura::Window*>& client_windows,
-    bool not_responding) {}
-
-void TestWindowManagerDelegate::OnWmBuildDragImage(
-    const gfx::Point& screen_location,
-    const gfx::ImageSkia& drag_image,
-    const gfx::Vector2d& drag_image_offset,
-    ui::mojom::PointerKind source) {}
-
-void TestWindowManagerDelegate::OnWmMoveDragImage(
-    const gfx::Point& screen_location) {}
-
-void TestWindowManagerDelegate::OnWmDestroyDragImage() {}
-
-void TestWindowManagerDelegate::OnWmWillCreateDisplay(
-    const display::Display& display) {}
-
-void TestWindowManagerDelegate::OnWmNewDisplay(
-    std::unique_ptr<aura::WindowTreeHostMus> window_tree_host,
-    const display::Display& display) {
-  // We assume someone else is taking ownership (which is the case for
-  // AuraTestHelper).
-  window_tree_hosts_.push_back(window_tree_host.release());
-}
-
-void TestWindowManagerDelegate::OnWmDisplayRemoved(
-    aura::WindowTreeHostMus* window_tree_host) {}
-
-void TestWindowManagerDelegate::OnWmDisplayModified(
-    const display::Display& display) {}
-
-ui::mojom::EventResult TestWindowManagerDelegate::OnAccelerator(
-    uint32_t accelerator_id,
-    const ui::Event& event,
-    base::flat_map<std::string, std::vector<uint8_t>>* properties) {
-  return ui::mojom::EventResult::UNHANDLED;
-}
-
-void TestWindowManagerDelegate::OnCursorTouchVisibleChanged(bool enabled) {}
-
-void TestWindowManagerDelegate::OnWmPerformMoveLoop(
-    aura::Window* window,
-    ui::mojom::MoveLoopSource source,
-    const gfx::Point& cursor_location,
-    const base::Callback<void(bool)>& on_done) {}
-
-void TestWindowManagerDelegate::OnWmCancelMoveLoop(aura::Window* window) {}
-
-void TestWindowManagerDelegate::OnWmSetClientArea(
-    aura::Window* window,
-    const gfx::Insets& insets,
-    const std::vector<gfx::Rect>& additional_client_areas) {}
-
-bool TestWindowManagerDelegate::IsWindowActive(aura::Window* window) {
-  return true;
-}
-
-void TestWindowManagerDelegate::OnWmDeactivateWindow(aura::Window* window) {}
-
-}  // namespace aura
diff --git a/ui/aura/test/mus/test_window_manager_delegate.h b/ui/aura/test/mus/test_window_manager_delegate.h
deleted file mode 100644
index 1cd2960..0000000
--- a/ui/aura/test/mus/test_window_manager_delegate.h
+++ /dev/null
@@ -1,75 +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.
-
-#ifndef UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_DELEGATE_H_
-#define UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_DELEGATE_H_
-
-#include <memory>
-#include <vector>
-
-#include "base/macros.h"
-#include "ui/aura/mus/window_manager_delegate.h"
-
-namespace aura {
-
-class TestWindowManagerDelegate : public aura::WindowManagerDelegate {
- public:
-  TestWindowManagerDelegate();
-  ~TestWindowManagerDelegate() override;
-
-  // WindowManagerDelegate:
-  void SetWindowManagerClient(aura::WindowManagerClient* client) override;
-  void OnWmAcceleratedWidgetAvailableForDisplay(
-      int64_t display_id,
-      gfx::AcceleratedWidget widget) override;
-  void OnWmConnected() override;
-  void OnWmSetBounds(aura::Window* window, const gfx::Rect& bounds) override;
-  bool OnWmSetProperty(
-      aura::Window* window,
-      const std::string& name,
-      std::unique_ptr<std::vector<uint8_t>>* new_data) override;
-  void OnWmSetModalType(aura::Window* window, ui::ModalType type) override;
-  void OnWmSetCanFocus(aura::Window* window, bool can_focus) override;
-  aura::Window* OnWmCreateTopLevelWindow(
-      ui::mojom::WindowType window_type,
-      std::map<std::string, std::vector<uint8_t>>* properties) override;
-  void OnWmClientJankinessChanged(const std::set<aura::Window*>& client_windows,
-                                  bool not_responding) override;
-  void OnWmBuildDragImage(const gfx::Point& screen_location,
-                          const gfx::ImageSkia& drag_image,
-                          const gfx::Vector2d& drag_image_offset,
-                          ui::mojom::PointerKind source) override;
-  void OnWmMoveDragImage(const gfx::Point& screen_location) override;
-  void OnWmDestroyDragImage() override;
-  void OnWmWillCreateDisplay(const display::Display& display) override;
-  void OnWmNewDisplay(std::unique_ptr<aura::WindowTreeHostMus> window_tree_host,
-                      const display::Display& display) override;
-  void OnWmDisplayRemoved(aura::WindowTreeHostMus* window_tree_host) override;
-  void OnWmDisplayModified(const display::Display& display) override;
-  ui::mojom::EventResult OnAccelerator(
-      uint32_t accelerator_id,
-      const ui::Event& event,
-      base::flat_map<std::string, std::vector<uint8_t>>* properties) override;
-  void OnCursorTouchVisibleChanged(bool enabled) override;
-  void OnWmPerformMoveLoop(aura::Window* window,
-                           ui::mojom::MoveLoopSource source,
-                           const gfx::Point& cursor_location,
-                           const base::Callback<void(bool)>& on_done) override;
-  void OnWmCancelMoveLoop(aura::Window* window) override;
-  void OnWmSetClientArea(
-      aura::Window* window,
-      const gfx::Insets& insets,
-      const std::vector<gfx::Rect>& additional_client_areas) override;
-  bool IsWindowActive(aura::Window* window) override;
-  void OnWmDeactivateWindow(aura::Window* window) override;
-
- private:
-  std::vector<WindowTreeHostMus*> window_tree_hosts_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestWindowManagerDelegate);
-};
-
-}  // namespace aura
-
-#endif  // UI_AURA_TEST_MUS_TEST_WINDOW_MANAGER_DELEGATE_H_
diff --git a/ui/aura/test/mus/test_window_tree.cc b/ui/aura/test/mus/test_window_tree.cc
index 95c346e..71f55994 100644
--- a/ui/aura/test/mus/test_window_tree.cc
+++ b/ui/aura/test/mus/test_window_tree.cc
@@ -362,10 +362,6 @@
   last_wm_action_ = action;
 }
 
-void TestWindowTree::GetWindowManagerClient(
-    mojo::AssociatedInterfaceRequest<ui::mojom::WindowManagerClient> internal) {
-}
-
 void TestWindowTree::GetCursorLocationMemory(
     GetCursorLocationMemoryCallback callback) {
   std::move(callback).Run(mojo::ScopedSharedBufferHandle());
diff --git a/ui/aura/test/mus/test_window_tree.h b/ui/aura/test/mus/test_window_tree.h
index f6cac51..6633b78 100644
--- a/ui/aura/test/mus/test_window_tree.h
+++ b/ui/aura/test/mus/test_window_tree.h
@@ -49,9 +49,6 @@
   ~TestWindowTree() override;
 
   void set_client(ui::mojom::WindowTreeClient* client) { client_ = client; }
-  void set_window_manager(ui::mojom::WindowManager* window_manager) {
-    window_manager_ = window_manager;
-  }
 
   uint32_t window_id() const { return window_id_; }
 
@@ -225,9 +222,6 @@
                   ui::Id below_id) override;
   void StackAtTop(uint32_t change_id, ui::Id window_id) override;
   void PerformWmAction(ui::Id window_id, const std::string& action) override;
-  void GetWindowManagerClient(
-      mojo::AssociatedInterfaceRequest<ui::mojom::WindowManagerClient> internal)
-      override;
   void GetCursorLocationMemory(
       GetCursorLocationMemoryCallback callback) override;
   void PerformDragDrop(
@@ -258,7 +252,6 @@
   std::vector<Change> changes_;
 
   ui::mojom::WindowTreeClient* client_;
-  ui::mojom::WindowManager* window_manager_ = nullptr;
 
   base::Optional<base::flat_map<std::string, std::vector<uint8_t>>>
       last_new_window_properties_;
diff --git a/ui/aura/test/mus/test_window_tree_client_setup.cc b/ui/aura/test/mus/test_window_tree_client_setup.cc
index 6bfbd64..de1c3fd8 100644
--- a/ui/aura/test/mus/test_window_tree_client_setup.cc
+++ b/ui/aura/test/mus/test_window_tree_client_setup.cc
@@ -4,7 +4,6 @@
 
 #include "ui/aura/test/mus/test_window_tree_client_setup.h"
 
-#include "ui/aura/test/mus/test_window_manager_client.h"
 #include "ui/aura/test/mus/test_window_tree.h"
 #include "ui/aura/test/mus/window_tree_client_private.h"
 #include "ui/display/display.h"
@@ -17,29 +16,14 @@
 
 void TestWindowTreeClientSetup::Init(
     WindowTreeClientDelegate* window_tree_delegate) {
-  CommonInit(window_tree_delegate, nullptr,
-             WindowTreeClient::Config::kMashDeprecated);
+  CommonInit(window_tree_delegate);
   WindowTreeClientPrivate(window_tree_client_.get())
       .OnEmbed(window_tree_.get());
 }
 
-void TestWindowTreeClientSetup::InitForWindowManager(
-    WindowTreeClientDelegate* window_tree_delegate,
-    WindowManagerDelegate* window_manager_delegate) {
-  test_window_manager_client_ = std::make_unique<TestWindowManagerClient>();
-  CommonInit(window_tree_delegate, window_manager_delegate,
-             WindowTreeClient::Config::kMashDeprecated);
-  WindowTreeClientPrivate window_tree_client_private(window_tree_client_.get());
-  window_tree_client_private.SetTree(window_tree_.get());
-  window_tree_->set_window_manager(window_tree_client_.get());
-  window_tree_client_private.SetWindowManagerClient(
-      test_window_manager_client_.get());
-}
-
 void TestWindowTreeClientSetup::InitWithoutEmbed(
-    WindowTreeClientDelegate* window_tree_delegate,
-    WindowTreeClient::Config config) {
-  CommonInit(window_tree_delegate, nullptr, config);
+    WindowTreeClientDelegate* window_tree_delegate) {
+  CommonInit(window_tree_delegate);
   WindowTreeClientPrivate(window_tree_client_.get())
       .SetTree(window_tree_.get());
 }
@@ -55,12 +39,10 @@
 }
 
 void TestWindowTreeClientSetup::CommonInit(
-    WindowTreeClientDelegate* window_tree_delegate,
-    WindowManagerDelegate* window_manager_delegate,
-    WindowTreeClient::Config config) {
+    WindowTreeClientDelegate* window_tree_delegate) {
   window_tree_ = std::make_unique<TestWindowTree>();
-  window_tree_client_ = WindowTreeClientPrivate::CreateWindowTreeClient(
-      window_tree_delegate, window_manager_delegate, config);
+  window_tree_client_ =
+      WindowTreeClientPrivate::CreateWindowTreeClient(window_tree_delegate);
   window_tree_->set_client(window_tree_client_.get());
 }
 
diff --git a/ui/aura/test/mus/test_window_tree_client_setup.h b/ui/aura/test/mus/test_window_tree_client_setup.h
index c25e292..c373248 100644
--- a/ui/aura/test/mus/test_window_tree_client_setup.h
+++ b/ui/aura/test/mus/test_window_tree_client_setup.h
@@ -12,9 +12,7 @@
 
 namespace aura {
 
-class TestWindowManagerClient;
 class TestWindowTree;
-class WindowManagerDelegate;
 class WindowTreeClientDelegate;
 
 // TestWindowTreeClientSetup is used to create a WindowTreeClient that is not
@@ -26,12 +24,8 @@
 
   // Initializes the WindowTreeClient.
   void Init(WindowTreeClientDelegate* window_tree_delegate);
-  void InitForWindowManager(WindowTreeClientDelegate* window_tree_delegate,
-                            WindowManagerDelegate* window_manager_delegate);
   // TODO(sky): see if can combine with Init().
-  void InitWithoutEmbed(WindowTreeClientDelegate* window_tree_delegate,
-                        WindowTreeClient::Config config =
-                            WindowTreeClient::Config::kMashDeprecated);
+  void InitWithoutEmbed(WindowTreeClientDelegate* window_tree_delegate);
 
   // The WindowTree that WindowTreeClient talks to.
   TestWindowTree* window_tree() { return window_tree_.get(); }
@@ -41,22 +35,14 @@
 
   WindowTreeClient* window_tree_client();
 
-  TestWindowManagerClient* test_window_manager_client() {
-    return test_window_manager_client_.get();
-  }
-
  private:
   // Called by both implementations of init to perform common initialization.
-  void CommonInit(WindowTreeClientDelegate* window_tree_delegate,
-                  WindowManagerDelegate* window_manager_delegate,
-                  WindowTreeClient::Config config);
+  void CommonInit(WindowTreeClientDelegate* window_tree_delegate);
 
   std::unique_ptr<TestWindowTree> window_tree_;
 
   std::unique_ptr<WindowTreeClient> window_tree_client_;
 
-  std::unique_ptr<TestWindowManagerClient> test_window_manager_client_;
-
   DISALLOW_COPY_AND_ASSIGN(TestWindowTreeClientSetup);
 };
 
diff --git a/ui/aura/test/mus/window_tree_client_private.cc b/ui/aura/test/mus/window_tree_client_private.cc
index 9f2227ba..c7b7a7ce 100644
--- a/ui/aura/test/mus/window_tree_client_private.cc
+++ b/ui/aura/test/mus/window_tree_client_private.cc
@@ -32,12 +32,9 @@
 // static
 std::unique_ptr<WindowTreeClient>
 WindowTreeClientPrivate::CreateWindowTreeClient(
-    WindowTreeClientDelegate* window_tree_delegate,
-    WindowManagerDelegate* window_manager_delegate,
-    WindowTreeClient::Config config) {
+    WindowTreeClientDelegate* window_tree_delegate) {
   std::unique_ptr<WindowTreeClient> wtc(new WindowTreeClient(
-      nullptr, window_tree_delegate, window_manager_delegate, nullptr, nullptr,
-      false, config));
+      nullptr, window_tree_delegate, nullptr, nullptr, false));
   return wtc;
 }
 
@@ -48,27 +45,6 @@
                                  base::nullopt);
 }
 
-WindowTreeHostMus* WindowTreeClientPrivate::CallWmNewDisplayAdded(
-    const display::Display& display) {
-  ui::mojom::WindowDataPtr root_data(ui::mojom::WindowData::New());
-  root_data->parent_id = 0;
-  // Windows representing displays are owned by mus, which is identified by
-  // non-zero high word.
-  root_data->window_id = next_window_id_++ | 0x00010000;
-  root_data->visible = true;
-  root_data->bounds = gfx::Rect(display.bounds().size());
-  const bool parent_drawn = true;
-  return CallWmNewDisplayAdded(display, std::move(root_data), parent_drawn);
-}
-
-WindowTreeHostMus* WindowTreeClientPrivate::CallWmNewDisplayAdded(
-    const display::Display& display,
-    ui::mojom::WindowDataPtr root_data,
-    bool parent_drawn) {
-  return tree_client_impl_->WmNewDisplayAddedImpl(display, std::move(root_data),
-                                                  parent_drawn, base::nullopt);
-}
-
 void WindowTreeClientPrivate::CallOnPointerEventObserved(
     Window* window,
     std::unique_ptr<ui::Event> event) {
@@ -86,10 +62,6 @@
       old_capture ? WindowPortMus::Get(old_capture)->server_id() : 0);
 }
 
-void WindowTreeClientPrivate::CallOnConnect() {
-  tree_client_impl_->OnConnect();
-}
-
 void WindowTreeClientPrivate::CallOnEmbedFromToken(EmbedRoot* embed_root) {
   embed_root->OnScheduledEmbedForExistingClient(
       base::UnguessableToken::Create());
@@ -98,22 +70,10 @@
                                       base::Optional<viz::LocalSurfaceId>());
 }
 
-WindowTreeHostMusInitParams
-WindowTreeClientPrivate::CallCreateInitParamsForNewDisplay() {
-  return tree_client_impl_->CreateInitParamsForNewDisplay();
-}
-
 void WindowTreeClientPrivate::SetTree(ui::mojom::WindowTree* window_tree) {
   tree_client_impl_->WindowTreeConnectionEstablished(window_tree);
 }
 
-void WindowTreeClientPrivate::SetWindowManagerClient(
-    ui::mojom::WindowManagerClient* client) {
-  tree_client_impl_->window_manager_client_ = client;
-  // Mirrors what CreateForWindowManager() does.
-  tree_client_impl_->CreatePlatformEventSourceIfNecessary();
-}
-
 bool WindowTreeClientPrivate::HasPointerWatcher() {
   return tree_client_impl_->has_pointer_watcher_;
 }
@@ -141,10 +101,6 @@
   return false;
 }
 
-void WindowTreeClientPrivate::WaitForInitialDisplays() {
-  tree_client_impl_->WaitForInitialDisplays();
-}
-
 ui::mojom::WindowDataPtr WindowTreeClientPrivate::CreateWindowDataForEmbed() {
   ui::mojom::WindowDataPtr root_data(ui::mojom::WindowData::New());
   root_data->parent_id = 0;
diff --git a/ui/aura/test/mus/window_tree_client_private.h b/ui/aura/test/mus/window_tree_client_private.h
index 8a02b13..27cc057 100644
--- a/ui/aura/test/mus/window_tree_client_private.h
+++ b/ui/aura/test/mus/window_tree_client_private.h
@@ -14,15 +14,10 @@
 #include "ui/aura/mus/mus_types.h"
 #include "ui/aura/mus/window_tree_client.h"
 
-namespace display {
-class Display;
-}
-
 namespace ui {
 class Event;
 
 namespace mojom {
-class WindowManagerClient;
 class WindowTree;
 }
 }
@@ -31,16 +26,12 @@
 
 class EmbedRoot;
 class Window;
-class WindowManagerDelegate;
 class WindowMus;
 class WindowTreeClientDelegate;
 class WindowTreeClient;
-class WindowTreeHostMus;
 
 enum class ChangeType;
 
-struct WindowTreeHostMusInitParams;
-
 // Use to access implementation details of WindowTreeClient.
 class WindowTreeClientPrivate {
  public:
@@ -48,40 +39,25 @@
   explicit WindowTreeClientPrivate(Window* window);
   ~WindowTreeClientPrivate();
 
-  // TODO(sky): remove |config|. https://crbug.com/842365
   static std::unique_ptr<WindowTreeClient> CreateWindowTreeClient(
-      WindowTreeClientDelegate* window_tree_delegate,
-      WindowManagerDelegate* window_manager_delegate,
-      WindowTreeClient::Config config =
-          WindowTreeClient::Config::kMashDeprecated);
+      WindowTreeClientDelegate* window_tree_delegate);
 
   // Calls OnEmbed() on the WindowTreeClient.
   void OnEmbed(ui::mojom::WindowTree* window_tree);
 
-  WindowTreeHostMus* CallWmNewDisplayAdded(const display::Display& display);
-  WindowTreeHostMus* CallWmNewDisplayAdded(const display::Display& display,
-                                           ui::mojom::WindowDataPtr root_data,
-                                           bool parent_drawn);
-
   // Simulates |event| matching a pointer watcher on the window server.
   void CallOnPointerEventObserved(Window* window,
                                   std::unique_ptr<ui::Event> event);
 
   void CallOnCaptureChanged(Window* new_capture, Window* old_capture);
 
-  void CallOnConnect();
-
   // Simulates the EmbedRoot receiving the token from the WindowTree and then
   // the WindowTree calling OnEmbedFromToken().
   void CallOnEmbedFromToken(EmbedRoot* embed_root);
 
-  WindowTreeHostMusInitParams CallCreateInitParamsForNewDisplay();
-
   // Sets the WindowTree.
   void SetTree(ui::mojom::WindowTree* window_tree);
 
-  void SetWindowManagerClient(ui::mojom::WindowManagerClient* client);
-
   bool HasPointerWatcher();
 
   Window* GetWindowByServerId(ui::Id id);
@@ -93,8 +69,6 @@
 
   bool HasChangeInFlightOfType(ChangeType type);
 
-  void WaitForInitialDisplays();
-
  private:
   ui::mojom::WindowDataPtr CreateWindowDataForEmbed();
 
diff --git a/ui/aura/test/test_screen.cc b/ui/aura/test/test_screen.cc
index a92f505..cb0b962 100644
--- a/ui/aura/test/test_screen.cc
+++ b/ui/aura/test/test_screen.cc
@@ -10,6 +10,7 @@
 #include "ui/aura/env.h"
 #include "ui/aura/mus/window_tree_client.h"
 #include "ui/aura/mus/window_tree_host_mus.h"
+#include "ui/aura/mus/window_tree_host_mus_init_params.h"
 #include "ui/aura/test/mus/window_tree_client_private.h"
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
@@ -47,10 +48,10 @@
 
 WindowTreeHost* TestScreen::CreateHostForPrimaryDisplay() {
   DCHECK(!host_);
-  if (window_tree_client_ && window_tree_client_->config() ==
-                                 WindowTreeClient::Config::kMashDeprecated) {
-    host_ = WindowTreeClientPrivate(window_tree_client_)
-                .CallWmNewDisplayAdded(GetPrimaryDisplay());
+  if (window_tree_client_) {
+    host_ =
+        new WindowTreeHostMus(CreateInitParamsForTopLevel(window_tree_client_));
+    host_->SetBoundsInPixels(gfx::Rect(GetPrimaryDisplay().GetSizeInPixel()));
   } else {
     host_ = WindowTreeHost::Create(ui::PlatformWindowInitProperties{gfx::Rect(
                                        GetPrimaryDisplay().GetSizeInPixel())})
diff --git a/ui/aura/window_event_dispatcher_unittest.cc b/ui/aura/window_event_dispatcher_unittest.cc
index e3b90c76..70316fa 100644
--- a/ui/aura/window_event_dispatcher_unittest.cc
+++ b/ui/aura/window_event_dispatcher_unittest.cc
@@ -985,6 +985,9 @@
 // Tests that touch-move events don't contribute to an in-progress scroll
 // gesture if touch-move events are being held by the dispatcher.
 TEST_P(WindowEventDispatcherTest, TouchMovesHeldOnScroll) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
   EventFilterRecorder recorder;
   root_window()->AddPreTargetHandler(&recorder);
   test::TestWindowDelegate delegate;
@@ -2231,6 +2234,10 @@
 };
 
 TEST_P(WindowEventDispatcherTestInHighDPI, EventLocationTransform) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
+
   test::TestWindowDelegate delegate;
   std::unique_ptr<aura::Window> child(test::CreateTestWindowWithDelegate(
       &delegate, 1234, gfx::Rect(20, 20, 100, 100), root_window()));
@@ -2267,6 +2274,9 @@
 }
 
 TEST_P(WindowEventDispatcherTestInHighDPI, TouchMovesHeldOnScroll) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
   EventFilterRecorder recorder;
   root_window()->AddPreTargetHandler(&recorder);
   test::TestWindowDelegate delegate;
@@ -2336,6 +2346,9 @@
 // correctly.
 TEST_P(WindowEventDispatcherTestInHighDPI,
        EventsTransformedInRepostedEventTriggeredNestedLoop) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
   std::unique_ptr<Window> window(CreateNormalWindow(1, root_window(), NULL));
   // Make sure the window is visible.
   RunAllPendingInMessageLoop();
@@ -2790,6 +2803,10 @@
 // cursor's position in root coordinates has changed (e.g. when the displays's
 // scale factor changed). Test that hover effects are properly updated.
 TEST_P(WindowEventDispatcherTest, OnCursorMovedToRootLocationUpdatesHover) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
+
   WindowEventDispatcher* dispatcher = host()->dispatcher();
   test::TestCursorClient cursor_client(root_window());
   cursor_client.ShowCursor();
@@ -2925,7 +2942,7 @@
   }
 
   // Classic backend cannot dispatch events with non-null target.
-  if (GetParam() != test::BackendType::CLASSIC) {
+  if (GetParam() != Env::Mode::LOCAL) {
     // |touch_position| value isn't in the bounds of root window, but it is in
     // the bounds of the child window.
     const gfx::Point touch_position =
@@ -2962,21 +2979,15 @@
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowEventDispatcherTest,
-                        ::testing::Values(test::BackendType::CLASSIC,
-                                          test::BackendType::MUS,
-                                          test::BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowEventDispatcherTestWithMessageLoop,
-                        ::testing::Values(test::BackendType::CLASSIC,
-                                          test::BackendType::MUS,
-                                          test::BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowEventDispatcherTestInHighDPI,
-                        ::testing::Values(test::BackendType::CLASSIC,
-                                          test::BackendType::MUS,
-                                          test::BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 using WindowEventDispatcherMusTest = test::AuraTestBaseMus;
 
diff --git a/ui/aura/window_targeter_unittest.cc b/ui/aura/window_targeter_unittest.cc
index 88c3cf0..6334cb1 100644
--- a/ui/aura/window_targeter_unittest.cc
+++ b/ui/aura/window_targeter_unittest.cc
@@ -301,8 +301,6 @@
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowTargeterTest,
-                        ::testing::Values(test::BackendType::CLASSIC,
-                                          test::BackendType::MUS,
-                                          test::BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 }  // namespace aura
diff --git a/ui/aura/window_tree_host_observer.h b/ui/aura/window_tree_host_observer.h
index a355be4..e71455dc 100644
--- a/ui/aura/window_tree_host_observer.h
+++ b/ui/aura/window_tree_host_observer.h
@@ -29,9 +29,6 @@
   // Called when the native window system sends the host request to close.
   virtual void OnHostCloseRequested(WindowTreeHost* host) {}
 
-  // Called when the accelerated widget is overridden for the host.
-  virtual void OnAcceleratedWidgetOverridden(WindowTreeHost* host) {}
-
  protected:
   virtual ~WindowTreeHostObserver() {}
 };
diff --git a/ui/aura/window_unittest.cc b/ui/aura/window_unittest.cc
index c540c954..602d4fc 100644
--- a/ui/aura/window_unittest.cc
+++ b/ui/aura/window_unittest.cc
@@ -422,14 +422,14 @@
 // Tests that the root window gets a valid LocalSurfaceId.
 TEST_P(WindowTest, RootWindowHasValidLocalSurfaceId) {
   // When mus is hosting viz, the LocalSurfaceId is sent from mus.
-  if (GetParam() != BackendType::CLASSIC)
+  if (GetParam() != Env::Mode::LOCAL)
     return;
   EXPECT_TRUE(root_window()->GetLocalSurfaceId().is_valid());
 }
 
 TEST_P(WindowTest, WindowEmbeddingClientHasValidLocalSurfaceId) {
   // When mus is hosting viz, the LocalSurfaceId is sent from mus.
-  if (GetParam() != BackendType::CLASSIC)
+  if (GetParam() != Env::Mode::LOCAL)
     return;
   std::unique_ptr<Window> window(CreateTestWindow(
       SK_ColorWHITE, 1, gfx::Rect(10, 10, 300, 200), root_window()));
@@ -1638,6 +1638,9 @@
 }
 
 TEST_P(WindowTest, TransformGesture) {
+  // TODO(sky): fails with mus. https://crbug.com/866502
+  if (GetParam() == Env::Mode::MUS)
+    return;
   gfx::Size size = host()->GetBoundsInPixels().size();
 
   std::unique_ptr<GestureTrackPositionDelegate> delegate(
@@ -3208,10 +3211,10 @@
 }
 
 TEST_P(WindowTest, RootWindowUsesCompositorFrameSinkId) {
-  // MUS2 doesn't create context_factory_private, which results in this test
+  // MUS doesn't create context_factory_private, which results in this test
   // failing.
   // TODO(sky): figure out the right thing here.
-  if (GetParam() == BackendType::MUS2)
+  if (GetParam() == Env::Mode::MUS)
     return;
 
   EXPECT_EQ(host()->compositor()->frame_sink_id(),
@@ -3270,15 +3273,11 @@
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowTest,
-                        ::testing::Values(BackendType::CLASSIC,
-                                          BackendType::MUS,
-                                          BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 INSTANTIATE_TEST_CASE_P(/* no prefix */,
                         WindowObserverTest,
-                        ::testing::Values(BackendType::CLASSIC,
-                                          BackendType::MUS,
-                                          BackendType::MUS2));
+                        ::testing::Values(Env::Mode::LOCAL, Env::Mode::MUS));
 
 }  // namespace
 }  // namespace test
diff --git a/ui/chromeos/search_box/search_box_view_base.cc b/ui/chromeos/search_box/search_box_view_base.cc
index 9a3bdb8..59d5c38a 100644
--- a/ui/chromeos/search_box/search_box_view_base.cc
+++ b/ui/chromeos/search_box/search_box_view_base.cc
@@ -270,6 +270,7 @@
 
   UpdateSearchBoxBorder();
   UpdateKeyboardVisibility();
+  UpdateCloseButtonVisisbility();
 
   NotifyActiveChanged();
 
@@ -394,7 +395,9 @@
 void SearchBoxViewBase::UpdateCloseButtonVisisbility() {
   if (!close_button_)
     return;
-  bool should_show_close_button_ = !search_box_->text().empty();
+  bool should_show_close_button_ =
+      !search_box_->text().empty() ||
+      (show_close_button_when_active_ && is_search_box_active_);
   if (close_button_->visible() == should_show_close_button_)
     return;
   close_button_->SetVisible(should_show_close_button_);
diff --git a/ui/chromeos/search_box/search_box_view_base.h b/ui/chromeos/search_box/search_box_view_base.h
index 20395bc..846dd0e 100644
--- a/ui/chromeos/search_box/search_box_view_base.h
+++ b/ui/chromeos/search_box/search_box_view_base.h
@@ -99,6 +99,10 @@
   // Whether the search box is active.
   bool is_search_box_active() const { return is_search_box_active_; }
 
+  void set_show_close_button_when_active(bool show_button) {
+    show_close_button_when_active_ = show_button;
+  }
+
   void OnOnSearchBoxFocusedChanged();
 
   // Whether the trimmed query in the search box is empty.
@@ -194,6 +198,8 @@
 
   // Whether the search box is active.
   bool is_search_box_active_ = false;
+  // Whether to show close button if the search box is active.
+  bool show_close_button_when_active_ = false;
   // Whether tablet mode is active.
   bool is_tablet_mode_ = false;
   // The current background color.
diff --git a/ui/compositor/recyclable_compositor_mac.cc b/ui/compositor/recyclable_compositor_mac.cc
index d0670c7..b8ca96d5 100644
--- a/ui/compositor/recyclable_compositor_mac.cc
+++ b/ui/compositor/recyclable_compositor_mac.cc
@@ -123,10 +123,6 @@
 
 void RecyclableCompositorMacFactory::RecycleCompositor(
     std::unique_ptr<RecyclableCompositorMac> compositor) {
-  // Disable all recycling to see if it fixes https://crbug.com/863817
-  // TODO(ccameron): Remove this.
-  return;
-
   if (recycling_disabled_)
     return;
 
diff --git a/ui/file_manager/file_manager/main.html b/ui/file_manager/file_manager/main.html
index 50132d47..6d044552 100644
--- a/ui/file_manager/file_manager/main.html
+++ b/ui/file_manager/file_manager/main.html
@@ -35,10 +35,10 @@
         --cr-input-error-display: none;
         --cr-input-input: {
           background-color: transparent;
-          -webkit-padding-end: 20px;
-          -webkit-padding-start: 0;
           border-bottom: 1px solid rgba(255, 255, 255, 0.5);
         }
+        --cr-input-padding-end: 20px;
+        --cr-input-padding-start: 0;
         --cr-input-placeholder-color: rgba(255, 255, 255, 0.5);
         display: inline-block;
         transition: width 200ms ease;
@@ -54,10 +54,10 @@
         --cr-input-input: {
           background-color: transparent;
           border-bottom: 1px solid var(--paper-grey-800);
-          -webkit-padding-end: 0;
-          -webkit-padding-start: 0;
-          padding-bottom: 2px;
         }
+        --cr-input-padding-end: 0;
+        --cr-input-padding-start: 0;
+        --cr-input-padding-bottom: 2px;
         width: 100%;
       }
 
diff --git a/ui/file_manager/gallery/gallery.html b/ui/file_manager/gallery/gallery.html
index d8ceaf91..4b4e39c 100644
--- a/ui/file_manager/gallery/gallery.html
+++ b/ui/file_manager/gallery/gallery.html
@@ -75,11 +75,11 @@
         border-radius: 0;
       }
       --cr-input-input: {
-        -webkit-padding-end: 0;
-        -webkit-padding-start: 0;
         background-color: transparent;
         border-bottom: 1px solid var(--paper-grey-800);
       }
+      --cr-input-padding-end: 0;
+      --cr-input-padding-start: 0;
       --cr-input-error-display: none;
       --cr-input-focus-color: white;
     }
diff --git a/ui/gfx/BUILD.gn b/ui/gfx/BUILD.gn
index fec5071..8530283 100644
--- a/ui/gfx/BUILD.gn
+++ b/ui/gfx/BUILD.gn
@@ -68,6 +68,7 @@
     "font.cc",
     "font.h",
     "font_fallback.h",
+    "font_fallback_android.cc",
     "font_fallback_linux.cc",
     "font_fallback_linux.h",
     "font_fallback_mac.mm",
@@ -139,7 +140,6 @@
     "path_x11.cc",
     "path_x11.h",
     "platform_font.h",
-    "platform_font_android.cc",
     "platform_font_ios.h",
     "platform_font_ios.mm",
     "platform_font_linux.cc",
@@ -170,7 +170,6 @@
     "text_elider.h",
     "text_utils.cc",
     "text_utils.h",
-    "text_utils_android.cc",
     "text_utils_ios.mm",
     "ui_gfx_exports.cc",
     "utf16_indexing.cc",
@@ -203,7 +202,6 @@
       "blit.h",
       "canvas.cc",
       "canvas.h",
-      "canvas_notimplemented.cc",
       "canvas_paint_mac.h",
       "canvas_paint_mac.mm",
       "canvas_skia.cc",
@@ -261,7 +259,7 @@
   ]
 
   # Text rendering conditions (complicated so separated out).
-  if (use_aura || is_mac || (is_android && enable_vr) || is_fuchsia) {
+  if (use_aura || is_mac || is_android || is_fuchsia) {
     # Mac doesn't use RenderTextHarfBuzz by default yet.
     sources += [
       "harfbuzz_font_skia.cc",
@@ -283,11 +281,7 @@
     # We don't support RenderText on these platforms.
   }
 
-  if (is_android && enable_vr) {
-    sources -= [
-      "platform_font_android.cc",
-      "text_utils_android.cc",
-    ]
+  if (is_android) {
     set_sources_assignment_filter([])
     sources += [
       "platform_font_linux.cc",
@@ -308,17 +302,6 @@
 
   # Android.
   if (is_android) {
-    if (enable_vr) {
-      sources -= [ "canvas_notimplemented.cc" ]
-      sources += [ "font_fallback_android.cc" ]
-    } else {
-      sources -= [
-        "canvas_skia.cc",
-        "path.cc",
-        "selection_model.cc",
-      ]
-    }
-
     if (!is_debug) {
       configs -= [ "//build/config/compiler:default_optimization" ]
       configs += [ "//build/config/compiler:optimize_max" ]
@@ -329,8 +312,6 @@
       "android",
       "jnigraphics",
     ]
-  } else if (!is_ios) {
-    sources -= [ "canvas_notimplemented.cc" ]
   }
 
   if (!is_ios) {
diff --git a/ui/gfx/canvas_notimplemented.cc b/ui/gfx/canvas_notimplemented.cc
deleted file mode 100644
index fdbea73..0000000
--- a/ui/gfx/canvas_notimplemented.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2014 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/gfx/canvas.h"
-
-#include "base/logging.h"
-
-namespace gfx {
-
-// static
-void Canvas::SizeStringFloat(const base::string16& text,
-                             const FontList& font_list,
-                             float* width,
-                             float* height,
-                             int line_height,
-                             int flags,
-                             Typesetter Typesetter) {
-  NOTIMPLEMENTED();
-}
-
-void Canvas::DrawStringRectWithFlags(const base::string16& text,
-                                     const FontList& font_list,
-                                     SkColor color,
-                                     const Rect& text_bounds,
-                                     int flags) {
-  NOTIMPLEMENTED();
-}
-
-void Canvas::DrawFadedString(const base::string16& text,
-                             const FontList& font_list,
-                             SkColor color,
-                             const Rect& display_rect,
-                             int flags) {
-   NOTIMPLEMENTED();
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/canvas_unittest.cc b/ui/gfx/canvas_unittest.cc
index 25bc314..6b1dae94 100644
--- a/ui/gfx/canvas_unittest.cc
+++ b/ui/gfx/canvas_unittest.cc
@@ -36,12 +36,7 @@
   FontList font_list_;
 };
 
-#if defined(OS_ANDROID)
-#define MAYBE_StringWidth DISABLED_StringWidth
-#else
-#define MAYBE_StringWidth StringWidth
-#endif
-TEST_F(CanvasTest, MAYBE_StringWidth) {
+TEST_F(CanvasTest, StringWidth) {
   EXPECT_GT(GetStringWidth("Test"), 0);
 }
 
@@ -49,12 +44,7 @@
   EXPECT_EQ(0, GetStringWidth(""));
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_StringSizeEmptyString DISABLED_StringSizeEmptyString
-#else
-#define MAYBE_StringSizeEmptyString StringSizeEmptyString
-#endif
-TEST_F(CanvasTest, MAYBE_StringSizeEmptyString) {
+TEST_F(CanvasTest, StringSizeEmptyString) {
   gfx::Size size = SizeStringInt("", 0, 0);
   EXPECT_EQ(0, size.width());
   EXPECT_GT(size.height(), 0);
@@ -71,13 +61,7 @@
   EXPECT_TRUE(clip_rect.Contains(gfx::Rect(100, 0, 20, 2)));
 }
 
-// Line height is only supported on Skia.
-#if defined(OS_ANDROID)
-#define MAYBE_StringSizeWithLineHeight DISABLED_StringSizeWithLineHeight
-#else
-#define MAYBE_StringSizeWithLineHeight StringSizeWithLineHeight
-#endif
-TEST_F(CanvasTest, MAYBE_StringSizeWithLineHeight) {
+TEST_F(CanvasTest, StringSizeWithLineHeight) {
   gfx::Size one_line_size = SizeStringInt("Q", 0, 0);
   gfx::Size four_line_size = SizeStringInt("Q\nQ\nQ\nQ", 1000000, 1000);
   EXPECT_EQ(one_line_size.width(), four_line_size.width());
diff --git a/ui/gfx/font_list_unittest.cc b/ui/gfx/font_list_unittest.cc
index 68e6c40..f8025dc 100644
--- a/ui/gfx/font_list_unittest.cc
+++ b/ui/gfx/font_list_unittest.cc
@@ -98,13 +98,7 @@
                                           &size_pixels, &weight));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromDescString DISABLED_Fonts_FromDescString
-#else
-#define MAYBE_Fonts_FromDescString Fonts_FromDescString
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromDescString) {
+TEST(FontListTest, Fonts_FromDescString) {
   // Test init from font name size string.
   FontList font_list = FontList("arial, Courier New, 13px");
   const std::vector<Font>& fonts = font_list.GetFonts();
@@ -113,15 +107,7 @@
   EXPECT_EQ("Courier New|13|normal", FontToString(fonts[1]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromDescStringInFlexibleFormat \
-    DISABLED_Fonts_FromDescStringInFlexibleFormat
-#else
-#define MAYBE_Fonts_FromDescStringInFlexibleFormat \
-    Fonts_FromDescStringInFlexibleFormat
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromDescStringInFlexibleFormat) {
+TEST(FontListTest, Fonts_FromDescStringInFlexibleFormat) {
   // Test init from font name size string with flexible format.
   FontList font_list = FontList("  arial   ,   Courier New ,   13px");
   const std::vector<Font>& fonts = font_list.GetFonts();
@@ -130,15 +116,7 @@
   EXPECT_EQ("Courier New|13|normal", FontToString(fonts[1]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromDescStringWithStyleInFlexibleFormat \
-    DISABLED_Fonts_FromDescStringWithStyleInFlexibleFormat
-#else
-#define MAYBE_Fonts_FromDescStringWithStyleInFlexibleFormat \
-    Fonts_FromDescStringWithStyleInFlexibleFormat
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromDescStringWithStyleInFlexibleFormat) {
+TEST(FontListTest, Fonts_FromDescStringWithStyleInFlexibleFormat) {
   // Test init from font name style size string with flexible format.
   FontList font_list = FontList(
       "  arial  ,  Courier New ,  Bold   "
@@ -149,13 +127,7 @@
   EXPECT_EQ("Courier New|13|italic|bold", FontToString(fonts[1]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromFont DISABLED_Fonts_FromFont
-#else
-#define MAYBE_Fonts_FromFont Fonts_FromFont
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromFont) {
+TEST(FontListTest, Fonts_FromFont) {
   // Test init from Font.
   Font font("Arial", 8);
   FontList font_list = FontList(font);
@@ -164,14 +136,7 @@
   EXPECT_EQ("Arial|8|normal", FontToString(fonts[0]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromFontWithNonNormalStyle \
-    DISABLED_Fonts_FromFontWithNonNormalStyle
-#else
-#define MAYBE_Fonts_FromFontWithNonNormalStyle Fonts_FromFontWithNonNormalStyle
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromFontWithNonNormalStyle) {
+TEST(FontListTest, Fonts_FromFontWithNonNormalStyle) {
   // Test init from Font with non-normal style.
   Font font("Arial", 8);
   FontList font_list(font.Derive(2, Font::NORMAL, Font::Weight::BOLD));
@@ -185,13 +150,7 @@
   EXPECT_EQ("Arial|6|italic|normal", FontToString(fonts[0]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_FromFontVector DISABLED_Fonts_FromFontVector
-#else
-#define MAYBE_Fonts_FromFontVector Fonts_FromFontVector
-#endif
-TEST(FontListTest, MAYBE_Fonts_FromFontVector) {
+TEST(FontListTest, Fonts_FromFontVector) {
   // Test init from Font vector.
   Font font("Arial", 8);
   Font font_1("Courier New", 10);
@@ -223,13 +182,7 @@
   EXPECT_EQ(Font::Weight::BOLD, font_list.GetFontWeight());
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_GetStyle DISABLED_Fonts_GetStyle
-#else
-#define MAYBE_Fonts_GetStyle Fonts_GetStyle
-#endif
-TEST(FontListTest, MAYBE_Fonts_GetStyle) {
+TEST(FontListTest, Fonts_GetStyle) {
   std::vector<Font> fonts;
   fonts.push_back(Font("Arial", 8));
   fonts.push_back(Font("Sans serif", 8));
@@ -242,13 +195,7 @@
   EXPECT_EQ(Font::Weight::BOLD, font_list.GetFontWeight());
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_Derive DISABLED_Fonts_Derive
-#else
-#define MAYBE_Fonts_Derive Fonts_Derive
-#endif
-TEST(FontListTest, MAYBE_Fonts_Derive) {
+TEST(FontListTest, Fonts_Derive) {
   std::vector<Font> fonts;
   fonts.push_back(Font("Arial", 8));
   fonts.push_back(Font("Courier New", 8));
@@ -269,13 +216,7 @@
   EXPECT_EQ("Courier New|13|underline|bold", FontToString(underline_fonts[1]));
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_DeriveWithSizeDelta DISABLED_Fonts_DeriveWithSizeDelta
-#else
-#define MAYBE_Fonts_DeriveWithSizeDelta Fonts_DeriveWithSizeDelta
-#endif
-TEST(FontListTest, MAYBE_Fonts_DeriveWithSizeDelta) {
+TEST(FontListTest, Fonts_DeriveWithSizeDelta) {
   std::vector<Font> fonts;
   fonts.push_back(
       Font("Arial", 18).Derive(0, Font::ITALIC, Font::Weight::NORMAL));
@@ -291,7 +232,7 @@
   EXPECT_EQ("Courier New|13|italic|normal", FontToString(derived_fonts[1]));
 }
 
-// TODO(489354): Enable this on android.
+// TODO(865540): Enable this on android.
 #if defined(OS_ANDROID)
 #define MAYBE_Fonts_GetHeight_GetBaseline DISABLED_Fonts_GetHeight_GetBaseline
 #else
@@ -327,14 +268,7 @@
             font_list_mix.GetHeight() - font_list_mix.GetBaseline());
 }
 
-// TODO(489354): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_Fonts_DeriveWithHeightUpperBound \
-    DISABLED_Fonts_DeriveWithHeightUpperBound
-#else
-#define MAYBE_Fonts_DeriveWithHeightUpperBound Fonts_DeriveWithHeightUpperBound
-#endif
-TEST(FontListTest, MAYBE_Fonts_DeriveWithHeightUpperBound) {
+TEST(FontListTest, Fonts_DeriveWithHeightUpperBound) {
   std::vector<Font> fonts;
 
   fonts.push_back(Font("Arial", 18));
diff --git a/ui/gfx/font_names_testing.cc b/ui/gfx/font_names_testing.cc
index 8385fe3..6c69665 100644
--- a/ui/gfx/font_names_testing.cc
+++ b/ui/gfx/font_names_testing.cc
@@ -8,20 +8,40 @@
 
 namespace gfx {
 
+/*
+Reference for fonts available on Android:
+
+Jelly Bean:
+  https://android.googlesource.com/platform/frameworks/base/+/jb-release/data/fonts/system_fonts.xml
+KitKat:
+  https://android.googlesource.com/platform/frameworks/base/+/kitkat-release/data/fonts/system_fonts.xml
+master:
+  https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts/fonts.xml
+
+Note that we have to support the full range from JellyBean to the latest
+dessert.
+*/
+
 #if defined(OS_LINUX)
 const char kTestFontName[] = "Arimo";
+#elif defined(OS_ANDROID)
+const char kTestFontName[] = "sans-serif";
 #else
 const char kTestFontName[] = "Arial";
 #endif
 
 #if defined(OS_LINUX)
 const char kSymbolFontName[] = "DejaVu Sans";
+#elif defined(OS_ANDROID)
+const char kSymbolFontName[] = "monospace";
 #else
 const char kSymbolFontName[] = "Symbol";
 #endif
 
 #if defined(OS_LINUX)
 const char kCJKFontName[] = "Noto Sans CJK JP";
+#elif defined(OS_ANDROID)
+const char kCJKFontName[] = "serif";
 #elif defined(OS_MACOSX)
 const char kCJKFontName[] = "Heiti SC";
 #else
diff --git a/ui/gfx/font_render_params.h b/ui/gfx/font_render_params.h
index 0df6b3a..93be353 100644
--- a/ui/gfx/font_render_params.h
+++ b/ui/gfx/font_render_params.h
@@ -117,7 +117,7 @@
 GFX_EXPORT void ClearFontRenderParamsCacheForTest();
 #endif
 
-#if defined(OS_LINUX) || (defined(OS_ANDROID) && BUILDFLAG(ENABLE_VR))
+#if defined(OS_LINUX) || defined(OS_ANDROID)
 // Gets the device scale factor to query the FontRenderParams.
 GFX_EXPORT float GetFontRenderParamsDeviceScaleFactor();
 
diff --git a/ui/gfx/font_unittest.cc b/ui/gfx/font_unittest.cc
index 9b9eae01..00945ae9 100644
--- a/ui/gfx/font_unittest.cc
+++ b/ui/gfx/font_unittest.cc
@@ -48,12 +48,7 @@
 int ScopedMinimumFontSizeCallback::minimum_size_ = 0;
 #endif  // defined(OS_WIN)
 
-#if defined(OS_ANDROID)
-#define MAYBE_LoadArial DISABLED_LoadArial
-#else
-#define MAYBE_LoadArial LoadArial
-#endif
-TEST_F(FontTest, MAYBE_LoadArial) {
+TEST_F(FontTest, LoadArial) {
   Font cf(kTestFontName, 16);
 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
   EXPECT_TRUE(cf.GetNativeFont());
@@ -65,12 +60,7 @@
             base::ToLowerASCII(cf.GetActualFontNameForTesting()));
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_LoadArialBold DISABLED_LoadArialBold
-#else
-#define MAYBE_LoadArialBold LoadArialBold
-#endif
-TEST_F(FontTest, MAYBE_LoadArialBold) {
+TEST_F(FontTest, LoadArialBold) {
   Font cf(kTestFontName, 16);
   Font bold(cf.Derive(0, Font::NORMAL, Font::Weight::BOLD));
 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_IOS)
@@ -82,47 +72,27 @@
             base::ToLowerASCII(cf.GetActualFontNameForTesting()));
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_Ascent DISABLED_Ascent
-#else
-#define MAYBE_Ascent Ascent
-#endif
-TEST_F(FontTest, MAYBE_Ascent) {
+TEST_F(FontTest, Ascent) {
   Font cf(kTestFontName, 16);
   EXPECT_GT(cf.GetBaseline(), 2);
   EXPECT_LE(cf.GetBaseline(), 22);
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_Height DISABLED_Height
-#else
-#define MAYBE_Height Height
-#endif
-TEST_F(FontTest, MAYBE_Height) {
+TEST_F(FontTest, Height) {
   Font cf(kTestFontName, 16);
   EXPECT_GE(cf.GetHeight(), 16);
   // TODO(akalin): Figure out why height is so large on Linux.
   EXPECT_LE(cf.GetHeight(), 26);
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_CapHeight DISABLED_CapHeight
-#else
-#define MAYBE_CapHeight CapHeight
-#endif
-TEST_F(FontTest, MAYBE_CapHeight) {
+TEST_F(FontTest, CapHeight) {
   Font cf(kTestFontName, 16);
   EXPECT_GT(cf.GetCapHeight(), 0);
   EXPECT_GT(cf.GetCapHeight(), cf.GetHeight() / 2);
   EXPECT_LT(cf.GetCapHeight(), cf.GetBaseline());
 }
 
-#if defined(OS_ANDROID)
-#define MAYBE_AvgWidths DISABLED_AvgWidths
-#else
-#define MAYBE_AvgWidths AvgWidths
-#endif
-TEST_F(FontTest, MAYBE_AvgWidths) {
+TEST_F(FontTest, AvgWidths) {
   Font cf(kTestFontName, 16);
   EXPECT_EQ(cf.GetExpectedTextWidth(0), 0);
   EXPECT_GT(cf.GetExpectedTextWidth(1), cf.GetExpectedTextWidth(0));
@@ -130,7 +100,7 @@
   EXPECT_GT(cf.GetExpectedTextWidth(3), cf.GetExpectedTextWidth(2));
 }
 
-#if defined(OS_WIN) || defined(OS_ANDROID)
+#if defined(OS_WIN)
 #define MAYBE_GetActualFontNameForTesting DISABLED_GetActualFontNameForTesting
 #else
 #define MAYBE_GetActualFontNameForTesting GetActualFontNameForTesting
@@ -165,13 +135,7 @@
             base::ToLowerASCII(fallback_font.GetActualFontNameForTesting()));
 }
 
-#if defined(OS_ANDROID)
-// https://crbug.com/642010
-#define MAYBE_DeriveFont DISABLED_DeriveFont
-#else
-#define MAYBE_DeriveFont DeriveFont
-#endif
-TEST_F(FontTest, MAYBE_DeriveFont) {
+TEST_F(FontTest, DeriveFont) {
   Font cf(kTestFontName, 8);
   const int kSizeDelta = 2;
   Font cf_underlined =
diff --git a/ui/gfx/platform_font_android.cc b/ui/gfx/platform_font_android.cc
deleted file mode 100644
index bcb455f..0000000
--- a/ui/gfx/platform_font_android.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2012 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/gfx/platform_font.h"
-
-#include "base/logging.h"
-
-namespace gfx {
-
-// static
-PlatformFont* PlatformFont::CreateDefault() {
-  NOTIMPLEMENTED();
-  return NULL;
-}
-
-// static
-PlatformFont* PlatformFont::CreateFromNameAndSize(const std::string& font_name,
-                                                  int font_size) {
-  // If you implement this, enable FontTest.DeriveFont on Android,
-  // https://crbug.com/642010
-  NOTIMPLEMENTED();
-  return NULL;
-}
-
-} // namespace gfx
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index d048f9d..512c5be0 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -65,10 +65,13 @@
          block_code == UBLOCK_MISCELLANEOUS_SYMBOLS;
 }
 
+// Returns true if |character| is a bracket. This is used to avoid "matching"
+// brackets picking different font fallbacks, thereby appearing mismatched.
 bool IsBracket(UChar32 character) {
-  static const char kBrackets[] = { '(', ')', '{', '}', '<', '>', };
-  static const char* kBracketsEnd = kBrackets + arraysize(kBrackets);
-  return std::find(kBrackets, kBracketsEnd, character) != kBracketsEnd;
+  // 0x300c and 0x300d are「foo」 style brackets.
+  constexpr UChar32 kBrackets[] = {'(', ')', '{',       '}',
+                                   '<', '>', L'\u300c', L'\u300d'};
+  return base::ContainsValue(kBrackets, character);
 }
 
 // If the given scripts match, returns the one that isn't USCRIPT_INHERITED,
@@ -667,7 +670,6 @@
 }
 #endif
 
-TextRunHarfBuzz::CommonParams::CommonParams() = default;
 TextRunHarfBuzz::CommonParams::CommonParams(const Font& template_font)
     : font(template_font) {}
 TextRunHarfBuzz::CommonParams::~CommonParams() = default;
@@ -676,27 +678,40 @@
 TextRunHarfBuzz::CommonParams& TextRunHarfBuzz::CommonParams::operator=(
     const TextRunHarfBuzz::CommonParams& other) = default;
 
-void TextRunHarfBuzz::CommonParams::ComputeFontSizeAndBaselineOffset(
-    const Font& primary_font) {
+bool TextRunHarfBuzz::CommonParams::operator==(
+    const CommonParams& other) const {
+  // Empirically, |script| and |weight| are the highest entropy members.
+  return script == other.script && weight == other.weight &&
+         skia_face == other.skia_face && render_params == other.render_params &&
+         font_size == other.font_size &&
+         baseline_offset == other.baseline_offset &&
+         baseline_type == other.baseline_type && italic == other.italic &&
+         strike == other.strike && underline == other.underline &&
+         heavy_underline == other.heavy_underline && is_rtl == other.is_rtl &&
+         level == other.level;
+}
+
+void TextRunHarfBuzz::CommonParams::
+    ComputeRenderParamsFontSizeAndBaselineOffset() {
+  render_params = font.GetFontRenderParams();
   if (font_size == 0)
-    font_size = primary_font.GetFontSize();
+    font_size = font.GetFontSize();
   baseline_offset = 0;
   if (baseline_type != NORMAL_BASELINE) {
     // Calculate a slightly smaller font. The ratio here is somewhat arbitrary.
     // Proportions from 5/9 to 5/7 all look pretty good.
     const float ratio = 5.0f / 9.0f;
-    font_size = ToRoundedInt(primary_font.GetFontSize() * ratio);
+    font_size = ToRoundedInt(font.GetFontSize() * ratio);
     switch (baseline_type) {
       case SUPERSCRIPT:
-        baseline_offset =
-            primary_font.GetCapHeight() - primary_font.GetHeight();
+        baseline_offset = font.GetCapHeight() - font.GetHeight();
         break;
       case SUPERIOR:
-        baseline_offset = ToRoundedInt(primary_font.GetCapHeight() * ratio) -
-                          primary_font.GetCapHeight();
+        baseline_offset =
+            ToRoundedInt(font.GetCapHeight() * ratio) - font.GetCapHeight();
         break;
       case SUBSCRIPT:
-        baseline_offset = primary_font.GetHeight() - primary_font.GetBaseline();
+        baseline_offset = font.GetHeight() - font.GetBaseline();
         break;
       case INFERIOR:  // Fall through.
       default:
@@ -705,6 +720,22 @@
   }
 }
 
+size_t TextRunHarfBuzz::CommonParams::Hash::operator()(
+    const CommonParams& key) const {
+  // In practice, |font|, |skia_face|, |render_params|, and |baseline_offset|
+  // have not yet been set when this is called.
+  return static_cast<size_t>(key.italic) << 0 ^
+         static_cast<size_t>(key.strike) << 1 ^
+         static_cast<size_t>(key.underline) << 2 ^
+         static_cast<size_t>(key.heavy_underline) << 3 ^
+         static_cast<size_t>(key.is_rtl) << 4 ^
+         static_cast<size_t>(key.weight) << 8 ^
+         static_cast<size_t>(key.font_size) << 12 ^
+         static_cast<size_t>(key.baseline_type) << 16 ^
+         static_cast<size_t>(key.level) << 20 ^
+         static_cast<size_t>(key.script) << 24;
+}
+
 bool TextRunHarfBuzz::CommonParams::SetFontAndRenderParams(
     const Font& new_font,
     const FontRenderParams& new_render_params) {
@@ -904,6 +935,20 @@
          shape.positions[glyph_range.start()].x();
 }
 
+void TextRunHarfBuzz::UpdateCommonParamsAndShape(
+    const CommonParams& new_common_params,
+    const ShapeOutput& new_shape) {
+  if (new_shape.missing_glyph_count < shape.missing_glyph_count) {
+    common = new_common_params;
+    shape = new_shape;
+    // Note that |new_shape.glyph_to_char| is indexed from the beginning of
+    // |range|, while |shape.glyph_to_char| is indexed from the beginning of
+    // its embedding text.
+    for (size_t i = 0; i < shape.glyph_to_char.size(); ++i)
+      shape.glyph_to_char[i] += range.start();
+  }
+}
+
 TextRunList::TextRunList() : width_(0.0f) {}
 
 TextRunList::~TextRunList() {}
@@ -1474,11 +1519,8 @@
     const base::string16& display_text = GetDisplayText();
     display_run_list_.reset(new internal::TextRunList);
 
-    if (!display_text.empty()) {
-      TRACE_EVENT0("ui", "RenderTextHarfBuzz:EnsureLayout1");
-      ItemizeTextToRuns(display_text, display_run_list_.get());
-      ShapeRunList(display_text, display_run_list_.get());
-    }
+    if (!display_text.empty())
+      ItemizeAndShapeText(display_text, display_run_list_.get());
     update_display_run_list_ = false;
     std::vector<internal::Line> empty_lines;
     set_lines(&empty_lines);
@@ -1612,10 +1654,30 @@
   return SelectionModel(position, CURSOR_FORWARD);
 }
 
+void RenderTextHarfBuzz::ItemizeAndShapeText(const base::string16& text,
+                                             internal::TextRunList* run_list) {
+  CommonizedRunsMap commonized_run_map;
+  ItemizeTextToRuns(text, run_list, &commonized_run_map);
+
+  for (auto iter = commonized_run_map.begin(); iter != commonized_run_map.end();
+       ++iter) {
+    internal::TextRunHarfBuzz::CommonParams common_params = iter->first;
+    common_params.ComputeRenderParamsFontSizeAndBaselineOffset();
+    ShapeRuns(text, common_params, std::move(iter->second));
+  }
+
+  run_list->InitIndexMap();
+  run_list->ComputePrecedingRunWidths();
+}
+
 void RenderTextHarfBuzz::ItemizeTextToRuns(
     const base::string16& text,
-    internal::TextRunList* run_list_out) {
+    internal::TextRunList* out_run_list,
+    CommonizedRunsMap* out_commonized_run_map) {
+  TRACE_EVENT1("ui", "RenderTextHarfBuzz::ItemizeTextToRuns", "text_length",
+               text.length());
   DCHECK_NE(0U, text.length());
+  const Font& primary_font = font_list().GetPrimaryFont();
 
   // If ICU fails to itemize the text, we create a run that spans the entire
   // text. This is needed because leaving the runs set empty causes some clients
@@ -1635,8 +1697,9 @@
     auto run = std::make_unique<internal::TextRunHarfBuzz>(
         font_list().GetPrimaryFont());
     run->range = Range(0, text.length());
-    run_list_out->Add(std::move(run));
-    run_list_out->InitIndexMap();
+    internal::TextRunHarfBuzz::CommonParams common_params(primary_font);
+    (*out_commonized_run_map)[common_params].push_back(run.get());
+    out_run_list->Add(std::move(run));
     return;
   }
 
@@ -1655,8 +1718,7 @@
 
   for (size_t run_break = 0; run_break < text.length();) {
     Range run_range;
-    internal::TextRunHarfBuzz::CommonParams common_params(
-        font_list().GetPrimaryFont());
+    internal::TextRunHarfBuzz::CommonParams common_params(primary_font);
     run_range.set_start(run_break);
     common_params.italic = style.style(ITALIC);
     common_params.baseline_type = style.baseline();
@@ -1699,32 +1761,21 @@
 
     auto run = std::make_unique<internal::TextRunHarfBuzz>(
         font_list().GetPrimaryFont());
+    (*out_commonized_run_map)[common_params].push_back(run.get());
     run->range = run_range;
-    run->common = common_params;
-    run_list_out->Add(std::move(run));
+    out_run_list->Add(std::move(run));
   }
 
   // Undo the temporarily applied composition underlines and selection colors.
   UndoCompositionAndSelectionStyles();
-
-  run_list_out->InitIndexMap();
 }
 
-void RenderTextHarfBuzz::ShapeRunList(const base::string16& text,
-                                      internal::TextRunList* run_list) {
-  for (const auto& run : run_list->runs()) {
-    const Font& primary_font = font_list().GetPrimaryFont();
-    internal::TextRunHarfBuzz::CommonParams common_params = run->common;
-    common_params.ComputeFontSizeAndBaselineOffset(primary_font);
-    ShapeRun(text, common_params, run.get());
-  }
-  run_list->ComputePrecedingRunWidths();
-}
-
-void RenderTextHarfBuzz::ShapeRun(
+void RenderTextHarfBuzz::ShapeRuns(
     const base::string16& text,
     const internal::TextRunHarfBuzz::CommonParams& common_params,
-    internal::TextRunHarfBuzz* run) {
+    std::vector<internal::TextRunHarfBuzz*> runs) {
+  TRACE_EVENT1("ui", "RenderTextHarfBuzz::ShapeRuns", "run_count", runs.size());
+
   const Font& primary_font = font_list().GetPrimaryFont();
   Font best_font(primary_font);
 
@@ -1732,9 +1783,9 @@
     internal::TextRunHarfBuzz::CommonParams test_common_params = common_params;
     if (test_common_params.SetFontAndRenderParams(font,
                                                   font.GetFontRenderParams())) {
-      ShapeRunWithFont(text, test_common_params, run);
+      ShapeRunsWithFont(text, test_common_params, &runs);
     }
-    if (run->shape.missing_glyph_count == 0)
+    if (runs.empty())
       return;
   }
 
@@ -1742,16 +1793,16 @@
 
 #if defined(OS_WIN) || defined(OS_MACOSX)
   Font fallback_font(primary_font);
-  const base::char16* run_text = &(text[run->range.start()]);
-  if (GetFallbackFont(primary_font, run_text, run->range.length(),
+  const base::char16* run_text = &(text[runs.front()->range.start()]);
+  if (GetFallbackFont(primary_font, run_text, runs.front()->range.length(),
                       &fallback_font)) {
     preferred_fallback_family = fallback_font.GetFontName();
     internal::TextRunHarfBuzz::CommonParams test_common_params = common_params;
     if (test_common_params.SetFontAndRenderParams(
             fallback_font, fallback_font.GetFontRenderParams())) {
-      ShapeRunWithFont(text, test_common_params, run);
+      ShapeRunsWithFont(text, test_common_params, &runs);
     }
-    if (run->shape.missing_glyph_count == 0)
+    if (runs.empty())
       return;
   }
 #endif
@@ -1804,55 +1855,64 @@
     internal::TextRunHarfBuzz::CommonParams test_common_params = common_params;
     if (test_common_params.SetFontAndRenderParams(font,
                                                   fallback_render_params)) {
-      ShapeRunWithFont(text, test_common_params, run);
+      ShapeRunsWithFont(text, test_common_params, &runs);
     }
-    if (run->shape.missing_glyph_count == 0)
+    if (runs.empty())
       return;
   }
 
-  if (run->shape.missing_glyph_count == std::numeric_limits<size_t>::max()) {
-    run->shape.glyph_count = 0;
-    run->shape.width = 0.0f;
+  for (internal::TextRunHarfBuzz*& run : runs) {
+    if (run->shape.missing_glyph_count == std::numeric_limits<size_t>::max()) {
+      run->shape.glyph_count = 0;
+      run->shape.width = 0.0f;
+    }
   }
 }
 
-void RenderTextHarfBuzz::ShapeRunWithFont(
+void RenderTextHarfBuzz::ShapeRunsWithFont(
     const base::string16& text,
     const internal::TextRunHarfBuzz::CommonParams& common_params,
-    internal::TextRunHarfBuzz* run) {
-  const internal::ShapeRunWithFontInput in(
-      text, common_params, run->range, obscured(), glyph_width_for_test_,
-      glyph_spacing(), subpixel_rendering_suppressed());
-  internal::TextRunHarfBuzz::ShapeOutput out;
-
+    std::vector<internal::TextRunHarfBuzz*>* in_out_runs) {
   // ShapeRunWithFont can be extremely slow, so use cached results if possible.
   // Only do this on the UI thread, to avoid synchronization overhead (and
   // because almost all calls are on the UI thread. Also avoid caching long
   // strings, to avoid blowing up the cache size.
   constexpr size_t kMaxRunLengthToCache = 25;
-  if (base::MessageLoopCurrentForUI::IsSet() &&
-      run->range.length() <= kMaxRunLengthToCache) {
-    static base::NoDestructor<internal::ShapeRunCache> cache;
-    auto found = cache.get()->Get(in);
-    if (found == cache.get()->end()) {
-      internal::ShapeRunWithFont(in, &out);
-      cache.get()->Put(in, out);
-    } else {
-      out = found->second;
-    }
-  } else {
-    internal::ShapeRunWithFont(in, &out);
-  }
+  static base::NoDestructor<internal::ShapeRunCache> cache;
 
-  if (out.missing_glyph_count < run->shape.missing_glyph_count) {
-    run->common = common_params;
-    run->shape = out;
-    // Note that |out.glyph_to_char| is indexed from the beginning of
-    // |run->range|, while |run->shape.glyph_to_char| is indexed from
-    // the beginning of |text|.
-    for (size_t i = 0; i < run->shape.glyph_to_char.size(); ++i)
-      run->shape.glyph_to_char[i] += run->range.start();
+  std::vector<internal::TextRunHarfBuzz*> runs_with_missing_glyphs;
+  for (internal::TextRunHarfBuzz*& run : *in_out_runs) {
+    // First do a cache lookup.
+    bool can_use_cache = base::MessageLoopCurrentForUI::IsSet() &&
+                         run->range.length() <= kMaxRunLengthToCache;
+    bool found_in_cache = false;
+    const internal::ShapeRunWithFontInput cache_key(
+        text, common_params, run->range, obscured(), glyph_width_for_test_,
+        glyph_spacing(), subpixel_rendering_suppressed());
+    if (can_use_cache) {
+      auto found = cache.get()->Get(cache_key);
+      if (found != cache.get()->end()) {
+        run->UpdateCommonParamsAndShape(common_params, found->second);
+        found_in_cache = true;
+      }
+    }
+
+    // If that fails, compute the shape of the run, and add the result to the
+    // cache.
+    // TODO(ccameron): Coalesce calls to ShapeRunsWithFont when possible.
+    if (!found_in_cache) {
+      internal::TextRunHarfBuzz::ShapeOutput output;
+      ShapeRunWithFont(cache_key, &output);
+      run->UpdateCommonParamsAndShape(common_params, output);
+      if (can_use_cache)
+        cache.get()->Put(cache_key, output);
+    }
+
+    // Check to see if we still have missing glyphs.
+    if (run->shape.missing_glyph_count)
+      runs_with_missing_glyphs.push_back(run);
   }
+  in_out_runs->swap(runs_with_missing_glyphs);
 }
 
 void RenderTextHarfBuzz::EnsureLayoutRunList() {
@@ -1860,11 +1920,8 @@
     layout_run_list_.Reset();
 
     const base::string16& text = layout_text();
-    if (!text.empty()) {
-      TRACE_EVENT0("ui", "RenderTextHarfBuzz:EnsureLayoutRunList");
-      ItemizeTextToRuns(text, &layout_run_list_);
-      ShapeRunList(text, &layout_run_list_);
-    }
+    if (!text.empty())
+      ItemizeAndShapeText(text, &layout_run_list_);
 
     display_run_list_.reset();
     update_display_text_ = true;
diff --git a/ui/gfx/render_text_harfbuzz.h b/ui/gfx/render_text_harfbuzz.h
index eee7f0e..f87b5e0 100644
--- a/ui/gfx/render_text_harfbuzz.h
+++ b/ui/gfx/render_text_harfbuzz.h
@@ -72,21 +72,27 @@
   // Parameters that may be common to multiple text runs within a text run
   // list.
   struct GFX_EXPORT CommonParams {
-    CommonParams();
+    // The default constructor for Font is expensive, so always require that a
+    // Font be provided.
     explicit CommonParams(const Font& template_font);
     ~CommonParams();
     CommonParams(const CommonParams& other);
     CommonParams& operator=(const CommonParams& other);
+    bool operator==(const CommonParams& other) const;
 
-    // Populate |font_size| and |baseline_offset| based on |primary_font|. Note
-    // that this will not populate |font|.
-    void ComputeFontSizeAndBaselineOffset(const Font& primary_font);
+    // Populate |render_params|, |font_size| and |baseline_offset| based on
+    // |font|.
+    void ComputeRenderParamsFontSizeAndBaselineOffset();
 
     // Populate |font|, |skia_face|, and |render_params|. Return false if
     // |skia_face| is nullptr.
     bool SetFontAndRenderParams(const Font& font,
                                 const FontRenderParams& render_params);
 
+    struct Hash {
+      size_t operator()(const CommonParams& key) const;
+    };
+
     Font font;
     sk_sp<SkTypeface> skia_face;
     FontRenderParams render_params;
@@ -124,6 +130,11 @@
     size_t missing_glyph_count = std::numeric_limits<size_t>::max();
   };
 
+  // If |new_shape.missing_glyph_count| is less than that of |shape|, set
+  // |common| and |shape| to the specified values.
+  void UpdateCommonParamsAndShape(const CommonParams& new_common_params,
+                                  const ShapeOutput& new_shape);
+
   Range range;
   CommonParams common;
   ShapeOutput shape;
@@ -242,31 +253,42 @@
   SelectionModel LastSelectionModelInsideRun(
       const internal::TextRunHarfBuzz* run);
 
-  // Break the text into logical runs and populate the visual <-> logical maps
-  // into |run_list_out|.
+  using CommonizedRunsMap =
+      std::unordered_map<internal::TextRunHarfBuzz::CommonParams,
+                         std::vector<internal::TextRunHarfBuzz*>,
+                         internal::TextRunHarfBuzz::CommonParams::Hash>;
+
+  // Break the text into logical runs in |out_run_list|. Populate
+  // |out_commonized_run_map| such that each run is present in the vector
+  // corresponding to its CommonParams.
   void ItemizeTextToRuns(const base::string16& string,
-                         internal::TextRunList* run_list_out);
+                         internal::TextRunList* out_run_list,
+                         CommonizedRunsMap* out_commonized_run_map);
 
-  // Shape the glyphs of all runs in |run_list| using |text|.
-  void ShapeRunList(const base::string16& text,
-                    internal::TextRunList* run_list);
-
-  // Shape the glyphs needed for the |run| within the |text|. This method will
-  // apply a number of fonts to |common_params| and assign to |run->common| and
-  // |run->shape| the common font parameters and resulting shape output with the
-  // smallest number of missing glyphs.
-  void ShapeRun(const base::string16& text,
-                const internal::TextRunHarfBuzz::CommonParams& common_params,
-                internal::TextRunHarfBuzz* run);
-
-  // Shape the glyphs for |run| within |text| using the font specified by
-  // |common_params|. If the resulting shaping has fewer missing glyphs than
-  // |run->shape.missing_glyph_count|, then write |common_params| to
-  // |run->common| and write the shaping output to |run->shape|.
-  void ShapeRunWithFont(
+  // Shape the glyphs needed for each run in |runs| within |text|. This method
+  // will apply a number of fonts to |base_common_params| and assign to each
+  // run's CommonParams and ShapeOutput the parameters and resulting shape that
+  // had the smallest number of missing glyphs.
+  void ShapeRuns(
       const base::string16& text,
-      const internal::TextRunHarfBuzz::CommonParams& common_params,
-      internal::TextRunHarfBuzz* run);
+      const internal::TextRunHarfBuzz::CommonParams& base_common_params,
+      std::vector<internal::TextRunHarfBuzz*> runs);
+
+  // Shape the glyphs for |in_out_runs| within |text| using the parameters
+  // specified by |common_params|. If, for any run in |*in_out_runs|, the
+  // resulting shaping has fewer missing glyphs than the existing shape, then
+  // write |common_params| and the resulting ShapeOutput to that run. Remove all
+  // runs with no missing glyphs from |in_out_runs| (the caller, ShapeRuns, will
+  // terminate when no runs with missing glyphs remain).
+  void ShapeRunsWithFont(
+      const base::string16& text,
+      const internal::TextRunHarfBuzz::CommonParams& base_common_params,
+      std::vector<internal::TextRunHarfBuzz*>* in_out_runs);
+
+  // Itemize |text| into runs in |out_run_list|, shape the runs, and populate
+  // |out_run_list|'s visual <-> logical maps.
+  void ItemizeAndShapeText(const base::string16& text,
+                           internal::TextRunList* out_run_list);
 
   // Makes sure that text runs for layout text are shaped.
   void EnsureLayoutRunList();
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index b1cf6d2..a464024 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -553,14 +553,13 @@
                         const Font& font,
                         const FontRenderParams& render_params,
                         internal::TextRunHarfBuzz* run) {
-    const Font& primary_font =
-        GetRenderTextHarfBuzz()->font_list().GetPrimaryFont();
-    run->common.ComputeFontSizeAndBaselineOffset(primary_font);
-    if (!run->common.SetFontAndRenderParams(font, render_params))
-      return false;
+    internal::TextRunHarfBuzz::CommonParams common_params = run->common;
+    common_params.ComputeRenderParamsFontSizeAndBaselineOffset();
+    common_params.SetFontAndRenderParams(font, render_params);
     run->shape.missing_glyph_count = static_cast<size_t>(-1);
-    GetRenderTextHarfBuzz()->ShapeRunWithFont(text, run->common, run);
-    return true;
+    std::vector<internal::TextRunHarfBuzz*> runs = {run};
+    GetRenderTextHarfBuzz()->ShapeRunsWithFont(text, common_params, &runs);
+    return runs.empty();
   }
 
   int GetCursorYForTesting(int line_num = 0) {
@@ -4005,6 +4004,13 @@
   EXPECT_EQ(ToString16Vec({"x", "😁", "y", "✨"}), GetRunListStrings());
   // U+1F601 is represented as a surrogate pair in UTF-16.
   EXPECT_EQ("[0][1->2][3][4]", GetRunListStructureString());
+
+  // Ensure non-latin 「foo」 brackets around Emoji correctly break runs.
+  render_text->SetText(UTF8ToUTF16("「🦋」「"));
+  test_api()->EnsureLayout();
+  EXPECT_EQ(ToString16Vec({"「", "🦋", "」「"}), GetRunListStrings());
+  // Note 🦋 is a surrogate pair [1->2].
+  EXPECT_EQ("[0][1->2][3->4]", GetRunListStructureString());
 }
 
 TEST_P(RenderTextHarfBuzzTest, HarfBuzz_BreakRunsByEmojiVariationSelectors) {
diff --git a/ui/gfx/text_elider_unittest.cc b/ui/gfx/text_elider_unittest.cc
index 531b0f2..1ceab0ae 100644
--- a/ui/gfx/text_elider_unittest.cc
+++ b/ui/gfx/text_elider_unittest.cc
@@ -61,8 +61,7 @@
 // TODO(crbug.com/546240): This test fails on iOS because iOS version of
 // GetStringWidthF that calls [NSString sizeWithFont] returns the rounded string
 // width.
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS)
 #define MAYBE_ElideEmail DISABLED_ElideEmail
 #else
 #define MAYBE_ElideEmail ElideEmail
@@ -122,13 +121,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideEmailMoreSpace DISABLED_ElideEmailMoreSpace
-#else
-#define MAYBE_ElideEmailMoreSpace ElideEmailMoreSpace
-#endif
-TEST(TextEliderTest, MAYBE_ElideEmailMoreSpace) {
+TEST(TextEliderTest, ElideEmailMoreSpace) {
   const int test_width_factors[] = {
       100,
       10000,
@@ -157,8 +150,7 @@
 // TODO(crbug.com/546240): This test fails on iOS because iOS version of
 // GetStringWidthF that calls [NSString sizeWithFont] returns the rounded string
 // width.
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_IOS) || defined(OS_ANDROID)
+#if defined(OS_IOS)
 #define MAYBE_TestFilenameEliding DISABLED_TestFilenameEliding
 #else
 #define MAYBE_TestFilenameEliding TestFilenameEliding
@@ -215,13 +207,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideTextTruncate DISABLED_ElideTextTruncate
-#else
-#define MAYBE_ElideTextTruncate ElideTextTruncate
-#endif
-TEST(TextEliderTest, MAYBE_ElideTextTruncate) {
+TEST(TextEliderTest, ElideTextTruncate) {
   const FontList font_list;
   const float kTestWidth = GetStringWidthF(ASCIIToUTF16("Test"), font_list);
   struct TestData {
@@ -244,13 +230,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideTextEllipsis DISABLED_ElideTextEllipsis
-#else
-#define MAYBE_ElideTextEllipsis ElideTextEllipsis
-#endif
-TEST(TextEliderTest, MAYBE_ElideTextEllipsis) {
+TEST(TextEliderTest, ElideTextEllipsis) {
   const FontList font_list;
   const float kTestWidth = GetStringWidthF(ASCIIToUTF16("Test"), font_list);
   const char* kEllipsis = "\xE2\x80\xA6";
@@ -276,13 +256,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideTextEllipsisFront DISABLED_ElideTextEllipsisFront
-#else
-#define MAYBE_ElideTextEllipsisFront ElideTextEllipsisFront
-#endif
-TEST(TextEliderTest, MAYBE_ElideTextEllipsisFront) {
+TEST(TextEliderTest, ElideTextEllipsisFront) {
   const FontList font_list;
   const float kTestWidth = GetStringWidthF(ASCIIToUTF16("Test"), font_list);
   const std::string kEllipsisStr(kEllipsis);
@@ -328,13 +302,7 @@
 
 // Test that both both UTF-16 surrogate pairs and combining character sequences
 // do not get split by ElideText.
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideTextAtomicSequences DISABLED_ElideTextAtomicSequences
-#else
-#define MAYBE_ElideTextAtomicSequences ElideTextAtomicSequences
-#endif
-TEST(TextEliderTest, MAYBE_ElideTextAtomicSequences) {
+TEST(TextEliderTest, ElideTextAtomicSequences) {
 #if defined(OS_WIN)
   // Needed to bypass DCHECK in GetFallbackFont.
   base::MessageLoopForUI message_loop;
@@ -376,13 +344,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideTextLongStrings DISABLED_ElideTextLongStrings
-#else
-#define MAYBE_ElideTextLongStrings ElideTextLongStrings
-#endif
-TEST(TextEliderTest, MAYBE_ElideTextLongStrings) {
+TEST(TextEliderTest, ElideTextLongStrings) {
   const base::string16 kEllipsisStr = UTF8ToUTF16(kEllipsis);
   base::string16 data_scheme(UTF8ToUTF16("data:text/plain,"));
   size_t data_scheme_length = data_scheme.length();
@@ -628,13 +590,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleText DISABLED_ElideRectangleText
-#else
-#define MAYBE_ElideRectangleText ElideRectangleText
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleText) {
+TEST(TextEliderTest, ElideRectangleText) {
   const FontList font_list;
   const int line_height = font_list.GetHeight();
   const float test_width = GetStringWidthF(ASCIIToUTF16("Test"), font_list);
@@ -692,15 +648,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleTextFirstWordTruncated \
-  DISABLED_ElideRectangleTextFirstWordTruncated
-#else
-#define MAYBE_ElideRectangleTextFirstWordTruncated \
-  ElideRectangleTextFirstWordTruncated
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleTextFirstWordTruncated) {
+TEST(TextEliderTest, ElideRectangleTextFirstWordTruncated) {
   const FontList font_list;
   const int line_height = font_list.GetHeight();
 
@@ -751,14 +699,7 @@
   EXPECT_EQ(ASCIIToUTF16("t"), lines[2]);
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleTextPunctuation \
-    DISABLED_ElideRectangleTextPunctuation
-#else
-#define MAYBE_ElideRectangleTextPunctuation ElideRectangleTextPunctuation
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleTextPunctuation) {
+TEST(TextEliderTest, ElideRectangleTextPunctuation) {
   const FontList font_list;
   const int line_height = font_list.GetHeight();
   const float test_width = GetStringWidthF(ASCIIToUTF16("Test"), font_list);
@@ -800,13 +741,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleTextLongWords DISABLED_ElideRectangleTextLongWords
-#else
-#define MAYBE_ElideRectangleTextLongWords ElideRectangleTextLongWords
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleTextLongWords) {
+TEST(TextEliderTest, ElideRectangleTextLongWords) {
   const FontList font_list;
   const int kAvailableHeight = 1000;
   const base::string16 kElidedTesting =
@@ -873,14 +808,7 @@
 // fail because the truncated integer width is returned for the string
 // and the accumulation of the truncated values causes the elide function
 // to wrap incorrectly.
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleTextCheckLineWidth \
-    DISABLED_ElideRectangleTextCheckLineWidth
-#else
-#define MAYBE_ElideRectangleTextCheckLineWidth ElideRectangleTextCheckLineWidth
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleTextCheckLineWidth) {
+TEST(TextEliderTest, ElideRectangleTextCheckLineWidth) {
   FontList font_list;
 #if defined(OS_MACOSX) && !defined(OS_IOS)
   // Use a specific font to expose the line width exceeding problem.
@@ -918,13 +846,7 @@
 }
 #endif  // defined(OS_CHROMEOS)
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleString DISABLED_ElideRectangleString
-#else
-#define MAYBE_ElideRectangleString ElideRectangleString
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleString) {
+TEST(TextEliderTest, ElideRectangleString) {
   struct TestData {
     const char* input;
     int max_rows;
@@ -1007,14 +929,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleStringNotStrict \
-    DISABLED_ElideRectangleStringNotStrict
-#else
-#define MAYBE_ElideRectangleStringNotStrict ElideRectangleStringNotStrict
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleStringNotStrict) {
+TEST(TextEliderTest, ElideRectangleStringNotStrict) {
   struct TestData {
     const char* input;
     int max_rows;
@@ -1096,13 +1011,7 @@
   }
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleWide16 DISABLED_ElideRectangleWide16
-#else
-#define MAYBE_ElideRectangleWide16 ElideRectangleWide16
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleWide16) {
+TEST(TextEliderTest, ElideRectangleWide16) {
   // Two greek words separated by space.
   const base::string16 str(WideToUTF16(
       L"\x03a0\x03b1\x03b3\x03ba\x03cc\x03c3\x03bc\x03b9"
@@ -1121,13 +1030,7 @@
   EXPECT_EQ(out2, output);
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_ElideRectangleWide32 DISABLED_ElideRectangleWide32
-#else
-#define MAYBE_ElideRectangleWide32 ElideRectangleWide32
-#endif
-TEST(TextEliderTest, MAYBE_ElideRectangleWide32) {
+TEST(TextEliderTest, ElideRectangleWide32) {
   // Four U+1D49C MATHEMATICAL SCRIPT CAPITAL A followed by space "aaaaa".
   const base::string16 str(UTF8ToUTF16(
       "\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C\xF0\x9D\x92\x9C"
@@ -1140,13 +1043,7 @@
   EXPECT_EQ(out, output);
 }
 
-// TODO(crbug.com/338784): Enable this on android.
-#if defined(OS_ANDROID)
-#define MAYBE_TruncateString DISABLED_TruncateString
-#else
-#define MAYBE_TruncateString TruncateString
-#endif
-TEST(TextEliderTest, MAYBE_TruncateString) {
+TEST(TextEliderTest, TruncateString) {
   base::string16 str = ASCIIToUTF16("fooooey    bxxxar baz  ");
 
   // Test breaking at character 0.
diff --git a/ui/gfx/text_utils_android.cc b/ui/gfx/text_utils_android.cc
deleted file mode 100644
index bd799d6..0000000
--- a/ui/gfx/text_utils_android.cc
+++ /dev/null
@@ -1,25 +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 "ui/gfx/text_utils.h"
-
-#include "base/logging.h"
-
-namespace gfx {
-
-int GetStringWidth(const base::string16& text,
-                   const FontList& font_list,
-                   Typesetter typesetter) {
-  NOTIMPLEMENTED();
-  return 0;
-}
-
-float GetStringWidthF(const base::string16& text,
-                      const FontList& font_list,
-                      Typesetter typesetter) {
-  NOTIMPLEMENTED();
-  return 0;
-}
-
-}  // namespace gfx
diff --git a/ui/gfx/text_utils_unittest.cc b/ui/gfx/text_utils_unittest.cc
index 567cda9..32841c1 100644
--- a/ui/gfx/text_utils_unittest.cc
+++ b/ui/gfx/text_utils_unittest.cc
@@ -65,7 +65,7 @@
 }
 
 // Disabled on Ozone since there are no fonts: crbug.com/320050
-#if defined(USE_OZONE) || defined(OS_ANDROID)
+#if defined(USE_OZONE)
 #define MAYBE_GetStringWidth DISABLED_GetStringWidth
 #else
 #define MAYBE_GetStringWidth GetStringWidth
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index 695970b..665eb72 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -549,6 +549,9 @@
                {'name': 'glFlushMappedBufferRangeEXT'}],
   'arguments': 'GLenum target, GLintptr offset, GLsizeiptr length', },
 { 'return_type': 'void',
+  'names': ['glFramebufferParameteri'],
+  'arguments': 'GLenum target, GLenum pname, GLint param', },
+{ 'return_type': 'void',
   'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'],
   'arguments':
       'GLenum target, GLenum attachment, GLenum renderbuffertarget, '
diff --git a/ui/gl/gl_bindings.h b/ui/gl/gl_bindings.h
index ee534c6..cc428685 100644
--- a/ui/gl/gl_bindings.h
+++ b/ui/gl/gl_bindings.h
@@ -410,6 +410,11 @@
 #define GL_READBACK_SHADOW_COPIES_UPDATED_CHROMIUM 0x84F8
 #endif /* GL_CHROMIUM_nonblocking_readback */
 
+#ifndef GL_MESA_framebuffer_flip_y
+#define GL_MESA_framebuffer_flip_y 1
+#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB
+#endif /* GL_MESA_framebuffer_flip_y */
+
 #define GL_GLEXT_PROTOTYPES 1
 
 #if defined(OS_WIN)
diff --git a/ui/gl/gl_bindings_api_autogen_gl.h b/ui/gl/gl_bindings_api_autogen_gl.h
index 97cc537..5b427c0 100644
--- a/ui/gl/gl_bindings_api_autogen_gl.h
+++ b/ui/gl/gl_bindings_api_autogen_gl.h
@@ -339,6 +339,9 @@
 void glFlushMappedBufferRangeFn(GLenum target,
                                 GLintptr offset,
                                 GLsizeiptr length) override;
+void glFramebufferParameteriFn(GLenum target,
+                               GLenum pname,
+                               GLint param) override;
 void glFramebufferRenderbufferEXTFn(GLenum target,
                                     GLenum attachment,
                                     GLenum renderbuffertarget,
diff --git a/ui/gl/gl_bindings_autogen_gl.cc b/ui/gl/gl_bindings_autogen_gl.cc
index e71f785..8e1938b 100644
--- a/ui/gl/gl_bindings_autogen_gl.cc
+++ b/ui/gl/gl_bindings_autogen_gl.cc
@@ -934,6 +934,12 @@
             GetGLProcAddress("glFlushMappedBufferRangeEXT"));
   }
 
+  if (ver->IsAtLeastGL(4u, 3u) || ver->IsAtLeastGLES(3u, 1u)) {
+    fn.glFramebufferParameteriFn =
+        reinterpret_cast<glFramebufferParameteriProc>(
+            GetGLProcAddress("glFramebufferParameteri"));
+  }
+
   if (ver->IsAtLeastGL(3u, 0u) || ver->is_es) {
     fn.glFramebufferRenderbufferEXTFn =
         reinterpret_cast<glFramebufferRenderbufferEXTProc>(
@@ -3038,6 +3044,12 @@
   driver_->fn.glFlushMappedBufferRangeFn(target, offset, length);
 }
 
+void GLApiBase::glFramebufferParameteriFn(GLenum target,
+                                          GLenum pname,
+                                          GLint param) {
+  driver_->fn.glFramebufferParameteriFn(target, pname, param);
+}
+
 void GLApiBase::glFramebufferRenderbufferEXTFn(GLenum target,
                                                GLenum attachment,
                                                GLenum renderbuffertarget,
@@ -5778,6 +5790,13 @@
   gl_api_->glFlushMappedBufferRangeFn(target, offset, length);
 }
 
+void TraceGLApi::glFramebufferParameteriFn(GLenum target,
+                                           GLenum pname,
+                                           GLint param) {
+  TRACE_EVENT_BINARY_EFFICIENT0("gpu", "TraceGLAPI::glFramebufferParameteri")
+  gl_api_->glFramebufferParameteriFn(target, pname, param);
+}
+
 void TraceGLApi::glFramebufferRenderbufferEXTFn(GLenum target,
                                                 GLenum attachment,
                                                 GLenum renderbuffertarget,
@@ -9096,6 +9115,15 @@
   gl_api_->glFlushMappedBufferRangeFn(target, offset, length);
 }
 
+void DebugGLApi::glFramebufferParameteriFn(GLenum target,
+                                           GLenum pname,
+                                           GLint param) {
+  GL_SERVICE_LOG("glFramebufferParameteri"
+                 << "(" << GLEnums::GetStringEnum(target) << ", "
+                 << GLEnums::GetStringEnum(pname) << ", " << param << ")");
+  gl_api_->glFramebufferParameteriFn(target, pname, param);
+}
+
 void DebugGLApi::glFramebufferRenderbufferEXTFn(GLenum target,
                                                 GLenum attachment,
                                                 GLenum renderbuffertarget,
@@ -12806,6 +12834,12 @@
   NoContextHelper("glFlushMappedBufferRange");
 }
 
+void NoContextGLApi::glFramebufferParameteriFn(GLenum target,
+                                               GLenum pname,
+                                               GLint param) {
+  NoContextHelper("glFramebufferParameteri");
+}
+
 void NoContextGLApi::glFramebufferRenderbufferEXTFn(GLenum target,
                                                     GLenum attachment,
                                                     GLenum renderbuffertarget,
diff --git a/ui/gl/gl_bindings_autogen_gl.h b/ui/gl/gl_bindings_autogen_gl.h
index 4629e3a..03b3a2b9 100644
--- a/ui/gl/gl_bindings_autogen_gl.h
+++ b/ui/gl/gl_bindings_autogen_gl.h
@@ -395,6 +395,9 @@
 typedef void(GL_BINDING_CALL* glFlushMappedBufferRangeProc)(GLenum target,
                                                             GLintptr offset,
                                                             GLsizeiptr length);
+typedef void(GL_BINDING_CALL* glFramebufferParameteriProc)(GLenum target,
+                                                           GLenum pname,
+                                                           GLint param);
 typedef void(GL_BINDING_CALL* glFramebufferRenderbufferEXTProc)(
     GLenum target,
     GLenum attachment,
@@ -1700,6 +1703,7 @@
   glFinishFenceNVProc glFinishFenceNVFn;
   glFlushProc glFlushFn;
   glFlushMappedBufferRangeProc glFlushMappedBufferRangeFn;
+  glFramebufferParameteriProc glFramebufferParameteriFn;
   glFramebufferRenderbufferEXTProc glFramebufferRenderbufferEXTFn;
   glFramebufferTexture2DEXTProc glFramebufferTexture2DEXTFn;
   glFramebufferTexture2DMultisampleEXTProc
@@ -2344,6 +2348,9 @@
   virtual void glFlushMappedBufferRangeFn(GLenum target,
                                           GLintptr offset,
                                           GLsizeiptr length) = 0;
+  virtual void glFramebufferParameteriFn(GLenum target,
+                                         GLenum pname,
+                                         GLint param) = 0;
   virtual void glFramebufferRenderbufferEXTFn(GLenum target,
                                               GLenum attachment,
                                               GLenum renderbuffertarget,
@@ -3487,6 +3494,8 @@
 #define glFlush ::gl::g_current_gl_context->glFlushFn
 #define glFlushMappedBufferRange \
   ::gl::g_current_gl_context->glFlushMappedBufferRangeFn
+#define glFramebufferParameteri \
+  ::gl::g_current_gl_context->glFramebufferParameteriFn
 #define glFramebufferRenderbufferEXT \
   ::gl::g_current_gl_context->glFramebufferRenderbufferEXTFn
 #define glFramebufferTexture2DEXT \
diff --git a/ui/gl/gl_bindings_autogen_mock.cc b/ui/gl/gl_bindings_autogen_mock.cc
index 9a93ba8..f9bd00fb 100644
--- a/ui/gl/gl_bindings_autogen_mock.cc
+++ b/ui/gl/gl_bindings_autogen_mock.cc
@@ -1219,6 +1219,14 @@
 }
 
 void GL_BINDING_CALL
+MockGLInterface::Mock_glFramebufferParameteri(GLenum target,
+                                              GLenum pname,
+                                              GLint param) {
+  MakeFunctionUnique("glFramebufferParameteri");
+  interface_->FramebufferParameteri(target, pname, param);
+}
+
+void GL_BINDING_CALL
 MockGLInterface::Mock_glFramebufferRenderbuffer(GLenum target,
                                                 GLenum attachment,
                                                 GLenum renderbuffertarget,
@@ -4618,6 +4626,9 @@
   if (strcmp(name, "glFlushMappedBufferRangeEXT") == 0)
     return reinterpret_cast<GLFunctionPointerType>(
         Mock_glFlushMappedBufferRangeEXT);
+  if (strcmp(name, "glFramebufferParameteri") == 0)
+    return reinterpret_cast<GLFunctionPointerType>(
+        Mock_glFramebufferParameteri);
   if (strcmp(name, "glFramebufferRenderbuffer") == 0)
     return reinterpret_cast<GLFunctionPointerType>(
         Mock_glFramebufferRenderbuffer);
diff --git a/ui/gl/gl_bindings_autogen_mock.h b/ui/gl/gl_bindings_autogen_mock.h
index 03b9186..2d3dd877 100644
--- a/ui/gl/gl_bindings_autogen_mock.h
+++ b/ui/gl/gl_bindings_autogen_mock.h
@@ -505,6 +505,9 @@
 static void GL_BINDING_CALL Mock_glFlushMappedBufferRangeEXT(GLenum target,
                                                              GLintptr offset,
                                                              GLsizeiptr length);
+static void GL_BINDING_CALL Mock_glFramebufferParameteri(GLenum target,
+                                                         GLenum pname,
+                                                         GLint param);
 static void GL_BINDING_CALL
 Mock_glFramebufferRenderbuffer(GLenum target,
                                GLenum attachment,
diff --git a/ui/gl/gl_context.cc b/ui/gl/gl_context.cc
index 4e4ae136..466a321 100644
--- a/ui/gl/gl_context.cc
+++ b/ui/gl/gl_context.cc
@@ -14,6 +14,7 @@
 #include "base/memory/ptr_util.h"
 #include "base/strings/string_util.h"
 #include "base/threading/thread_local.h"
+#include "build/build_config.h"
 #include "ui/gl/gl_bindings.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_implementation.h"
@@ -187,6 +188,14 @@
   NOTREACHED();
 }
 
+#if defined(OS_MACOSX)
+uint64_t GLContext::BackpressureFenceCreate() {
+  return 0;
+}
+
+void GLContext::BackpressureFenceWait(uint64_t fence) {}
+#endif
+
 bool GLContext::HasExtension(const char* name) {
   return gfx::HasExtension(GetExtensions(), name);
 }
diff --git a/ui/gl/gl_context.h b/ui/gl/gl_context.h
index 1b92811..11e6fc8d 100644
--- a/ui/gl/gl_context.h
+++ b/ui/gl/gl_context.h
@@ -13,6 +13,7 @@
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
 #include "base/synchronization/cancellation_flag.h"
+#include "build/build_config.h"
 #include "ui/gfx/extension_set.h"
 #include "ui/gl/gl_export.h"
 #include "ui/gl/gl_share_group.h"
@@ -193,6 +194,16 @@
   // current.
   virtual void ForceReleaseVirtuallyCurrent();
 
+#if defined(OS_MACOSX)
+  // Create a fence for all work submitted to this context so far, and return a
+  // monotonically increasing handle to it. This returned handle never needs to
+  // be freed. This method is used to create backpressure to throttle GL work
+  // on macOS, so that we do not starve CoreAnimation.
+  virtual uint64_t BackpressureFenceCreate();
+  // Perform a client-side wait on a previously-created fence.
+  virtual void BackpressureFenceWait(uint64_t fence);
+#endif
+
  protected:
   virtual ~GLContext();
 
diff --git a/ui/gl/gl_context_cgl.cc b/ui/gl/gl_context_cgl.cc
index 1664a28..9bbbb27 100644
--- a/ui/gl/gl_context_cgl.cc
+++ b/ui/gl/gl_context_cgl.cc
@@ -17,6 +17,7 @@
 #include "base/threading/thread_task_runner_handle.h"
 #include "base/trace_event/trace_event.h"
 #include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_fence.h"
 #include "ui/gl/gl_gl_api_implementation.h"
 #include "ui/gl/gl_implementation.h"
 #include "ui/gl/gl_surface.h"
@@ -148,9 +149,9 @@
 }
 
 void GLContextCGL::Destroy() {
-  if (!yuv_to_rgb_converters_.empty()) {
+  if (!yuv_to_rgb_converters_.empty() || !backpressure_fences_.empty()) {
     // If this context is not current, bind this context's API so that the YUV
-    // converter can safely destruct
+    // converter and GLFences can safely destruct
     GLContext* current_context = GetRealCurrent();
     if (current_context != this) {
       SetCurrentGL(GetCurrentGL());
@@ -159,6 +160,7 @@
     ScopedCGLSetCurrentContext scoped_set_current(
         static_cast<CGLContextObj>(context_));
     yuv_to_rgb_converters_.clear();
+    backpressure_fences_.clear();
 
     // Rebind the current context's API if needed.
     if (current_context && current_context != this) {
@@ -234,6 +236,72 @@
   return yuv_to_rgb_converter.get();
 }
 
+// If the GLFence extensions are not supported or are unstable, fall back to
+// using a glFinish. Use this id to denote a fence that should be implemented
+// as glFinish.
+constexpr uint64_t kFinishFenceId = -1;
+
+uint64_t GLContextCGL::BackpressureFenceCreate() {
+  TRACE_EVENT0("gpu", "GLContextCGL::BackpressureFenceCreate");
+  // TODO(ccameron): Remove this CHECK.
+  CHECK(CGLGetCurrentContext() == context_);
+  CHECK(context_);
+  if (gl::GLFence::IsSupported()) {
+    backpressure_fences_[next_backpressure_fence_] = GLFence::Create();
+    return next_backpressure_fence_++;
+  }
+  return kFinishFenceId;
+}
+
+void GLContextCGL::BackpressureFenceWait(uint64_t fence_id) {
+  TRACE_EVENT0("gpu", "GLContextCGL::BackpressureFenceWait");
+  // TODO(ccameron): Remove this CHECK.
+  CHECK(CGLGetCurrentContext() == context_);
+  CHECK(context_);
+  if (fence_id == kFinishFenceId) {
+    glFinish();
+    return;
+  }
+
+  // If a fence is not found, then it has already been waited on.
+  auto found = backpressure_fences_.find(fence_id);
+  if (found == backpressure_fences_.end())
+    return;
+  std::unique_ptr<GLFence> fence = std::move(found->second);
+  backpressure_fences_.erase(found);
+
+  // While we could call GLFence::ClientWait, this performs a busy wait on
+  // Mac, leading to high CPU usage. Instead we poll with a 1ms delay. This
+  // should have minimal impact, as we will only hit this path when we are
+  // more than one frame (16ms) behind.
+  //
+  // Note that on some platforms (10.9), fences appear to sometimes get
+  // lost and will never pass. Add a 32ms timout to prevent these
+  // situations from causing a GPU process hang.
+  // https://crbug.com/618075
+  bool fence_completed = false;
+  for (int poll_iter = 0; !fence_completed && poll_iter < 32; ++poll_iter) {
+    if (poll_iter > 0) {
+      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
+    }
+    {
+      TRACE_EVENT0("gpu", "GLFence::HasCompleted");
+      fence_completed = fence->HasCompleted();
+    }
+  }
+  if (!fence_completed) {
+    TRACE_EVENT0("gpu", "Finish");
+    // We timed out waiting for the above fence, just issue a glFinish.
+    glFinish();
+  }
+  fence.reset();
+
+  // Waiting on |fence_id| has implicitly waited on all previous fences, so
+  // remove them.
+  while (backpressure_fences_.begin()->first < fence_id)
+    backpressure_fences_.erase(backpressure_fences_.begin());
+}
+
 bool GLContextCGL::MakeCurrent(GLSurface* surface) {
   DCHECK(context_);
 
diff --git a/ui/gl/gl_context_cgl.h b/ui/gl/gl_context_cgl.h
index 1baf2e3..6f29454 100644
--- a/ui/gl/gl_context_cgl.h
+++ b/ui/gl/gl_context_cgl.h
@@ -17,6 +17,7 @@
 
 namespace gl {
 
+class GLFence;
 class GLSurface;
 
 // Encapsulates a CGL OpenGL context.
@@ -35,6 +36,8 @@
   bool ForceGpuSwitchIfNeeded() override;
   YUVToRGBConverter* GetYUVToRGBConverter(
       const gfx::ColorSpace& color_space) override;
+  uint64_t BackpressureFenceCreate() override;
+  void BackpressureFenceWait(uint64_t fence) override;
 
  protected:
   ~GLContextCGL() override;
@@ -48,6 +51,9 @@
   std::map<gfx::ColorSpace, std::unique_ptr<YUVToRGBConverter>>
       yuv_to_rgb_converters_;
 
+  std::map<uint64_t, std::unique_ptr<GLFence>> backpressure_fences_;
+  uint64_t next_backpressure_fence_ = 0;
+
   CGLPixelFormatObj discrete_pixelformat_;
 
   int screen_;
diff --git a/ui/gl/gl_enums_implementation_autogen.h b/ui/gl/gl_enums_implementation_autogen.h
index 9a8be38..622d2c2 100644
--- a/ui/gl/gl_enums_implementation_autogen.h
+++ b/ui/gl/gl_enums_implementation_autogen.h
@@ -2110,6 +2110,9 @@
         0x8B9B, "GL_IMPLEMENTATION_COLOR_READ_FORMAT",
     },
     {
+        0x8BBB, "GL_FRAMEBUFFER_FLIP_Y_MESA",
+    },
+    {
         0x8BC0, "GL_COUNTER_TYPE_AMD",
     },
     {
diff --git a/ui/gl/gl_mock_autogen_gl.h b/ui/gl/gl_mock_autogen_gl.h
index 3d62e876..18b04c1 100644
--- a/ui/gl/gl_mock_autogen_gl.h
+++ b/ui/gl/gl_mock_autogen_gl.h
@@ -309,6 +309,8 @@
 MOCK_METHOD0(Flush, void());
 MOCK_METHOD3(FlushMappedBufferRange,
              void(GLenum target, GLintptr offset, GLsizeiptr length));
+MOCK_METHOD3(FramebufferParameteri,
+             void(GLenum target, GLenum pname, GLint param));
 MOCK_METHOD4(FramebufferRenderbufferEXT,
              void(GLenum target,
                   GLenum attachment,
diff --git a/ui/gl/gl_stub_autogen_gl.h b/ui/gl/gl_stub_autogen_gl.h
index 0a979681..9dbeca9 100644
--- a/ui/gl/gl_stub_autogen_gl.h
+++ b/ui/gl/gl_stub_autogen_gl.h
@@ -341,6 +341,9 @@
 void glFlushMappedBufferRangeFn(GLenum target,
                                 GLintptr offset,
                                 GLsizeiptr length) override {}
+void glFramebufferParameteriFn(GLenum target,
+                               GLenum pname,
+                               GLint param) override {}
 void glFramebufferRenderbufferEXTFn(GLenum target,
                                     GLenum attachment,
                                     GLenum renderbuffertarget,
diff --git a/ui/ozone/platform/drm/common/drm_util.cc b/ui/ozone/platform/drm/common/drm_util.cc
index 146160b..117ab3a 100644
--- a/ui/ozone/platform/drm/common/drm_util.cc
+++ b/ui/ozone/platform/drm/common/drm_util.cc
@@ -212,7 +212,9 @@
   // and tested.
   drmVersionPtr drm_version = drmGetVersion(fd);
   DCHECK(drm_version) << "Can't get version for drm device.";
-  return std::string(drm_version->name) == name;
+  bool result = std::string(drm_version->name) == name;
+  drmFreeVersion(drm_version);
+  return result;
 }
 
 bool AreDisplayModesEqual(const DisplayMode_Params& lhs,
@@ -422,17 +424,9 @@
   const display::DisplayConnectionType type = GetDisplayType(info->connector());
   const bool is_aspect_preserving_scaling =
       IsAspectPreserving(fd, info->connector());
-  bool has_color_correction_matrix =
+  const bool has_color_correction_matrix =
       HasColorCorrectionMatrix(fd, info->crtc()) ||
       HasPerPlaneColorCorrectionMatrix(fd, info->crtc());
-  // On i915, some external monitors seem to have washed out colors when a CTM
-  // is set (even if it's the identity) for some resolutions. Claim external
-  // monitors don't support CTM.
-  if (IsDrmModuleName(fd, "i915") &&
-      type != display::DISPLAY_CONNECTION_TYPE_INTERNAL) {
-    has_color_correction_matrix = false;
-  }
-
   // On rk3399 we can set a color correction matrix that will be applied in
   // linear space. https://crbug.com/839020 to track if it will be possible to
   // disable the per-plane degamma/gamma.
diff --git a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc
index bdd2431..467cc796 100644
--- a/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_surface_factory.cc
@@ -32,7 +32,22 @@
 #include "gpu/vulkan/vulkan_function_pointers.h"
 #include "ui/ozone/platform/drm/gpu/vulkan_implementation_gbm.h"
 #if defined(OS_CHROMEOS)
-#include <vulkan/vulkan_intel.h>
+#define VK_STRUCTURE_TYPE_DMA_BUF_IMAGE_CREATE_INFO_INTEL 1024
+typedef struct VkDmaBufImageCreateInfo_ {
+  VkStructureType sType;
+  const void* pNext;
+  int fd;
+  VkFormat format;
+  VkExtent3D extent;
+  uint32_t strideInBytes;
+} VkDmaBufImageCreateInfo;
+
+typedef VkResult(VKAPI_PTR* PFN_vkCreateDmaBufImageINTEL)(
+    VkDevice device,
+    const VkDmaBufImageCreateInfo* pCreateInfo,
+    const VkAllocationCallbacks* pAllocator,
+    VkDeviceMemory* pMem,
+    VkImage* pImage);
 #endif
 #endif
 
diff --git a/ui/views/bubble/bubble_frame_view_unittest.cc b/ui/views/bubble/bubble_frame_view_unittest.cc
index bd891dc54..0366f1f 100644
--- a/ui/views/bubble/bubble_frame_view_unittest.cc
+++ b/ui/views/bubble/bubble_frame_view_unittest.cc
@@ -50,7 +50,8 @@
 
 class TestBubbleFrameViewWidgetDelegate : public WidgetDelegate {
  public:
-  TestBubbleFrameViewWidgetDelegate(Widget* widget) : widget_(widget) {}
+  explicit TestBubbleFrameViewWidgetDelegate(Widget* widget)
+      : widget_(widget) {}
 
   ~TestBubbleFrameViewWidgetDelegate() override {}
 
@@ -77,35 +78,31 @@
   }
 
  private:
-  Widget* widget_;
+  Widget* const widget_;
   View* contents_view_ = nullptr;  // Owned by |widget_|.
   bool should_show_close_ = false;
 };
 
 class TestBubbleFrameView : public BubbleFrameView {
  public:
-  TestBubbleFrameView(ViewsTestBase* test_base)
+  explicit TestBubbleFrameView(ViewsTestBase* test_base)
       : BubbleFrameView(gfx::Insets(), gfx::Insets(kMargin)),
-        test_base_(test_base),
         available_bounds_(gfx::Rect(0, 0, 1000, 1000)) {
-    SetBubbleBorder(std::unique_ptr<BubbleBorder>(
-        new BubbleBorder(kArrow, BubbleBorder::NO_SHADOW, kColor)));
+    SetBubbleBorder(std::make_unique<BubbleBorder>(
+        kArrow, BubbleBorder::NO_SHADOW, kColor));
+    widget_ = std::make_unique<Widget>();
+    widget_delegate_ =
+        std::make_unique<TestBubbleFrameViewWidgetDelegate>(widget_.get());
+    Widget::InitParams params =
+        test_base->CreateParams(Widget::InitParams::TYPE_BUBBLE);
+    params.delegate = widget_delegate_.get();
+    params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
+    widget_->Init(params);
   }
   ~TestBubbleFrameView() override {}
 
   // View overrides:
   const Widget* GetWidget() const override {
-    if (!widget_) {
-      widget_.reset(new Widget);
-      widget_delegate_.reset(
-          new TestBubbleFrameViewWidgetDelegate(widget_.get()));
-      Widget::InitParams params =
-          test_base_->CreateParams(Widget::InitParams::TYPE_BUBBLE);
-      params.delegate = widget_delegate_.get();
-      params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
-      widget_->Init(params);
-    }
-
     return widget_.get();
   }
 
@@ -119,13 +116,10 @@
   }
 
  private:
-  ViewsTestBase* test_base_;
+  const gfx::Rect available_bounds_;
 
-  gfx::Rect available_bounds_;
-
-  // Widget returned by GetWidget(). Only created if GetWidget() is called.
-  mutable std::unique_ptr<TestBubbleFrameViewWidgetDelegate> widget_delegate_;
-  mutable std::unique_ptr<Widget> widget_;
+  std::unique_ptr<TestBubbleFrameViewWidgetDelegate> widget_delegate_;
+  std::unique_ptr<Widget> widget_;
 
   DISALLOW_COPY_AND_ASSIGN(TestBubbleFrameView);
 };
@@ -159,9 +153,6 @@
 
 TEST_F(BubbleFrameViewTest, GetBoundsForClientViewWithClose) {
   TestBubbleFrameView frame(this);
-  // TestBubbleFrameView::GetWidget() is responsible for creating the widget and
-  // widget delegate at first call, so it is called here for that side-effect.
-  ignore_result(frame.GetWidget());
   frame.widget_delegate()->SetShouldShowCloseButton(true);
   frame.ResetWindowControls();
   EXPECT_EQ(kArrow, frame.bubble_border()->arrow());
diff --git a/ui/views/cocoa/bridged_native_widget.h b/ui/views/cocoa/bridged_native_widget.h
index bb911b9d..674a9b7 100644
--- a/ui/views/cocoa/bridged_native_widget.h
+++ b/ui/views/cocoa/bridged_native_widget.h
@@ -213,8 +213,19 @@
   bool wants_to_be_visible() const { return wants_to_be_visible_; }
   bool in_fullscreen_transition() const { return in_fullscreen_transition_; }
 
-  bool GetAnimate() const;
-  void SetAnimate(bool animate);
+  // Enables or disables all window animations.
+  void SetAnimationEnabled(bool animate);
+
+  // Sets which transitions will animate. Currently this only affects non-native
+  // animations. TODO(tapted): Use scoping to disable native animations at
+  // appropriate times as well.
+  void set_transitions_to_animate(int transitions) {
+    transitions_to_animate_ = transitions;
+  }
+
+  // Whether to run a custom animation for the provided |transition|.
+  bool ShouldRunCustomAnimationFor(
+      Widget::VisibilityTransition transition) const;
 
   // ui::CATransactionCoordinator::PreCommitObserver implementation
   bool ShouldWaitInPreCommit() override;
@@ -326,6 +337,10 @@
   // window in AppKit coordinates is not actually changing in this case.
   gfx::Point last_window_frame_origin_;
 
+  // The transition types to animate when not relying on native NSWindow
+  // animation behaviors. Bitmask of Widget::VisibilityTransition.
+  int transitions_to_animate_ = Widget::ANIMATE_BOTH;
+
   // Whether this window wants to be fullscreen. If a fullscreen animation is in
   // progress then it might not be actually fullscreen.
   bool target_fullscreen_state_;
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index ebbc017..c85c4d3 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -8,6 +8,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include "base/command_line.h"
 #include "base/logging.h"
 #import "base/mac/foundation_util.h"
 #include "base/mac/mac_util.h"
@@ -21,6 +22,7 @@
 #include "ui/base/ime/input_method.h"
 #include "ui/base/ime/input_method_factory.h"
 #include "ui/base/layout.h"
+#include "ui/base/ui_base_switches.h"
 #include "ui/compositor/recyclable_compositor_mac.h"
 #include "ui/gfx/geometry/dip_util.h"
 #import "ui/gfx/mac/coordinate_conversion.h"
@@ -527,7 +529,7 @@
 
   // For non-sheet modal types, use the constrained window animations to make
   // the window appear.
-  if (GetAnimate() && native_widget_mac_->GetWidget()->IsModal()) {
+  if (ShouldRunCustomAnimationFor(Widget::ANIMATE_SHOW)) {
     show_animation_.reset(
         [[ModalShowAnimationWithLayer alloc] initWithBridgedNativeWidget:this]);
 
@@ -903,12 +905,6 @@
                                                            : SK_ColorWHITE);
   layer()->SetFillsBoundsOpaquely(!translucent);
 
-  // Don't block waiting for the initial frame of transparent windows. This
-  // allows us to avoid blocking on the UI thread e.g, while typing in the
-  // omnibox.
-  // https://crbug.com/712268
-  ca_transaction_sync_suppressed_ = translucent;
-
   // Use the regular window background for window modal sheets. The layer() will
   // still paint over most of it, but the native -[NSApp beginSheet:] animation
   // blocks the UI thread, so there's no way to invalidate the shadow to match
@@ -917,12 +913,16 @@
   // native shape is what's most appropriate for displaying sheets on Mac.
   if (translucent && !native_widget_mac_->IsWindowModalSheet()) {
     [window_ setOpaque:NO];
-    // For Mac OS versions earlier than Yosemite, the Window server isn't able
-    // to generate a window shadow from the composited CALayer. To get around
-    // this, let the window background remain opaque and clip the window
-    // boundary in drawRect method of BridgedContentView. See crbug.com/543671.
-    if (base::mac::IsAtLeastOS10_10())
-      [window_ setBackgroundColor:[NSColor clearColor]];
+    [window_ setBackgroundColor:[NSColor clearColor]];
+
+    // Don't block waiting for the initial frame of completely transparent
+    // windows. This allows us to avoid blocking on the UI thread e.g, while
+    // typing in the omnibox. Note window modal sheets _must_ wait: there is no
+    // way for a frame to arrive during AppKit's sheet animation.
+    // https://crbug.com/712268
+    ca_transaction_sync_suppressed_ = true;
+  } else {
+    DCHECK(!ca_transaction_sync_suppressed_);
   }
 
   UpdateLayerProperties();
@@ -994,16 +994,31 @@
   }
 }
 
-bool BridgedNativeWidget::GetAnimate() const {
-  return [window_ animationBehavior] != NSWindowAnimationBehaviorNone;
-}
-
-void BridgedNativeWidget::SetAnimate(bool animate) {
+void BridgedNativeWidget::SetAnimationEnabled(bool animate) {
   [window_
       setAnimationBehavior:(animate ? NSWindowAnimationBehaviorDocumentWindow
                                     : NSWindowAnimationBehaviorNone)];
 }
 
+bool BridgedNativeWidget::ShouldRunCustomAnimationFor(
+    Widget::VisibilityTransition transition) const {
+  // The logic around this needs to change if new transition types are set.
+  // E.g. it would be nice to distinguish "hide" from "close". Mac currently
+  // treats "hide" only as "close". Hide (e.g. Cmd+h) should not animate on Mac.
+  constexpr int kSupported =
+      Widget::ANIMATE_SHOW | Widget::ANIMATE_HIDE | Widget::ANIMATE_NONE;
+  DCHECK_EQ(0, transitions_to_animate_ & ~kSupported);
+
+  // Custom animations are only used for tab-modals. Note this also checks the
+  // native animation property. Clearing that will also disable custom
+  // animations to ensure that the views::Widget API behaves consistently.
+  return (transitions_to_animate_ & transition) &&
+         native_widget_mac_->GetWidget()->IsModal() &&
+         [window_ animationBehavior] != NSWindowAnimationBehaviorNone &&
+         !base::CommandLine::ForCurrentProcess()->HasSwitch(
+             switches::kDisableModalAnimations);
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 // BridgedNativeWidget, ui::CATransactionObserver
 
diff --git a/ui/views/mus/mus_client.cc b/ui/views/mus/mus_client.cc
index f4f36ac..8bd38d9 100644
--- a/ui/views/mus/mus_client.cc
+++ b/ui/views/mus/mus_client.cc
@@ -14,7 +14,6 @@
 #include "services/ui/public/cpp/input_devices/input_device_client.h"
 #include "services/ui/public/cpp/property_type_converters.h"
 #include "services/ui/public/interfaces/constants.mojom.h"
-#include "services/ui/public/interfaces/event_matcher.mojom.h"
 #include "services/ui/public/interfaces/window_manager.mojom.h"
 #include "ui/aura/env.h"
 #include "ui/aura/mus/capture_synchronizer.h"
diff --git a/ui/views/mus/screen_mus.h b/ui/views/mus/screen_mus.h
index 2ab3ff95..def56e1 100644
--- a/ui/views/mus/screen_mus.h
+++ b/ui/views/mus/screen_mus.h
@@ -13,7 +13,8 @@
 
 class ScreenMusDelegate;
 
-// Screen implementation backed by ui::mojom::ScreenProvider.
+// Screen implementation that gets information from
+// ui::mojom::ScreenProviderObserver.
 class VIEWS_MUS_EXPORT ScreenMus : public display::ScreenBase,
                                    public ui::mojom::ScreenProviderObserver {
  public:
diff --git a/ui/views/widget/native_widget_mac.mm b/ui/views/widget/native_widget_mac.mm
index 3efb822..3cf9af6 100644
--- a/ui/views/widget/native_widget_mac.mm
+++ b/ui/views/widget/native_widget_mac.mm
@@ -9,7 +9,6 @@
 #include <utility>
 
 #include "base/bind.h"
-#include "base/command_line.h"
 #include "base/mac/foundation_util.h"
 #include "base/mac/scoped_nsobject.h"
 #include "base/strings/sys_string_conversions.h"
@@ -17,7 +16,6 @@
 #include "components/crash/core/common/crash_key.h"
 #import "ui/base/cocoa/constrained_window/constrained_window_animation.h"
 #import "ui/base/cocoa/window_size_constants.h"
-#include "ui/base/ui_base_switches.h"
 #include "ui/display/display.h"
 #include "ui/display/screen.h"
 #include "ui/gfx/font_list.h"
@@ -50,11 +48,6 @@
 namespace views {
 namespace {
 
-bool AreModalAnimationsEnabled() {
-  return !base::CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kDisableModalAnimations);
-}
-
 NSInteger StyleMaskForParams(const Widget::InitParams& params) {
   // If the Widget is modal, it will be displayed as a sheet. This works best if
   // it has NSTitledWindowMask. For example, with NSBorderlessWindowMask, the
@@ -402,8 +395,7 @@
   }
 
   // For other modal types, animate the close.
-  if (bridge_->GetAnimate() && AreModalAnimationsEnabled() &&
-      delegate_->IsModal()) {
+  if (bridge_->ShouldRunCustomAnimationFor(Widget::ANIMATE_HIDE)) {
     [ViewsNSWindowCloseAnimator closeWindowWithAnimation:window];
     return;
   }
@@ -634,7 +626,7 @@
 
 void NativeWidgetMac::SetVisibilityChangedAnimationsEnabled(bool value) {
   if (bridge_)
-    bridge_->SetAnimate(value);
+    bridge_->SetAnimationEnabled(value);
 }
 
 void NativeWidgetMac::SetVisibilityAnimationDuration(
@@ -644,7 +636,8 @@
 
 void NativeWidgetMac::SetVisibilityAnimationTransition(
     Widget::VisibilityTransition transition) {
-  NOTIMPLEMENTED();
+  if (bridge_)
+    bridge_->set_transitions_to_animate(transition);
 }
 
 bool NativeWidgetMac::IsTranslucentWindowOpacitySupported() const {
diff --git a/ui/views/widget/native_widget_mac_unittest.mm b/ui/views/widget/native_widget_mac_unittest.mm
index 490a9d7e..4ad18cc 100644
--- a/ui/views/widget/native_widget_mac_unittest.mm
+++ b/ui/views/widget/native_widget_mac_unittest.mm
@@ -1218,12 +1218,24 @@
   retained_animation.reset();
 
   // Disable animations and show again.
-  modal_dialog_widget->SetVisibilityChangedAnimationsEnabled(false);
+  modal_dialog_widget->SetVisibilityAnimationTransition(Widget::ANIMATE_NONE);
   modal_dialog_widget->Show();
   EXPECT_FALSE(test_api.show_animation());  // No animation this time.
   modal_dialog_widget->Hide();
 
   // Test after re-enabling.
+  modal_dialog_widget->SetVisibilityAnimationTransition(Widget::ANIMATE_BOTH);
+  modal_dialog_widget->Show();
+  EXPECT_TRUE(test_api.show_animation());
+  retained_animation.reset(test_api.show_animation(),
+                           base::scoped_policy::RETAIN);
+
+  // Test whether disabling native animations also disables custom modal ones.
+  modal_dialog_widget->SetVisibilityChangedAnimationsEnabled(false);
+  modal_dialog_widget->Show();
+  EXPECT_FALSE(test_api.show_animation());  // No animation this time.
+  modal_dialog_widget->Hide();
+  // Renable.
   modal_dialog_widget->SetVisibilityChangedAnimationsEnabled(true);
   modal_dialog_widget->Show();
   EXPECT_TRUE(test_api.show_animation());
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_shared_css.html b/ui/webui/resources/cr_components/certificate_manager/certificate_shared_css.html
index 88fbdb2e2..00f6e17 100644
--- a/ui/webui/resources/cr_components/certificate_manager/certificate_shared_css.html
+++ b/ui/webui/resources/cr_components/certificate_manager/certificate_shared_css.html
@@ -7,10 +7,10 @@
     <style include="cr-shared-style">
       /* .list-frame and .list-item match the styling in settings_shared_css. */
       .list-frame {
-        -webkit-padding-end: 20px;
-        -webkit-padding-start: 60px;
         align-items: center;
         display: block;
+        padding-inline-end: 20px;
+        padding-inline-start: 60px;
       }
 
       .list-item {
diff --git a/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.html b/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.html
index 96310bc..409975b 100644
--- a/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.html
+++ b/ui/webui/resources/cr_components/certificate_manager/certificate_subentry.html
@@ -17,9 +17,9 @@
       }
 
       .untrusted {
-        -webkit-margin-end: 16px;
         color: var(--paper-red-700);
         font-weight: 500;
+        margin-inline-end: 16px;
         text-transform: uppercase;
       }
 
diff --git a/ui/webui/resources/cr_components/chromeos/bluetooth_dialog.html b/ui/webui/resources/cr_components/chromeos/bluetooth_dialog.html
index f2cb53a..89d19e9b 100644
--- a/ui/webui/resources/cr_components/chromeos/bluetooth_dialog.html
+++ b/ui/webui/resources/cr_components/chromeos/bluetooth_dialog.html
@@ -75,7 +75,7 @@
       }
 
       paper-button.action-button {
-        -webkit-margin-start: 8px;
+        margin-inline-start: 8px;
       }
     </style>
     <!-- TODO(stevenjb/dschuyler): Find a solution to support i18n{} here -->
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_choose_mobile.html b/ui/webui/resources/cr_components/chromeos/network/network_choose_mobile.html
index 631416c..ce2da59 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_choose_mobile.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_choose_mobile.html
@@ -13,7 +13,7 @@
     <style include="network-shared md-select iron-flex paper-button-style">
       /* Leave some space between button and select. */
       select {
-        -webkit-margin-start: 8px;
+        margin-inline-start: 8px;
       }
     </style>
     <div class="property-box first two-line">
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html
index 9652ec4..7cb2f0f 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_nameservers.html
@@ -13,13 +13,13 @@
   <template>
     <style include="network-shared md-select iron-flex">
       a {
-        -webkit-margin-start: 4px;
+        margin-inline-start: 4px;
       }
 
       cr-input {
-        /* Aligns with the start of cr-radio-button's text. */
-        -webkit-margin-start: 38px;
         margin-bottom: 4px;
+        /* Aligns with the start of cr-radio-button's text. */
+        margin-inline-start: 38px;
       }
 
       paper-radio-group {
@@ -29,14 +29,14 @@
 
       .nameservers {
         /* Aligns with the start of cr-radio-button's text. */
-        -webkit-margin-start: 38px;
+        margin-inline-start: 38px;
       }
 
       #radioGroupDiv {
-        -webkit-padding-end: var(--cr-section-padding);
-        -webkit-padding-start: var(--cr-section-padding);
         align-items: center;
         display: block;
+        padding-inline-end: var(--cr-section-padding);
+        padding-inline-start: var(--cr-section-padding);
       }
 
     </style>
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_property_list.html b/ui/webui/resources/cr_components/chromeos/network/network_property_list.html
index ed8d700..7f9e937 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_property_list.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_property_list.html
@@ -21,7 +21,7 @@
       }
 
       cr-policy-network-indicator {
-        -webkit-margin-start: var(--settings-controlled-by-spacing);
+        margin-inline-start: var(--settings-controlled-by-spacing);
       }
     </style>
     <template is="dom-repeat" items="[[fields]]"
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_proxy.html b/ui/webui/resources/cr_components/chromeos/network/network_proxy.html
index 13d1e953..4a01756d 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_proxy.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_proxy.html
@@ -32,7 +32,7 @@
       }
 
       #manualProxy {
-        -webkit-padding-start: var(--cr-section-padding);
+        padding-inline-start: var(--cr-section-padding);
       }
     </style>
 
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html b/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html
index bb92d28..55f5ea9 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_shared_css.html
@@ -22,7 +22,7 @@
       }
 
       .property-box.indented {
-        -webkit-margin-start: var(--cr-section-padding);
+        margin-inline-start: var(--cr-section-padding);
       }
 
       .property-box.single-column {
@@ -45,9 +45,9 @@
       }
 
       .property-box > .middle {
-        -webkit-padding-start: 16px;
         align-items: center;
         flex: auto;
+        padding-inline-start: 16px;
       }
 
       .secondary {
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_siminfo.html b/ui/webui/resources/cr_components/chromeos/network/network_siminfo.html
index 38cfcfa6..9b80166 100644
--- a/ui/webui/resources/cr_components/chromeos/network/network_siminfo.html
+++ b/ui/webui/resources/cr_components/chromeos/network/network_siminfo.html
@@ -22,7 +22,7 @@
       }
 
       iron-icon {
-       -webkit-margin-end: 10px;
+        margin-inline-end: 10px;
       }
 
       .dialog-error {
@@ -38,15 +38,15 @@
       }
 
       .separator {
-        -webkit-border-start: var(--cr-separator-line);
-        -webkit-margin-end: var(--cr-section-padding);
-        -webkit-margin-start: var(--cr-section-padding);
+        border-inline-start: var(--cr-separator-line);
         flex-shrink: 0;
         height: calc(var(--cr-section-min-height) - 9px);
+        margin-inline-end: var(--cr-section-padding);
+        margin-inline-start: var(--cr-section-padding);
       }
 
       cr-toggle {
-        -webkit-margin-start: var(--cr-button-edge-spacing);
+        margin-inline-start: var(--cr-button-edge-spacing);
       }
     </style>
 
diff --git a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html
index 9a5c63cb..fbe37a20 100644
--- a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html
+++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_camera.html
@@ -128,8 +128,8 @@
       }
 
       #switchMode {
-        -webkit-margin-end: 8px;
         background-image: url(videocam_icon.svg);
+        margin-inline-end: 8px;
       }
 
       :host([videomode]) #switchMode {
diff --git a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html
index 607ac714..f0549d0b 100644
--- a/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html
+++ b/ui/webui/resources/cr_elements/chromeos/cr_picture/cr_picture_pane.html
@@ -58,9 +58,9 @@
 
       #discard button {
         --iron-icon-fill-color: white;
-        -webkit-margin-end: 0;
-        -webkit-margin-start: 0;
         border-radius: 50%;
+        margin-inline-end: 0;
+        margin-inline-start: 0;
       }
     </style>
     <div id="preview" hidden="[[!showImagePreview_(cameraActive_, imageSrc)]]">
diff --git a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
index 9a38d0d..4a9bbe3 100644
--- a/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
+++ b/ui/webui/resources/cr_elements/chromeos/network/cr_network_list_item.html
@@ -20,7 +20,7 @@
       }
 
       #divOuter {
-        -webkit-padding-end: var(--cr-icon-ripple-padding);
+        padding-inline-end: var(--cr-icon-ripple-padding);
       }
 
       #divDetail {
@@ -30,11 +30,11 @@
       }
 
       #divText {
-        -webkit-margin-start: 20px;
         display: flex;
         flex: 1 0 auto;
         flex-direction: column;
         justify-content: center;
+        margin-inline-start: 20px;
       }
 
       #networkStateText {
diff --git a/ui/webui/resources/cr_elements/cr_checkbox/cr_checkbox.html b/ui/webui/resources/cr_elements/cr_checkbox/cr_checkbox.html
index aa3a1460..c3a75d69 100644
--- a/ui/webui/resources/cr_elements/cr_checkbox/cr_checkbox.html
+++ b/ui/webui/resources/cr_elements/cr_checkbox/cr_checkbox.html
@@ -111,8 +111,8 @@
       }
 
       #label-container {
-        -webkit-padding-start: 20px;
         color: var(--cr-checkbox-label-color, var(--google-grey-900));
+        padding-inline-start: 20px;
         white-space: normal;
 
         @apply --cr-checkbox-label-container;
diff --git a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html
index c1abc9d..65fadd0d 100644
--- a/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html
+++ b/ui/webui/resources/cr_elements/cr_dialog/cr_dialog.html
@@ -58,10 +58,10 @@
        * See https://crbug.com/846254 and associated CL for more information.
        */
       :host ::slotted([slot=body]) {
-        -webkit-padding-end: 20px;
-        -webkit-padding-start: 20px;
         color: var(--cr-secondary-text-color);
         padding-bottom: 0;
+        padding-inline-end: 20px;
+        padding-inline-start: 20px;
         padding-top: 0;
         @apply --cr-dialog-body;
       }
@@ -75,13 +75,13 @@
        * See https://crbug.com/846254 and associated CL for more information.
        */
       :host ::slotted([slot=title]) {
-        -webkit-padding-end: 20px;
-        -webkit-padding-start: 20px;
         color: var(--cr-primary-text-color);
         flex: 1;
         font-size: calc(15 / 13 * 100%);
         line-height: 1;
         padding-bottom: 16px;
+        padding-inline-end: 20px;
+        padding-inline-start: 20px;
         padding-top: 20px;
         @apply --cr-dialog-title;
       }
@@ -95,11 +95,11 @@
        * See https://crbug.com/846254 and associated CL for more information.
        */
       :host ::slotted([slot=button-container]) {
-        -webkit-padding-end: 16px;
-        -webkit-padding-start: 16px;
         display: flex;
         justify-content: flex-end;
         padding-bottom: 16px;
+        padding-inline-end: 16px;
+        padding-inline-start: 16px;
         padding-top: 24px;
         @apply --cr-dialog-button-container;
       }
@@ -153,8 +153,8 @@
           display: flex;
         };
 
-        -webkit-margin-end: 4px;
         align-self: flex-start;
+        margin-inline-end: 4px;
         margin-top: 4px;
 
         @apply --cr-dialog-close-image;
diff --git a/ui/webui/resources/cr_elements/cr_drawer/cr_drawer.html b/ui/webui/resources/cr_elements/cr_drawer/cr_drawer.html
index ca5c048..b143e8cd 100644
--- a/ui/webui/resources/cr_elements/cr_drawer/cr_drawer.html
+++ b/ui/webui/resources/cr_elements/cr_drawer/cr_drawer.html
@@ -57,13 +57,13 @@
       }
 
       .drawer-header {
-        -webkit-padding-start: 24px;
         align-items: center;
         border-bottom: var(--cr-separator-line);
         display: flex;
         font-size: 123.08%;  /* go to 16px from 13px */
         min-height: 56px;
         outline: none;
+        padding-inline-start: 24px;
       }
 
       :host ::slotted(.drawer-content) {
diff --git a/ui/webui/resources/cr_elements/cr_input/cr_input.html b/ui/webui/resources/cr_elements/cr_input/cr_input.html
index 213a69c..6002d1f 100644
--- a/ui/webui/resources/cr_elements/cr_input/cr_input.html
+++ b/ui/webui/resources/cr_elements/cr_input/cr_input.html
@@ -36,7 +36,7 @@
 
       /* Margin between <input> and <paper-button> in the 'suffix' slot */
       :host ::slotted(paper-button[slot=suffix]) {
-        -webkit-margin-start: var(--cr-button-edge-spacing);
+        margin-inline-start: var(--cr-button-edge-spacing);
       }
 
       :host([invalid]) #label {
diff --git a/ui/webui/resources/cr_elements/cr_input/cr_input_style_css.html b/ui/webui/resources/cr_elements/cr_input/cr_input_style_css.html
index c255fe7..a8b26e1 100644
--- a/ui/webui/resources/cr_elements/cr_input/cr_input_style_css.html
+++ b/ui/webui/resources/cr_elements/cr_input/cr_input_style_css.html
@@ -47,9 +47,6 @@
         font-size: inherit;
         line-height: inherit;
         outline: none;
-        text-align: inherit;
-        text-overflow: ellipsis;
-        width: 100%;
 
         /**
          * When using mixins, avoid using padding shorthand. Using both the
@@ -59,10 +56,14 @@
          *
          * See https://crbug.com/846254 and associated CL for more information.
          */
-        -webkit-padding-end: 8px;
-        -webkit-padding-start: 8px;
-        padding-bottom: 6px;
-        padding-top: 6px;
+        padding-bottom: var(--cr-input-padding-bottom, 6px);
+        padding-inline-end: var(--cr-input-padding-end, 8px);
+        padding-inline-start: var(--cr-input-padding-start, 8px);
+        padding-top: var(--cr-input-padding-top, 6px);
+
+        text-align: inherit;
+        text-overflow: ellipsis;
+        width: 100%;
 
         @apply --cr-input-input;
       }
diff --git a/ui/webui/resources/cr_elements/cr_link_row/cr_link_row.html b/ui/webui/resources/cr_elements/cr_link_row/cr_link_row.html
index 1ecfead..8ae3c5d 100644
--- a/ui/webui/resources/cr_elements/cr_link_row/cr_link_row.html
+++ b/ui/webui/resources/cr_elements/cr_link_row/cr_link_row.html
@@ -43,9 +43,9 @@
       }
 
       #startIcon {
-        -webkit-padding-end: var(--cr-icon-button-margin-start);
         display: flex;
         flex-shrink: 0;
+        padding-inline-end: var(--cr-icon-button-margin-start);
         width: var(--cr-link-row-icon-width, var(--cr-icon-size));
       }
 
diff --git a/ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button_style_css.html b/ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button_style_css.html
index 6b3d5379..c75f207 100644
--- a/ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button_style_css.html
+++ b/ui/webui/resources/cr_elements/cr_radio_button/cr_radio_button_style_css.html
@@ -32,8 +32,8 @@
       }
 
       #labelWrapper {
-        -webkit-margin-start: var(--cr-radio-button-label-spacing, 20px);
         flex: 1;
+        margin-inline-start: var(--cr-radio-button-label-spacing, 20px);
 
         @apply --cr-radio-button-label;
       }
diff --git a/ui/webui/resources/cr_elements/cr_toast/cr_toast.html b/ui/webui/resources/cr_elements/cr_toast/cr_toast.html
index 5bcab2f..d09b9a57 100644
--- a/ui/webui/resources/cr_elements/cr_toast/cr_toast.html
+++ b/ui/webui/resources/cr_elements/cr_toast/cr_toast.html
@@ -34,10 +34,10 @@
       }
 
       :host ::slotted(paper-button) {
-        -webkit-margin-start: 32px;
         background-color: transparent;
         border: none;
         color: var(--google-blue-300);
+        margin-inline-start: 32px;
         min-width: 52px;
         padding: 8px;
       }
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
index 0d1601a..ec50ca4 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar.html
@@ -19,26 +19,26 @@
       }
 
       h1 {
-        -webkit-margin-start: 6px;
-        -webkit-padding-end: 12px;
         flex: 1;
         font-size: 123%;
         font-weight: 400;
         letter-spacing: .25px;
         line-height: normal;
+        margin-inline-start: 6px;
+        padding-inline-end: 12px;
       }
 
       #leftContent {
         /* margin-start here must match margin-end on #rightContent. */
-        -webkit-margin-start: 12px;
+        margin-inline-start: 12px;
         position: relative;
         transition: opacity 100ms;
       }
 
       #leftSpacer {
-        -webkit-margin-start: 6px;
         align-items: center;
         display: flex;
+        margin-inline-start: 6px;
       }
 
       #menuButtonContainer {
@@ -55,7 +55,7 @@
       }
 
       #rightContent {
-        -webkit-margin-end: 12px;
+        margin-inline-end: 12px;
       }
 
       :host([narrow]) #centeredContent {
@@ -82,8 +82,6 @@
       }
 
       #menuPromo {
-        -webkit-padding-end: 12px;
-        -webkit-padding-start: 8px;
         align-items: center;
         background: #616161;
         border-radius: 2px;
@@ -93,6 +91,8 @@
         font-weight: 500;
         opacity: 0;
         padding-bottom: 6px;
+        padding-inline-end: 12px;
+        padding-inline-start: 8px;
         padding-top: 6px;
         position: absolute;
         top: var(--cr-toolbar-height);
@@ -120,12 +120,12 @@
 
       #closePromo {
         -webkit-appearance: none;
-        -webkit-margin-start: 12px;
         background: none;
         border: none;
         color: inherit;
         font-size: 20px;  /* Shouldn't change if default font-size changes. */
         line-height: 20px;
+        margin-inline-start: 12px;
         padding: 0;
         width: 20px;
       }
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
index c346b14..8b149e0 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_search_field.html
@@ -60,9 +60,9 @@
       /* Input field. */
       #searchTerm {
         -webkit-font-smoothing: antialiased;
-        -webkit-margin-start: 2px;
         flex: 1;
         line-height: 185%;
+        margin-inline-start: 2px;
         position: relative;
       }
 
@@ -101,10 +101,10 @@
 
       /** Wide layout. */
       :host(:not([narrow])) {
-        -webkit-padding-end: 0;
         background: rgba(0, 0, 0, 0.22);
         border-radius: 2px;
         cursor: text;
+        padding-inline-end: 0;
         width: var(--cr-toolbar-field-width, 680px);
       }
 
@@ -128,7 +128,7 @@
 
       :host([narrow][showing-search]) #icon,
       :host([narrow][showing-search]) paper-spinner-lite {
-        -webkit-margin-start: 18px;  /* Line up with Menu icon. */
+        margin-inline-start: 18px;  /* Line up with Menu icon. */
       }
     </style>
     <template is="dom-if" id="spinnerTemplate">
diff --git a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
index cc54229b..a658e9c3 100644
--- a/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
+++ b/ui/webui/resources/cr_elements/cr_toolbar/cr_toolbar_selection_overlay.html
@@ -9,7 +9,6 @@
   <template>
     <style include="cr-icons paper-button-style">
       :host {
-        -webkit-padding-start: var(--cr-toolbar-field-margin, 0);
         background: white;
         border-bottom: 1px solid var(--google-grey-300);
         bottom: 0;
@@ -17,6 +16,7 @@
         display: flex;
         left: 0;
         opacity: 0;
+        padding-inline-start: var(--cr-toolbar-field-margin, 0);
         pointer-events: none;
         position: absolute;
         right: 0;
@@ -42,7 +42,7 @@
       }
 
       paper-button {
-        -webkit-margin-start: 8px;
+        margin-inline-start: 8px;
       }
 
       #number-selected {
@@ -50,9 +50,9 @@
       }
 
       paper-icon-button-light {
-        -webkit-margin-end: 24px;
-        -webkit-margin-start: 2px;
         height: 36px;
+        margin-inline-end: 24px;
+        margin-inline-start: 2px;
         width: 36px;
       }
 
diff --git a/ui/webui/resources/cr_elements/paper_button_style_css.html b/ui/webui/resources/cr_elements/paper_button_style_css.html
index 8d6a558..beec808 100644
--- a/ui/webui/resources/cr_elements/paper_button_style_css.html
+++ b/ui/webui/resources/cr_elements/paper_button_style_css.html
@@ -91,7 +91,7 @@
 
       /* cancel-button is meant to be used within a cr-dialog */
       paper-button.cancel-button {
-        -webkit-margin-end: 8px;
+        margin-inline-end: 8px;
       }
 
       paper-button.action-button,
diff --git a/ui/webui/resources/cr_elements/shared_vars_css.html b/ui/webui/resources/cr_elements/shared_vars_css.html
index 13686d7c0..e870a4648 100644
--- a/ui/webui/resources/cr_elements/shared_vars_css.html
+++ b/ui/webui/resources/cr_elements/shared_vars_css.html
@@ -45,8 +45,8 @@
 
     --cr-paper-icon-button-margin: {
       /* Shift button so ripple overlaps the end of the row. */
-      -webkit-margin-end: var(--cr-icon-ripple-margin);
-      -webkit-margin-start: var(--cr-icon-button-margin-start);
+      margin-inline-end: var(--cr-icon-ripple-margin);
+      margin-inline-start: var(--cr-icon-button-margin-start);
     }
 
     --cr-primary-text: {
diff --git a/ui/webui/resources/css/apps/topbutton_bar.css b/ui/webui/resources/css/apps/topbutton_bar.css
index 5e4a746..2979c0d 100644
--- a/ui/webui/resources/css/apps/topbutton_bar.css
+++ b/ui/webui/resources/css/apps/topbutton_bar.css
@@ -10,7 +10,6 @@
 .topbutton-bar button {
   -webkit-app-region: no-drag;
   -webkit-box-shadow: none;
-  -webkit-margin-end: 10px;
   background-color: transparent;
   background-image: none;
   background-position: center;
@@ -18,6 +17,7 @@
   border: 0;
   display: block;
   height: 32px;
+  margin-inline-end: 10px;
   min-width: 0;
   outline: none;
   padding: 0;
diff --git a/ui/webui/resources/css/bubble.css b/ui/webui/resources/css/bubble.css
index 5e5a590..cf76818 100644
--- a/ui/webui/resources/css/bubble.css
+++ b/ui/webui/resources/css/bubble.css
@@ -22,7 +22,7 @@
 /* When the close button is there, we need more padding on the right of the
  * bubble. */
 .bubble-close:not([hidden]) ~ .bubble-content {
-  -webkit-padding-end: 22px;
+  padding-inline-end: 22px;
 }
 
 .bubble-close {
diff --git a/ui/webui/resources/css/bubble_button.css b/ui/webui/resources/css/bubble_button.css
index 5ab9ce7a..d92c4a5 100644
--- a/ui/webui/resources/css/bubble_button.css
+++ b/ui/webui/resources/css/bubble_button.css
@@ -3,10 +3,10 @@
  * found in the LICENSE file. */
 
 .bubble-button {
-  -webkit-margin-start: 4px;
   display: inline-block;
   height: 0;
   line-height: 1;
+  margin-inline-start: 4px;
   vertical-align: middle;
   width: 16px;
 }
diff --git a/ui/webui/resources/css/chrome_shared.css b/ui/webui/resources/css/chrome_shared.css
index 95ef34d5..2dc7709 100644
--- a/ui/webui/resources/css/chrome_shared.css
+++ b/ui/webui/resources/css/chrome_shared.css
@@ -81,8 +81,8 @@
 }
 
 html[dir='rtl'] .favicon-cell.weakrtl {
-  -webkit-padding-end: 22px;
-  -webkit-padding-start: 0;
+  padding-inline-end: 22px;
+  padding-inline-start: 0;
 }
 
 /* weakrtl for selection drop downs needs to account for the fact that
diff --git a/ui/webui/resources/css/controlled_indicator.css b/ui/webui/resources/css/controlled_indicator.css
index deaee16..340ac931 100644
--- a/ui/webui/resources/css/controlled_indicator.css
+++ b/ui/webui/resources/css/controlled_indicator.css
@@ -9,7 +9,7 @@
 }
 
 .controlled-setting-indicator {
-  -webkit-margin-end: 0.3em;
+  margin-inline-end: 0.3em;
 }
 
 .controlled-setting-indicator:not([controlled-by]) {
@@ -63,12 +63,12 @@
 }
 
 .controlled-setting-bubble-extension-name {
-  -webkit-padding-start: 30px;
   background-repeat: no-repeat;
   font-weight: bold;
   height: 24px;
   margin-top: -9px;
   overflow: hidden;
+  padding-inline-start: 30px;
   padding-top: 3px;
   position: absolute;
   text-overflow: ellipsis;
diff --git a/ui/webui/resources/css/dialogs.css b/ui/webui/resources/css/dialogs.css
index 3d9a9099..0f2805bb 100644
--- a/ui/webui/resources/css/dialogs.css
+++ b/ui/webui/resources/css/dialogs.css
@@ -95,11 +95,11 @@
 }
 
 .cr-dialog-title {
-  -webkit-margin-end: 20px;
   display: block;
   font-size: 120%;
   font-weight: bold;
   margin-bottom: 10px;
+  margin-inline-end: 20px;
   white-space: nowrap;
   word-wrap: normal;
 }
diff --git a/ui/webui/resources/css/menu.css b/ui/webui/resources/css/menu.css
index 986fd86a..aabf5036 100644
--- a/ui/webui/resources/css/menu.css
+++ b/ui/webui/resources/css/menu.css
@@ -72,7 +72,7 @@
 }
 
 cr-menu > [checked] {
-  -webkit-padding-start: 0;
+  padding-inline-start: 0;
 }
 
 cr-menu > [selected][checked]:active::before {
@@ -83,8 +83,8 @@
  * but it's buggy in current webkit revision, so I have to use [showShortcuts].
  */
 cr-menu[showShortcuts] > ::after {
-  -webkit-padding-start: 30px;
   color: #999;
   content: attr(shortcutText);
   float: right;
+  padding-inline-start: 30px;
 }
diff --git a/ui/webui/resources/css/overlay.css b/ui/webui/resources/css/overlay.css
index 0187f76..8d991f9 100644
--- a/ui/webui/resources/css/overlay.css
+++ b/ui/webui/resources/css/overlay.css
@@ -98,7 +98,6 @@
 }
 
 .overlay .page h1 {
-  -webkit-padding-end: 24px;
   color: #333;
   /* 120% of the body's font-size of 84% is 16px. This will keep the relative
    * size between the body and these titles consistent. */
@@ -144,8 +143,8 @@
 .overlay .page .button-strip > :-webkit-any(button,
                                             input[type='button'],
                                             input[type='submit']) {
-  -webkit-margin-start: 10px;
   display: block;
+  margin-inline-start: 10px;
 }
 
 .overlay .page .button-strip > .default-button:not(:focus) {
diff --git a/ui/webui/resources/css/table.css b/ui/webui/resources/css/table.css
index 11394ff..88adf2fb 100644
--- a/ui/webui/resources/css/table.css
+++ b/ui/webui/resources/css/table.css
@@ -89,27 +89,27 @@
 }
 
 .table-header-sort-image-desc::after {
-  -webkit-padding-start: 5px;
   color: #888;
   content: '\25be'; /* BLACK DOWN-POINTING SMALL TRIANGLE */
+  padding-inline-start: 5px;
   position: relative;
   top: -2px;
 }
 
 .table-header-sort-image-asc::after {
-  -webkit-padding-start: 5px;
   color: #888;
   content: '\25b4'; /* BLACK UP-POINTING SMALL TRIANGLE */
+  padding-inline-start: 5px;
   position: relative;
   top: -2px;
 }
 
 .table-header-splitter {
-  -webkit-margin-start: -1px;
   background-color: black;
   cursor: col-resize;
   height: 100%;
   left: 0;
+  margin-inline-start: -1px;
   position: absolute;
   top: 0;
   width: 5px;
diff --git a/ui/webui/resources/css/tabs.css b/ui/webui/resources/css/tabs.css
index 018c6f1..63bb858 100644
--- a/ui/webui/resources/css/tabs.css
+++ b/ui/webui/resources/css/tabs.css
@@ -8,11 +8,11 @@
 }
 
 tabs {
-  -webkit-padding-start: 8px;
   background: -webkit-linear-gradient(white, rgb(243, 243, 243));
   border-bottom: 1px solid rgb(160, 160, 160);
   display: -webkit-box;
   margin: 0;
+  padding-inline-start: 8px;
 }
 
 /* New users of tabs.css should add 'new-style-tabs' to the class list of any
@@ -21,14 +21,13 @@
  * TODO(rfevang): Remove when all users are converted to the new style.
  *                (crbug.com/247772). */
 tabs.new-style-tabs {
-  -webkit-padding-start: 9px;
   background: #fbfbfb;
   border-bottom: 1px solid #c8c8c8;
+  padding-inline-start: 9px;
   padding-top: 14px;
 }
 
 tabs > * {
-  -webkit-margin-start: 5px;
   background: rgba(160, 160, 160, .3);
   border: 1px solid rgba(160, 160, 160, .3);
   border-bottom: 0;
@@ -36,6 +35,7 @@
   border-top-right-radius: 3px;
   cursor: default;
   display: block;
+  margin-inline-start: 5px;
   min-width: 4em;
   padding: 2px 10px;
   text-align: center;
@@ -43,11 +43,11 @@
 }
 
 tabs.new-style-tabs > * {
-  -webkit-margin-start: 0;
   background: #fbfbfb;
   border: 1px solid #fbfbfb;
   border-bottom: 0;
   border-radius: 0;
+  margin-inline-start: 0;
   min-width: 0;
   padding: 4px 9px 4px 10px;
   transition: none;
diff --git a/ui/webui/resources/css/tree.css b/ui/webui/resources/css/tree.css
index d4c11e10..4165b21 100644
--- a/ui/webui/resources/css/tree.css
+++ b/ui/webui/resources/css/tree.css
@@ -96,9 +96,9 @@
 }
 
 .tree-label {
-  -webkit-padding-start: 20px;
   background-position: 0 50%;
   background-repeat: no-repeat;
+  padding-inline-start: 20px;
   white-space: pre;
 }
 
@@ -135,8 +135,8 @@
 </if>
 
 tree[icon-visibility=hidden] .tree-label {
-  -webkit-padding-start: 0;
   background-image: none !important;
+  padding-inline-start: 0;
 }
 
 tree[icon-visibility=parent] .tree-label,
diff --git a/ui/webui/resources/css/widgets.css b/ui/webui/resources/css/widgets.css
index 41930471..2ba6a1a 100644
--- a/ui/webui/resources/css/widgets.css
+++ b/ui/webui/resources/css/widgets.css
@@ -49,19 +49,19 @@
 :-webkit-any(button,
              input[type='button'],
              input[type='submit']):not(.custom-appearance) {
-  -webkit-padding-end: 10px;
-  -webkit-padding-start: 10px;
+  padding-inline-end: 10px;
+  padding-inline-start: 10px;
 }
 
 select {
   -webkit-appearance: none;
-  -webkit-padding-end: 24px;
-  -webkit-padding-start: 10px;
   /* OVERRIDE */
   background-image: url(../images/select.png),
       -webkit-linear-gradient(#ededed, #ededed 38%, #dedede);
   background-position: right center;
   background-repeat: no-repeat;
+  padding-inline-end: 24px;
+  padding-inline-start: 10px;
 }
 
 html[dir='rtl'] select {
@@ -269,9 +269,9 @@
 }
 
 :-webkit-any(.checkbox, .radio) label input ~ span {
-  -webkit-margin-start: 0.6em;
   /* Make sure long spans wrap at the same horizontal position they start. */
   display: block;
+  margin-inline-start: 0.6em;
 }
 
 :-webkit-any(.checkbox, .radio) label:hover {
diff --git a/ui/webui/resources/html/md_select_css.html b/ui/webui/resources/html/md_select_css.html
index 3a5cb6d..7dd6744 100644
--- a/ui/webui/resources/html/md_select_css.html
+++ b/ui/webui/resources/html/md_select_css.html
@@ -14,10 +14,6 @@
         --md-arrow-width: 0.9em;
 
         -webkit-appearance: none;
-        /* Ensures 3px space between text and arrow */
-        -webkit-padding-end: calc(var(--md-select-side-padding) +
-            var(--md-arrow-width) + 3px);
-        -webkit-padding-start: var(--md-select-side-padding);
         background: url(chrome://resources/images/arrow_down.svg)
             calc(100% - var(--md-select-side-padding))
             center no-repeat;
@@ -33,6 +29,10 @@
         max-width: 100%;
         outline: none;
         padding-bottom: 6px;
+        /* Ensures 3px space between text and arrow */
+        padding-inline-end: calc(var(--md-select-side-padding) +
+            var(--md-arrow-width) + 3px);
+        padding-inline-start: var(--md-select-side-padding);
         padding-top: 6px;
         width: var(--md-select-width, 200px);
       }
diff --git a/ui/webui/resources/js/cr/ui/page_manager/page_manager.js b/ui/webui/resources/js/cr/ui/page_manager/page_manager.js
index 5333b9c..00d92c3 100644
--- a/ui/webui/resources/js/cr/ui/page_manager/page_manager.js
+++ b/ui/webui/resources/js/cr/ui/page_manager/page_manager.js
@@ -21,7 +21,7 @@
     /**
      * Offset of page container in pixels. Uber pages that use the side menu
      * can override this with the setter.
-     * The default (23) comes from -webkit-margin-start in uber_shared.css.
+     * The default (23) comes from margin-inline-start in uber_shared.css.
      * @type {number}
      */
     horizontalOffset_: 23,
diff --git a/ui/webui/resources/js/cr/ui/table/table_header.js b/ui/webui/resources/js/cr/ui/table/table_header.js
index 602245d0..324c01c1 100644
--- a/ui/webui/resources/js/cr/ui/table/table_header.js
+++ b/ui/webui/resources/js/cr/ui/table/table_header.js
@@ -144,7 +144,7 @@
         if (splitters[i].hidden)
           continue;
         place += cm.getWidth(i);
-        splitters[i].style.webkitMarginStart = place + 'px';
+        splitters[i].style.marginInlineStart = place + 'px';
       }
     },
 
diff --git a/ui/webui/resources/js/cr/ui/tree.js b/ui/webui/resources/js/cr/ui/tree.js
index bd2e2b7..3dc541d 100644
--- a/ui/webui/resources/js/cr/ui/tree.js
+++ b/ui/webui/resources/js/cr/ui/tree.js
@@ -311,7 +311,7 @@
      */
     setDepth_: function(depth) {
       if (depth != this.depth_) {
-        this.rowElement.style.WebkitPaddingStart =
+        this.rowElement.style.paddingInlineStart =
             Math.max(0, depth - 1) * INDENT + 'px';
         this.depth_ = depth;
         var items = this.items;
diff --git a/ui/wm/core/easy_resize_window_targeter.cc b/ui/wm/core/easy_resize_window_targeter.cc
index 9ac6839a..846c66a 100644
--- a/ui/wm/core/easy_resize_window_targeter.cc
+++ b/ui/wm/core/easy_resize_window_targeter.cc
@@ -20,13 +20,6 @@
 namespace wm {
 namespace {
 
-// Returns an insets whose values are all negative or 0. Any positive value is
-// forced to 0.
-gfx::Insets InsetsWithOnlyNegativeValues(const gfx::Insets& insets) {
-  return gfx::Insets(std::min(0, insets.top()), std::min(0, insets.left()),
-                     std::min(0, insets.bottom()), std::min(0, insets.right()));
-}
-
 gfx::Insets InsetsWithOnlyPositiveValues(const gfx::Insets& insets) {
   return gfx::Insets(std::max(0, insets.top()), std::max(0, insets.left()),
                      std::max(0, insets.bottom()), std::max(0, insets.right()));
@@ -99,22 +92,6 @@
   if (aura::Env::GetInstance()->mode() != aura::Env::Mode::MUS)
     return;
 
-  // Mus only accepts 0 or negative values, force all values to fit that.
-  const gfx::Insets effective_last_mouse_extend =
-      InsetsWithOnlyNegativeValues(last_mouse_extend);
-  const gfx::Insets effective_last_touch_extend =
-      InsetsWithOnlyNegativeValues(last_touch_extend);
-  const gfx::Insets effective_mouse_extend =
-      InsetsWithOnlyNegativeValues(mouse_extend());
-  const gfx::Insets effective_touch_extend =
-      InsetsWithOnlyNegativeValues(touch_extend());
-  if (effective_last_touch_extend != effective_touch_extend ||
-      effective_last_mouse_extend != effective_mouse_extend) {
-    aura::WindowPortMus::Get(container_)
-        ->SetExtendedHitRegionForChildren(effective_mouse_extend,
-                                          effective_touch_extend);
-  }
-
   // Positive values equate to a hit test mask.
   const gfx::Insets positive_mouse_insets =
       InsetsWithOnlyPositiveValues(mouse_extend());
diff --git a/ui/wm/test/wm_test_helper.cc b/ui/wm/test/wm_test_helper.cc
index 05b0718..660865c 100644
--- a/ui/wm/test/wm_test_helper.cc
+++ b/ui/wm/test/wm_test_helper.cc
@@ -76,8 +76,7 @@
   window_tree_client_ = aura::WindowTreeClient::CreateForWindowTreeHostFactory(
       connector, this, create_discardable_memory);
   aura::Env::GetInstance()->SetWindowTreeClient(window_tree_client_.get());
-  aura::WindowTreeClientPrivate(window_tree_client_.get())
-      .WaitForInitialDisplays();
+  window_tree_client_->WaitForDisplays();
 
   // ConnectViaWindowTreeHostFactory() should callback to OnEmbed() and set
   // |host_|.