diff --git a/DEPS b/DEPS
index c326cdd6..5c9a020 100644
--- a/DEPS
+++ b/DEPS
@@ -172,11 +172,11 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': '7a13b461e6e08eaea9dea2a90ca4724e9c1979eb',
+  'skia_revision': '1803f4ef6fe7c45656d4cb83661434f2a2371384',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
-  'v8_revision': '4abff70fe7c566671a9c711c34c1c3c0b7bbac93',
+  'v8_revision': 'db6f51981b8c2ccc18d6af3936eea9df37014c00',
   # 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.
@@ -188,7 +188,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling SwiftShader
   # and whatever else without interference from each other.
-  'swiftshader_revision': 'b0a1f0a9680601d66c5ab518d03158943c9fd87c',
+  'swiftshader_revision': '215bc7949b35b0245c61a46e60d4fdda12928cd0',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling PDFium
   # and whatever else without interference from each other.
@@ -199,7 +199,7 @@
   #
   # Note this revision should be updated with
   # third_party/boringssl/roll_boringssl.py, not roll-dep.
-  'boringssl_revision': '6be491b7bb57c3950d4fbb97fdd4a141e3fa4d63',
+  'boringssl_revision': 'd709b0d8926707f3143d8cf7c84350e49e56ec38',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling google-toolbox-for-mac
   # and whatever else without interference from each other.
@@ -235,7 +235,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': 'bce667b745aac67b5786eaf352f2c140564c91a7',
+  'catapult_revision': '09a9385121be82cd6831d8afc74807df6d222742',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling libFuzzer
   # and whatever else without interference from each other.
@@ -871,7 +871,7 @@
 
   # Build tools for Chrome OS. Note: This depends on third_party/pyelftools.
   'src/third_party/chromite': {
-      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '5364042c0287d10742e91c3d4fd160d6b7400776',
+      'url': Var('chromium_git') + '/chromiumos/chromite.git' + '@' + '38f84022167e6f2c50c0511f01a82f1aafe5d80c',
       'condition': 'checkout_linux',
   },
 
@@ -896,7 +896,7 @@
   },
 
   'src/third_party/depot_tools':
-    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f6a2232b48c29b022f7042054bbbb6551d0dd477',
+    Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '0e2a4d97fd4c50e4a0d2cc0d814cbf98b5db5a7d',
 
   'src/third_party/devtools-frontend/src':
     Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'),
@@ -1512,7 +1512,7 @@
     Var('chromium_git') + '/external/khronosgroup/webgl.git' + '@' + 'dd55f3ca8f2ea716ca917a4aaf36f0729fe902b1',
 
   'src/third_party/webrtc':
-    Var('webrtc_git') + '/src.git' + '@' + '4c04d8e10c3c1e9d5ad1b65b5ce24227a8394d5d',
+    Var('webrtc_git') + '/src.git' + '@' + '3c0e86a87d0826a4dbd9d1905e32508b3590969e',
 
   # Wuffs' canonical repository is at github.com/google/wuffs, but we use
   # Skia's mirror of Wuffs, the same as in upstream Skia's DEPS file.
@@ -1579,7 +1579,7 @@
     Var('chromium_git') + '/v8/v8.git' + '@' +  Var('v8_revision'),
 
   'src-internal': {
-    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@e600381cfd175c3c6fc27bddf79e3ca2fb3f5025',
+    'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@f168baf4df5320e31425d3a3e5239b8f733d8eb4',
     'condition': 'checkout_src_internal',
   },
 
diff --git a/WATCHLISTS b/WATCHLISTS
index 47b3a009..c699f91 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -2699,8 +2699,7 @@
                          'dominickn+watch-web_applications@chromium.org',
                          'ericwilligers+watch-bmo@chromium.org',
                          'loyso+watch@chromium.org',
-                         'mgiuca+watch@chromium.org',
-                         'raymes+watch-bmo@chromium.org'],
+                         'mgiuca+watch@chromium.org'],
     'web_dev_style': ['dbeam+watch-web-dev-style@chromium.org'],
     'web_package': ['twifkak+watch@chromium.org'],
     'web_share': ['mgiuca+watch@chromium.org'],
diff --git a/android_webview/ui/translations/aw_strings_mr.xtb b/android_webview/ui/translations/aw_strings_mr.xtb
index bfe23d9..eeb5749 100644
--- a/android_webview/ui/translations/aw_strings_mr.xtb
+++ b/android_webview/ui/translations/aw_strings_mr.xtb
@@ -4,5 +4,5 @@
 <translation id="6106989379647458772"><ph name="PAGE" /> वरील वेबपेज कदाचित तात्पुरते बंद आहे किंवा ते कदाचित कायमचे नवीन वेब पत्त्यावर हलवले आहे.</translation>
 <translation id="6312113039770857350">वेबपेज उपलब्ध नाही</translation>
 <translation id="8681531050781943054"><ph name="PAGE" /> वरील वेबपेज लोड केले जाऊ शकले नाही कारण:</translation>
-<translation id="8963213021028234748"><ph name="MARKUP_1" />सूचना:<ph name="MARKUP_2" />आपल्याकडे डेटा कनेक्शन असल्याचे निश्चित करा<ph name="MARKUP_3" />हे वेबपेज नंतर रीलोड करा<ph name="MARKUP_4" />तुम्ही एंटर केलेला अॅड्रेस तपासा<ph name="MARKUP_5" /></translation>
+<translation id="8963213021028234748"><ph name="MARKUP_1" />सूचना:<ph name="MARKUP_2" />आपल्याकडे डेटा कनेक्शन असल्याचे निश्चित करा<ph name="MARKUP_3" />हे वेबपेज नंतर रीलोड करा<ph name="MARKUP_4" />तुम्ही एंटर केलेला ॲड्रेस तपासा<ph name="MARKUP_5" /></translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ash/BUILD.gn b/ash/BUILD.gn
index 0997512..9ceea0e 100644
--- a/ash/BUILD.gn
+++ b/ash/BUILD.gn
@@ -1711,6 +1711,7 @@
     "display/extended_mouse_warp_controller_unittest.cc",
     "display/mirror_window_controller_unittest.cc",
     "display/mouse_cursor_event_filter_unittest.cc",
+    "display/overscan_calibrator_unittest.cc",
     "display/persistent_window_controller_unittest.cc",
     "display/projecting_observer_unittest.cc",
     "display/resolution_notification_controller_unittest.cc",
@@ -2063,6 +2064,7 @@
     "//mojo/core/embedder",
     "//mojo/public/cpp/bindings",
     "//net:net",
+    "//services/data_decoder/public/cpp:test_support",
     "//services/device/public/cpp/bluetooth",
     "//services/media_session/public/cpp/test:test_support",
     "//services/media_session/public/mojom",
diff --git a/ash/app_list/DEPS b/ash/app_list/DEPS
index 4cc71541..ba77a4d 100644
--- a/ash/app_list/DEPS
+++ b/ash/app_list/DEPS
@@ -10,7 +10,6 @@
   "+mojo/public/cpp",
   "+net/http/http_response_headers.h",
   "+skia",
-  "+third_party/google_toolbox_for_mac/src",
   "+third_party/skia",
   "+ui/accessibility",
   "+ui/aura",
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc
index 73c09e4..3d82aae 100644
--- a/ash/app_list/app_list_presenter_delegate_unittest.cc
+++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -2500,14 +2500,13 @@
   AppListPresenterDelegateHomeLauncherTest() {
     if (GetParam()) {
       scoped_feature_list_.InitWithFeatures(
-          {features::kEnableBackgroundBlur, features::kHomerviewGesture,
+          {features::kEnableBackgroundBlur,
            features::kDragFromShelfToHomeOrOverview},
           {});
     } else {
       scoped_feature_list_.InitWithFeatures(
           {features::kEnableBackgroundBlur},
-          {features::kHomerviewGesture,
-           features::kDragFromShelfToHomeOrOverview});
+          {features::kDragFromShelfToHomeOrOverview});
     }
   }
   ~AppListPresenterDelegateHomeLauncherTest() override = default;
diff --git a/ash/components/strings/ash_components_strings_cs.xtb b/ash/components/strings/ash_components_strings_cs.xtb
index 5bf7e3d7..d9cf8e9 100644
--- a/ash/components/strings/ash_components_strings_cs.xtb
+++ b/ash/components/strings/ash_components_strings_cs.xtb
@@ -6,7 +6,7 @@
 <translation id="1122869341872663659">Zobrazují se výsledky vyhledávání (<ph name="N" />) na téma <ph name="QUERY" /></translation>
 <translation id="1195667586424773550">Přetáhněte odkaz na adresní řádek na kartě</translation>
 <translation id="1204450209689312104">Otevřít nové okno v anonymním režimu</translation>
-<translation id="1251638888133819822">Zapnout nebo vypnout lupu celé obrazovky</translation>
+<translation id="1251638888133819822">Povolit nebo vypnout zvětšení obrazovky</translation>
 <translation id="1290373024480130896"><ph name="MODIFIER1" /><ph name="SEPARATOR1" /><ph name="MODIFIER2" /><ph name="SEPARATOR2" /><ph name="MODIFIER3" /><ph name="SEPARATOR3" /><ph name="KEY" /></translation>
 <translation id="1293699935367580298">Klávesa Esc</translation>
 <translation id="1299858300159559687">Vytisknout aktuální stránku</translation>
diff --git a/ash/components/strings/ash_components_strings_gu.xtb b/ash/components/strings/ash_components_strings_gu.xtb
index 543c755..df2882d 100644
--- a/ash/components/strings/ash_components_strings_gu.xtb
+++ b/ash/components/strings/ash_components_strings_gu.xtb
@@ -43,6 +43,7 @@
 <translation id="2441202986792279177">વિંડોને ઝડપથી સ્વિચ કરો</translation>
 <translation id="2454251766545114447">ડિસ્પ્લે ઝૂમ ઘટાડો</translation>
 <translation id="2478303094958140141">ChromeVox (બોલાયેલ પ્રતિસાદ) ચાલુ અથવા બંધ કરો</translation>
+<translation id="2480851840841871861">Google આસિસ્ટંટ ખોલો</translation>
 <translation id="2488661730534396940">ડાબી બાજુના ડેસ્કને સક્રિય કરો</translation>
 <translation id="2515586267016047495">Alt</translation>
 <translation id="2530339807289914946">વેબપેજમાં નીચે સ્ક્રોલ કરો</translation>
diff --git a/ash/components/strings/ash_components_strings_mr.xtb b/ash/components/strings/ash_components_strings_mr.xtb
index 6e1bf78..4d8b3f0 100644
--- a/ash/components/strings/ash_components_strings_mr.xtb
+++ b/ash/components/strings/ash_components_strings_mr.xtb
@@ -157,7 +157,7 @@
 <translation id="6755851152783057058">शेवटी वापरलेल्या इनपुट पद्धतीवर स्विच करा</translation>
 <translation id="6760706756348334449">आवाज कमी करा</translation>
 <translation id="6941333068993625698">फीडबॅक सबमिट करा</translation>
-<translation id="6981982820502123353">अॅक्सेसिबिलिटी</translation>
+<translation id="6981982820502123353">ॲक्सेसिबिलिटी</translation>
 <translation id="7020813747703216897">जुळणारे परिणाम आढळले नाहीत</translation>
 <translation id="7025325401470358758">पुढील उपखंड</translation>
 <translation id="7076878155205969899">ध्वनी म्यूट करा</translation>
@@ -197,7 +197,7 @@
 <translation id="8881584919399569791">सुरू असलेली विंडो डेस्कच्या डाव्या बाजूला हलवा</translation>
 <translation id="88986195241502842">पृष्ठ खाली</translation>
 <translation id="8924883688469390268">मागील वापरकर्त्यावर स्विच करा</translation>
-<translation id="8977648847395357314">अॅड्रेस बारमध्ये आशय निवडा</translation>
+<translation id="8977648847395357314">ॲड्रेस बारमध्ये आशय निवडा</translation>
 <translation id="8982190978301344584">उपलब्ध IME ची सूची प्रदर्शित करणारा मेनू दाखवा</translation>
 <translation id="8990356943438003669"><ph name="ALT" /><ph name="SEPARATOR" /> १ ते ८</translation>
 <translation id="9005984960510803406">क्रॉश विंडो उघडा</translation>
diff --git a/ash/display/cros_display_config.h b/ash/display/cros_display_config.h
index 2b68603..bf499d6 100644
--- a/ash/display/cros_display_config.h
+++ b/ash/display/cros_display_config.h
@@ -60,6 +60,8 @@
 
  private:
   class ObserverImpl;
+  friend class OverscanCalibratorTest;
+
   OverscanCalibrator* GetOverscanCalibrator(const std::string& id);
 
   std::unique_ptr<ObserverImpl> observer_impl_;
diff --git a/ash/display/overscan_calibrator.cc b/ash/display/overscan_calibrator.cc
index f9c23f7..db97ee5 100644
--- a/ash/display/overscan_calibrator.cc
+++ b/ash/display/overscan_calibrator.cc
@@ -19,6 +19,7 @@
 #include "ui/compositor/paint_recorder.h"
 #include "ui/display/manager/display_manager.h"
 #include "ui/display/manager/managed_display_info.h"
+#include "ui/display/screen.h"
 #include "ui/gfx/canvas.h"
 
 namespace ash {
@@ -68,35 +69,64 @@
   canvas->DrawPath(path, border_flags);
 }
 
+gfx::Insets RotateInsets(display::Display::Rotation rotation,
+                         gfx::Insets&& insets) {
+  switch (rotation) {
+    case display::Display::ROTATE_0:
+      return insets;
+    case display::Display::ROTATE_90:
+      return gfx::Insets(insets.right(), insets.top(), insets.left(),
+                         insets.bottom());
+    case display::Display::ROTATE_180:
+      return gfx::Insets(insets.bottom(), insets.right(), insets.top(),
+                         insets.left());
+    case display::Display::ROTATE_270:
+      return gfx::Insets(insets.left(), insets.bottom(), insets.right(),
+                         insets.top());
+  }
+  NOTREACHED();
+  return std::move(insets);
+}
+
+gfx::Insets ConvertToDisplay(const display::Display& display,
+                             const gfx::Insets& insets) {
+  display::ManagedDisplayInfo info =
+      ash::Shell::Get()->display_manager()->GetDisplayInfo(display.id());
+  return RotateInsets(
+      display.rotation(),
+      insets.Scale(info.device_scale_factor() / display.device_scale_factor()));
+}
+
+gfx::Insets ConvertToHost(const display::Display& display,
+                          const gfx::Insets& insets) {
+  display::ManagedDisplayInfo info =
+      ash::Shell::Get()->display_manager()->GetDisplayInfo(display.id());
+  display::Display::Rotation inverted_rotation =
+      static_cast<display::Display::Rotation>(
+          (4 - static_cast<int>(display.rotation())) % 4);
+  return RotateInsets(
+      inverted_rotation,
+      insets.Scale(display.device_scale_factor() / info.device_scale_factor()));
+}
+
 }  // namespace
 
 OverscanCalibrator::OverscanCalibrator(const display::Display& target_display,
                                        const gfx::Insets& initial_insets)
     : display_(target_display),
-      insets_(initial_insets),
+      insets_(ConvertToDisplay(display_, initial_insets)),
       initial_insets_(initial_insets),
       committed_(false) {
   // Undo the overscan calibration temporarily so that the user can see
   // dark boundary and current overscan region.
   ash::Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
       display_.id(), gfx::Insets());
-
-  display::ManagedDisplayInfo info =
-      ash::Shell::Get()->display_manager()->GetDisplayInfo(display_.id());
-
-  aura::Window* root = ash::Shell::GetRootWindowForDisplayId(display_.id());
-  ui::Layer* parent_layer =
-      ash::Shell::GetContainer(root, ash::kShellWindowId_OverlayContainer)
-          ->layer();
-
-  calibration_layer_.reset(new ui::Layer());
-  calibration_layer_->SetOpacity(0.5f);
-  calibration_layer_->SetBounds(parent_layer->bounds());
-  calibration_layer_->set_delegate(this);
-  parent_layer->Add(calibration_layer_.get());
+  UpdateUILayer();
+  display::Screen::GetScreen()->AddObserver(this);
 }
 
 OverscanCalibrator::~OverscanCalibrator() {
+  display::Screen::GetScreen()->RemoveObserver(this);
   // Overscan calibration has finished without commit, so the display has to
   // be the original offset.
   if (!committed_) {
@@ -107,12 +137,12 @@
 
 void OverscanCalibrator::Commit() {
   ash::Shell::Get()->window_tree_host_manager()->SetOverscanInsets(
-      display_.id(), insets_);
+      display_.id(), ConvertToHost(display_, insets_));
   committed_ = true;
 }
 
 void OverscanCalibrator::Reset() {
-  insets_ = initial_insets_;
+  insets_ = ConvertToDisplay(display_, initial_insets_);
   calibration_layer_->SchedulePaint(calibration_layer_->bounds());
 }
 
@@ -144,9 +174,31 @@
 
 void OverscanCalibrator::OnDeviceScaleFactorChanged(
     float old_device_scale_factor,
-    float new_device_scale_factor) {
-  // TODO(mukai): Cancel the overscan calibration when the device
-  // configuration has changed.
+    float new_device_scale_factor) {}
+
+void OverscanCalibrator::OnDisplayMetricsChanged(
+    const display::Display& display,
+    uint32_t changed_metrics) {
+  if (display_.id() != display.id() || committed_)
+    return;
+  display_ = display;
+  UpdateUILayer();
+  Reset();
+}
+
+void OverscanCalibrator::UpdateUILayer() {
+  display::ManagedDisplayInfo info =
+      ash::Shell::Get()->display_manager()->GetDisplayInfo(display_.id());
+
+  aura::Window* root = ash::Shell::GetRootWindowForDisplayId(display_.id());
+  ui::Layer* parent_layer =
+      ash::Shell::GetContainer(root, ash::kShellWindowId_OverlayContainer)
+          ->layer();
+  calibration_layer_.reset(new ui::Layer());
+  calibration_layer_->SetOpacity(0.5f);
+  calibration_layer_->SetBounds(parent_layer->bounds());
+  calibration_layer_->set_delegate(this);
+  parent_layer->Add(calibration_layer_.get());
 }
 
 }  // namespace ash
diff --git a/ash/display/overscan_calibrator.h b/ash/display/overscan_calibrator.h
index e4e329fd..87d8dfb 100644
--- a/ash/display/overscan_calibrator.h
+++ b/ash/display/overscan_calibrator.h
@@ -11,6 +11,7 @@
 #include "base/macros.h"
 #include "ui/compositor/layer_delegate.h"
 #include "ui/display/display.h"
+#include "ui/display/display_observer.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/geometry/rect.h"
 
@@ -22,7 +23,8 @@
 
 // This is used to show the visible feedback to the user's operations for
 // calibrating display overscan settings.
-class ASH_EXPORT OverscanCalibrator : public ui::LayerDelegate {
+class ASH_EXPORT OverscanCalibrator : public ui::LayerDelegate,
+                                      public display::DisplayObserver {
  public:
   OverscanCalibrator(const display::Display& target_display,
                      const gfx::Insets& initial_insets);
@@ -41,14 +43,20 @@
 
   const gfx::Insets& insets() const { return insets_; }
 
- private:
   // ui::LayerDelegate overrides:
   void OnPaintLayer(const ui::PaintContext& context) override;
   void OnDeviceScaleFactorChanged(float old_device_scale_factor,
                                   float new_device_scale_factor) override;
 
+  // DisplayObserver:
+  void OnDisplayMetricsChanged(const display::Display& display,
+                               uint32_t changed_metrics) override;
+
+ private:
+  void UpdateUILayer();
+
   // The target display.
-  const display::Display display_;
+  display::Display display_;
 
   // The current insets.
   gfx::Insets insets_;
diff --git a/ash/display/overscan_calibrator_unittest.cc b/ash/display/overscan_calibrator_unittest.cc
new file mode 100644
index 0000000..2b2991f5
--- /dev/null
+++ b/ash/display/overscan_calibrator_unittest.cc
@@ -0,0 +1,63 @@
+// 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 "ash/display/overscan_calibrator.h"
+#include "ash/display/cros_display_config.h"
+
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "base/bind_helpers.h"
+#include "base/strings/stringprintf.h"
+#include "ui/display/manager/display_manager.h"
+#include "ui/display/manager/managed_display_info.h"
+
+namespace ash {
+
+class OverscanCalibratorTest : public AshTestBase {
+ public:
+  OverscanCalibratorTest() = default;
+  ~OverscanCalibratorTest() override = default;
+  OverscanCalibratorTest(OverscanCalibratorTest&) = delete;
+  OverscanCalibratorTest& operator=(const OverscanCalibratorTest&) = delete;
+
+  OverscanCalibrator* StartCalibration(const std::string& id) {
+    Shell::Get()->cros_display_config()->OverscanCalibration(
+        id, mojom::DisplayConfigOperation::kStart,
+        gfx::Insets(0, 0, 0, 0) /* not used */, base::DoNothing());
+    return Shell::Get()->cros_display_config()->GetOverscanCalibrator(id);
+  }
+};
+
+TEST_F(OverscanCalibratorTest, Rotation) {
+  auto* display_manager = Shell::Get()->display_manager();
+
+  int64_t display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id();
+  std::string id_str = base::StringPrintf("%ld", display_id);
+
+  auto* calibrator = StartCalibration(id_str);
+  calibrator->UpdateInsets(gfx::Insets(100, 5, 10, 15));
+  calibrator->Commit();
+  display::ManagedDisplayInfo info =
+      display_manager->GetDisplayInfo(display_id);
+  EXPECT_EQ(gfx::Insets(100, 5, 10, 15), info.overscan_insets_in_dip());
+
+  display_manager->SetDisplayRotation(display_id,
+                                      display::Display::Rotation::ROTATE_90,
+                                      display::Display::RotationSource::USER);
+  EXPECT_EQ(gfx::Size(490, 780),
+            display::Screen::GetScreen()->GetPrimaryDisplay().size());
+
+  calibrator = StartCalibration(id_str);
+  // The insets will be rotated and applied in the host coordinates.
+  gfx::Insets insets = calibrator->insets();
+  insets.set_left(105);
+  insets.set_top(0);
+  calibrator->UpdateInsets(insets);
+  calibrator->Commit();
+
+  info = display_manager->GetDisplayInfo(display_id);
+  EXPECT_EQ(gfx::Insets(105, 5, 10, 0), info.overscan_insets_in_dip());
+}
+
+}  // namespace ash
diff --git a/ash/display/root_window_transformers.cc b/ash/display/root_window_transformers.cc
index b9a8ffb..8a8a40d 100644
--- a/ash/display/root_window_transformers.cc
+++ b/ash/display/root_window_transformers.cc
@@ -33,7 +33,6 @@
 // call |CreateRotationTransform()|, the |old_rotation| will implicitly be
 // |display::Display::ROTATE_0|.
 gfx::Transform CreateRootWindowRotationTransform(
-    aura::Window* root_window,
     const display::Display& display) {
   display::ManagedDisplayInfo info =
       Shell::Get()->display_manager()->GetDisplayInfo(display.id());
@@ -46,8 +45,8 @@
                                  info.GetLogicalActiveRotation(), size);
 }
 
-gfx::Transform CreateInsetsAndScaleTransform(const gfx::Insets& insets,
-                                             float device_scale_factor) {
+gfx::Transform CreateInsetsTransform(const gfx::Insets& insets,
+                                     float device_scale_factor) {
   gfx::Transform transform;
   if (insets.top() != 0 || insets.left() != 0) {
     float x_offset = insets.left() / device_scale_factor;
@@ -98,16 +97,14 @@
 // RootWindowTransformer for ash environment.
 class AshRootWindowTransformer : public RootWindowTransformer {
  public:
-  AshRootWindowTransformer(aura::Window* root, const display::Display& display)
-      : root_window_(root) {
+  AshRootWindowTransformer(const display::Display& display) {
     display::DisplayManager* display_manager = Shell::Get()->display_manager();
     display::ManagedDisplayInfo info =
         display_manager->GetDisplayInfo(display.id());
     host_insets_ = info.GetOverscanInsetsInPixel();
     root_window_bounds_transform_ =
-        CreateInsetsAndScaleTransform(host_insets_,
-                                      display.device_scale_factor()) *
-        CreateRootWindowRotationTransform(root, display);
+        CreateInsetsTransform(host_insets_, display.device_scale_factor()) *
+        CreateRootWindowRotationTransform(display);
     transform_ = root_window_bounds_transform_;
     insets_and_scale_transform_ = CreateReverseRotatedInsetsTransform(
         info.GetLogicalActiveRotation(), host_insets_,
@@ -121,6 +118,9 @@
     }
 
     CHECK(transform_.GetInverse(&invert_transform_));
+
+    root_window_bounds_transform_.Scale(1.f / display.device_scale_factor(),
+                                        1.f / display.device_scale_factor());
   }
 
   // aura::RootWindowTransformer overrides:
@@ -129,10 +129,8 @@
     return invert_transform_;
   }
   gfx::Rect GetRootWindowBounds(const gfx::Size& host_size) const override {
-    gfx::Rect bounds(host_size);
-    bounds.Inset(host_insets_);
-    bounds = ui::ConvertRectToDIP(root_window_->layer(), bounds);
-    gfx::RectF new_bounds(bounds);
+    gfx::RectF new_bounds = gfx::RectF(gfx::SizeF(host_size));
+    new_bounds.Inset(host_insets_);
     root_window_bounds_transform_.TransformRect(&new_bounds);
     // Ignore the origin because RootWindow's insets are handled by
     // the transform.
@@ -150,7 +148,6 @@
  private:
   ~AshRootWindowTransformer() override = default;
 
-  aura::Window* root_window_;
   gfx::Transform transform_;
 
   // The accurate representation of the inverse of the |transform_|.
@@ -323,9 +320,8 @@
 }  // namespace
 
 RootWindowTransformer* CreateRootWindowTransformerForDisplay(
-    aura::Window* root,
     const display::Display& display) {
-  return new AshRootWindowTransformer(root, display);
+  return new AshRootWindowTransformer(display);
 }
 
 RootWindowTransformer* CreateRootWindowTransformerForMirroredDisplay(
diff --git a/ash/display/root_window_transformers.h b/ash/display/root_window_transformers.h
index a1b4464..c3a20cf 100644
--- a/ash/display/root_window_transformers.h
+++ b/ash/display/root_window_transformers.h
@@ -7,10 +7,6 @@
 
 #include "ash/ash_export.h"
 
-namespace aura {
-class Window;
-}
-
 namespace display {
 class Display;
 class ManagedDisplayInfo;
@@ -24,7 +20,6 @@
 class RootWindowTransformer;
 
 ASH_EXPORT RootWindowTransformer* CreateRootWindowTransformerForDisplay(
-    aura::Window* root,
     const display::Display& display);
 
 // Creates a RootWindowTransformers for mirror root window.
diff --git a/ash/display/window_tree_host_manager.cc b/ash/display/window_tree_host_manager.cc
index 2094bb6..392a5bd 100644
--- a/ash/display/window_tree_host_manager.cc
+++ b/ash/display/window_tree_host_manager.cc
@@ -82,7 +82,7 @@
   aura::WindowTreeHost* host = ash_host->AsWindowTreeHost();
   ash_host->SetCursorConfig(display, effective_rotation);
   std::unique_ptr<RootWindowTransformer> transformer(
-      CreateRootWindowTransformerForDisplay(host->window(), display));
+      CreateRootWindowTransformerForDisplay(display));
   ash_host->SetRootWindowTransformer(std::move(transformer));
 
   host->SetDisplayTransformHint(
diff --git a/ash/home_screen/drag_window_from_shelf_controller.cc b/ash/home_screen/drag_window_from_shelf_controller.cc
index 06aae4ea..ae2be76c 100644
--- a/ash/home_screen/drag_window_from_shelf_controller.cc
+++ b/ash/home_screen/drag_window_from_shelf_controller.cc
@@ -149,6 +149,10 @@
     overview_session->OnWindowDragStarted(window_, /*animate=*/false);
     if (ShouldAllowSplitView())
       overview_session->SetSplitViewDragIndicatorsDraggedWindow(window_);
+    // Hide overview windows first and fade in the windows after delaying
+    // kShowOverviewTimeWhenDragSuspend.
+    overview_session->SetVisibleDuringWindowDragging(/*visible=*/false,
+                                                     /*animate=*/false);
   }
 
   // If overview is active, update its splitview indicator during dragging if
@@ -178,7 +182,8 @@
                std::abs(scroll_y) > kShowOverviewThreshold) {
       // If the dragging velocity is large enough, hide overview windows.
       show_overview_timer_.Stop();
-      overview_session->SetVisibleDuringWindowDragging(/*visible=*/false);
+      overview_session->SetVisibleDuringWindowDragging(/*visible=*/false,
+                                                       /*animate=*/false);
     } else {
       // Otherwise start the |show_overview_timer_| to show and update overview
       // when the dragging slows down or stops.
@@ -488,7 +493,7 @@
     return;
 
   overview_controller->overview_session()->SetVisibleDuringWindowDragging(
-      /*visible=*/true);
+      /*visible=*/true, /*animate=*/true);
 }
 
 void DragWindowFromShelfController::ScaleDownWindowAfterDrag() {
diff --git a/ash/home_screen/home_screen_controller.cc b/ash/home_screen/home_screen_controller.cc
index a9ca31b9..0147545 100644
--- a/ash/home_screen/home_screen_controller.cc
+++ b/ash/home_screen/home_screen_controller.cc
@@ -86,7 +86,7 @@
       SplitViewController::Get(Shell::GetPrimaryRootWindow());
   const bool split_view_active = split_view_controller->InSplitViewMode();
 
-  if (!features::IsHomerviewGestureEnabled()) {
+  if (!features::IsDragFromShelfToHomeOrOverviewEnabled()) {
     if (home_launcher_gesture_handler_->ShowHomeLauncher(
             Shell::Get()->display_manager()->GetDisplayForId(display_id))) {
       return true;
diff --git a/ash/home_screen/home_screen_controller_unittest.cc b/ash/home_screen/home_screen_controller_unittest.cc
index 7e486689..d901dfec 100644
--- a/ash/home_screen/home_screen_controller_unittest.cc
+++ b/ash/home_screen/home_screen_controller_unittest.cc
@@ -30,13 +30,10 @@
   HomeScreenControllerTest() {
     if (GetParam()) {
       scoped_feature_list_.InitWithFeatures(
-          {features::kHomerviewGesture,
-           features::kDragFromShelfToHomeOrOverview},
-          {});
+          {features::kDragFromShelfToHomeOrOverview}, {});
     } else {
       scoped_feature_list_.InitWithFeatures(
-          {}, {features::kHomerviewGesture,
-               features::kDragFromShelfToHomeOrOverview});
+          {}, {features::kDragFromShelfToHomeOrOverview});
     }
   }
   ~HomeScreenControllerTest() override = default;
diff --git a/ash/home_screen/swipe_home_to_overview_controller_unittest.cc b/ash/home_screen/swipe_home_to_overview_controller_unittest.cc
index a6ed871..9dc746b 100644
--- a/ash/home_screen/swipe_home_to_overview_controller_unittest.cc
+++ b/ash/home_screen/swipe_home_to_overview_controller_unittest.cc
@@ -24,7 +24,8 @@
 class SwipeHomeToOverviewControllerTest : public AshTestBase {
  public:
   SwipeHomeToOverviewControllerTest() {
-    scoped_feature_list_.InitWithFeatures({features::kHomerviewGesture}, {});
+    scoped_feature_list_.InitWithFeatures(
+        {features::kDragFromShelfToHomeOrOverview}, {});
   }
   ~SwipeHomeToOverviewControllerTest() override = default;
 
diff --git a/ash/login/ui/image_parser.cc b/ash/login/ui/image_parser.cc
index 451c274..b7ecec6 100644
--- a/ash/login/ui/image_parser.cc
+++ b/ash/login/ui/image_parser.cc
@@ -41,9 +41,8 @@
   // - PNGCodec::Decode uses libpng which does not support APNG. blink::WebImage
   // also goes through libpng, but APNG support is handled specifically by
   // blink's PNGImageReader.cpp.
-  data_decoder::DecodeAnimation(
-      Shell::Get()->shell_delegate()->LaunchDataDecoder(), image_data,
-      true /*shrink_to_fit*/, kMaxImageSizeInBytes,
+  data_decoder::DecodeAnimationIsolated(
+      image_data, true /*shrink_to_fit*/, kMaxImageSizeInBytes,
       base::BindOnce(&ConvertToAnimationFrame, std::move(on_decoded)));
 }
 
diff --git a/ash/magnifier/magnification_controller.cc b/ash/magnifier/magnification_controller.cc
index 5253e74..5bac41e 100644
--- a/ash/magnifier/magnification_controller.cc
+++ b/ash/magnifier/magnification_controller.cc
@@ -636,7 +636,7 @@
   display::Display display =
       display::Screen::GetScreen()->GetDisplayNearestWindow(root_window_);
   std::unique_ptr<RootWindowTransformer> transformer(
-      CreateRootWindowTransformerForDisplay(root_window_, display));
+      CreateRootWindowTransformerForDisplay(display));
 
   // Inverse the transformation on the keyboard container so the keyboard will
   // remain zoomed out. Apply the same animation settings to it.
diff --git a/ash/public/cpp/ash_features.cc b/ash/public/cpp/ash_features.cc
index 3fa59e6..c88326c 100644
--- a/ash/public/cpp/ash_features.cc
+++ b/ash/public/cpp/ash_features.cc
@@ -103,9 +103,6 @@
 const base::Feature kDragFromShelfToHomeOrOverview{
     "DragFromShelfToHomeOrOverview", base::FEATURE_ENABLED_BY_DEFAULT};
 
-const base::Feature kHomerviewGesture{"HomerviewGesture",
-                                      base::FEATURE_DISABLED_BY_DEFAULT};
-
 bool IsHideArcMediaNotificationsEnabled() {
   return base::FeatureList::IsEnabled(kMediaSessionNotification) &&
          base::FeatureList::IsEnabled(kHideArcMediaNotifications);
@@ -205,9 +202,5 @@
   return base::FeatureList::IsEnabled(kReduceDisplayNotifications);
 }
 
-bool IsHomerviewGestureEnabled() {
-  return base::FeatureList::IsEnabled(kHomerviewGesture);
-}
-
 }  // namespace features
 }  // namespace ash
diff --git a/ash/public/cpp/ash_features.h b/ash/public/cpp/ash_features.h
index f40dc5ac..7f5fe61 100644
--- a/ash/public/cpp/ash_features.h
+++ b/ash/public/cpp/ash_features.h
@@ -135,9 +135,6 @@
 // launched.
 ASH_PUBLIC_EXPORT extern const base::Feature kDragFromShelfToHomeOrOverview;
 
-// Enables swiping from shelf on home screen to enter overview.
-ASH_PUBLIC_EXPORT extern const base::Feature kHomerviewGesture;
-
 ASH_PUBLIC_EXPORT bool IsHideArcMediaNotificationsEnabled();
 
 ASH_PUBLIC_EXPORT bool IsKeyboardShortcutViewerAppEnabled();
@@ -180,8 +177,6 @@
 
 ASH_PUBLIC_EXPORT bool IsReduceDisplayNotificationsEnabled();
 
-ASH_PUBLIC_EXPORT bool IsHomerviewGestureEnabled();
-
 }  // namespace features
 }  // namespace ash
 
diff --git a/ash/shelf/shelf_layout_manager.cc b/ash/shelf/shelf_layout_manager.cc
index 867b897c..6a97d73a 100644
--- a/ash/shelf/shelf_layout_manager.cc
+++ b/ash/shelf/shelf_layout_manager.cc
@@ -130,8 +130,8 @@
 // gestures.
 ash::HomeLauncherGestureHandler::Mode
 GetHomeLauncherGestureHandlerModeForDrag() {
-  if (features::IsHomerviewGestureEnabled() && IsHotseatEnabled() &&
-      Shell::Get()->home_screen_controller() &&
+  if (features::IsDragFromShelfToHomeOrOverviewEnabled() &&
+      IsHotseatEnabled() && Shell::Get()->home_screen_controller() &&
       Shell::Get()->home_screen_controller()->IsHomeScreenVisible() &&
       Shell::Get()->overview_controller() &&
       !Shell::Get()->overview_controller()->InOverviewSession()) {
diff --git a/ash/shell/content/test/ash_content_test.cc b/ash/shell/content/test/ash_content_test.cc
index 4e55273..050012d 100644
--- a/ash/shell/content/test/ash_content_test.cc
+++ b/ash/shell/content/test/ash_content_test.cc
@@ -64,7 +64,7 @@
     const std::vector<std::string>& tbm_metrics) {
   perf_test::LuciTestResult result =
       perf_test::LuciTestResult::CreateForGTest();
-  result.AddOutputArtifactFile("trace/1", trace_file, "application/json");
+  result.AddOutputArtifactFile("trace/1.json", trace_file, "application/json");
   for (auto& metric : tbm_metrics)
     result.AddTag("tbmv2", metric);
 
diff --git a/ash/shell/shell_delegate_impl.cc b/ash/shell/shell_delegate_impl.cc
index 603dcddd..979c038 100644
--- a/ash/shell/shell_delegate_impl.cc
+++ b/ash/shell/shell_delegate_impl.cc
@@ -33,12 +33,5 @@
   return true;
 }
 
-mojo::Remote<data_decoder::mojom::DataDecoderService>
-ShellDelegateImpl::LaunchDataDecoder() {
-  mojo::Remote<data_decoder::mojom::DataDecoderService> remote;
-  ignore_result(remote.BindNewPipeAndPassReceiver());
-  return remote;
-}
-
 }  // namespace shell
 }  // namespace ash
diff --git a/ash/shell/shell_delegate_impl.h b/ash/shell/shell_delegate_impl.h
index 6d39484..7e5f5e1f 100644
--- a/ash/shell/shell_delegate_impl.h
+++ b/ash/shell/shell_delegate_impl.h
@@ -24,8 +24,6 @@
   std::unique_ptr<ScreenshotDelegate> CreateScreenshotDelegate() override;
   AccessibilityDelegate* CreateAccessibilityDelegate() override;
   bool CanGoBack(gfx::NativeWindow window) const override;
-  mojo::Remote<data_decoder::mojom::DataDecoderService> LaunchDataDecoder()
-      override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ShellDelegateImpl);
diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h
index 261c609..d50a7969 100644
--- a/ash/shell_delegate.h
+++ b/ash/shell_delegate.h
@@ -11,8 +11,6 @@
 #include "ash/ash_export.h"
 #include "base/callback.h"
 #include "base/strings/string16.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
 #include "ui/gfx/native_widget_types.h"
 
 namespace aura {
@@ -44,12 +42,6 @@
   virtual bool CanGoBack(gfx::NativeWindow window) const = 0;
 
   virtual void OpenKeyboardShortcutHelpPage() const {}
-
-  // Launches an instance of the Data Decoder service and returns a remote
-  // endpoint to communicate with it. In testing environments, this may return
-  // a disconnected Remote.
-  virtual mojo::Remote<data_decoder::mojom::DataDecoderService>
-  LaunchDataDecoder() = 0;
 };
 
 }  // namespace ash
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb
index 15ec4bc..d56d80e5 100644
--- a/ash/strings/ash_strings_gu.xtb
+++ b/ash/strings/ash_strings_gu.xtb
@@ -298,6 +298,7 @@
 <translation id="5302048478445481009">ભાષા</translation>
 <translation id="5313326810920013265">Bluetooth સેટિંગ</translation>
 <translation id="5331975486040154427">USB-C ડિવાઇસ (ડાબી બાજુનું પાછળનું પોર્ટ)</translation>
+<translation id="5367319243122320268"><ph name="NETWORK_NAME" /> - <ph name="CONNECTION_STATUS" /></translation>
 <translation id="5379115545237091094">ઘણા બધા પ્રયાસો</translation>
 <translation id="5397578532367286026">આ વપરાશકર્તાના ઉપયોગ અને ઇતિહાસની chrome.com પર સંચાલક (<ph name="MANAGER_EMAIL" />) દ્વારા સમીક્ષા કરવામાં આવી શકે છે.</translation>
 <translation id="5430931332414098647">ફટાફટ ટિથરિંગ</translation>
@@ -320,6 +321,7 @@
 <translation id="5682642926269496722">હાલના વપરાશકર્તા એકાઉન્ટ માટે Google આસિસ્ટંટ ઉપલબ્ધ નથી.</translation>
 <translation id="5691772641933328258">ફિંગરપ્રિન્ટ ઓળખી શકાઈ નથી</translation>
 <translation id="5710450975648804523">ખલેલ પાડશો નહીં ચાલુ છે</translation>
+<translation id="573413375004481890">આ ડિવાઇસ તમારા બધા ડિસ્પ્લેને સપોર્ટ કરી શક્યું નથી, તેથી એકને ડિસ્કનેક્ટ કરવામાં આવ્યું છે</translation>
 <translation id="574392208103952083">મધ્યમ</translation>
 <translation id="5744083938413354016">ખેંચવાને ટૅપ કરો</translation>
 <translation id="5750765938512549687">બ્લૂટૂથ બંધ છે</translation>
diff --git a/ash/strings/ash_strings_hi.xtb b/ash/strings/ash_strings_hi.xtb
index 42b291bf..d530e7e3 100644
--- a/ash/strings/ash_strings_hi.xtb
+++ b/ash/strings/ash_strings_hi.xtb
@@ -506,7 +506,7 @@
 <translation id="8454013096329229812">वाई-फ़ाई  चालू है.</translation>
 <translation id="847056008324733326">डिसप्ले पैमाने की सेटिंग</translation>
 <translation id="8477270416194247200">रद्द करने के लिए Alt+Search या Shift दबाएं.</translation>
-<translation id="8513108775083588393">स्क्रीन का अपने आप दिशा बदलना (अॉटो-रोटेट)</translation>
+<translation id="8513108775083588393">स्क्रीन का अपने आप दिशा बदलना (ऑटो-रोटेट)</translation>
 <translation id="8517041960877371778">हो सकता है आपका <ph name="DEVICE_TYPE" /> चालू होने पर चार्ज नहीं होता हो.</translation>
 <translation id="8627191004499078455"><ph name="DEVICE_NAME" /> से कनेक्ट है</translation>
 <translation id="8639760480004882931"><ph name="PERCENTAGE" /> बाकी</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb
index 658360a..2917a59 100644
--- a/ash/strings/ash_strings_iw.xtb
+++ b/ash/strings/ash_strings_iw.xtb
@@ -233,7 +233,7 @@
 <translation id="4269883910223712419">מנהל המכשיר הזה יכול:</translation>
 <translation id="4279490309300973883">שיקוף</translation>
 <translation id="4296136865091727875">ניקוי כל <ph name="COUNT" /> ההתראות</translation>
-<translation id="4303223480529385476">הרחבה של אזור סטטוס</translation>
+<translation id="4303223480529385476">הרחבה של אזור הסטטוס</translation>
 <translation id="4321179778687042513">ctrl</translation>
 <translation id="4321776623976362024">הקשת על מקש הקיצור של ניגודיות גבוהה. להפעיל אותה?</translation>
 <translation id="4331809312908958774">Chrome OS</translation>
@@ -415,7 +415,7 @@
 <translation id="7015766095477679451">אפשר לחזור בשעה <ph name="COME_BACK_TIME" />.</translation>
 <translation id="7025533177575372252">חיבור <ph name="DEVICE_NAME" /> לטלפון</translation>
 <translation id="7029814467594812963">צא מההפעלה</translation>
-<translation id="7042322267639375032">כיווץ של אזור סטטוס</translation>
+<translation id="7042322267639375032">כיווץ של אזור הסטטוס</translation>
 <translation id="7066646422045619941">מנהל המערכת השבית את הרשת הזו.</translation>
 <translation id="7067196344162293536">סיבוב אוטומטי</translation>
 <translation id="7068360136237591149">פתיחת קבצים</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb
index f0fece8..718f9671 100644
--- a/ash/strings/ash_strings_mr.xtb
+++ b/ash/strings/ash_strings_mr.xtb
@@ -58,7 +58,7 @@
 <translation id="1677472565718498478"><ph name="TIME" /> शिल्लक</translation>
 <translation id="1698760176351776263">IPv6 पत्ता: <ph name="ADDRESS" /></translation>
 <translation id="1743570585616704562">ओळखले नाही</translation>
-<translation id="1746730358044914197">तुमच्या अॅडमिनिस्ट्रेटरद्वारे कॉन्फिगर केलेल्या इनपुट पद्धती.</translation>
+<translation id="1746730358044914197">तुमच्या ॲडमिनिस्ट्रेटरद्वारे कॉन्फिगर केलेल्या इनपुट पद्धती.</translation>
 <translation id="1747827819627189109">ऑन-स्क्रीन कीबोर्ड सक्षम</translation>
 <translation id="1761222317188459878">नेटवर्क कनेक्शन टॉगल करा. <ph name="STATE_TEXT" /></translation>
 <translation id="1771761307086386028">उजवीकडे स्क्रोल करा</translation>
@@ -196,7 +196,7 @@
 <translation id="3712407551474845318">विभाग कॅप्‍चर करा</translation>
 <translation id="371370241367527062">समोरील मायक्रोफोन</translation>
 <translation id="3771549900096082774">उच्च कॉन्ट्रास्ट मोड</translation>
-<translation id="3773700760453577392">अॅडमिनिस्ट्रेटरने <ph name="USER_EMAIL" /> साठी एकाहून अधिक साइन-इन बंद केले आहे. सुरू ठेवण्यासाठी सर्व वापरकर्त्यांनी साइन आउट करणे आवश्यक आहे.</translation>
+<translation id="3773700760453577392">ॲडमिनिस्ट्रेटरने <ph name="USER_EMAIL" /> साठी एकाहून अधिक साइन-इन बंद केले आहे. सुरू ठेवण्यासाठी सर्व वापरकर्त्यांनी साइन आउट करणे आवश्यक आहे.</translation>
 <translation id="3783640748446814672">alt</translation>
 <translation id="3784455785234192852">लॉक करा</translation>
 <translation id="3798670284305777884">स्पीकर (अंतर्गत)</translation>
@@ -250,7 +250,7 @@
 <translation id="4477350412780666475">पुढील ट्रॅक</translation>
 <translation id="4479639480957787382">इथरनेट</translation>
 <translation id="4481530544597605423">जोडणी वेगळी केलेली डिव्हाइस</translation>
-<translation id="4505050298327493054">अॅक्टिव्ह डेस्क.</translation>
+<translation id="4505050298327493054">ॲक्टिव्ह डेस्क.</translation>
 <translation id="4513946894732546136">अभिप्राय</translation>
 <translation id="4527045527269911712">"<ph name="DEVICE_NAME" />" Bluetooth डिव्हाइस जोडण्यासाठी परवानगी घेऊ इच्छिते.</translation>
 <translation id="453661520163887813">पूर्ण होण्यात <ph name="TIME" /></translation>
@@ -292,7 +292,7 @@
 <translation id="5168181903108465623">कास्‍ट डिव्‍हाइसेस उपलब्‍ध</translation>
 <translation id="5207949376430453814">मजकूर कॅरेट हायलाइट करा</translation>
 <translation id="5222676887888702881">साइन आउट करा</translation>
-<translation id="523505283826916779">अॅक्सेसिबिलिटी सेटिंग्ज</translation>
+<translation id="523505283826916779">ॲक्सेसिबिलिटी सेटिंग्ज</translation>
 <translation id="5260676007519551770">डेस्‍क ४</translation>
 <translation id="5283198616748585639">एक मिनिट जोडा</translation>
 <translation id="5302048478445481009">भाषा</translation>
@@ -410,13 +410,13 @@
 <translation id="6911468394164995108">दुसरीकडे सामील व्हा...</translation>
 <translation id="6919251195245069855">तुमचे स्मार्ट कार्ड ओळखू शकलो नाही. पुन्हा प्रयत्न करा.</translation>
 <translation id="6972754398087986839">प्रारंभ करा</translation>
-<translation id="6981982820502123353">अॅक्सेसिबिलिटी</translation>
+<translation id="6981982820502123353">ॲक्सेसिबिलिटी</translation>
 <translation id="698231206551913481">एकदा हा वापरकर्ता काढल्यानंतर या वापरकर्त्याशी संबद्ध सर्व फायली आणि स्थानिक डेटा कायमचा हटवला जाईल.</translation>
 <translation id="7015766095477679451"><ph name="COME_BACK_TIME" /> वाजता परत या.</translation>
 <translation id="7025533177575372252">तुमचे <ph name="DEVICE_NAME" /> तुमच्या फोनशी कनेक्ट करा</translation>
 <translation id="7029814467594812963">सेशनमधून बाहेर पडा</translation>
 <translation id="7042322267639375032">स्थिती क्षेत्र कोलॅप्स करा</translation>
-<translation id="7066646422045619941">हे नेटवर्क तुमच्या अॅडमिनिस्ट्रेटरने अक्षम केले आहे.</translation>
+<translation id="7066646422045619941">हे नेटवर्क तुमच्या ॲडमिनिस्ट्रेटरने अक्षम केले आहे.</translation>
 <translation id="7067196344162293536">स्वयं फिरवा</translation>
 <translation id="7068360136237591149">फायली उघडा</translation>
 <translation id="7076293881109082629">साइन इन करीत आहे</translation>
@@ -473,7 +473,7 @@
 <translation id="7886277072580235377">तुम्ही साइन आउट केल्यावर तुमचे इंटरनेट सेशन साफ केले जाईल. <ph name="LEARN_MORE" /></translation>
 <translation id="788781083998633524">ईमेल पाठवा</translation>
 <translation id="7897375687985782769">तुम्ही स्क्रीन रोटेशनसाठी कीबोर्ड शॉर्टकट दाबला आहे. तुम्हाला स्क्रीन फिरवायची आहे का?</translation>
-<translation id="7904094684485781019">या खात्याच्या अॅडमिनिस्ट्रेटरने एकाहून अधिक साइन इन ची परवानगी  रद्द केली आहे.</translation>
+<translation id="7904094684485781019">या खात्याच्या ॲडमिनिस्ट्रेटरने एकाहून अधिक साइन इन ची परवानगी  रद्द केली आहे.</translation>
 <translation id="7933084174919150729">Google Assistant फक्त प्राथमिक प्रोफाइलवर उपलब्ध आहे.</translation>
 <translation id="79341161159229895">खाते <ph name="FIRST_PARENT_EMAIL" /> आणि <ph name="SECOND_PARENT_EMAIL" /> ने व्‍यवस्‍थापित केले आहे</translation>
 <translation id="7977927628060636163">मोबाइल नेटवर्क शोधत आहे...</translation>
@@ -510,7 +510,7 @@
 <translation id="8428213095426709021">सेटिंग्ज</translation>
 <translation id="8433186206711564395">नेटवर्क सेटिंग्ज</translation>
 <translation id="8433977262951327081">शेल्फमधील इनपुट पर्याय मेनू दर्शविण्यासाठीचा शॉर्टकट बदलला आहे. कृपया <ph name="OLD_SHORTCUT" /> ऐवजी <ph name="NEW_SHORTCUT" /> वापरा.</translation>
-<translation id="8444246603146515890">डेस्क <ph name="DESK_TITILE" /> अॅक्टिव्हेट केले</translation>
+<translation id="8444246603146515890">डेस्क <ph name="DESK_TITILE" /> ॲक्टिव्हेट केले</translation>
 <translation id="8452135315243592079">गहाळ सिम कार्ड</translation>
 <translation id="8454013096329229812">वाय-फाय सुरू आहे.</translation>
 <translation id="847056008324733326">स्केल सेटिंग्‍ज दाखवा</translation>
@@ -535,7 +535,7 @@
 <translation id="8828714802988429505">90°</translation>
 <translation id="8843682306134542540">रोटेशन लॉक टॉगल करा. <ph name="STATE_TEXT" /></translation>
 <translation id="8850991929411075241">Search+Esc</translation>
-<translation id="8870509716567206129">अॅप विभाजित-स्क्रीनला सपोर्ट करत नाही.</translation>
+<translation id="8870509716567206129">ॲप विभाजित-स्क्रीनला सपोर्ट करत नाही.</translation>
 <translation id="8874184842967597500">कनेक्ट केलेले नाही</translation>
 <translation id="8877788021141246043">रिमाइंडर सेट करा</translation>
 <translation id="8878886163241303700">स्क्रीन विस्तृत करत आहे</translation>
@@ -543,7 +543,7 @@
 <translation id="8909138438987180327">बॅटरी <ph name="PERCENTAGE" /> टक्के आहे.</translation>
 <translation id="8921554779039049422">H+</translation>
 <translation id="8921624153894383499">Google साहाय्यक ही भाषा बोलत नाही.</translation>
-<translation id="8936501819958976551">डीअॅक्टिव्हेट केले आहे</translation>
+<translation id="8936501819958976551">डीॲक्टिव्हेट केले आहे</translation>
 <translation id="8938800817013097409">USB-C डिव्‍हाइस (मागील बाजूचे उजवे पोर्ट)</translation>
 <translation id="8940956008527784070">बॅटरी कमी झाली (<ph name="PERCENTAGE" />%)</translation>
 <translation id="8983038754672563810">HSPA</translation>
@@ -562,7 +562,7 @@
 <translation id="9089416786594320554">इनपुट पद्धती</translation>
 <translation id="9091626656156419976"><ph name="DISPLAY_NAME" /> डिस्प्ले काढले</translation>
 <translation id="9151726767154816831">अपडेटासाठी रीस्टार्ट करा आणि powerwash करा</translation>
-<translation id="9179259655489829027">हे वैशिष्ट्य तुम्हाला पासवर्ड शिवाय कोणत्याही साइन-इन केलेल्या वापरकर्त्यास जलदपणे अॅक्सेस करण्याची परवानगी  देते. तुमचा विश्वास असलेल्या खात्यांसाठीच फक्त या वैशिष्ट्याचा वापर करा.</translation>
+<translation id="9179259655489829027">हे वैशिष्ट्य तुम्हाला पासवर्ड शिवाय कोणत्याही साइन-इन केलेल्या वापरकर्त्यास जलदपणे ॲक्सेस करण्याची परवानगी  देते. तुमचा विश्वास असलेल्या खात्यांसाठीच फक्त या वैशिष्ट्याचा वापर करा.</translation>
 <translation id="9193626018745640770">एका अज्ञात मिळवणाऱ्यावर कास्ट करत आहे</translation>
 <translation id="9194617393863864469">दुसरा वापरकर्ता साइन इन करा...</translation>
 <translation id="9210037371811586452">एकीकृत डेस्कटॉप मोडमधून बाहेर पडत आहे</translation>
diff --git a/ash/system/message_center/unified_message_center_bubble.cc b/ash/system/message_center/unified_message_center_bubble.cc
index b2872af..b1a254f1 100644
--- a/ash/system/message_center/unified_message_center_bubble.cc
+++ b/ash/system/message_center/unified_message_center_bubble.cc
@@ -148,7 +148,12 @@
   // corner clipping for ARC notifications. This approach only modifies the
   // position of the layer.
   gfx::Rect anchor_rect = tray_->shelf()->GetSystemTrayAnchorRect();
-  anchor_rect.set_x(anchor_rect.x() - kUnifiedMenuPadding);
+
+  int left_offset =
+      tray_->shelf()->alignment() == SHELF_ALIGNMENT_LEFT
+          ? kUnifiedMenuPadding
+          : -(kUnifiedMenuPadding - (base::i18n::IsRTL() ? 0 : 1));
+  anchor_rect.set_x(anchor_rect.x() + left_offset);
   anchor_rect.set_y(anchor_rect.y() - tray_->bubble()->GetCurrentTrayHeight() -
                     kUnifiedMenuPadding - kUnifiedMessageCenterBubbleSpacing);
   bubble_view_->ChangeAnchorRect(anchor_rect);
diff --git a/ash/test_shell_delegate.cc b/ash/test_shell_delegate.cc
index bed376a..b421491 100644
--- a/ash/test_shell_delegate.cc
+++ b/ash/test_shell_delegate.cc
@@ -33,11 +33,4 @@
   return true;
 }
 
-mojo::Remote<data_decoder::mojom::DataDecoderService>
-TestShellDelegate::LaunchDataDecoder() {
-  mojo::Remote<data_decoder::mojom::DataDecoderService> remote;
-  ignore_result(remote.BindNewPipeAndPassReceiver());
-  return remote;
-}
-
 }  // namespace ash
diff --git a/ash/test_shell_delegate.h b/ash/test_shell_delegate.h
index a9bac40..151361c5 100644
--- a/ash/test_shell_delegate.h
+++ b/ash/test_shell_delegate.h
@@ -22,8 +22,6 @@
   std::unique_ptr<ScreenshotDelegate> CreateScreenshotDelegate() override;
   AccessibilityDelegate* CreateAccessibilityDelegate() override;
   bool CanGoBack(gfx::NativeWindow window) const override;
-  mojo::Remote<data_decoder::mojom::DataDecoderService> LaunchDataDecoder()
-      override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestShellDelegate);
diff --git a/ash/wallpaper/wallpaper_controller_unittest.cc b/ash/wallpaper/wallpaper_controller_unittest.cc
index dfc8f61..be4a6a6 100644
--- a/ash/wallpaper/wallpaper_controller_unittest.cc
+++ b/ash/wallpaper/wallpaper_controller_unittest.cc
@@ -35,6 +35,7 @@
 #include "components/user_manager/fake_user_manager.h"
 #include "components/user_manager/scoped_user_manager.h"
 #include "components/user_manager/user_names.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "ui/aura/window.h"
@@ -285,6 +286,14 @@
     scoped_user_manager_ = std::make_unique<user_manager::ScopedUserManager>(
         std::move(fake_user_manager));
 
+    // This is almost certainly not what was originally intended for these
+    // tests, but they have never actually exercised properly decoded
+    // wallpapers, as they've never actually been connected to a Data Decoder.
+    // We simulate a "crashing" ImageDcoder to get the behavior the tests were
+    // written around, but at some point they should probably be fixed.
+    in_process_data_decoder_.service().SimulateImageDecoderCrashForTesting(
+        true);
+
     // Ash shell initialization creates wallpaper. Reset it so we can manually
     // control wallpaper creation and animation in our tests.
     Shell::Get()
@@ -535,6 +544,8 @@
   std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_;
 
  private:
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
+
   DISALLOW_COPY_AND_ASSIGN(WallpaperControllerTest);
 };
 
diff --git a/ash/wallpaper/wallpaper_utils/wallpaper_decoder.cc b/ash/wallpaper/wallpaper_utils/wallpaper_decoder.cc
index 4811d78..3be05255 100644
--- a/ash/wallpaper/wallpaper_utils/wallpaper_decoder.cc
+++ b/ash/wallpaper/wallpaper_utils/wallpaper_decoder.cc
@@ -34,8 +34,7 @@
                      const data_decoder::mojom::ImageCodec& image_codec,
                      OnWallpaperDecoded callback) {
   std::vector<uint8_t> image_bytes(image_data.begin(), image_data.end());
-  data_decoder::DecodeImage(
-      Shell::Get()->shell_delegate()->LaunchDataDecoder(),
+  data_decoder::DecodeImageIsolated(
       std::move(image_bytes), image_codec, /*shrink_to_fit=*/true,
       kMaxImageSizeInBytes, /*desired_image_frame_size=*/gfx::Size(),
       base::BindOnce(&ConvertToImageSkia, std::move(callback)));
diff --git a/ash/wm/overview/overview_animation_type.h b/ash/wm/overview/overview_animation_type.h
index ee8f947..b1930d4 100644
--- a/ash/wm/overview/overview_animation_type.h
+++ b/ash/wm/overview/overview_animation_type.h
@@ -47,6 +47,8 @@
   OVERVIEW_ANIMATION_SELECTION_WINDOW,
   // Used to animate the clipping of the windows frame header.
   OVERVIEW_ANIMATION_FRAME_HEADER_CLIP,
+  // Used to fade in all windows when window drag starts or during window drag.
+  OVERVIEW_ANIMATION_OPACITY_ON_WINDOW_DRAG,
 };
 
 }  // namespace ash
diff --git a/ash/wm/overview/overview_controller.cc b/ash/wm/overview/overview_controller.cc
index 2444e76c..4368c84 100644
--- a/ash/wm/overview/overview_controller.cc
+++ b/ash/wm/overview/overview_controller.cc
@@ -75,17 +75,17 @@
     }
   }
 
-  // If homerview gesture is enabled, overview is expected to fade in or out to
-  // home screen (when all windows are minimized).
-  if (ash::features::IsHomerviewGestureEnabled()) {
+  // If kDragFromShelfToHomeOrOverview is enabled, overview is expected to fade
+  // in or out to home screen (when all windows are minimized).
+  if (ash::features::IsDragFromShelfToHomeOrOverviewEnabled()) {
     return enter ? OverviewSession::EnterExitOverviewType::kFadeInEnter
                  : OverviewSession::EnterExitOverviewType::kFadeOutExit;
   }
 
-  // When HomerviewGesture is enabled, the original type is overriden even if
-  // the list of windows is empty so home screen knows to animate in during
-  // overview exit animation (home screen controller uses different show/hide
-  // animations depending on the overview exit/enter types).
+  // When kDragFromShelfToHomeOrOverview is enabled, the original type is
+  // overridden even if the list of windows is empty so home screen knows to
+  // animate in during overview exit animation (home screen controller uses
+  // different show/hide animations depending on the overview exit/enter types).
   if (windows.empty())
     return original_type;
 
diff --git a/ash/wm/overview/overview_controller_unittest.cc b/ash/wm/overview/overview_controller_unittest.cc
index 1727678..c98c3f1 100644
--- a/ash/wm/overview/overview_controller_unittest.cc
+++ b/ash/wm/overview/overview_controller_unittest.cc
@@ -422,16 +422,20 @@
   GetAppListTestHelper()->CheckVisibility(false);
 }
 
-// Parameterized test depending on whether kHomerviewGesture is enabled.
-class OverviewControllerTestWithHomerviewGesture
+// Parameterized test depending on whether kDragFromShelfToHomeOrOverview is
+// enabled.
+class OverviewControllerTestWithDragFromShelfToHomeOrOverview
     : public OverviewControllerTest,
       public testing::WithParamInterface<bool> {
  public:
-  OverviewControllerTestWithHomerviewGesture() {
-    if (GetParam())
-      scoped_feature_list_.InitAndEnableFeature(features::kHomerviewGesture);
-    else
-      scoped_feature_list_.InitAndDisableFeature(features::kHomerviewGesture);
+  OverviewControllerTestWithDragFromShelfToHomeOrOverview() {
+    if (GetParam()) {
+      scoped_feature_list_.InitAndEnableFeature(
+          features::kDragFromShelfToHomeOrOverview);
+    } else {
+      scoped_feature_list_.InitAndDisableFeature(
+          features::kDragFromShelfToHomeOrOverview);
+    }
   }
 
  private:
@@ -441,7 +445,7 @@
 // Tests which animation for overview is used in tablet if all windows
 // are minimized, and that if overview is exited from the home launcher all
 // windows are minimized.
-TEST_P(OverviewControllerTestWithHomerviewGesture,
+TEST_P(OverviewControllerTestWithDragFromShelfToHomeOrOverview,
        OverviewEnterExitAnimationTablet) {
   TestOverviewObserver observer(/*should_monitor_animation_state = */ false);
 
@@ -480,7 +484,7 @@
 
 // Tests that the slide and fade animations are not used to enter or exit
 // overview in clamshell.
-TEST_P(OverviewControllerTestWithHomerviewGesture,
+TEST_P(OverviewControllerTestWithDragFromShelfToHomeOrOverview,
        OverviewEnterExitAnimationClamshell) {
   TestOverviewObserver observer(/*should_monitor_animation_state = */ false);
 
@@ -505,7 +509,8 @@
   EXPECT_FALSE(observer.last_animation_was_fade());
 }
 
-TEST_P(OverviewControllerTestWithHomerviewGesture, WallpaperAnimationTiming) {
+TEST_P(OverviewControllerTestWithDragFromShelfToHomeOrOverview,
+       WallpaperAnimationTiming) {
   const gfx::Rect bounds(200, 200);
   std::unique_ptr<aura::Window> window(
       CreateTestWindowInShellWithBounds(bounds));
@@ -525,9 +530,10 @@
             overview_controller->HasBlurAnimationForTest());
 }
 
-INSTANTIATE_TEST_SUITE_P(,
-                         OverviewControllerTestWithHomerviewGesture,
-                         testing::Bool());
+INSTANTIATE_TEST_SUITE_P(
+    ,
+    OverviewControllerTestWithDragFromShelfToHomeOrOverview,
+    testing::Bool());
 
 class OverviewVirtualKeyboardTest : public OverviewControllerTest {
  protected:
diff --git a/ash/wm/overview/overview_grid.cc b/ash/wm/overview/overview_grid.cc
index 6e42e49..6511c51 100644
--- a/ash/wm/overview/overview_grid.cc
+++ b/ash/wm/overview/overview_grid.cc
@@ -661,8 +661,26 @@
     return;
   }
 
-  if (reposition)
-    PositionWindows(/*animate=*/true);
+  if (reposition) {
+    // Update the grid bounds if needed and reposition the windows minus the
+    // currently overview dragged window, if there is one. Note: this does not
+    // update the grid bounds if the window being dragged from the top or shelf,
+    // the former being handled in TabletModeWindowDragDelegate's destructor.
+    base::flat_set<OverviewItem*> ignored_items;
+    if (overview_session_->window_drag_controller() &&
+        overview_session_->window_drag_controller()->item()) {
+      ignored_items.insert(overview_session_->window_drag_controller()->item());
+    }
+    auto* split_view_drag_indicators =
+        overview_session_->split_view_drag_indicators();
+    const gfx::Rect grid_bounds = GetGridBoundsInScreenForSplitview(
+        root_window_,
+        split_view_drag_indicators
+            ? base::make_optional(
+                  split_view_drag_indicators->current_window_dragging_state())
+            : base::nullopt);
+    SetBoundsAndUpdatePositions(grid_bounds, ignored_items, /*animate=*/true);
+  }
 }
 
 void OverviewGrid::AddDropTargetForDraggingFromOverview(
@@ -875,13 +893,26 @@
                               /*animate=*/true);
 }
 
-void OverviewGrid::SetVisibleDuringWindowDragging(bool visible) {
+void OverviewGrid::SetVisibleDuringWindowDragging(bool visible, bool animate) {
   for (const auto& window_item : window_list_)
-    window_item->SetVisibleDuringWindowDragging(visible);
+    window_item->SetVisibleDuringWindowDragging(visible, animate);
 
   // Update |desks_widget_|.
-  if (desks_widget_)
-    desks_widget_->GetNativeWindow()->layer()->SetOpacity(visible ? 1.f : 0.f);
+  if (desks_widget_) {
+    ui::Layer* layer = desks_widget_->GetNativeWindow()->layer();
+    float new_opacity = visible ? 1.f : 0.f;
+    if (layer->GetTargetOpacity() == new_opacity)
+      return;
+
+    if (animate) {
+      ScopedOverviewAnimationSettings settings(
+          OVERVIEW_ANIMATION_OPACITY_ON_WINDOW_DRAG,
+          desks_widget_->GetNativeWindow());
+      layer->SetOpacity(new_opacity);
+    } else {
+      layer->SetOpacity(new_opacity);
+    }
+  }
 }
 
 bool OverviewGrid::IsDropTargetWindow(aura::Window* window) const {
diff --git a/ash/wm/overview/overview_grid.h b/ash/wm/overview/overview_grid.h
index 994f227..840d563 100644
--- a/ash/wm/overview/overview_grid.h
+++ b/ash/wm/overview/overview_grid.h
@@ -177,7 +177,7 @@
                          bool snap);
   // Shows/Hides windows during window dragging. Used when swiping up a window
   // from shelf.
-  void SetVisibleDuringWindowDragging(bool visible);
+  void SetVisibleDuringWindowDragging(bool visible, bool animate);
 
   // Returns true if |window| is the placeholder window from the drop target.
   bool IsDropTargetWindow(aura::Window* window) const;
diff --git a/ash/wm/overview/overview_item.cc b/ash/wm/overview/overview_item.cc
index 3c99339..c31095e8 100644
--- a/ash/wm/overview/overview_item.cc
+++ b/ash/wm/overview/overview_item.cc
@@ -563,11 +563,21 @@
   is_being_dragged_ = false;
 }
 
-void OverviewItem::SetVisibleDuringWindowDragging(bool visible) {
+void OverviewItem::SetVisibleDuringWindowDragging(bool visible, bool animate) {
   aura::Window::Windows windows = GetWindowsForHomeGesture();
+  float new_opacity = visible ? 1.f : 0.f;
   for (auto* window : windows) {
     ui::Layer* layer = window->layer();
-    layer->SetOpacity(visible ? 1.f : 0.f);
+    if (layer->GetTargetOpacity() == new_opacity)
+      continue;
+
+    if (animate) {
+      ScopedOverviewAnimationSettings settings(
+          OVERVIEW_ANIMATION_OPACITY_ON_WINDOW_DRAG, window);
+      layer->SetOpacity(new_opacity);
+    } else {
+      layer->SetOpacity(new_opacity);
+    }
   }
 }
 
diff --git a/ash/wm/overview/overview_item.h b/ash/wm/overview/overview_item.h
index 32fce2f..140b4a9 100644
--- a/ash/wm/overview/overview_item.h
+++ b/ash/wm/overview/overview_item.h
@@ -120,7 +120,7 @@
 
   // Shows/Hides window item during window dragging. Used when swiping up a
   // window from shelf.
-  void SetVisibleDuringWindowDragging(bool visible);
+  void SetVisibleDuringWindowDragging(bool visible, bool animate);
 
   ScopedOverviewTransformWindow::GridWindowFillMode GetWindowDimensionsType()
       const;
diff --git a/ash/wm/overview/overview_item_view.cc b/ash/wm/overview/overview_item_view.cc
index f3f2ce1..96db658 100644
--- a/ash/wm/overview/overview_item_view.cc
+++ b/ash/wm/overview/overview_item_view.cc
@@ -7,6 +7,7 @@
 #include "ash/resources/vector_icons/vector_icons.h"
 #include "ash/strings/grit/ash_strings.h"
 #include "ash/wm/overview/overview_constants.h"
+#include "ash/wm/overview/overview_grid.h"
 #include "ash/wm/overview/overview_item.h"
 #include "ash/wm/overview/rounded_rect_view.h"
 #include "ash/wm/window_preview_view.h"
@@ -161,7 +162,9 @@
   // Call this last as it calls |Layout()| which relies on the some of the other
   // elements existing.
   SetShowPreview(show_preview);
-  if (show_preview) {
+  // Do not show header if the current overview item is the drop target widget.
+  if (show_preview || overview_item_->overview_grid()->IsDropTargetWindow(
+                          overview_item_->GetWindow())) {
     header_view()->layer()->SetOpacity(0.f);
     current_header_visibility_ = HeaderVisibility::kInvisible;
   }
diff --git a/ash/wm/overview/overview_session.cc b/ash/wm/overview/overview_session.cc
index 15cb6f9..faa001b 100644
--- a/ash/wm/overview/overview_session.cc
+++ b/ash/wm/overview/overview_session.cc
@@ -502,9 +502,10 @@
                                  should_drop_window_into_overview, snap);
 }
 
-void OverviewSession::SetVisibleDuringWindowDragging(bool visible) {
+void OverviewSession::SetVisibleDuringWindowDragging(bool visible,
+                                                     bool animate) {
   for (auto& grid : grid_list_)
-    grid->SetVisibleDuringWindowDragging(visible);
+    grid->SetVisibleDuringWindowDragging(visible, animate);
 }
 
 void OverviewSession::PositionWindows(
diff --git a/ash/wm/overview/overview_session.h b/ash/wm/overview/overview_session.h
index d71faa3..906c8a6 100644
--- a/ash/wm/overview/overview_session.h
+++ b/ash/wm/overview/overview_session.h
@@ -196,7 +196,7 @@
   // overview. It's used when dragging a window from bottom, when the user slows
   // down or stops dragging the window, shows overview windows and when the user
   // resumes dragging, hides overview windows.
-  void SetVisibleDuringWindowDragging(bool visible);
+  void SetVisibleDuringWindowDragging(bool visible, bool animate);
 
   // Positions all overview items except those in |ignored_items|.
   void PositionWindows(bool animate,
diff --git a/ash/wm/overview/overview_session_unittest.cc b/ash/wm/overview/overview_session_unittest.cc
index 1db5922..8097b99 100644
--- a/ash/wm/overview/overview_session_unittest.cc
+++ b/ash/wm/overview/overview_session_unittest.cc
@@ -2882,99 +2882,6 @@
   EXPECT_FALSE(InOverviewSession());
 }
 
-// Tests overview behavior with kHomerviewGesture flag enabled.
-class OverviewSessionWithHomerviewGestureTest : public OverviewSessionTest {
- public:
-  OverviewSessionWithHomerviewGestureTest() = default;
-  ~OverviewSessionWithHomerviewGestureTest() override = default;
-
-  void SetUp() override {
-    scoped_feature_list_.InitAndEnableFeature(features::kHomerviewGesture);
-    OverviewSessionTest::SetUp();
-    EnterTabletMode();
-  }
-
- private:
-  base::test::ScopedFeatureList scoped_feature_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(OverviewSessionWithHomerviewGestureTest);
-};
-
-// Tests starting the overview session using kFadeInEnter type.
-TEST_P(OverviewSessionWithHomerviewGestureTest, FadeIn) {
-  // Create a minimized window.
-  std::unique_ptr<aura::Window> window = CreateTestWindow();
-  WindowState::Get(window.get())->Minimize();
-
-  ui::ScopedAnimationDurationScaleMode test_duration_mode(
-      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
-
-  ToggleOverview(OverviewSession::EnterExitOverviewType::kFadeInEnter);
-  ASSERT_TRUE(InOverviewSession());
-
-  OverviewItem* item = GetOverviewItemForWindow(window.get());
-
-  // Verify that the item widget's transform is not animated as part of the
-  // animation.
-  views::Widget* widget = item_widget(item);
-  EXPECT_FALSE(widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
-      ui::LayerAnimationElement::TRANSFORM));
-
-  // Opacity should be animated to full opacity.
-  EXPECT_EQ(1.0f, widget->GetLayer()->GetTargetOpacity());
-  EXPECT_TRUE(widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
-      ui::LayerAnimationElement::OPACITY));
-
-  // Validate item bounds are within the grid.
-  const gfx::Rect bounds = gfx::ToEnclosedRect(item->target_bounds());
-  EXPECT_TRUE(GetGridBounds().Contains(bounds));
-
-  // Header is expected to be shown immediately.
-  EXPECT_EQ(
-      1.0f,
-      item->overview_item_view()->header_view()->layer()->GetTargetOpacity());
-
-  EXPECT_EQ(OverviewSession::EnterExitOverviewType::kFadeInEnter,
-            overview_session()->enter_exit_overview_type());
-}
-
-// Tests exiting the overview session using kFadeOutExit type.
-TEST_P(OverviewSessionWithHomerviewGestureTest, FadeOutExit) {
-  // Create a test window.
-  std::unique_ptr<views::Widget> test_widget(CreateTestWidget());
-  ToggleOverview();
-  ASSERT_TRUE(InOverviewSession());
-  EXPECT_FALSE(test_widget->IsMinimized());
-
-  ui::ScopedAnimationDurationScaleMode test_duration_mode(
-      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
-
-  // Grab the item widget before the session starts shutting down. The widget
-  // should outlive the session, at least until the animations are done - give
-  // tha NON_ZERO_DURATION animation duration scale, it should be safe to
-  // dereference the widget poiner immediately (synchronously) after the session
-  // ends.
-  OverviewItem* item = GetOverviewItemForWindow(test_widget->GetNativeWindow());
-  views::Widget* grid_item_widget = item_widget(item);
-
-  ToggleOverview(OverviewSession::EnterExitOverviewType::kFadeOutExit);
-  ASSERT_FALSE(InOverviewSession());
-
-  // The test window should be minimized as overview fade out exit starts.
-  EXPECT_TRUE(test_widget->IsMinimized());
-
-  // Verify that the item widget's transform is not animated as part of the
-  // animation, and that no transform is applied after minimizing the window.
-  EXPECT_FALSE(grid_item_widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
-      ui::LayerAnimationElement::TRANSFORM));
-  EXPECT_EQ(gfx::Transform(), grid_item_widget->GetLayer()->transform());
-
-  // Opacity should be animated to zero opacity.
-  EXPECT_EQ(0.0f, grid_item_widget->GetLayer()->GetTargetOpacity());
-  EXPECT_TRUE(grid_item_widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
-      ui::LayerAnimationElement::OPACITY));
-}
-
 // The class to test overview behavior with kDragFromShelfToHomeOrOverview flag
 // enabled.
 class OverviewSessionWithDragFromShelfFeatureTest : public OverviewSessionTest {
@@ -3043,6 +2950,81 @@
   EXPECT_TRUE(split_view_controller()->InSplitViewMode());
 }
 
+// Tests starting the overview session using kFadeInEnter type.
+TEST_P(OverviewSessionWithDragFromShelfFeatureTest, FadeIn) {
+  // Create a minimized window.
+  std::unique_ptr<aura::Window> window = CreateTestWindow();
+  WindowState::Get(window.get())->Minimize();
+
+  ui::ScopedAnimationDurationScaleMode test_duration_mode(
+      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
+
+  ToggleOverview(OverviewSession::EnterExitOverviewType::kFadeInEnter);
+  ASSERT_TRUE(InOverviewSession());
+
+  OverviewItem* item = GetOverviewItemForWindow(window.get());
+
+  // Verify that the item widget's transform is not animated as part of the
+  // animation.
+  views::Widget* widget = item_widget(item);
+  EXPECT_FALSE(widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
+      ui::LayerAnimationElement::TRANSFORM));
+
+  // Opacity should be animated to full opacity.
+  EXPECT_EQ(1.0f, widget->GetLayer()->GetTargetOpacity());
+  EXPECT_TRUE(widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
+      ui::LayerAnimationElement::OPACITY));
+
+  // Validate item bounds are within the grid.
+  const gfx::Rect bounds = gfx::ToEnclosedRect(item->target_bounds());
+  EXPECT_TRUE(GetGridBounds().Contains(bounds));
+
+  // Header is expected to be shown immediately.
+  EXPECT_EQ(
+      1.0f,
+      item->overview_item_view()->header_view()->layer()->GetTargetOpacity());
+
+  EXPECT_EQ(OverviewSession::EnterExitOverviewType::kFadeInEnter,
+            overview_session()->enter_exit_overview_type());
+}
+
+// Tests exiting the overview session using kFadeOutExit type.
+TEST_P(OverviewSessionWithDragFromShelfFeatureTest, FadeOutExit) {
+  // Create a test window.
+  std::unique_ptr<views::Widget> test_widget(CreateTestWidget());
+  ToggleOverview();
+  ASSERT_TRUE(InOverviewSession());
+  EXPECT_FALSE(test_widget->IsMinimized());
+
+  ui::ScopedAnimationDurationScaleMode test_duration_mode(
+      ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
+
+  // Grab the item widget before the session starts shutting down. The widget
+  // should outlive the session, at least until the animations are done - given
+  // that NON_ZERO_DURATION animation duration scale, it should be safe to
+  // dereference the widget pointer immediately (synchronously) after the
+  // session ends.
+  OverviewItem* item = GetOverviewItemForWindow(test_widget->GetNativeWindow());
+  views::Widget* grid_item_widget = item_widget(item);
+
+  ToggleOverview(OverviewSession::EnterExitOverviewType::kFadeOutExit);
+  ASSERT_FALSE(InOverviewSession());
+
+  // The test window should be minimized as overview fade out exit starts.
+  EXPECT_TRUE(test_widget->IsMinimized());
+
+  // Verify that the item widget's transform is not animated as part of the
+  // animation, and that no transform is applied after minimizing the window.
+  EXPECT_FALSE(grid_item_widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
+      ui::LayerAnimationElement::TRANSFORM));
+  EXPECT_EQ(gfx::Transform(), grid_item_widget->GetLayer()->transform());
+
+  // Opacity should be animated to zero opacity.
+  EXPECT_EQ(0.0f, grid_item_widget->GetLayer()->GetTargetOpacity());
+  EXPECT_TRUE(grid_item_widget->GetLayer()->GetAnimator()->IsAnimatingProperty(
+      ui::LayerAnimationElement::OPACITY));
+}
+
 // TODO(sammiequon): Merge this into SplitViewOverviewSessionTest and rename
 // that to TabletModeOverviewSessionTest.
 class OverviewSessionNewLayoutTest : public OverviewSessionTest {
@@ -5201,6 +5183,31 @@
   EXPECT_FALSE(overview_item->IsDragItem());
 }
 
+// Tests that a window which is dragged to a splitview zone is destroyed, the
+// grid bounds return to a non-splitview bounds.
+TEST_P(SplitViewOverviewSessionTest, GridBoundsAfterWindowDestroyed) {
+  // Create two windows otherwise we exit overview after one window is
+  // destroyed.
+  std::unique_ptr<aura::Window> window1 = CreateTestWindow();
+  std::unique_ptr<aura::Window> window2 = CreateTestWindow();
+
+  ToggleOverview();
+  const gfx::Rect grid_bounds = GetGridBounds();
+  // Drag the item such that the splitview preview area shows up and the grid
+  // bounds shrink.
+  OverviewItem* overview_item = GetOverviewItemForWindow(window1.get());
+  overview_session()->InitiateDrag(overview_item,
+                                   overview_item->target_bounds().CenterPoint(),
+                                   /*is_touch_dragging=*/true);
+  overview_session()->Drag(overview_item, gfx::PointF(1.f, 1.f));
+  EXPECT_NE(grid_bounds, GetGridBounds());
+
+  // Tests that when the dragged window is destroyed, the grid bounds return to
+  // their normal size.
+  window1.reset();
+  EXPECT_EQ(grid_bounds, GetGridBounds());
+}
+
 // Test the split view and overview functionalities in clamshell mode. Split
 // view is only active when overview is active in clamshell mode.
 class SplitViewOverviewSessionInClamshellTest
@@ -5831,8 +5838,5 @@
 INSTANTIATE_TEST_SUITE_P(,
                          OverviewSessionWithDragFromShelfFeatureTest,
                          testing::Bool());
-INSTANTIATE_TEST_SUITE_P(,
-                         OverviewSessionWithHomerviewGestureTest,
-                         testing::Bool());
 
 }  // namespace ash
diff --git a/ash/wm/overview/scoped_overview_animation_settings.cc b/ash/wm/overview/scoped_overview_animation_settings.cc
index 9d99612..b4844be6 100644
--- a/ash/wm/overview/scoped_overview_animation_settings.cc
+++ b/ash/wm/overview/scoped_overview_animation_settings.cc
@@ -50,6 +50,11 @@
 constexpr base::TimeDelta kDropTargetFade =
     base::TimeDelta::FromMilliseconds(250);
 
+// Time duration to fade in overview windows when a window drag slows down or
+// stops.
+constexpr base::TimeDelta kFadeInOnWindowDrag =
+    base::TimeDelta::FromMilliseconds(350);
+
 base::TimeDelta GetAnimationDuration(OverviewAnimationType animation_type) {
   switch (animation_type) {
     case OVERVIEW_ANIMATION_NONE:
@@ -71,7 +76,7 @@
       return kCloseFadeOut;
     case OVERVIEW_ANIMATION_ENTER_FROM_HOME_LAUNCHER:
     case OVERVIEW_ANIMATION_EXIT_TO_HOME_LAUNCHER:
-      return features::IsHomerviewGestureEnabled()
+      return features::IsDragFromShelfToHomeOrOverviewEnabled()
                  ? kHomeLauncherTransition
                  : kHomeLauncherSlideTransition;
     case OVERVIEW_ANIMATION_DROP_TARGET_FADE:
@@ -80,6 +85,8 @@
     case OVERVIEW_ANIMATION_SELECTION_WINDOW:
     case OVERVIEW_ANIMATION_FRAME_HEADER_CLIP:
       return kOverviewHighlightTransition;
+    case OVERVIEW_ANIMATION_OPACITY_ON_WINDOW_DRAG:
+      return kFadeInOnWindowDrag;
   }
   NOTREACHED();
   return base::TimeDelta();
@@ -160,9 +167,9 @@
           ui::LayerAnimator::ENQUEUE_NEW_ANIMATION);
       // Add animation delay when entering from home launcher.
       // Delay transform only when using slide animation (which is used
-      // if kHomerviewGesture is not enabled), as otherwise the overview item
-      // will only fade in.
-      if (features::IsHomerviewGestureEnabled()) {
+      // if kDragFromShelfToHomeOrOverview is not enabled), as otherwise
+      // the overview item will only fade in.
+      if (features::IsDragFromShelfToHomeOrOverviewEnabled()) {
         animator->SchedulePauseForProperties(
             kFromHomeLauncherDelay, ui::LayerAnimationElement::OPACITY);
       } else {
@@ -192,6 +199,11 @@
       animation_settings_->SetPreemptionStrategy(
           ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
       break;
+    case OVERVIEW_ANIMATION_OPACITY_ON_WINDOW_DRAG:
+      animation_settings_->SetTweenType(gfx::Tween::FAST_OUT_SLOW_IN);
+      animation_settings_->SetPreemptionStrategy(
+          ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
+      break;
   }
   animation_settings_->SetTransitionDuration(
       GetAnimationDuration(animation_type));
diff --git a/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc b/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc
index 4f7228d..e414e2d 100644
--- a/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc
+++ b/ash/wm/tablet_mode/tablet_mode_window_drag_delegate.cc
@@ -105,7 +105,10 @@
     OverviewGrid* overview_grid = GetOverviewGrid(dragged_window_);
     if (overview_grid) {
       overview_grid->RemoveDropTarget();
-      overview_grid->PositionWindows(/*animate=*/true);
+      const gfx::Rect grid_bounds =
+          GetGridBoundsInScreenForSplitview(dragged_window_, base::nullopt);
+      overview_grid->SetBoundsAndUpdatePositions(
+          grid_bounds, /*ignored_items=*/{}, /*animate=*/true);
     }
   }
 
diff --git a/base/memory/madv_free_discardable_memory_posix.cc b/base/memory/madv_free_discardable_memory_posix.cc
index 9a3ad83b..7b3ee21 100644
--- a/base/memory/madv_free_discardable_memory_posix.cc
+++ b/base/memory/madv_free_discardable_memory_posix.cc
@@ -211,11 +211,46 @@
   DFAKE_SCOPED_LOCK(thread_collision_warner_);
 
   using base::trace_event::MemoryAllocatorDump;
+  std::string allocator_dump_name = base::StringPrintf(
+      "discardable/segment_0x%" PRIXPTR, reinterpret_cast<uintptr_t>(this));
+
+  MemoryAllocatorDump* allocator_dump =
+      pmd->CreateAllocatorDump(allocator_dump_name);
+
+  bool is_discarded = IsDiscarded();
 
   MemoryAllocatorDump* dump = pmd->CreateAllocatorDump(name);
+  // The effective_size is the amount of unused space as a result of being
+  // page-aligned.
   dump->AddScalar(MemoryAllocatorDump::kNameSize,
                   MemoryAllocatorDump::kUnitsBytes,
-                  static_cast<uint64_t>(size_in_bytes_));
+                  is_discarded ? 0U : static_cast<uint64_t>(size_in_bytes_));
+
+  allocator_dump->AddScalar(
+      MemoryAllocatorDump::kNameSize, MemoryAllocatorDump::kUnitsBytes,
+      is_discarded
+          ? 0U
+          : static_cast<uint64_t>(allocated_pages_ * base::GetPageSize()));
+  allocator_dump->AddScalar(MemoryAllocatorDump::kNameObjectCount,
+                            MemoryAllocatorDump::kUnitsObjects, 1U);
+  allocator_dump->AddScalar(
+      "wasted_size", MemoryAllocatorDump::kUnitsBytes,
+      static_cast<uint64_t>(allocated_pages_ * base::GetPageSize() -
+                            size_in_bytes_));
+  allocator_dump->AddScalar("locked_size", MemoryAllocatorDump::kUnitsBytes,
+                            is_locked_ ? size_in_bytes_ : 0U);
+  allocator_dump->AddScalar("page_count", MemoryAllocatorDump::kUnitsObjects,
+                            static_cast<uint64_t>(allocated_pages_));
+
+  // The amount of space that is discarded, but not unmapped (i.e. the memory
+  // was discarded while unlocked, but the pages are still mapped in memory
+  // since Deallocate() has not been called yet). This instance is discarded if
+  // it is unlocked and not all pages are resident in memory.
+  allocator_dump->AddScalar(
+      "discarded_size", MemoryAllocatorDump::kUnitsBytes,
+      is_discarded ? allocated_pages_ * base::GetPageSize() : 0U);
+
+  pmd->AddSuballocation(dump->guid(), allocator_dump_name);
   return dump;
 }
 
diff --git a/build/android/gyp/allot_native_libraries.py b/build/android/gyp/allot_native_libraries.py
index 4cad72d..585f19d 100755
--- a/build/android/gyp/allot_native_libraries.py
+++ b/build/android/gyp/allot_native_libraries.py
@@ -7,7 +7,37 @@
 """Allots libraries to modules to be packaged into.
 
 All libraries that are depended on by a single module will be allotted to this
-module. All other libraries will be allotted to base.
+module. All other libraries will be allotted to the closest ancestor.
+
+Example:
+  Given the module dependency structure
+
+        c
+       / \
+      b   d
+     /     \
+    a       e
+
+  and libraries assignment
+
+    a: ['lib1.so']
+    e: ['lib2.so', 'lib1.so']
+
+  will make the allotment decision
+
+    c: ['lib1.so']
+    e: ['lib2.so']
+
+  The above example is invoked via:
+
+    ./allot_native_libraries \
+      --libraries 'a,["1.so"]' \
+      --libraries 'e,["2.so", "1.so"]' \
+      --dep c:b \
+      --dep b:a \
+      --dep c:d \
+      --dep d:e \
+      --output <output JSON>
 """
 
 import argparse
@@ -24,6 +54,74 @@
   return (arg[:pos], arg[pos + 1:])
 
 
+def _DepPair(arg):
+  parent, child = arg.split(':')
+  return (parent, child)
+
+
+def _PathFromRoot(module_tree, module):
+  """Computes path from root to a module.
+
+  Parameters:
+    module_tree: Dictionary mapping each module to its parent.
+    module: Module to which to compute the path.
+
+  Returns:
+    Path from root the the module.
+  """
+  path = [module]
+  while module_tree.get(module):
+    module = module_tree[module]
+    path = [module] + path
+  return path
+
+
+def _ClosestCommonAncestor(module_tree, modules):
+  """Computes the common ancestor of a set of modules.
+
+  Parameters:
+    module_tree: Dictionary mapping each module to its parent.
+    modules: Set of modules for which to find the closest common ancestor.
+
+  Returns:
+    The closest common ancestor.
+  """
+  paths = [_PathFromRoot(module_tree, m) for m in modules]
+  assert len(paths) > 0
+  ancestor = None
+  for level in zip(*paths):
+    if len(set(level)) != 1:
+      return ancestor
+    ancestor = level[0]
+  return ancestor
+
+
+def _AllotLibraries(module_tree, libraries_map):
+  """Allot all libraries to a module.
+
+  Parameters:
+    module_tree: Dictionary mapping each module to its parent. Modules can map
+      to None, which is considered the root of the tree.
+    libraries_map: Dictionary mapping each library to a set of modules, which
+      depend on the library.
+
+  Returns:
+    A dictionary mapping mapping each module name to a set of libraries allotted
+    to the module such that libraries with multiple dependees are allotted to
+    the closest ancestor.
+
+  Raises:
+    Exception if some libraries can only be allotted to the None root.
+  """
+  allotment_map = collections.defaultdict(set)
+  for library, modules in libraries_map.items():
+    ancestor = _ClosestCommonAncestor(module_tree, modules)
+    if not ancestor:
+      raise Exception('Cannot allot libraries for given dependency tree')
+    allotment_map[ancestor].add(library)
+  return allotment_map
+
+
 def main(args):
   parser = argparse.ArgumentParser()
   parser.add_argument(
@@ -32,37 +130,52 @@
       type=_ModuleLibrariesPair,
       required=True,
       help='A pair of module name and GN list of libraries a module depends '
-      'on. Can be specified multiple times. Must be set at least once for '
-      'base.')
+      'on. Can be specified multiple times.')
   parser.add_argument(
       '--output',
       required=True,
       help='A JSON file with a key for each module mapping to a list of '
       'libraries, which should be packaged into this module.')
+  parser.add_argument(
+      '--dep',
+      action='append',
+      type=_DepPair,
+      dest='deps',
+      default=[],
+      help='A pair of parent module name and child module name '
+      '(format: "<parent>:<child>"). Can be specified multiple times.')
   options = parser.parse_args(build_utils.ExpandFileArgs(args))
   options.libraries = [(m, build_utils.ParseGnList(l))
                        for m, l in options.libraries]
 
-  # Parse input to map and count how many modules depend on each library.
-  libraries_map = {}
-  libraries_counter = collections.Counter()  # Modules count for each library.
+  # Parse input creating libraries and dependency tree.
+  libraries_map = collections.defaultdict(set)  # Maps each library to its
+  #                                               dependee modules.
+  module_tree = {}  # Maps each module name to its parent.
   for module, libraries in options.libraries:
-    if module not in libraries_map:
-      libraries_map[module] = set()
-    libraries_map[module].update(libraries)
-    libraries_counter.update(libraries)
+    module_tree[module] = None
+    for library in libraries:
+      libraries_map[library].add(module)
+  for parent, child in options.deps:
+    if module_tree.get(child):
+      raise Exception('%s cannot have multiple parents' % child)
+    module_tree[child] = parent
+    module_tree[parent] = module_tree.get(parent)
 
-  assert 'base' in libraries_map
+  # Allot all libraries to a module such that libraries with multiple dependees
+  # are allotted to the closest ancestor.
+  allotment_map = _AllotLibraries(module_tree, libraries_map)
 
-  # Allot libraries depended on by multiple modules to base.
-  multidep_libraries = {l for l, c in libraries_counter.items() if c > 1}
-  libraries_map = {m: l - multidep_libraries for m, l in libraries_map.items()}
-  libraries_map['base'] |= multidep_libraries
+  # The build system expects there to be a set of libraries even for the modules
+  # that don't have any libraries allotted.
+  for module in module_tree:
+    # Creates missing sets because of defaultdict.
+    allotment_map[module] = allotment_map[module]
 
   with open(options.output, 'w') as f:
     # Write native libraries config and ensure the output is deterministic.
     json.dump({m: sorted(l)
-               for m, l in libraries_map.items()},
+               for m, l in allotment_map.items()},
               f,
               sort_keys=True,
               indent=2)
diff --git a/build/config/android/internal_rules.gni b/build/config/android/internal_rules.gni
index 350a92b8..a7a0bc2 100644
--- a/build/config/android/internal_rules.gni
+++ b/build/config/android/internal_rules.gni
@@ -3769,11 +3769,13 @@
 # Allots native libraries depended on by feature modules to the module the
 # libraries should be packaged into. The packaging module may be different from
 # the dependee module in case a library is depended on by multiple modules. In
-# that case the library will be allotted to base.
+# that case the library will be allotted to the closest ancestor given a module
+# dependency tree (see |parent| below).
 #
 # Variables:
 #   modules: List of scopes with the following format:
 #     name: The module's name.
+#     parent: The module's parent's name.
 #     build_config: Path to the module's build config.
 #     build_config_target: Target creating |build_config|.
 #   native_libraries_filearg_keys: Keys to be used in
@@ -3805,6 +3807,12 @@
           "${_module.name},@FileArg($_rebased_build_config:$_key)",
         ]
       }
+      if (defined(_module.parent)) {
+        args += [
+          "--dep",
+          "${_module.parent}:${_module.name}",
+        ]
+      }
     }
   }
 }
diff --git a/build/config/android/rules.gni b/build/config/android/rules.gni
index 230f95a..bd90cea 100644
--- a/build/config/android/rules.gni
+++ b/build/config/android/rules.gni
@@ -4349,7 +4349,15 @@
   #
   #    static_library_provider: Specifies a single target that this target will
   #      use as a static library APK. When proguard is enabled, the
-  #      static_library_provider target will perform the synchronized dex step.
+  #      static_library_provider target will perform the synchronized dex step
+  #      unless |static_library_proguard_disabled| is set.
+  #      Additionally, when allotting libraries to be packaged into modules, the
+  #      libraries packaged into the static library will be accounted for to
+  #      avoid library duplication. Effectively, the static library will be
+  #      treated as the parent of the base module.
+  #
+  #    static_library_proguard_disabled: If true will not use the
+  #      |static_library_provider| to perform synchronized proguarding.
   #
   #    verify_proguard_flags: Enables verification of expected merged proguard
   #      flags based on a golden file.
@@ -4370,6 +4378,16 @@
   #
   template("android_app_bundle") {
     _target_name = target_name
+    _uses_static_library = defined(invoker.static_library_provider)
+    _proguard_enabled =
+        defined(invoker.proguard_enabled) && invoker.proguard_enabled
+    if (_proguard_enabled) {
+      _static_library_proguard_disabled =
+          defined(invoker.static_library_proguard_disabled) &&
+          invoker.static_library_proguard_disabled
+    } else {
+      assert(!defined(invoker.static_library_proguard_disabled))
+    }
 
     _bundle_base_path = "$root_build_dir/apks"
     if (defined(invoker.bundle_base_path)) {
@@ -4399,11 +4417,12 @@
         module_target = invoker.base_module_target
         build_config = _base_module_build_config
         build_config_target = _base_module_build_config_target
+        if (_uses_static_library) {
+          parent = "lib"
+        }
       },
     ]
 
-    _proguard_enabled =
-        defined(invoker.proguard_enabled) && invoker.proguard_enabled
     _enable_multidex =
         !defined(invoker.enable_multidex) || invoker.enable_multidex
 
@@ -4415,8 +4434,7 @@
     not_needed([ "_enable_multidex" ])
 
     if (_proguard_enabled) {
-      _uses_static_library = defined(invoker.static_library_provider)
-      if (_uses_static_library) {
+      if (!_static_library_proguard_disabled && _uses_static_library) {
         _sync_dex_target_dep = "${invoker.static_library_provider}__dexsplitter"
       } else {
         _sync_dex_target = "${_target_name}__sync_dex"
@@ -4449,6 +4467,7 @@
             "$_module_target_gen_dir/${_module_target_name}.build_config"
         _module.build_config_target =
             "$_module_target$build_config_target_suffix"
+        _module.parent = "base"
         _modules += [ _module ]
       }
     }
@@ -4463,9 +4482,26 @@
       _module_build_configs += [ _module.build_config ]
     }
 
+    if (_uses_static_library) {
+      _lib_proxy_module = {
+        name = "lib"
+      }
+      _static_library_target_name =
+          get_label_info(invoker.static_library_provider, "name")
+      _static_library_gen_dir =
+          get_label_info(invoker.static_library_provider, "target_gen_dir")
+      _lib_proxy_module.build_config =
+          "$_static_library_gen_dir/$_static_library_target_name.build_config"
+      _lib_proxy_module.build_config_target =
+          "${invoker.static_library_provider}$build_config_target_suffix"
+    }
+
     # Allot native libraries to modules they should be packaged into. This is
     # necessary since all libraries that are depended on by multiple modules
-    # have to go into base.
+    # have to go into base or the static shared library if it exists.
+    # TODO(crbug.com/1021565): It would be nice if this lived outside the
+    # android_app_bundle template and the static shared library would pull in
+    # the libs as allotted by this step.
     _native_libraries_config =
         "$target_gen_dir/$_target_name.native_libraries_config"
     allot_native_libraries("${_target_name}__allot_native_libraries") {
@@ -4475,6 +4511,9 @@
         "native:extra_shared_libraries",
       ]
       output = _native_libraries_config
+      if (_uses_static_library) {
+        modules += [ _lib_proxy_module ]
+      }
     }
     if (defined(android_app_secondary_abi)) {
       _secondary_abi_native_libraries_config =
@@ -4484,6 +4523,9 @@
         modules = _modules
         native_libraries_filearg_keys = [ "native:secondary_abi_libraries" ]
         output = _secondary_abi_native_libraries_config
+        if (_uses_static_library) {
+          modules += [ _lib_proxy_module ]
+        }
       }
     }
 
@@ -4529,7 +4571,7 @@
     if (_proguard_enabled) {
       # If this Bundle uses a static library, the static library APK will
       # create the synchronized dex file path.
-      if (_uses_static_library) {
+      if (!_static_library_proguard_disabled && _uses_static_library) {
         if (defined(invoker.min_sdk_version)) {
           not_needed(invoker, [ "min_sdk_version" ])
         }
diff --git a/cc/metrics/begin_main_frame_metrics.cc b/cc/metrics/begin_main_frame_metrics.cc
index d4e83ead..04b6d8bb 100644
--- a/cc/metrics/begin_main_frame_metrics.cc
+++ b/cc/metrics/begin_main_frame_metrics.cc
@@ -8,4 +8,7 @@
 
 BeginMainFrameMetrics::BeginMainFrameMetrics() = default;
 
+BeginMainFrameMetrics::BeginMainFrameMetrics(
+    const BeginMainFrameMetrics& other) = default;
+
 }  // namespace cc
diff --git a/cc/metrics/begin_main_frame_metrics.h b/cc/metrics/begin_main_frame_metrics.h
index 2927360..bcd4071 100644
--- a/cc/metrics/begin_main_frame_metrics.h
+++ b/cc/metrics/begin_main_frame_metrics.h
@@ -28,6 +28,8 @@
   base::TimeDelta update_layers;
 
   BeginMainFrameMetrics();
+
+  BeginMainFrameMetrics(const BeginMainFrameMetrics& other);
 };
 
 }  // namespace cc
diff --git a/cc/metrics/compositor_frame_reporter.cc b/cc/metrics/compositor_frame_reporter.cc
index cb494e6..fde5b76 100644
--- a/cc/metrics/compositor_frame_reporter.cc
+++ b/cc/metrics/compositor_frame_reporter.cc
@@ -16,6 +16,7 @@
 namespace {
 
 using StageType = CompositorFrameReporter::StageType;
+using BlinkBreakdown = CompositorFrameReporter::BlinkBreakdown;
 using VizBreakdown = CompositorFrameReporter::VizBreakdown;
 
 constexpr int kMissedFrameReportTypeCount =
@@ -23,7 +24,13 @@
                          kMissedFrameReportTypeCount);
 constexpr int kStageTypeCount = static_cast<int>(StageType::kStageTypeCount);
 constexpr int kAllBreakdownCount =
-    static_cast<int>(VizBreakdown::kBreakdownCount);
+    static_cast<int>(VizBreakdown::kBreakdownCount) +
+    static_cast<int>(BlinkBreakdown::kBreakdownCount);
+
+constexpr int kVizBreakdownInitialIndex = kStageTypeCount;
+constexpr int kBlinkBreakdownInitialIndex =
+    kVizBreakdownInitialIndex + static_cast<int>(VizBreakdown::kBreakdownCount);
+
 // For each possible FrameSequenceTrackerType there will be a UMA histogram
 // plus one for general case.
 constexpr int kFrameSequenceTrackerTypeCount =
@@ -47,19 +54,46 @@
         "SubmitCompositorFrameToPresentationCompositorFrame",
     [static_cast<int>(StageType::kTotalLatency)] = "TotalLatency",
     [static_cast<int>(VizBreakdown::kSubmitToReceiveCompositorFrame) +
-        kStageTypeCount] =
+        kVizBreakdownInitialIndex] =
         "SubmitCompositorFrameToPresentationCompositorFrame."
         "SubmitToReceiveCompositorFrame",
     [static_cast<int>(VizBreakdown::kReceivedCompositorFrameToStartDraw) +
-        kStageTypeCount] =
+        kVizBreakdownInitialIndex] =
         "SubmitCompositorFrameToPresentationCompositorFrame."
         "ReceivedCompositorFrameToStartDraw",
-    [static_cast<int>(VizBreakdown::kStartDrawToSwapEnd) + kStageTypeCount] =
+    [static_cast<int>(VizBreakdown::kStartDrawToSwapEnd) +
+        kVizBreakdownInitialIndex] =
         "SubmitCompositorFrameToPresentationCompositorFrame.StartDrawToSwapEnd",
     [static_cast<int>(VizBreakdown::kSwapEndToPresentationCompositorFrame) +
-        kStageTypeCount] =
+        kVizBreakdownInitialIndex] =
         "SubmitCompositorFrameToPresentationCompositorFrame."
-        "SwapEndToPresentationCompositorFrame"};
+        "SwapEndToPresentationCompositorFrame",
+    [static_cast<int>(BlinkBreakdown::kHandleInputEvents) +
+        kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.HandleInputEvents",
+    [static_cast<int>(BlinkBreakdown::kAnimate) + kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.Animate",
+    [static_cast<int>(BlinkBreakdown::kStyleUpdate) +
+        kBlinkBreakdownInitialIndex] = "SendBeginMainFrameToCommit.StyleUpdate",
+    [static_cast<int>(BlinkBreakdown::kLayoutUpdate) +
+        kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.LayoutUpdate",
+    [static_cast<int>(BlinkBreakdown::kPrepaint) +
+        kBlinkBreakdownInitialIndex] = "SendBeginMainFrameToCommit.Prepaint",
+    [static_cast<int>(BlinkBreakdown::kComposite) +
+        kBlinkBreakdownInitialIndex] = "SendBeginMainFrameToCommit.Composite",
+    [static_cast<int>(BlinkBreakdown::kPaint) + kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.Paint",
+    [static_cast<int>(BlinkBreakdown::kScrollingCoordinator) +
+        kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.ScrollingCoordinator",
+    [static_cast<int>(BlinkBreakdown::kCompositeCommit) +
+        kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.CompositeCommit",
+    [static_cast<int>(BlinkBreakdown::kUpdateLayers) +
+        kBlinkBreakdownInitialIndex] =
+        "SendBeginMainFrameToCommit.UpdateLayers"};
+
 static_assert(sizeof(kStageNames) / sizeof(kStageNames[0]) ==
                   kStageTypeCount + kAllBreakdownCount,
               "Compositor latency stages has changed.");
@@ -164,6 +198,14 @@
   did_abort_main_frame_ = false;
 }
 
+void CompositorFrameReporter::SetBlinkBreakdown(
+    std::unique_ptr<BeginMainFrameMetrics> blink_breakdown) {
+  if (blink_breakdown)
+    current_stage_.blink_breakdown = *blink_breakdown;
+  else
+    current_stage_.blink_breakdown = BeginMainFrameMetrics();
+}
+
 void CompositorFrameReporter::SetVizBreakdown(
     const viz::FrameTimingDetails& viz_breakdown) {
   DCHECK(current_stage_.viz_breakdown.received_compositor_frame_timestamp
@@ -240,11 +282,15 @@
 void CompositorFrameReporter::ReportStageHistogramWithBreakdown(
     CompositorFrameReporter::MissedFrameReportTypes report_type,
     FrameSequenceTrackerType frame_sequence_tracker_type,
-    CompositorFrameReporter::StageData stage) const {
+    const CompositorFrameReporter::StageData& stage) const {
   base::TimeDelta stage_delta = stage.end_time - stage.start_time;
   ReportHistogram(report_type, frame_sequence_tracker_type,
                   static_cast<int>(stage.stage_type), stage_delta);
   switch (stage.stage_type) {
+    case StageType::kSendBeginMainFrameToCommit: {
+      ReportBlinkBreakdown(report_type, frame_sequence_tracker_type, stage);
+      break;
+    }
     case StageType::kSubmitCompositorFrameToPresentationCompositorFrame: {
       ReportVizBreakdown(report_type, frame_sequence_tracker_type, stage);
       break;
@@ -254,28 +300,79 @@
   }
 }
 
+void CompositorFrameReporter::ReportBlinkBreakdown(
+    CompositorFrameReporter::MissedFrameReportTypes report_type,
+    FrameSequenceTrackerType frame_sequence_tracker_type,
+    const CompositorFrameReporter::StageData& stage) const {
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kHandleInputEvents),
+                  stage.blink_breakdown.handle_input_events);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kBlinkBreakdownInitialIndex + static_cast<int>(BlinkBreakdown::kAnimate),
+      stage.blink_breakdown.animate);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kStyleUpdate),
+                  stage.blink_breakdown.style_update);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kLayoutUpdate),
+                  stage.blink_breakdown.layout_update);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kBlinkBreakdownInitialIndex + static_cast<int>(BlinkBreakdown::kPrepaint),
+      stage.blink_breakdown.prepaint);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kComposite),
+                  stage.blink_breakdown.composite);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kBlinkBreakdownInitialIndex + static_cast<int>(BlinkBreakdown::kPaint),
+      stage.blink_breakdown.paint);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kScrollingCoordinator),
+                  stage.blink_breakdown.scrolling_coordinator);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kCompositeCommit),
+                  stage.blink_breakdown.composite_commit);
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kBlinkBreakdownInitialIndex +
+                      static_cast<int>(BlinkBreakdown::kUpdateLayers),
+                  stage.blink_breakdown.update_layers);
+}
+
 void CompositorFrameReporter::ReportVizBreakdown(
     CompositorFrameReporter::MissedFrameReportTypes report_type,
     FrameSequenceTrackerType frame_sequence_tracker_type,
-    CompositorFrameReporter::StageData stage) const {
+    const CompositorFrameReporter::StageData& stage) const {
   // Check if viz_breakdown is set.
   if (stage.viz_breakdown.received_compositor_frame_timestamp.is_null())
     return;
 
-  int index_origin = static_cast<int>(StageType::kStageTypeCount);
   base::TimeDelta submit_to_receive_compositor_frame_delta =
       stage.viz_breakdown.received_compositor_frame_timestamp -
       stage.start_time;
-  ReportHistogram(report_type, frame_sequence_tracker_type, index_origin,
-                  submit_to_receive_compositor_frame_delta);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kVizBreakdownInitialIndex +
+          static_cast<int>(VizBreakdown::kSubmitToReceiveCompositorFrame),
+      submit_to_receive_compositor_frame_delta);
 
   if (stage.viz_breakdown.draw_start_timestamp.is_null())
     return;
   base::TimeDelta received_compositor_frame_to_start_draw_delta =
       stage.viz_breakdown.draw_start_timestamp -
       stage.viz_breakdown.received_compositor_frame_timestamp;
-  ReportHistogram(report_type, frame_sequence_tracker_type, index_origin + 1,
-                  received_compositor_frame_to_start_draw_delta);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kVizBreakdownInitialIndex +
+          static_cast<int>(VizBreakdown::kReceivedCompositorFrameToStartDraw),
+      received_compositor_frame_to_start_draw_delta);
 
   if (stage.viz_breakdown.swap_timings.is_null())
     return;
@@ -283,14 +380,19 @@
       stage.viz_breakdown.swap_timings.swap_end -
       stage.viz_breakdown.draw_start_timestamp;
 
-  ReportHistogram(report_type, frame_sequence_tracker_type, index_origin + 2,
+  ReportHistogram(report_type, frame_sequence_tracker_type,
+                  kVizBreakdownInitialIndex +
+                      static_cast<int>(VizBreakdown::kStartDrawToSwapEnd),
                   start_draw_to_swap_end_delta);
 
   base::TimeDelta swap_end_to_presentation_compositor_frame_delta =
       stage.end_time - stage.viz_breakdown.swap_timings.swap_end;
 
-  ReportHistogram(report_type, frame_sequence_tracker_type, index_origin + 3,
-                  swap_end_to_presentation_compositor_frame_delta);
+  ReportHistogram(
+      report_type, frame_sequence_tracker_type,
+      kVizBreakdownInitialIndex +
+          static_cast<int>(VizBreakdown::kSwapEndToPresentationCompositorFrame),
+      swap_end_to_presentation_compositor_frame_delta);
 }
 
 void CompositorFrameReporter::ReportHistogram(
diff --git a/cc/metrics/compositor_frame_reporter.h b/cc/metrics/compositor_frame_reporter.h
index 79cbd089..6c377ec 100644
--- a/cc/metrics/compositor_frame_reporter.h
+++ b/cc/metrics/compositor_frame_reporter.h
@@ -11,6 +11,7 @@
 #include "base/time/time.h"
 #include "cc/base/base_export.h"
 #include "cc/cc_export.h"
+#include "cc/metrics/begin_main_frame_metrics.h"
 #include "cc/metrics/frame_sequence_tracker.h"
 #include "components/viz/common/frame_timing_details.h"
 
@@ -91,6 +92,20 @@
     kBreakdownCount
   };
 
+  enum class BlinkBreakdown {
+    kHandleInputEvents = 0,
+    kAnimate = 1,
+    kStyleUpdate = 2,
+    kLayoutUpdate = 3,
+    kPrepaint = 4,
+    kComposite = 5,
+    kPaint = 6,
+    kScrollingCoordinator = 7,
+    kCompositeCommit = 8,
+    kUpdateLayers = 9,
+    kBreakdownCount
+  };
+
   CompositorFrameReporter(
       const base::flat_set<FrameSequenceTrackerType>* active_trackers,
       bool is_single_threaded = false);
@@ -107,6 +122,8 @@
   void StartStage(StageType stage_type, base::TimeTicks start_time);
   void TerminateFrame(FrameTerminationStatus termination_status,
                       base::TimeTicks termination_time);
+  void SetBlinkBreakdown(
+      std::unique_ptr<BeginMainFrameMetrics> blink_breakdown);
   void SetVizBreakdown(const viz::FrameTimingDetails& viz_breakdown);
 
   int StageHistorySizeForTesting() { return stage_history_.size(); }
@@ -124,6 +141,7 @@
     StageType stage_type;
     base::TimeTicks start_time;
     base::TimeTicks end_time;
+    BeginMainFrameMetrics blink_breakdown;
     viz::FrameTimingDetails viz_breakdown;
     StageData();
     StageData(StageType stage_type,
@@ -147,11 +165,15 @@
   void ReportStageHistogramWithBreakdown(
       CompositorFrameReporter::MissedFrameReportTypes report_type,
       FrameSequenceTrackerType frame_sequence_tracker_type,
-      CompositorFrameReporter::StageData stage) const;
+      const CompositorFrameReporter::StageData& stage) const;
+  void ReportBlinkBreakdown(
+      CompositorFrameReporter::MissedFrameReportTypes report_type,
+      FrameSequenceTrackerType frame_sequence_tracker_type,
+      const CompositorFrameReporter::StageData& stage) const;
   void ReportVizBreakdown(
       CompositorFrameReporter::MissedFrameReportTypes report_type,
       FrameSequenceTrackerType frame_sequence_tracker_type,
-      CompositorFrameReporter::StageData stage) const;
+      const CompositorFrameReporter::StageData& stage) const;
   void ReportHistogram(
       CompositorFrameReporter::MissedFrameReportTypes report_type,
       FrameSequenceTrackerType intraction_type,
diff --git a/cc/metrics/compositor_frame_reporting_controller.cc b/cc/metrics/compositor_frame_reporting_controller.cc
index 760207b..284cb3d 100644
--- a/cc/metrics/compositor_frame_reporting_controller.cc
+++ b/cc/metrics/compositor_frame_reporting_controller.cc
@@ -207,6 +207,13 @@
   }
 }
 
+void CompositorFrameReportingController::SetBlinkBreakdown(
+    std::unique_ptr<BeginMainFrameMetrics> details) {
+  DCHECK(reporters_[PipelineStage::kBeginMainFrame]);
+  reporters_[PipelineStage::kBeginMainFrame]->SetBlinkBreakdown(
+      std::move(details));
+}
+
 void CompositorFrameReportingController::AddActiveTracker(
     FrameSequenceTrackerType type) {
   active_trackers_.insert(type);
diff --git a/cc/metrics/compositor_frame_reporting_controller.h b/cc/metrics/compositor_frame_reporting_controller.h
index 80254c1d..eda4886 100644
--- a/cc/metrics/compositor_frame_reporting_controller.h
+++ b/cc/metrics/compositor_frame_reporting_controller.h
@@ -20,6 +20,7 @@
 }
 
 namespace cc {
+struct BeginMainFrameMetrics;
 class RollingTimeDeltaHistory;
 
 // This is used for managing simultaneous CompositorFrameReporter instances
@@ -62,6 +63,8 @@
       uint32_t frame_token,
       const viz::FrameTimingDetails& details);
 
+  void SetBlinkBreakdown(std::unique_ptr<BeginMainFrameMetrics> details);
+
   virtual void AddActiveTracker(FrameSequenceTrackerType type);
   virtual void RemoveActiveTracker(FrameSequenceTrackerType type);
 
diff --git a/cc/metrics/compositor_frame_reporting_controller_unittest.cc b/cc/metrics/compositor_frame_reporting_controller_unittest.cc
index 6fd89c4..ceb17c8 100644
--- a/cc/metrics/compositor_frame_reporting_controller_unittest.cc
+++ b/cc/metrics/compositor_frame_reporting_controller_unittest.cc
@@ -61,13 +61,14 @@
     reporting_controller_.WillBeginMainFrame();
   }
 
-  void SimulateCommit() {
+  void SimulateCommit(std::unique_ptr<BeginMainFrameMetrics> blink_breakdown) {
     if (!reporting_controller_.reporters()[CompositorFrameReportingController::
                                                PipelineStage::kBeginMainFrame])
       SimulateBeginMainFrame();
     CHECK(
         reporting_controller_.reporters()[CompositorFrameReportingController::
                                               PipelineStage::kBeginMainFrame]);
+    reporting_controller_.SetBlinkBreakdown(std::move(blink_breakdown));
     reporting_controller_.WillCommit();
     reporting_controller_.DidCommit();
   }
@@ -75,7 +76,7 @@
   void SimulateActivate() {
     if (!reporting_controller_.reporters()
              [CompositorFrameReportingController::PipelineStage::kCommit])
-      SimulateCommit();
+      SimulateCommit(nullptr);
     CHECK(reporting_controller_.reporters()
               [CompositorFrameReportingController::PipelineStage::kCommit]);
     reporting_controller_.WillActivate();
@@ -155,7 +156,7 @@
   // 4 simultaneous reporters active.
   SimulateActivate();
 
-  SimulateCommit();
+  SimulateCommit(nullptr);
 
   SimulateBeginMainFrame();
 
@@ -173,7 +174,7 @@
 
   // 2 reporters active.
   SimulateActivate();
-  SimulateCommit();
+  SimulateCommit(nullptr);
 
   // Submitting and Presenting the next reporter which will be a normal frame.
   SimulatePresentCompositorFrame();
@@ -202,7 +203,7 @@
 
   // Submitting the next reporter will be replaced as a result of a new commit.
   // And this will be reported for all stage before activate as a missed frame.
-  SimulateCommit();
+  SimulateCommit(nullptr);
   // Non Missed frame histogram counts should not change.
   histogram_tester.ExpectTotalCount(
       "CompositorLatency.BeginImplFrameToSendBeginMainFrame", 1);
@@ -228,5 +229,60 @@
   histogram_tester.ExpectTotalCount(
       "CompositorLatency.MissedFrame.EndActivateToSubmitCompositorFrame", 0);
 }
+
+TEST_F(CompositorFrameReportingControllerTest, BlinkBreakdown) {
+  base::HistogramTester histogram_tester;
+
+  std::unique_ptr<BeginMainFrameMetrics> blink_breakdown =
+      std::make_unique<BeginMainFrameMetrics>();
+  blink_breakdown->handle_input_events = base::TimeDelta::FromMicroseconds(10);
+  blink_breakdown->animate = base::TimeDelta::FromMicroseconds(9);
+  blink_breakdown->style_update = base::TimeDelta::FromMicroseconds(8);
+  blink_breakdown->layout_update = base::TimeDelta::FromMicroseconds(7);
+  blink_breakdown->prepaint = base::TimeDelta::FromMicroseconds(6);
+  blink_breakdown->composite = base::TimeDelta::FromMicroseconds(5);
+  blink_breakdown->paint = base::TimeDelta::FromMicroseconds(4);
+  blink_breakdown->scrolling_coordinator = base::TimeDelta::FromMicroseconds(3);
+  blink_breakdown->composite_commit = base::TimeDelta::FromMicroseconds(2);
+  blink_breakdown->update_layers = base::TimeDelta::FromMicroseconds(1);
+
+  SimulateActivate();
+  SimulateCommit(std::move(blink_breakdown));
+  SimulatePresentCompositorFrame();
+
+  histogram_tester.ExpectTotalCount(
+      "CompositorLatency.SendBeginMainFrameToCommit", 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.HandleInputEvents",
+      base::TimeDelta::FromMicroseconds(10).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.Animate",
+      base::TimeDelta::FromMicroseconds(9).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.StyleUpdate",
+      base::TimeDelta::FromMicroseconds(8).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.LayoutUpdate",
+      base::TimeDelta::FromMicroseconds(7).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.Prepaint",
+      base::TimeDelta::FromMicroseconds(6).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.Composite",
+      base::TimeDelta::FromMicroseconds(5).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.Paint",
+      base::TimeDelta::FromMicroseconds(4).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.ScrollingCoordinator",
+      base::TimeDelta::FromMicroseconds(3).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.CompositeCommit",
+      base::TimeDelta::FromMicroseconds(2).InMilliseconds(), 1);
+  histogram_tester.ExpectUniqueSample(
+      "CompositorLatency.SendBeginMainFrameToCommit.UpdateLayers",
+      base::TimeDelta::FromMicroseconds(1).InMilliseconds(), 1);
+}
+
 }  // namespace
 }  // namespace cc
diff --git a/cc/metrics/compositor_timing_history.cc b/cc/metrics/compositor_timing_history.cc
index d244237b..2cb1510 100644
--- a/cc/metrics/compositor_timing_history.cc
+++ b/cc/metrics/compositor_timing_history.cc
@@ -776,8 +776,10 @@
   begin_main_frame_frame_time_ = base::TimeTicks();
 }
 
-void CompositorTimingHistory::NotifyReadyToCommit() {
+void CompositorTimingHistory::NotifyReadyToCommit(
+    std::unique_ptr<BeginMainFrameMetrics> details) {
   DCHECK_NE(begin_main_frame_start_time_, base::TimeTicks());
+  compositor_frame_reporting_controller_->SetBlinkBreakdown(std::move(details));
   begin_main_frame_start_to_ready_to_commit_duration_history_.InsertSample(
       Now() - begin_main_frame_start_time_);
 }
diff --git a/cc/metrics/compositor_timing_history.h b/cc/metrics/compositor_timing_history.h
index c39f69a..3bad6ad 100644
--- a/cc/metrics/compositor_timing_history.h
+++ b/cc/metrics/compositor_timing_history.h
@@ -23,7 +23,7 @@
 }
 
 namespace cc {
-
+struct BeginMainFrameMetrics;
 class CompositorFrameReportingController;
 class RenderingStatsInstrumentation;
 
@@ -76,7 +76,7 @@
                           base::TimeTicks main_frame_time);
   void BeginMainFrameStarted(base::TimeTicks main_thread_start_time);
   void BeginMainFrameAborted();
-  void NotifyReadyToCommit();
+  void NotifyReadyToCommit(std::unique_ptr<BeginMainFrameMetrics> details);
   void WillCommit();
   void DidCommit();
   void WillPrepareTiles();
diff --git a/cc/metrics/compositor_timing_history_unittest.cc b/cc/metrics/compositor_timing_history_unittest.cc
index 81f72e6..695217c6 100644
--- a/cc/metrics/compositor_timing_history_unittest.cc
+++ b/cc/metrics/compositor_timing_history_unittest.cc
@@ -122,7 +122,7 @@
   AdvanceNowBy(begin_main_frame_queue_duration);
   timing_history_.BeginMainFrameStarted(Now());
   AdvanceNowBy(begin_main_frame_start_to_ready_to_commit_duration);
-  timing_history_.NotifyReadyToCommit();
+  timing_history_.NotifyReadyToCommit(nullptr);
   timing_history_.WillCommit();
   AdvanceNowBy(commit_duration);
   timing_history_.DidCommit();
diff --git a/cc/scheduler/scheduler.cc b/cc/scheduler/scheduler.cc
index 523b09c..76b25799 100644
--- a/cc/scheduler/scheduler.cc
+++ b/cc/scheduler/scheduler.cc
@@ -13,6 +13,7 @@
 #include "base/trace_event/trace_event.h"
 #include "base/trace_event/traced_value.h"
 #include "cc/base/devtools_instrumentation.h"
+#include "cc/metrics/begin_main_frame_metrics.h"
 #include "cc/metrics/compositor_timing_history.h"
 #include "components/viz/common/frame_sinks/delay_based_time_source.h"
 
@@ -168,9 +169,10 @@
   ProcessScheduledActions();
 }
 
-void Scheduler::NotifyReadyToCommit() {
+void Scheduler::NotifyReadyToCommit(
+    std::unique_ptr<BeginMainFrameMetrics> details) {
   TRACE_EVENT0("cc", "Scheduler::NotifyReadyToCommit");
-  compositor_timing_history_->NotifyReadyToCommit();
+  compositor_timing_history_->NotifyReadyToCommit(std::move(details));
   state_machine_.NotifyReadyToCommit();
   ProcessScheduledActions();
 }
diff --git a/cc/scheduler/scheduler.h b/cc/scheduler/scheduler.h
index 23571c15..de4bd7a 100644
--- a/cc/scheduler/scheduler.h
+++ b/cc/scheduler/scheduler.h
@@ -32,7 +32,7 @@
 }
 
 namespace cc {
-
+struct BeginMainFrameMetrics;
 class CompositorTimingHistory;
 
 class SchedulerClient {
@@ -170,7 +170,7 @@
   // BeginMainFrame request from the compositor, and blocks the main thread
   // to copy the layer tree to the compositor thread. Call this method when the
   // main thread updates are completed to signal it is ready for the commmit.
-  void NotifyReadyToCommit();
+  void NotifyReadyToCommit(std::unique_ptr<BeginMainFrameMetrics> details);
   void BeginMainFrameAborted(CommitEarlyOutReason reason);
   void DidCommit();
 
diff --git a/cc/scheduler/scheduler_unittest.cc b/cc/scheduler/scheduler_unittest.cc
index 5437a54..6c26c43 100644
--- a/cc/scheduler/scheduler_unittest.cc
+++ b/cc/scheduler/scheduler_unittest.cc
@@ -18,6 +18,7 @@
 #include "base/test/test_mock_time_task_runner.h"
 #include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
+#include "cc/metrics/begin_main_frame_metrics.h"
 #include "cc/test/scheduler_test_common.h"
 #include "components/viz/common/frame_sinks/begin_frame_args.h"
 #include "components/viz/test/begin_frame_args_test.h"
@@ -455,7 +456,7 @@
 
       task_runner_->AdvanceMockTickClock(base::TimeDelta::FromMilliseconds(1));
       scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-      scheduler_->NotifyReadyToCommit();
+      scheduler_->NotifyReadyToCommit(nullptr);
       scheduler_->NotifyReadyToActivate();
       scheduler_->NotifyReadyToDraw();
 
@@ -663,7 +664,7 @@
 
   // NotifyReadyToCommit should trigger the commit.
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(scheduler_->begin_frames_expected());
   client_->Reset();
@@ -778,7 +779,7 @@
 
   // Finish the first commit.
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(client_->IsInsideBeginImplFrame());
   client_->Reset();
@@ -807,7 +808,7 @@
   // Finishing the commit before the deadline should post a new deadline task
   // to trigger the deadline early.
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(client_->IsInsideBeginImplFrame());
   client_->Reset();
@@ -985,7 +986,7 @@
   EXPECT_TRUE(scheduler_->CommitPending());
   EXPECT_TRUE(client->needs_begin_frames());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
 
   EXPECT_SCOPED(AdvanceFrame());
@@ -1380,7 +1381,7 @@
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame");
 
   client_->Reset();
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   client_->Reset();
@@ -1418,7 +1419,7 @@
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame");
 
   client_->Reset();
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   client_->Reset();
@@ -1450,7 +1451,7 @@
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_ACTIONS("AddObserver(this)", "WillBeginImplFrame",
                  "ScheduledActionSendBeginMainFrame", "ScheduledActionCommit",
@@ -1714,7 +1715,7 @@
 
   // Make us abort the upcoming draw.
   client_->Reset();
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_ACTIONS("ScheduledActionCommit", "ScheduledActionActivateSyncTree");
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
@@ -1759,7 +1760,7 @@
 
   // Commit after the deadline.
   client_->Reset();
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_ACTIONS("ScheduledActionCommit", "ScheduledActionActivateSyncTree");
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
@@ -1789,7 +1790,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
@@ -1834,7 +1835,7 @@
 
     client_->Reset();
     scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-    scheduler_->NotifyReadyToCommit();
+    scheduler_->NotifyReadyToCommit(nullptr);
     scheduler_->NotifyReadyToActivate();
     task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
     EXPECT_ACTIONS("ScheduledActionCommit", "ScheduledActionActivateSyncTree",
@@ -1963,7 +1964,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
@@ -1987,7 +1988,7 @@
     client_->Reset();
     scheduler_->DidReceiveCompositorFrameAck();
     scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-    scheduler_->NotifyReadyToCommit();
+    scheduler_->NotifyReadyToCommit(nullptr);
     scheduler_->NotifyReadyToActivate();
     task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
 
@@ -2061,7 +2062,7 @@
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
 
@@ -2077,7 +2078,7 @@
   EXPECT_TRUE(scheduler_->MainThreadMissedLastDeadline());
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
 
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame",
@@ -2142,7 +2143,7 @@
   SendNextBeginFrame();
   EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
   EXPECT_FALSE(scheduler_->MainThreadMissedLastDeadline());
@@ -2177,7 +2178,7 @@
 
   // NotifyReadyToCommit should trigger the commit.
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   client_->Reset();
 
@@ -2231,7 +2232,7 @@
 
   // NotifyReadyToCommit should trigger the pending commit.
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   client_->Reset();
 
@@ -2337,7 +2338,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit", "ScheduledActionActivateSyncTree");
 
   client_->Reset();
@@ -2383,7 +2384,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit", "ScheduledActionActivateSyncTree",
                  "ScheduledActionBeginLayerTreeFrameSinkCreation");
 }
@@ -2402,7 +2403,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   client_->Reset();
@@ -2458,7 +2459,7 @@
   // NotifyReadyToCommit should trigger the commit.
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(scheduler_->begin_frames_expected());
 
@@ -2494,7 +2495,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   client_->Reset();
@@ -2526,7 +2527,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(client_->IsInsideBeginImplFrame());
 
@@ -2552,7 +2553,7 @@
 
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_TRUE(client_->IsInsideBeginImplFrame());
 
@@ -2739,7 +2740,7 @@
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame");
 
   client_->Reset();
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   client_->Reset();
@@ -2830,7 +2831,7 @@
   // Trigger a frame draw.
   EXPECT_SCOPED(AdvanceFrame());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunPendingTasks();
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame",
@@ -2866,7 +2867,7 @@
   // Trigger a frame draw.
   EXPECT_SCOPED(AdvanceFrame());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunPendingTasks();
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame",
@@ -2904,7 +2905,7 @@
   // Trigger a frame draw.
   EXPECT_SCOPED(AdvanceFrame());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunPendingTasks();
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame",
@@ -2945,7 +2946,7 @@
   // Trigger a frame draw.
   EXPECT_SCOPED(AdvanceFrame());
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunPendingTasks();
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionSendBeginMainFrame",
@@ -3303,7 +3304,7 @@
             client_->last_begin_frame_ack());
   client_->Reset();
 
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   client_->Reset();
 
@@ -3457,7 +3458,7 @@
   client_->Reset();
 
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   client_->Reset();
 
@@ -3515,7 +3516,7 @@
   EXPECT_EQ(initial_interval, scheduler_->BeginImplFrameInterval());
 
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   scheduler_->NotifyReadyToActivate();
   task_runner_->RunTasksWhile(client_->InsideBeginImplFrame(true));
 
@@ -3626,7 +3627,7 @@
   // commit.
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
   EXPECT_FALSE(scheduler_->needs_impl_side_invalidation());
 }
@@ -4166,7 +4167,7 @@
   // Commit before deadline but not ready to activate.
   client_->Reset();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("ScheduledActionCommit");
 
   // Draw deadline.
@@ -4215,7 +4216,7 @@
   EXPECT_SCOPED(AdvanceFrame());
   scheduler_->SetNeedsBeginMainFrame();
   scheduler_->NotifyBeginMainFrameStarted(task_runner_->NowTicks());
-  scheduler_->NotifyReadyToCommit();
+  scheduler_->NotifyReadyToCommit(nullptr);
   EXPECT_ACTIONS("WillBeginImplFrame", "ScheduledActionCommit");
 
   // But during the commit, the history is cleared. So the main frame should not
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index d4e9352..9beedd4c 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -670,6 +670,10 @@
   // NodeId in |content| and return true, otherwise return false.
   bool CaptureContent(std::vector<NodeId>* content);
 
+  std::unique_ptr<BeginMainFrameMetrics> begin_main_frame_metrics() {
+    return std::move(begin_main_frame_metrics_);
+  }
+
  protected:
   LayerTreeHost(InitParams params, CompositorMode mode);
 
diff --git a/cc/trees/proxy_impl.cc b/cc/trees/proxy_impl.cc
index a43c4b40..e35b3cb4 100644
--- a/cc/trees/proxy_impl.cc
+++ b/cc/trees/proxy_impl.cc
@@ -278,7 +278,13 @@
 
   DCHECK(!blocked_main_commit().layer_tree_host);
   blocked_main_commit().layer_tree_host = layer_tree_host;
-  scheduler_->NotifyReadyToCommit();
+
+  // Extract metrics data from the layer tree host and send them to the
+  // scheduler to pass them to the compositor_timing_history object.
+  std::unique_ptr<BeginMainFrameMetrics> main_frame_metrics =
+      layer_tree_host->begin_main_frame_metrics();
+
+  scheduler_->NotifyReadyToCommit(std::move(main_frame_metrics));
 }
 
 void ProxyImpl::DidLoseLayerTreeFrameSinkOnImplThread() {
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 64cf02b..2a235b6 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -195,8 +195,9 @@
 
     layer_tree_host_->FinishCommitOnImplThread(host_impl_.get());
 
-    if (scheduler_on_impl_thread_)
+    if (scheduler_on_impl_thread_) {
       scheduler_on_impl_thread_->DidCommit();
+    }
 
     IssueImageDecodeFinishedCallbacks();
     host_impl_->CommitComplete();
@@ -872,8 +873,10 @@
   // TODO(enne): SingleThreadProxy does not support cancelling commits yet,
   // search for CommitEarlyOutReason::FINISHED_NO_UPDATES inside
   // thread_proxy.cc
-  if (scheduler_on_impl_thread_)
-    scheduler_on_impl_thread_->NotifyReadyToCommit();
+  if (scheduler_on_impl_thread_) {
+    scheduler_on_impl_thread_->NotifyReadyToCommit(
+        layer_tree_host_->begin_main_frame_metrics());
+  }
 }
 
 void SingleThreadProxy::BeginMainFrameAbortedOnImplThread(
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn
index e1b5bda7..6176297 100644
--- a/chrome/android/BUILD.gn
+++ b/chrome/android/BUILD.gn
@@ -449,6 +449,7 @@
     "//components/offline_pages/core:offline_page_model_enums_java",
     "//components/password_manager/core/browser:password_manager_java_enums_srcjar",
     "//components/payments/content/android:error_strings_generated_srcjar",
+    "//components/payments/content/android:method_strings_generated_srcjar",
     "//components/search_engines:search_engine_type_java",
     "//components/security_state/core:security_state_enums_java",
     "//components/signin/core/browser:signin_enums_javagen",
@@ -2433,6 +2434,11 @@
   }
 
   chrome_bundle(target_name) {
+    forward_variables_from(invoker,
+                           [
+                             "static_library_proguard_disabled",
+                             "static_library_provider",
+                           ])
     base_module_target = ":$_base_module_target_name"
     bundle_name = _bundle_name
     include_32_bit_webview = defined(invoker.include_32_bit_webview) &&
@@ -2496,6 +2502,10 @@
   monochrome_or_trichrome_public_bundle_tmpl("trichrome_chrome_bundle") {
     bundle_suffix = ""
     use_trichrome_library = true
+    static_library_provider = ":trichrome_library_for_bundle_apk"
+    if (!is_java_debug) {
+      static_library_proguard_disabled = !trichrome_synchronized_proguard
+    }
   }
 
   if (android_64bit_target_cpu) {
diff --git a/chrome/android/chrome_bundle_tmpl.gni b/chrome/android/chrome_bundle_tmpl.gni
index 2ef8c16..387792b 100644
--- a/chrome/android/chrome_bundle_tmpl.gni
+++ b/chrome/android/chrome_bundle_tmpl.gni
@@ -80,6 +80,7 @@
                              "proguard_android_sdk_dep",
                              "proguard_jar_path",
                              "sign_bundle",
+                             "static_library_proguard_disabled",
                              "static_library_provider",
                              "verify_proguard_flags",
                            ])
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
index 3244c4b2..c8b31a7 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataBinder.java
@@ -20,6 +20,7 @@
 import org.chromium.chrome.browser.payments.ContactEditor;
 import org.chromium.chrome.browser.payments.PaymentInstrument;
 import org.chromium.chrome.browser.widget.prefeditor.EditorDialog;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.content_public.browser.UiThreadTaskTraits;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.payments.mojom.PaymentMethodData;
@@ -649,7 +650,7 @@
     private void updateAvailablePaymentMethods(AssistantCollectUserDataModel model) {
         // Only enable 'basic-card' payment method.
         PaymentMethodData methodData = new PaymentMethodData();
-        methodData.supportedMethod = BasicCardUtils.BASIC_CARD_METHOD_NAME;
+        methodData.supportedMethod = MethodStrings.BASIC_CARD;
 
         // Apply basic-card filter if specified
         List<String> supportedBasicCardNetworks =
@@ -669,7 +670,7 @@
         }
 
         Map<String, PaymentMethodData> supportedPaymentMethods = new HashMap<>();
-        supportedPaymentMethods.put(BasicCardUtils.BASIC_CARD_METHOD_NAME, methodData);
+        supportedPaymentMethods.put(MethodStrings.BASIC_CARD, methodData);
         model.set(AssistantCollectUserDataModel.SUPPORTED_PAYMENT_METHODS, supportedPaymentMethods);
     }
 
diff --git a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
index 346add8..3c47bec 100644
--- a/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
+++ b/chrome/android/features/autofill_assistant/java/src/org/chromium/chrome/browser/autofill_assistant/user_data/AssistantCollectUserDataModel.java
@@ -91,7 +91,7 @@
     public static final WritableObjectPropertyKey<List<String>> SUPPORTED_BASIC_CARD_NETWORKS =
             new WritableObjectPropertyKey<>();
 
-    /** The available payment methods, e.g., |BASIC_CARD_METHOD_NAME|. */
+    /** The available payment methods, e.g., |BASIC_CARD|. */
     public static final WritableObjectPropertyKey<Map<String, PaymentMethodData>>
             SUPPORTED_PAYMENT_METHODS = new WritableObjectPropertyKey<>();
 
diff --git a/chrome/android/features/tab_ui/BUILD.gn b/chrome/android/features/tab_ui/BUILD.gn
index 617590d..87f8dbe 100644
--- a/chrome/android/features/tab_ui/BUILD.gn
+++ b/chrome/android/features/tab_ui/BUILD.gn
@@ -105,9 +105,12 @@
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridPanelProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridPanelToolbarCoordinator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridPanelViewBinder.java",
-    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewProperties.java",
-    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardView.java",
-    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinder.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderCoordinator.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediator.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewProperties.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinder.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/MessageService.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetCoordinator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetMediator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridSheetContent.java",
@@ -136,6 +139,7 @@
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarCoordinator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripToolbarViewProperties.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabStripViewBinder.java",
+    "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageCardViewModel.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherMediator.java",
     "java/src/org/chromium/chrome/browser/tasks/tab_management/TabUiColorProvider.java",
diff --git a/chrome/android/features/tab_ui/java/res/layout/tab_suggestion_card_item.xml b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml
similarity index 90%
rename from chrome/android/features/tab_ui/java/res/layout/tab_suggestion_card_item.xml
rename to chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml
index 7d46453..1710b625 100644
--- a/chrome/android/features/tab_ui/java/res/layout/tab_suggestion_card_item.xml
+++ b/chrome/android/features/tab_ui/java/res/layout/tab_grid_message_card_item.xml
@@ -2,9 +2,9 @@
 <!-- Copyright 2019 The Chromium Authors. All rights reserved.
      Use of this source code is governed by a BSD-style license that can be
      found in the LICENSE file. -->
-<org.chromium.chrome.browser.tasks.tab_management.TabGridMessageCardView
+<org.chromium.chrome.browser.tasks.tab_management.MessageCardView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/tab_grid_iph_item"
+    android:id="@+id/tab_grid_message_item"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
@@ -42,4 +42,4 @@
         style="@style/BottomToolbarButton"
         android:contentDescription="@string/close"
         android:tint="@color/default_icon_color" />
-</org.chromium.chrome.browser.tasks.tab_management.TabGridMessageCardView>
+</org.chromium.chrome.browser.tasks.tab_management.MessageCardView>
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderCoordinator.java
new file mode 100644
index 0000000..560b1b7
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderCoordinator.java
@@ -0,0 +1,51 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This is the coordinator for MessageCardProvider component. This component is used to build a
+ * TabGridMessageCardView for each {@link MessageService.MessageType}. This coordinator manages the
+ * life-cycle of all shared components and the connection between all subscribed
+ * {@link MessageService}.
+ */
+public class MessageCardProviderCoordinator {
+    private final MessageCardProviderMediator mMediator;
+    private final List<MessageService> mMessageServices = new ArrayList<>();
+
+    MessageCardProviderCoordinator(MessageCardView.DismissActionProvider uiDismissActionProvider) {
+        mMediator = new MessageCardProviderMediator(uiDismissActionProvider);
+    }
+
+    /**
+     * Subscribes to a {@link MessageService} to get any message changes. @see
+     * MessageObserver.
+     * @param service The {@link MessageService} to subscribe.
+     */
+    public void subscribeMessageService(MessageService service) {
+        mMessageServices.add(service);
+        service.addObserver(mMediator);
+    }
+
+    /**
+     * Get all messages.
+     * @return a list of {@link
+     *         MessageCardProviderMediator.Message}.
+     */
+    public List<MessageCardProviderMediator.Message> getMessageItems() {
+        return mMediator.getMessageItems();
+    }
+
+    /**
+     * Clean up all member fields.
+     */
+    public void destroy() {
+        for (int i = 0; i < mMessageServices.size(); i++) {
+            mMessageServices.get(i).removeObserver(mMediator);
+        }
+    }
+}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediator.java
new file mode 100644
index 0000000..072bf28
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediator.java
@@ -0,0 +1,87 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import org.chromium.base.VisibleForTesting;
+import org.chromium.ui.modelutil.PropertyModel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This is a {@link MessageService.MessageObserver} that creates and owns different
+ * {@link PropertyModel} based on the message type.
+ */
+public class MessageCardProviderMediator implements MessageService.MessageObserver {
+    /**
+     * A class represents a Message.
+     */
+    public class Message {
+        public final @MessageService.MessageType int type;
+        public final PropertyModel model;
+
+        Message(int type, PropertyModel model) {
+            this.type = type;
+            this.model = model;
+        }
+    }
+
+    private Map<Integer, Message> mMessageItems = new HashMap<>();
+    private Map<Integer, Message> mShownMessageItems = new HashMap<>();
+    private MessageCardView.DismissActionProvider mUiDismissActionProvider;
+
+    public MessageCardProviderMediator(
+            MessageCardView.DismissActionProvider uiDismissActionProvider) {
+        mUiDismissActionProvider = uiDismissActionProvider;
+    }
+    /**
+     * @return A list of {@link Message} that can be shown.
+     */
+    public List<Message> getMessageItems() {
+        mShownMessageItems.putAll(mMessageItems);
+        mMessageItems.clear();
+        return new ArrayList<>(mShownMessageItems.values());
+    }
+
+    // MessageObserver implementations.
+    @Override
+    public void messageReady(@MessageService.MessageType int type) {
+        assert !mShownMessageItems.containsKey(type);
+
+        PropertyModel model = new TabSuggestionMessageCardViewModel();
+        model.set(MessageCardViewProperties.UI_DISMISS_ACTION_PROVIDER, mUiDismissActionProvider);
+        mMessageItems.put(type, new Message(type, model));
+    }
+
+    @Override
+    public void messageInvalidate(@MessageService.MessageType int type) {
+        if (mMessageItems.containsKey(type)) {
+            mMessageItems.remove(type);
+        } else if (mShownMessageItems.containsKey(type)) {
+            // run ui dismiss handler;
+            MessageCardView.DismissActionProvider dismissActionProvider =
+                    mShownMessageItems.get(type).model.get(
+                            MessageCardViewProperties.UI_DISMISS_ACTION_PROVIDER);
+
+            if (dismissActionProvider != null) {
+                dismissActionProvider.dismiss();
+            }
+
+            mShownMessageItems.remove(type);
+        }
+    }
+
+    @VisibleForTesting
+    Map<Integer, Message> getReadyMessageItemsForTesting() {
+        return mMessageItems;
+    }
+
+    @VisibleForTesting
+    Map<Integer, Message> getShownMessageItemsForTesting() {
+        return mShownMessageItems;
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardView.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java
similarity index 67%
rename from chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardView.java
rename to chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java
index 4cacd46d..067eece 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardView.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardView.java
@@ -22,15 +22,30 @@
  * Represents a secondary card view in Grid Tab Switcher. The view contains an icon, a description,
  * an action button for acceptance, and a close button for dismissal.
  */
-class TabGridMessageCardView extends LinearLayout {
+class MessageCardView extends LinearLayout {
     private static WeakReference<Bitmap> sCloseButtonBitmapWeakRef;
 
+    /**
+     * An interface to get the icon to be shown inside the message card.
+     */
+    public interface IconProvider { Drawable getIconDrawable(); }
+
+    /**
+     * An interface to handle the review action.
+     */
+    public interface ReviewActionProvider { void review(); }
+
+    /**
+     * An interface to handle the dismiss action.
+     */
+    public interface DismissActionProvider { void dismiss(); }
+
     private ChromeImageView mIcon;
     private TemplatePreservingTextView mDescription;
     private ButtonCompat mActionButton;
     private ChromeImageView mCloseButton;
 
-    public TabGridMessageCardView(Context context, AttributeSet attrs) {
+    public MessageCardView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
@@ -72,7 +87,7 @@
      * Set action text for the action button.
      * @param actionText Text to be displayed.
      */
-    void setAction(String actionText) {
+    void setActionText(String actionText) {
         mActionButton.setText(actionText);
     }
 
@@ -83,4 +98,28 @@
     void setIcon(Drawable iconDrawable) {
         mIcon.setImageDrawable(iconDrawable);
     }
+
+    /**
+     * Set click listener for the action button.
+     * @param listener {@link android.view.View.OnClickListener} for the action button.
+     */
+    void setActionButtonOnClickListener(OnClickListener listener) {
+        mActionButton.setOnClickListener(listener);
+    }
+
+    /**
+     * Set content description for dismiss button.
+     * @param description The content description.
+     */
+    void setDismissButtonContentDescription(String description) {
+        mCloseButton.setContentDescription(description);
+    }
+
+    /**
+     * Set {@link android.view.View.OnClickListener} for dismiss button.
+     * @param listener {@link android.view.View.OnClickListener} to set.
+     */
+    void setDismissButtonOnClickListener(OnClickListener listener) {
+        mCloseButton.setOnClickListener(listener);
+    }
 }
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinder.java
new file mode 100644
index 0000000..2c330a48
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinder.java
@@ -0,0 +1,52 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import android.view.ViewGroup;
+
+import org.chromium.ui.modelutil.PropertyKey;
+import org.chromium.ui.modelutil.PropertyModel;
+
+/**
+ * ViewBinder for TabGridSecondaryItem.
+ */
+class MessageCardViewBinder {
+    public static void bind(PropertyModel model, ViewGroup view, PropertyKey propertyKey) {
+        assert view instanceof MessageCardView;
+
+        MessageCardView itemView = (MessageCardView) view;
+        if (MessageCardViewProperties.ACTION_TEXT == propertyKey) {
+            itemView.setActionText(model.get(MessageCardViewProperties.ACTION_TEXT));
+            itemView.setActionButtonOnClickListener(v -> {
+                MessageCardView.ReviewActionProvider uiProvider =
+                        model.get(MessageCardViewProperties.UI_ACTION_PROVIDER);
+                if (uiProvider != null) uiProvider.review();
+
+                MessageCardView.ReviewActionProvider serviceProvider =
+                        model.get(MessageCardViewProperties.MESSAGE_SERVICE_ACTION_PROVIDER);
+                if (serviceProvider != null) serviceProvider.review();
+            });
+        } else if (MessageCardViewProperties.DESCRIPTION_TEXT == propertyKey) {
+            itemView.setDescriptionText(model.get(MessageCardViewProperties.DESCRIPTION_TEXT));
+        } else if (MessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE == propertyKey) {
+            itemView.setDescriptionTextTemplate(
+                    model.get(MessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE));
+        } else if (MessageCardViewProperties.ICON_PROVIDER == propertyKey) {
+            itemView.setIcon(model.get(MessageCardViewProperties.ICON_PROVIDER).getIconDrawable());
+        } else if (MessageCardViewProperties.DISMISS_BUTTON_CONTENT_DESCRIPTION == propertyKey) {
+            itemView.setDismissButtonContentDescription(
+                    model.get(MessageCardViewProperties.DISMISS_BUTTON_CONTENT_DESCRIPTION));
+            itemView.setDismissButtonOnClickListener(v -> {
+                MessageCardView.DismissActionProvider uiProvider =
+                        model.get(MessageCardViewProperties.UI_DISMISS_ACTION_PROVIDER);
+                if (uiProvider != null) uiProvider.dismiss();
+
+                MessageCardView.DismissActionProvider serviceProvider = model.get(
+                        MessageCardViewProperties.MESSAGE_SERVICE_DISMISS_ACTION_PROVIDER);
+                if (serviceProvider != null) serviceProvider.dismiss();
+            });
+        }
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewProperties.java
new file mode 100644
index 0000000..06e1ee8
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewProperties.java
@@ -0,0 +1,43 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import org.chromium.ui.modelutil.PropertyKey;
+import org.chromium.ui.modelutil.PropertyModel;
+
+/**
+ * List of properties used by TabGridSecondaryItem.
+ */
+class MessageCardViewProperties {
+    public static PropertyModel.ReadableIntPropertyKey MESSAGE_TYPE =
+            new PropertyModel.ReadableIntPropertyKey();
+    public static final PropertyModel.WritableObjectPropertyKey<String> ACTION_TEXT =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static final PropertyModel.WritableObjectPropertyKey<String> DESCRIPTION_TEXT =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static final PropertyModel.WritableObjectPropertyKey<String> DESCRIPTION_TEXT_TEMPLATE =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static PropertyModel
+            .WritableObjectPropertyKey<MessageCardView.IconProvider> ICON_PROVIDER =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static PropertyModel
+            .WritableObjectPropertyKey<MessageCardView.ReviewActionProvider> UI_ACTION_PROVIDER =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static PropertyModel.WritableObjectPropertyKey<MessageCardView.DismissActionProvider>
+            UI_DISMISS_ACTION_PROVIDER = new PropertyModel.WritableObjectPropertyKey<>();
+    public static PropertyModel.WritableObjectPropertyKey<MessageCardView.ReviewActionProvider>
+            MESSAGE_SERVICE_ACTION_PROVIDER = new PropertyModel.WritableObjectPropertyKey<>();
+    public static PropertyModel.WritableObjectPropertyKey<MessageCardView.DismissActionProvider>
+            MESSAGE_SERVICE_DISMISS_ACTION_PROVIDER =
+            new PropertyModel.WritableObjectPropertyKey<>();
+    public static final PropertyModel
+            .WritableObjectPropertyKey<String> DISMISS_BUTTON_CONTENT_DESCRIPTION =
+            new PropertyModel.WritableObjectPropertyKey<>();
+
+    public static final PropertyKey[] ALL_KEYS = new PropertyKey[] {ACTION_TEXT, DESCRIPTION_TEXT,
+            DESCRIPTION_TEXT_TEMPLATE, MESSAGE_TYPE, ICON_PROVIDER, UI_ACTION_PROVIDER,
+            UI_DISMISS_ACTION_PROVIDER, MESSAGE_SERVICE_ACTION_PROVIDER,
+            MESSAGE_SERVICE_DISMISS_ACTION_PROVIDER, DISMISS_BUTTON_CONTENT_DESCRIPTION};
+}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageService.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageService.java
new file mode 100644
index 0000000..932357e
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/MessageService.java
@@ -0,0 +1,88 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import androidx.annotation.IntDef;
+
+import org.chromium.base.ObserverList;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Ideally, for each of the {@link MessageType} requires a MessageService class. This is the
+ * base class. All the concrete subclass should contain logic that convert the data from the
+ * corresponding external service to a data structure that the TabGridMessageCardProvider
+ * understands.
+ */
+public class MessageService {
+    @IntDef({MessageType.TAB_SUGGESTION})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface MessageType {
+        int FOR_TESTING = 0;
+        int TAB_SUGGESTION = 1;
+    }
+
+    /**
+     * An interface to be notified about changes to a Message.
+     * TODO(meiliang): Need to define this interface in more detail.
+     */
+    public interface MessageObserver {
+        /**
+         * Called when a message is available.
+         * TODO(meiliang): message data is needed.
+         * @param type The type of the message.
+         */
+        void messageReady(@MessageType int type);
+
+        /**
+         * Called when a message is invalidated.
+         * @param type The type of the message.
+         */
+        void messageInvalidate(@MessageType int type);
+    }
+
+    ObserverList<MessageObserver> mObservers = new ObserverList<>();
+    @MessageType
+    int mMessageType;
+
+    MessageService(@MessageType int mMessageType) {
+        this.mMessageType = mMessageType;
+    }
+
+    /**
+     * Add a {@link MessageObserver} to be notified when message from external service is changes.
+     * @param observer a {@link MessageObserver} to add.
+     */
+    public void addObserver(MessageObserver observer) {
+        mObservers.addObserver(observer);
+    }
+
+    /**
+     * Remove a {@link MessageObserver}.
+     * @param observer The {@link MessageObserver} to remove.
+     */
+    public void removeObserver(MessageObserver observer) {
+        mObservers.removeObserver(observer);
+    }
+
+    /**
+     * Notifies all {@link MessageObserver} that a message is available.
+     */
+    public void sendAvailabilityNotification() {
+        for (MessageObserver observer : mObservers) {
+            observer.messageReady(mMessageType);
+        }
+    }
+
+    /**
+     * Notifies all {@link MessageObserver} that a message is became invalid.
+     */
+    public void sendInvalidNotification() {
+        for (MessageObserver observer : mObservers) {
+            observer.messageInvalidate(mMessageType);
+        }
+    }
+}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinder.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinder.java
deleted file mode 100644
index b875633..0000000
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinder.java
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.tasks.tab_management;
-
-import android.view.ViewGroup;
-
-import org.chromium.ui.modelutil.PropertyKey;
-import org.chromium.ui.modelutil.PropertyModel;
-
-/**
- * ViewBinder for TabGridSecondaryItem.
- */
-class TabGridMessageCardViewBinder {
-    public static void bind(PropertyModel model, ViewGroup view, PropertyKey propertyKey) {
-        assert view instanceof TabGridMessageCardView;
-
-        TabGridMessageCardView itemView = (TabGridMessageCardView) view;
-        if (TabGridMessageCardViewProperties.ACTION_TEXT == propertyKey) {
-            itemView.setAction(model.get(TabGridMessageCardViewProperties.ACTION_TEXT));
-        } else if (TabGridMessageCardViewProperties.DESCRIPTION_TEXT == propertyKey) {
-            itemView.setDescriptionText(
-                    model.get(TabGridMessageCardViewProperties.DESCRIPTION_TEXT));
-        } else if (TabGridMessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE == propertyKey) {
-            itemView.setDescriptionTextTemplate(
-                    model.get(TabGridMessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE));
-        }
-    }
-}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewProperties.java
deleted file mode 100644
index b33dc66..0000000
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewProperties.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.tasks.tab_management;
-
-import org.chromium.ui.modelutil.PropertyKey;
-import org.chromium.ui.modelutil.PropertyModel;
-
-/**
- * List of properties used by TabGridSecondaryItem.
- */
-class TabGridMessageCardViewProperties {
-    public static final PropertyModel.WritableObjectPropertyKey<String> ACTION_TEXT =
-            new PropertyModel.WritableObjectPropertyKey<>();
-    public static final PropertyModel.WritableObjectPropertyKey<String> DESCRIPTION_TEXT =
-            new PropertyModel.WritableObjectPropertyKey<>();
-    public static final PropertyModel.WritableObjectPropertyKey<String> DESCRIPTION_TEXT_TEMPLATE =
-            new PropertyModel.WritableObjectPropertyKey<>();
-
-    public static final PropertyKey[] ALL_KEYS =
-            new PropertyKey[] {ACTION_TEXT, DESCRIPTION_TEXT, DESCRIPTION_TEXT_TEMPLATE};
-}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
index fe95695..9e15da9f 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabProperties.java
@@ -23,13 +23,13 @@
  */
 public class TabProperties {
     /** IDs for possible types of UI in the tab list. */
-    @IntDef({UiType.SELECTABLE, UiType.CLOSABLE, UiType.STRIP, UiType.SUGGESTION})
+    @IntDef({UiType.SELECTABLE, UiType.CLOSABLE, UiType.STRIP, UiType.MESSAGE})
     @Retention(RetentionPolicy.SOURCE)
     public @interface UiType {
         int SELECTABLE = 0;
         int CLOSABLE = 1;
         int STRIP = 2;
-        int SUGGESTION = 3;
+        int MESSAGE = 3;
     }
 
     public static final PropertyModel.WritableIntPropertyKey TAB_ID =
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageCardViewModel.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageCardViewModel.java
new file mode 100644
index 0000000..07eb605f
--- /dev/null
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSuggestionMessageCardViewModel.java
@@ -0,0 +1,29 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import android.graphics.drawable.Drawable;
+
+import org.chromium.ui.modelutil.PropertyModel;
+
+/**
+ * This is a {@link PropertyModel} for the TabSuggestionMessageCard.
+ */
+public class TabSuggestionMessageCardViewModel
+        extends PropertyModel implements MessageCardView.IconProvider {
+    // TODO(meiliang): should take in a TabSuggestion object from the suggestion service, and set
+    // the property model based on the TabSuggestion object. ACTION_TEXT and DESCRIPTION_TEXT should
+    // set based on the TabSuggestion object.
+    public TabSuggestionMessageCardViewModel() {
+        super(MessageCardViewProperties.ALL_KEYS);
+        set(MessageCardViewProperties.ICON_PROVIDER, this);
+    }
+
+    @Override
+    public Drawable getIconDrawable() {
+        // TODO(meiliang): returns a drawable with first tab suggested tab's favicon.
+        return null;
+    }
+}
diff --git a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
index c438cb0..a637928d 100644
--- a/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
+++ b/chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/TabSwitcherCoordinator.java
@@ -141,10 +141,10 @@
 
         if (mode == TabListCoordinator.TabListMode.GRID) {
             if (ChromeFeatureList.isEnabled(ChromeFeatureList.CLOSE_TAB_SUGGESTIONS)) {
-                mTabListCoordinator.registerItemType(TabProperties.UiType.SUGGESTION, () -> {
+                mTabListCoordinator.registerItemType(TabProperties.UiType.MESSAGE, () -> {
                     return (ViewGroup) LayoutInflater.from(context).inflate(
-                            R.layout.tab_suggestion_card_item, container, false);
-                }, TabGridMessageCardViewBinder::bind);
+                            R.layout.tab_grid_message_card_item, container, false);
+                }, MessageCardViewBinder::bind);
             }
 
             assert mTabListCoordinator.getContainerView().getLayoutManager()
@@ -159,7 +159,7 @@
                                                    .getAdapter()
                                                    .getItemViewType(position);
 
-                            if (itemType == TabProperties.UiType.SUGGESTION) return 2;
+                            if (itemType == TabProperties.UiType.MESSAGE) return 2;
                             return 1;
                         }
                     });
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java
new file mode 100644
index 0000000..ff7ab769
--- /dev/null
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java
@@ -0,0 +1,139 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+
+import android.support.test.filters.SmallTest;
+import android.support.v7.widget.GridLayoutManager;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+
+import org.chromium.chrome.browser.tab.TabFeatureUtilities;
+import org.chromium.chrome.tab_ui.R;
+import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
+import org.chromium.chrome.test.util.browser.Features;
+import org.chromium.content_public.browser.test.util.CriteriaHelper;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.modelutil.MVCListAdapter;
+import org.chromium.ui.modelutil.SimpleRecyclerViewAdapter;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Integration tests for TabGridMessageCardProvider component.
+ */
+public class MessageCardProviderTest extends DummyUiActivityTestCase {
+    @Rule
+    public TestRule mProcessor = new Features.JUnitProcessor();
+
+    private TabListRecyclerView mRecyclerView;
+    private TabListRecyclerView.VisibilityListener mRecyclerViewVisibilityListener =
+            new TabListRecyclerView.VisibilityListener() {
+                @Override
+                public void startedShowing(boolean isAnimating) {
+                    List<MessageCardProviderMediator.Message> messageList =
+                            mCoordinator.getMessageItems();
+                    for (int i = 0; i < messageList.size(); i++) {
+                        MessageCardProviderMediator.Message message = messageList.get(i);
+                        mModelList.add(new MVCListAdapter.ListItem(
+                                TabProperties.UiType.MESSAGE, message.model));
+                    }
+                }
+
+                @Override
+                public void finishedShowing() {
+                    mFinishedShowing.set(true);
+                }
+
+                @Override
+                public void startedHiding(boolean isAnimating) {
+                    mFinishedShowing.set(false);
+                    mModelList.clear();
+                }
+
+                @Override
+                public void finishedHiding() {}
+            };
+
+    private TabListModel mModelList = new TabListModel();
+    private SimpleRecyclerViewAdapter mAdapter;
+
+    private AtomicBoolean mFinishedShowing = new AtomicBoolean(false);
+
+    private MessageService mTestingService =
+            new MessageService(MessageService.MessageType.FOR_TESTING);
+    private MessageService mSuggestionService =
+            new MessageService(MessageService.MessageType.TAB_SUGGESTION);
+    private MessageCardProviderCoordinator mCoordinator;
+
+    private MessageCardView.DismissActionProvider mUiDismissActionProvider = () -> {};
+
+    @Override
+    public void setUpTest() throws Exception {
+        super.setUpTest();
+        TabFeatureUtilities.setIsTabToGtsAnimationEnabledForTesting(false);
+
+        // TODO(meiliang): Replace with TabSwitcher instead when ready to integrate with
+        // TabSwitcher.
+        ViewGroup view = new FrameLayout(getActivity());
+        mAdapter = new SimpleRecyclerViewAdapter(mModelList);
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            getActivity().setContentView(view);
+
+            mRecyclerView = (TabListRecyclerView) getActivity().getLayoutInflater().inflate(
+                    R.layout.tab_list_recycler_view_layout, view, false);
+            mRecyclerView.setVisibilityListener(mRecyclerViewVisibilityListener);
+            mRecyclerView.setVisibility(View.INVISIBLE);
+
+            mAdapter.registerType(TabProperties.UiType.MESSAGE, () -> {
+                return (ViewGroup) getActivity().getLayoutInflater().inflate(
+                        R.layout.tab_grid_message_card_item, mRecyclerView, false);
+            }, MessageCardViewBinder::bind);
+
+            GridLayoutManager layoutManager = new GridLayoutManager(mRecyclerView.getContext(), 2);
+            layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
+                @Override
+                public int getSpanSize(int i) {
+                    int itemType = mAdapter.getItemViewType(i);
+
+                    if (itemType == TabProperties.UiType.MESSAGE) return 2;
+                    return 1;
+                }
+            });
+            mRecyclerView.setLayoutManager(layoutManager);
+            mRecyclerView.setAdapter(mAdapter);
+
+            view.addView(mRecyclerView);
+        });
+
+        mCoordinator = new MessageCardProviderCoordinator(mUiDismissActionProvider);
+        mCoordinator.subscribeMessageService(mTestingService);
+        mCoordinator.subscribeMessageService(mSuggestionService);
+    }
+
+    @Test
+    @SmallTest
+    public void testShowingMessage() {
+        mSuggestionService.sendAvailabilityNotification();
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> { mRecyclerView.startShowing(false); });
+
+        CriteriaHelper.pollInstrumentationThread(
+                () -> mRecyclerView.getVisibility() == View.VISIBLE && mFinishedShowing.get());
+
+        onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed()));
+    }
+}
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinderTest.java
new file mode 100644
index 0000000..1f22136e
--- /dev/null
+++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinderTest.java
@@ -0,0 +1,150 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import android.support.test.annotation.UiThreadTest;
+import android.support.test.filters.SmallTest;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import org.chromium.chrome.tab_ui.R;
+import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
+import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
+import org.chromium.content_public.browser.test.util.TestThreadUtils;
+import org.chromium.ui.modelutil.PropertyModel;
+import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Tests for {@link MessageCardViewBinder}.
+ */
+@RunWith(ChromeJUnit4ClassRunner.class)
+public class MessageCardViewBinderTest extends DummyUiActivityTestCase {
+    private static final String ACTION_TEXT = "actionText";
+    private static final String DESCRIPTION_TEXT = "descriptionText";
+    private static final String DISMISS_BUTTON_CONTENT_DESCRIPTION = "dismiss";
+
+    private ViewGroup mItemView;
+    private PropertyModel mItemViewModel;
+    private PropertyModelChangeProcessor mItemMCP;
+    private AtomicBoolean mReviewButtonClicked = new AtomicBoolean();
+    private AtomicBoolean mDismissButtonClicked = new AtomicBoolean();
+
+    private AtomicBoolean mMessageServiceReviewCallbackRan = new AtomicBoolean();
+    private AtomicBoolean mMessageServiceDismissCallbackRan = new AtomicBoolean();
+
+    private MessageCardView.ReviewActionProvider mUiReviewHandler = () -> {
+        mReviewButtonClicked.set(true);
+    };
+    private MessageCardView.DismissActionProvider mUiDismissHandler = () -> {
+        mDismissButtonClicked.set(true);
+    };
+    private MessageCardView.ReviewActionProvider mMessageServiceActionHandler = () -> {
+        mMessageServiceReviewCallbackRan.set(true);
+    };
+    private MessageCardView.DismissActionProvider mMessageServiceDismissHandler = () -> {
+        mMessageServiceDismissCallbackRan.set(true);
+    };
+
+    @Override
+    public void setUpTest() throws Exception {
+        super.setUpTest();
+
+        ViewGroup view = new LinearLayout(getActivity());
+
+        TestThreadUtils.runOnUiThreadBlocking(() -> {
+            getActivity().setContentView(view);
+
+            mItemView = (ViewGroup) getActivity().getLayoutInflater().inflate(
+                    R.layout.tab_grid_message_card_item, null);
+            view.addView(mItemView);
+        });
+
+        mItemViewModel = new PropertyModel.Builder(MessageCardViewProperties.ALL_KEYS)
+                                 .with(MessageCardViewProperties.ACTION_TEXT, ACTION_TEXT)
+                                 .with(MessageCardViewProperties.DESCRIPTION_TEXT, DESCRIPTION_TEXT)
+                                 .build();
+
+        mItemMCP = PropertyModelChangeProcessor.create(
+                mItemViewModel, mItemView, MessageCardViewBinder::bind);
+    }
+
+    private String getDescriptionText() {
+        return ((TextView) mItemView.findViewById(R.id.description)).getText().toString();
+    }
+
+    @Test
+    @UiThreadTest
+    @SmallTest
+    public void testInitialBinding() {
+        assertEquals(ACTION_TEXT,
+                ((TextView) mItemView.findViewById(R.id.action_button)).getText().toString());
+        assertEquals(DESCRIPTION_TEXT, getDescriptionText());
+    }
+
+    @Test
+    @UiThreadTest
+    @SmallTest
+    public void testBindingDescription_WithoutTemplate() {
+        mItemViewModel.set(MessageCardViewProperties.DESCRIPTION_TEXT, "test");
+        assertEquals("test", getDescriptionText());
+    }
+
+    @Test
+    @UiThreadTest
+    @SmallTest
+    public void testBindingDescription_WithTemplate() {
+        mItemViewModel.set(MessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE, "%s template");
+        mItemViewModel.set(MessageCardViewProperties.DESCRIPTION_TEXT, "test");
+        assertEquals("test template", getDescriptionText());
+    }
+
+    @Test
+    @UiThreadTest
+    @SmallTest
+    public void testBindingAndClickingReviewHandler() {
+        mReviewButtonClicked.set(false);
+        mMessageServiceReviewCallbackRan.set(false);
+        mItemViewModel.set(MessageCardViewProperties.UI_ACTION_PROVIDER, mUiReviewHandler);
+        mItemViewModel.set(MessageCardViewProperties.MESSAGE_SERVICE_ACTION_PROVIDER,
+                mMessageServiceActionHandler);
+        mItemViewModel.set(MessageCardViewProperties.ACTION_TEXT, ACTION_TEXT);
+
+        mItemView.findViewById(R.id.action_button).performClick();
+        assertTrue(mReviewButtonClicked.get());
+        assertTrue(mMessageServiceReviewCallbackRan.get());
+    }
+
+    @Test
+    @UiThreadTest
+    @SmallTest
+    public void testBindingAndClickingDismissHandler() {
+        mDismissButtonClicked.set(false);
+        mMessageServiceDismissCallbackRan.set(false);
+        mItemViewModel.set(MessageCardViewProperties.UI_DISMISS_ACTION_PROVIDER, mUiDismissHandler);
+        mItemViewModel.set(MessageCardViewProperties.MESSAGE_SERVICE_DISMISS_ACTION_PROVIDER,
+                mMessageServiceDismissHandler);
+        mItemViewModel.set(MessageCardViewProperties.DISMISS_BUTTON_CONTENT_DESCRIPTION,
+                DISMISS_BUTTON_CONTENT_DESCRIPTION);
+
+        mItemView.findViewById(R.id.close_button).performClick();
+        assertTrue(mDismissButtonClicked.get());
+        assertTrue(mMessageServiceDismissCallbackRan.get());
+    }
+
+    @Override
+    public void tearDownTest() throws Exception {
+        mItemMCP.destroy();
+        super.tearDownTest();
+    }
+}
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinderTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinderTest.java
deleted file mode 100644
index cac53f8f..0000000
--- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinderTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package org.chromium.chrome.browser.tasks.tab_management;
-
-import static org.junit.Assert.assertEquals;
-
-import android.support.test.annotation.UiThreadTest;
-import android.support.test.filters.SmallTest;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import org.chromium.chrome.tab_ui.R;
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
-import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
-import org.chromium.content_public.browser.test.util.TestThreadUtils;
-import org.chromium.ui.modelutil.PropertyModel;
-import org.chromium.ui.modelutil.PropertyModelChangeProcessor;
-
-/**
- * Tests for {@link TabGridMessageCardViewBinder}.
- */
-@RunWith(ChromeJUnit4ClassRunner.class)
-public class TabGridMessageCardViewBinderTest extends DummyUiActivityTestCase {
-    private static final String ACTION_TEXT = "actionText";
-    private static final String DESCRIPTION_TEXT = "descriptionText";
-
-    private ViewGroup mItemView;
-    private PropertyModel mItemViewModel;
-    private PropertyModelChangeProcessor mItemMCP;
-
-    @Override
-    public void setUpTest() throws Exception {
-        super.setUpTest();
-
-        ViewGroup view = new LinearLayout(getActivity());
-
-        TestThreadUtils.runOnUiThreadBlocking(() -> {
-            getActivity().setContentView(view);
-
-            mItemView = (ViewGroup) getActivity().getLayoutInflater().inflate(
-                    R.layout.tab_suggestion_card_item, null);
-            view.addView(mItemView);
-        });
-
-        mItemViewModel =
-                new PropertyModel.Builder(TabGridMessageCardViewProperties.ALL_KEYS)
-                        .with(TabGridMessageCardViewProperties.ACTION_TEXT, ACTION_TEXT)
-                        .with(TabGridMessageCardViewProperties.DESCRIPTION_TEXT, DESCRIPTION_TEXT)
-                        .build();
-
-        mItemMCP = PropertyModelChangeProcessor.create(
-                mItemViewModel, mItemView, TabGridMessageCardViewBinder::bind);
-    }
-
-    private String getDescriptionText() {
-        return ((TextView) mItemView.findViewById(R.id.description)).getText().toString();
-    }
-
-    @Test
-    @UiThreadTest
-    @SmallTest
-    public void testInitialBinding() {
-        assertEquals(ACTION_TEXT,
-                ((TextView) mItemView.findViewById(R.id.action_button)).getText().toString());
-        assertEquals(DESCRIPTION_TEXT, getDescriptionText());
-    }
-
-    @Test
-    @UiThreadTest
-    @SmallTest
-    public void testBindingDescription_WithoutTemplate() {
-        mItemViewModel.set(TabGridMessageCardViewProperties.DESCRIPTION_TEXT, "test");
-        assertEquals("test", getDescriptionText());
-    }
-
-    @Test
-    @UiThreadTest
-    @SmallTest
-    public void testBindingDescription_WithTemplate() {
-        mItemViewModel.set(
-                TabGridMessageCardViewProperties.DESCRIPTION_TEXT_TEMPLATE, "%s template");
-        mItemViewModel.set(TabGridMessageCardViewProperties.DESCRIPTION_TEXT, "test");
-        assertEquals("test template", getDescriptionText());
-    }
-
-    @Override
-    public void tearDownTest() throws Exception {
-        mItemMCP.destroy();
-        super.tearDownTest();
-    }
-}
diff --git a/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediatorUnitTest.java b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediatorUnitTest.java
new file mode 100644
index 0000000..84d0699
--- /dev/null
+++ b/chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediatorUnitTest.java
@@ -0,0 +1,88 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.tasks.tab_management;
+
+import static org.mockito.Mockito.doNothing;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import org.chromium.testing.local.LocalRobolectricTestRunner;
+
+/**
+ * Unit tests for {@link MessageCardProviderMediator}.
+ */
+@RunWith(LocalRobolectricTestRunner.class)
+public class MessageCardProviderMediatorUnitTest {
+    MessageCardProviderMediator mMediator;
+
+    @Mock
+    MessageCardView.DismissActionProvider mUiDismissActionProvider;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        doNothing().when(mUiDismissActionProvider).dismiss();
+        mMediator = new MessageCardProviderMediator(mUiDismissActionProvider);
+    }
+
+    private void enqueueMessageItem(int type) {
+        mMediator.messageReady(type);
+    }
+
+    @Test
+    public void getMessageItemsTest() {
+        enqueueMessageItem(MessageService.MessageType.TAB_SUGGESTION);
+
+        Assert.assertEquals(1, mMediator.getMessageItems().size());
+        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
+        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());
+    }
+
+    @Test
+    public void getMessageItemsTest_TwoDifferentTypeMessage() {
+        enqueueMessageItem(MessageService.MessageType.TAB_SUGGESTION);
+
+        Assert.assertEquals(1, mMediator.getMessageItems().size());
+        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
+        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());
+
+        enqueueMessageItem(MessageService.MessageType.FOR_TESTING);
+
+        Assert.assertEquals(2, mMediator.getMessageItems().size());
+        Assert.assertTrue(mMediator.getReadyMessageItemsForTesting().isEmpty());
+        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().isEmpty());
+    }
+
+    @Test
+    public void invalidate_queuedMessage() {
+        enqueueMessageItem(MessageService.MessageType.TAB_SUGGESTION);
+
+        mMediator.messageInvalidate(MessageService.MessageType.TAB_SUGGESTION);
+
+        Assert.assertFalse(mMediator.getReadyMessageItemsForTesting().containsKey(
+                MessageService.MessageType.TAB_SUGGESTION));
+        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
+                MessageService.MessageType.TAB_SUGGESTION));
+    }
+
+    @Test
+    public void invalidate_shownMessage() {
+        enqueueMessageItem(MessageService.MessageType.TAB_SUGGESTION);
+
+        mMediator.getMessageItems();
+        mMediator.messageInvalidate(MessageService.MessageType.TAB_SUGGESTION);
+
+        Assert.assertFalse(mMediator.getShownMessageItemsForTesting().containsKey(
+                MessageService.MessageType.TAB_SUGGESTION));
+        Assert.assertFalse(mMediator.getReadyMessageItemsForTesting().containsKey(
+                MessageService.MessageType.TAB_SUGGESTION));
+    }
+}
\ No newline at end of file
diff --git a/chrome/android/features/tab_ui/tab_management_java_sources.gni b/chrome/android/features/tab_ui/tab_management_java_sources.gni
index f6c0a26..7afa9f9 100644
--- a/chrome/android/features/tab_ui/tab_management_java_sources.gni
+++ b/chrome/android/features/tab_ui/tab_management_java_sources.gni
@@ -25,11 +25,12 @@
 
 tab_management_test_java_sources = [
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/AssertsTest.java",
+  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardViewBinderTest.java",
+  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogParentTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemViewBinderTest.java",
-  "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridMessageCardViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGridPanelViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListContainerViewBinderTest.java",
   "//chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabListViewHolderTest.java",
@@ -47,6 +48,7 @@
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupModelFilterUnitTest.java",
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_groups/TabGroupUtilsUnitTest.java",
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridDialogMediatorUnitTest.java",
+  "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/MessageCardProviderMediatorUnitTest.java",
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridIphItemMediatorUnitTest.java",
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGridItemTouchHelperCallbackUnitTest.java",
   "//chrome/android/features/tab_ui/junit/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupTitleEditorUnitTest.java",
diff --git a/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_mr.xtb b/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_mr.xtb
index b88fe27..f176c9c 100644
--- a/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_mr.xtb
+++ b/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_mr.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
-<translation id="1729516292547892356">व्हर्च्युअल रीअॅलिटी आशय पाहण्यासाठी, Google VR सेवा अपडेट करा</translation>
+<translation id="1729516292547892356">व्हर्च्युअल रीॲलिटी आशय पाहण्यासाठी, Google VR सेवा अपडेट करा</translation>
 <translation id="1938981467853765413">फीडबॅक द्या</translation>
 <translation id="360207483134687714">Chrome मध्ये VR अनुभव सुधारण्यात मदत करा</translation>
 <translation id="3789841737615482174">स्थापना करा</translation>
diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
index 4580a99..c2fc3cd 100644
--- a/chrome/android/java/res/menu/main_menu.xml
+++ b/chrome/android/java/res/menu/main_menu.xml
@@ -12,18 +12,23 @@
             <menu>
               <item android:id="@+id/forward_menu_id"
                 android:title="@string/accessibility_menu_forward"
+                android:titleCondensed="@string/menu_forward"
                 android:icon="@drawable/btn_forward"/>
               <item android:id="@+id/bookmark_this_page_id"
                 android:title="@string/accessibility_menu_bookmark"
+                android:titleCondensed="@string/menu_bookmark"
                 android:icon="@drawable/btn_star"/>
               <item android:id="@+id/offline_page_id"
                 android:title="@string/download_page"
+                android:titleCondensed="@string/menu_download"
                 android:icon="@drawable/ic_file_download_white_24dp"/>
               <item android:id="@+id/info_menu_id"
                 android:title="@string/accessibility_menu_info"
+                android:titleCondensed="@string/menu_page_info"
                 android:icon="@drawable/btn_info" />
               <item android:id="@+id/reload_menu_id"
                 android:title="@string/accessibility_btn_refresh"
+                android:titleCondensed="@string/menu_refresh"
                 android:icon="@drawable/btn_reload_stop"/>
             </menu>
         </item>
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
index c152527..5bd643f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -1782,6 +1782,7 @@
             RecordUserAction.record("MobileMenuNewTab");
             RecordUserAction.record("MobileNewTabOpened");
             reportNewTabShortcutUsed(false);
+            if (fromMenu) RecordUserAction.record("MobileMenuNewTab.AppMenu");
             getTabCreator(false).launchNTP();
 
             mLocaleManager.showSearchEnginePromoIfNeeded(this, null);
@@ -1793,6 +1794,7 @@
                 RecordUserAction.record("MobileMenuNewIncognitoTab");
                 RecordUserAction.record("MobileNewTabOpened");
                 reportNewTabShortcutUsed(true);
+                if (fromMenu) RecordUserAction.record("MobileMenuNewIncognitoTab.AppMenu");
                 getTabCreator(true).launchNTP();
             }
         } else if (id == R.id.all_bookmarks_menu_id) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
index 6c07bbe4..052bdee 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenu.java
@@ -12,6 +12,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
+import android.text.TextUtils;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
@@ -38,7 +39,6 @@
 import org.chromium.base.ContextUtils;
 import org.chromium.base.SysUtils;
 import org.chromium.base.VisibleForTesting;
-import org.chromium.base.metrics.RecordUserAction;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ui.widget.highlight.ViewHighlighter;
 import org.chromium.ui.widget.Toast;
@@ -357,11 +357,6 @@
     public void onItemClick(MenuItem menuItem) {
         if (menuItem.isEnabled()) {
             dismiss();
-            if (menuItem.getItemId() == R.id.new_tab_menu_id) {
-                RecordUserAction.record("MobileMenuNewTab.AppMenu");
-            } else if (menuItem.getItemId() == R.id.new_incognito_tab_menu_id) {
-                RecordUserAction.record("MobileMenuNewIncognitoTab.AppMenu");
-            }
             mHandler.onOptionsItemSelected(menuItem);
         }
     }
@@ -369,27 +364,11 @@
     @Override
     public boolean onItemLongClick(MenuItem menuItem, View view) {
         if (!menuItem.isEnabled()) return false;
-
-        String description = null;
         Context context = ContextUtils.getApplicationContext();
-        Resources resources = context.getResources();
-        final int itemId = menuItem.getItemId();
-
-        if (itemId == R.id.forward_menu_id) {
-            description = resources.getString(R.string.menu_forward);
-        } else if (itemId == R.id.bookmark_this_page_id) {
-            description = resources.getString(R.string.menu_bookmark);
-        } else if (itemId == R.id.offline_page_id) {
-            description = resources.getString(R.string.menu_download);
-        } else if (itemId == R.id.info_menu_id) {
-            description = resources.getString(R.string.menu_page_info);
-        } else if (itemId == R.id.reload_menu_id) {
-            description = (menuItem.getIcon().getLevel()
-                                  == resources.getInteger(R.integer.reload_button_level_reload))
-                    ? resources.getString(R.string.menu_refresh)
-                    : resources.getString(R.string.menu_stop_refresh);
-        }
-        return Toast.showAnchoredToast(context, view, description);
+        CharSequence titleCondensed = menuItem.getTitleCondensed();
+        CharSequence message =
+                TextUtils.isEmpty(titleCondensed) ? menuItem.getTitle() : titleCondensed;
+        return Toast.showAnchoredToast(context, view, message);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
index 771e804..76479b7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuHandlerImpl.java
@@ -281,7 +281,7 @@
     }
 
     @VisibleForTesting
-    public void onOptionsItemSelected(MenuItem item) {
+    void onOptionsItemSelected(MenuItem item) {
         if (mTestOptionsItemSelectedListener != null) {
             mTestOptionsItemSelectedListener.onResult(item);
             return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
index df01c603..8fbd62a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -384,6 +384,8 @@
                             : resources.getInteger(R.integer.reload_button_level_reload));
             mReloadMenuItem.setTitle(isLoading ? R.string.accessibility_btn_stop_loading
                                                : R.string.accessibility_btn_refresh);
+            mReloadMenuItem.setTitleCondensed(resources.getString(
+                    isLoading ? R.string.menu_stop_refresh : R.string.menu_refresh));
         }
     }
 
@@ -457,7 +459,7 @@
         } else {
             bookmarkMenuItem.setIcon(R.drawable.btn_star);
             bookmarkMenuItem.setChecked(false);
-            bookmarkMenuItem.setTitleCondensed(null);
+            bookmarkMenuItem.setTitleCondensed(mContext.getString(R.string.menu_bookmark));
         }
     }
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
index d84f4e1..0ab48a8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
@@ -371,7 +371,10 @@
     public IPHInfoBarSupport.TrackerParameters getTrackerParameters() {
         if (getDownloadCount().inProgress == 0) return null;
 
-        if (getCurrentTab().getActivity().getBottomSheetController().isSheetOpen()) return null;
+        if (getCurrentTab() == null || getCurrentTab().getActivity() == null
+                || getCurrentTab().getActivity().getBottomSheetController().isSheetOpen()) {
+            return null;
+        }
 
         return new IPHInfoBarSupport.TrackerParameters(
                 FeatureConstants.DOWNLOAD_INFOBAR_DOWNLOADS_ARE_FASTER_FEATURE,
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationDelegateFactory.java
index 8facbb5..e25308a 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationDelegateFactory.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/gesturenav/HistoryNavigationDelegateFactory.java
@@ -11,6 +11,7 @@
 
 import org.chromium.base.BuildInfo;
 import org.chromium.base.Supplier;
+import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeFeatureList;
 import org.chromium.chrome.browser.tab.Tab;
 import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
@@ -63,6 +64,13 @@
         if (!isFeatureFlagEnabled() || tab.getActivity() == null) return DEFAULT;
 
         return new HistoryNavigationDelegate() {
+            // TODO(jinsukkim): Avoid getting activity from tab.
+            private final Supplier<BottomSheetController> mController = () -> {
+                ChromeActivity activity = tab.getActivity();
+                return activity == null || activity.isActivityFinishingOrDestroyed()
+                        ? null
+                        : activity.getBottomSheetController();
+            };
             private Runnable mInsetsChangeRunnable;
 
             @Override
@@ -77,8 +85,7 @@
 
             @Override
             public Supplier<BottomSheetController> getBottomSheetController() {
-                // TODO(jinsukkim): Avoid getting activity from tab.
-                return tab.getActivity()::getBottomSheetController;
+                return mController;
             }
 
             @TargetApi(Build.VERSION_CODES.O)
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
index 5d866a2..63c7a02 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AndroidPaymentAppFinder.java
@@ -13,6 +13,7 @@
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.payments.PaymentAppFactory.PaymentAppCreatedCallback;
 import org.chromium.chrome.browser.payments.PaymentManifestVerifier.ManifestVerifyCallback;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.components.payments.PaymentManifestDownloader;
 import org.chromium.components.payments.PaymentManifestParser;
 import org.chromium.content_public.browser.WebContents;
@@ -151,15 +152,11 @@
         // For non-URI payment method names, only names published by W3C should be supported. Keep
         // this in sync with manifest_verifier.cc.
         Set<String> supportedNonUriPaymentMethods = new HashSet<>();
-        // https://w3c.github.io/payment-method-basic-card/
-        supportedNonUriPaymentMethods.add("basic-card");
-        // https://w3c.github.io/webpayments/proposals/interledger-payment-method.html
-        supportedNonUriPaymentMethods.add("interledger");
-        // https://w3c.github.io/webpayments-methods-credit-transfer-direct-debit/
-        supportedNonUriPaymentMethods.add("payee-credit-transfer");
-        supportedNonUriPaymentMethods.add("payer-credit-transfer");
-        // https://w3c.github.io/webpayments-methods-tokenization/
-        supportedNonUriPaymentMethods.add("tokenized-card");
+        supportedNonUriPaymentMethods.add(MethodStrings.BASIC_CARD);
+        supportedNonUriPaymentMethods.add(MethodStrings.INTERLEDGER);
+        supportedNonUriPaymentMethods.add(MethodStrings.PAYEE_CREDIT_TRANSFER);
+        supportedNonUriPaymentMethods.add(MethodStrings.PAYER_CREDIT_TRANSFER);
+        supportedNonUriPaymentMethods.add(MethodStrings.TOKENIZED_CARD);
 
         mNonUriPaymentMethods = new HashSet<>();
         mUriPaymentMethods = new HashSet<>();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
index 2c8ae59b..d276f2599 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/AutofillPaymentApp.java
@@ -15,6 +15,7 @@
 import org.chromium.chrome.browser.autofill.PersonalDataManager;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
 import org.chromium.chrome.browser.autofill.PersonalDataManager.CreditCard;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.payments.mojom.PaymentDetailsModifier;
 import org.chromium.payments.mojom.PaymentMethodData;
@@ -64,11 +65,11 @@
                            ChromeFeatureList.WEB_PAYMENTS_RETURN_GOOGLE_PAY_IN_BASIC_CARD));
         List<PaymentInstrument> instruments = new ArrayList<>(cards.size());
 
-        if (methodDataMap.containsKey(BasicCardUtils.BASIC_CARD_METHOD_NAME)) {
+        if (methodDataMap.containsKey(MethodStrings.BASIC_CARD)) {
             mBasicCardSupportedNetworks = BasicCardUtils.convertBasicCardToNetworks(
-                    methodDataMap.get(BasicCardUtils.BASIC_CARD_METHOD_NAME));
+                    methodDataMap.get(MethodStrings.BASIC_CARD));
             mBasicCardTypes = BasicCardUtils.convertBasicCardToTypes(
-                    methodDataMap.get(BasicCardUtils.BASIC_CARD_METHOD_NAME));
+                    methodDataMap.get(MethodStrings.BASIC_CARD));
         } else {
             mBasicCardTypes = new HashSet<>(BasicCardUtils.getCardTypes().values());
             mBasicCardTypes.add(CardType.UNKNOWN);
@@ -110,7 +111,7 @@
         String methodName = null;
         if (mBasicCardSupportedNetworks != null
                 && mBasicCardSupportedNetworks.contains(card.getBasicCardIssuerNetwork())) {
-            methodName = BasicCardUtils.BASIC_CARD_METHOD_NAME;
+            methodName = MethodStrings.BASIC_CARD;
         } else if (mSupportedMethods.contains(card.getBasicCardIssuerNetwork())) {
             methodName = card.getBasicCardIssuerNetwork();
         }
@@ -135,7 +136,7 @@
     @Override
     public Set<String> getAppMethodNames() {
         Set<String> methods = new HashSet<>(BasicCardUtils.getNetworks().values());
-        methods.add(BasicCardUtils.BASIC_CARD_METHOD_NAME);
+        methods.add(MethodStrings.BASIC_CARD);
         return methods;
     }
 
@@ -148,7 +149,7 @@
     public static boolean merchantSupportsAutofillPaymentInstruments(
             Map<String, PaymentMethodData> methodDataMap) {
         assert methodDataMap != null;
-        PaymentMethodData basicCardData = methodDataMap.get(BasicCardUtils.BASIC_CARD_METHOD_NAME);
+        PaymentMethodData basicCardData = methodDataMap.get(MethodStrings.BASIC_CARD);
         if (basicCardData != null) {
             Set<String> basicCardNetworks =
                     BasicCardUtils.convertBasicCardToNetworks(basicCardData);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/BasicCardUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/BasicCardUtils.java
index d37f3ed..4c2f9ba8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/BasicCardUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/BasicCardUtils.java
@@ -16,9 +16,6 @@
 
 /** Basic-card utils */
 public class BasicCardUtils {
-    /** The 'basic-card' method name. */
-    public static final String BASIC_CARD_METHOD_NAME = "basic-card";
-
     /** The total number of all possible card types (i.e., credit, debit, prepaid, unknown). */
     public static final int TOTAL_NUMBER_OF_CARD_TYPES = 4;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
index ba309285..8bd8db9 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/CardEditor.java
@@ -31,6 +31,7 @@
 import org.chromium.chrome.browser.widget.prefeditor.EditorFieldModel.EditorFieldValidator;
 import org.chromium.chrome.browser.widget.prefeditor.EditorFieldModel.EditorValueIconGenerator;
 import org.chromium.chrome.browser.widget.prefeditor.EditorModel;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.payments.mojom.PaymentMethodData;
 
@@ -311,7 +312,7 @@
     public void addAcceptedPaymentMethodIfRecognized(PaymentMethodData data) {
         assert data != null;
         String method = data.supportedMethod;
-        if (BasicCardUtils.BASIC_CARD_METHOD_NAME.equals(method)) {
+        if (MethodStrings.BASIC_CARD.equals(method)) {
             Set<String> basicCardNetworks = BasicCardUtils.convertBasicCardToNetworks(data);
             mAcceptedBasicCardIssuerNetworks.addAll(basicCardNetworks);
             for (String network : basicCardNetworks) {
@@ -416,7 +417,7 @@
 
             String methodName = card.getBasicCardIssuerNetwork();
             if (mAcceptedBasicCardIssuerNetworks.contains(methodName)) {
-                methodName = BasicCardUtils.BASIC_CARD_METHOD_NAME;
+                methodName = MethodStrings.BASIC_CARD;
             }
             assert methodName != null;
 
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index 7dc6f28a..be1989f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -55,6 +55,7 @@
 import org.chromium.chrome.browser.widget.prefeditor.EditableOption;
 import org.chromium.components.payments.CurrencyFormatter;
 import org.chromium.components.payments.ErrorStrings;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.components.payments.OriginSecurityChecker;
 import org.chromium.components.payments.PaymentDetailsConverter;
 import org.chromium.components.payments.PaymentHandlerHost;
@@ -232,8 +233,6 @@
     public static final int SUGGESTIONS_LIMIT = 4;
 
     private static final String TAG = "PaymentRequest";
-    private static final String ANDROID_PAY_METHOD_NAME = "https://android.com/pay";
-    private static final String PAY_WITH_GOOGLE_METHOD_NAME = "https://google.com/pay";
     // Reverse order of the comparator to sort in descending order of completeness scores.
     private static final Comparator<Completable> COMPLETENESS_COMPARATOR =
             (a, b) -> (compareCompletablesByCompleteness(b, a));
@@ -578,7 +577,7 @@
 
         mMethodData = getValidatedMethodData(methodData, googlePayBridgeActivated, mCardEditor);
         if (googlePayBridgeActivated) {
-            PaymentMethodData data = mMethodData.get(PAY_WITH_GOOGLE_METHOD_NAME);
+            PaymentMethodData data = mMethodData.get(MethodStrings.GOOGLE_PAY);
             mSkipToGPayHelper = new SkipToGPayHelper(options, data.gpayBridgeData);
         }
 
@@ -589,7 +588,7 @@
         }
 
         mQueryForQuota = new HashMap<>(mMethodData);
-        if (mQueryForQuota.containsKey("basic-card")
+        if (mQueryForQuota.containsKey(MethodStrings.BASIC_CARD)
                 && PaymentsExperimentalFeatures.isEnabled(
                         ChromeFeatureList.STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT)) {
             PaymentMethodData paymentMethodData = new PaymentMethodData();
@@ -660,8 +659,8 @@
         boolean requestedMethodGoogle = false;
         boolean requestedMethodOther = false;
         for (String methodName : mMethodData.keySet()) {
-            if (methodName.equals(ANDROID_PAY_METHOD_NAME)
-                    || methodName.equals(PAY_WITH_GOOGLE_METHOD_NAME)) {
+            if (methodName.equals(MethodStrings.ANDROID_PAY)
+                    || methodName.equals(MethodStrings.GOOGLE_PAY)) {
                 requestedMethodGoogle = true;
             } else if (methodName.startsWith(UrlConstants.HTTPS_URL_PREFIX)) {
                 // Any method that starts with https and is not Android pay or Google pay is in the
@@ -1018,7 +1017,7 @@
                 // If skip-to-GPay flow is activated, ignore all other payment methods, which can be
                 // either "basic-card" or "https://android.com/pay". The latter is safe to ignore
                 // because merchant has already requested Google Pay.
-                if (!method.equals(PAY_WITH_GOOGLE_METHOD_NAME)) continue;
+                if (!method.equals(MethodStrings.GOOGLE_PAY)) continue;
                 if (methodData[i].gpayBridgeData != null
                         && !methodData[i].gpayBridgeData.stringifiedData.isEmpty()) {
                     methodData[i].stringifiedData = methodData[i].gpayBridgeData.stringifiedData;
@@ -1908,8 +1907,8 @@
             if (mModifiers != null && mModifiers.containsKey(instrumentMethodName)) {
                 modifiers.put(instrumentMethodName, mModifiers.get(instrumentMethodName));
             }
-            if (instrumentMethodName.equals(ANDROID_PAY_METHOD_NAME)
-                    || instrumentMethodName.equals(PAY_WITH_GOOGLE_METHOD_NAME)) {
+            if (instrumentMethodName.equals(MethodStrings.ANDROID_PAY)
+                    || instrumentMethodName.equals(MethodStrings.GOOGLE_PAY)) {
                 isGooglePaymentInstrument = true;
             }
         }
@@ -2300,8 +2299,8 @@
 
                     if (instrument.isAutofillInstrument()) {
                         mJourneyLogger.setEventOccurred(Event.AVAILABLE_METHOD_BASIC_CARD);
-                    } else if (instrumentMethodNames.contains(PAY_WITH_GOOGLE_METHOD_NAME)
-                            || instrumentMethodNames.contains(ANDROID_PAY_METHOD_NAME)) {
+                    } else if (instrumentMethodNames.contains(MethodStrings.GOOGLE_PAY)
+                            || instrumentMethodNames.contains(MethodStrings.ANDROID_PAY)) {
                         mJourneyLogger.setEventOccurred(Event.AVAILABLE_METHOD_GOOGLE);
                     } else {
                         mJourneyLogger.setEventOccurred(Event.AVAILABLE_METHOD_OTHER);
@@ -2476,8 +2475,8 @@
      * @return Whether client has been disconnected.
      */
     private boolean disconnectForStrictShow() {
-        if (!mIsUserGestureShow || !mMethodData.containsKey("basic-card") || mHasEnrolledInstrument
-                || mHasNonAutofillInstrument
+        if (!mIsUserGestureShow || !mMethodData.containsKey(MethodStrings.BASIC_CARD)
+                || mHasEnrolledInstrument || mHasNonAutofillInstrument
                 || !PaymentsExperimentalFeatures.isEnabled(
                         ChromeFeatureList.STRICT_HAS_ENROLLED_AUTOFILL_INSTRUMENT)) {
             return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
index 12a94ccd..53abf87 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/ServiceWorkerPaymentApp.java
@@ -11,6 +11,7 @@
 import androidx.annotation.Nullable;
 
 import org.chromium.chrome.browser.ChromeActivity;
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.components.payments.PaymentHandlerHost;
 import org.chromium.content_public.browser.WebContents;
 import org.chromium.payments.mojom.PaymentDetailsModifier;
@@ -252,8 +253,7 @@
     private boolean isOnlySupportBasiccard(Map<String, PaymentMethodData> methodDataMap) {
         Set<String> requestMethods = new HashSet<>(methodDataMap.keySet());
         requestMethods.retainAll(mMethodNames);
-        return requestMethods.size() == 1
-                && requestMethods.contains(BasicCardUtils.BASIC_CARD_METHOD_NAME);
+        return requestMethods.size() == 1 && requestMethods.contains(MethodStrings.BASIC_CARD);
     }
 
     // Matches |requestMethodData|.supportedTypes and |requestMethodData|.supportedNetwokrs for
@@ -345,8 +345,7 @@
     @Override
     public boolean isValidForPaymentMethodData(String method, @Nullable PaymentMethodData data) {
         boolean isSupportedMethod = super.isValidForPaymentMethodData(method, data);
-        if (isSupportedMethod && BasicCardUtils.BASIC_CARD_METHOD_NAME.equals(method)
-                && data != null) {
+        if (isSupportedMethod && MethodStrings.BASIC_CARD.equals(method) && data != null) {
             return matchBasiccardCapabilities(data);
         }
         return isSupportedMethod;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/SkipToGPayHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/SkipToGPayHelper.java
index a1d25d5..0c0268e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/SkipToGPayHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/SkipToGPayHelper.java
@@ -8,6 +8,7 @@
 import org.json.JSONObject;
 import org.json.JSONTokener;
 
+import org.chromium.components.payments.MethodStrings;
 import org.chromium.payments.mojom.GooglePaymentMethodData;
 import org.chromium.payments.mojom.PaymentAddress;
 import org.chromium.payments.mojom.PaymentDetails;
@@ -87,7 +88,7 @@
      * @return True if the patch is successful, false if any error occurred.
      */
     public boolean patchPaymentResponse(PaymentResponse response) {
-        assert response.methodName.equals("https://google.com/pay");
+        assert response.methodName.equals(MethodStrings.GOOGLE_PAY);
 
         // If GPay fails to return data, pass through without handling.
         if (response.stringifiedDetails.isEmpty()) return true;
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 27986bd..235768c1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_am.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">የማያ ገጽ ቀረጻ</translation>
 <translation id="1111673857033749125">በሌሎች መሣሪያዎችዎ ላይ የተቀመጡ ዕልባቶችዎ እዚህ ብቅ ይላሉ።</translation>
 <translation id="1113597929977215864">የተቃለለ እይታን አሳይ</translation>
-<translation id="1121094540300013208">የአጠቃቀም እና የብልሽት ሪፖርቶች</translation>
 <translation id="1124772482545689468">ተጠቃሚ</translation>
 <translation id="1129510026454351943">ዝርዝሮች፦ <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ውርድን በመጠባበቅ ላይ}one{# ውርዶችን በመጠባበቅ ላይ}other{# ውርዶችን በመጠባበቅ ላይ}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">በመጠበቅ ላይ</translation>
 <translation id="8970887620466824814">የሆነ ችግር ተፈጥሯል።</translation>
 <translation id="8972098258593396643">ወደ ነባሪው አቃፊ ይውረድ?</translation>
-<translation id="8986494364107987395">የአጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶች በራስ ሰር ወደ Google ይላኩ።</translation>
 <translation id="8993760627012879038">አዲስ ትር በማንነት የማያሳውቅ ሁነታ ውስጥ ክፈት</translation>
 <translation id="8998729206196772491">በ<ph name="MANAGED_DOMAIN" /> ወደሚተዳደር መለያ እየገቡና ሙሉውን የChrome ውሂብዎ ቁጥጥር ለአስተዳዳሪው እየሰጡ ነው። የእርስዎ ውሂብ እስከመጨረሻው ከዚህ መለያ ጋር ይተሳሰራል። ከChrome ዘግቶ መውጣት ውሂብዎን ከዚህ መሣሪያ ይሰርዘዋል፣ ነገር ግን በእርስዎ የGoogle መለያ ላይ እንደተከማቸ ይቆያል።</translation>
 <translation id="9019902583201351841">በእርስዎ ወላጆች የሚቀናበር</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 32eab8c5..0a67c30 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ar.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">التقاط الشاشة</translation>
 <translation id="1111673857033749125">ستظهر هنا الإشارات التي تم حفظها على أجهزتك الأخرى.</translation>
 <translation id="1113597929977215864">إظهار العرض المبسَّط</translation>
-<translation id="1121094540300013208">تقارير الاستخدام والأعطال</translation>
 <translation id="1124772482545689468">المستخدم</translation>
 <translation id="1129510026454351943">التفاصيل: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{هناك عملية تنزيل واحدة مُعلَّقة.}zero{هناك # عملية تنزيل مُعلَّقة.}two{هناك عمليتا تنزيل (#) مُعلَّقتان.}few{هناك # عمليات تنزيل مُعلَّقة.}many{هناك # عملية تنزيل مُعلَّقة.}other{هناك # عملية تنزيل مُعلَّقة.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">في الانتظار</translation>
 <translation id="8970887620466824814">حدث خطأ.</translation>
 <translation id="8972098258593396643">هل تريد التنزيل إلى المجلد التلقائي؟</translation>
-<translation id="8986494364107987395">‏إرسال إحصاءات الاستخدام وتقارير الأعطال إلى Google تلقائيًا</translation>
 <translation id="8993760627012879038">فتح علامة تبويب جديدة في وضع التصفّح المتخفّي</translation>
 <translation id="8998729206196772491">‏يتم تسجيل دخولك باستخدام حساب تتم إدارته من خلال <ph name="MANAGED_DOMAIN" /> ومنح مشرفه الحق في التحكم في بياناتك على Chrome. سيؤدي ذلك إلى جعل بياناتك مرتبطة دائمًا بهذا الحساب. كما سيؤدي الخروج من Chrome إلى حذف بياناتك من هذا الجهاز، ولكن ستظل هذه البيانات مخزَّنة على حسابك في Google.</translation>
 <translation id="9019902583201351841">يديره والداك</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 da58001..6646b932 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bg.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Заснемане на екрана</translation>
 <translation id="1111673857033749125">Тук ще се показват отметките, които сте запазили на другите си устройства.</translation>
 <translation id="1113597929977215864">Показване на опростения изглед</translation>
-<translation id="1121094540300013208">Отчети за употребата и сигнали за сривове</translation>
 <translation id="1124772482545689468">Потребител</translation>
 <translation id="1129510026454351943">Подробности: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Предстои 1 изтегляне.}other{Предстоят # изтегляния.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">изчаква</translation>
 <translation id="8970887620466824814">Нещо се обърка.</translation>
 <translation id="8972098258593396643">Да се изтегли ли файлът в стандартната папка?</translation>
-<translation id="8986494364107987395">Автоматично изпращане до Google на статистически данни за използването на Chrome и сигнали за сривове</translation>
 <translation id="8993760627012879038">Отваряне на нов раздел в режим „инкогнито“</translation>
 <translation id="8998729206196772491">Влизате с профил, управляван от <ph name="MANAGED_DOMAIN" />, и предоставяте на администратора му контрол върху данните си в Chrome. Те ще се свържат за постоянно с този профил. При излизане от профила в браузъра информацията ви ще се изтрие от устройството, но ще продължи да се съхранява в профила ви в Google.</translation>
 <translation id="9019902583201351841">Управлява се от родителите ви</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
index 81df572b..f861d16d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_bn.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">স্ক্রিন ক্যাপচার</translation>
 <translation id="1111673857033749125">আপনার অন্যান্য ডিভাইসে সেভ করা বুকমার্কগুলি এখানে দেখা যাবে।</translation>
 <translation id="1113597929977215864">সরলীকৃত ভিউ দেখান</translation>
-<translation id="1121094540300013208">ব্যবহার এবং ক্র্যাশ প্রতিবেদনগুলি</translation>
 <translation id="1124772482545689468">ব্যবহারকারী</translation>
 <translation id="1129510026454351943">বিবরণ: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{১টি ডাউনলোড বাকি আছে।}one{#টি ডাউনলোড বাকি আছে।}other{#টি ডাউনলোড বাকি আছে।}}</translation>
@@ -1067,7 +1066,6 @@
 <translation id="8965591936373831584">বাকি আছে</translation>
 <translation id="8970887620466824814">কিছু সমস্যা হয়েছে।</translation>
 <translation id="8972098258593396643">ডিফল্ট ফোল্ডারে ডাউনলোড করবেন?</translation>
-<translation id="8986494364107987395">ব্যবহারের পরিসংখ্যান এবং ক্র্যাশ প্রতিবেদনগুলি স্বয়ংক্রিয়ভাবে Google-এ পাঠান</translation>
 <translation id="8993760627012879038">ছদ্মবেশী মোডে একটি নতুন ট্যাব খুলুন</translation>
 <translation id="8998729206196772491">আপনি <ph name="MANAGED_DOMAIN" /> দ্বারা পরিচালিত একটি অ্যাকাউন্টের মাধ্যমে সাইন-ইন করছেন এবং এর অ্যাডমিনিস্ট্রেটরকে আপনার Chrome ডেটা নিয়ন্ত্রণ করতে দিচ্ছেন৷ আপনার ডেটা এই অ্যাকাউন্টের সাথে স্থায়ীভাবে আবদ্ধ হবে৷ Chrome থেকে সাইন-আউট করলে এই ডিভাইস থেকে আপনার ডেটা মুছে ফেলা হবে, কিন্তু এটা আপনার Google অ্যাকাউন্টে সঞ্চিত থাকবে।</translation>
 <translation id="9019902583201351841">আপনার পিতামাতার দ্বারা পরিচালিত</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 25c850e..1685cadb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ca.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Captura de pantalla</translation>
 <translation id="1111673857033749125">Les adreces d'interès desades als altres dispositius es mostraran aquí.</translation>
 <translation id="1113597929977215864">Mostra la visualització simplificada</translation>
-<translation id="1121094540300013208">Informes d'ús i d'error</translation>
 <translation id="1124772482545689468">Usuari</translation>
 <translation id="1129510026454351943">Detalls: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Hi ha 1 baixada pendent.}other{Hi ha # baixades pendents.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">pendent</translation>
 <translation id="8970887620466824814">S'ha produït un error.</translation>
 <translation id="8972098258593396643">Vols baixar el fitxer a la carpeta predeterminada?</translation>
-<translation id="8986494364107987395">Envia automàticament estadístiques d'ús i informes d'error a Google</translation>
 <translation id="8993760627012879038">Obre una pestanya nova en mode d'incògnit</translation>
 <translation id="8998729206196772491">Estàs iniciant la sessió amb un compte gestionat per <ph name="MANAGED_DOMAIN" /> i estàs donant a l'administrador el control de les teves dades de Chrome. Les dades passaran a estar vinculades a aquest compte permanentment. Si tanques la sessió de Chrome, se suprimiran les teves dades d'aquest dispositiu, però continuaran emmagatzemades al teu compte de Google.</translation>
 <translation id="9019902583201351841">Gestionat pels pares</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 547ccbd..99ffc9fa 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_cs.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Snímky obrazovky</translation>
 <translation id="1111673857033749125">Zde se objeví záložky, které jste si uložili v ostatních zařízeních.</translation>
 <translation id="1113597929977215864">Zapnout zjednodušené zobrazení</translation>
-<translation id="1121094540300013208">Zprávy o využití a selhání</translation>
 <translation id="1124772482545689468">Uživatel</translation>
 <translation id="1129510026454351943">Podrobnosti: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 nevyřízené stahování.}few{# nevyřízená stahování.}many{# nevyřízeného stahování.}other{# nevyřízených stahování.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">nevyřízeno</translation>
 <translation id="8970887620466824814">Došlo k chybě.</translation>
 <translation id="8972098258593396643">Stáhnout do výchozí složky?</translation>
-<translation id="8986494364107987395">Automaticky posílat společnosti Google statistiky používání a zprávy o selhání</translation>
 <translation id="8993760627012879038">Otevřít novou kartu v anonymním režimu</translation>
 <translation id="8998729206196772491">Přihlašujete se pomocí účtu spravovaného doménou <ph name="MANAGED_DOMAIN" /> a poskytujete jeho správci kontrolu nad svými daty prohlížeče Chrome. Vaše data budou trvale přidružena k tomuto účtu. Odhlášením z Chromu svá data smažete z tohoto zařízení, ve vašem účtu Google však uložena zůstanou.</translation>
 <translation id="9019902583201351841">Spravováno vašimi rodiči</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 3ee3b478..24119414 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_da.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Screenshot</translation>
 <translation id="1111673857033749125">Bogmærker, der er gemt på dine andre enheder, vises her.</translation>
 <translation id="1113597929977215864">Se enkel visning</translation>
-<translation id="1121094540300013208">Brugs- og nedbrudsrapporter</translation>
 <translation id="1124772482545689468">Bruger</translation>
 <translation id="1129510026454351943">Info: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download afventer.}one{# download afventer.}other{# downloads afventer.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">afventer</translation>
 <translation id="8970887620466824814">Der opstod en fejl.</translation>
 <translation id="8972098258593396643">Vil du downloade til standardmappen?</translation>
-<translation id="8986494364107987395">Send automatisk brugsstatistikker og nedbrudsrapporter til Google</translation>
 <translation id="8993760627012879038">Åbn en ny fane i inkognitotilstand</translation>
 <translation id="8998729206196772491">Du er ved at logge ind med en konto, der administreres af <ph name="MANAGED_DOMAIN" />, hvilket giver administratoren kontrol over dine Chrome-data. Dine data tilknyttes denne konto permanent. Hvis du logger ud af Chrome, slettes dine data fra denne enhed, men de forbliver gemt på din Google-konto.</translation>
 <translation id="9019902583201351841">Administreret af dine forældre</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 1b6b3ef0..874df1f 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_de.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Bildschirmaufnahme</translation>
 <translation id="1111673857033749125">Hier werden die Lesezeichen angezeigt, die auf Ihren anderen Geräten gespeichert sind.</translation>
 <translation id="1113597929977215864">Vereinfachte Ansicht anzeigen</translation>
-<translation id="1121094540300013208">Nutzungs- und Absturzberichte</translation>
 <translation id="1124772482545689468">Nutzer</translation>
 <translation id="1129510026454351943">Details: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 Download ausstehend.}other{# Downloads ausstehend.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">ausstehend</translation>
 <translation id="8970887620466824814">Es gab ein Problem.</translation>
 <translation id="8972098258593396643">In Standardordner herunterladen?</translation>
-<translation id="8986494364107987395">Nutzungsstatistiken und Absturzberichte automatisch an Google senden</translation>
 <translation id="8993760627012879038">Neuen Tab im Inkognitomodus öffnen</translation>
 <translation id="8998729206196772491">Sie melden sich mit einem von <ph name="MANAGED_DOMAIN" /> verwalteten Konto an und geben dem Administrator der Domain Kontrolle über Ihre Chrome-Daten. Die Daten werden diesem Konto dauerhaft zugeordnet. Wenn Sie sich von Chrome abmelden, werden Ihre Daten auf dem Gerät gelöscht, bleiben jedoch in Ihrem Google-Konto erhalten.</translation>
 <translation id="9019902583201351841">Von deinen Eltern verwaltet</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 5fe8756..72e570cb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_el.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Λήψη οθόνης</translation>
 <translation id="1111673857033749125">Οι σελιδοδείκτες που είναι αποθηκευμένοι σε άλλες συσκευές θα εμφανίζονται εδώ.</translation>
 <translation id="1113597929977215864">Εμφάνιση απλοποιημένης προβολής</translation>
-<translation id="1121094540300013208">Αναφορές χρήσης και σφαλμάτων</translation>
 <translation id="1124772482545689468">Χρήστης</translation>
 <translation id="1129510026454351943">Λεπτομέρειες: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 λήψη σε εκκρεμότητα.}other{# λήψεις σε εκκρεμότητα.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">σε εκκρεμότητα</translation>
 <translation id="8970887620466824814">Προέκυψε πρόβλημα.</translation>
 <translation id="8972098258593396643">Λήψη στον προεπιλεγμένο φάκελο;</translation>
-<translation id="8986494364107987395">Αυτόματη αποστολή στατιστικών στοιχείων χρήσης και αναφορών σφαλμάτων στην Google</translation>
 <translation id="8993760627012879038">Άνοιγμα καρτέλας σε κατάσταση ανώνυμης περιήγησης</translation>
 <translation id="8998729206196772491">Πρόκειται να συνδεθείτε με έναν λογαριασμό του οποίου η διαχείριση γίνεται από <ph name="MANAGED_DOMAIN" /> και παραχωρείτε στον διαχειριστή του τον έλεγχο της διαχείρισης των δεδομένων σας στο Chrome. Τα δεδομένα σας θα συσχετιστούν οριστικά με αυτόν τον λογαριασμό. Η αποσύνδεση από το Chrome θα διαγράψει τα δεδομένα σας από αυτήν τη συσκευή, αλλά θα διατηρηθούν αποθηκευμένα στον Λογαριασμό σας Google.</translation>
 <translation id="9019902583201351841">Διαχειρίζεται από τους γονείς σου</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 c20e91f..19de57e 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Screen Capture</translation>
 <translation id="1111673857033749125">Bookmarks saved on your other devices will appear here.</translation>
 <translation id="1113597929977215864">Show simplified view</translation>
-<translation id="1121094540300013208">Usage and crash reports</translation>
 <translation id="1124772482545689468">User</translation>
 <translation id="1129510026454351943">Details: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download pending.}other{# downloads pending.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">pending</translation>
 <translation id="8970887620466824814">Something went wrong.</translation>
 <translation id="8972098258593396643">Download to default folder?</translation>
-<translation id="8986494364107987395">Automatically send usage statistics and crash reports to Google</translation>
 <translation id="8993760627012879038">Open a new tab in Incognito mode</translation>
 <translation id="8998729206196772491">You are signing in with an account managed by <ph name="MANAGED_DOMAIN" /> and giving its administrator control over your Chrome data. Your data will become permanently tied to this account. Signing out of Chrome will delete your data from this device, but it will remain stored in your Google Account.</translation>
 <translation id="9019902583201351841">Managed by your parents</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 b2bfa21..20459d6 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Captura de pantalla</translation>
 <translation id="1111673857033749125">Los favoritos guardados en tus otros dispositivos aparecerán aquí.</translation>
 <translation id="1113597929977215864">Mostrar la vista simplificada</translation>
-<translation id="1121094540300013208">Informes de uso y de fallos</translation>
 <translation id="1124772482545689468">Usuario</translation>
 <translation id="1129510026454351943">Detalles: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 descarga pendiente}other{# descargas pendientes}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">pendiente</translation>
 <translation id="8970887620466824814">Se produjo un error</translation>
 <translation id="8972098258593396643">¿Deseas descargarlo a la carpeta predeterminada?</translation>
-<translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
 <translation id="8993760627012879038">Abrir ventana nueva en modo de navegación incógnito</translation>
 <translation id="8998729206196772491">Estás accediendo con una cuenta administrada por <ph name="MANAGED_DOMAIN" /> y dándole permiso a su administrador para que controle tus datos de Chrome. Tus datos se vincularán de forma permanente a esta cuenta. Si sales de Chrome, tus datos se borrarán en este dispositivo, pero quedarán guardados en tu cuenta de Google.</translation>
 <translation id="9019902583201351841">Administrado por tus padres</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 f749aa9..424d2ac 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_es.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Captura de pantalla</translation>
 <translation id="1111673857033749125">Aquí aparecen los marcadores que hayas guardado en otros dispositivos.</translation>
 <translation id="1113597929977215864">Mostrar vista simplificada</translation>
-<translation id="1121094540300013208">Informes de uso y sobre fallos</translation>
 <translation id="1124772482545689468">Usuario</translation>
 <translation id="1129510026454351943">Detalles: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Hay 1 descarga pendiente.}other{Hay # descargas pendientes.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">pendiente</translation>
 <translation id="8970887620466824814">Ha ocurrido un error.</translation>
 <translation id="8972098258593396643">¿Quieres descargarlo en la carpeta predeterminada?</translation>
-<translation id="8986494364107987395">Enviar automáticamente estadísticas de uso e informes sobre fallos a Google</translation>
 <translation id="8993760627012879038">Abre una nueva pestaña en modo de incógnito</translation>
 <translation id="8998729206196772491">Estás iniciando sesión con una cuenta gestionada por <ph name="MANAGED_DOMAIN" />, lo que significa que vas a proporcionar a su administrador el control sobre tus datos de Chrome. Los datos se vincularán de forma permanente a esta cuenta. Si cierras sesión en Chrome, se eliminarán los datos de este dispositivo, pero permanecerán almacenados en tu cuenta de Google.</translation>
 <translation id="9019902583201351841">Administrado por tus padres</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
index 23fefca..cb53a48e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_et.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Kuva jäädvustamine</translation>
 <translation id="1111673857033749125">Siin kuvatakse teie teistes seadmetes salvestatud järjehoidjad.</translation>
 <translation id="1113597929977215864">Kuva lihtsustatud vaade</translation>
-<translation id="1121094540300013208">Kasutus- ja krahhiaruanded</translation>
 <translation id="1124772482545689468">Kasutaja</translation>
 <translation id="1129510026454351943">Üksikasjad: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 allalaadimine on ootel.}other{# allalaadimist on ootel.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">ootel</translation>
 <translation id="8970887620466824814">Midagi läks valesti.</translation>
 <translation id="8972098258593396643">Kas soovite alla laadida vaikekausta?</translation>
-<translation id="8986494364107987395">Saada kasutusstatistika ja krahhiaruanded automaatselt Google'ile</translation>
 <translation id="8993760627012879038">Uue vahelehe avamine inkognito režiimis</translation>
 <translation id="8998729206196772491">Logite sisse kontoga, mida haldab <ph name="MANAGED_DOMAIN" />, ja annate selle administraatorile üle Chrome'i andmete juhtimise. Teie andmed seotakse jäädavalt selle kontoga. Chrome'ist väljalogimisel kustutatakse teie andmed sellest seadmest, kuid need jäävad alles teie Google'i kontole.</translation>
 <translation id="9019902583201351841">Vanemate hallatud</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 4f7ed028..b7d2e4c3 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fa.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">گرفتن عکس از صفحه‌</translation>
 <translation id="1111673857033749125">نشانک‌های ذخیره‌شده در سایر دستگاه‌های شما در اینجا نشان داده می‌شوند.</translation>
 <translation id="1113597929977215864">نمایش نمای ساده‌شده</translation>
-<translation id="1121094540300013208">آمار استفاده و گزارش‌های خرابی</translation>
 <translation id="1124772482545689468">کاربر</translation>
 <translation id="1129510026454351943">جزئیات: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{۱ بارگیری در انتظار است.}one{# بارگیری در انتظار است.}other{# بارگیری در انتظار است.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">در انتظار</translation>
 <translation id="8970887620466824814">مشکلی پیش آمد.</translation>
 <translation id="8972098258593396643">در پوشه پیش‌فرض بارگیری شود؟</translation>
-<translation id="8986494364107987395">‏ارسال خودکار آمار کاربرد و گزارش‌های خرابی به Google</translation>
 <translation id="8993760627012879038">باز کردن برگه جدیدی در حالت ناشناس</translation>
 <translation id="8998729206196772491">‏هم‌اکنون درحال ورود به سیستم با یک حساب مدیریت‌شده توسط <ph name="MANAGED_DOMAIN" /> و ارائه کنترل داده‌های Chrome خودتان به سرپرست این حساب هستید. داده‌هایتان به‌طور دائم به این حساب مرتبط می‌شوند. با خروج از Chrome، داده‌هایتان از این دستگاه حذف می‌شوند اما همچنان در حساب Google شما باقی می‌ماند.</translation>
 <translation id="9019902583201351841">مدیریت شده توسط والدین شما</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 af697f9e..2b665ab 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fi.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Kuvakaappaus</translation>
 <translation id="1111673857033749125">Muilla laitteilla tallentamasi kirjanmerkit näytetään täällä.</translation>
 <translation id="1113597929977215864">Näytä yksinkertaistettu näkymä</translation>
-<translation id="1121094540300013208">Käyttö- ja virheraportit</translation>
 <translation id="1124772482545689468">Käyttäjä</translation>
 <translation id="1129510026454351943">Tiedot: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 lataus odottaa}other{# latausta odottaa}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">odottaa</translation>
 <translation id="8970887620466824814">Tapahtui virhe.</translation>
 <translation id="8972098258593396643">Ladataanko tiedosto oletuskansioon?</translation>
-<translation id="8986494364107987395">Lähetä Googlelle käyttötilastoja ja virheraportteja automaattisesti</translation>
 <translation id="8993760627012879038">Avaa uusi välilehti incognito-tilassa</translation>
 <translation id="8998729206196772491">Olet kirjautumassa sisään verkkotunnuksen <ph name="MANAGED_DOMAIN" /> hallinnoimalla tilillä ja antamassa sen järjestelmänvalvojalle oikeuden hallita Chrome-tietojasi. Tietosi liitetään pysyvästi tähän tiliin. Chromesta uloskirjautuminen poistaa tietosi tältä laitteelta, mutta ne säilyvät Google-tililläsi.</translation>
 <translation id="9019902583201351841">Vanhempiesi hallinnoima</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 590ca461..a0a7ef5 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fil.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Screen Capture</translation>
 <translation id="1111673857033749125">Dito lalabas ang mga naka-save na bookmark sa iba mo pang mga device.</translation>
 <translation id="1113597929977215864">Ipakita ang pinasimpleng view</translation>
-<translation id="1121094540300013208">Mga ulat sa paggamit at pag-crash</translation>
 <translation id="1124772482545689468">User</translation>
 <translation id="1129510026454351943">Mga Detalye: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Nakabinbin ang 1 pag-download.}one{Nakabinbin ang # pag-download.}other{Nakabinbin ang # na pag-download.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">nakabinbin</translation>
 <translation id="8970887620466824814">Nagkaproblema.</translation>
 <translation id="8972098258593396643">I-download sa default na folder?</translation>
-<translation id="8986494364107987395">Awtomatikong ipadala ang mga istatistika ng paggamit at mga ulat ng pag-crash sa Google</translation>
 <translation id="8993760627012879038">Magbukas ng bagong tab sa Incognito mode</translation>
 <translation id="8998729206196772491">Nagsa-sign in ka gamit ang isang account na pinamamahalaan ng <ph name="MANAGED_DOMAIN" /> at binibigyan mo ang administrator nito ng kontrol sa iyong data sa Chrome. Permanenteng mauugnay ang iyong data sa account na ito. Made-delete ang data mo sa device na ito kapag nag-sign out ka sa Chrome, ngunit mananatili itong naka-store sa iyong Google Account.</translation>
 <translation id="9019902583201351841">Pinamamahalaan ng iyong mga magulang</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 45a02b8b..feb3a7a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_fr.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Capture d'écran</translation>
 <translation id="1111673857033749125">Les favoris enregistrés sur vos autres appareils s'affichent ici.</translation>
 <translation id="1113597929977215864">Afficher la vue simplifiée</translation>
-<translation id="1121094540300013208">Statistiques d'utilisation et rapports d'erreur</translation>
 <translation id="1124772482545689468">Utilisateur</translation>
 <translation id="1129510026454351943">Détails°: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 téléchargement en attente.}one{# téléchargement en attente.}other{# téléchargements en attente.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">en attente</translation>
 <translation id="8970887620466824814">Un problème est survenu</translation>
 <translation id="8972098258593396643">Télécharger dans le dossier par défaut ?</translation>
-<translation id="8986494364107987395">Envoie automatiquement les statistiques d'utilisation et les rapports d'erreur à Google</translation>
 <translation id="8993760627012879038">Ouvrir un nouvel onglet en mode navigation privée</translation>
 <translation id="8998729206196772491">Vous vous connectez avec un compte géré par <ph name="MANAGED_DOMAIN" />, ce qui permettra à son administrateur de contrôler vos données Chrome. Celles-ci seront définitivement associées à ce compte. Si vous vous déconnectez de Chrome, vos données seront supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation>
 <translation id="9019902583201351841">Géré par tes parents</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
index 32ff056..3c0a520a 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_gu.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">સ્ક્રીન કૅપ્ચર</translation>
 <translation id="1111673857033749125">તમારા અન્ય ઉપકરણો પર સાચવેલા બુકમાર્ક્સ અહીં દેખાશે.</translation>
 <translation id="1113597929977215864">સરળ દૃશ્ય બતાવો</translation>
-<translation id="1121094540300013208">વપરાશ અને ક્રૅશ રિપોર્ટ</translation>
 <translation id="1124772482545689468">વપરાશકર્તા</translation>
 <translation id="1129510026454351943">વિગતો: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ડાઉનલોડ બાકી.}one{# ડાઉનલોડ બાકી.}other{# ડાઉનલોડ બાકી.}}</translation>
@@ -182,6 +181,7 @@
 <translation id="2321958826496381788">જ્યાં સુધી તમે આ અનુકૂળ રીતે વાંચી ન શકો ત્યાં સુધી સ્લાઇડર ખેંચો. ફકરા પર ડબલ-ટેપિંગ પછી ટેક્સ્ટ ઓછામાં ઓછી આટલી મોટી દેખાવી જોઈએ.</translation>
 <translation id="2323763861024343754">સાઇટ સ્ટોરેજ</translation>
 <translation id="2328985652426384049">સાઇન ઇન કરી શકાતું નથી</translation>
+<translation id="2330129964253841015">જો પાસવર્ડમાં ચેડાં થાય તો તમને ચેતવણી આપવામાં આવશે</translation>
 <translation id="2349710944427398404">Chrome દ્વારા ઉપયોગમાં લેવાયેલ કુલ સ્ટોરેજ, એકાઉન્ટ્સ, બુકમાર્ક્સ અને સાચવેલ સેટિંગ્સ સહિત</translation>
 <translation id="2353636109065292463">તમારું ઇન્ટરનેટ કનેક્શન તપાસી રહ્યાં છીએ</translation>
 <translation id="2359808026110333948">આગળ વધો</translation>
@@ -189,6 +189,7 @@
 <translation id="2387895666653383613">ટેક્સ્ટ માપન</translation>
 <translation id="2394602618534698961">તમે ડાઉનલોડ કરો તે ફાઇલો અહીં દેખાશે</translation>
 <translation id="2402980924095424747"><ph name="MEGABYTES" /> MB</translation>
+<translation id="2407481962792080328">જ્યારે તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો છો, ત્યારે આ સુવિધા ચાલુ કરવામાં આવે છે</translation>
 <translation id="2410754283952462441">એકાઉન્ટ પસંદ કરો</translation>
 <translation id="2414886740292270097">ઘાટું</translation>
 <translation id="2416359993254398973">Chromeને આ સાઇટ માટે તમારા કૅમેરાના ઍક્સેસની પરવાનગીની જરૂર પડે છે.</translation>
@@ -197,6 +198,7 @@
 <translation id="2434158240863470628">ડાઉનલોડ પૂર્ણ <ph name="SEPARATOR" /><ph name="BYTES_DOWNLOADED" /></translation>
 <translation id="2440823041667407902">સ્થાન ઍક્સેસ</translation>
 <translation id="2450083983707403292">શું તમે <ph name="FILE_NAME" />ને ફરી ડાઉનલોડ કરવાનું શરૂ કરવા માગો છો?</translation>
+<translation id="246532703174860178">શેર કરો</translation>
 <translation id="2482878487686419369">સૂચનાઓ</translation>
 <translation id="2490684707762498678"><ph name="APP_NAME" /> દ્વારા સંચાલિત</translation>
 <translation id="2494974097748878569">Chromeમાં Google આસિસ્ટંટ</translation>
@@ -1062,7 +1064,6 @@
 <translation id="8965591936373831584">બાકી</translation>
 <translation id="8970887620466824814">કંઈક ખોટું થયું.</translation>
 <translation id="8972098258593396643">ડિફૉલ્ટ ફોલ્ડરમાં ડાઉનલોડ કરીએ?</translation>
-<translation id="8986494364107987395">ઉપયોગિતા આંકડાઓ અને ક્રૅશ રિપોર્ટ Googleને ઑટોમૅટિક રીતે મોકલો</translation>
 <translation id="8993760627012879038">છુપા મોડમાં એક નવું ટૅબ ખોલો</translation>
 <translation id="8998729206196772491">તમે <ph name="MANAGED_DOMAIN" /> દ્વારા મેનેજ એકાઉન્ટમાં સાઇન ઇન કરી રહ્યાં છો અને તમારા Chrome ડેટા પર એનું એડમિન નિયંત્રણ આપી રહ્યાં છો. તમારો ડેટા આ એકાઉન્ટ સાથે કાયમીરૂપે જોડાયેલું રહેશે. Chromeમાંથી સાઇન આઉટ કરવું આ ડિવાઇસ પરથી તમારો ડેટા ડિલીટ કરશે, પરંતુ એ તમારા Google એકાઉન્ટમાં સ્ટોર રહેશે.</translation>
 <translation id="9019902583201351841">તમારા માતાપિતા દ્વારા સંચાલિત</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 2066d4d..de32fd4 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hi.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">स्‍क्रीन कैप्‍चर</translation>
 <translation id="1111673857033749125">आपके अन्‍य डिवाइस पर सहेजे गए बुकमार्क यहां दिखाई देंगे.</translation>
 <translation id="1113597929977215864">सरल बनाया गया व्यू दिखाएं</translation>
-<translation id="1121094540300013208">इस्तेमाल और खराबी रिपोर्ट</translation>
 <translation id="1124772482545689468">उपयोगकर्ता</translation>
 <translation id="1129510026454351943">विवरण: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 डाउनलोड बाकी है.}one{# डाउनलोड बाकी हैं.}other{# डाउनलोड बाकी हैं.}}</translation>
@@ -1060,7 +1059,6 @@
 <translation id="8965591936373831584">डाउनलोड बाकी है</translation>
 <translation id="8970887620466824814">कुछ गड़बड़ी हुई.</translation>
 <translation id="8972098258593396643">डिफ़ॉल्ट फ़ोल्डर में डाउनलोड करें?</translation>
-<translation id="8986494364107987395">इस्तेमाल के आंकड़े और खराबी रिपोर्ट अपने आप Google को भेजें</translation>
 <translation id="8993760627012879038">गुप्त मोड में नया टैब खोलें</translation>
 <translation id="8998729206196772491">आप <ph name="MANAGED_DOMAIN" /> से प्रबंधित खाते में साइन इन कर रहे हैं और उसके एडमिन को अपने Chrome डेटा पर नियंत्रण दे रहे हैं. आपका डेटा इस खाते से स्थायी रूप से जुड़ जाएगा. Chrome से साइन आउट करने से आपका डेटा इस डिवाइस से मिट जाएगा, लेकिन वह आपके Google खाते में बना रहेगा.</translation>
 <translation id="9019902583201351841">आपके अभिभावकों द्वारा प्रबंधित</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 d42a2214..c41fddae 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hr.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Snimka zaslona</translation>
 <translation id="1111673857033749125">Ovdje će se prikazivati oznake koje ste spremili na drugim uređajima.</translation>
 <translation id="1113597929977215864">Prikaži pojednostavljeni prikaz</translation>
-<translation id="1121094540300013208">Izvješća o upotrebi i rušenju programa</translation>
 <translation id="1124772482545689468">Korisnik</translation>
 <translation id="1129510026454351943">Pojedinosti: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 preuzimanje na čekanju.}one{# preuzimanje na čekanju.}few{# preuzimanja na čekanju.}other{# preuzimanja na čekanju.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">na čekanju</translation>
 <translation id="8970887620466824814">Nešto nije u redu.</translation>
 <translation id="8972098258593396643">Želite li preuzeti u zadanu mapu?</translation>
-<translation id="8986494364107987395">Automatski šalji Googleu statistiku o upotrebi i izvješća o padu programa</translation>
 <translation id="8993760627012879038">Otvaranje nove kartice u anonimnom načinu</translation>
 <translation id="8998729206196772491">Prijavljujete se računom kojim upravlja <ph name="MANAGED_DOMAIN" /> i njegovom administratoru dajete kontrolu nad svojim podacima u Chromeu. Vaši će se podaci trajno povezati s tim računom. Ako se odjavite iz Chromea, vaši će se podaci izbrisati s ovog uređaja, no ostat će pohranjeni na vašem Google računu.</translation>
 <translation id="9019902583201351841">Upravljaju tvoji roditelji</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 4ad717dc..40049b55 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_hu.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Képernyőrögzítés</translation>
 <translation id="1111673857033749125">A más eszközökön mentett könyvjelzők itt jelennek meg.</translation>
 <translation id="1113597929977215864">Egyszerűsített nézet megjelenítése</translation>
-<translation id="1121094540300013208">Használati és hibajelentések</translation>
 <translation id="1124772482545689468">Felhasználó</translation>
 <translation id="1129510026454351943">Részletek: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 letöltés függőben.}other{# letöltés függőben.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">függőben</translation>
 <translation id="8970887620466824814">Hiba történt.</translation>
 <translation id="8972098258593396643">Letölti az alapértelmezett mappába?</translation>
-<translation id="8986494364107987395">Használati statisztikák és hibajelentések automatikus küldése a Google-nak</translation>
 <translation id="8993760627012879038">Új lap megnyitása inkognitómódban</translation>
 <translation id="8998729206196772491">Egy <ph name="MANAGED_DOMAIN" /> által felügyelt fiókkal jelentkezik be, és engedélyezi az adminisztrátor számára a Chrome-adatok kezelését. Adatai állandó jelleggel ehhez a fiókhoz lesznek társítva. A Chrome-ból való kijelentkezéssel törli adatait erről az eszközről, de Google-fiókjában továbbra is megmaradnak.</translation>
 <translation id="9019902583201351841">Szülők által kezelt</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 4c2dd18..3b67f33 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_id.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Screenshot</translation>
 <translation id="1111673857033749125">Bookmark yang tersimpan di perangkat lainnya akan muncul di sini.</translation>
 <translation id="1113597929977215864">Buka tampilan sederhana</translation>
-<translation id="1121094540300013208">Laporan penggunaan dan error</translation>
 <translation id="1124772482545689468">Pengguna</translation>
 <translation id="1129510026454351943">Detail: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download tertunda.}other{# download tertunda.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">ditunda</translation>
 <translation id="8970887620466824814">Terjadi error.</translation>
 <translation id="8972098258593396643">Download ke folder default?</translation>
-<translation id="8986494364107987395">Kirim statistik penggunaan dan laporan error ke Google secara otomatis</translation>
 <translation id="8993760627012879038">Membuka tab baru dalam Mode samaran</translation>
 <translation id="8998729206196772491">Anda akan login dengan akun yang dikelola oleh <ph name="MANAGED_DOMAIN" /> dan memberikan kontrol data Chrome kepada administratornya. Data akan terikat dengan akun ini secara permanen. Bila Anda logout dari Chrome, data akan dihapus dari perangkat ini, tetapi data tetap tersimpan di Akun Google.</translation>
 <translation id="9019902583201351841">Dikelola oleh orang tua Anda</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 4dd968d..8975a47 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_it.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Acquisizione schermo</translation>
 <translation id="1111673857033749125">I preferiti salvati sugli altri dispositivi verranno visualizzati qui.</translation>
 <translation id="1113597929977215864">Mostra in visualizzazione semplificata</translation>
-<translation id="1121094540300013208">Rapporti sull'utilizzo e sugli arresti anomali</translation>
 <translation id="1124772482545689468">Utente</translation>
 <translation id="1129510026454351943">Dettagli: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download in attesa.}other{# download in attesa.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">in attesa</translation>
 <translation id="8970887620466824814">C'è stato un problema.</translation>
 <translation id="8972098258593396643">Scaricare nella cartella predefinita?</translation>
-<translation id="8986494364107987395">Invia automaticamente a Google statistiche sull'utilizzo e rapporti sugli arresti anomali</translation>
 <translation id="8993760627012879038">Apri nuova scheda in mod. di navigaz. in incognito</translation>
 <translation id="8998729206196772491">Stai per eseguire l'accesso con un account gestito da <ph name="MANAGED_DOMAIN" /> e consentire al relativo amministratore di avere il controllo dei tuoi dati di Chrome. I tuoi dati verranno associati definitivamente a questo account. Se esci da Chrome, i dati verranno eliminati da questo dispositivo, ma rimarranno memorizzati nel tuo Account Google.</translation>
 <translation id="9019902583201351841">Gestito dai genitori</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 a3543bf..315d0e6 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_iw.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">צילום מסך</translation>
 <translation id="1111673857033749125">סימניות שנשמרו במכשירים האחרים שלך יופיעו כאן.</translation>
 <translation id="1113597929977215864">צפייה בתצוגה נקייה</translation>
-<translation id="1121094540300013208">דוחות קריסה ושימוש</translation>
 <translation id="1124772482545689468">משתמש</translation>
 <translation id="1129510026454351943">פרטים: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{הורדה אחת בהמתנה.}two{# הורדות בהמתנה.}many{# הורדות בהמתנה.}other{# הורדות בהמתנה.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">בהמתנה</translation>
 <translation id="8970887620466824814">משהו השתבש.</translation>
 <translation id="8972098258593396643">האם להוריד לתיקיית ברירת המחדל?</translation>
-<translation id="8986494364107987395">‏שליחה אוטומטית של דוחות קריסה וסטטיסטיקות שימוש ל-Google</translation>
 <translation id="8993760627012879038">פתח חלון חדש במצב גלישה בסתר</translation>
 <translation id="8998729206196772491">‏אתה נכנס עם חשבון המנוהל על-ידי <ph name="MANAGED_DOMAIN" /> ומעניק למנהל שלו שליטה על הנתונים שלך ב-Chrome. הנתונים שלך ישויכו לצמיתות אל החשבון הזה. יציאה מ-Chrome תמחק את הנתונים שלך מהמכשיר הזה, אבל הם יישארו בחשבון Google.</translation>
 <translation id="9019902583201351841">מנוהל על-ידי ההורים שלך</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 4c95265..e51df66 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ja.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">画面キャプチャ</translation>
 <translation id="1111673857033749125">他のデバイスに保存されているブックマークがここに表示されます。</translation>
 <translation id="1113597929977215864">簡易表示する</translation>
-<translation id="1121094540300013208">利用状況と障害レポート</translation>
 <translation id="1124772482545689468">ユーザー</translation>
 <translation id="1129510026454351943">詳細: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 件のダウンロードが保留中です。}other{# 件のダウンロードが保留中です。}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">保留中</translation>
 <translation id="8970887620466824814">エラーが発生しました。</translation>
 <translation id="8972098258593396643">デフォルトのフォルダにダウンロードしますか?</translation>
-<translation id="8986494364107987395">使用統計データと障害レポートを Google に自動送信します</translation>
 <translation id="8993760627012879038">新しいタブをシークレット モードで開く</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> で管理されているアカウントでログインして、Chrome データの管理を管理者に委ねようとしています。この操作を行うと、データはこのアカウントに恒久的に関連付けられます。Chrome からログアウトすると、データはこのデバイスから削除されますが、Google アカウントには残ります。</translation>
 <translation id="9019902583201351841">保護者により管理されています</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
index 70afdc4..ead1221 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_kn.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">ಪರದೆ ಕ್ಯಾಪ್ಚರ್</translation>
 <translation id="1111673857033749125">ನಿಮ್ಮ ಇತರ ಸಾಧನಗಳಲ್ಲಿ ಉಳಿಸಲಾದ ಬುಕ್‌ಮಾರ್ಕ್‌ಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ.</translation>
 <translation id="1113597929977215864">ಸರಳೀಕೃತ ವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸಿ</translation>
-<translation id="1121094540300013208">ಬಳಕೆ ಮತ್ತು ಕ್ರ್ಯಾಶ್ ವರದಿಗಳು</translation>
 <translation id="1124772482545689468">ಬಳಕೆದಾರ</translation>
 <translation id="1129510026454351943">ವಿವರಗಳು: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ಡೌನ್‌ಲೋಡ್ ಬಾಕಿ ಇದೆ.}one{# ಡೌನ್‌ಲೋಡ್‌ಗಳು ಬಾಕಿ ಇವೆ.}other{# ಡೌನ್‌ಲೋಡ್‌ಗಳು ಬಾಕಿ ಇವೆ.}}</translation>
@@ -1066,7 +1065,6 @@
 <translation id="8965591936373831584">ಬಾಕಿ ಉಳಿದಿರುವುದು</translation>
 <translation id="8970887620466824814">ಏನೋ ತಪ್ಪಾಗಿದೆ.</translation>
 <translation id="8972098258593396643">ಡೀಫಾಲ್ಟ್ ಫೋಲ್ಡರ್‌ಗೆ ಡೌನ್‌ಲೋಡ್‌ ಮಾಡುವುದೇ?</translation>
-<translation id="8986494364107987395">ಬಳಕೆಯ ಅಂಕಿಅಂಶಗಳನ್ನು ಮತ್ತು ಕ್ರಾಶ್ ವರದಿಗಳನ್ನು Google ಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರವಾನಿಸು</translation>
 <translation id="8993760627012879038">ಅದೃಶ್ಯ ಮೋಡ್‌ನಲ್ಲಿ ಹೊಸ ವಿಂಡೋ ತೆರೆಯಿರಿ</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> ನಿರ್ವಹಿಸಿದ ಖಾತೆಯ ಮೂಲಕ ನೀವು ಸೈನ್‍‍ ಇನ್ ಮಾಡುತ್ತಿರುವಿರಿ ಮತ್ತು ಅದರ ನಿರ್ವಾಹಕ ನಿಯಂತ್ರಣವನ್ನು ನಿಮ್ಮ Chrome ಡೇಟಾದ ಮೂಲಕ ನೀಡುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಶಾಶ್ವತವಾಗಿ ಈ ಖಾತೆಯೊಂದಿಗೆ ಜೋಡಿಸಲಾಗುತ್ತದೆ. Chrome ನಿಂದ ಸೈನ್ ಔಟ್ ಮಾಡುವುದರಿಂದ ಈ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಅಳಿಸುತ್ತದೆ, ಆದರೆ ನಿಮ್ಮ Google ಖಾತೆಯಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿಯೇ ಇರುತ್ತದೆ.</translation>
 <translation id="9019902583201351841">ನಿಮ್ಮ ಪೋಷಕರು ನಿರ್ವಹಿಸುತ್ತಿದ್ದಾರೆ</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 0add1372..e4ba78a9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ko.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">화면 캡처</translation>
 <translation id="1111673857033749125">다른 기기에서 저장한 북마크가 여기에 표시됩니다.</translation>
 <translation id="1113597929977215864">간단히 보기 표시</translation>
-<translation id="1121094540300013208">사용 및 비정상 종료 보고서</translation>
 <translation id="1124772482545689468">사용자</translation>
 <translation id="1129510026454351943">세부정보: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{다운로드 1개 대기 중}other{다운로드 #개 대기 중}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">보류 중</translation>
 <translation id="8970887620466824814">문제 발생</translation>
 <translation id="8972098258593396643">기본 폴더에 다운로드하시겠습니까?</translation>
-<translation id="8986494364107987395">사용 통계 및 비정상 종료 보고서를 Google에 자동으로 전송합니다.</translation>
 <translation id="8993760627012879038">시크릿 모드로 새 탭 열기</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" />에서 관리하는 계정으로 로그인합니다. 계정 관리자가 내 Chrome 데이터를 관리하게 되며 데이터는 이 계정에 영구적으로 연결됩니다. Chrome에서 로그아웃하면 데이터가 이 기기에서 삭제되지만 Google 계정에는 그대로 유지됩니다.</translation>
 <translation id="9019902583201351841">부모님이 관리합니다.</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 f6d995c..76a555e 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lt.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Ekrano fiksavimas</translation>
 <translation id="1111673857033749125">Čia bus rodomos kituose įrenginiuose išsaugotos žymės.</translation>
 <translation id="1113597929977215864">Rodyti supaprastintą rodinį</translation>
-<translation id="1121094540300013208">Naudojimo ir strigčių ataskaitos</translation>
 <translation id="1124772482545689468">Naudotojas</translation>
 <translation id="1129510026454351943">Išsami informacija: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Laukiama 1 atsisiuntimo.}one{Laukiama # atsisiuntimo.}few{Laukiama # atsisiuntimų.}many{Laukiama # atsisiuntimo.}other{Laukiama # atsisiuntimų.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">laukiama</translation>
 <translation id="8970887620466824814">Kažkas ne taip.</translation>
 <translation id="8972098258593396643">Atsisiųsti į numatytąjį aplanką?</translation>
-<translation id="8986494364107987395">Automatiškai siųsti naudojimo statistiką ir strigčių ataskaitas „Google“</translation>
 <translation id="8993760627012879038">Atidaryti naują skirtuką inkognito režimu</translation>
 <translation id="8998729206196772491">Prisijungiate naudodami „<ph name="MANAGED_DOMAIN" />“ tvarkomą paskyrą ir suteikiate jos administratoriui galimybę valdyti jūsų „Chrome“ duomenis. Duomenys bus visam laikui susieti su šia paskyra. Atsijungę nuo „Chrome“ ištrinsite duomenis iš šio įrenginio, bet jie ir toliau bus saugomi „Google“ paskyroje.</translation>
 <translation id="9019902583201351841">Tvarko jūsų tėvai</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 0bf6cd1..0d285b9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_lv.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Ekrāna tveršana</translation>
 <translation id="1111673857033749125">Šeit būs redzamas grāmatzīmes, kuras esat saglabājis citās ierīcēs.</translation>
 <translation id="1113597929977215864">Rādīt vienkāršoto skatu</translation>
-<translation id="1121094540300013208">Lietojuma un avāriju pārskati</translation>
 <translation id="1124772482545689468">Lietotājs</translation>
 <translation id="1129510026454351943">Informācija: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 neapstiprināta lejupielāde.}zero{# neapstiprinātu lejupielāžu.}one{# neapstiprināta lejupielāde.}other{# neapstiprinātas lejupielādes.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">gaida</translation>
 <translation id="8970887620466824814">Radās kļūda.</translation>
 <translation id="8972098258593396643">Vai lejupielādēt noklusējuma mapē?</translation>
-<translation id="8986494364107987395">Automātiski sūtīt lietošanas statistiku un avāriju pārskatus uzņēmumam Google</translation>
 <translation id="8993760627012879038">Atvērt jaunu cilni inkognito režīmā</translation>
 <translation id="8998729206196772491">Jūs pierakstāties kontā, kas tiek pārvaldīts domēnā <ph name="MANAGED_DOMAIN" />, un sniedzat tā administratoram kontroli pār saviem Chrome datiem. Jūsu dati tiks neatgriezeniski saistīti ar šo kontu. Izrakstoties no pārlūka Chrome, jūsu dati tiks dzēsti no šīs ierīces, taču tie tiks saglabāti jūsu Google kontā.</translation>
 <translation id="9019902583201351841">Pārvalda jūsu vecāki</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
index 445ad7b..a48f134 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ml.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">സ്‌ക്രീൻ ക്യാപ്‌ചർ</translation>
 <translation id="1111673857033749125">നിങ്ങളുടെ മറ്റ് ഉപകരണങ്ങളിൽ സംരക്ഷിച്ച ബുക്ക്‌മാർക്കുകൾ ഇവിടെ ദൃശ്യമാകും.</translation>
 <translation id="1113597929977215864">ലളിതവൽക്കരിച്ച കാഴ്‌ച കാണിക്കുക</translation>
-<translation id="1121094540300013208">ഉപയോഗ, ക്രാഷ് റിപ്പോർട്ടുകൾ</translation>
 <translation id="1124772482545689468">ഉപയോക്താവ്</translation>
 <translation id="1129510026454351943">വിശദാംശങ്ങള്‍: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{ഒരു ഡൗൺലോഡ് ശേഷിക്കുന്നു.}other{# ഡൗൺലോഡുകൾ ശേഷിക്കുന്നു.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">തീർച്ചപ്പെടുത്താത്തവ</translation>
 <translation id="8970887620466824814">എന്തോ കുഴപ്പമുണ്ടായി.</translation>
 <translation id="8972098258593396643">ഡിഫോൾട്ട് ഫോൾഡറിലേക്ക് ഡൗൺലോഡ് ചെയ്യണോ?</translation>
-<translation id="8986494364107987395">Google ലേക്ക് സ്വപ്രേരിതമായി ഉപയോഗ വിവരക്കണക്കുകളും ക്രാഷ് റിപ്പോര്‍ട്ടുകളും അയയ്ക്കുക</translation>
 <translation id="8993760627012879038">അദൃശ്യ മോഡിൽ ഒരു പുതിയ വിൻഡോ തുറക്കുക</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> മാനേജ് ചെയ്യുന്ന ഒരു അക്കൗണ്ട് ഉപയോഗിച്ച് നിങ്ങൾ സൈൻ ഇൻ ചെയ്യുകയും ഇതിന്റെ അഡ്‌മിനിസ്‌ട്രേറ്റർക്ക് നിങ്ങളുടെ Chrome വിവരങ്ങളിന്മേൽ നിയന്ത്രണം നൽകുകയും ചെയ്യുന്നു. വിവരങ്ങളെ ഈ അക്കൗണ്ടുമായി ശാശ്വതമായി ബന്ധിപ്പിക്കും. Chrome-ൽ നിന്ന് സൈൻ ഔട്ട് ചെയ്യുന്നത് ഈ ഉപകരണത്തിൽ നിന്ന് നിങ്ങളുടെ വിവരങ്ങളെ ഇല്ലാതാക്കുമെങ്കിലും, Google അക്കൗണ്ടിൽ തുടർന്നും അവയെ സൂക്ഷിക്കുന്നതാണ്.</translation>
 <translation id="9019902583201351841">നിങ്ങളുടെ രക്ഷിതാക്കൾ നിയന്ത്രിക്കുന്നു</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
index ffb4f46..98e0e73 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_mr.xtb
@@ -9,12 +9,11 @@
 <translation id="10614374240317010">कधीही सेव्ह न केलेले</translation>
 <translation id="1067922213147265141">इतर Google सेवा</translation>
 <translation id="1068672505746868501">पेज <ph name="SOURCE_LANGUAGE" /> मध्ये कधीही भाषांतरित करू नका</translation>
-<translation id="107147699690128016">तुम्ही फाइल एक्स्टेंशन बदलल्यास, फाइल कदाचित दुसऱ्या अॅप्लिकेशनमध्ये उघडू शकते आणि यामुळे तुमच्या डिव्हाइसला संभाव्य धोका असू शकतो.</translation>
+<translation id="107147699690128016">तुम्ही फाइल एक्स्टेंशन बदलल्यास, फाइल कदाचित दुसऱ्या ॲप्लिकेशनमध्ये उघडू शकते आणि यामुळे तुमच्या डिव्हाइसला संभाव्य धोका असू शकतो.</translation>
 <translation id="1100066534610197918">गटामधील नवीन टॅबमध्ये उघडा</translation>
 <translation id="1105960400813249514">स्‍क्रीन कॅप्‍चर</translation>
 <translation id="1111673857033749125">आपल्या इतर डिव्हाइसेेसवर सेव्ह केलेले बुकमार्क येथे दिसतील.</translation>
 <translation id="1113597929977215864">सिंप्लिफाइड व्ह्यू दाखवा</translation>
-<translation id="1121094540300013208">वापर आणि क्रॅश अहवाल</translation>
 <translation id="1124772482545689468">वापरकर्ता</translation>
 <translation id="1129510026454351943">तपशील: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{एक डाउनलोड प्रलंबित आहे.}other{# डाउनलोड प्रलंबित आहेत.}}</translation>
@@ -83,13 +82,13 @@
 <translation id="1553358976309200471">Chrome अपडेट करा</translation>
 <translation id="1569387923882100876">कनेक्‍ट केलेले डिव्हाइस</translation>
 <translation id="1571304935088121812">वापरकर्तानाव कॉपी करा</translation>
-<translation id="1612196535745283361">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान अॅक्सेसची आवश्यकता असते. स्थान अॅक्सेस <ph name="BEGIN_LINK" />या डिव्हाइसाठी बंद केला आहे<ph name="END_LINK" />.</translation>
+<translation id="1612196535745283361">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान ॲक्सेसची आवश्यकता असते. स्थान ॲक्सेस <ph name="BEGIN_LINK" />या डिव्हाइसाठी बंद केला आहे<ph name="END_LINK" />.</translation>
 <translation id="1620510694547887537">कॅमेरा</translation>
 <translation id="1623104350909869708">या पृष्ठास अतिरिक्त संवाद तयार करण्यापासून प्रतिबंधित करा</translation>
 <translation id="1628019612362412531">{NUM_SELECTED,plural, =1{1 निवडलेला आयटम काढून टाका}other{# निवडलेले आयटम काढून टाका}}</translation>
 <translation id="164269334534774161">तुम्ही <ph name="CREATION_TIME" /> पासून या पेजची ऑफलाइन प्रत पाहत आहात</translation>
 <translation id="1644574205037202324">इतिहास</translation>
-<translation id="1647391597548383849">तुमचा कॅमेरा अॅक्सेस करा</translation>
+<translation id="1647391597548383849">तुमचा कॅमेरा ॲक्सेस करा</translation>
 <translation id="1660204651932907780">साइटना ध्वनी प्ले करण्याची परवानगी द्या (शिफारस केलेले)</translation>
 <translation id="1670399744444387456">मूलभूत</translation>
 <translation id="1671236975893690980">डाउनलोड प्रलंबित आहे</translation>
@@ -193,18 +192,18 @@
 <translation id="2407481962792080328">तुम्ही तुमच्या Google खात्यामध्ये साइन इन केल्यावर, हे वैशिष्ट्य सुरू केले जाते</translation>
 <translation id="2410754283952462441">एक खाते निवडा</translation>
 <translation id="2414886740292270097">गडद</translation>
-<translation id="2416359993254398973">या साइटसाठी Chromeला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
+<translation id="2416359993254398973">या साइटसाठी Chromeला तुमचा कॅमेरा ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
 <translation id="2426805022920575512">दुसरे खाते निवडा</translation>
 <translation id="2433507940547922241">स्वरूप</translation>
 <translation id="2434158240863470628">डाउनलोड पूर्ण झाले <ph name="SEPARATOR" /> <ph name="BYTES_DOWNLOADED" /></translation>
-<translation id="2440823041667407902">स्थान अॅक्सेस</translation>
+<translation id="2440823041667407902">स्थान ॲक्सेस</translation>
 <translation id="2450083983707403292">तुम्हाला <ph name="FILE_NAME" /> चे डाउनलोड पुन्हा सुरू करायचे आहे का?</translation>
 <translation id="246532703174860178">शेअर करा</translation>
 <translation id="2482878487686419369">सूचना</translation>
 <translation id="2490684707762498678"><ph name="APP_NAME" /> द्वारे व्यवस्थापित केले आहे</translation>
 <translation id="2494974097748878569">Chrome मधील Google असिस्टंट</translation>
 <translation id="2496180316473517155">ब्राउझिंग इतिहास</translation>
-<translation id="2497852260688568942">तुमच्या अॅडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
+<translation id="2497852260688568942">तुमच्या ॲडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
 <translation id="2498359688066513246">मदत आणि अभिप्राय</translation>
 <translation id="2501278716633472235">परत जा</translation>
 <translation id="2513403576141822879">गोपनीयता, सुरक्षितता आणि डेटा संकलनाशी संबंधित अधिक सेटिंग्जसाठी, <ph name="BEGIN_LINK" />सिंक आणि Google सेवा<ph name="END_LINK" /> पाहा</translation>
@@ -235,7 +234,7 @@
 <translation id="2704606927547763573">कॉपी केले</translation>
 <translation id="2707726405694321444">पृष्ठ रिफ्रेश करा</translation>
 <translation id="2709516037105925701">ऑटोफिल</translation>
-<translation id="2717722538473713889">ईमेल अॅड्रेस</translation>
+<translation id="2717722538473713889">ईमेल ॲड्रेस</translation>
 <translation id="2728754400939377704">साइटनुसार क्रमाने लावा</translation>
 <translation id="2744248271121720757">झटपट शोधण्यासाठी किंवा संबंधित ॲक्‍शन पाहण्यासाठी एखाद्या शब्दावर टॅप करा</translation>
 <translation id="2760989362628427051">तुमच्या डिव्हाइसची गडद थीम किंवा बॅटरी सेव्हर सुरू असताना गडद थीम सुरू करा</translation>
@@ -251,7 +250,7 @@
 <translation id="2836148919159985482">फुलस्क्रीन मधून बाहेर पडण्यासाठी परत बटणास स्पर्श करा.</translation>
 <translation id="2842985007712546952">मुख्य फोल्डर</translation>
 <translation id="2858138569776157458">टॉप साइट</translation>
-<translation id="2860954141821109167">या डिव्हाइसवर फोन अॅप सुरू केले असल्याची खात्री करा</translation>
+<translation id="2860954141821109167">या डिव्हाइसवर फोन ॲप सुरू केले असल्याची खात्री करा</translation>
 <translation id="2870560284913253234">साइट</translation>
 <translation id="2874939134665556319">मागील ट्रॅक</translation>
 <translation id="2876369937070532032">तुमची सुरक्षा धोक्यात असते तेव्हा, तुम्ही भेट दिलेल्या काही पेजचे URL Google ला पाठवते</translation>
@@ -299,13 +298,13 @@
 <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> हटवले</translation>
 <translation id="321773570071367578">तुमचा सांकेतिक पासफ्रेझ विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation>
 <translation id="3227137524299004712">मायक्रोफोन</translation>
-<translation id="3232754137068452469">वेब अॅप</translation>
+<translation id="3232754137068452469">वेब ॲप</translation>
 <translation id="3236059992281584593">1 मिनिट शिल्लक</translation>
 <translation id="3244271242291266297">MM</translation>
 <translation id="3254409185687681395">या पृष्ठास बुकमार्क करा</translation>
 <translation id="3259831549858767975">पृष्ठावरील प्रत्येकगोष्ट आणखी लहान बनवा</translation>
 <translation id="3269093882174072735">इमेज लोड करा</translation>
-<translation id="3269956123044984603">तुमच्या अन्य डिव्हाइसवरून तुमचे टॅब मिळविण्यासाठी, Android खाते सेटिंग्ज मधील “डेटा अॉटो-सिंक करा” चालू करा.</translation>
+<translation id="3269956123044984603">तुमच्या अन्य डिव्हाइसवरून तुमचे टॅब मिळविण्यासाठी, Android खाते सेटिंग्ज मधील “डेटा ऑटो-सिंक करा” चालू करा.</translation>
 <translation id="3277252321222022663">साइटना सेन्सर ॲक्सेस करण्याची अनुमती द्या (शिफारस केलेले)</translation>
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3288003805934695103">पृष्ठ रीलोड करणे</translation>
@@ -401,7 +400,7 @@
 <translation id="4046123991198612571">पुढील ट्रॅक</translation>
 <translation id="4048707525896921369">पेज न सोडता वेबसाइटवरील विषयांबद्दल जाणून घ्या. शोधण्यासाठी टॅप करा शब्द आणि त्याच्या आसपासचा संदर्भ Google शोध ला पाठवते आणि व्याख्या, चित्रे, शोध परिणाम आणि इतर तपशील मिळवते.
 
-तुमची शोध संज्ञा अॅडजस्ट करण्यासाठी, निवडण्याकरिता दाबून ठेवा. तुमचा शोध रिफाइन करण्यासाठी, पॅनल पूर्णपणे वर स्लाइड करा आणि सर्च बॉक्सवर टॅप करा.</translation>
+तुमची शोध संज्ञा ॲडजस्ट करण्यासाठी, निवडण्याकरिता दाबून ठेवा. तुमचा शोध रिफाइन करण्यासाठी, पॅनल पूर्णपणे वर स्लाइड करा आणि सर्च बॉक्सवर टॅप करा.</translation>
 <translation id="4056223980640387499">सेपिया</translation>
 <translation id="4060598801229743805">स्क्रीनच्या शीर्षावर पर्याय उपलब्ध आहेत</translation>
 <translation id="4062305924942672200">कायदेशीर माहिती</translation>
@@ -597,18 +596,18 @@
 <translation id="5494752089476963479">अनाहूत किंवा दिशाभूल करणाऱ्या जाहिराती दाखवणाऱ्या साइटवरील जाहिराती ब्लॉक करा</translation>
 <translation id="5500777121964041360">तुमच्या स्थानामध्ये उपलब्ध नसू शकते</translation>
 <translation id="5512137114520586844">हे खाते <ph name="PARENT_NAME" /> द्वारे व्यवस्थापित केले आहे.</translation>
-<translation id="5514904542973294328">या डिव्हाइसच्या अॅडमिनिस्ट्रेटरने बंद केले आहे.</translation>
+<translation id="5514904542973294328">या डिव्हाइसच्या ॲडमिनिस्ट्रेटरने बंद केले आहे.</translation>
 <translation id="5515439363601853141">तुमचा पासवर्ड पाहण्यासाठी अनलॉक करा</translation>
 <translation id="5516455585884385570">सूचना सेटिंग्ज उघडा</translation>
 <translation id="5517095782334947753">आपल्याकडे <ph name="FROM_ACCOUNT" /> मधील बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज आहेत.</translation>
 <translation id="5524843473235508879">रीडिरेक्‍ट ब्लॉक केले.</translation>
-<translation id="5527082711130173040">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान अॅक्सेसची आवश्यकता असते. <ph name="BEGIN_LINK1" />परवानग्या अपडेट करा<ph name="END_LINK1" />. स्थान अॅक्सेस देखील <ph name="BEGIN_LINK2" />या डिव्हाइसाठी बंद केला आहे<ph name="END_LINK2" />.</translation>
+<translation id="5527082711130173040">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान ॲक्सेसची आवश्यकता असते. <ph name="BEGIN_LINK1" />परवानग्या अपडेट करा<ph name="END_LINK1" />. स्थान ॲक्सेस देखील <ph name="BEGIN_LINK2" />या डिव्हाइसाठी बंद केला आहे<ph name="END_LINK2" />.</translation>
 <translation id="5527111080432883924">साइटला क्लिपबोर्डमधून मजकूर आणि इमेज रीड करण्याची अनुमती देण्यापूर्वी विचारा (शिफारस केली)</translation>
 <translation id="5530766185686772672">गुप्त टॅब बंद करा</translation>
 <translation id="5534640966246046842">साइट कॉपी केली</translation>
 <translation id="5556459405103347317">रीलोड करा</translation>
 <translation id="5561549206367097665">नेटवर्कची वाट पाहत आहे…</translation>
-<translation id="557283862590186398">या साइटसाठी Chromeला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
+<translation id="557283862590186398">या साइटसाठी Chromeला तुमचा मायक्रोफोन ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
 <translation id="55737423895878184">स्‍थान आणि सूचनांना अनुमती आहे</translation>
 <translation id="5578795271662203820">या इमेजसाठी <ph name="SEARCH_ENGINE" /> शोधा</translation>
 <translation id="5581519193887989363">तुम्ही काय सिंक करायचे हे <ph name="BEGIN_LINK1" />सेटिंग्ज<ph name="END_LINK1" /> मध्ये कधीही निवडू शकता.</translation>
@@ -632,9 +631,9 @@
 <translation id="572328651809341494">अलीकडील टॅब</translation>
 <translation id="5726692708398506830">पृष्ठावरील प्रत्येकगोष्ट आणखी मोठी करा</translation>
 <translation id="5748802427693696783">मानक टॅबवर स्विच केले</translation>
-<translation id="5749068826913805084">Chrome ला फायली डाउनलोड करण्यासाठी स्टोरेज अॅक्सेस आवश्यक आहे.</translation>
+<translation id="5749068826913805084">Chrome ला फायली डाउनलोड करण्यासाठी स्टोरेज ॲक्सेस आवश्यक आहे.</translation>
 <translation id="5763382633136178763">गुप्त टॅब</translation>
-<translation id="5763514718066511291">या अॅपची URL कॉपी करण्यासाठी टॅप करा</translation>
+<translation id="5763514718066511291">या ॲपची URL कॉपी करण्यासाठी टॅप करा</translation>
 <translation id="5765780083710877561">वर्णन:</translation>
 <translation id="5793665092639000975"><ph name="SPACE_AVAILABLE" /> पैकी <ph name="SPACE_USED" /> वापरत आहे</translation>
 <translation id="5797070761912323120">शोध, जाहिरात आणि इतर Google सेवा पर्सनलाइझ करण्यासाठी Google कदाचित तुमच्या इतिहासाचा वापर करू शकते</translation>
@@ -714,7 +713,7 @@
 <translation id="6378173571450987352">तपशील: वापरलेल्या डेटाच्या प्रमाणानुसार क्रमाने लावलेला</translation>
 <translation id="6381421346744604172">डार्कन वेबसाइट</translation>
 <translation id="6388207532828177975">साफ आणि रीसेट करा</translation>
-<translation id="6393863479814692971">या साइटसाठी Chromeला तुमचा कॅमेरा आणि मायक्रोफोन अॅक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
+<translation id="6393863479814692971">या साइटसाठी Chromeला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी आवश्यक आहे.</translation>
 <translation id="6395288395575013217">लिंक</translation>
 <translation id="6404511346730675251">बुकमार्क संपादित करा</translation>
 <translation id="6406506848690869874">Sync</translation>
@@ -754,7 +753,7 @@
 <translation id="6643649862576733715">वाचवलेल्या डेटानुसार क्रमाने लावा</translation>
 <translation id="6648977384226967773">{CONTACT,plural, =1{<ph name="CONTACT_PREVIEW" />\u2026 आणि <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> अधिक}other{<ph name="CONTACT_PREVIEW" />\u2026 आणि <ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> अधिक}}</translation>
 <translation id="6649642165559792194">इमेज <ph name="BEGIN_NEW" />नवीन<ph name="END_NEW" /> चे पूर्वावलोकन करा</translation>
-<translation id="6656545060687952787">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान अॅक्सेसची आवश्‍यकता असते. <ph name="BEGIN_LINK" />परवानग्या अपडेट करा<ph name="END_LINK" /></translation>
+<translation id="6656545060687952787">डिव्हाइस स्कॅन करण्‍यासाठी Chrome ला स्थान ॲक्सेसची आवश्‍यकता असते. <ph name="BEGIN_LINK" />परवानग्या अपडेट करा<ph name="END_LINK" /></translation>
 <translation id="6657585470893396449">पासवर्ड</translation>
 <translation id="6659594942844771486">टॅब</translation>
 <translation id="666731172850799929"><ph name="APP_NAME" /> मध्ये उघडा</translation>
@@ -784,7 +783,7 @@
 <translation id="6850409657436465440">तुमचे डाउनलोड अजून प्रगतीपथावर आहे</translation>
 <translation id="6850830437481525139"><ph name="TAB_COUNT" /> टॅब बंद केले</translation>
 <translation id="6864459304226931083">इमेज डाउनलोड करा</translation>
-<translation id="6865313869410766144">अॉटोफिल फॉर्म डेटा</translation>
+<translation id="6865313869410766144">ऑटोफिल फॉर्म डेटा</translation>
 <translation id="688738109438487280">विद्यमान डेटा <ph name="TO_ACCOUNT" /> मध्ये जोडा.</translation>
 <translation id="6891726759199484455">तुमचा पासवर्ड कॉपी करण्यासाठी अनलॉक करा</translation>
 <translation id="6896758677409633944">कॉपी करा</translation>
@@ -797,7 +796,7 @@
 <translation id="6963766334940102469">बुकमार्क हटवा</translation>
 <translation id="6965382102122355670">ठीक आहे</translation>
 <translation id="6979737339423435258">पूर्णवेळ</translation>
-<translation id="6981982820502123353">अॅक्सेसिबिलिटी</translation>
+<translation id="6981982820502123353">ॲक्सेसिबिलिटी</translation>
 <translation id="6989267951144302301">डाउनलोड करता आले नाही</translation>
 <translation id="6990079615885386641">Google Play Store मधून ॲप मिळवा: <ph name="APP_ACTION" /></translation>
 <translation id="6992289844737586249">साइटना तुमचा मायक्रोफोन वापरण्याची अनुमती देण्यापूर्वी प्रथम विचारा (शिफारस केलेले)</translation>
@@ -977,7 +976,7 @@
 <translation id="8266862848225348053">डाउनलोड करण्याचे स्थान</translation>
 <translation id="8274165955039650276">डाउनलोड पाहा</translation>
 <translation id="8284326494547611709">मथळे</translation>
-<translation id="8300705686683892304">अॅपद्वारे व्यवस्थापित</translation>
+<translation id="8300705686683892304">ॲपद्वारे व्यवस्थापित</translation>
 <translation id="8310344678080805313">मानक टॅब</translation>
 <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> आणि आणखी साइट</translation>
 <translation id="8327155640814342956">उत्तम ब्राउझिंग अनुभव मिळवण्याकरीता, Chrome अपडेट करण्यासाठी उघडा</translation>
@@ -1065,9 +1064,8 @@
 <translation id="8965591936373831584">प्रलंबित</translation>
 <translation id="8970887620466824814">काहीतरी चूक झाली.</translation>
 <translation id="8972098258593396643">डीफॉल्ट फोल्डरमध्ये डाउनलोड करायचे?</translation>
-<translation id="8986494364107987395">Google ला वापर आकडेवारी आणि क्रॅश अहवाल आपोआप पाठवा</translation>
 <translation id="8993760627012879038">गुप्त मोडमध्ये एक नवीन टॅब उघडा</translation>
-<translation id="8998729206196772491">तुम्ही <ph name="MANAGED_DOMAIN" /> ने व्यवस्थापित केलेल्या खात्यासह साइन इन करत आहात आणि त्याच्या अॅडमिनिस्ट्रेटरला तुमच्या Chrome डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chrome मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
+<translation id="8998729206196772491">तुम्ही <ph name="MANAGED_DOMAIN" /> ने व्यवस्थापित केलेल्या खात्यासह साइन इन करत आहात आणि त्याच्या ॲडमिनिस्ट्रेटरला तुमच्या Chrome डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chrome मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
 <translation id="9019902583201351841">आपल्या पालकांद्वारे व्यवस्थापित करण्यात आले</translation>
 <translation id="9028914725102941583">संपूर्ण डिव्हाइसवर शेअर करण्यासाठी सिंक सुरू करा</translation>
 <translation id="9040142327097499898">सूचनांना अनुमती आहे. या डिव्हाइससाठी स्‍थान बंद आहे.</translation>
@@ -1077,7 +1075,7 @@
 <translation id="9065203028668620118">संपादन</translation>
 <translation id="9070377983101773829">व्हॉइस शोध प्रारंभ करा</translation>
 <translation id="9074336505530349563">Google ने सुचवलेला पर्सनलाइझ केलेला आशय मिळवण्यासाठी, साइन इन करा आणि सिंक सुरू करा</translation>
-<translation id="9086455579313502267">नेटवर्क अॅक्सेस करण्यात अक्षम</translation>
+<translation id="9086455579313502267">नेटवर्क ॲक्सेस करण्यात अक्षम</translation>
 <translation id="9100505651305367705">सपोर्ट असताना सोप्या पद्धतीने लेख दाखवण्याची ऑफर</translation>
 <translation id="9100610230175265781">सांकेतिक पासफ्रेझ आवश्यक</translation>
 <translation id="9102803872260866941">पूर्वावलोकन टॅब उघडला आहे</translation>
@@ -1096,7 +1094,7 @@
 <translation id="926205370408745186">डिजिटल संतुलन वरून तुमची Chrome ॲक्टिव्हिटी काढून टाका</translation>
 <translation id="932327136139879170">होम</translation>
 <translation id="938850635132480979">एरर: <ph name="ERROR_CODE" /></translation>
-<translation id="945632385593298557">तुमचा मायक्रोफोन अॅक्सेस करा</translation>
+<translation id="945632385593298557">तुमचा मायक्रोफोन ॲक्सेस करा</translation>
 <translation id="95817756606698420">Chrome चीनमध्ये शोध करण्‍यासाठी <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> चा वापर करू शकते. तुम्ही हे <ph name="BEGIN_LINK" />सेटिंग्जमध्ये<ph name="END_LINK" /> बदलू शकता.</translation>
 <translation id="965817943346481315">साइट अनाहूत किंवा दिशाभूल करणाऱ्या जाहिराती दाखवत असल्यास ब्लॉक करा (शिफारस केलेले)</translation>
 <translation id="968900484120156207">तुम्ही भेट देता ती पेज येथे दिसतील</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
index 8338845..9cd56e9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ms.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Tangkapan Skrin</translation>
 <translation id="1111673857033749125">Penanda halaman yang disimpan pada peranti anda yang lain akan dipaparkan di sini.</translation>
 <translation id="1113597929977215864">Tunjukkan paparan ringkas</translation>
-<translation id="1121094540300013208">Laporan penggunaan dan keranapan</translation>
 <translation id="1124772482545689468">Pengguna</translation>
 <translation id="1129510026454351943">Butiran: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 muat turun belum selesai.}other{# muat turun belum selesai.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">belum selesai</translation>
 <translation id="8970887620466824814">Kesilapan telah berlaku.</translation>
 <translation id="8972098258593396643">Muat turun ke folder lalai?</translation>
-<translation id="8986494364107987395">Hantar statistik penggunaan dan laporan nahas kepada Google secara automatik</translation>
 <translation id="8993760627012879038">Buka tetingkap baharu dalam mod Inkognito</translation>
 <translation id="8998729206196772491">Anda log masuk dengan akaun yang diurus oleh <ph name="MANAGED_DOMAIN" /> dan memberikan kawalan terhadap data Chrome anda kepada pentadbirnya. Data anda akan terikat secara kekal kepada akaun ini. Tindakan log keluar daripada Chrome akan memadamkan data anda daripada peranti ini, tetapi data itu akan kekal disimpan dalam Akaun Google anda.</translation>
 <translation id="9019902583201351841">Diurus oleh ibu bapa anda</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 f8d351f..a88bea1 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_nl.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Schermopname</translation>
 <translation id="1111673857033749125">Bladwijzers die je op andere apparaten hebt opgeslagen, worden hier weergegeven.</translation>
 <translation id="1113597929977215864">Vereenvoudigde weergave tonen</translation>
-<translation id="1121094540300013208">Gebruiks- en crashrapporten</translation>
 <translation id="1124772482545689468">Gebruiker</translation>
 <translation id="1129510026454351943">Details: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download in behandeling.}other{# downloads in behandeling.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">in behandeling</translation>
 <translation id="8970887620466824814">Er is iets misgegaan.</translation>
 <translation id="8972098258593396643">Downloaden naar standaardmap?</translation>
-<translation id="8986494364107987395">Automatisch gebruiksstatistieken en crashrapporten naar Google verzenden</translation>
 <translation id="8993760627012879038">Een nieuw venster openen in de incognitomodus</translation>
 <translation id="8998729206196772491">Je logt in met een account dat wordt beheerd door <ph name="MANAGED_DOMAIN" /> waarmee je de eigenaar beheer geeft over je Chrome-gegevens. Je gegevens worden permanent gekoppeld aan dit account. Als je uitlogt van Chrome, worden je gegevens van dit apparaat verwijderd. Ze blijven echter opgeslagen in je Google-account.</translation>
 <translation id="9019902583201351841">Beheerd door je ouders</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 d780494..64709153 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_no.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Skjermdump</translation>
 <translation id="1111673857033749125">Bokmerker som er lagret på de andre enhetene dine, vises her.</translation>
 <translation id="1113597929977215864">Vis forenklet visning</translation>
-<translation id="1121094540300013208">Bruks- og programstopprapporter</translation>
 <translation id="1124772482545689468">Bruker</translation>
 <translation id="1129510026454351943">Detaljer: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 nedlasting venter.}other{# nedlastinger venter.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">venter</translation>
 <translation id="8970887620466824814">Noe gikk galt.</translation>
 <translation id="8972098258593396643">Vil du laste ned til standardmappen?</translation>
-<translation id="8986494364107987395">Send bruksstatistikk og programstopprapporter automatisk til Google</translation>
 <translation id="8993760627012879038">Åpne en ny fane i inkognitomodus</translation>
 <translation id="8998729206196772491">Du logger på med en konto som administreres av <ph name="MANAGED_DOMAIN" />, og du gir administratoren for dette domenet kontroll over Chrome-dataene dine. Dataene dine blir permanent knyttet til denne kontoen. Når du logger av Chrome, slettes dataene dine fra denne enheten, men de fortsetter å være lagret i Google-kontoen din.</translation>
 <translation id="9019902583201351841">Administrert av foreldrene dine</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 54542a69..94f8468 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_pl.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Zrzut ekranu</translation>
 <translation id="1111673857033749125">Tutaj wyświetlą się zakładki z innych urządzeń.</translation>
 <translation id="1113597929977215864">Pokaż widok uproszczony</translation>
-<translation id="1121094540300013208">Raporty o użytkowaniu i awariach</translation>
 <translation id="1124772482545689468">Użytkownik</translation>
 <translation id="1129510026454351943">Szczegóły: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 plik oczekuje na pobranie.}few{# pliki oczekują na pobranie.}many{# plików oczekuje na pobranie.}other{# pliku oczekuje na pobranie.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">Oczekiwanie</translation>
 <translation id="8970887620466824814">Coś poszło nie tak.</translation>
 <translation id="8972098258593396643">Czy pobrać do folderu domyślnego?</translation>
-<translation id="8986494364107987395">Automatycznie przesyłaj do Google statystyki użytkowania i raporty o awariach</translation>
 <translation id="8993760627012879038">Otwórz nową kartę w trybie incognito</translation>
 <translation id="8998729206196772491">Logujesz się na konto, którym zarządza <ph name="MANAGED_DOMAIN" />, i przekazujesz jego administratorowi kontrolę nad Twoimi danymi Chrome. Zostaną one trwale przypisane do tego konta. Gdy się wylogujesz, znikną one z tego urządzenia, ale pozostaną zapisane na Twoim koncie Google.</translation>
 <translation id="9019902583201351841">Zarządzany przez Twoich rodziców</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 018923fd..24bd004 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Captura de tela</translation>
 <translation id="1111673857033749125">Favoritos salvos nos seus outros dispositivos serão exibidos aqui.</translation>
 <translation id="1113597929977215864">Mostrar a versão simplificada</translation>
-<translation id="1121094540300013208">Relatórios de uso e falhas</translation>
 <translation id="1124772482545689468">Usuário</translation>
 <translation id="1129510026454351943">Detalhes: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 download pendente.}one{# download pendente.}other{# downloads pendentes.}}</translation>
@@ -993,7 +992,7 @@
 <translation id="8413126021676339697">Mostrar histórico completo</translation>
 <translation id="8427875596167638501">A guia "Visualizar" está parcialmente aberta</translation>
 <translation id="8428213095426709021">Configurações</translation>
-<translation id="8438566539970814960">Melhorar pesquisas e navegação</translation>
+<translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
 <translation id="8441146129660941386">Retroceder</translation>
 <translation id="8443209985646068659">Erro ao atualizar Chrome</translation>
 <translation id="8445448999790540984">Não é possível exportar senhas</translation>
@@ -1066,7 +1065,6 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Algo deu errado.</translation>
 <translation id="8972098258593396643">Fazer o download para a pasta padrão?</translation>
-<translation id="8986494364107987395">Envia estatísticas de uso e relatórios de erros ao Google automaticamente</translation>
 <translation id="8993760627012879038">Abrir uma nova guia no modo de navegação anônima</translation>
 <translation id="8998729206196772491">Você está fazendo login com uma conta gerenciada por <ph name="MANAGED_DOMAIN" /> e dando ao administrador dela o controle sobre seus dados do Chrome, os quais ficarão permanentemente vinculados a essa conta. Se você sair do Chrome, seus dados serão excluídos desse dispositivo, mas permanecerão armazenados na sua Conta do Google.</translation>
 <translation id="9019902583201351841">Gerenciado pelos seus pais</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 d2dda88..c6cc3ed 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Ecrã a ser capturado...</translation>
 <translation id="1111673857033749125">Os marcadores guardados nos seus outros dispositivos são apresentados aqui.</translation>
 <translation id="1113597929977215864">Mostrar vista simplificada</translation>
-<translation id="1121094540300013208">Relatórios de utilização e falhas</translation>
 <translation id="1124772482545689468">Utilizador</translation>
 <translation id="1129510026454351943">Detalhes: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 transferência pendente.}other{# transferências pendentes.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">pendente</translation>
 <translation id="8970887620466824814">Ocorreu um erro.</translation>
 <translation id="8972098258593396643">Pretende transferir para a pasta predefinida?</translation>
-<translation id="8986494364107987395">Enviar automaticamente estatísticas de utilização e relatórios de falhas para a Google</translation>
 <translation id="8993760627012879038">Abrir novo separador no modo de navegação anónima</translation>
 <translation id="8998729206196772491">Está a iniciar sessão com uma conta gerida por <ph name="MANAGED_DOMAIN" /> e a conceder ao respetivo gestor o controlo dos seus dados do Chrome. Os dados ficarão permanentemente associados a esta conta. Terminar sessão no Chrome elimina os seus dados deste dispositivo, embora permaneçam armazenados na Conta Google.</translation>
 <translation id="9019902583201351841">Gerido pelos teus pais</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 a313472..67b1e8dd 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ro.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Captură de ecran</translation>
 <translation id="1111673857033749125">Marcajele salvate pe alte dispozitive vor apărea aici.</translation>
 <translation id="1113597929977215864">Arată afișarea simplificată</translation>
-<translation id="1121094540300013208">Statistici de utilizare și rapoarte de blocare</translation>
 <translation id="1124772482545689468">Utilizator</translation>
 <translation id="1129510026454351943">Detalii: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{O descărcare în așteptare.}few{# descărcări în așteptare.}other{# de descărcări în așteptare.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">în așteptare</translation>
 <translation id="8970887620466824814">A apărut o eroare.</translation>
 <translation id="8972098258593396643">Descarci în dosarul prestabilit?</translation>
-<translation id="8986494364107987395">Trimite automat la Google statistici de utilizare și rapoarte de blocare</translation>
 <translation id="8993760627012879038">Deschide o filă nouă în modul incognito</translation>
 <translation id="8998729206196772491">Te conectezi cu un cont gestionat de <ph name="MANAGED_DOMAIN" /> și acorzi administratorului acestuia controlul asupra datelor Chrome. Datele vor fi asociate definitiv acestui cont. Dacă te deconectezi de la Chrome, datele se vor șterge de pe acest dispozitiv, dar vor rămâne stocate în Contul Google.</translation>
 <translation id="9019902583201351841">Gestionat de părinții tăi</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 d8d7d606..e1aad99 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ru.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Демонстрация экрана</translation>
 <translation id="1111673857033749125">Здесь появятся закладки, сохраненные на других устройствах.</translation>
 <translation id="1113597929977215864">Упрощенный просмотр</translation>
-<translation id="1121094540300013208">Отчеты об использовании и сбоях</translation>
 <translation id="1124772482545689468">Пользователь</translation>
 <translation id="1129510026454351943">Сведения об ошибке: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Ожидание скачивания 1 файла…}one{Ожидание скачивания # файла…}few{Ожидание скачивания # файлов…}many{Ожидание скачивания # файлов…}other{Ожидание скачивания # файла…}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">ожидание</translation>
 <translation id="8970887620466824814">Произошла ошибка</translation>
 <translation id="8972098258593396643">Скачать в папку по умолчанию?</translation>
-<translation id="8986494364107987395">Автоматически отправлять в Google статистику использования и отчеты о сбоях</translation>
 <translation id="8993760627012879038">Открыть новое окно в режиме инкогнито</translation>
 <translation id="8998729206196772491">Вы входите в аккаунт, которым управляет администратор домена <ph name="MANAGED_DOMAIN" />. Он может контролировать ваши данные Chrome, которые теперь будут связаны с управляемым аккаунтом. При выходе из системы все данные Chrome, хранящиеся на этом устройстве, будут удалены, но останутся в вашем аккаунте Google.</translation>
 <translation id="9019902583201351841">Управляется вашими родителями</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 a63beb7..eb0a532 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sk.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Snímanie obrazovky</translation>
 <translation id="1111673857033749125">Tu sa zobrazia záložky, ktoré ste uložili na iných zariadeniach.</translation>
 <translation id="1113597929977215864">Aktivovať zjednodušené zobrazenie</translation>
-<translation id="1121094540300013208">Správy o použití a o zlyhaní</translation>
 <translation id="1124772482545689468">Používateľ</translation>
 <translation id="1129510026454351943">Podrobnosti: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Na stiahnutie čaká 1 položka.}few{Na stiahnutie čakajú # položky.}many{# downloads pending.}other{Na stiahnutie čaká # položiek.}}</translation>
@@ -182,7 +181,7 @@
 <translation id="2321958826496381788">Presúvajte posúvač, dokým nebude čítanie tohto textu pohodlné. Po dvojitom klepnutí na odsek by mal byť text aspoň takto veľký.</translation>
 <translation id="2323763861024343754">Úložisko webu</translation>
 <translation id="2328985652426384049">Nedá sa prihlásiť</translation>
-<translation id="2330129964253841015">Upozorniť v prípade napadnutia hesiel</translation>
+<translation id="2330129964253841015">Upozorňovať pri odhalení hesiel</translation>
 <translation id="2349710944427398404">Celkové dáta využívané Chromom vrátane účtov, záložiek a uložených nastavení</translation>
 <translation id="2353636109065292463">Kontroluje sa internetové pripojenie</translation>
 <translation id="2359808026110333948">Pokračovať</translation>
@@ -992,7 +991,7 @@
 <translation id="8413126021676339697">Zobraziť celú históriu</translation>
 <translation id="8427875596167638501">Karta ukážky je dopoly otvorená</translation>
 <translation id="8428213095426709021">Nastavenia</translation>
-<translation id="8438566539970814960">Zlepšovať vyhľadávania a prehliadanie</translation>
+<translation id="8438566539970814960">Zlepšovať vyhľadávanie a prehliadanie</translation>
 <translation id="8441146129660941386">Pretočiť dozadu</translation>
 <translation id="8443209985646068659">Chrome sa nedá aktualizovať</translation>
 <translation id="8445448999790540984">Heslá sa nepodarilo exportovať</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">nespracované</translation>
 <translation id="8970887620466824814">Vyskytol sa problém.</translation>
 <translation id="8972098258593396643">Stiahnuť do predvoleného priečinka?</translation>
-<translation id="8986494364107987395">Automaticky odosielať Googlu štatistiky používania a správy o zlyhaní</translation>
 <translation id="8993760627012879038">Otvorenie novej karty v režime inkognito</translation>
 <translation id="8998729206196772491">Prihlasujete sa pomocou účtu spravovaného doménou <ph name="MANAGED_DOMAIN" /> a jej správcovi tým dávate kontrolu nad svojimi údajmi Chromu. Vaše údaje budú natrvalo prepojené s týmto účtom. Odhlásením z Chromu odstránite údaje z príslušného zariadenia, avšak naďalej zostanú uložené vo vašom účte Google.</translation>
 <translation id="9019902583201351841">Spravované vašimi rodičmi</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 949d3eeb..a821f19 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sl.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Zajemanje slike</translation>
 <translation id="1111673857033749125">Tu bodo prikazani zaznamki, shranjeni v drugih napravah.</translation>
 <translation id="1113597929977215864">Pokaži poenostavljen pogled</translation>
-<translation id="1121094540300013208">Poročila o uporabi in zrušitvah</translation>
 <translation id="1124772482545689468">Uporabnik</translation>
 <translation id="1129510026454351943">Podrobnosti: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 prenos na čakanju}one{# prenos na čakanju}two{# prenosa na čakanju}few{# prenosi na čakanju}other{# prenosov na čakanju}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">poteka</translation>
 <translation id="8970887620466824814">Prišlo je do napake.</translation>
 <translation id="8972098258593396643">Želite prenesti v privzeto mapo?</translation>
-<translation id="8986494364107987395">Samodejno pošlji statistične podatke o uporabi in poročila o zrušitvah Googlu</translation>
 <translation id="8993760627012879038">Odpiranje novega zavihka brez beleženja zgodovine</translation>
 <translation id="8998729206196772491">Prijavljate se z računom, ki ga upravlja <ph name="MANAGED_DOMAIN" />, in nadzor nad podatki v Chromu predajate skrbniku. Vaši podatki bodo trajno povezani s tem računom. Če se odjavite iz Chroma, boste izbrisali podatke iz te naprave, vendar bodo še naprej shranjeni v Google Računu.</translation>
 <translation id="9019902583201351841">Upravljajo starši</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 e073581f..c32fcee 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sr.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Снимање екрана</translation>
 <translation id="1111673857033749125">Обележивачи сачувани на другим уређајима ће се приказати овде.</translation>
 <translation id="1113597929977215864">Прикажи поједностављени приказ</translation>
-<translation id="1121094540300013208">Извештаји о коришћењу и отказивању</translation>
 <translation id="1124772482545689468">Корисник</translation>
 <translation id="1129510026454351943">Детаљи: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 преузимање на чекању.}one{# преузимање на чекању.}few{# преузимања на чекању.}other{# преузимања на чекању.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">на чекању</translation>
 <translation id="8970887620466824814">Дошло је до грешке.</translation>
 <translation id="8972098258593396643">Преузимате у подразумевани директоријум?</translation>
-<translation id="8986494364107987395">Аутоматски шаљи Google-у статистичке податке о коришћењу и извештаје о отказивању</translation>
 <translation id="8993760627012879038">Отварање нове картице у режиму без архивирања</translation>
 <translation id="8998729206196772491">Пријављујете се помоћу налога којим управља <ph name="MANAGED_DOMAIN" /> и дајете његовом администратору контролу над својим Chrome подацима. Подаци ће постати трајно повезани са тим налогом. Одјављивањем из Chrome-а ћете избрисати податке са овог уређаја, али ће они остати сачувани на Google налогу.</translation>
 <translation id="9019902583201351841">Овим управљају твоји родитељи</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 9f8fac0..ca14e80 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sv.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Skärmavbildning</translation>
 <translation id="1111673857033749125">Här visas bokmärken som du har sparat på andra enheter.</translation>
 <translation id="1113597929977215864">Använd förenklad visning</translation>
-<translation id="1121094540300013208">Användning och felrapporter</translation>
 <translation id="1124772482545689468">Användare</translation>
 <translation id="1129510026454351943">Mer information: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 nedladdning väntar.}other{# nedladdningar väntar.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">väntar</translation>
 <translation id="8970887620466824814">Något gick fel.</translation>
 <translation id="8972098258593396643">Vill du ladda ned till standardmappen?</translation>
-<translation id="8986494364107987395">Skicka användningsstatistik och kraschrapporter till Google automatiskt</translation>
 <translation id="8993760627012879038">Öppna en ny flik i inkognitoläge</translation>
 <translation id="8998729206196772491">Du håller på att logga in med ett konto som hanteras av <ph name="MANAGED_DOMAIN" />, vilket ger administratören kontroll över data i Chrome. Din data kopplas permanent till det här kontot. Om du loggar ut från Chrome raderas all din data från enheten, men den lagras fortfarande i Google-kontot.</translation>
 <translation id="9019902583201351841">Hanteras av dina föräldrar</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 f97d54b..887c7c9 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_sw.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Piga Picha ya Skrini</translation>
 <translation id="1111673857033749125">Alamisho zilizohifadhiwa katika vifaa vyako vingine zitaonekana hapa.</translation>
 <translation id="1113597929977215864">Onyesha mwonekano rahisi</translation>
-<translation id="1121094540300013208">Ripoti za matumizi na za kuacha kufanya kazi</translation>
 <translation id="1124772482545689468">Mtumiaji</translation>
 <translation id="1129510026454351943">Maelezo: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Inasubiri kupakua faili 1.}other{Inasubiri kupakua faili #.}}</translation>
@@ -1064,7 +1063,6 @@
 <translation id="8965591936373831584">inasubiri</translation>
 <translation id="8970887620466824814">Hitilafu imetokea.</translation>
 <translation id="8972098258593396643">Ungependa kupakua kwenye folda chaguomsingi?</translation>
-<translation id="8986494364107987395">Tumia Google takwimu za matumizi na ripoti za mara ambazo kivinjari kinaacha kufanya kazi, moja kwa moja</translation>
 <translation id="8993760627012879038">Fungua kichupo kipya katika Hali fiche</translation>
 <translation id="8998729206196772491">Unaingia kwa kutumia akaunti inayodhibitiwa na <ph name="MANAGED_DOMAIN" /> na kumpa msimamizi wa kikoa hicho udhibiti wa data yako ya Chrome. Data yako ya Chrome itahusishwa na akaunti hii daima. Kuondoka kwenye Chrome kutafuta data yako kwenye kifaa hiki, lakini itaendelea kuhifadhiwa katika Akaunti yako ya Google.</translation>
 <translation id="9019902583201351841">Inadhibitiwa na wazazi wako</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
index 74d44fb..51f75db 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_ta.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">திரைப் படப்பிடிப்பு</translation>
 <translation id="1111673857033749125">உங்கள் பிற சாதனங்களில் சேமிக்கும் புக்மார்க்குகள் இங்கே தோன்றும்.</translation>
 <translation id="1113597929977215864">எளிதாக்கப்பட்ட காட்சியைக் காட்டு</translation>
-<translation id="1121094540300013208">பயன்பாட்டு மற்றும் சிதைவு அறிக்கைகள்</translation>
 <translation id="1124772482545689468">பயனர்</translation>
 <translation id="1129510026454351943">விவரங்கள்: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{ஒரு பதிவிறக்கம் நிலுவையில் உள்ளது.}other{# பதிவிறக்கங்கள் நிலுவையில் உள்ளன.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">நிலுவையிலுள்ளது</translation>
 <translation id="8970887620466824814">ஏதோ தவறாகிவிட்டது.</translation>
 <translation id="8972098258593396643">இயல்புக் கோப்புறைக்குப் பதிவிறக்கவா?</translation>
-<translation id="8986494364107987395">பயன்பாட்டுப் புள்ளிவிவரங்களையும் சிதைவு அறிக்கைகளையும் தானாகவே Google க்கு அனுப்பு</translation>
 <translation id="8993760627012879038">புதிய தாவலை மறைநிலையில் திறக்கும்</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> நிர்வகிக்கும் கணக்கில் உள்நுழைந்து, உங்கள் Chrome தரவு மீதான கட்டுப்பாட்டை அதன் நிர்வாகிக்கு வழங்குகிறீர்கள். இந்தக் கணக்குடன் தரவு நிரந்தரமாக இணைக்கப்படும். Chromeமிலிருந்து வெளியேறினால், இந்தச் சாதனத்திலிருந்து தரவு நீக்கப்படும், எனினும் உங்கள் Google கணக்கில் தரவு தொடர்ந்து இருக்கும்.</translation>
 <translation id="9019902583201351841">உங்கள் பெற்றோரால் நிர்வகிக்கப்படுகிறது</translation>
diff --git a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
index 26d07c60..d8d6009 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_te.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">స్క్రీన్ క్యాప్చర్</translation>
 <translation id="1111673857033749125">మీ ఇతర పరికరాల్లో సేవ్ చేసిన బుక్‌మార్క్‌లు ఇక్కడ చూపబడతాయి.</translation>
 <translation id="1113597929977215864">సరళీకృత వీక్షణను చూపు</translation>
-<translation id="1121094540300013208">వినియోగ, క్రాష్ నివేదికలు</translation>
 <translation id="1124772482545689468">వినియోగదారు</translation>
 <translation id="1129510026454351943">వివరాలు: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 డౌన్‌లోడ్ పెండింగ్‌లో ఉంది.}other{# డౌన్‌లోడ్‌లు పెండింగ్‌లో ఉన్నాయి.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">పెండింగ్‌లో ఉంది</translation>
 <translation id="8970887620466824814">ఏదో తప్పు జరిగింది.</translation>
 <translation id="8972098258593396643">డిఫాల్ట్ ఫోల్డర్‌కు డౌన్‌లోడ్ చేయాలా?</translation>
-<translation id="8986494364107987395">Googleకు ఆటోమేటిక్‌గా వినియోగ‌ గణాంకాలను, క్రాష్ నివేదికలను పంపు</translation>
 <translation id="8993760627012879038">కొత్త ట్యాబ్‌ను అజ్ఞాత మోడ్‌లో తెరవండి</translation>
 <translation id="8998729206196772491">మీరు <ph name="MANAGED_DOMAIN" /> నిర్వహణలో ఉన్న ఖాతా నుండి సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకులకు మీ Chrome డేటాపై నియంత్రణను అందిస్తున్నారు. మీ డేటా శాశ్వతంగా ఈ ఖాతాకు అనుబంధించబడుతుంది. Chrome నుండి సైన్ అవుట్ చేయడం వ‌ల్ల ఈ పరికరం నుండి మీ డేటా తొలగించబడుతుంది. కానీ ఇది మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది.</translation>
 <translation id="9019902583201351841">మీ తల్లిదండ్రుల ద్వారా నిర్వహించబడుతోంది</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 d73360942..c7a40cb 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_th.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">จับภาพหน้าจอ</translation>
 <translation id="1111673857033749125">บุ๊กมาร์กที่บันทึกไว้ในอุปกรณ์เครื่องอื่นๆ ของคุณจะปรากฏที่นี่</translation>
 <translation id="1113597929977215864">แสดง "มุมมองอย่างง่าย"</translation>
-<translation id="1121094540300013208">รายงานการใช้งานและข้อขัดข้อง</translation>
 <translation id="1124772482545689468">ผู้ใช้</translation>
 <translation id="1129510026454351943">รายละเอียด: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{การดาวน์โหลดที่รอดำเนินการ 1 รายการ}other{การดาวน์โหลดที่รอดำเนินการ # รายการ}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">รอดำเนินการ</translation>
 <translation id="8970887620466824814">มีบางอย่างผิดพลาด</translation>
 <translation id="8972098258593396643">ดาวน์โหลดลงโฟลเดอร์เริ่มต้นไหม</translation>
-<translation id="8986494364107987395">ส่งสถิติการใช้งานและรายงานข้อขัดข้องไปยัง Google โดยอัตโนมัติ</translation>
 <translation id="8993760627012879038">เปิดแท็บใหม่ในโหมดไม่ระบุตัวตน</translation>
 <translation id="8998729206196772491">คุณกำลังลงชื่อเข้าใช้ด้วยบัญชีที่จัดการโดย <ph name="MANAGED_DOMAIN" /> และทำให้ผู้ดูแลระบบของโดเมนควบคุมข้อมูล Chrome ของคุณได้ ข้อมูลดังกล่าวจะโยงกับบัญชีนี้อย่างถาวร การออกจากระบบ Chrome จะลบข้อมูลของคุณออกจากอุปกรณ์เครื่องนี้ แต่ข้อมูลจะยังจัดเก็บอยู่ในบัญชี Google</translation>
 <translation id="9019902583201351841">มีการจัดการโดยผู้ปกครอง</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 a231741..f432099 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_tr.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Ekran Kaydediliyor</translation>
 <translation id="1111673857033749125">Diğer cihazlarınızda kaydedilmiş yer işaretleri burada görünür.</translation>
 <translation id="1113597929977215864">Basitleştirilmiş görünümü göster</translation>
-<translation id="1121094540300013208">Kullanım ve kilitlenme raporları</translation>
 <translation id="1124772482545689468">Kullanıcı</translation>
 <translation id="1129510026454351943">Ayrıntılar: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 indirme işlemi beklemede.}other{# indirme işlemi beklemede.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">beklemede</translation>
 <translation id="8970887620466824814">Bir hata oluştu.</translation>
 <translation id="8972098258593396643">Varsayılan klasöre indirilsin mi?</translation>
-<translation id="8986494364107987395">Kullanım istatistiklerini ve çökme raporlarını otomatik olarak Google'a gönder</translation>
 <translation id="8993760627012879038">Gizli modda yeni bir sekme açar</translation>
 <translation id="8998729206196772491"><ph name="MANAGED_DOMAIN" /> tarafından yönetilen bir hesapla oturum açıyorsunuz ve yöneticiye tüm Chrome verileriniz üzerinde denetim olanağı veriyorsunuz. Verileriniz kalıcı olarak bu hesaba bağlanacaktır. Chrome'da oturumu kapattığınızda verileriniz bu cihazdan silinir, ancak Google Hesabınızda kalmaya devam eder.</translation>
 <translation id="9019902583201351841">Ebeveynleriniz tarafından yönetiliyor</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 af73e94..05ed1c1d 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_uk.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Знімок екрана</translation>
 <translation id="1111673857033749125">Тут відображатимуться закладки, збережені на інших ваших пристроях.</translation>
 <translation id="1113597929977215864">Показати в режимі спрощеного перегляду</translation>
-<translation id="1121094540300013208">Використання та збої</translation>
 <translation id="1124772482545689468">Користувач</translation>
 <translation id="1129510026454351943">Деталі. <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{Очікується 1 завантаження.}one{Очікується # завантаження.}few{Очікується # завантаження.}many{Очікується # завантажень.}other{Очікується # завантаження.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">очікується</translation>
 <translation id="8970887620466824814">Сталася помилка.</translation>
 <translation id="8972098258593396643">Завантажити в папку за умовчанням?</translation>
-<translation id="8986494364107987395">Автоматично надсилати статистику використання та звіти про аварійне завершення роботи в Google</translation>
 <translation id="8993760627012879038">Відкрити нове вікно в режимі анонімного перегляду</translation>
 <translation id="8998729206196772491">Ви входите в обліковий запис, зареєстрований у домені <ph name="MANAGED_DOMAIN" />, і надаєте його адміністратору доступ до своїх даних Chrome. Ваші дані буде назавжди зв’язано з цим обліковим записом. Якщо ви вийдете з облікового запису в Chrome, дані буде видалено з цього пристрою, але вони залишаться у вашому обліковому записі Google.</translation>
 <translation id="9019902583201351841">Керується батьками</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 f46aa2a..33fcf3c 100644
--- a/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
+++ b/chrome/android/java/strings/translations/android_chrome_strings_vi.xtb
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">Chụp ảnh màn hình</translation>
 <translation id="1111673857033749125">Dấu trang được lưu trên thiết bị khác của bạn sẽ xuất hiện tại đây.</translation>
 <translation id="1113597929977215864">Hiển thị chế độ xem đơn giản</translation>
-<translation id="1121094540300013208">Báo cáo sử dụng và sự cố</translation>
 <translation id="1124772482545689468">Người dùng</translation>
 <translation id="1129510026454351943">Chi tiết: <ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 tệp đang chờ tải xuống.}other{# tệp đang chờ tải xuống.}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">đang chờ xử lý</translation>
 <translation id="8970887620466824814">Đã xảy ra lỗi.</translation>
 <translation id="8972098258593396643">Tải xuống thư mục mặc định?</translation>
-<translation id="8986494364107987395">Tự động gửi số liệu thống kê về việc sử dụng và báo cáo sự cố cho Google</translation>
 <translation id="8993760627012879038">Mở tab mới trong chế độ Ẩn danh</translation>
 <translation id="8998729206196772491">Bạn đang đăng nhập bằng tài khoản do <ph name="MANAGED_DOMAIN" /> quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chrome của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Việc đăng xuất khỏi Chrome sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu sẽ vẫn được lưu trữ trong Tài khoản Google.</translation>
 <translation id="9019902583201351841">Do cha mẹ của bạn quản lý</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 999ca82..7778b487 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">屏幕截图</translation>
 <translation id="1111673857033749125">您在其他设备上保存的书签将列在此处。</translation>
 <translation id="1113597929977215864">显示简化版视图</translation>
-<translation id="1121094540300013208">使用情况信息和崩溃报告</translation>
 <translation id="1124772482545689468">用户</translation>
 <translation id="1129510026454351943">错误详情:<ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{有 1 项下载尚待处理。}other{有 # 项下载尚待处理。}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">待下载</translation>
 <translation id="8970887620466824814">出了点问题。</translation>
 <translation id="8972098258593396643">是否下载到默认文件夹?</translation>
-<translation id="8986494364107987395">将使用情况统计信息和崩溃报告自动发送给 Google</translation>
 <translation id="8993760627012879038">在无痕模式下打开新标签页</translation>
 <translation id="8998729206196772491">您正要登录由 <ph name="MANAGED_DOMAIN" /> 管理的帐号,并要授权其管理员控制您的 Chrome 数据。您的数据将与此帐号永久关联。退出 Chrome 后,您的数据将从这台设备上删除,但仍会保留在您的 Google 帐号中。</translation>
 <translation id="9019902583201351841">由您父母管理</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 dfa85be..96c6a47 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
@@ -14,7 +14,6 @@
 <translation id="1105960400813249514">螢幕擷取</translation>
 <translation id="1111673857033749125">儲存在您其他裝置上的書籤會顯示在這裡。</translation>
 <translation id="1113597929977215864">顯示「簡易檢視」模式</translation>
-<translation id="1121094540300013208">使用資料和當機報告</translation>
 <translation id="1124772482545689468">使用者</translation>
 <translation id="1129510026454351943">詳細資料:<ph name="ERROR_DESCRIPTION" /></translation>
 <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 項下載作業仍待處理。}other{# 項下載作業仍待處理。}}</translation>
@@ -1065,7 +1064,6 @@
 <translation id="8965591936373831584">正在等待下載</translation>
 <translation id="8970887620466824814">發生錯誤。</translation>
 <translation id="8972098258593396643">要下載至預設資料夾嗎?</translation>
-<translation id="8986494364107987395">自動傳送使用統計資料及當機報告給 Google</translation>
 <translation id="8993760627012879038">在無痕模式下開啟新分頁</translation>
 <translation id="8998729206196772491">您即將使用由 <ph name="MANAGED_DOMAIN" /> 所管理的帳戶登入,並授權該網域的管理員控管您的 Chrome 資料。您的資料會與這個帳戶建立永久連結。登出 Chrome 後,系統會將您的資料從這個裝置上刪除,但繼續保留在您的 Google 帳戶中。</translation>
 <translation id="9019902583201351841">你的家長已停用這項功能</translation>
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java
index 4d4d448..85de837 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/bookmarks/BookmarkPersonalizedSigninPromoTest.java
@@ -30,6 +30,7 @@
 import org.junit.runner.RunWith;
 
 import org.chromium.base.test.util.CommandLineFlags;
+import org.chromium.base.test.util.FlakyTest;
 import org.chromium.chrome.R;
 import org.chromium.chrome.browser.ChromeActivity;
 import org.chromium.chrome.browser.ChromeSwitches;
@@ -80,6 +81,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1020069")
     public void testSigninButtonDefaultAccount() {
         doNothing()
                 .when(SigninActivityLauncher.get())
@@ -94,6 +96,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1020069")
     public void testSigninButtonNotDefaultAccount() {
         doNothing()
                 .when(SigninActivityLauncher.get())
@@ -108,6 +111,7 @@
 
     @Test
     @MediumTest
+    @FlakyTest(message = "https://crbug.com/1020069")
     public void testSigninButtonNewAccount() {
         doNothing()
                 .when(SigninActivityLauncher.get())
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb
index 8956415..475c46bc 100644
--- a/chrome/app/resources/chromium_strings_mr.xtb
+++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -16,7 +16,7 @@
 <translation id="1774152462503052664">Chromium बॅकग्राउंडमध्ये चालू द्या</translation>
 <translation id="1779356040007214683">Chromium अधिक सुरक्षित बनविण्‍यासाठी, आम्‍ही <ph name="IDS_EXTENSION_WEB_STORE_TITLE" /> मध्‍ये सूचीबद्ध नसलेले आणि आपल्‍या माहिती शिवाय कदाचित जोडले गेलेले काही विस्‍तार अक्षम केले.</translation>
 <translation id="1808667845054772817">Chromium पुनर्स्थापित करा</translation>
-<translation id="1881322772814446296">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Chromium प्रोफाइलवर त्याच्या अॅडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chromium डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. तुम्ही तुमचा विद्यमान Chromium डेटा वेगळी ठेवण्यासाठी एक नवीन पर्यायी प्रोफाइल तयार करू शकता. <ph name="LEARN_MORE" /></translation>
+<translation id="1881322772814446296">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Chromium प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chromium डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. तुम्ही तुमचा विद्यमान Chromium डेटा वेगळी ठेवण्यासाठी एक नवीन पर्यायी प्रोफाइल तयार करू शकता. <ph name="LEARN_MORE" /></translation>
 <translation id="1911763535808217981">हे बंद करून, तुम्ही Chromium वर साइन इन न करता Gmail सारख्या Google सायटींवर साइन इन करू शकता</translation>
 <translation id="1929939181775079593">Chromium असंवादी आहे. आता पुन्‍हा लाँच करायचे?</translation>
 <translation id="1966382378801805537">Chromium डीफॉल्ट ब्राउझर निर्धारित किंवा सेट करू शकत नाही</translation>
@@ -29,7 +29,7 @@
 <translation id="2485422356828889247">अनइंस्टॉल करा</translation>
 <translation id="2527042973354814951"><ph name="PLUGIN_NAME" /> सुरू करण्यासाठी Chromium रीस्टार्ट करा</translation>
 <translation id="2535480412977113886">तुमचे खाते साइन इन तपशील कालबाह्य झाल्यामुळे Chromium OS तुमचा डेटा संकालित करू शकले नाही.</translation>
-<translation id="2560420686485554789">फायली डाउनलोड करण्यासाठी Chromium ला स्टोरेज अॅक्सेस हवा आहे</translation>
+<translation id="2560420686485554789">फायली डाउनलोड करण्यासाठी Chromium ला स्टोरेज ॲक्सेस हवा आहे</translation>
 <translation id="2572494885440352020">Chromium मदतनीस</translation>
 <translation id="2587578672395088481">अपडेट लागू करण्यासाठी Chromium OS रीस्टार्ट करणे आवश्यक आहे.</translation>
 <translation id="2648074677641340862">स्‍थापनेदरम्‍यान ऑपरेटिंग सिस्टीम एरर आली. कृपया Chromium पुन्‍हा डाउनलोड करा.</translation>
@@ -81,7 +81,7 @@
 <translation id="4407044323746248786">तरीही Chromium बंद करायचे?</translation>
 <translation id="4415566066719264597">Chromium बॅकग्राउंडमध्ये चालू द्या</translation>
 <translation id="4423735387467980091">Chromium कस्टमाइझ करा आणि नियंत्रित करा</translation>
-<translation id="4567424176335768812">तुम्ही <ph name="USER_EMAIL_ADDRESS" /> म्हणून साइन इन केले आहे. आता तुम्ही तुमच्या सर्व साइन इन केलेल्या डिव्हाइसवरील तुमच्या बुकमार्क, इतिहास आणि अन्य सेटिंग्ज अॅक्सेस करू शकता.</translation>
+<translation id="4567424176335768812">तुम्ही <ph name="USER_EMAIL_ADDRESS" /> म्हणून साइन इन केले आहे. आता तुम्ही तुमच्या सर्व साइन इन केलेल्या डिव्हाइसवरील तुमच्या बुकमार्क, इतिहास आणि अन्य सेटिंग्ज ॲक्सेस करू शकता.</translation>
 <translation id="459535195905078186">Chromium Apps</translation>
 <translation id="4621240073146040695">अद्ययावत करणे जवळजवळ पूर्ण झाले! अपडेट करणे समाप्त करण्यासाठी Chromium रीलाँच करा.</translation>
 <translation id="4677944499843243528">प्रोफाइल दुसर्‍या कॉंप्युटरवरील (<ph name="HOST_NAME" />) दुसर्‍या Chromium प्रक्रियेद्वारे (<ph name="PROCESS_ID" />) वापरले जात असल्याचे दिसते. प्रोफाइल लॉक होऊ नये यासाठी Chromium ने ती लॉक केली आहे. कोणतीही अन्य प्रक्रिया हे प्रोफाइल वापरत नाही याची तुम्हाला खात्री असल्यास, तुम्ही प्रोफाइल अनलॉक करू शकता आणि Chromium पुन्हा एकदा लॉंच करू शकता.</translation>
@@ -95,7 +95,7 @@
 <translation id="4987820182225656817">अतिथी कोणतीही गोष्ट मागे न सोडता Chromium वापरू शकतात.</translation>
 <translation id="4994636714258228724">आपल्या स्वतःस Chromium वर जोडा</translation>
 <translation id="5277894862589591112">तुम्ही केलेले बदल लागू करण्यासाठी, Chromium रीलाँच करा</translation>
-<translation id="5358375970380395591">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Chromium प्रोफाइलवर त्याच्या अॅडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chromium डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation>
+<translation id="5358375970380395591">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Chromium प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chromium डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation>
 <translation id="5386450000063123300">Chromium अपडेट करीत आहे (<ph name="PROGRESS_PERCENT" />)</translation>
 <translation id="538767207339317086">Chromium मध्ये साइन इन करण्यासाठी अनुमती द्या</translation>
 <translation id="5398878173008909840">Chromium ची नवीन आवृत्ती उपलब्ध आहे.</translation>
@@ -103,7 +103,7 @@
 <translation id="5427571867875391349">तुमचा डीफॉल्ट ब्राउझर म्हणून Chromium सेट करा</translation>
 <translation id="5438241569118040789"><ph name="PAGE_TITLE" /> - Chromium बीटा</translation>
 <translation id="5479196819031988440">Chromium OS हे पृष्ठ उघडू शकत नाही.</translation>
-<translation id="5480860683791598150">या साइटसोबत तुमचे स्थान शेअर करण्यासाठी Chromium ला तुमच्या स्थानाचा अॅक्सेस हवा आहे</translation>
+<translation id="5480860683791598150">या साइटसोबत तुमचे स्थान शेअर करण्यासाठी Chromium ला तुमच्या स्थानाचा ॲक्सेस हवा आहे</translation>
 <translation id="549669000822060376">कृपया Chromium नवीनतम सिस्टम अपडेट इंस्टॉल करेपर्यंत प्रतीक्षा करा.</translation>
 <translation id="5623402015214259806">{0,plural, =0{Chromium अपडेट उपलब्ध आहे}=1{Chromium अपडेट उपलब्ध आहे}other{Chromium अपडेट # दिवसांसाठी उपलब्ध आहे}}</translation>
 <translation id="5631814766731275228">Chromium नाव आणि फोटो</translation>
@@ -140,7 +140,7 @@
 <translation id="6510925080656968729">Chromium अनइंस्टॉल करा</translation>
 <translation id="6570579332384693436">शब्दलेखनाच्या चुकांमध्ये सुधारणा करण्यासाठी Chromium तुम्ही मजकूर भागामध्ये टाइप केलेला मजकूर Google ला पाठवते</translation>
 <translation id="6598877126913850652">Chromium च्या सूचना सेटिंग्जमध्ये जा</translation>
-<translation id="6676384891291319759">इंटरनेट अॅक्सेस करा</translation>
+<translation id="6676384891291319759">इंटरनेट ॲक्सेस करा</translation>
 <translation id="6717134281241384636">तुमची प्रोफाइल वापरली जाऊ शकत नाही, कारण ती Chromium च्‍या नवीनतम आवृत्तीमधील आहे.
 
 काही वैशिष्‍ट्ये उपलब्ध नसू शकतील. कृपया एक भिन्न प्रोफाइल डिरेक्टरी नमूद करा किंवा Chromium ची नवीन आवृत्ती वापरा.</translation>
@@ -152,7 +152,7 @@
 <translation id="6868056391275687737">Chromium च्या इतर प्रती रन होत आहेत. अपडेट करण्यासाठी, त्या बंद करा.</translation>
 <translation id="6893813176749746474">Chromium अपडेट केले गेले, परंतु तुम्ही ते किमान 30 दिवसांपासून वापरलेले नाही.</translation>
 <translation id="6964305034639999644">लिंक Chromium गुप्त विंडो मध्ये उघडा</translation>
-<translation id="6990124437352146030">या साइटसाठी Chromium ला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="6990124437352146030">या साइटसाठी Chromium ला तुमचा मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="705851970750939768">Chromium अपडेट करा</translation>
 <translation id="7066436765290594559">Chromium OS तुमचा डेटा सिंक करू शकले नाही. कृपया तुमची सिंक सांकेतिक पासफ्रेज अपडेट करा.</translation>
 <translation id="7067091210845072982">इमेजचे उपयोगी वर्णन नसल्यास, Chromium तुमच्यासाठी ते देण्याचा प्रयत्न करेल. वर्णने तयार करण्यासाठी, इमेज Google ला पाठवल्या जातात.</translation>
@@ -170,7 +170,7 @@
 <translation id="7349591376906416160">तुमच्या सिस्टम अ‍ॅडमिनिस्ट्रेटरने <ph name="TARGET_URL_HOSTNAME" /> अ‍ॅक्सेस करण्यासाठी <ph name="ALTERNATIVE_BROWSER_NAME" /> उघडण्याकरिता Chromium कॉन्फिगर केले आहे.</translation>
 <translation id="7448255348454382571">Chromium OS रीस्टार्ट करा</translation>
 <translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium डेव्हलपर</translation>
-<translation id="7451052299415159299">या साइटसाठी Chromium ला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="7451052299415159299">या साइटसाठी Chromium ला तुमचा कॅमेरा ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="7483335560992089831">सध्‍या चालू असलेल्‍या सारख्याच Chromium आवृत्तीची स्‍थापना होऊ शकत नाही. कृपया Chromium बंद करा आणि पुन्‍हा प्रयत्‍न करा.</translation>
 <translation id="753534427205733210">{0,plural, =1{Chromium एका मिनिटामध्ये पुन्हा लॉंच होईल}other{Chromium # मिनिटांमध्ये पुन्हा लाँच होईल}}</translation>
 <translation id="7549178288319965365">Chromium OS बद्दल</translation>
@@ -210,10 +210,10 @@
 <translation id="8704119203788522458">हे तुमचे Chromium आहे</translation>
 <translation id="8739167630197873875">तुम्ही Chromium बंद करता तेव्हा कुकी साफ करता. सिंक करणे सुरू ठेवण्यासाठी, हे <ph name="COOKIE_SETTINGS_LINK" /> बदला.</translation>
 <translation id="8748383401829947534">Chromium च्या सर्व प्रती बंद करा.</translation>
-<translation id="8796602469536043152">या साइटसाठी Chromium ला तुमचा कॅमेरा आणि मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="8796602469536043152">या साइटसाठी Chromium ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="8803635938069941624">Chromium OS अटी</translation>
 <translation id="8821041990367117597">तुमचे खाते साइन इन तपशील कालबाह्य झाल्यामुळे Chromium तुमचा डेटा संकालित करू शकले नाही.</translation>
-<translation id="8862326446509486874">तुमच्याकडे सिस्टम स्तरावरील इंस्टॉलसाठी योग्य अधिकार नाहीत. अॅडमिनिस्ट्रेटर म्हणून पुन्हा इंस्टॉलर चालविण्याचा प्रयत्न करा.</translation>
+<translation id="8862326446509486874">तुमच्याकडे सिस्टम स्तरावरील इंस्टॉलसाठी योग्य अधिकार नाहीत. ॲडमिनिस्ट्रेटर म्हणून पुन्हा इंस्टॉलर चालविण्याचा प्रयत्न करा.</translation>
 <translation id="8897323336392112261">तुम्ही Chromium सुरू करता किंवा होम बटण क्लिक करता तेव्हा कोणते पेज दर्शविले जाते ते देखील हे नियंत्रित करते.</translation>
 <translation id="8907580949721785412">Chromium पासवर्ड दर्शविण्‍याचा प्रयत्‍न करत आहे. यास अनुमती देण्‍यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation>
 <translation id="8941642502866065432">Chromium अपडेट करू शकत नाही</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb
index 16798e12..9f19a25 100644
--- a/chrome/app/resources/generated_resources_am.xtb
+++ b/chrome/app/resources/generated_resources_am.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM ለማሄድ ፈቃድ ይፈልጋል</translation>
 <translation id="1900305421498694955">ከGoogle Play የመጡ መተግበሪያዎች በውጫዊ የማከማቻ መሣሪያዎች ላይ ፋይሎችን ለማንበብ እና ለመጻፍ ሙሉ የፋይል ሥርዓት መዳረሻ ሊያስፈልጋቸው ይችላሉ። በዚህ መሣሪያ ላይ የተፈጠሩ ፋይሎች እና አቃፊዎች ውጫዊውን አንጻፊ ለሚጠቀሙ ለማናቸውም ሰዎች የሚታዩ ናቸው። <ph name="LINK_BEGIN" />የበለጠ ለመረዳት<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;ሁሉንም ምረጥ</translation>
-<translation id="1901984611178952431">በመለያ መግቢያ ውሂብን አስተዳድር</translation>
 <translation id="1902576642799138955">የተገቢነት ክፍለ ጊዜ</translation>
 <translation id="1905375423839394163">የChromebook መሣሪያ ስም</translation>
 <translation id="1905710495812624430">የሚፈቀደው ከፍተኛ የሙከራዎች ብዛት ታልፏል።</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">ወደፊት ሶፍትዌር እና ደህንነት ዝማኔዎች በራስሰር ይጫናሉ።</translation>
 <translation id="1979280758666859181">የቆየ የ<ph name="PRODUCT_NAME" /> ስሪት ወዳለው ሰርጥ እየቀየሩ ነው። የስርጡ ስሪት አሁን በመሣሪያዎ ላይ ከተጫነው ስሪት ጋር ሲዛመድ ነው የሰርጡ ለውጥ የሚተገበረው።</translation>
 <translation id="197989455406964291">KDC የምስጠራ ዓይነትን አይደግፍም</translation>
-<translation id="1981544341227357861">የደህንነት ቁልፍዎን ከመሣሪያዎ ያስወግዱት፣ ከዚያ ዳግም ያስገቡትና ይንኩት።</translation>
 <translation id="1982354452682152483">ምንም ዝርዝር መግለጫ አይገኝም።</translation>
 <translation id="1987317783729300807">መለያዎች</translation>
 <translation id="1989112275319619282">አስስ</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Chrome ውስጥ ይግቡ</translation>
 <translation id="3285322247471302225">አዲስ &amp;ትር</translation>
 <translation id="328571385944182268">የእርስዎን የይለፍ ቃላት ይቀመጡ?</translation>
-<translation id="3286737518123001369">በእርስዎ የደህንነት ቁልፍ ላይ የተከማቸውን በመለያ መግቢያ ውሂብ ይመልከቱ እና ይሰረዙ</translation>
 <translation id="3288047731229977326">በገንቢ ሁኔታ የሚሄዱ ጥያዎች የእርስዎን ኮምፒውተር ሊጎዱ ይችላሉ። እርስዎ ገንቢ ካልሆኑ ደህንነትዎን ለማረገገጥ በገንቢ ሁኔታ የሚሄዱ ቅጥያዎችን ማሰናከል አለብዎ።</translation>
 <translation id="3289856944988573801">ዝማኔዎች ካሉ ለማየት እባክዎ Ethernet ወይም Wi-Fi ይጠቀሙ።</translation>
 <translation id="3293644607209440645">ይህን ገጽ ላክ</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">የX9.62 ECDSA ፊርማ በSHA-512</translation>
 <translation id="3544879808695557954">የተጠቃሚ ስም (አማራጭ)</translation>
 <translation id="354602065659584722">ጎጂ ሶፍትዌር ተወግዷል</translation>
-<translation id="3547220315004609203">የትር ቅንጥብ ይቀያይሩ</translation>
 <translation id="3547954654003013442">የተኪ ቅንብሮች</translation>
 <translation id="3550915441744863158">Chrome በራስ-ሰር ይዘመናል፣ ስለዚህ ሁልጊዜ አዲሱ ስሪት ይኖርዎታል</translation>
 <translation id="3551320343578183772">ትር ዝጋ</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">ማይክሮፎን ተፈቅዷል</translation>
 <translation id="4031527940632463547">ዳሳሾች ታግደዋል</translation>
 <translation id="4033471457476425443">አዲስ አቃፊ ያክሉ</translation>
-<translation id="403456802563765809">የእርስዎን የጣት አሻራዎች ለማስተዳደር፣ የእርስዎን የደህንነት ቁልፍ ያስገቡ እና ይንኩ።</translation>
 <translation id="4034824040120875894">አታሚ</translation>
 <translation id="4035758313003622889">&amp;ተግባር አስተዳዳሪ</translation>
 <translation id="4036778507053569103">ከአገልጋዩ የወረደው መመሪያ ልክ ያልኾነ ነው።</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" />ን ለመጠቀም መጀመሪያ <ph name="LINK_START" />የአውታረ መረቡ መግቢያ ገጹን መጎብኘት<ph name="LINK_END" /> አለብዎት፣ ይህም በጥቂት ሰከንዶች ውስጥ በራስ-ሰር ይከፈታል። ካልሆነ አውታረ መረቡ ስራ ላይ ሊውል አይችልም።</translation>
 <translation id="5637476008227280525">የተንቀሳቃሽ ስልክ ውሂብን አንቃ</translation>
 <translation id="5638309510554459422">ቅጥያዎችን እና ገጽታዎችን በ<ph name="BEGIN_LINK" />Chrome ድር መደብር<ph name="END_LINK" /> ላይ ያግኙ</translation>
-<translation id="5639152092474119692">የእርስዎን የጣት አሻራዎች ለማስተዳደር፣ ለእርስዎ ደህንነት ቁልፍ ፒን ያስገቡ። ፒኑን የማያውቁት ከሆነ፣ የደህንነት ቁልፉን ዳግም ማቀናበር ያስፈልግዎታል።</translation>
 <translation id="5639549361331209298">ይህን ገጽ ዳግም ይጫኑ፣ ተጨማሪ አማራጮችን ለማየት ይያዙት</translation>
 <translation id="5640133431808313291">የደህንነት ቁልፎችን ያቀናብሩ</translation>
 <translation id="5642508497713047">CRL ፈራሚ</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">ልክ ያልሆነ የዩአርኤል ቅርጸት። የሚደገፉ ቅርጸቶች \\server\share እና smb://server/share ናቸው።</translation>
 <translation id="5990386583461751448">የተተረጎመ</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ ይህን መተግበሪያ እንዲያስወግዱ ይጠይቋቸው።}one{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}other{ድሩን ማሰስ መቀጠል መቻልዎን ለማረጋገጥ አስተዳዳሪዎ እነዚህን መተግበሪያዎች እንዲያስወግዱ ይጠይቋቸው።}}</translation>
-<translation id="5995884201513800557">የእርስዎን የጣት አሻራ ለማስቀመጥ የእርስዎን የደህንነት ቁልፍ መንካት ይቀጥሉ።</translation>
 <translation id="5997337190805127100">ስለጣቢያ መዳረሻ ተጨማሪ ይወቁ</translation>
 <translation id="6000758707621254961">ለ«<ph name="SEARCH_TEXT" />» <ph name="RESULT_COUNT" /> ውጤቶችን አሳይ</translation>
 <translation id="6002458620803359783">የሚመረጡ ድምጾች</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">የቪዲዮ ግብዓትን በመድረስ ላይ</translation>
 <translation id="6011193465932186973">የጣት አሻራ</translation>
 <translation id="6011449291337289699">የጣቢያ ውሂብን አጽዳ</translation>
-<translation id="6013505829696424563">በመለያ መግቢያ ውሂብን ለማየት፣ ለእርስዎ የደህንነት ቁልፍ የሚሆነውን ፒን ያስገቡ። ፒኑን የማያውቁት ከሆነ፣ የደህንነት ቁልፉን ዳግም ማቀናበር ያስፈልግዎታል።</translation>
 <translation id="6015266928248016057">ልክ ያልኾነ PUK። በግራ በኩል ዳግም ይሞክራል፦ <ph name="RETRIES" />።</translation>
 <translation id="6015796118275082299">ዓመት</translation>
 <translation id="6016551720757758985">ወደ ቀድሞው ስሪት ከመመለስ ጋር Powerwashን ያረጋግጡ</translation>
@@ -3972,7 +3964,6 @@
 <translation id="6840155290835956714">ከመላክ በፊት ጠይቅ</translation>
 <translation id="6840184929775541289">የእውቅና ማረጋገጫ ባለስልጣን አይደለም</translation>
 <translation id="6841186874966388268">ስህተቶች</translation>
-<translation id="6841187140911216178">በመለያ መግቢያ ውሂብን ለመመልከት፣ የእርስዎን የደህንነት ቁልፍ ያስገቡ እና ይንኩ</translation>
 <translation id="6843423766595476978">Ok Google ሙሉ በሙሉ ተቀናብሯል</translation>
 <translation id="6845038076637626672">ሰፍቶ ክፈት</translation>
 <translation id="6845325883481699275">የChrome ደህንነት እንዲሻሻል ያግዙ</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">ሃምበርገር</translation>
 <translation id="883911313571074303">ምስልን አብራራ</translation>
 <translation id="8845001906332463065">እገዛ ያግኙ</translation>
-<translation id="8845164297565101021">ፒን ለመፍጠር ወይም ለመቀየር የደህንነት ቁልፍዎን ያስገቡ እና ይንኩ።</translation>
 <translation id="8846132060409673887">የዚህ ኮምፒውተር አምራችና ሞዴል ማንበብ</translation>
 <translation id="8846141544112579928">የቁልፍ ሰሌዳን በመፈለግ ላይ...</translation>
 <translation id="8847988622838149491">ዩ ኤስ ቢ</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">የNetscape አለምአቀፍ አወቃቀር</translation>
 <translation id="8944099748578356325">ባትሪዎን በበለጠ ፍጥነት ይጠቀሙ (በአሁኑ ጊዜ <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> አንድ መስኮት ለ<ph name="TAB_NAME" /> እያጋራ ነው።</translation>
-<translation id="8945764661949477243">ያክሉ፣ ዳግም ይሰይሙ እና በእርስዎ መሣሪያል ላይ የተቀመጡ የጣት አሻራዎችን ይሰርዙ</translation>
 <translation id="8946359700442089734">የማረም ባህሪያት በዚህ የ<ph name="IDS_SHORT_PRODUCT_NAME" /> መሣሪያ ላይ ሙሉ ለሙሉ አልነቁም።</translation>
 <translation id="894871326938397531">ከማንነት የማያሳውቅ ሁነታ ይውጣ?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> የደህንነት ቁልፍዎን ስሪት እና ሞዴል ማየት ይፈልጋል</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb
index 7e8b9348..4f4efcd 100644
--- a/chrome/app/resources/generated_resources_ar.xtb
+++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">‏يحتاج Plugin VM إلى إذن للتشغيل</translation>
 <translation id="1900305421498694955">‏يمكن أن تتطلب التطبيقات من Google Play إذن الوصول الكامل إلى نظام الملفات لقراءة الملفات وكتابتها على أجهزة التخزين الخارجية. تظهر الملفات والمجلدات التي تم إنشاؤها على الجهاز لأيّ شخص يستخدم محرك الأقراص الخارجي. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">تح&amp;ديد الكلّ</translation>
-<translation id="1901984611178952431">إدارة بيانات تسجيل الدخول</translation>
 <translation id="1902576642799138955">فترة الصلاحية</translation>
 <translation id="1905375423839394163">‏اسم جهاز Chromebook</translation>
 <translation id="1905710495812624430">تم تجاوز الحد الأقصى لعدد المحاولات المسموح بها.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">سيتم تثبيت تحديثات البرامج والأمان المستقبلية تلقائيًا.</translation>
 <translation id="1979280758666859181">أنت الآن تُجري تغييرًا إلى قناة ذات إصدار سابق من <ph name="PRODUCT_NAME" />. وسيسري تغيير القناة عند تطابق إصدار القناة مع الإصدار المثبت حاليًا على الجهاز.</translation>
 <translation id="197989455406964291">‏لا يدعم KDC (مركز توزيع المفاتيح) نوع التشفير</translation>
-<translation id="1981544341227357861">يُرجى إزالة مفتاح الأمان من الجهاز ثم إعادة إدخاله مرة أخرى ولمسه.</translation>
 <translation id="1982354452682152483">لا يتوفّر وصف.</translation>
 <translation id="1987317783729300807">حسابات</translation>
 <translation id="1989112275319619282">تصفّح</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">‏تسجيل الدخول إلى Chrome</translation>
 <translation id="3285322247471302225">&amp;علامة تبويب جديدة</translation>
 <translation id="328571385944182268">هل تريد حفظ كلمات المرور؟</translation>
-<translation id="3286737518123001369">يُرجى عرض بيانات تسجيل الدخول المخزّنة على مفتاح الأمان وحذفها</translation>
 <translation id="3288047731229977326">يمكن أن تؤدي الإضافات التي تعمل في وضع مطور البرامج إلى إلحاق الضرر بجهاز الكمبيوتر. إذا لم تكن مطور برامج، فيجب إيقاف هذه الإضافات التي تعمل في وضع مطور البرامج للبقاء في أمان.</translation>
 <translation id="3289856944988573801">‏للتحقق من وجود تحديثات، يُرجى استخدام شبكة Ethernet أو Wi-Fi.</translation>
 <translation id="3293644607209440645">إرسال هذه الصفحة</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">‏توقيع X9.62 ECDSA باستخدام SHA-512</translation>
 <translation id="3544879808695557954">اسم المستخدم (اختياري)</translation>
 <translation id="354602065659584722">تمت إزالة البرامج الضارة</translation>
-<translation id="3547220315004609203">تبديل إلى شريط علامات التبويب</translation>
 <translation id="3547954654003013442">إعدادات الخادم الوكيل</translation>
 <translation id="3550915441744863158">‏يتم تحديث Chrome تلقائيًا، وبالتالي يتوفر لديك دومًا أحدث إصدار منه.</translation>
 <translation id="3551320343578183772">إغلاق علامة التبويب</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">تم السماح باستخدام الميكروفون</translation>
 <translation id="4031527940632463547">تم حظر أجهزة الاستشعار</translation>
 <translation id="4033471457476425443">إضافة مجلد جديد</translation>
-<translation id="403456802563765809">لإدارة بصمات الإصبع، يُرجى إدراج مفتاح الأمان ولمسه.</translation>
 <translation id="4034824040120875894">الطابعة</translation>
 <translation id="4035758313003622889">مدير الم&amp;هام</translation>
 <translation id="4036778507053569103">السياسة المُنزَّلة من الخادم غير صالحة.</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526">لاستخدام <ph name="NETWORK_ID" /> ربما تحتاج أولاً إلى <ph name="LINK_START" />الانتقال إلى صفحة تسجيل الدخول إلى الشبكة<ph name="LINK_END" />، والتي سيتم فتحها تلقائيًا خلال بضع ثوانٍ. إذا لم يحدث ذلك، فلن يمكن استخدام الشبكة.</translation>
 <translation id="5637476008227280525">تفعيل بيانات الجوّال</translation>
 <translation id="5638309510554459422">‏يمكنك العثور على الإضافات والمظاهر في <ph name="BEGIN_LINK" />سوق Chrome الإلكتروني<ph name="END_LINK" />.</translation>
-<translation id="5639152092474119692">لإدارة بصمات الإصبع، يُرجى إدخال رقم التعريف الشخصي لمفتاح الأمان. في حال كنت لا تعرف رقم التعريف الشخصي، عليك إعادة ضبط مفتاح الأمان.</translation>
 <translation id="5639549361331209298">إعادة تحميل هذه الصفحة، انتظر لمشاهدة المزيد من الخيارات</translation>
 <translation id="5640133431808313291">إدارة مفاتيح الأمان</translation>
 <translation id="5642508497713047">‏التوقيع على قوائم إبطال الشهادات (CRL)</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">‏تنسيق عنوان URL غير صالح. التنسيقات المدعومة هي \\server\share وsmb://server/share.</translation>
 <translation id="5990386583461751448">مترجَمة</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذا التطبيق.}zero{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}two{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذين التطبيقين.}few{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}many{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}other{لضمان مواصلة تصفّح الويب، يُرجى الطلب من المُشرف إزالة هذه التطبيقات.}}</translation>
-<translation id="5995884201513800557">يُرجى الاستمرار في لمس مفتاح الأمان لحفظ بصمة إصبعك.</translation>
 <translation id="5997337190805127100">مزيد من المعلومات عن إمكانية الوصول إلى موقع الويب</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> من نتائج البحث عن "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">الأصوات المُفضَّلة</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">جارٍ الوصول إلى إدخال الفيديو</translation>
 <translation id="6011193465932186973">بصمة الإصبع</translation>
 <translation id="6011449291337289699">محو بيانات الموقع</translation>
-<translation id="6013505829696424563">لعرض بيانات تسجيل الدخول، أدخِل رقم التعريف الشخصي لمفتاح الأمان. في حال كنت لا تعرف رقم التعريف الشخصي، عليك إعادة ضبط مفتاح الأمان.</translation>
 <translation id="6015266928248016057">‏PUK غير صحيح. مرات إعادة المحاولة المتبقية: <ph name="RETRIES" /></translation>
 <translation id="6015796118275082299">عام</translation>
 <translation id="6016551720757758985">‏تأكيد Powerwash بالعودة إلى الإصدار السابق</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">السؤال قبل الإرسال</translation>
 <translation id="6840184929775541289">ليس مرجعًا مصدقًا</translation>
 <translation id="6841186874966388268">أخطاء</translation>
-<translation id="6841187140911216178">لعرض بيانات تسجيل الدخول، أدرج مفتاح الأمان والمسه.</translation>
 <translation id="6843423766595476978">‏Ok Google جاهز تمامًا</translation>
 <translation id="6845038076637626672">فتح في وضع التكبير</translation>
 <translation id="6845325883481699275">‏المساعدة في تحسين أمان Chrome</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">هامبورجر</translation>
 <translation id="883911313571074303">إضافة تعليق توضيحي على الصورة</translation>
 <translation id="8845001906332463065">الحصول على مساعدة</translation>
-<translation id="8845164297565101021">يُرجى إدخال مفتاح الأمان ولمسه لإنشاء رقم تعريف شخصي أو تغييره.</translation>
 <translation id="8846132060409673887">قراءة نموذج هذا الكمبيوتر والشركة المصنِّعة</translation>
 <translation id="8846141544112579928">جارٍ البحث عن لوحة المفاتيح...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">‏الترقية الدولية لـ Netscape</translation>
 <translation id="8944099748578356325">استخدام البطارية بسرعة أكبر (حاليًا <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">يشارك <ph name="APP_NAME" /> نافذة من خلال <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">يمكنك إضافة بصمات الإصبع المحفوظة على جهازك وإعادة تسميتها وحذفها.</translation>
 <translation id="8946359700442089734">لم يتم تفعيل ميزات التصحيح كليًا على هذا الجهاز <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">أتريد مغادرة وضع التصفح المتخفي؟</translation>
 <translation id="8948939328578167195">يريد <ph name="WEBSITE" /> الاطّلاع على العلامة التجارية لمفتاح الأمان وطرازه.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb
index b8af3c3..a7c2009 100644
--- a/chrome/app/resources/generated_resources_bg.xtb
+++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Plugin VM се нуждае от разрешение, за да стартира</translation>
 <translation id="1900305421498694955">Приложенията от Google Play може да искат пълен достъп до файловата система, за да четат и записват файлове във външни устройства за съхранение. Създадените на устройството файлове и папки са видими за всички, които използват външното хранилище. <ph name="LINK_BEGIN" />Научете повече<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Избиране на всички</translation>
-<translation id="1901984611178952431">Управление на данните за вход</translation>
 <translation id="1902576642799138955">Период на валидност</translation>
 <translation id="1905375423839394163">Име на устройството Chromebook</translation>
 <translation id="1905710495812624430">Максималният брой опити е надвишен.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Бъдещите актуализации на софтуера и тези за сигурност ще се инсталират автоматично.</translation>
 <translation id="1979280758666859181">Преминавате към канал с по-стара версия на <ph name="PRODUCT_NAME" />. Промяната на канала ще се приложи, когато версията в него вече съответства на инсталираната понастоящем на устройството ви.</translation>
 <translation id="197989455406964291">Типът шифроване не се поддържа от KDC</translation>
-<translation id="1981544341227357861">Премахнете ключа за сигурност от устройството си, след което го поставете отново и го докоснете.</translation>
 <translation id="1982354452682152483">Няма налично описание.</translation>
 <translation id="1987317783729300807">Профили</translation>
 <translation id="1989112275319619282">Сърфиране</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Вход в Chrome</translation>
 <translation id="3285322247471302225">Нов &amp;раздел</translation>
 <translation id="328571385944182268">Да се запазят ли паролите ви?</translation>
-<translation id="3286737518123001369">Преглед и изтриване на данните за вход, съхранявани в ключа ви за сигурност</translation>
 <translation id="3288047731229977326">Разширенията, които се изпълняват в режим за програмисти, могат да навредят на компютъра ви. Ако не сте програмист, за по-голяма безопасност трябва да деактивирате изпълнението им в този режим.</translation>
 <translation id="3289856944988573801">За да проверите за актуализации, моля, използвайте Ethernet или Wi-Fi.</translation>
 <translation id="3293644607209440645">Изпращане на тази страница</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">Подпис по X9.62 ECDSA с SHA-512</translation>
 <translation id="3544879808695557954">Потребителско име (по избор)</translation>
 <translation id="354602065659584722">Опасният софтуер бе премахнат</translation>
-<translation id="3547220315004609203">Превключване на лентата с раздели</translation>
 <translation id="3547954654003013442">Настройки за прокси сървър</translation>
 <translation id="3550915441744863158">Chrome се актуализира автоматично, така че винаги имате най-новата версия</translation>
 <translation id="3551320343578183772">Затваряне на раздела</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">Достъпът до микрофона е разрешен</translation>
 <translation id="4031527940632463547">Сензорите са блокирани</translation>
 <translation id="4033471457476425443">Добавяне на нова папка</translation>
-<translation id="403456802563765809">За да управлявате отпечатъците си, поставете и докоснете ключа си за сигурност.</translation>
 <translation id="4034824040120875894">Принтер</translation>
 <translation id="4035758313003622889">Мени&amp;джър на задачите</translation>
 <translation id="4036778507053569103">Изтегленото от сървъра правило е невалидно.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">За да използвате „<ph name="NETWORK_ID" />“, може да се наложи първо <ph name="LINK_START" />да посетите страницата за вход в мрежата<ph name="LINK_END" />, която ще се отвори автоматично след няколко секунди. Ако това не се случи, мрежата не може да се ползва.</translation>
 <translation id="5637476008227280525">Активиране на мобилните данни</translation>
 <translation id="5638309510554459422">Намерете разширения и теми в <ph name="BEGIN_LINK" />уеб магазина на Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">За да управлявате отпечатъците си, въведете ПИН кода за ключа си за сигурност. Ако не го знаете, трябва да нулирате ключа за сигурност.</translation>
 <translation id="5639549361331209298">Презареждане на тази страница – задръжте, за да видите още опции</translation>
 <translation id="5640133431808313291">Управление на ключовете за сигурност</translation>
 <translation id="5642508497713047">Подписващ CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Форматът на URL адреса е невалиден. поддържаните формати са \\сървър\дял и smb://сървър/дял.</translation>
 <translation id="5990386583461751448">Преведено</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне това приложение.}other{За да продължите да сърфирате безпроблемно в мрежата, помолете администратора да премахне тези приложения.}}</translation>
-<translation id="5995884201513800557">Продължете да докосвате ключа за сигурност, за да запазите отпечатъка си.</translation>
 <translation id="5997337190805127100">Научете повече за достъпа на сайта</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> резултата за „<ph name="SEARCH_TEXT" />“</translation>
 <translation id="6002458620803359783">Предпочитани гласове</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Осъществява се достъп до видеовхода</translation>
 <translation id="6011193465932186973">Отпечатък</translation>
 <translation id="6011449291337289699">Изчистване на данните за сайтовете</translation>
-<translation id="6013505829696424563">За да видите данните за вход, въведете ПИН кода за ключа си за сигурност. Ако не го знаете, трябва да нулирате ключа за сигурност.</translation>
 <translation id="6015266928248016057">Невалиден PUK код. Оставащи опити: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Година</translation>
 <translation id="6016551720757758985">Потвърждаване на извършването на Powerwash и връщането към предишната версия</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Извеждане на запитване преди изпращане</translation>
 <translation id="6840184929775541289">Не е сертифициращ орган</translation>
 <translation id="6841186874966388268">Грешки</translation>
-<translation id="6841187140911216178">За да видите данните за вход, поставете и докоснете ключа си за сигурност</translation>
 <translation id="6843423766595476978">Настроихте Ok Google</translation>
 <translation id="6845038076637626672">Отваряне с увеличен изглед</translation>
 <translation id="6845325883481699275">Помощ за подобряването на сигурността на Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Хамбургер</translation>
 <translation id="883911313571074303">Добавяне на пояснение към изображението</translation>
 <translation id="8845001906332463065">Получете помощ</translation>
-<translation id="8845164297565101021">Поставете ключа си за сигурност и го докоснете, за да създадете или промените ПИН.</translation>
 <translation id="8846132060409673887">Четене на производителя и модела на този компютър</translation>
 <translation id="8846141544112579928">Търси се клавиатура...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Международно повишаване на сигурността от Netscape</translation>
 <translation id="8944099748578356325">използва батерията по-бързо (понастоящем тя е <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> споделя прозорец с/ъс „<ph name="TAB_NAME" />“.</translation>
-<translation id="8945764661949477243">Добавяне, преименуване и изтриване на отпечатъци, запазени на устройството ви</translation>
 <translation id="8946359700442089734">Функциите за отстраняване на грешки не бяха напълно активирани на това устройство с <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Излизане от режим „инкогнито“?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> иска да разбере марката и модела на ключа ви за сигурност</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb
index 77f5a430..96bfea7 100644
--- a/chrome/app/resources/generated_resources_bn.xtb
+++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">প্লাগ-ইন VM চালানোর জন্য অনুমতি প্রয়োজন</translation>
 <translation id="1900305421498694955">এক্সটার্নাল স্টোরেজ ডিভাইসে ফাইল পড়তে এবং সেভ করতে Google Play থেকে ডাউনলোড করা অ্যাপের সম্পূর্ণ ফাইল সিস্টেমে অ্যাক্সেসের প্রয়োজন হতে পারে। ডিভাইসে তৈরি করা ফাইল এবং ফোল্ডার এক্সটার্নাল ড্রাইভ ব্যবহারকারীরা দেখতে পারবেন। <ph name="LINK_BEGIN" />আরও জানুন<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;সকল বেছে নিন</translation>
-<translation id="1901984611178952431">সাইন-ইন ডেটা ম্যানেজ করুন</translation>
 <translation id="1902576642799138955">বৈধতা পর্ব</translation>
 <translation id="1905375423839394163">Chromebook ডিভাইসের নাম</translation>
 <translation id="1905710495812624430">সর্বোচ্চ অনুমোদিত প্রচেষ্টা ছাড়িয়ে গেছে।</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">ভবিষ্যতে সফ্টওয়্যার এবং সুরক্ষা সংক্রান্ত আপডেট অটোমেটিক ইনস্টল হয়ে যাবে।</translation>
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-এর পুরনো ভার্সন দিয়ে একটি চ্যানেলে পরিবর্তন করছেন৷ যখন আপনার ডিভাইসে বর্তমানে ইনস্টল করা ভার্সনের সঙ্গে চ্যানেলের ভার্সনটি মিলে যাবে তখনই চ্যানেল পরিবর্তন প্রযুক্ত হবে৷</translation>
 <translation id="197989455406964291">উল্লিখিত এনক্রিপশনের ধরন KDC-তে কাজ করে না</translation>
-<translation id="1981544341227357861">আপনার ডিভাইস থেকে নিরাপত্তা কী ডিভাইস সরিয়ে তা আবার ঢোকান এবং স্পর্শ করুন।</translation>
 <translation id="1982354452682152483">এই ছবির কোনও বিবরণ নেই।</translation>
 <translation id="1987317783729300807">অ্যাকাউন্টসমূহ</translation>
 <translation id="1989112275319619282">ব্রাউজ করুন</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Chrome-এ সাইন-ইন করুন</translation>
 <translation id="3285322247471302225">নতুন &amp;ট্যাব</translation>
 <translation id="328571385944182268">আপনার পাসওয়ার্ড সেভ করবেন?</translation>
-<translation id="3286737518123001369">আপনার নিরাপত্তা কীয়ে সেভ করা সাইন-ইন ডেটা দেখুন ও মুছুন</translation>
 <translation id="3288047731229977326">ডেভেলপার মোডে চলমান এক্সটেনশনগুলি আপনার কম্পিউটারের ক্ষতি করতে পারে৷ যদি আপনি একজন ডেভেলপার না হন, তবে সুরক্ষিত থাকার জন্য আপনার এই এক্সটেনশনগুলিকে ডেভেলপার মোডে চালানো বন্ধ করা উচিৎ৷</translation>
 <translation id="3289856944988573801">আপডেটগুলি পরীক্ষা করার জন্য, অনুগ্রহ করে Ethernet বা ওয়াই-ফাই ব্যবহার করুন৷</translation>
 <translation id="3293644607209440645">এই পৃষ্ঠা পাঠিয়ে দিন</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">SHA-512 সহ X9.62 ECDSA স্বাক্ষর</translation>
 <translation id="3544879808695557954">ব্যবহারকারীর নাম (ঐচ্ছিক)</translation>
 <translation id="354602065659584722">ক্ষতিকর সফ্টওয়্যার সরানো হয়েছে</translation>
-<translation id="3547220315004609203">ট্যাব স্ট্রিপ টগল করুন</translation>
 <translation id="3547954654003013442">প্রক্সি সেটিংস</translation>
 <translation id="3550915441744863158">Chrome অটোমেটিক আপডেট হয় তাই আপনি সবসময় নবীনতম ভার্সনটি পান</translation>
 <translation id="3551320343578183772">ট্যাব বন্ধ করুন</translation>
@@ -2122,7 +2118,6 @@
 <translation id="4031179711345676612">মাইক্রোফোন ব্যবহারের অনুমতি দেওয়া হয়েছে</translation>
 <translation id="4031527940632463547">সেন্সরগুলি ব্লক করা হয়েছে</translation>
 <translation id="4033471457476425443">নতুন ফোল্ডার যোগ করুন</translation>
-<translation id="403456802563765809">আপনার ফিঙ্গারপ্রিন্ট ম্যানেজ করতে নিরাপত্তা কী ঢুকিয়ে চালু করার বোতামে আঙ্গুল দিয়ে টাচ করুন।</translation>
 <translation id="4034824040120875894">প্রিন্টার</translation>
 <translation id="4035758313003622889">&amp;কার্য পরিচালক</translation>
 <translation id="4036778507053569103">সার্ভার থেকে ডাউনলোড করা নীতিটি ভুল।</translation>
@@ -3166,7 +3161,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ব্যবহার করতে গেলে আপনাকে প্রথমে <ph name="LINK_START" />নেটওয়ার্কের সাইন-ইন পৃষ্ঠায় যেতে হবে<ph name="LINK_END" />, যা কয়েক সেকেন্ডের মধ্যে অটোমেটিকভাবে খুলবে৷ যদি এমন না হয়, তাহলে নেটওয়ার্কটি ব্যবহার করা যেতে পারে৷</translation>
 <translation id="5637476008227280525">মোবাইল ডেটা সক্ষম করুন</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome ওয়েব স্টোর<ph name="END_LINK" />-এ এক্সটেনশন এবং থিম খুঁজুন</translation>
-<translation id="5639152092474119692">আপনার ফিঙ্গারপ্রিন্ট ম্যানেজ করতে নিরাপত্তা কী-এর পিন লিখুন। পিন না জানলে, আপনাকে নিরাপত্তা কী রিসেট করতে হবে।</translation>
 <translation id="5639549361331209298">এই পৃষ্ঠাটি রিলোড করুন, আরও বিকল্প দেখতে ধরে থাকুন</translation>
 <translation id="5640133431808313291">নিরাপত্তা কী ডিভাইস ম্যানেজ করা</translation>
 <translation id="5642508497713047">CRL স্বাক্ষরকারী</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">ইউআরএল ফর্ম্যাটটি সঠিক নয়। সমর্থিত ফর্ম্য়াটগুলি হল \\server\share এবং smb://server/share।</translation>
 <translation id="5990386583461751448">অনূদিত</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনটি সরিয়ে দিতে বলুন।}one{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}other{আপনি যাতে ওয়েব ব্রাউজ করা চালিয়ে যেতে পারেন তার জন্য অ্যাডমিনিস্ট্রেটরকে এই অ্যাপ্লিকেশনগুলি সরিয়ে দিতে বলুন।}}</translation>
-<translation id="5995884201513800557">আপনার ফিঙ্গারপ্রিন্ট সেভ করার জন্য নিরাপত্তা কী-তে বারবার টাচ করুন।</translation>
 <translation id="5997337190805127100">সাইট অ্যাক্সেস সম্পর্কে আরও জানুন</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'-এর জন্য <ph name="RESULT_COUNT" />টি ফলাফল</translation>
 <translation id="6002458620803359783">পছন্দসই ভয়েস</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">ভিডিও ইনপুট অ্যাক্সেস করা হচ্ছে</translation>
 <translation id="6011193465932186973">আঙ্গুলের ছাপ</translation>
 <translation id="6011449291337289699">সাইট ডেটা সাফ করুন</translation>
-<translation id="6013505829696424563">সাইন-ইন ডেটা দেখতে আপনার নিরাপত্তা কীয়ের পিন লিখুন। পিন না জানলে, আপনাকে নিরাপত্তা কী রিসেট করতে হবে।</translation>
 <translation id="6015266928248016057">ভুল PUK লেখা হয়েছে। আপনি আর <ph name="RETRIES" /> বার চেষ্টা করতে পারবেন।</translation>
 <translation id="6015796118275082299">বছর</translation>
 <translation id="6016551720757758985">পূর্ববর্তী সংস্করণে ফিরে যাওয়া সহ পাওয়ারওয়াশ নিশ্চিত করুন</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">পাঠানোর আগে জিজ্ঞাসা করুন</translation>
 <translation id="6840184929775541289">একটি শংসাপত্র কর্তৃপক্ষ নয়</translation>
 <translation id="6841186874966388268">ত্রুটিগুলি</translation>
-<translation id="6841187140911216178">সাইন-ইন ডেটা দেখতে আপনার নিরাপত্তা কী লাগিয়ে চালু করার বোতামে টাচ করুন</translation>
 <translation id="6843423766595476978">হ্যালো Google ব্যবহারের জন্য প্রস্তুত</translation>
 <translation id="6845038076637626672">সর্বাধিক খুলুন</translation>
 <translation id="6845325883481699275">Chrome-এর নিরাপত্তা উন্নত করতে সাহায্য করুন</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">হ্যামবার্গার</translation>
 <translation id="883911313571074303">ইমেজ ব্যাখ্যা করুন</translation>
 <translation id="8845001906332463065">সাহায্য পান</translation>
-<translation id="8845164297565101021">কোনও পিন তৈরি বা পরিবর্তন করতে আপনার নিরাপত্তা কী ডিভাইস ঢোকান এবং স্পর্শ করুন।</translation>
 <translation id="8846132060409673887">এই কম্পিউটারের প্রস্তুতকারক এবং মডেলটি পড়ুন</translation>
 <translation id="8846141544112579928">কীবোর্ডের জন্য সার্চ করা হচ্ছে...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">ব্যাটারি আরও দ্রুত শেষ হবে (বর্তমানে <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> এর সঙ্গে একটি উইন্ডো শেয়ার করছে।</translation>
-<translation id="8945764661949477243">আপনার ডিভাইসে ফিঙ্গারপ্রিন্ট যোগ করুন, ফিঙ্গারপ্রিন্টের নতুন নাম দিন এবং আপনার ডিভাইসে সেভ করে রাখা ফিঙ্গারপ্রিন্ট মুছুন</translation>
 <translation id="8946359700442089734">এই <ph name="IDS_SHORT_PRODUCT_NAME" /> ডিভাইসে ডিবাগিং বৈশিষ্ট্যগুলি সম্পূর্ণরূপে চালু করা নেই৷</translation>
 <translation id="894871326938397531">ছদ্মবেশী মোড ছেড়ে বেরোবেন?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> আপনার নিরাপত্তা কী-এর কোম্পানির নাম এবং মডেলটি দেখতে চায়</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb
index 1308b37..d10f6fe 100644
--- a/chrome/app/resources/generated_resources_ca.xtb
+++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM necessita permís per executar-se</translation>
 <translation id="1900305421498694955">Pot ser que les aplicacions de Google Play requereixin accés complet al sistema de fitxers per llegir i escriure fitxers en dispositius d'emmagatzematge externs. Qualsevol persona que faci servir la unitat externa podrà veure les carpetes i els fitxers creats al dispositiu. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Selecciona-ho &amp;tot</translation>
-<translation id="1901984611178952431">Gestiona les dades d'inici de sessió</translation>
 <translation id="1902576642799138955">Període de validesa</translation>
 <translation id="1905375423839394163">Nom del dispositiu Chromebook</translation>
 <translation id="1905710495812624430">S'ha superat el nombre màxim d'intents permesos.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Les properes actualitzacions de seguretat i de programari s'instal·laran automàticament.</translation>
 <translation id="1979280758666859181">Esteu a punt de canviar a un canal amb una versió més antiga de <ph name="PRODUCT_NAME" />. El canvi de canal s'aplicarà quan la versió del canal coincideixi amb la versió qui hi ha instal·lada actualment en el vostre dispositiu.</translation>
 <translation id="197989455406964291">El Centre de distribució de claus de Kerberos no admet aquest tipus d'encriptació</translation>
-<translation id="1981544341227357861">Extreu la clau de seguretat del dispositiu. Després, torna-la a inserir i toca-la.</translation>
 <translation id="1982354452682152483">No hi ha cap descripció disponible.</translation>
 <translation id="1987317783729300807">Comptes</translation>
 <translation id="1989112275319619282">Examina</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Inicia la sessió a Chrome</translation>
 <translation id="3285322247471302225">Pes&amp;tanya nova</translation>
 <translation id="328571385944182268">Vols desar les contrasenyes?</translation>
-<translation id="3286737518123001369">Mostra i suprimeix les dades d'inici de sessió emmagatzemades a la clau de seguretat</translation>
 <translation id="3288047731229977326">Les extensions que funcionen amb el mode de desenvolupador poden malmetre el vostre ordinador. Si no sou desenvolupador, hauríeu de desactivar aquestes extensions per continuar protegit.</translation>
 <translation id="3289856944988573801">Per comprovar si hi ha actualitzacions, feu servir Ethernet o Wi-Fi.</translation>
 <translation id="3293644607209440645">Envia aquesta pàgina</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">Signatura d'ECDSA X9.62 amb SHA-512</translation>
 <translation id="3544879808695557954">Nom d'usuari (opcional)</translation>
 <translation id="354602065659584722">S'ha suprimit el programari nociu</translation>
-<translation id="3547220315004609203">Commuta la barra de pestanyes</translation>
 <translation id="3547954654003013442">Configuració del servidor intermediari</translation>
 <translation id="3550915441744863158">Chrome s'actualitza automàticament perquè en tingueu sempre la versió més recent.</translation>
 <translation id="3551320343578183772">Tanca la pestanya</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">El micròfon es pot utilitzar</translation>
 <translation id="4031527940632463547">Sensors bloquejats</translation>
 <translation id="4033471457476425443">Afegeix una carpeta nova</translation>
-<translation id="403456802563765809">Per gestionar les empremtes digitals, insereix i toca la clau de seguretat.</translation>
 <translation id="4034824040120875894">Impressora</translation>
 <translation id="4035758313003622889">Gestor de &amp;tasques</translation>
 <translation id="4036778507053569103">La política que s'ha baixat del servidor no és vàlida.</translation>
@@ -3166,7 +3161,6 @@
 <translation id="5636996382092289526">Per utilitzar <ph name="NETWORK_ID" />, és possible que abans calgui que <ph name="LINK_START" />visiteu la pàgina d'inici de sessió de la xarxa<ph name="LINK_END" />, que s'obrirà automàticament d'aquí a pocs segons. Si no s'obre, no podreu utilitzar la xarxa.</translation>
 <translation id="5637476008227280525">Activa les dades mòbils</translation>
 <translation id="5638309510554459422">Cerca extensions i temes a <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Per gestionar les empremtes digitals, introdueix el PIN de la clau de seguretat. Si no el saps, hauràs de restablir la clau de seguretat.</translation>
 <translation id="5639549361331209298">Torneu a carregar aquesta pàgina, espereu per veure més opcions</translation>
 <translation id="5640133431808313291">Gestiona les claus de seguretat</translation>
 <translation id="5642508497713047">Signant de CRL</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">El format de l'URL no és vàlid. S'admeten els formats del tipus \\servidor\ús_compartit i smb://servidor\ús_compartit.</translation>
 <translation id="5990386583461751448">Traduïda</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="5995884201513800557">Continua tocant la clau de seguretat per desar l'empremta digital.</translation>
 <translation id="5997337190805127100">Més informació sobre l'accés als llocs web</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultats per a "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Veus preferides</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">S'està accedint a l'entrada de vídeo</translation>
 <translation id="6011193465932186973">Empremta digital</translation>
 <translation id="6011449291337289699">Esborra les dades dels llocs</translation>
-<translation id="6013505829696424563">Per veure les dades d'inici de sessió, introdueix el PIN de la clau de seguretat. Si no el saps, hauràs de restablir la clau.</translation>
 <translation id="6015266928248016057">El PUK no és vàlid. Intents restants: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Any</translation>
 <translation id="6016551720757758985">Confirmació de Powerwash amb retorn a la versió anterior</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Pregunta abans d'enviar</translation>
 <translation id="6840184929775541289">No és una entitat emissora de certificats</translation>
 <translation id="6841186874966388268">Errors</translation>
-<translation id="6841187140911216178">Per veure les dades d'inici de sessió, insereix i toca la clau de seguretat</translation>
 <translation id="6843423766595476978">Ok Google ja està configurat</translation>
 <translation id="6845038076637626672">Obre-la maximitzada</translation>
 <translation id="6845325883481699275">Ajuda a millorar la seguretat de Chrome</translation>
@@ -5379,7 +5370,6 @@
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Afegeix una anotació a la imatge</translation>
 <translation id="8845001906332463065">Obteniu ajuda</translation>
-<translation id="8845164297565101021">Insereix la clau de seguretat i toca-la per crear un PIN o canviar l'existent.</translation>
 <translation id="8846132060409673887">Consultar el fabricant i el model d'aquest ordinador</translation>
 <translation id="8846141544112579928">S'està cercant el teclat...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5452,7 +5442,6 @@
 <translation id="894360074127026135">Entrada progressiva internacional de Netscape</translation>
 <translation id="8944099748578356325">Consumirà la bateria més ràpidament (actualment està al <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> està compartint una finestra amb <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Afegeix, suprimeix i canvia el nom de les empremtes digitals desades al dispositiu</translation>
 <translation id="8946359700442089734">Les funcions de depuració no s'han activat del tot en aquest dispositiu <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Vols sortir del mode d'incògnit?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> vol veure la marca i el model de la clau de seguretat</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb
index 4fed6a7..3568b573 100644
--- a/chrome/app/resources/generated_resources_cs.xtb
+++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM potřebuje oprávnění ke spuštění</translation>
 <translation id="1900305421498694955">Aplikace z Google Play mohou vyžadovat úplný přístup k systému souborů, aby mohly číst a zapisovat soubory na externích úložných zařízeních. Soubory a složky vytvořené na zařízení jsou viditelné pro každého, kdo daný externí disk používá. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Vybrat vše</translation>
-<translation id="1901984611178952431">Spravovat přihlašovací údaje</translation>
 <translation id="1902576642799138955">Doba platnosti</translation>
 <translation id="1905375423839394163">Název Chromebooku</translation>
 <translation id="1905710495812624430">Byl překročen maximální povolený počet pokusů.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Budoucí aktualizace softwaru a zabezpečení se nainstalují automaticky.</translation>
 <translation id="1979280758666859181">Přepínáte na kanál s nižší verzí <ph name="PRODUCT_NAME" />. Změna kanálu bude použita, až bude verze v nově zvoleném kanálu odpovídat verzi nainstalované v zařízení.</translation>
 <translation id="197989455406964291">KDC nepodporuje typ šifrování</translation>
-<translation id="1981544341227357861">Vyjměte bezpečnostní klíč ze zařízení, poté jej znovu vložte a dotkněte se jej.</translation>
 <translation id="1982354452682152483">Popis není k dispozici.</translation>
 <translation id="1987317783729300807">Účty</translation>
 <translation id="1989112275319619282">Procházet</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Přihlásit se do Chromu</translation>
 <translation id="3285322247471302225">Nová kar&amp;ta</translation>
 <translation id="328571385944182268">Ukládat hesla?</translation>
-<translation id="3286737518123001369">Zobrazit a vymazat přihlašovací údaje uložené na bezpečnostním klíči</translation>
 <translation id="3288047731229977326">Rozšíření spuštěná v režimu pro vývojáře mohou poškodit počítač. Pokud nejste vývojář, měli byste s ohledem na svou bezpečnost rozšíření spuštěná v tomto režimu deaktivovat.</translation>
 <translation id="3289856944988573801">Chcete-li zkontrolovat dostupnost aktualizací, použijte síť Ethernet nebo Wi-Fi.</translation>
 <translation id="3293644607209440645">Odeslat tuto stránku</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">Podpis X9.62 ECDSA s SHA-512</translation>
 <translation id="3544879808695557954">Uživatelské jméno (nepovinné)</translation>
 <translation id="354602065659584722">Škodlivý software byl odstraněn</translation>
-<translation id="3547220315004609203">Přepnout lištu karet</translation>
 <translation id="3547954654003013442">Nastavení proxy serveru</translation>
 <translation id="3550915441744863158">Chrome se automaticky aktualizuje, abyste měli vždy nejnovější verzi</translation>
 <translation id="3551320343578183772">Zavřít kartu</translation>
@@ -2122,7 +2118,6 @@
 <translation id="4031179711345676612">Mikrofon je povolen</translation>
 <translation id="4031527940632463547">Použití senzorů je blokováno</translation>
 <translation id="4033471457476425443">Přidat novou složku</translation>
-<translation id="403456802563765809">Chcete-li spravovat otisky, vložte bezpečnostní klíč a dotkněte se jej.</translation>
 <translation id="4034824040120875894">Tiskárna</translation>
 <translation id="4035758313003622889">Správce úloh</translation>
 <translation id="4036778507053569103">Zásada stažená ze serveru není platná.</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526">Chcete-li používat síť <ph name="NETWORK_ID" />, je třeba nejdříve <ph name="LINK_START" />přejít na přihlašovací stránku sítě<ph name="LINK_END" />, která se za několik sekund automaticky otevře. Pokud se tak nestane, nelze síť použít.</translation>
 <translation id="5637476008227280525">Aktivovat mobilní data</translation>
 <translation id="5638309510554459422">Rozšíření a motivy najdete v <ph name="BEGIN_LINK" />Internetovém obchodě Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Chcete-li spravovat otisky, zadejte PIN bezpečnostního klíče. Pokud PIN neznáte, budete bezpečnostní klíč muset resetovat.</translation>
 <translation id="5639549361331209298">Znovu načíst tuto stránku, další možnosti zobrazíte podržením.</translation>
 <translation id="5640133431808313291">Spravovat bezpečnostní klíče</translation>
 <translation id="5642508497713047">Autor podpisu CRL</translation>
@@ -3408,7 +3402,6 @@
 <translation id="5985458664595100876">Neplatný formát adresy URL. Podporované formáty jsou \\server\share a smb://server/share.</translation>
 <translation id="5990386583461751448">Přeloženo</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="5995884201513800557">Chcete-li otisk uložit, opakovaně se dotýkejte bezpečnostního klíče.</translation>
 <translation id="5997337190805127100">Další informace o přístupu k webům</translation>
 <translation id="6000758707621254961">Výsledky pro dotaz <ph name="SEARCH_TEXT" /> (<ph name="RESULT_COUNT" />)</translation>
 <translation id="6002458620803359783">Preferované hlasy</translation>
@@ -3418,7 +3411,6 @@
 <translation id="6010869025736512584">Přístup k vstupu videa</translation>
 <translation id="6011193465932186973">Otisk prstu</translation>
 <translation id="6011449291337289699">Vymazání dat webu</translation>
-<translation id="6013505829696424563">Chcete-li zobrazit přihlašovací údaje, zadejte PIN bezpečnostního klíče. Pokud PIN neznáte, budete bezpečnostní klíč muset resetovat.</translation>
 <translation id="6015266928248016057">Neplatný kód PUK. Zbývající pokusy: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Rok</translation>
 <translation id="6016551720757758985">Potvrďte obnovení pomocí funkce Powerwash a návrat k předchozí verzi aplikace</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">Před odesláním se zeptat</translation>
 <translation id="6840184929775541289">Není certifikační autorita</translation>
 <translation id="6841186874966388268">Chyby</translation>
-<translation id="6841187140911216178">Chcete-li zobrazit přihlašovací údaje, vložte bezpečnostní klíč a dotkněte se ho</translation>
 <translation id="6843423766595476978">Funkce OK Google je připravená</translation>
 <translation id="6845038076637626672">Otevřít maximalizované</translation>
 <translation id="6845325883481699275">Pomoci zlepšovat zabezpečení Chromu</translation>
@@ -5156,7 +5147,7 @@
 <translation id="8546541260734613940">[*.]example.com</translation>
 <translation id="854655314928502177">Adresa URL automatického zjišťování webového proxy serveru:</translation>
 <translation id="8546930481464505581">Přizpůsobit dotykovou plochu</translation>
-<translation id="8547013269961688403">Zapnout lupu celé obrazovky</translation>
+<translation id="8547013269961688403">Povolit zvětšení obrazovky</translation>
 <translation id="85486688517848470">Podržením vyhledávacího tlačítka přepnete chování tlačítek v horním řádku</translation>
 <translation id="8549457076611407730">{NUM_ITEMS,plural, =1{1 položka}few{# položky}many{# položky}other{# položek}}</translation>
 <translation id="8551388862522347954">Licence</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Přidat k obrázku poznámku</translation>
 <translation id="8845001906332463065">Nápověda</translation>
-<translation id="8845164297565101021">Chcete-li vytvořit nebo změnit PIN, vložte bezpečnostní klíč a dotkněte se jej.</translation>
 <translation id="8846132060409673887">Zjistit výrobce a model počítače</translation>
 <translation id="8846141544112579928">Vyhledávání klávesnice...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Bude rychleji vybíjet baterii (aktuálně <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> sdílí okno s kartou <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Přidání, přejmenování a mazání otisků uložených v zařízení</translation>
 <translation id="8946359700442089734">V tomto zařízení <ph name="IDS_SHORT_PRODUCT_NAME" /> nebyly úplně povoleny funkce ladění.</translation>
 <translation id="894871326938397531">Ukončit anonymní režim?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> chce zjistit model a značku vašeho bezpečnostního klíče</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb
index f85a6c0..db989b4 100644
--- a/chrome/app/resources/generated_resources_da.xtb
+++ b/chrome/app/resources/generated_resources_da.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM skal have tilladelse for at kunne køre</translation>
 <translation id="1900305421498694955">Apps fra Google Play skal muligvis have fuld adgang til filsystemet for at læse og skrive filer på eksterne lagerenheder. De filer og mapper, som oprettes på enheden, er synlige for alle, der bruger det eksterne drev. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Vælg &amp;alle</translation>
-<translation id="1901984611178952431">Administrer logindata</translation>
 <translation id="1902576642799138955">Gyldighedsperiode</translation>
 <translation id="1905375423839394163">Navn på Chromebook-enhed</translation>
 <translation id="1905710495812624430">Det maksimale antal forsøg er overskredet.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Fremtidige software- og sikkerhedsopdateringer installeres automatisk.</translation>
 <translation id="1979280758666859181">Du er ved at skifte til en kanal med en ældre version af <ph name="PRODUCT_NAME" />. Kanalskiftet træder i kraft, når kanalversionen matcher den version, der i øjeblikket er installeret på din enhed.</translation>
 <translation id="197989455406964291">KDC understøtter ikke krypteringstypen</translation>
-<translation id="1981544341227357861">Fjern sikkerhedsnøglen fra enheden, indsæt den igen, og tryk på den.</translation>
 <translation id="1982354452682152483">Der er ingen beskrivelse.</translation>
 <translation id="1987317783729300807">Konti</translation>
 <translation id="1989112275319619282">Gennemse</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Log ind i Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;fane</translation>
 <translation id="328571385944182268">Vil du gemme dine adgangskoder?</translation>
-<translation id="3286737518123001369">Se og slet de logindata, som er gemt på din sikkerhedsnøgle</translation>
 <translation id="3288047731229977326">Udvidelser, der kører i udviklertilstand, kan skade din computer. Hvis du ikke er udvikler, skal du deaktivere udvidelserne, der kører i udviklertilstand, af hensyn til sikkerheden.</translation>
 <translation id="3289856944988573801">Du kan søge efter opdateringer via Ethernet eller Wi-Fi.</translation>
 <translation id="3293644607209440645">Send denne side</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA-signatur med SHA-512</translation>
 <translation id="3544879808695557954">Brugernavn (valgfrit)</translation>
 <translation id="354602065659584722">Den skadelige software er slettet</translation>
-<translation id="3547220315004609203">Slå fanelinje til eller fra</translation>
 <translation id="3547954654003013442">Proxyindstillinger</translation>
 <translation id="3550915441744863158">Chrome opdateres automatisk, så du altid har den nyeste version</translation>
 <translation id="3551320343578183772">Luk fanen</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Der er givet adgang til mikrofonen</translation>
 <translation id="4031527940632463547">Der er blokeret for sensorer</translation>
 <translation id="4033471457476425443">Tilføj ny mappe</translation>
-<translation id="403456802563765809">Hvis du vil administrere fingeraftryk, skal du indsætte og trykke på din sikkerhedsnøgle.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Jobliste</translation>
 <translation id="4036778507053569103">Den politik, der er downloadet fra serveren, er ugyldig.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Hvis du vil bruge <ph name="NETWORK_ID" />, skal du først <ph name="LINK_START" />gå til netværkets loginside<ph name="LINK_END" />, som åbner automatisk om et par sekunder. Hvis ikke, kan netværket ikke bruges.</translation>
 <translation id="5637476008227280525">Aktivér mobildata</translation>
 <translation id="5638309510554459422">Find udvidelser og temaer i <ph name="BEGIN_LINK" />Chrome Webshop<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Hvis du vil administrere dine fingeraftryk, skal du angive pinkoden for din sikkerhedsnøgle. Hvis du ikke kender pinkoden, skal du nulstille sikkerhedsnøglen.</translation>
 <translation id="5639549361331209298">Opdater denne side, og hold markøren for at se flere valgmuligheder</translation>
 <translation id="5640133431808313291">Administrer sikkerhedsnøgler</translation>
 <translation id="5642508497713047">CRL-underskriver</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Ugyldigt webadresseformat. De understøttede formater er \\server\share og smb://server/share.</translation>
 <translation id="5990386583461751448">Oversat</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="5995884201513800557">Fortsæt med at trykke på din sikkerhedsnøgle for at gemme dit fingeraftryk.</translation>
 <translation id="5997337190805127100">Få flere oplysninger om websiteadgang</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultater for "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Foretrukne stemmer</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Åbner videoinput</translation>
 <translation id="6011193465932186973">Fingeraftryk</translation>
 <translation id="6011449291337289699">Ryd websitedata</translation>
-<translation id="6013505829696424563">Angiv pinkoden til din sikkerhedsnøgle for at se logindata. Hvis du ikke kender pinkoden, skal du nulstille sikkerhedsnøglen.</translation>
 <translation id="6015266928248016057">PUK-koden er ugyldig. Antal resterende forsøg: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">År</translation>
 <translation id="6016551720757758985">Bekræft Powerwash med nulstilling til forrige version</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Spørg, før der sendes</translation>
 <translation id="6840184929775541289">Er ikke en certificeringsautoritet</translation>
 <translation id="6841186874966388268">Fejl</translation>
-<translation id="6841187140911216178">Indsæt og tryk på din sikkerhedsnøgle for at se logindata.</translation>
 <translation id="6843423766595476978">Ok Google er konfigureret</translation>
 <translation id="6845038076637626672">Åbn maksimeret</translation>
 <translation id="6845325883481699275">Hjælp med at forbedre sikkerheden i Chrome</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annoter billede</translation>
 <translation id="8845001906332463065">Få hjælp</translation>
-<translation id="8845164297565101021">Indsæt sikkerhedsnøglen, og tryk på den for at oprette eller ændre en pinkode.</translation>
 <translation id="8846132060409673887">Læs computerens producent og model</translation>
 <translation id="8846141544112579928">Søger efter tastatur...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">Netscape, international optrapning</translation>
 <translation id="8944099748578356325">Batteriet bruges hurtigere (i øjeblikket <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> deler et vindue med <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Tilføj, omdøb og slet fingeraftryk, der er gemt på din enhed</translation>
 <translation id="8946359700442089734">Fejlretningsfunktionerne blev ikke aktiveret korrekt på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enhed.</translation>
 <translation id="894871326938397531">Afslut inkognitotilstand?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> anmoder om at se din sikkerhedsnøgles fabrikat og model</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb
index c183555e..e56b5f7 100644
--- a/chrome/app/resources/generated_resources_de.xtb
+++ b/chrome/app/resources/generated_resources_de.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Plugin VM benötigt die Berechtigung zur Ausführung</translation>
 <translation id="1900305421498694955">Google Play-Apps benötigen möglicherweise vollständigen Zugriff auf Ihr Dateisystem, um auf externen Speichergeräten Dateien lesen und schreiben zu können. Dateien und Ordner, die auf dem Gerät erstellt werden, sind für alle Nutzer des externen Speichergeräts sichtbar. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Alles auswählen</translation>
-<translation id="1901984611178952431">Anmeldedaten verwalten</translation>
 <translation id="1902576642799138955">Gültigkeitsdauer</translation>
 <translation id="1905375423839394163">Name des Chromebooks</translation>
 <translation id="1905710495812624430">Die maximal zulässige Anzahl an Versuchen wurde überschritten.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Künftige Software- und Sicherheitsupdates werden automatisch installiert.</translation>
 <translation id="1979280758666859181">Sie möchten zu einem Kanal mit einer älteren Version von <ph name="PRODUCT_NAME" /> wechseln. Die Änderung erfolgt, sobald die Kanalversion der aktuell auf Ihrem Gerät installierten Version entspricht.</translation>
 <translation id="197989455406964291">KDC unterstützt den Verschlüsselungstyp nicht</translation>
-<translation id="1981544341227357861">Entfernen Sie den Sicherheitsschlüssel von Ihrem Gerät, setzen Sie ihn neu ein und tippen Sie darauf.</translation>
 <translation id="1982354452682152483">Es ist keine Beschreibung verfügbar.</translation>
 <translation id="1987317783729300807">Konten</translation>
 <translation id="1989112275319619282">Durchsuchen</translation>
@@ -1575,7 +1573,6 @@
 <translation id="3282568296779691940">In Chrome anmelden</translation>
 <translation id="3285322247471302225">Neuer &amp;Tab</translation>
 <translation id="328571385944182268">Passwörter speichern?</translation>
-<translation id="3286737518123001369">Auf Ihrem Sicherheitsschlüssel gespeicherte Anmeldedaten abrufen und löschen</translation>
 <translation id="3288047731229977326">Erweiterungen im Entwicklermodus können auf Ihrem Computer Schaden anrichten. Wenn Sie kein Entwickler sind, sollten Sie diese Erweiterungen im Entwicklermodus deaktivieren, um sicher zu sein.</translation>
 <translation id="3289856944988573801">Verwenden Sie Ethernet oder WLAN zur Suche nach Updates.</translation>
 <translation id="3293644607209440645">Diese Seite senden</translation>
@@ -1745,7 +1742,6 @@
 <translation id="3543597750097719865">X9.62-ECDSA-Signatur mit SHA-512</translation>
 <translation id="3544879808695557954">Nutzername (optional)</translation>
 <translation id="354602065659584722">Schädliche Software entfernt</translation>
-<translation id="3547220315004609203">Tableiste umschalten</translation>
 <translation id="3547954654003013442">Proxy-Einstellungen</translation>
 <translation id="3550915441744863158">Chrome wird automatisch aktualisiert, sodass Sie immer über die neueste Version verfügen.</translation>
 <translation id="3551320343578183772">Tab schließen</translation>
@@ -2120,7 +2116,6 @@
 <translation id="4031179711345676612">Mikrofonnutzung zulässig</translation>
 <translation id="4031527940632463547">Sensoren blockiert</translation>
 <translation id="4033471457476425443">Neuen Ordner hinzufügen</translation>
-<translation id="403456802563765809">Wenn Sie Ihre Fingerabdrücke verwalten möchten, stecken Sie Ihren Sicherheitsschlüssel ein und tippen Sie darauf.</translation>
 <translation id="4034824040120875894">Drucker</translation>
 <translation id="4035758313003622889">&amp;Taskmanager</translation>
 <translation id="4036778507053569103">Die vom Server heruntergeladene Richtlinie ist ungültig.</translation>
@@ -3163,7 +3158,6 @@
 <translation id="5636996382092289526">Zur Verwendung von <ph name="NETWORK_ID" /> müssen Sie eventuell zuerst die <ph name="LINK_START" />Anmeldeseite des Netzwerks besuchen<ph name="LINK_END" />. Diese wird in einigen Sekunden automatisch geöffnet. Anderenfalls kann das Netzwerk nicht verwendet werden.</translation>
 <translation id="5637476008227280525">Aktivierung der mobilen Daten</translation>
 <translation id="5638309510554459422">Im <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /> nach Erweiterungen und Designs suchen</translation>
-<translation id="5639152092474119692">Wenn Sie Ihre Fingerabdrücke verwalten möchten, geben Sie die PIN Ihres Sicherheitsschlüssels ein. Falls Sie die PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen.</translation>
 <translation id="5639549361331209298">Seite aktualisieren, für weitere Optionen gedrückt halten</translation>
 <translation id="5640133431808313291">Sicherheitsschlüssel verwalten</translation>
 <translation id="5642508497713047">CRL-Signaturgeber</translation>
@@ -3406,7 +3400,6 @@
 <translation id="5985458664595100876">Ungültiges URL-Format. Unterstützt werden \\server\share und smb://server/share.</translation>
 <translation id="5990386583461751448">Übersetzt</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="5995884201513800557">Berühren Sie mehrmals den Fingerabdrucksensor auf Ihrem Sicherheitsschlüssel, um den Fingerabdruck zu speichern.</translation>
 <translation id="5997337190805127100">Weitere Informationen zum Websitezugriff</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> Ergebnisse für "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Bevorzugte Stimmen</translation>
@@ -3416,7 +3409,6 @@
 <translation id="6010869025736512584">Zugriff auf Video-Eingang</translation>
 <translation id="6011193465932186973">Fingerabdruck</translation>
 <translation id="6011449291337289699">Websitedaten löschen</translation>
-<translation id="6013505829696424563">Geben Sie die PIN für Ihren Sicherheitsschlüssel ein, um die Anmeldedaten abzurufen. Falls Sie die PIN nicht kennen, müssen Sie den Sicherheitsschlüssel zurücksetzen.</translation>
 <translation id="6015266928248016057">Ungültiger PUK. Noch <ph name="RETRIES" /> Versuche.</translation>
 <translation id="6015796118275082299">Jahr</translation>
 <translation id="6016551720757758985">Powerwash und Zurücksetzen auf vorherige Version bestätigen</translation>
@@ -3971,7 +3963,6 @@
 <translation id="6840155290835956714">Vor dem Senden nachfragen</translation>
 <translation id="6840184929775541289">Ist keine Zertifizierungsstelle</translation>
 <translation id="6841186874966388268">Fehler</translation>
-<translation id="6841187140911216178">Wenn Sie die Anmeldedaten abrufen möchten, stecken Sie Ihren Sicherheitsschlüssel ein und tippen Sie darauf</translation>
 <translation id="6843423766595476978">"Ok Google" ist eingerichtet</translation>
 <translation id="6845038076637626672">Maximiert öffnen</translation>
 <translation id="6845325883481699275">Zur Verbesserung der Sicherheit von Chrome beitragen</translation>
@@ -5375,7 +5366,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Bild mit Anmerkung versehen</translation>
 <translation id="8845001906332463065">Hilfe aufrufen</translation>
-<translation id="8845164297565101021">Stecken Sie den Sicherheitsschlüssel ein und tippen Sie darauf, um eine PIN zu erstellen oder zu ändern.</translation>
 <translation id="8846132060409673887">Hersteller und Modell dieses Computers auslesen</translation>
 <translation id="8846141544112579928">Suche nach Tastatur läuft...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5448,7 +5438,6 @@
 <translation id="894360074127026135">Netscape International Step-up</translation>
 <translation id="8944099748578356325">Den Akku schneller verbrauchen (aktueller Stand: <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> teilt ein Fenster mit <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Fingerabdrücke hinzufügen oder Fingerabdrücke, die auf Ihrem Gerät gespeichert sind, umbenennen und löschen</translation>
 <translation id="8946359700442089734">Die Debugging-Funktionen wurden auf diesem <ph name="IDS_SHORT_PRODUCT_NAME" />-Gerät nicht vollständig aktiviert.</translation>
 <translation id="894871326938397531">Inkognitomodus deaktivieren?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> möchte den Hersteller und das Modell Ihres Sicherheitsschlüssels aufrufen</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb
index b72a3e90..4fd7f1a 100644
--- a/chrome/app/resources/generated_resources_el.xtb
+++ b/chrome/app/resources/generated_resources_el.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Η προσθήκη VM χρειάζεται άδεια για να εκτελεστεί</translation>
 <translation id="1900305421498694955">Οι εφαρμογές από το Google Play μπορεί να απαιτούν πλήρη πρόσβαση στο σύστημα αρχείων για την ανάγνωση και την εγγραφή αρχείων σε εξωτερικές συσκευές αποθηκευτικού χώρου. Τα αρχεία και οι φάκελοι που δημιουργούνται στη συσκευή είναι ορατά σε οποιονδήποτε χρησιμοποιεί την εξωτερική μονάδα δίσκου. <ph name="LINK_BEGIN" />Μάθετε περισσότερα<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Επιλογή όλ&amp;ων</translation>
-<translation id="1901984611178952431">Διαχείριση δεδομένων σύνδεσης</translation>
 <translation id="1902576642799138955">Περίοδος εγκυρότητας</translation>
 <translation id="1905375423839394163">Όνομα συσκευής Chromebook</translation>
 <translation id="1905710495812624430">Έγινε υπέρβαση του μέγιστου αριθμού επιτρεπόμενων προσπαθειών.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Οι μελλοντικές ενημερώσεις λογισμικού και ασφαλείας θα εγκαθίστανται αυτόματα.</translation>
 <translation id="1979280758666859181">Έχετε επιλέξει ένα κανάλι με μια παλαιότερη έκδοση του <ph name="PRODUCT_NAME" />. Η αλλαγή καναλιού θα πραγματοποιηθεί όταν η έκδοση του καναλιού συμφωνεί με την έκδοση που είναι εγκατεστημένη στη συσκευή σας.</translation>
 <translation id="197989455406964291">Το KDC δεν υποστηρίζει τον τύπο κρυπτογράφησης</translation>
-<translation id="1981544341227357861">Αφαιρέστε το κλειδί ασφαλείας σας από τη συσκευή και, στη συνέχεια, επανατοποθετήστε το και αγγίξτε το.</translation>
 <translation id="1982354452682152483">Δεν υπάρχει διαθέσιμη περιγραφή.</translation>
 <translation id="1987317783729300807">Λογαριασμοί</translation>
 <translation id="1989112275319619282">Περιήγηση</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Σύνδεση στο Chrome</translation>
 <translation id="3285322247471302225">Νέα &amp;Καρτέλα</translation>
 <translation id="328571385944182268">Αποθήκευση των κωδικών πρόσβασής σας;</translation>
-<translation id="3286737518123001369">Προβάλετε και διαγράψτε τα δεδομένα σύνδεσης που έχουν αποθηκευτεί στο κλειδί ασφαλείας σας.</translation>
 <translation id="3288047731229977326">Οι επεκτάσεις που εκτελούνται σε λειτουργία προγραμματιστή μπορούν να βλάψουν τον υπολογιστή σας. Εάν δεν είστε προγραμματιστής, θα πρέπει να απενεργοποιήσετε αυτές τις επεκτάσεις που εκτελούνται σε λειτουργία προγραμματιστή για να διατηρήσετε την ασφάλειά σας.</translation>
 <translation id="3289856944988573801">Για να ελέγξετε για ενημερώσεις, χρησιμοποιήστε δίκτυο Ethernet ή Wi-Fi.</translation>
 <translation id="3293644607209440645">Αποστολή αυτής της σελίδας</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Υπογραφή X9.62 ECDSA με SHA-512</translation>
 <translation id="3544879808695557954">Όνομα χρήστη (προαιρετικά)</translation>
 <translation id="354602065659584722">Το επιβλαβές λογισμικό καταργήθηκε</translation>
-<translation id="3547220315004609203">Εναλλαγή γραμμής καρτελών</translation>
 <translation id="3547954654003013442">Ρυθμίσεις διακομιστή μεσολάβησης</translation>
 <translation id="3550915441744863158">Το Chrome ενημερώνεται αυτόματα έτσι ώστε να έχετε πάντα στη διάθεσή σας τη νεότερη έκδοση.</translation>
 <translation id="3551320343578183772">Κλείσιμο Καρτέλας</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Επιτρέπεται το μικρόφωνο</translation>
 <translation id="4031527940632463547">Οι αισθητήρες αποκλείστηκαν</translation>
 <translation id="4033471457476425443">Προσθήκη νέου φακέλου</translation>
-<translation id="403456802563765809">Για τη διαχείριση των δακτυλικών αποτυπωμάτων σας, εισαγάγετε και αγγίξτε το κλειδί ασφαλείας σας.</translation>
 <translation id="4034824040120875894">Εκτυπωτής</translation>
 <translation id="4035758313003622889">Δια&amp;χείριση εργασιών</translation>
 <translation id="4036778507053569103">Η πολιτική της οποίας έγινε λήψη από τον διακομιστή δεν είναι έγκυρη.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">Για να χρησιμοποιήσετε το <ph name="NETWORK_ID" /> ίσως χρειαστεί πρώτα να <ph name="LINK_START" />επισκεφτείτε τη σελίδα σύνδεσης του δικτύου<ph name="LINK_END" />, η οποία θα ανοίξει αυτόματα σε λίγα δευτερόλεπτα. Εάν αυτό δεν συμβεί, δεν είναι δυνατή η χρήση του δικτύου.</translation>
 <translation id="5637476008227280525">Ενεργοποίηση δεδομένων κινητής τηλεφωνίας</translation>
 <translation id="5638309510554459422">Βρείτε επεκτάσεις και θέματα στο <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Για να διαχειριστείτε τα δακτυλικά αποτυπώματά σας, εισαγάγετε το PIN για το κλειδί ασφαλείας σας. Εάν δεν γνωρίζετε το PIN, θα χρειαστεί να επαναφέρετε το κλειδί ασφαλείας σας.</translation>
 <translation id="5639549361331209298">Επανάληψη φόρτωσης αυτής της σελίδας, πατήστε παρατεταμένα για δείτε περισσότερες επιλογές</translation>
 <translation id="5640133431808313291">Διαχείριση κλειδιών ασφαλείας</translation>
 <translation id="5642508497713047">Υπηρεσία υπογραφής CRL</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Μη έγκυρη μορφή URL. Οι υποστηριζόμενες μορφές είναι \\server\share και smb://server/share.</translation>
 <translation id="5990386583461751448">Μεταφρασμένη</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτήν την εφαρμογή.}other{Για να είστε σίγουροι ότι θα μπορείτε να περιηγηθείτε στον ιστό, ζητήστε από τον διαχειριστή να καταργήσει αυτές τις εφαρμογές.}}</translation>
-<translation id="5995884201513800557">Συνεχίστε να αγγίζετε το κλειδί ασφαλείας σας για να αποθηκεύσετε το δακτυλικό αποτύπωμά σας.</translation>
 <translation id="5997337190805127100">Μάθετε περισσότερα για την πρόσβαση ιστοτόπου</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> αποτελέσματα για την αναζήτηση "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Προτιμώμενες φωνές</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Πρόσβαση στην είσοδο βίντεο</translation>
 <translation id="6011193465932186973">Δακτυλικά αποτυπώματα</translation>
 <translation id="6011449291337289699">Εκκαθάριση δεδομένων ιστότοπου</translation>
-<translation id="6013505829696424563">Για προβολή των δεδομένων σύνδεσης, εισαγάγετε το PIN για το κλειδί ασφαλείας σας. Εάν δεν γνωρίζετε το PIN, θα χρειαστεί να επαναφέρετε το κλειδί ασφαλείας σας.</translation>
 <translation id="6015266928248016057">Μη έγκυρος κωδικός PUK. Απομένουν <ph name="RETRIES" /> προσπάθειες.</translation>
 <translation id="6015796118275082299">Έτος</translation>
 <translation id="6016551720757758985">Επιβεβαιώστε τη λειτουργία Powerwash με επιστροφή σε προηγούμενη έκδοση</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Ερώτηση πριν από την αποστολή</translation>
 <translation id="6840184929775541289">Δεν είναι Αρχή πιστοποίησης</translation>
 <translation id="6841186874966388268">Σφάλματα</translation>
-<translation id="6841187140911216178">Για προβολή των δεδομένων σύνδεσης, εισαγάγετε και αγγίξτε το κλειδί ασφαλείας σας.</translation>
 <translation id="6843423766595476978">Η εντολή "Ok Google" είναι έτοιμη</translation>
 <translation id="6845038076637626672">Άνοιγμα μεγιστοποιημένης εφαρμογής</translation>
 <translation id="6845325883481699275">Συμβάλετε στη βελτίωση της ασφάλειας του Chrome</translation>
@@ -5379,7 +5370,6 @@
 <translation id="8838770651474809439">Χάμπουργκερ</translation>
 <translation id="883911313571074303">Σχολιασμός εικόνας</translation>
 <translation id="8845001906332463065">Λήψη βοήθειας</translation>
-<translation id="8845164297565101021">Εισαγάγετε και αγγίξτε το κλειδί ασφαλείας για να δημιουργήσετε ή να αλλάξετε ένα PIN.</translation>
 <translation id="8846132060409673887">Διαβάστε τις πληροφορίες κατασκευαστή και μοντέλου αυτού του υπολογιστή</translation>
 <translation id="8846141544112579928">Αναζήτηση για πληκτρολόγιο…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5452,7 +5442,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Χρησιμοποιεί τη μπαταρία πιο γρήγορα (αυτήν τη στιγμή <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">Η εφαρμογή <ph name="APP_NAME" /> μοιράζεται ένα παράθυρο με την καρτέλα <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Προσθέστε, μετονομάστε και διαγράψτε τα δακτυλικά αποτυπώματα που έχουν αποθηκευτεί στη συσκευή σας</translation>
 <translation id="8946359700442089734">Οι λειτουργίες εντοπισμού σφαλμάτων δεν ήταν πλήρως ενεργοποιημένες σε αυτήν τη συσκευή <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Έξοδος από την κατάσταση ανώνυμης περιήγησης;</translation>
 <translation id="8948939328578167195">Ο ιστότοπος <ph name="WEBSITE" /> θέλει να δει την κατασκευή και το μοντέλο του κλειδιού ασφαλείας σας</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb
index 2f175bd..aefeccb 100644
--- a/chrome/app/resources/generated_resources_en-GB.xtb
+++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM needs permission to run</translation>
 <translation id="1900305421498694955">Apps from Google Play may require full file system access to read and write files on external storage devices. Files and folders created on the device are visible to anyone who uses the external drive. <ph name="LINK_BEGIN" />Learn more<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Select &amp;all</translation>
-<translation id="1901984611178952431">Manage sign-in data</translation>
 <translation id="1902576642799138955">Validity Period</translation>
 <translation id="1905375423839394163">Chromebook device name</translation>
 <translation id="1905710495812624430">Maximum allowed attempts exceeded.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Future software and security updates will install automatically.</translation>
 <translation id="1979280758666859181">You are changing to a channel with an older version of <ph name="PRODUCT_NAME" />. The channel change will be applied when the channel version matches the version currently installed on your device.</translation>
 <translation id="197989455406964291">KDC does not support encryption type</translation>
-<translation id="1981544341227357861">Remove your security key from your device, then reinsert and touch it.</translation>
 <translation id="1982354452682152483">No description is available.</translation>
 <translation id="1987317783729300807">Accounts</translation>
 <translation id="1989112275319619282">Browse</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Sign in to Chrome</translation>
 <translation id="3285322247471302225">New &amp;Tab</translation>
 <translation id="328571385944182268">Save your passwords?</translation>
-<translation id="3286737518123001369">View and delete the sign-in data stored on your security key</translation>
 <translation id="3288047731229977326">Extensions running in developer mode can harm your computer. If you're not a developer, you should disable these extensions running in developer mode to stay safe.</translation>
 <translation id="3289856944988573801">To check for updates, please use Ethernet or Wi-Fi.</translation>
 <translation id="3293644607209440645">Send this page</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA Signature with SHA-512</translation>
 <translation id="3544879808695557954">Username (optional)</translation>
 <translation id="354602065659584722">Harmful software removed</translation>
-<translation id="3547220315004609203">Toggle tab strip</translation>
 <translation id="3547954654003013442">Proxy settings</translation>
 <translation id="3550915441744863158">Chrome updates automatically so you always have the freshest version</translation>
 <translation id="3551320343578183772">Close Tab</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Microphone allowed</translation>
 <translation id="4031527940632463547">Sensors blocked</translation>
 <translation id="4033471457476425443">Add new folder</translation>
-<translation id="403456802563765809">To manage your fingerprints, insert and touch your security key.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Task manager</translation>
 <translation id="4036778507053569103">The policy downloaded from the server is invalid.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">To use <ph name="NETWORK_ID" /> you may first need to <ph name="LINK_START" />visit the network's sign-in page<ph name="LINK_END" />, which will open automatically in a few seconds. If it doesn't happen, the network can't be used.</translation>
 <translation id="5637476008227280525">Mobile data enable</translation>
 <translation id="5638309510554459422">Find extensions and themes in the <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">To manage your fingerprints, enter the PIN for your security key. If you don’t know the PIN, you’ll need to reset the security key.</translation>
 <translation id="5639549361331209298">Reload this page, hold to see more options</translation>
 <translation id="5640133431808313291">Manage security keys</translation>
 <translation id="5642508497713047">CRL Signer</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Invalid URL format. Supported formats are \\server\share and smb://server/share.</translation>
 <translation id="5990386583461751448">Translated</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="5995884201513800557">Keep touching your security key to save your fingerprint.</translation>
 <translation id="5997337190805127100">Learn more about site access</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> results for '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Preferred Voices</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Accessing video input</translation>
 <translation id="6011193465932186973">Fingerprint</translation>
 <translation id="6011449291337289699">Clear site data</translation>
-<translation id="6013505829696424563">To view sign-in data, enter the PIN for your security key. If you don’t know the PIN, you’ll need to reset the security key.</translation>
 <translation id="6015266928248016057">Invalid PUK. Retries left: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Year</translation>
 <translation id="6016551720757758985">Confirm Powerwash with return to previous version</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Ask before sending</translation>
 <translation id="6840184929775541289">Is not a Certification Authority</translation>
 <translation id="6841186874966388268">Errors</translation>
-<translation id="6841187140911216178">To view sign-in data, insert and touch your security key</translation>
 <translation id="6843423766595476978">"Ok Google" is ready</translation>
 <translation id="6845038076637626672">Open Maximised</translation>
 <translation id="6845325883481699275">Help improve Chrome security</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annotate image</translation>
 <translation id="8845001906332463065">Get help</translation>
-<translation id="8845164297565101021">Insert and touch your security key to create or change a PIN.</translation>
 <translation id="8846132060409673887">Read the manufacturer and model of this computer</translation>
 <translation id="8846141544112579928">Searching for keyboard...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Use the battery more quickly (currently <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> is sharing a window with <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Add, rename and delete fingerprints saved on your device</translation>
 <translation id="8946359700442089734">Debugging features were not completely enabled on this <ph name="IDS_SHORT_PRODUCT_NAME" /> device.</translation>
 <translation id="894871326938397531">Leave incognito mode?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> wants to see the make and model of your security key</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb
index c62219f64..c482f76 100644
--- a/chrome/app/resources/generated_resources_es-419.xtb
+++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Plugin VM necesita permiso para ejecutarse</translation>
 <translation id="1900305421498694955">Es posible que las apps de Google Play necesiten acceder a todo el sistema de archivos para leer y escribir archivos en dispositivos externos de almacenamiento. Cualquier persona que use la unidad externa podrá ver los archivos y carpetas creados en este dispositivo. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Seleccionar &amp;todo</translation>
-<translation id="1901984611178952431">Administrar los datos de acceso</translation>
 <translation id="1902576642799138955">Período de validez</translation>
 <translation id="1905375423839394163">Nombre de la Chromebook</translation>
 <translation id="1905710495812624430">Se superó la cantidad máxima de intentos permitidos.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Se instalarán automáticamente las futuras versiones del software y las actualizaciones de seguridad.</translation>
 <translation id="1979280758666859181">Estás por cambiar a un canal que tiene una versión anterior de <ph name="PRODUCT_NAME" />. El cambio de canal se aplicará cuando la versión del canal coincida con la versión que esté instalada en ese momento en tu dispositivo.</translation>
 <translation id="197989455406964291">KDC no es compatible con el tipo de encriptación</translation>
-<translation id="1981544341227357861">Quita la llave de seguridad del dispositivo y , luego, vuelve a colocarla y tócala.</translation>
 <translation id="1982354452682152483">No hay descripciones disponibles.</translation>
 <translation id="1987317783729300807">Cuentas</translation>
 <translation id="1989112275319619282">Navegar</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Acceder a Chrome</translation>
 <translation id="3285322247471302225">Nueva pes&amp;taña en</translation>
 <translation id="328571385944182268">¿Quieres guardar tus contraseñas?</translation>
-<translation id="3286737518123001369">Visualiza y borra los datos de acceso almacenados en la llave de seguridad</translation>
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de programador pueden dañar tu computadora. Si no eres programador, debes inhabilitar las extensiones que se ejecutan en modo de programador para mantenerte protegido.</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
 <translation id="3293644607209440645">Enviar esta página</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">Firma X9.62 ECDSA con SHA-512</translation>
 <translation id="3544879808695557954">Nombre de usuario (opcional)</translation>
 <translation id="354602065659584722">Se quitó el software dañino</translation>
-<translation id="3547220315004609203">Activa o desactiva la barra de pestañas</translation>
 <translation id="3547954654003013442">Configuración de proxy</translation>
 <translation id="3550915441744863158">Debido a que Chrome se actualiza automáticamente, siempre tendrás la versión más reciente</translation>
 <translation id="3551320343578183772">Cerrar pestaña</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">Micrófono permitido</translation>
 <translation id="4031527940632463547">Se bloqueó el acceso a los sensores</translation>
 <translation id="4033471457476425443">Agregar carpeta nueva</translation>
-<translation id="403456802563765809">Para administrar las huellas digitales, inserta y toca tu llave de seguridad.</translation>
 <translation id="4034824040120875894">Impresora</translation>
 <translation id="4035758313003622889">Adminis&amp;trador de &amp;tareas</translation>
 <translation id="4036778507053569103">La política descargada del servidor no es válida.</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526">Para utilizar la red <ph name="NETWORK_ID" />, es posible que primero debas <ph name="LINK_START" />ingresar a la página de acceso a la red<ph name="LINK_END" />, que se abrirá de forma automática en unos segundos. Si no se abre, no podrás utilizar la red.</translation>
 <translation id="5637476008227280525">Habilitar o inhabilitar datos móviles</translation>
 <translation id="5638309510554459422">Encuentra extensiones y temas en <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Para administrar las huellas digitales, ingresa el PIN de tu llave de seguridad. Si no lo conoces, restablece la llave.</translation>
 <translation id="5639549361331209298">Vuelve a cargar esta página y espera para ver más opciones.</translation>
 <translation id="5640133431808313291">Administrar llaves de seguridad</translation>
 <translation id="5642508497713047">Firmante de la CRL</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">El formato de la URL no es válido. Los formatos compatibles son \\server\share y smb://server/share.</translation>
 <translation id="5990386583461751448">Traducida</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="5995884201513800557">Continúa tocando la llave de seguridad para guardar tus huellas digitales.</translation>
 <translation id="5997337190805127100">Más información sobre el acceso a sitios</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Voces preferidas</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">Accediendo a la entrada de video</translation>
 <translation id="6011193465932186973">Huella digital</translation>
 <translation id="6011449291337289699">Borrar los datos del sitio</translation>
-<translation id="6013505829696424563">Para ver los datos de acceso, ingresa el PIN de tu llave de seguridad. Si no lo conoces, deberás restablecer la llave.</translation>
 <translation id="6015266928248016057">PUK no válida. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Año</translation>
 <translation id="6016551720757758985">Confirmar Powerwash con retorno a la versión anterior</translation>
@@ -3972,7 +3964,6 @@
 <translation id="6840155290835956714">Preguntar antes de enviar</translation>
 <translation id="6840184929775541289">No es una Entidad de certificación</translation>
 <translation id="6841186874966388268">Errores</translation>
-<translation id="6841187140911216178">Para ver los datos de acceso, inserta la llave de seguridad y tócala</translation>
 <translation id="6843423766595476978">Ok Google ya está configurado</translation>
 <translation id="6845038076637626672">Abrir de forma maximizada</translation>
 <translation id="6845325883481699275">Ayudar a mejorar la seguridad de Chrome</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Escribir en la imagen</translation>
 <translation id="8845001906332463065">Obtener ayuda</translation>
-<translation id="8845164297565101021">Inserta tu llave de seguridad y, luego, tócala para crear un PIN o cambiarlo.</translation>
 <translation id="8846132060409673887">Leer el fabricante y el modelo de esta computadora</translation>
 <translation id="8846141544112579928">Buscando teclado…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">Suplemento especial internacional de Netscape</translation>
 <translation id="8944099748578356325">Usa la batería de forma más rápida (nivel actual: <ph name="BATTERY_PERCENTAGE" />%).</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> comparte una ventana con <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Agrega huellas digitales, renómbralas y borra las que estén guardadas en tu dispositivo</translation>
 <translation id="8946359700442089734">Las funciones de depuración no se habilitaron completamente en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">¿Deseas salir del modo de navegación incógnito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> desea ver la marca y el modelo de tu llave de seguridad</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb
index 809cbfdf..8b9c06e1 100644
--- a/chrome/app/resources/generated_resources_es.xtb
+++ b/chrome/app/resources/generated_resources_es.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">El complemento de VM necesita permiso para ejecutarse</translation>
 <translation id="1900305421498694955">Es posible que las aplicaciones de Google Play necesiten acceso completo al sistema de archivos para leer y escribir archivos en dispositivos de almacenamiento externo. Los usuarios de la unidad externa podrán ver los archivos y las carpetas que se hayan creado en el dispositivo. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Seleccionar &amp;todo</translation>
-<translation id="1901984611178952431">Gestionar datos de inicio de sesión</translation>
 <translation id="1902576642799138955">Período de validez</translation>
 <translation id="1905375423839394163">Nombre del dispositivo Chromebook</translation>
 <translation id="1905710495812624430">Se ha superado el máximo de intentos permitidos.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Las futuras actualizaciones de software y seguridad se instalarán automáticamente.</translation>
 <translation id="1979280758666859181">Vas a cambiar a un canal con una versión anterior de <ph name="PRODUCT_NAME" />. El cambio de canal se aplicará cuando la versión del canal coincida con la versión que esté instalada en ese momento en tu dispositivo.</translation>
 <translation id="197989455406964291">El centro de distribución de llaves (KDC) no es compatible con este tipo de cifrado</translation>
-<translation id="1981544341227357861">Retira la llave de seguridad de tu dispositivo, vuelve a insertarla y tócala.</translation>
 <translation id="1982354452682152483">No hay ninguna descripción disponible.</translation>
 <translation id="1987317783729300807">Cuentas</translation>
 <translation id="1989112275319619282">Examinar</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Iniciar sesión en Chrome</translation>
 <translation id="3285322247471302225">Nueva &amp;pestaña</translation>
 <translation id="328571385944182268">¿Quieres guardar tus contraseñas?</translation>
-<translation id="3286737518123001369">Consulta y elimina los datos de inicio de sesión almacenados en la llave de seguridad</translation>
 <translation id="3288047731229977326">Las extensiones que se ejecutan en modo de desarrollador pueden causar daños en el ordenador. Si no eres desarrollador, debes inhabilitar esas extensiones para mantener protegido tu ordenador.</translation>
 <translation id="3289856944988573801">Para comprobar si hay actualizaciones, utiliza una conexión Ethernet o Wi-Fi.</translation>
 <translation id="3293644607209440645">Enviar esta página</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Firma X9.62 ECDSA con SHA-512</translation>
 <translation id="3544879808695557954">Nombre de usuario (opcional)</translation>
 <translation id="354602065659584722">Se ha eliminado software dañino</translation>
-<translation id="3547220315004609203">Activar o desactivar barra de pestañas</translation>
 <translation id="3547954654003013442">Configuración de proxy</translation>
 <translation id="3550915441744863158">Chrome se actualiza automáticamente para que siempre tengas la versión más reciente</translation>
 <translation id="3551320343578183772">Cerrar pestaña</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">Micrófono permitido</translation>
 <translation id="4031527940632463547">Sensores bloqueados</translation>
 <translation id="4033471457476425443">Añadir nueva carpeta</translation>
-<translation id="403456802563765809">Para gestionar tus huellas digitales, inserta y toca tu llave de seguridad.</translation>
 <translation id="4034824040120875894">Impresora</translation>
 <translation id="4035758313003622889">Adminis&amp;trador de tareas</translation>
 <translation id="4036778507053569103">La política que has descargado del servidor no es válida.</translation>
@@ -3166,7 +3161,6 @@
 <translation id="5636996382092289526">Para utilizar la red <ph name="NETWORK_ID" />, es posible que primero tengas que <ph name="LINK_START" />acceder a la página de inicio de sesión de la red<ph name="LINK_END" />, que se abrirá de forma automática en unos segundos. Si no se abre, no podrás utilizar esa red.</translation>
 <translation id="5637476008227280525">Permitir datos móviles</translation>
 <translation id="5638309510554459422">Busca extensiones y temas en <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Para gestionar tus huellas digitales, introduce el PIN de tu llave de seguridad. Si no sabes cuál es el PIN, tendrás que restablecer la llave de seguridad.</translation>
 <translation id="5639549361331209298">Vuelve a cargar esta página y espera para ver más opciones</translation>
 <translation id="5640133431808313291">Gestionar llaves de seguridad</translation>
 <translation id="5642508497713047">Firmante de la lista de revocación de certificados</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">El formato de la URL no es válido. Los formatos admitidos son \\server\share y smb://server/share.</translation>
 <translation id="5990386583461751448">Traducida</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="5995884201513800557">Sigue tocando tu llave de seguridad para guardar tu huella digital.</translation>
 <translation id="5997337190805127100">Más información sobre el acceso del sitio web</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Voces preferidas</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">Accediendo a la entrada de vídeo</translation>
 <translation id="6011193465932186973">Huella digital</translation>
 <translation id="6011449291337289699">Borrar datos de sitios web</translation>
-<translation id="6013505829696424563">Para ver los datos de inicio de sesión, introduce el PIN de tu llave de seguridad. Si no sabes cuál es el PIN, tendrás que restablecer la llave de seguridad.</translation>
 <translation id="6015266928248016057">El PUK no es válido. Intentos restantes: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Año</translation>
 <translation id="6016551720757758985">Confirmar Powerwash para volver a la versión anterior</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Preguntar antes de enviar</translation>
 <translation id="6840184929775541289">No es una entidad emisora de certificados.</translation>
 <translation id="6841186874966388268">Errores</translation>
-<translation id="6841187140911216178">Para ver los datos de inicio de sesión, inserta y toca tu llave de seguridad</translation>
 <translation id="6843423766595476978">Ok Google ya se ha configurado</translation>
 <translation id="6845038076637626672">Abrir de forma maximizada</translation>
 <translation id="6845325883481699275">Ayudar a mejorar la seguridad de Chrome</translation>
@@ -5379,7 +5370,6 @@
 <translation id="8838770651474809439">Hamburguesa</translation>
 <translation id="883911313571074303">Anotar imagen</translation>
 <translation id="8845001906332463065">Obtener ayuda</translation>
-<translation id="8845164297565101021">Para crear o cambiar un PIN, inserta y toca tu llave de seguridad.</translation>
 <translation id="8846132060409673887">Consultar el fabricante y el modelo de este ordenador</translation>
 <translation id="8846141544112579928">Buscando teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5452,7 +5442,6 @@
 <translation id="894360074127026135">Certificado Step-Up International de Netscape</translation>
 <translation id="8944099748578356325">Consumirá batería de forma más rápida (carga actual: <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> está compartiendo una ventana con <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Añadir, eliminar y cambiar el nombre de las huellas digitales guardadas en tu dispositivo</translation>
 <translation id="8946359700442089734">Las funciones de depuración no se han habilitado completamente en este dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">¿Salir del modo de incógnito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> quiere ver la marca y el modelo de tu llave de seguridad</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb
index cb815a7b..bba5f5b4 100644
--- a/chrome/app/resources/generated_resources_et.xtb
+++ b/chrome/app/resources/generated_resources_et.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">PluginVM vajab käitamiseks luba</translation>
 <translation id="1900305421498694955">Google Playst pärinevad rakendused võivad vajada täielikku juurdepääsu failisüsteemile, et välistelt salvestusseadmetelt faile lugeda ja neid sinna kirjutada. Selles seadmes loodud failid ja kaustad on nähtavad kõigile, kes välist ketast kasutavad. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Vali &amp;kõik</translation>
-<translation id="1901984611178952431">Sisselogimisandmete haldamine</translation>
 <translation id="1902576642799138955">Kehtivusperiood</translation>
 <translation id="1905375423839394163">Chromebooki seadme nimi</translation>
 <translation id="1905710495812624430">Katsete maksimaalne arv on ületatud.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Tulevased tarkvara- ja turvavärskendused installitakse automaatselt.</translation>
 <translation id="1979280758666859181">Lülitute teenuse <ph name="PRODUCT_NAME" /> vanema versiooniga kanalile. Kanalivahetus rakendub, kui kanali versioon kattub teie seadmesse parajasti installitud versiooniga.</translation>
 <translation id="197989455406964291">KDC ei toeta krüpteerimistüüpi</translation>
-<translation id="1981544341227357861">Eemaldage turvavõti seadmest, seejärel sisestage see uuesti ja puudutage seda.</translation>
 <translation id="1982354452682152483">Kirjeldus ei ole saadaval.</translation>
 <translation id="1987317783729300807">Kontod</translation>
 <translation id="1989112275319619282">Sirvi</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome'i sisselogimine</translation>
 <translation id="3285322247471302225">Uus &amp;vaheleht</translation>
 <translation id="328571385944182268">Kas salvestada teie paroolid?</translation>
-<translation id="3286737518123001369">Vaadake ja kustutage turvavõtmele salvestatud sisselogimisandmeid</translation>
 <translation id="3288047731229977326">Arendaja režiimis töötavad laiendused võivad teie arvutit kahjustada. Kui te pole arendaja, peaksite turvalisuse säilitamiseks nende laienduste käitamise arendaja režiimis keelama.</translation>
 <translation id="3289856944988573801">Kasutage värskenduste otsimiseks Etherneti või WiFi-ühendust.</translation>
 <translation id="3293644607209440645">Saada leht</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA allkiri SHA-512-ga</translation>
 <translation id="3544879808695557954">Kasutajanimi (valikuline)</translation>
 <translation id="354602065659584722">Kahjulik tarkvara eemaldati</translation>
-<translation id="3547220315004609203">Vahelehtede rea vahetamine</translation>
 <translation id="3547954654003013442">Puhverserveri seaded</translation>
 <translation id="3550915441744863158">Chrome teeb värskendused automaatselt, nii et kasutate alati uusimat versiooni</translation>
 <translation id="3551320343578183772">Sule vaheleht</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofon on lubatud</translation>
 <translation id="4031527940632463547">Andurid on blokeeritud</translation>
 <translation id="4033471457476425443">Uue kausta lisamine</translation>
-<translation id="403456802563765809">Oma sõrmejälgede haldamiseks sisestage turvavõti ja puudutage seda.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Tegumihaldur</translation>
 <translation id="4036778507053569103">Serverist alla laaditud reegel on kehtetu.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Võimalik, et võrgu <ph name="NETWORK_ID" /> kasutamiseks tuleb teil esmalt <ph name="LINK_START" />külastada võrgu sisselogimislehte<ph name="LINK_END" />, mis avaneb mõne sekundi pärast automaatselt. Kui see ei avane, ei saa võrku kasutada.</translation>
 <translation id="5637476008227280525">Luba mobiilne andmeside</translation>
 <translation id="5638309510554459422">Otsige <ph name="BEGIN_LINK" />Chrome'i veebipoest<ph name="END_LINK" /> laiendusi ja teemasid</translation>
-<translation id="5639152092474119692">Sõrmejälgede haldamiseks sisestage oma turvavõtme PIN-kood. Kui te PIN-koodi ei tea, peate turvavõtme lähtestama.</translation>
 <translation id="5639549361331209298">Laadige leht uuesti ja oodake, et näha rohkem valikuid</translation>
 <translation id="5640133431808313291">Turvavõtmete haldamine</translation>
 <translation id="5642508497713047">CRL-i allkirjastaja</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">URL-i sobimatu vorming. Toetatud vormingud on \\server\share ja smb://server/share.</translation>
 <translation id="5990386583461751448">Tõlgitud</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="5995884201513800557">Sõrmejälje salvestamiseks puudutage turvavõtit.</translation>
 <translation id="5997337190805127100">Lisateave saidile juurdepääsu kohta</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> tulemust otsingule „<ph name="SEARCH_TEXT" />”</translation>
 <translation id="6002458620803359783">Eelistatud hääled</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Juurdepääs videosisendile</translation>
 <translation id="6011193465932186973">Sõrmejälg</translation>
 <translation id="6011449291337289699">Saidi andmete kustutamine</translation>
-<translation id="6013505829696424563">Sisselogimisandmete vaatamiseks sisestage turvavõtme PIN-kood. Kui te PIN-koodi ei tea, peate turvavõtme lähtestama.</translation>
 <translation id="6015266928248016057">Vale PUK-kood. Katseid jäänud: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Aasta</translation>
 <translation id="6016551720757758985">Kinnitage Powerwash eelmisele versioonile naasmisega</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Küsi enne saatmist</translation>
 <translation id="6840184929775541289">Ei ole sertifitseerimisorgan</translation>
 <translation id="6841186874966388268">Vead</translation>
-<translation id="6841187140911216178">Sisselogimisandmete vaatamiseks sisestage turvavõti ja puudutage seda</translation>
 <translation id="6843423766595476978">„Ok Google” on kasutamiseks valmis</translation>
 <translation id="6845038076637626672">Ava maksimeeritult</translation>
 <translation id="6845325883481699275">Aidake Chrome'i turvalisust täiustada</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Lisa kujutisele märkused</translation>
 <translation id="8845001906332463065">Otsige abi</translation>
-<translation id="8845164297565101021">PIN-koodi loomiseks või muutmiseks sisestage oma turvavõti ja puudutage seda.</translation>
 <translation id="8846132060409673887">Arvuti tootja ja mudeli andmete lugemine</translation>
 <translation id="8846141544112579928">Klaviatuuri otsimine ...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape'i rahvusvaheline seadistus</translation>
 <translation id="8944099748578356325">Aku kiiremini kulutamine (praegu <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">Rakendus <ph name="APP_NAME" /> jagab akent vahelehega <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Seadmesse salvestatud sõrmejälgede lisamine, ümbernimetamine ja kustutamine</translation>
 <translation id="8946359700442089734">Silumisfunktsioone ei lubatud täielikult selles toote <ph name="IDS_SHORT_PRODUCT_NAME" /> seadmes.</translation>
 <translation id="894871326938397531">Kas lahkuda inkognito režiimist?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> soovib näha teie turvavõtme tootjat ja mudelit</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb
index dd9b479..dc245f3f 100644
--- a/chrome/app/resources/generated_resources_fa.xtb
+++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">‏افزایه VM برای اجرا به مجوز نیاز دارد</translation>
 <translation id="1900305421498694955">‏ممکن است برنامه‌های Google Play برای خواندن فایل‌های موجود در دستگاه‌های ذخیره‌سازی خارجی و نوشتن در آن‌ها، نیازمند دسترسی کامل به سیستم فایل باشند. فایل‌ها و پوشه‌های ایجادشده در دستگاه برای هر فردی که از درایو خارجی استفاده می‌کند، نمایان است. <ph name="LINK_BEGIN" />بیشتر بدانید<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">انتخاب &amp;همه</translation>
-<translation id="1901984611178952431">مدیریت داده‌های ورود به سیستم</translation>
 <translation id="1902576642799138955">مدت اعتبار</translation>
 <translation id="1905375423839394163">‏نام دستگاه Chromebook</translation>
 <translation id="1905710495812624430">به حداکثر تعداد مجاز تلاش رسیده‌اید.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">به‌روزرسانی‌های امنیتی و نرم‌افزار درآینده به‌طور خودکار نصب می‌شوند.</translation>
 <translation id="1979280758666859181">شما در حال تغییر کانال به نسخه قدیمی‌تر <ph name="PRODUCT_NAME" /> هستید. تغییر کانال زمانی اعمال می‌شود که نسخه کانال با نسخه فعلی نصب شده در دستگاه یکسان باشد.</translation>
 <translation id="197989455406964291">‏KDC از نوع رمزگذاری پشتیبانی نمی‌کند</translation>
-<translation id="1981544341227357861">کلید امنیتی‌تان را از دستگاه بردارید، سپس آن را دوباره وارد و لمس کنید.</translation>
 <translation id="1982354452682152483">توضیحی دردسترس نیست.</translation>
 <translation id="1987317783729300807">اشتراک‌ها</translation>
 <translation id="1989112275319619282">مشاهده محتوای موجود در فروشگاه ما</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">‏ورود به Chrome</translation>
 <translation id="3285322247471302225">&amp;برگه جدید</translation>
 <translation id="328571385944182268">گذرواژه ذخیره شود؟</translation>
-<translation id="3286737518123001369">مشاهده و حذف داده‌های ورود به سیستم ذخیره‌شده در کلید امنیتی شما</translation>
 <translation id="3288047731229977326">افزونه‌هایی که در حالت برنامه‌نوبس اجرا می‌شوند می‌توانند به رایانه شما آسیب برسانند. اگر برنامه‌نویس نیستید، باید این برنامه‌های افزودنی را که در حالت برنامه‌نویس اجرا می‌شوند غیرفعال کنید تا ایمن بمانید.</translation>
 <translation id="3289856944988573801">‏برای بررسی موارد به‌روز لطفاً از کابل شبکه یا Wi-Fi استفاده کنید.</translation>
 <translation id="3293644607209440645">ارسال این صفحه</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">‏امضای X9.62 ECDSA با SHA-512</translation>
 <translation id="3544879808695557954">نام کاربری (اختیاری)</translation>
 <translation id="354602065659584722">نرم‌افزار مضر پاک شد</translation>
-<translation id="3547220315004609203">پنهان/نمایان کردن نوار برگه</translation>
 <translation id="3547954654003013442">تنظیمات پروکسی</translation>
 <translation id="3550915441744863158">‏Chrome به صورت خودکار به‌روزرسانی می‌شود تا همیشه تازه‌ترین نسخه را در اختیار داشته باشید.</translation>
 <translation id="3551320343578183772">بستن برگه</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">میکروفون مجاز است</translation>
 <translation id="4031527940632463547">حسگرها مسدود شدند</translation>
 <translation id="4033471457476425443">افزودن پوشه جدید</translation>
-<translation id="403456802563765809">برای مدیریت اثر انگشتتان، کلید امنیتی را وارد و لمس کنید.</translation>
 <translation id="4034824040120875894">چاپگر</translation>
 <translation id="4035758313003622889">مدیر &amp;فعالیت ها</translation>
 <translation id="4036778507053569103">خط‌مشی بارگیری‌شده از سرور نامعتبر است.</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526">برای استفاده از <ph name="NETWORK_ID" /> ابتدا باید به <ph name="LINK_START" />صفحه ورود به سیستم شبکه بروید<ph name="LINK_END" />، که تا چند ثانیه دیگر به‌طور خودکار باز می‌شود. اگر این اتفاق نیافتد، نمی‌توان از شبکه استفاده کرد.</translation>
 <translation id="5637476008227280525">فعال کردن داده تلفن همراه</translation>
 <translation id="5638309510554459422">‏افزونه‌ها و طرح‌های زمینه را در <ph name="BEGIN_LINK" />نت‌بازار Chrome<ph name="END_LINK" /> پیدا کنید</translation>
-<translation id="5639152092474119692">برای مدیریت اثر انگشتتان، پین را برای کلید امنیتی وارد کنید. اگر پین را نمی‌دانید، باید کلید امنیتی را بازنشانی کنید.</translation>
 <translation id="5639549361331209298">تازه‌سازی این صفحه، آن را نگهدارید تا گزینه‌های بیشتری را ببینید</translation>
 <translation id="5640133431808313291">مدیریت کلیدهای امنیتی</translation>
 <translation id="5642508497713047">‏امضاکننده CRL</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">‏قالب نشانی وب نامعتبر است. قالب‌های پشتیبانی‌شده عبارتند از: \\server\share و smb://server/share.</translation>
 <translation id="5990386583461751448">ترجمه‌شده</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه را بردارد.}one{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه‌ها را بردارد.}other{برای اطمینان از اینکه همچنان می‌توانید به مرور وب بپردازید، از سرپرستتان بخواهید این برنامه‌ها را بردارد.}}</translation>
-<translation id="5995884201513800557">برای ذخیره اثر انگشت، به لمس کردن کلید امنیتی ادامه دهید.</translation>
 <translation id="5997337190805127100">درباره دسترسی به سایت بیشتر بدانید</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> نتیجه برای «<ph name="SEARCH_TEXT" />»</translation>
 <translation id="6002458620803359783">صداهای برگزیده</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">در حال دسترسی به ورودی ویدئویی</translation>
 <translation id="6011193465932186973">اثر انگشت</translation>
 <translation id="6011449291337289699">پاک کردن داده‌های سایت</translation>
-<translation id="6013505829696424563">برای مشاهده داده‌های ورود به سیستم، پین کلید امنیتی‌تان را وارد کنید. اگر پین را نمی‌دانید، باید کلید امنیتی را بازنشانی کنید.</translation>
 <translation id="6015266928248016057">‏PUK نامعتبر است. تلاش‌های باقی‌مانده: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">سال</translation>
 <translation id="6016551720757758985">‏تأیید Powerwash به همراه بازگشت به نسخه قبلی</translation>
@@ -3972,7 +3964,6 @@
 <translation id="6840155290835956714">پیش از ارسال سؤال شود</translation>
 <translation id="6840184929775541289">یک ارائه دهنده مجوز نیست</translation>
 <translation id="6841186874966388268">خطاها</translation>
-<translation id="6841187140911216178">برای مشاهده داده‌های ورود به سیستم، کلید امنیتی‌تان را وارد و لمس کنید.</translation>
 <translation id="6843423766595476978">‏Ok Google کاملاً آماده است</translation>
 <translation id="6845038076637626672">باز کردن در حداکثر اندازه</translation>
 <translation id="6845325883481699275">‏کمک به بهبود امنیت Chrome</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">همبرگر</translation>
 <translation id="883911313571074303">حاشیه‌نویسی تصویر</translation>
 <translation id="8845001906332463065">دریافت راهنمایی</translation>
-<translation id="8845164297565101021">برای ایجاد یا تغییر پین، کلید امنیتی را وارد و لمس کنید</translation>
 <translation id="8846132060409673887">خواندن سازنده و مدل این رایانه</translation>
 <translation id="8846141544112579928">در حال جستجو برای صفحه‌کلید...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">‏ارتقاء بین‌المللی Netscape</translation>
 <translation id="8944099748578356325">استفاده سریع‌تر از باتری (درحال‌حاضر <ph name="BATTERY_PERCENTAGE" />٪)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> درحال اشتراک‌گذاری یک پنجره با <ph name="TAB_NAME" /> است.</translation>
-<translation id="8945764661949477243">اضافه کردن، تغییر نام، و حذف اثر انگشت در دستگاهتان ذخیره شد</translation>
 <translation id="8946359700442089734">ویژگی‌های رفع اشکال در این دستگاه <ph name="IDS_SHORT_PRODUCT_NAME" /> کاملاً فعال نشدند.</translation>
 <translation id="894871326938397531">از حالت ناشناس خارج می‌شوید؟</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> می‌خواهد ساخت و مدل کلید امنیتی‌تان را ببیند</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb
index b70b548e..0ae73a3 100644
--- a/chrome/app/resources/generated_resources_fi.xtb
+++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM tarvitsee luvan toimiakseen</translation>
 <translation id="1900305421498694955">Google Playn sovellukset voivat edellyttää täysiä tiedostojärjestelmän käyttöoikeuksia, jotta ne voivat kirjoittaa ja lukea ulkoisten tallennustilalaitteiden tiedostoja. Kaikki ulkoisen aseman käyttäjät voivat nähdä laitteella luodut tiedostot ja kansiot. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Valitse &amp;kaikki</translation>
-<translation id="1901984611178952431">Ylläpidä kirjautumisdataa</translation>
 <translation id="1902576642799138955">Voimassaoloaika</translation>
 <translation id="1905375423839394163">Chromebook-laitteen nimi</translation>
 <translation id="1905710495812624430">Yritysten enimmäismäärä ylitettiin.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Tulevat ohjelmistot ja tietoturvapäivitykset asennetaan automaattisesti.</translation>
 <translation id="1979280758666859181">Olet vaihtamassa kanavalle, jossa on käytössä tuotteen <ph name="PRODUCT_NAME" /> vanhempi versio. Kanavan muutos otetaan käyttöön, kun kanavaversio vastaa tällä hetkellä laitteellesi asennettua versiota.</translation>
 <translation id="197989455406964291">KDC ei tue salaustyyppiä</translation>
-<translation id="1981544341227357861">Poista suojausavain laitteesta, aseta se takaisin ja kosketa sitä.</translation>
 <translation id="1982354452682152483">Ei kuvausta saatavilla</translation>
 <translation id="1987317783729300807">Tilit</translation>
 <translation id="1989112275319619282">Selaa</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Kirjaudu Chromeen</translation>
 <translation id="3285322247471302225">Uusi välileh&amp;ti</translation>
 <translation id="328571385944182268">Tallennetaanko salasanat?</translation>
-<translation id="3286737518123001369">Katso ja poista suojausavaimeen tallennettua kirjautumisdataa</translation>
 <translation id="3288047731229977326">Kehittäjätilassa olevat laajennukset voivat vahingoittaa tietokonettasi. Jos et ole kehittäjä, poista kehittäjätilassa olevat laajennukset käytöstä varmuuden vuoksi.</translation>
 <translation id="3289856944988573801">Tarkista päivitykset Ethernetin tai Wi-Fin kautta.</translation>
 <translation id="3293644607209440645">Lähetä tämä sivu</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA ‑allekirjoitus, jossa on SHA-512</translation>
 <translation id="3544879808695557954">Käyttäjänimi (valinnainen)</translation>
 <translation id="354602065659584722">Haittaohjelmat poistettu</translation>
-<translation id="3547220315004609203">Ota välilehtirivi käyttöön tai poista se käytöstä</translation>
 <translation id="3547954654003013442">Välityspalvelimen asetukset</translation>
 <translation id="3550915441744863158">Chrome päivitetään automaattisesti, joten käytössäsi on aina uusin versio</translation>
 <translation id="3551320343578183772">Sulje välilehti</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">Mikrofoni sallittu</translation>
 <translation id="4031527940632463547">Tunnistimet estetty</translation>
 <translation id="4033471457476425443">Kansion lisääminen</translation>
-<translation id="403456802563765809">Aseta suojausavain ja kosketa sitä, niin voit ylläpitää sormenjälkiä.</translation>
 <translation id="4034824040120875894">Tulostin</translation>
 <translation id="4035758313003622889">&amp;Tehtävänhallinta</translation>
 <translation id="4036778507053569103">Palvelimelta ladattu käytäntö on virheellinen.</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526">Jos haluat käyttää verkkoa <ph name="NETWORK_ID" />, voit joutua <ph name="LINK_START" />käymään verkon kirjautumissivulla<ph name="LINK_END" />, joka avautuu automaattisesti muutaman sekunnin kuluttua. Jos sivu ei avaudu, tätä verkkoa ei voi käyttää.</translation>
 <translation id="5637476008227280525">Ota käyttöön mobiilidata</translation>
 <translation id="5638309510554459422">Löydät laajennuksia ja teemoja <ph name="BEGIN_LINK" />Chrome Web Storesta<ph name="END_LINK" />.</translation>
-<translation id="5639152092474119692">Syötä suojausavaimen PIN-koodi, jotta voit ylläpitää sormenjälkiä. Jos et tiedä PIN-koodia, suojausavain on nollattava.</translation>
 <translation id="5639549361331209298">Päivitä tämä sivu, näet lisää asetuksia painamalla pitkään</translation>
 <translation id="5640133431808313291">Ylläpidä suojausavaimia</translation>
 <translation id="5642508497713047">CRL-allekirjoittaja</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">Virheellinen URL-osoitteen muoto. Tuettuja muotoja ovat \\server\share ja smb://server/share.</translation>
 <translation id="5990386583461751448">Käännetty</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="5995884201513800557">Jatka suojausavaimen koskettamista, niin sormenjälki tallennetaan.</translation>
 <translation id="5997337190805127100">Lisätietoja sivustojen käyttöoikeuksista</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> tulosta: <ph name="SEARCH_TEXT" /></translation>
 <translation id="6002458620803359783">Ensisijaiset äänet</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">Videotuloa käytetään</translation>
 <translation id="6011193465932186973">Sormenjälki</translation>
 <translation id="6011449291337289699">Tyhjennä sivustotiedot</translation>
-<translation id="6013505829696424563">Syötä suojausavaimen PIN-koodi, jotta voit nähdä kirjautumisdatan. Jos et tiedä PIN-koodia, suojausavain on nollattava.</translation>
 <translation id="6015266928248016057">Väärä PUK-koodi. Yrityksiä jäljellä: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Vuosi</translation>
 <translation id="6016551720757758985">Powerwashin vahvistaminen palauttaa käyttöön edellisen version</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Kysy ennen lähettämistä</translation>
 <translation id="6840184929775541289">Ei ole varmenteen myöntäjä</translation>
 <translation id="6841186874966388268">Virheet</translation>
-<translation id="6841187140911216178">Aseta suojausavain ja kosketa sitä, niin voit nähdä kirjautumisdatan</translation>
 <translation id="6843423766595476978">Ok Google on valmiina</translation>
 <translation id="6845038076637626672">Avaa suuressa koossa</translation>
 <translation id="6845325883481699275">Auta parantamaan Chromen suojausta</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">Hampurilainen</translation>
 <translation id="883911313571074303">Lisää kuvaan muistiinpano</translation>
 <translation id="8845001906332463065">Hae ohjeita</translation>
-<translation id="8845164297565101021">Aseta suojausavain paikalleen ja kosketa sitä luodaksesi tai vaihtaaksesi PIN-koodin.</translation>
 <translation id="8846132060409673887">Lue tietokoneen valmistaja ja malli</translation>
 <translation id="8846141544112579928">Näppäimistöä etsitään…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Käyttää akkua nopeammin (akkua tällä hetkellä <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> jakaa ikkunan välilehdelle <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Lisää, nimeä uudelleen ja poista laitteelle tallennettuja sormenjälkiä</translation>
 <translation id="8946359700442089734">Virheenkorjausominaisuudet eivät olleet täysin käytössä tällä <ph name="IDS_SHORT_PRODUCT_NAME" />-laitteella.</translation>
 <translation id="894871326938397531">Poistutaanko incognito-tilasta?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> haluaa nähdä suojausavaimesi merkin ja mallin</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb
index fc33ac53..669df9f 100644
--- a/chrome/app/resources/generated_resources_fil.xtb
+++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Kailangan ng Plugin VM ng pahintulot para tumakbo</translation>
 <translation id="1900305421498694955">Puwedeng mangailangan ang mga app mula sa Google Play ng kumpletong access sa system ng file para mag-read at mag-write ng mga file sa mga external na storage device. Nakikita ng sinumang gumagamit ng external na drive ang mga file at folder na ginawa sa device. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Piliin ang &amp;lahat</translation>
-<translation id="1901984611178952431">Pamahalaan ang data ng pag-sign in</translation>
 <translation id="1902576642799138955">Takdang Petsa ng Pagkakabisa</translation>
 <translation id="1905375423839394163">Pangalan ng Chromebook device</translation>
 <translation id="1905710495812624430">Nalampasan na ang maximum na pinapahintulutang bilang ng pagsubok</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Awtomatikong mag-i-install ang mga update sa software at seguridad sa hinaharap.</translation>
 <translation id="1979280758666859181">Lumilipat ka sa isang channel na may lumang bersyon ng <ph name="PRODUCT_NAME" />. Ilalapat ang paglilipat ng channel kapag tumugma ang bersyon ng channel sa bersyong kasalukuyang naka-install sa iyong device.</translation>
 <translation id="197989455406964291">Hindi sinusuportahan ng KDC ang uri ng pag-encrypt</translation>
-<translation id="1981544341227357861">Alisin ang iyong security key mula sa device mo, pagkatapos ay muling ipasok at pindutin ito.</translation>
 <translation id="1982354452682152483">Walang available na paglalarawan.</translation>
 <translation id="1987317783729300807">Mga Account</translation>
 <translation id="1989112275319619282">Mag-browse</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Mag-sign in sa Chrome</translation>
 <translation id="3285322247471302225">Bagong &amp;Tab</translation>
 <translation id="328571385944182268">I-save ang iyong mga password?</translation>
-<translation id="3286737518123001369">Tingnan at i-delete ang data sa pag-sign in na naka-store sa iyong security key</translation>
 <translation id="3288047731229977326">Ang mga extension na tumatakbo sa developer mode ay maaaring makapinsala sa iyong computer. Kung hindi ka isang developer, dapat mong i-disable ang mga extension na tumatakbo sa developer mode upang manatiling ligtas.</translation>
 <translation id="3289856944988573801">Upang tumingin ng mga update, mangyaring gumamit ng Ethernet o Wi-Fi.</translation>
 <translation id="3293644607209440645">Ipadala ang page na ito</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA Signature na may SHA-512</translation>
 <translation id="3544879808695557954">Username (opsyonal)</translation>
 <translation id="354602065659584722">Naalis ang mapaminsalang software</translation>
-<translation id="3547220315004609203">I-toggle ang tab strip</translation>
 <translation id="3547954654003013442">Mga setting ng proxy</translation>
 <translation id="3550915441744863158">Awtomatikong nag-a-update ang Chrome upang palagi kang mayroon ng pinakabagong bersyon</translation>
 <translation id="3551320343578183772">Isara ang Tab</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Pinapayagan ang mikropono</translation>
 <translation id="4031527940632463547">Na-block ang mga sensor</translation>
 <translation id="4033471457476425443">Magdagdag ng bagong folder</translation>
-<translation id="403456802563765809">Para pamahalaan ang iyong mga fingerprint, ilagay at pindutin ang iyong security key.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Task manager</translation>
 <translation id="4036778507053569103">Invalid ang patakarang na-download mula sa server.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Upang gamitin ang <ph name="NETWORK_ID" />, maaaring kailangan mo munang <ph name="LINK_START" />bisitahin ang pahina sa pag-sign in ng network<ph name="LINK_END" />, na awtomatikong bubukas sa loob ng ilang segundo. Kung hindi ito mangyayari, hindi magagamit ang network.</translation>
 <translation id="5637476008227280525">Pag-enable sa mobile data</translation>
 <translation id="5638309510554459422">Maghanap ng mga extension at tema sa <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Para pamahalaan ang iyong mga fingerprint, ilagay ang PIN para sa security key mo. Kung hindi mo alam ang PIN, kakailanganin mong i-reset ang security key.</translation>
 <translation id="5639549361331209298">I-reload ang pahinang ito, pindutin nang matagal upang makakita ng higit pang mga pagpipilian</translation>
 <translation id="5640133431808313291">Pamahalaan ang mga security key</translation>
 <translation id="5642508497713047">Tagapaglagda ng CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Invalid ang format ng URL. Ang mga sinusuportahang format ay \\server\share at smb://server/share.</translation>
 <translation id="5990386583461751448">Naisalin</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="5995884201513800557">Patuloy na pindutin ang iyong security key para i-save ang fingerprint mo.</translation>
 <translation id="5997337190805127100">Matuto pa Tungkol sa Access sa Site</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> (na) resulta para sa '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Mga Gustong Boses</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Ina-access ang input ng video</translation>
 <translation id="6011193465932186973">Fingerprint</translation>
 <translation id="6011449291337289699">I-clear ang data ng site</translation>
-<translation id="6013505829696424563">Para tingnan ang data sa pag-sign in, ilagay ang PIN para sa iyong security key. Kung hindi mo alam ang PIN, kakailanganin mong i-reset ang security key.</translation>
 <translation id="6015266928248016057">Di-wasto ang PUK. Natitirang pag-retry: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Taon</translation>
 <translation id="6016551720757758985">Kumpirmahin ang Powerwash na maaaring bumalik sa dating bersyon</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Magtanong bago magpadala</translation>
 <translation id="6840184929775541289">Ay hindi isang Certification Authority</translation>
 <translation id="6841186874966388268">Mga error</translation>
-<translation id="6841187140911216178">Para tingnan ang data sa pag-sign in, ilagay at pindutin ang iyong security key</translation>
 <translation id="6843423766595476978">Nakahanda na ang Ok Google</translation>
 <translation id="6845038076637626672">Buksan ang naka-maximize</translation>
 <translation id="6845325883481699275">Tulungang paigtingin ang seguridad ng Chrome</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">I-annotate ang larawan</translation>
 <translation id="8845001906332463065">Humingi ng tulong</translation>
-<translation id="8845164297565101021">Ipasok at pindutin ang iyong security key para gumawa o magpalit ng PIN.</translation>
 <translation id="8846132060409673887">I-read ang manufacturer at modelo ng computer na ito</translation>
 <translation id="8846141544112579928">Naghahanap ng keyboard...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5455,7 +5445,6 @@
 <translation id="894360074127026135">International Step-Up ng Netscape</translation>
 <translation id="8944099748578356325">Mas mabilis na mauubos ang baterya (kasalukuyang <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">Nagbabahagi ang <ph name="APP_NAME" /> ng window sa <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Idagdag, i-rename, at i-delete ang mga naka-save na fingerprint sa iyong device</translation>
 <translation id="8946359700442089734">Ang mga feature para sa pagde-debug ay hindi ganap na na-enable sa <ph name="IDS_SHORT_PRODUCT_NAME" /> device na ito.</translation>
 <translation id="894871326938397531">Umalis sa incognito mode?</translation>
 <translation id="8948939328578167195">Gusto ng <ph name="WEBSITE" /> na makita ang manufacturer at modelo ng iyong security key</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb
index 942c6992..94625cb 100644
--- a/chrome/app/resources/generated_resources_fr.xtb
+++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plug-in VM a besoin d'une autorisation pour fonctionner</translation>
 <translation id="1900305421498694955">Les applications provenant de Google Play peuvent exiger un accès complet, en lecture et en écriture, aux fichiers situés sur des périphériques de stockage externe. Les fichiers stockés sur ces périphériques externes, et les dossiers où ils se trouvent, sont visibles par tous les utilisateurs. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Tout sélectionner</translation>
-<translation id="1901984611178952431">Gérer les données de connexion</translation>
 <translation id="1902576642799138955">Durée de validité</translation>
 <translation id="1905375423839394163">Nom du Chromebook</translation>
 <translation id="1905710495812624430">Vous avez atteint le nombre maximal autorisé de tentatives.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Les prochaines mises à jour logicielles et de sécurité seront installées automatiquement.</translation>
 <translation id="1979280758666859181">Vous souhaitez installer une ancienne version de <ph name="PRODUCT_NAME" />. Ce changement sera appliqué dès que cette version correspondra à celle qui est installée sur votre appareil.</translation>
 <translation id="197989455406964291">KDC n'est pas compatible avec ce type de chiffrement</translation>
-<translation id="1981544341227357861">Retirez votre clé de sécurité de votre appareil, réinsérez-la, puis appuyez dessus.</translation>
 <translation id="1982354452682152483">Aucune description n'est disponible.</translation>
 <translation id="1987317783729300807">Comptes</translation>
 <translation id="1989112275319619282">Parcourir</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Connectez-vous à Chrome</translation>
 <translation id="3285322247471302225">Nouvel ongle&amp;t</translation>
 <translation id="328571385944182268">Enregistrer vos mots de passe ?</translation>
-<translation id="3286737518123001369">Afficher et effacer les données de connexion stockées sur votre clé de sécurité</translation>
 <translation id="3288047731229977326">Les extensions exécutées en mode développeur peuvent nuire à votre ordinateur. Si vous n'êtes pas un développeur, nous vous recommandons de désactiver celles-ci afin d'assurer la sécurité de votre ordinateur.</translation>
 <translation id="3289856944988573801">Pour rechercher des mises à jour, veuillez utiliser une connexion Ethernet ou Wi-Fi.</translation>
 <translation id="3293644607209440645">Envoyer cette page</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Signature X9.62 ECDSA avec SHA-512</translation>
 <translation id="3544879808695557954">Nom d'utilisateur (facultatif)</translation>
 <translation id="354602065659584722">Logiciel malveillant supprimé</translation>
-<translation id="3547220315004609203">Activer/Désactiver la barre d'onglets</translation>
 <translation id="3547954654003013442">Paramètres de proxy</translation>
 <translation id="3550915441744863158">Chrome se met à jour automatiquement afin que vous disposiez toujours de la version la plus récente.</translation>
 <translation id="3551320343578183772">Fermer l'onglet</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Micro autorisé</translation>
 <translation id="4031527940632463547">Capteurs bloqués</translation>
 <translation id="4033471457476425443">Ajouter un dossier</translation>
-<translation id="403456802563765809">Pour gérer vos empreintes digitales, insérez votre clé de sécurité, puis appuyez dessus.</translation>
 <translation id="4034824040120875894">Imprimante</translation>
 <translation id="4035758313003622889">Gestionnaire de &amp;tâches</translation>
 <translation id="4036778507053569103">La règle téléchargée depuis le serveur n'est pas valide.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">Pour utiliser <ph name="NETWORK_ID" />, vous devez d'abord <ph name="LINK_START" />accéder à la page de connexion du réseau<ph name="LINK_END" />, qui s'ouvrira automatiquement dans quelques secondes. Dans le cas contraire, ce réseau ne pourra pas être utilisé pour la connexion Internet.</translation>
 <translation id="5637476008227280525">Activation des données mobiles</translation>
 <translation id="5638309510554459422">Découvrez des extensions et des thèmes sur le <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Pour gérer vos empreintes digitales, saisissez le code de votre clé de sécurité. Si vous ne le connaissez pas, vous devez réinitialiser la clé de sécurité.</translation>
 <translation id="5639549361331209298">Actualiser cette page, patienter pour voir plus d'options</translation>
 <translation id="5640133431808313291">Gérer les clés de sécurité</translation>
 <translation id="5642508497713047">Signataire de la liste de révocation de certificats</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Le format de l'URL n'est pas valide. Les formats acceptés sont \\server\share et smb://server/share.</translation>
 <translation id="5990386583461751448">Traduite</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="5995884201513800557">Continuez à appuyer sur votre clé de sécurité pour enregistrer votre empreinte digitale.</translation>
 <translation id="5997337190805127100">En savoir plus sur l'accès aux sites</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> résultats pour "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Voix préférées</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Accès à l'entrée vidéo en cours…</translation>
 <translation id="6011193465932186973">Empreinte digitale</translation>
 <translation id="6011449291337289699">Effacer les données de sites</translation>
-<translation id="6013505829696424563">Pour afficher vos données de connexion, saisissez le code de votre clé de sécurité. Si vous ne le connaissez pas, vous devez réinitialiser la clé de sécurité.</translation>
 <translation id="6015266928248016057">Clé PUK incorrecte. Il vous reste <ph name="RETRIES" /> tentative(s).</translation>
 <translation id="6015796118275082299">Année</translation>
 <translation id="6016551720757758985">Confirmer la réinitialisation Powerwash et rétablir la version précédente</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Demander avant d'envoyer</translation>
 <translation id="6840184929775541289">N'est pas une autorité de certification</translation>
 <translation id="6841186874966388268">Erreurs</translation>
-<translation id="6841187140911216178">Pour afficher les données de connexion, insérez votre clé de sécurité, puis appuyez dessus.</translation>
 <translation id="6843423766595476978">Ok Google est à présent configuré</translation>
 <translation id="6845038076637626672">Ouvrir la version agrandie</translation>
 <translation id="6845325883481699275">Contribuer à améliorer la sécurité de Chrome</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annoter l'image</translation>
 <translation id="8845001906332463065">Obtenir de l'aide</translation>
-<translation id="8845164297565101021">Insérez votre clé de sécurité, puis appuyez dessus pour créer ou modifier un code.</translation>
 <translation id="8846132060409673887">Lire le fabricant et le modèle de cet ordinateur</translation>
 <translation id="8846141544112579928">Recherche du clavier en cours…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">Fonction d'optimisation internationale Netscape </translation>
 <translation id="8944099748578356325">Sollicitera davantage la batterie (<ph name="BATTERY_PERCENTAGE" /> % actuellement)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> partage une fenêtre avec <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Ajouter des empreintes digitales, et renommer et supprimer celles enregistrées sur votre appareil</translation>
 <translation id="8946359700442089734">Les fonctionnalités de débogage n'ont pas été complètement activées sur cet appareil <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Quitter le mode navigation privée ?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> souhaite voir la marque et le modèle de votre clé de sécurité</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb
index ba2c1d4..a566ba50 100644
--- a/chrome/app/resources/generated_resources_gu.xtb
+++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -26,6 +26,7 @@
 <translation id="1031362278801463162">પ્રીવ્યૂ લોડ થાય છે</translation>
 <translation id="103279545524624934">Android ઍપ્લિકેશનો લોંચ કરવા માટે ડિસ્ક સ્થાન ખાલી કરો.</translation>
 <translation id="1033780634303702874">તમારા સીરિયલ ઉપકરણોને ઍક્સેસ કરો</translation>
+<translation id="1034942643314881546">ઍપનું ચિત્ર બનાવવા માટે adb ચાલુ કરી રહ્યાં છીએ</translation>
 <translation id="1036348656032585052">બંધ કરો</translation>
 <translation id="1036511912703768636">આ USB ઉપકરણોમાંથી કોઈપણ ઍક્સેસ કરો</translation>
 <translation id="1036982837258183574">બહાર નીકળવા માટે |<ph name="ACCELERATOR" />| દબાવો</translation>
@@ -284,6 +285,7 @@
 <translation id="1415708812149920388">ક્લિપબોર્ડ વાંચવાનો ઍક્સેસ નકારેલ છે</translation>
 <translation id="1415990189994829608"><ph name="EXTENSION_NAME" /> (એક્સ્ટેન્શન ID "<ph name="EXTENSION_ID" />") ને આ પ્રકારના સત્રમાં મંજૂરી નથી.</translation>
 <translation id="1416836038590872660">EAP-MD5</translation>
+<translation id="1418954524306642206">તમારા પ્રિન્ટરની PPD ફાઇલનો ઉલ્લેખ કરવા માટે બ્રાઉઝ કરો</translation>
 <translation id="1420834118113404499">મીડિયા લાઇસન્સીસ</translation>
 <translation id="1420920093772172268">જોડી કરવાની મંજૂરી આપવા માટે <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
 <translation id="1422159345171879700">અસુરક્ષિત સ્ક્રિપ્ટ લોડ કરો</translation>
@@ -551,6 +553,7 @@
 <translation id="1782196717298160133">તમારો ફોન શોધી રહ્યું છે</translation>
 <translation id="1784707308176068866">સહયોગ કરનાર મૂળ ઍપ્લિકેશન દ્વારા વિનંતી કરવામાં આવી હોય ત્યારે બૅકગ્રાઉન્ડમાં ચલાવો</translation>
 <translation id="1784849162047402014">ઉપકરણમાં ડિસ્ક સ્થાન ઓછું છે</translation>
+<translation id="1787350673646245458">વપરાશકર્તાની છબી</translation>
 <translation id="1790194216133135334">લિંક <ph name="DEVICE_NAME" /> પર મોકલો</translation>
 <translation id="1790976235243700817">ઍક્સેસ કાઢી નાખો</translation>
 <translation id="1792619191750875668">વિસ્તૃત ડિસ્પ્લે</translation>
@@ -633,7 +636,6 @@
 <translation id="1899826437968063457">પ્લગ-ઇન VMને ચાલવા માટે પરવાનગીની જરૂર છે</translation>
 <translation id="1900305421498694955">Google Play પરની ઍપને બાહ્ય સ્ટોરેજ ડિવાઇસ પરની ફાઇલો તથા ફોલ્ડરો વાંચવા અને લખવા માટે ફાઇલ સિસ્ટમનો સંપૂર્ણ ઍક્સેસ હોવો જરૂરી હોઈ શકે છે. બાહ્ય ડ્રાઇવનો ઉપયોગ કરનાર કોઈપણ વ્યક્તિ ડિવાઇસ પર બનાવેલી ફાઇલો તથા ફોલ્ડરોને જોઈ શકે છે. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;બધા પસંદ કરો</translation>
-<translation id="1901984611178952431">સાઇન ઇન ડેટાને મેનેજ કરો</translation>
 <translation id="1902576642799138955">માન્ય અવધિ</translation>
 <translation id="1905375423839394163">Chromebook ઉપકરણનું નામ</translation>
 <translation id="1905710495812624430">મહત્તમ મંજૂર પ્રયત્નોની સંખ્યા ઓળંગાઈ.</translation>
@@ -681,9 +683,9 @@
 <translation id="1976150099241323601">સુરક્ષા ઉપકરણ પર સાઇન ઇન કરો </translation>
 <translation id="1976323404609382849">બહુવિધ સાઇટ્સની કૂકીઝ અવરોધિત કરી છે.</translation>
 <translation id="1977965994116744507">તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરવા તમારા ફોનને વધુ નજીક લાવો.</translation>
+<translation id="1978006917103730774">ભાવિ સૉફ્ટવેર અને સુરક્ષા અપડેટ ઑટોમૅટિક રીતે ઇન્સ્ટૉલ કરવામાં આવશે.</translation>
 <translation id="1979280758666859181">તમે ચેનલને <ph name="PRODUCT_NAME" />ના જૂના વર્ઝન સાથે બદલી રહ્યા છો. જ્યારે ચેનલ વર્ઝન હાલમાં તમારા ડિવાઇસ પર ઇન્સ્ટૉલ કરેલા વર્ઝનથી મેળ ખાતું હોય ત્યારે ચેનલ ફેરફાર લાગુ થશે.</translation>
 <translation id="197989455406964291">KDCમાં એન્ક્રિપ્શન પ્રકારની સુવિધા નથી</translation>
-<translation id="1981544341227357861">તમારા ડિવાઇસમાંથી તમારો સુરક્ષા કોડ કાઢી નાખો, પછી તેને ફરી સામેલ કરીને ટચ કરો.</translation>
 <translation id="1982354452682152483">કોઈ વર્ણન ઉપલબ્ધ નથી.</translation>
 <translation id="1987317783729300807">એકાઉન્ટ્સ</translation>
 <translation id="1989112275319619282">બ્રાઉઝ કરો</translation>
@@ -810,6 +812,7 @@
 <translation id="2173801458090845390">આ ઉપકરણમાં માગણી ID ઉમેરો</translation>
 <translation id="2175042898143291048">હંમેશાં આ કરો</translation>
 <translation id="2175607476662778685">ઝડપી લૉંચ બાર</translation>
+<translation id="217576141146192373">પ્રિન્ટર ઉમેરી શકાયું નથી. કૃપા કરીને તમારા પ્રિન્ટરની ગોઠવણી ચેક કરો અને ફરી પ્રયાસ કરો.</translation>
 <translation id="2177950615300672361">છુપો ટેબ: <ph name="TAB_NAME" /></translation>
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_DOMAIN" /> પરનું <ph name="PEPPER_PLUGIN_NAME" /> તમારા કમ્પ્યુટરને ઍક્સેસ કરવા માગે છે</translation>
 <translation id="2178614541317717477">CA સમાધાન</translation>
@@ -922,6 +925,7 @@
 <translation id="2326931316514688470">ઍપ્લિકેશન &amp;ફરીથી લોડ કરો</translation>
 <translation id="2327492829706409234">ઍપ ચાલુ કરો</translation>
 <translation id="2329597144923131178">તમારા તમામ ઉપકરણો પર તમારા બુકમાર્ક્સ, ઇતિહાસ, પાસવર્ડ્સ અને અન્ય સેટિંગ્સ મેળવવા માટે સાઇન ઇન કરો.</translation>
+<translation id="2330129964253841015">જો પાસવર્ડમાં ચેડાં થાય તો તમને ચેતવણી આપવામાં આવશે</translation>
 <translation id="2332131598580221120">સ્ટોરમાં જુઓ</translation>
 <translation id="2332192922827071008">પસંદગીઓ ખોલો</translation>
 <translation id="2332742915001411729">ડિફોલ્ટ પર ફરીથી સેટ કરો</translation>
@@ -970,6 +974,7 @@
 <translation id="2395616325548404795">એન્ટરપ્રાઇઝ સંચાલન માટે તમારા <ph name="DEVICE_TYPE" /> ની સફળતાપૂર્વક નોંધણી કરવામાં આવી, પરંતુ તેની એસેટ અને સ્થાન માહિતી મોકલવામાં નિષ્ફળ થયાં. કૃપા કરીને આ ઉપકરણ માટે તમારા Admin console માંથી આ માહિતી જાતે દાખલ કરો.</translation>
 <translation id="2396783860772170191">4 અંકનો પિન (0000-9999) દાખલ કરો</translation>
 <translation id="2399939490305346086">સુરક્ષા કોડનો સાઇન ઇન ડેટા</translation>
+<translation id="2407481962792080328">જ્યારે તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો છો, ત્યારે આ સુવિધા ચાલુ કરવામાં આવે છે</translation>
 <translation id="2408955596600435184">તમારો PIN દાખલ કરો</translation>
 <translation id="241082044617551207">અજ્ઞાત પ્લગિન</translation>
 <translation id="2412593942846481727">અપડેટ ઉપલબ્ધ છે</translation>
@@ -1410,6 +1415,7 @@
 <translation id="3016641847947582299">ઘટક અપડેટ કર્યો</translation>
 <translation id="3016780570757425217">તમારું સ્થાન જાણો</translation>
 <translation id="3017079585324758401">બૅકગ્રાઉન્ડ</translation>
+<translation id="3019285239893817657">સબપેજનું બટન</translation>
 <translation id="3020183492814296499">શૉર્ટકટ</translation>
 <translation id="3020990233660977256">સીરિયલ નંબર: <ph name="SERIAL_NUMBER" /></translation>
 <translation id="3021066826692793094">પતંગિયું</translation>
@@ -1424,6 +1430,7 @@
 <translation id="3038612606416062604">પ્રિન્ટરને મેન્યુઅલી ઉમેરો</translation>
 <translation id="3038675903128704560">તમારા કમ્પ્યુટરને ઍક્સેસ કરવા માટે કોઈપણ સાઇટને પ્લગ-ઇનનો ઉપયોગ કરવાની મંજૂરી આપશો નહીં</translation>
 <translation id="3039491566278747710">ડિવાઇસ પર ઇન્ટરનેટ વગર નીતિ ઇન્સ્ટૉલ કરવામાં નિષ્ફળ ગયું.</translation>
+<translation id="3043581297103810752"><ph name="ORIGIN" />માંથી</translation>
 <translation id="3045447014237878114">આ સાઇટે એકથી વધુ ફાઇલો આપમેળે ડાઉનલોડ કરી છે</translation>
 <translation id="3046910703532196514">વેબપેજ, પૂર્ણ</translation>
 <translation id="304747341537320566">વાણી એન્જિનો</translation>
@@ -1566,7 +1573,6 @@
 <translation id="3282568296779691940">Chrome માં સાઇન ઇન કરો</translation>
 <translation id="3285322247471302225">નવું &amp;ટૅબ</translation>
 <translation id="328571385944182268">તમારા પાસવર્ડ સાચવીએ?</translation>
-<translation id="3286737518123001369">તમારી સુરક્ષા કી પર સ્ટોર કરેલો સાઇન ઇન ડેટા જુઓ અને ડિલીટ કરો</translation>
 <translation id="3288047731229977326">ડેવલપર મોડમાં ચાલી રહેલા એક્સટેન્શન તમારા કમ્પ્યુટરને નુકસાન પહોંચાડી શકે છે. જો તમે ડેવલપર નથી, તો તમે સુરક્ષિત રહેવા માટે ડેવલપર મોડમાં ચાલી રહેલા આ એક્સ્ટેન્શનને બંધ કરવા જોઈએ.</translation>
 <translation id="3289856944988573801">અપડેટ તપાસવા માટે, કૃપા કરીને ઇથરનેટ અથવા વાઇ-ફાઇનો ઉપયોગ કરો.</translation>
 <translation id="3293644607209440645">આ પેજ મોકલો</translation>
@@ -1736,7 +1742,6 @@
 <translation id="3543597750097719865">SHA-512 સાથે X9.62 ECDSA સહી</translation>
 <translation id="3544879808695557954">વપરાશકર્તાનું નામ (વૈકલ્પિક)</translation>
 <translation id="354602065659584722">નુકસાનકારક સૉફ્ટવેર દૂર કર્યુ</translation>
-<translation id="3547220315004609203">ટૅબ સ્ટ્રિપ ટૉગલ કરો</translation>
 <translation id="3547954654003013442">પ્રૉક્સી સેટિંગ</translation>
 <translation id="3550915441744863158">Chrome ઑટોમૅટિક રીતે અપડેટ થાય છે, જેથી કરીને તમારી પાસે હંમેશાં સૌથી નવું વર્ઝન રહે છે.</translation>
 <translation id="3551320343578183772">ટૅબ બંધ કરો</translation>
@@ -1805,6 +1810,7 @@
 <translation id="3629631988386925734">Smart Lock ચાલુ કરવા માટે તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. તમે સેટિંગમાં Smart Lock બંધ કરી શકો છો.</translation>
 <translation id="3630132874740063857">તમારો ફોન</translation>
 <translation id="3630995161997703415">આ સાઇટને ગમે ત્યારે ઉપયોગમાં લેવા માટે તેને તમારા શેલ્ફમાં ઉમેરો</translation>
+<translation id="3635353578505343390">Googleને પ્રતિસાદ મોકલો</translation>
 <translation id="3636096452488277381">હેલો, <ph name="USER_GIVEN_NAME" />.</translation>
 <translation id="3636766455281737684"><ph name="PERCENTAGE" />% - <ph name="TIME" /> બાકી</translation>
 <translation id="3637561406135221044">ફાઇલને સંવેદનશીલ વ્યક્તિગત ડેટા માટે તપાસી રહ્યાં છીએ...</translation>
@@ -1885,6 +1891,7 @@
 <translation id="3732530910372558017">પિનમાં વધુમા વધુ 63 અક્ષર હોવા જોઈએ</translation>
 <translation id="3733127536501031542">સ્ટેપ-અપ સાથે SSL સર્વર </translation>
 <translation id="3735740477244556633">આ પ્રમાણે સૉર્ટ કરો</translation>
+<translation id="3736016243818847857">શું તમે ચાલુ રાખવા માગો છો?</translation>
 <translation id="3737274407993947948">Linux ઇન્સ્ટૉલ કરતી વખતે ભૂલ આવી...</translation>
 <translation id="3737536731758327622">તમારા ડાઉનલોડ્સ અહીં દેખાય છે</translation>
 <translation id="3738924763801731196"><ph name="OID" />:</translation>
@@ -2109,7 +2116,6 @@
 <translation id="4031179711345676612">માઇક્રોફોનને મંજૂરી</translation>
 <translation id="4031527940632463547">સેન્સર બ્લૉક કરેલ છે</translation>
 <translation id="4033471457476425443">નવું ફોલ્ડર ઉમેરો</translation>
-<translation id="403456802563765809">તમારી ફિંગરપ્રિન્ટ મેનેજ કરવા માટે, તમારો સુરક્ષા કી દાખલ કરો અને તેને સ્પર્શ કરો.</translation>
 <translation id="4034824040120875894">પ્રિન્ટર</translation>
 <translation id="4035758313003622889">&amp;કાર્ય વ્યવસ્થાપક</translation>
 <translation id="4036778507053569103">સર્વરમાંથી ડાઉનલોડ કરેલી નીતિ અમાન્ય છે.</translation>
@@ -2394,6 +2400,7 @@
 <translation id="4501530680793980440">રીમૂવલની પુષ્ટિ કરો</translation>
 <translation id="4502423230170890588">આ ડિવાઇસમાંથી કાઢી નાખો</translation>
 <translation id="4504940961672722399">આ આયકન પર ક્લિક કરીને અથવા <ph name="EXTENSION_SHORTCUT" /> દબાવીને આ એક્સ્ટેંશનનો ઉપયોગ કરો.</translation>
+<translation id="4506379069541445709">ચાલુ રાખવાથી, તે Android ઍપ બનાવવા અને તેનું પરીક્ષણ કરવા માટે ADBને ચાલુ કરશે. ધ્યાનમાં રાખો કે ADB, Google દ્વારા ચકાસણી થઈ ન હોય એવી પરીક્ષણ ઍપના ઇન્સ્ટૉલેશનની મંજૂરી આપે છે.</translation>
 <translation id="4508051413094283164">બધુ છુપી વિંડોમાં ખોલો</translation>
 <translation id="4508265954913339219">સક્રિયતા નિષ્ફળ</translation>
 <translation id="4508765956121923607">&amp;સ્રોત જુઓ</translation>
@@ -2949,6 +2956,7 @@
 <translation id="5363109466694494651">Powerwash કરો અને ઉલટાવો</translation>
 <translation id="5365881113273618889">તમે પસંદ કરેલું ફોલ્ડર સંવેદનશીલ ફાઇલો ધરાવે છે. શું તમે ખરેખર "<ph name="APP_NAME" />"ને આ ફોલ્ડરની કાયમી લખવાનો ઍક્સેસ આપવા માંગો છો?</translation>
 <translation id="5367091008316207019">ફાઇલ વાંચી રહ્યાં છીએ..</translation>
+<translation id="5367319243122320268"><ph name="NETWORK_NAME" /> - <ph name="CONNECTION_STATUS" /></translation>
 <translation id="5368720394188453070">તમારો ફોન લૉક કરેલો છે. દાખલ કરવા માટે તેને અનલૉક કરો.</translation>
 <translation id="5368779022775404937"><ph name="REALM" /> માં સાઇન ઇન કરો</translation>
 <translation id="5369491905435686894">માઉસનું ઍક્સલરેશન ચાલુ કરો</translation>
@@ -3151,7 +3159,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> નો ઉપયોગ કરવા માટે તમારે પહેલા <ph name="LINK_START" />નેટવર્કના સાઇન-ઇન પૃષ્ઠની મુલાકાત લેવી<ph name="LINK_END" /> જરૂરી છે, જે થોડીવારમાં આપમેળે ખુલશે. જો આવું ન થાય, તો નેટવર્કનો ઉપયોગ કરી શકાતો નથી.</translation>
 <translation id="5637476008227280525">મોબાઇલ ડેટા ચાલુ</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome વેબ દુકાન<ph name="END_LINK" />માં એક્સ્ટેંશન અને થીમ શોધો.</translation>
-<translation id="5639152092474119692">તમારી ફિંગરપ્રિન્ટને મેનેજ કરવા, તમારી સુરક્ષા કી માટેનો પિન દાખલ કરો. જો તમને તમારો પિન યાદ ન હોય, તો તમારે સુરક્ષા કી રીસેટ કરવી પડશે.</translation>
 <translation id="5639549361331209298">આ પૃષ્ઠને ફરીથી લોડ કરો, વધુ વિકલ્પો જોવા માટે હોલ્ડ કરો</translation>
 <translation id="5640133431808313291">સુરક્ષા કોડને મેનેજ કરો</translation>
 <translation id="5642508497713047">CRL હસ્તાક્ષરકર્તા</translation>
@@ -3160,6 +3167,7 @@
 <translation id="5646558797914161501">ઉદ્યોગપતિ</translation>
 <translation id="5648166631817621825">છેલ્લા 7 દિવસ</translation>
 <translation id="5649053991847567735">આપમેળે ડાઉનલોડ્સ</translation>
+<translation id="5656845498778518563">Googleને પ્રતિસાદ મોકલો</translation>
 <translation id="5657667036353380798">બાહ્ય એક્સ્ટેંશન માટે chrome વર્ઝન <ph name="MINIMUM_CHROME_VERSION" /> અથવા તેનાથી મોટું વર્ઝન ઇન્સ્ટૉલ કરેલ હોવું જરૂરી છે.</translation>
 <translation id="5658415415603568799">વધારાની સુરક્ષા માટે, Smart Lock તમને 20 કલાક પછી તમારો પાસવર્ડ દાખલ કરવાનું કહેશે.</translation>
 <translation id="5659593005791499971">ઇમેઇલ</translation>
@@ -3289,6 +3297,7 @@
 <translation id="5851868085455377790">રજૂકર્તા </translation>
 <translation id="5852112051279473187">અરે! આ ડિવાઇસની નોંધણી કરતી વખતે ખરેખર કંઈક ખોટું થયું હતું. કૃપા કરીને ફરી પ્રયાસ કરો અથવા તમારા સપોર્ટ પ્રતિનિધિનો સંપર્ક કરો.</translation>
 <translation id="5852137567692933493">પુનઃપ્રારંભ કરો અને પાવરવૉશ કરો</translation>
+<translation id="5852360662347412211">Linux સેટિંગમાં જાઓ અને ફરી પ્રયાસ કરો</translation>
 <translation id="5854912040170951372">સ્લાઇસ</translation>
 <translation id="5855643921295613558">0.6 સેકન્ડ</translation>
 <translation id="5856721540245522153">ડિબગિંગ સુવિધાઓ ચાલુ કરો</translation>
@@ -3358,6 +3367,7 @@
 <translation id="5941153596444580863">વ્યક્તિ ઉમેરો...</translation>
 <translation id="5941343993301164315"><ph name="TOKEN_NAME" /> માટે કૃપા કરીને સાઇન ઇન કરો.</translation>
 <translation id="5941711191222866238">નાનું કરો</translation>
+<translation id="5942964813783878922">આ અપડેટ પૂર્ણ થયા પછી, તમારું <ph name="DEVICE_TYPE" /> ફરી શરૂ થશે. ભાવિ સૉફ્ટવેર અને સુરક્ષા અપડેટ ઑટોમૅટિક રીતે ઇન્સ્ટૉલ કરવામાં આવશે.</translation>
 <translation id="5944869793365969636">QR કોડ સ્કૅન કરો</translation>
 <translation id="5945188205370098537">વપરાશ અને નિદાનનો ડેટા મોકલો. Googleને નિદાન, ડિવાઇસ અને ઍપ વપરાશનો ડેટા ઑટોમૅટિક રીતે મોકલીને તમારા Android અનુભવને બહેતર બનાવવામાં સહાય કરો. આ સિસ્ટમ અને ઍપની સ્થિરતા અને અન્ય સુધારણાઓમાં સહાય કરશે. એકત્રીકરણ કરેલો કેટલોક ડેટા Google ઍપ અને ભાગીદારોને પણ મદદ કરશે, જેમ કે Android ડેવલપર. જો તમારી વધારાની વેબ અને ઍપ પ્રવૃત્તિ સેટિંગ ચાલુ હોય, તો આ ડેટા તમારા Google એકાઉન્ટમાં સાચવવામાં આવી શકે છે. <ph name="BEGIN_LINK1" />વધુ જાણો<ph name="END_LINK1" /></translation>
 <translation id="5946591249682680882">રીપોર્ટ ID <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
@@ -3392,7 +3402,6 @@
 <translation id="5985458664595100876">અમાન્ય URL ફોર્મેટ. સમર્થિત ફોર્મેટ \\server\share અને smb://server/share મુજબનું છે.</translation>
 <translation id="5990386583461751448">અનુવાદિત</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશન કાઢી નાખવાનું કહો.}one{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}other{તમે વેબ બ્રાઉઝ કરતા રહી શકો તેની ખાતરી કરવા માટે, તમારા વ્યવસ્થાપકને આ ઍપ્લિકેશનો કાઢી નાખવાનું કહો.}}</translation>
-<translation id="5995884201513800557">તમારી ફિંગરપ્રિન્ટને સાચવવા માટે તમારી સુરક્ષા કીને સ્પર્શ કરતા રહો.</translation>
 <translation id="5997337190805127100">સાઇટ ઍક્સેસ વિશે વધુ જાણો</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' માટે <ph name="RESULT_COUNT" /> પરિણામ</translation>
 <translation id="6002458620803359783">મનપસંદ વૉઇસ</translation>
@@ -3402,7 +3411,6 @@
 <translation id="6010869025736512584">વીડિયો ઇનપુટને ઍક્સેસ કરી રહ્યાં છીએ</translation>
 <translation id="6011193465932186973">ફિંગરપ્રિન્ટ</translation>
 <translation id="6011449291337289699">સાઇટનો ડેટા સાફ કરો</translation>
-<translation id="6013505829696424563">સાઇન-ઇન ડેટા જોવા માટે, તમારી સુરક્ષા કી માટેનો પિન દાખલ કરો. જો તમને તમારો પિન યાદ ન હોય, તો તમારે સુરક્ષા કી રીસેટ કરવી પડશે.</translation>
 <translation id="6015266928248016057">અમાન્ય PUK. બાકીના ફરી પ્રયાસો: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">વર્ષ</translation>
 <translation id="6016551720757758985">અગાઉના વર્ઝન પર પાછા ફરવાની સાથે Powerwashની ખાતરી કરો</translation>
@@ -3759,6 +3767,7 @@
         <ph name="EVENT_NAME" /></translation>
 <translation id="652492607360843641">તમે <ph name="NETWORK_TYPE" /> નેટવર્કથી કનેક્ટ થયાં છો.</translation>
 <translation id="6527303717912515753">શેર કરો</translation>
+<translation id="6528189551082329571">આ પ્રકારની લિંક હંમેશાં સંબંધિત ઍપમાં ખોલો</translation>
 <translation id="6528513914570774834">આ ઉપકરણના અન્ય વપરાશકર્તાઓને આ નેટવર્ક વાપરવાની મંજૂરી આપો</translation>
 <translation id="652948702951888897">Chrome ઇતિહાસ</translation>
 <translation id="6530186581263215931">આ સેટિંગ તમારા વ્યવસ્થાપક દ્વારા લાગુ કરવામાં આવ્યા છે</translation>
@@ -3956,7 +3965,6 @@
 <translation id="6840155290835956714">મોકલતાં પહેલાં પૂછો</translation>
 <translation id="6840184929775541289">કોઈ પ્રમાણન અધિકારી નથી</translation>
 <translation id="6841186874966388268">ભૂલો</translation>
-<translation id="6841187140911216178">સાઇન ઇન ડેટા જોવા માટે, તમારી સુરક્ષા કી દાખલ કરો અને સ્પર્શ કરો</translation>
 <translation id="6843423766595476978">ઓકે Google તૈયાર છે</translation>
 <translation id="6845038076637626672">મહત્તમ ખોલો</translation>
 <translation id="6845325883481699275">Chrome સુરક્ષાને વધુ સારી બનાવવામાં સહાય કરો</translation>
@@ -5072,6 +5080,7 @@
 <translation id="8449008133205184768">શૈલી પેસ્ટ કરો અને મેળ બેસાડો</translation>
 <translation id="8449036207308062757">સ્ટોરેજ સંચાલિત કરો</translation>
 <translation id="8452135315243592079">SIM કાર્ડ ખૂટે છે</translation>
+<translation id="8455026683977728932">ADBનું ચિત્ર ચાલુ કરવામાં નિષ્ફળ રહ્યાં</translation>
 <translation id="845702320058262034">કનેક્ટ કરી શકાતું નથી. તમારા ફોનનું બ્લૂટૂથ ચાલુ હોવાની ખાતરી કરો.</translation>
 <translation id="8457451314607652708">બુકમાર્ક્સ આયાત કરો</translation>
 <translation id="8460336040822756677">જો તમે <ph name="DEVICE_TYPE" /> માટે Smart Lock બંધ કરો, તો તમે તમારા ફોનનો ઉપયોગ કરીને તમારા Chrome ઉપકરણોને અનલૉક કરવામાં સમર્થ હશો નહીં. તમારે તમારો પાસવર્ડ લખવો પડશે.</translation>
@@ -5354,7 +5363,6 @@
 <translation id="8838770651474809439">હૅમ્બર્ગર</translation>
 <translation id="883911313571074303">છબીમાં ટીકા કરો</translation>
 <translation id="8845001906332463065">સહાય મેળવો</translation>
-<translation id="8845164297565101021">પિન બનાવવા અથવા બદલવા માટે તમારા સુરક્ષા કોડને સામેલ કરો અને ટચ કરો.</translation>
 <translation id="8846132060409673887">આ કમ્પ્યુટરના ઉત્પાદક અને મૉડલનું નામ વાંચો</translation>
 <translation id="8846141544112579928">કીબોર્ડ માટે શોધ કરી રહ્યું છે...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5427,7 +5435,6 @@
 <translation id="894360074127026135">નેટસ્કેપ ઇન્ટરનેશનલ સ્ટેપ-અપ</translation>
 <translation id="8944099748578356325">વધુ ઝડપથી બૅટરીનો ઉપયોગ કરો (હાલમાં <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> સાથે એક વિંડો શેર કરી રહી છે.</translation>
-<translation id="8945764661949477243">તમારા ડિવાઇસમાં ફિંગરપ્રિન્ટ ઉમેરો, સાચવેલી ફિંગરપ્રિન્ટનું નામ બદલો અને ડિલીટ કરો</translation>
 <translation id="8946359700442089734">આ <ph name="IDS_SHORT_PRODUCT_NAME" /> ઉપકરણ પર ડિબગિંગ સુવિધાઓ સંપૂર્ણપણે સક્ષમ ન હતી.</translation>
 <translation id="894871326938397531">છુપો મોડ છોડીએ?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> તમારા સુરક્ષા કોડની બનાવટ અને મૉડલ જોવા માગે છે</translation>
@@ -5547,6 +5554,7 @@
 <translation id="9116799625073598554">નોંધ લેતી અ‍ૅપ્લિકેશન</translation>
 <translation id="9117030152748022724">તમારી ઍપને મેનેજ કરો</translation>
 <translation id="9121814364785106365">પિન કરેલા ટૅબ તરીકે ખોલો</translation>
+<translation id="9122074588095746047">ADB ચાલુ કરી શક્યાં નથી</translation>
 <translation id="9124003689441359348">સાચવેલા પાસવર્ડ અહીં દેખાશે</translation>
 <translation id="9125466540846359910"><ph name="LICENSE_TYPE" /> (<ph name="LICENSE_COUNT" /> બાકી)</translation>
 <translation id="9128317794749765148">સેટઅપ પૂર્ણ ન થઈ શક્યું</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb
index 86ae89f..15e7a1b 100644
--- a/chrome/app/resources/generated_resources_hi.xtb
+++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -638,7 +638,6 @@
 <translation id="1899826437968063457">प्लग इन VM को चलाने के लिए अनुमति की ज़रूरत है</translation>
 <translation id="1900305421498694955">Google Play के ऐप्लिकेशन को फ़ाइल सिस्टम के हर तरह के ऐक्सेस की ज़रूरत हो सकती है, ताकि वे बाहरी स्टोरेज वाले डिवाइस पर फ़ाइलों को पढ़ और सेव कर पाएं. डिवाइस पर बनाई गई फ़ाइलों और फ़ोल्डर को बाहरी डिस्क का इस्तेमाल करने वाला कोई भी व्यक्ति देख सकता है. <ph name="LINK_BEGIN" />ज़्यादा जानें<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;सभी को चुनें</translation>
-<translation id="1901984611178952431">साइन इन का डेटा प्रबंधित करें</translation>
 <translation id="1902576642799138955">मान्यता अवधि</translation>
 <translation id="1905375423839394163">Chromebook डिवाइस का नाम</translation>
 <translation id="1905710495812624430">अधिकतम स्वीकार्य प्रयासों की सीमा पार हो गई है.</translation>
@@ -689,7 +688,6 @@
 <translation id="1978006917103730774">आने वाले सॉफ़्टवेयर और सुरक्षा के अपडेट अपने आप इंस्टॉल हो जाएंगे.</translation>
 <translation id="1979280758666859181">आप <ph name="PRODUCT_NAME" /> के पुराने वर्शन वाले चैनल में बदल रहे हैं. चैनल बदलाव तब लागू किया जाएगा जब चैनल का वर्शन आपके डिवाइस पर वर्तमान में इंस्टॉल किए गए वर्शन से मिलान करेगा.</translation>
 <translation id="197989455406964291">केडीसी में सुरक्षित करने का यह तरीका इस्तेमाल नहीं किया जा सकता.</translation>
-<translation id="1981544341227357861">अपनी सुरक्षा कुंजी को अपने डिवाइस से हटाएं, फिर उसे दाेबारा डालें और छुएं.</translation>
 <translation id="1982354452682152483">कोई जानकारी मौजूद नहीं है.</translation>
 <translation id="1987317783729300807">खाते</translation>
 <translation id="1989112275319619282">ब्राउज़ करें</translation>
@@ -1569,7 +1567,6 @@
 <translation id="3282568296779691940">Chrome में साइन इन करें</translation>
 <translation id="3285322247471302225">नया &amp;टैब</translation>
 <translation id="328571385944182268">क्या आप पासवर्ड सेव करना चाहते हैं?</translation>
-<translation id="3286737518123001369">अपनी सुरक्षा कुंजी पर सेव किया गया साइन इन डेटा देखें और मिटाएं</translation>
 <translation id="3288047731229977326">डेवलपर मोड में चलने वाले एक्सटेंशन आपके कंप्यूटर को नुकसान पहुंचा सकते हैं. अगर आप डेवलपर नहीं हैं तो, सुरक्षित रहने के लिए आपको डेवलपर मोड मे चलने वाले इन एक्सटेंशन को बंद कर देना चाहिए.</translation>
 <translation id="3289856944988573801">अपडेट की जाँच करने के लिए, कृपया Ethernet या वाई-फ़ाई का उपयोग करें.</translation>
 <translation id="3293644607209440645">यह पेज भेजें</translation>
@@ -1739,7 +1736,6 @@
 <translation id="3543597750097719865">SHA-512 के साथ X9.62 ECDSA हस्ताक्षर</translation>
 <translation id="3544879808695557954">उपयोगकर्ता नाम (वैकल्पिक)</translation>
 <translation id="354602065659584722">नुकसान पहुंचाने वाला सॉफ़्टवेयर निकाल दिया गया</translation>
-<translation id="3547220315004609203">टैब बार को टॉगल करें</translation>
 <translation id="3547954654003013442">प्रॉक्सी सेटिंग</translation>
 <translation id="3550915441744863158">Chrome अपने आप अपडेट हो जाता है इसलिए आपके पास हमेशा नवीनतम वर्शन रहता है</translation>
 <translation id="3551320343578183772">टैब बंद करें</translation>
@@ -2110,7 +2106,6 @@
 <translation id="4031179711345676612">माइक्रोफ़ोन की अनुमति है</translation>
 <translation id="4031527940632463547">सेंसर ब्लॉक हैं</translation>
 <translation id="4033471457476425443">नया फ़ोल्डर जोड़ें</translation>
-<translation id="403456802563765809">फ़िंगरप्रिंट प्रबंधित करने के लिए, अपनी सुरक्षा कुंजी डालें और उसे छूएं.</translation>
 <translation id="4034824040120875894">प्रिंटर</translation>
 <translation id="4035758313003622889">&amp;कार्य प्रबंधक</translation>
 <translation id="4036778507053569103">सर्वर से डाउनलोड की गई नीति गलत है.</translation>
@@ -3151,7 +3146,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> का इस्तेमाल करने के लिए आपको सबसे पहले <ph name="LINK_START" />नेटवर्क के साइन इन पेज पर जाना<ph name="LINK_END" /> होगा, जो कुछ ही सेकंड में अपने आप खुल जाएगा. अगर ऐसा नहीं होता है, तो नेटवर्क का इस्तेमाल नहीं किया जा सकेगा.</translation>
 <translation id="5637476008227280525">मोबाइल डेटा चालू करें</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome वेब स्टोर<ph name="END_LINK" /> में एक्सटेंशन और थीम ढूंढें</translation>
-<translation id="5639152092474119692">फ़िंगरप्रिंट प्रबंधित करने के लिए, अपनी सुरक्षा कुंजी का पिन डालें. अगर आपको पिन नहीं पता है, तो सुरक्षा कुंजी रीसेट करनी होगी.</translation>
 <translation id="5639549361331209298">यह पेज फिर लोड करें, ज़्यादा विकल्प देखने के लिए रोककर रखें</translation>
 <translation id="5640133431808313291">सुरक्षा कुंजी प्रबंधित करें</translation>
 <translation id="5642508497713047">CRL हस्ताक्षरकर्ता</translation>
@@ -3393,7 +3387,6 @@
 <translation id="5985458664595100876">यूआरएल का फ़ॉर्मेट गलत है. काम करने वाले फ़ॉर्मेट \\server\share और smb://server/share हैं.</translation>
 <translation id="5990386583461751448">अनुवाद किया गया</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को यह ऐप्लिकेशन हटाने के लिए कहें.}one{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}other{यह पक्का करने के लिए कि आप वेब ब्राउज़ करते रह सकते हैं, अपने एडमिन को ये ऐप्लिकेशन हटाने के लिए कहें.}}</translation>
-<translation id="5995884201513800557">फ़िंगरप्रिंट सेव करने के लिए अपनी सुरक्षा कुंजी को छूते रहें.</translation>
 <translation id="5997337190805127100">साइट ऐक्सेस के बारे में ज़्यादा जानें</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' के लिए <ph name="RESULT_COUNT" /> नतीजे मिले हैं</translation>
 <translation id="6002458620803359783">पसंदीदा आवाज़ें</translation>
@@ -3403,7 +3396,6 @@
 <translation id="6010869025736512584">वीडियो इनपुट ऐक्सेस हो रहा है</translation>
 <translation id="6011193465932186973">फ़िंगरप्रिंट</translation>
 <translation id="6011449291337289699">साइट डेटा साफ़ करें</translation>
-<translation id="6013505829696424563">साइन इन डेटा देखने के लिए, अपनी सुरक्षा कुंजी का पिन डालें. अगर आपको पिन नहीं पता है, तो सुरक्षा कुंजी रीसेट करनी होगी.</translation>
 <translation id="6015266928248016057">गलत PUK. इतनी बार और कोशिश की जा सकती है: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">वर्ष</translation>
 <translation id="6016551720757758985">पिछले वर्शन पर वापस लौटने के साथ ही पावरवॉश की पुष्‍टि करें</translation>
@@ -3955,7 +3947,6 @@
 <translation id="6840155290835956714">भेजने से पहले पूछें</translation>
 <translation id="6840184929775541289">एक प्रमाणन प्राधिकरण नहीं है</translation>
 <translation id="6841186874966388268">त्रुटियां</translation>
-<translation id="6841187140911216178">साइन इन डेटा देखने के लिए, अपनी सुरक्षा कुंजी डालें और उसे छूएं</translation>
 <translation id="6843423766595476978">Ok Google पूरी तरह तैयार है</translation>
 <translation id="6845038076637626672">बड़े दृश्य में खोलें</translation>
 <translation id="6845325883481699275">'Chrome सुरक्षा' को बेहतर बनाने में मदद करें</translation>
@@ -5112,7 +5103,7 @@
 <translation id="8509646642152301857">वर्तनी जाँच शब्दकोश डाउनलोड नहीं हो सका.</translation>
 <translation id="8512476990829870887">प्रक्रिया खत्म करें</translation>
 <translation id="851263357009351303"><ph name="HOST" /> को हमेशा चित्र दिखाने की अनुमति दें</translation>
-<translation id="8513108775083588393">स्क्रीन का अपने आप दिशा बदलना (अॉटो-रोटेट)</translation>
+<translation id="8513108775083588393">स्क्रीन का अपने आप दिशा बदलना (ऑटो-रोटेट)</translation>
 <translation id="8514746246728959655">कोई दूसरी सुरक्षा कुंजी आज़माकर देखें</translation>
 <translation id="8521475323816527629">अपने ऐप्लिकेशन तक तेज़ी से पहुंचें</translation>
 <translation id="8523493869875972733">बदलावों को बनाए रखें</translation>
@@ -5353,7 +5344,6 @@
 <translation id="8838770651474809439">हैमबर्गर</translation>
 <translation id="883911313571074303">इमेज पर टिप्पणी लिखें</translation>
 <translation id="8845001906332463065">सहायता पाएं</translation>
-<translation id="8845164297565101021">पिन बनाने या बदलने के लिए अपनी सुरक्षा कुंजी डालें और छुएं.</translation>
 <translation id="8846132060409673887">इस कंप्यूटर का निर्माता और मॉडल पढ़ें</translation>
 <translation id="8846141544112579928">कीबोर्ड खोजा जा रहा है...</translation>
 <translation id="8847988622838149491">यूएसबी</translation>
@@ -5426,7 +5416,6 @@
 <translation id="894360074127026135">Netscape अंतर्राष्ट्रीय स्टेप-अप</translation>
 <translation id="8944099748578356325">बैटरी का उपयोग ज़्यादा तेज़ी से करेंं (इस समय <ph name="BATTERY_PERCENTAGE" />% है)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> के साथ कोई विंडो शेयर कर रहा है.</translation>
-<translation id="8945764661949477243">अपने डिवाइस पर सेव किए गए फ़िंगरप्रिंट जोड़ें, उनका नाम बदलें, और मिटाएं</translation>
 <translation id="8946359700442089734">डीबग करने वाली सुविधाएं इस <ph name="IDS_SHORT_PRODUCT_NAME" /> डिवाइस पर पूरी तरह सक्षम नहीं की गई थीं.</translation>
 <translation id="894871326938397531">गुप्त मोड छोड़ें?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> आपकी सुरक्षा कुंजी के निर्माता और मॉडल को देखना चाहती है</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb
index 2f6ab9b..f06f0885 100644
--- a/chrome/app/resources/generated_resources_hr.xtb
+++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Dodatku VM potrebno je dopuštenje za pokretanje</translation>
 <translation id="1900305421498694955">Aplikacije s Google Playa mogu zatražiti potpuni pristup sustavu datoteka radi čitanja i zapisivanja datoteka na vanjskim uređajima za pohranu. Datoteke i mape izrađene na uređaju vidljive su svima koji upotrebljavaju vanjski disk. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Odaberi &amp;sve</translation>
-<translation id="1901984611178952431">Upravljanje podacima za prijavu</translation>
 <translation id="1902576642799138955">Rok valjanosti</translation>
 <translation id="1905375423839394163">Naziv Chromebook uređaja</translation>
 <translation id="1905710495812624430">Premašen je maksimalan dopušteni broj pokušaja.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Buduća ažuriranja softvera i sigurnosna ažuriranja instalirat će se automatski.</translation>
 <translation id="1979280758666859181">Prelazite na kanal sa starijom verzijom usluge <ph name="PRODUCT_NAME" />. Promjena kanala primijenit će se kada se verzija kanala bude podudarala s verzijom koja je trenutačno instalirana na vašem uređaju.</translation>
 <translation id="197989455406964291">KDC ne podržava vrstu enkripcije</translation>
-<translation id="1981544341227357861">Uklonite sigurnosni ključ iz uređaja, a zatim ga ponovo umetnite i dodirnite.</translation>
 <translation id="1982354452682152483">Opis nije dostupan.</translation>
 <translation id="1987317783729300807">Računi</translation>
 <translation id="1989112275319619282">Pregledaj</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Prijavite se u Chrome</translation>
 <translation id="3285322247471302225">Nova &amp;kartica</translation>
 <translation id="328571385944182268">Spremiti zaporke?</translation>
-<translation id="3286737518123001369">Prikaz i brisanje podataka za prijavu pohranjenih na sigurnosnom ključu</translation>
 <translation id="3288047731229977326">Proširenja pokrenuta u načinu rada razvojnog programera mogu naštetiti vašem računalu. Ako niste razvojni programer, trebali biste onemogućiti proširenja koja su pokrenuta u načinu rada razvojnog programera radi svoje zaštite.</translation>
 <translation id="3289856944988573801">Da biste provjerili ima li ažuriranja, upotrijebite Ethernet ili Wi-Fi.</translation>
 <translation id="3293644607209440645">Pošalji ovu stranicu</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA potpis uz SHA-512</translation>
 <translation id="3544879808695557954">Korisničko ime (nije obavezno)</translation>
 <translation id="354602065659584722">Štetni softver je uklonjen</translation>
-<translation id="3547220315004609203">Uključite ili isključite vrpcu kartica</translation>
 <translation id="3547954654003013442">Proxy postavke</translation>
 <translation id="3550915441744863158">Chrome se automatski ažurira tako da uvijek imate najnoviju verziju</translation>
 <translation id="3551320343578183772">Zatvori karticu</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofon je dopušten</translation>
 <translation id="4031527940632463547">Senzori su blokirani</translation>
 <translation id="4033471457476425443">Dodaj novu mapu</translation>
-<translation id="403456802563765809">Da biste upravljali otiscima prstiju, umetnite i dodirnite sigurnosni ključ.</translation>
 <translation id="4034824040120875894">Pisač</translation>
 <translation id="4035758313003622889">&amp;Upravitelj zadacima</translation>
 <translation id="4036778507053569103">Pravilo preuzeto s poslužitelja nije važeće.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Za upotrebu mreže <ph name="NETWORK_ID" /> možda ćete prvo morati <ph name="LINK_START" />posjetiti njezinu stranicu za prijavu<ph name="LINK_END" /> koja će se automatski otvoriti za nekoliko sekundi. Ako se to ne dogodi, mreža se ne može upotrebljavati.</translation>
 <translation id="5637476008227280525">Omogućivanje mobilnih podataka</translation>
 <translation id="5638309510554459422">Pronađite proširenja i teme u <ph name="BEGIN_LINK" />Chrome web-trgovini<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Unesite PIN za sigurnosni ključ da biste upravljali otiscima prstiju. Ako ne znate PIN, morat ćete vratiti sigurnosni ključ na zadano.</translation>
 <translation id="5639549361331209298">Ponovo učitajte ovu stranicu, zadržite da biste vidjeli više opcija</translation>
 <translation id="5640133431808313291">Upravljajte sigurnosnim ključevima</translation>
 <translation id="5642508497713047">CRL potpisnik</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Format URL-a nije važeći. Podržani su formati \\server\share i smb://server/share.</translation>
 <translation id="5990386583461751448">Prevedeno</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="5995884201513800557">Dodirujte sigurnosni ključ kako biste spremili otisak prsta.</translation>
 <translation id="5997337190805127100">Saznajte više o pristupu web-lokacijama</translation>
 <translation id="6000758707621254961">Rezultata za upit "<ph name="SEARCH_TEXT" />" ima <ph name="RESULT_COUNT" /></translation>
 <translation id="6002458620803359783">Preferirani glasovi</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Pristupanje videoulazu</translation>
 <translation id="6011193465932186973">Otisak prsta</translation>
 <translation id="6011449291337289699">Brisanje podataka web-lokacija</translation>
-<translation id="6013505829696424563">Da biste vidjeli podatke za prijavu, unesite PIN za sigurnosni ključ. Ako ne znate PIN, morat ćete vratiti sigurnosni ključ na zadano.</translation>
 <translation id="6015266928248016057">PUK nije važeći. Preostalih pokušaja: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Godina</translation>
 <translation id="6016551720757758985">Potvrda Powerwasha uz povratak na prethodnu verziju</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Pitaj prije slanja</translation>
 <translation id="6840184929775541289">Nije tijelo za izdavanje certifikata</translation>
 <translation id="6841186874966388268">Pogreške</translation>
-<translation id="6841187140911216178">Da biste vidjeli podatke za prijavu, umetnite i dodirnite sigurnosni ključ</translation>
 <translation id="6843423766595476978">Ok Google spreman je za upotrebu</translation>
 <translation id="6845038076637626672">Maksimalno otvaranje</translation>
 <translation id="6845325883481699275">Pomognite poboljšati sigurnost na Chromeu</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj napomenu slici</translation>
 <translation id="8845001906332463065">Zatražite pomoć</translation>
-<translation id="8845164297565101021">Umetnite i dodirnite sigurnosni ključ da biste izradili ili promijenili PIN.</translation>
 <translation id="8846132060409673887">Čitanje proizvođača i modela računala</translation>
 <translation id="8846141544112579928">Traženje tipkovnice...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape međunarodni iskorak</translation>
 <translation id="8944099748578356325">brže trošiti bateriju (trenutačno <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> dijeli prozor s karticom <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Dodajte, preimenujte i izbrišite otiske prstiju spremljene na vašem uređaju</translation>
 <translation id="8946359700442089734">Značajke uklanjanja pogrešaka nisu posve omogućene na ovom uređaju <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Želite li napustiti anonimno?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> želi vidjeti marku i model vašeg sigurnosnog ključa</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb
index e53d4ba..31eee6df 100644
--- a/chrome/app/resources/generated_resources_hu.xtb
+++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">A Plugin VM szolgáltatásnak engedélyre van szüksége a futáshoz</translation>
 <translation id="1900305421498694955">Előfordulhat, hogy a Google Playről származó alkalmazások hozzáférést kérnek a teljes fájlrendszerhez, hogy olvashassák és módosíthassák a külső tárolóeszközökön lévő fájlokat. Az eszközön létrehozott fájlok és mappák minden olyan személy számára láthatók, aki a külső meghajtót használja. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation>
 <translation id="1901303067676059328">Össz&amp;es kiválasztása</translation>
-<translation id="1901984611178952431">Bejelentkezési adatok kezelése</translation>
 <translation id="1902576642799138955">Érvényesség időtartama</translation>
 <translation id="1905375423839394163">A Chromebook eszköz neve</translation>
 <translation id="1905710495812624430">Elérte az engedélyezett kísérletek maximális számát.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">A továbbiakban a biztonsági és szoftverfrissítéseket automatikusan telepíti a rendszer.</translation>
 <translation id="1979280758666859181">A(z) <ph name="PRODUCT_NAME" /> egy régebbi verziójával vált csatornát. A csatornamódosítás akkor lép érvénybe, amikor a csatorna verziószáma megegyezik az eszközön jelenleg telepített verziószámmal.</translation>
 <translation id="197989455406964291">A KDC nem támogatja a titkosítástípust</translation>
-<translation id="1981544341227357861">Távolítsa el a biztonsági hardverkulcsot az eszközből, majd helyezze vissza és érintse meg.</translation>
 <translation id="1982354452682152483">Nem áll rendelkezésre leírás.</translation>
 <translation id="1987317783729300807">Fiókok</translation>
 <translation id="1989112275319619282">Böngészés</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Bejelentkezés a Chrome-ba</translation>
 <translation id="3285322247471302225">Új lap</translation>
 <translation id="328571385944182268">Szeretné menteni a jelszavait?</translation>
-<translation id="3286737518123001369">A biztonsági hardverkulcson tárolt bejelentkezési adatok megtekintése és törlése</translation>
 <translation id="3288047731229977326">A fejlesztői módban futó bővítmények kárt okozhatnak számítógépén. Ha Ön nem fejlesztő, akkor a biztonság kedvéért kapcsolja ki a fejlesztői módban futó bővítményeket.</translation>
 <translation id="3289856944988573801">Kérjük, frissítések kereséséhez Ethernetet vagy Wi-Fit használjon.</translation>
 <translation id="3293644607209440645">Az oldal elküldése</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA aláírás a következővel: SHA-512</translation>
 <translation id="3544879808695557954">Felhasználónév (nem kötelező)</translation>
 <translation id="354602065659584722">Kártékony szoftver eltávolítva</translation>
-<translation id="3547220315004609203">A lapsor be-/kikapcsolása</translation>
 <translation id="3547954654003013442">Proxybeállítások</translation>
 <translation id="3550915441744863158">A Chrome automatikusan frissít, így Ön mindig a legújabb verzióval rendelkezik.</translation>
 <translation id="3551320343578183772">Lap bezárása</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">Mikrofon engedélyezve</translation>
 <translation id="4031527940632463547">Érzékelők letiltva</translation>
 <translation id="4033471457476425443">Új mappa hozzáadása</translation>
-<translation id="403456802563765809">Az ujjlenyomatok kezeléséhez helyezze be és érintse meg a biztonsági hardverkulcsot.</translation>
 <translation id="4034824040120875894">Nyomtató</translation>
 <translation id="4035758313003622889">&amp;Feladatkezelő</translation>
 <translation id="4036778507053569103">A szerverről letöltött házirend érvénytelen.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">A(z) <ph name="NETWORK_ID" /> használatához először <ph name="LINK_START" />fel kell keresnie a hálózat bejelentkezési oldalát<ph name="LINK_END" />, amely automatikusan megnyílik néhány másodpercen belül. Ha ez nem történik meg, akkor a hálózat nem használható.</translation>
 <translation id="5637476008227280525">Mobiladatok bekapcsolása</translation>
 <translation id="5638309510554459422">Bővítményeket és témákat a <ph name="BEGIN_LINK" />Chrome Internetes áruházban<ph name="END_LINK" /> kereshet</translation>
-<translation id="5639152092474119692">Az ujjlenyomatok kezeléséhez adja meg a biztonsági hardverkulcshoz tartozó PIN-kódot. Ha nem tudja a PIN-kódot, vissza kell állítania a biztonsági hardverkulcsot.</translation>
 <translation id="5639549361331209298">Az oldal újratöltése – további lehetőségek megtekintéséhez tartsa lenyomva.</translation>
 <translation id="5640133431808313291">Biztonsági hardverkulcsok kezelése</translation>
 <translation id="5642508497713047">Tanúsítvány-visszavonási lista aláírója</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Érvénytelen URL-formátum. A támogatott formátumok: \\server\share és smb://server/share.</translation>
 <translation id="5990386583461751448">Fordí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="5995884201513800557">Az ujjlenyomatai mentéséhez tartsa lenyomva ujját a biztonsági hardverkulcson.</translation>
 <translation id="5997337190805127100">További információ a webhelyekhez való hozzáférésről</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> találat a következőre: <ph name="SEARCH_TEXT" /></translation>
 <translation id="6002458620803359783">Előnyben részesített hangok</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Hozzáférés videobemenethez</translation>
 <translation id="6011193465932186973">Ujjlenyomat</translation>
 <translation id="6011449291337289699">Webhelyadatok törlése</translation>
-<translation id="6013505829696424563">A bejelentkezési adatok megtekintéséhez adja meg a biztonsági hardverkulcs PIN-kódját. Ha nem tudja a PIN-kódot, vissza kell állítania a biztonsági hardverkulcsot.</translation>
 <translation id="6015266928248016057">Érvénytelen PUK-kód. Próbálkozási lehetőségek száma: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Év</translation>
 <translation id="6016551720757758985">A Powerwash és az előző verzióhoz való visszatérés megerősítése</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Kérdezzen rá küldés előtt</translation>
 <translation id="6840184929775541289">Nem tanúsítványkibocsátó</translation>
 <translation id="6841186874966388268">Hibák</translation>
-<translation id="6841187140911216178">A bejelentkezési adatok megtekintéséhez helyezze be és érintse meg a biztonsági hardverkulcsot</translation>
 <translation id="6843423766595476978">Az Ok Google használatra kész</translation>
 <translation id="6845038076637626672">Megnyitás teljes méretben</translation>
 <translation id="6845325883481699275">Segítség a Chrome biztonságának továbberősítésében</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Megjegyzés fűzése a képhez</translation>
 <translation id="8845001906332463065">Súgó</translation>
-<translation id="8845164297565101021">A PIN-kód beállításához vagy módosításához helyezze be, majd érintse meg a biztonsági hardverkulcsot.</translation>
 <translation id="8846132060409673887">A számítógép gyártójának és típusának elolvasása</translation>
 <translation id="8846141544112579928">Billentyűzet keresése…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Megnövekedett akkumulátorhasználat (jelenleg <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">A(z) <ph name="APP_NAME" /> megoszt egy ablakot a következővel: <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">A saját eszközön mentett ujjlenyomatok hozzáadása, átnevezése és törlése</translation>
 <translation id="8946359700442089734">A hibakereső szolgáltatásokat nem kapcsolták be teljes körűen ezen a(z) <ph name="IDS_SHORT_PRODUCT_NAME" /> eszközön.</translation>
 <translation id="894871326938397531">Kilép az inkognitómódból?</translation>
 <translation id="8948939328578167195">A(z) <ph name="WEBSITE" /> szeretné látni a biztonsági hardverkulcs márkáját és típusát.</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb
index 92c802d8..59029962 100644
--- a/chrome/app/resources/generated_resources_id.xtb
+++ b/chrome/app/resources/generated_resources_id.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM perlu izin untuk berjalan</translation>
 <translation id="1900305421498694955">Aplikasi dari Google Play mungkin meminta akses sistem file penuh untuk membaca dan menulis file di perangkat penyimpanan eksternal. File dan folder yang dibuat di perangkat dapat dilihat oleh siapa saja yang menggunakan drive eksternal. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Pilih semu&amp;a</translation>
-<translation id="1901984611178952431">Kelola data login</translation>
 <translation id="1902576642799138955">Periode Validitas</translation>
 <translation id="1905375423839394163">Nama perangkat Chromebook</translation>
 <translation id="1905710495812624430">Melebihi batas percobaan maksimum yang diizinkan.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Software dan update layanan berikutnya akan diinstal secara otomatis.</translation>
 <translation id="1979280758666859181">Anda mengubah ke saluran dengan versi <ph name="PRODUCT_NAME" /> yang lebih lama. Perubahan saluran ini akan berlaku jika versi saluran cocok dengan versi yang saat ini terpasang pada perangkat Anda.</translation>
 <translation id="197989455406964291">KDC tidak mendukung jenis enkripsi</translation>
-<translation id="1981544341227357861">Lepaskan kunci keamanan dari perangkat, lalu masukkan kembali dan sentuh.</translation>
 <translation id="1982354452682152483">Tidak ada deskripsi yang tersedia.</translation>
 <translation id="1987317783729300807">Akun</translation>
 <translation id="1989112275319619282">Jelajahi</translation>
@@ -1577,7 +1575,6 @@
 <translation id="3282568296779691940">Login ke Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Baru</translation>
 <translation id="328571385944182268">Simpan sandi Anda?</translation>
-<translation id="3286737518123001369">Lihat dan hapus data login yang disimpan di kunci keamanan Anda</translation>
 <translation id="3288047731229977326">Ekstensi yang berjalan dalam mode pengembang dapat membahayakan komputer Anda. Jika Anda bukan pengembang, Anda sebaiknya menonaktifkan ekstensi yang berjalan dalam mode pengembang ini agar tetap aman.</translation>
 <translation id="3289856944988573801">Untuk memeriksa pembaruan, gunakan Ethernet atau Wi-Fi.</translation>
 <translation id="3293644607209440645">Kirim halaman ini</translation>
@@ -1747,7 +1744,6 @@
 <translation id="3543597750097719865">Tanda tangan X9.62 ECDSA dengan SHA-512</translation>
 <translation id="3544879808695557954">Nama pengguna (opsional)</translation>
 <translation id="354602065659584722">Software berbahaya dihapus</translation>
-<translation id="3547220315004609203">Alihkan tab setrip</translation>
 <translation id="3547954654003013442">Setelan proxy</translation>
 <translation id="3550915441744863158">Chrome memperbarui secara otomatis jadi Anda selalu memiliki versi terbaru</translation>
 <translation id="3551320343578183772">Tutup Tab</translation>
@@ -2122,7 +2118,6 @@
 <translation id="4031179711345676612">Mikrofon diizinkan</translation>
 <translation id="4031527940632463547">Sensor diblokir</translation>
 <translation id="4033471457476425443">Tambahkan folder baru</translation>
-<translation id="403456802563765809">Untuk mengelola sidik jari, masukkan dan sentuh kunci keamanan Anda.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Pengelola tugas</translation>
 <translation id="4036778507053569103">Kebijakan yang didownload dari server tidak valid.</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526">Untuk menggunakan <ph name="NETWORK_ID" />, pertama Anda harus <ph name="LINK_START" />mengunjungi halaman proses masuk jaringan<ph name="LINK_END" />, yang akan otomatis terbuka dalam beberapa detik. Jika hal itu tidak terjadi, jaringan tidak akan dapat digunakan.</translation>
 <translation id="5637476008227280525">Data seluler aktif</translation>
 <translation id="5638309510554459422">Temukan ekstensi dan tema di <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Untuk mengelola sidik jari, masukkan PIN kunci keamanan Anda. Jika tidak mengetahui PIN-nya, Anda perlu menyetel ulang kunci keamanan.</translation>
 <translation id="5639549361331209298">Muat ulang halaman ini, tahan untuk melihat opsi lainnya</translation>
 <translation id="5640133431808313291">Kelola kunci keamanan</translation>
 <translation id="5642508497713047">Penandatangan CRL</translation>
@@ -3408,7 +3402,6 @@
 <translation id="5985458664595100876">Format URL tidak valid. Format yang didukung adalah \\server\share dan smb://server/share.</translation>
 <translation id="5990386583461751448">Diterjemahkan</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="5995884201513800557">Terus ulangi menyentuh kunci keamanan Anda untuk menyimpan sidik jari.</translation>
 <translation id="5997337190805127100">Pelajari Akses Situs Lebih Lanjut</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> hasil untuk '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Suara Pilihan</translation>
@@ -3418,7 +3411,6 @@
 <translation id="6010869025736512584">Mengakses masukan video</translation>
 <translation id="6011193465932186973">Sidik jari</translation>
 <translation id="6011449291337289699">Hapus data situs</translation>
-<translation id="6013505829696424563">Untuk melihat data login, masukkan PIN kunci keamanan Anda. Jika tidak mengetahui PIN tersebut, Anda perlu menyetel ulang kunci keamanan.</translation>
 <translation id="6015266928248016057">PUK tidak valid. Percobaan ulang tersisa: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Tahun</translation>
 <translation id="6016551720757758985">Konfirmasi Powerwash dengan kembali ke versi sebelumnya</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">Tanyakan sebelum mengirim</translation>
 <translation id="6840184929775541289">Bukan Otoritas Sertifikasi</translation>
 <translation id="6841186874966388268">Kesalahan</translation>
-<translation id="6841187140911216178">Untuk melihat data login, masukkan dan sentuh kunci keamanan Anda</translation>
 <translation id="6843423766595476978">Ok Google sudah siap</translation>
 <translation id="6845038076637626672">Buka yang Dimaksimalkan</translation>
 <translation id="6845325883481699275">Bantu meningkatkan keamanan Chrome</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Gambar anotasi</translation>
 <translation id="8845001906332463065">Dapatkan bantuan</translation>
-<translation id="8845164297565101021">Masukkan dan sentuh kunci keamanan untuk membuat atau mengubah PIN.</translation>
 <translation id="8846132060409673887">Membaca produsen dan model komputer ini</translation>
 <translation id="8846141544112579928">Mencari keyboard...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Menghabiskan baterai lebih cepat (saat ini <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> membagikan jendela dengan <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Menambahkan, mengganti nama, dan menghapus sidik jari yang tersimpan di perangkat Anda</translation>
 <translation id="8946359700442089734">Fitur debug belum diaktifkan sepenuhnya di perangkat <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Keluar dari mode samaran?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> ingin melihat merek dan model kunci keamanan Anda</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb
index c51f60d..fea21737 100644
--- a/chrome/app/resources/generated_resources_it.xtb
+++ b/chrome/app/resources/generated_resources_it.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Per funzionare, Plugin VM richiede l'autorizzazione</translation>
 <translation id="1900305421498694955">Le app di Google Play potrebbero richiedere accesso completo al file system per leggere e scrivere sui file memorizzati sui dispositivi di archiviazione esterni. I file e le cartelle creati sul dispositivo sono visibili a chiunque usi l'unità esterna. <ph name="LINK_BEGIN" />Ulteriori informazioni<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Seleziona &amp;tutto</translation>
-<translation id="1901984611178952431">Gestisci i dati di accesso</translation>
 <translation id="1902576642799138955">Periodo di validità</translation>
 <translation id="1905375423839394163">Nome del dispositivo Chromebook</translation>
 <translation id="1905710495812624430">Numero massimo di tentativi consentiti superato.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">I futuri aggiornamenti software e della sicurezza verranno installati automaticamente.</translation>
 <translation id="1979280758666859181">Stai per passare a un canale con una versione precedente di <ph name="PRODUCT_NAME" />. Il cambio di canale verrà applicato quando la versione del canale corrisponderà alla versione attualmente installata sul dispositivo.</translation>
 <translation id="197989455406964291">KDC non supporta il tipo di crittografia</translation>
-<translation id="1981544341227357861">Rimuovi il token di sicurezza dal dispositivo, quindi inseriscilo nuovamente e toccalo.</translation>
 <translation id="1982354452682152483">Nessuna descrizione disponibile.</translation>
 <translation id="1987317783729300807">Account</translation>
 <translation id="1989112275319619282">Esplora</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Accedi a Chrome</translation>
 <translation id="3285322247471302225">Nuova &amp;scheda</translation>
 <translation id="328571385944182268">Vuoi salvare le password?</translation>
-<translation id="3286737518123001369">Visualizza ed elimina i dati di accesso memorizzati sul token di sicurezza</translation>
 <translation id="3288047731229977326">Le estensioni in esecuzione in modalità sviluppatore potrebbero danneggiare il computer. Se non sei uno sviluppatore, dovresti disattivare queste estensioni per la tua sicurezza.</translation>
 <translation id="3289856944988573801">Per verificare la disponibilità di aggiornamenti, utilizza una rete Ethernet o Wi-Fi.</translation>
 <translation id="3293644607209440645">Invia questa pagina</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">Firma X9.62 ECDSA con SHA-512</translation>
 <translation id="3544879808695557954">Nome utente (facoltativo)</translation>
 <translation id="354602065659584722">Software dannoso rimosso</translation>
-<translation id="3547220315004609203">Attiva/disattiva tabstrip</translation>
 <translation id="3547954654003013442">Impostazioni proxy</translation>
 <translation id="3550915441744863158">Chrome si aggiorna automaticamente per consentirti di avere sempre la versione più recente</translation>
 <translation id="3551320343578183772">Chiudi scheda</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">Microfono consentito</translation>
 <translation id="4031527940632463547">Sensori bloccati</translation>
 <translation id="4033471457476425443">Aggiungi nuova cartella</translation>
-<translation id="403456802563765809">Per gestire le tue impronte, inserisci e tocca il token di sicurezza.</translation>
 <translation id="4034824040120875894">Stampante</translation>
 <translation id="4035758313003622889">&amp;Task Manager</translation>
 <translation id="4036778507053569103">La norma scaricata dal server non è valida.</translation>
@@ -3166,7 +3161,6 @@
 <translation id="5636996382092289526">Per poter utilizzare la rete <ph name="NETWORK_ID" />, potrebbe essere necessario <ph name="LINK_START" />visitare la pagina di accesso della rete<ph name="LINK_END" />, che si aprirà automaticamente tra alcuni secondi. In caso contrario, non è possibile utilizzare la rete.</translation>
 <translation id="5637476008227280525">Attivazione dati mobili</translation>
 <translation id="5638309510554459422">Trova estensioni e temi nel <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Per gestire le tue impronte, inserisci il PIN del token di sicurezza. Se non conosci il PIN, devi reimpostare il token di sicurezza.</translation>
 <translation id="5639549361331209298">Ricarica questa pagina, tieni premuto per visualizzare altre opzioni</translation>
 <translation id="5640133431808313291">Gestisci i token di sicurezza</translation>
 <translation id="5642508497713047">Firmatario CRL</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">Formato dell'URL non valido. I formati supportati sono \\server\share e smb://server/share.</translation>
 <translation id="5990386583461751448">Tradotta</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="5995884201513800557">Continua a toccare il token di sicurezza per salvare la tua impronta.</translation>
 <translation id="5997337190805127100">Ulteriori informazioni sull'accesso ai siti</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> risultati per "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Voci preferite</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">Accesso all'input video in corso</translation>
 <translation id="6011193465932186973">Impronta digitale</translation>
 <translation id="6011449291337289699">Cancella i dati del sito</translation>
-<translation id="6013505829696424563">Per visualizzare i dati di accesso, inserisci il PIN del token di sicurezza. Se non conosci il PIN, devi reimpostare il token di sicurezza.</translation>
 <translation id="6015266928248016057">PUK non valido. Tentativi ancora disponibili: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Anno</translation>
 <translation id="6016551720757758985">Se confermi il Powerwash viene ripristinata la versione precedente</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Chiedi prima di inviare</translation>
 <translation id="6840184929775541289">Non è un'autorità di certificazione</translation>
 <translation id="6841186874966388268">Errori</translation>
-<translation id="6841187140911216178">Per visualizzare i dati di accesso, inserisci e tocca il token di sicurezza</translation>
 <translation id="6843423766595476978">Ok Google impostato</translation>
 <translation id="6845038076637626672">Apri ingrandita</translation>
 <translation id="6845325883481699275">Contribuisci a migliorare la sicurezza di Chrome</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Annota immagine</translation>
 <translation id="8845001906332463065">Richiedi assistenza</translation>
-<translation id="8845164297565101021">Inserisci e tocca il token di sicurezza per creare o modificare un PIN.</translation>
 <translation id="8846132060409673887">Lettura del produttore e del modello di questo computer</translation>
 <translation id="8846141544112579928">Ricerca tastiera in corso...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Consumerà più velocemente la batteria (attualmente con <ph name="BATTERY_PERCENTAGE" />% di carica)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> condivide una finestra con <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Aggiungi, rinomina ed elimina le impronte salvate sul dispositivo</translation>
 <translation id="8946359700442089734">Le funzioni di debug non sono state attivate completamente su questo dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Uscire da modalità in incognito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> vuole accedere a marca e modello del token di sicurezza</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb
index 60ac02da..4e35fb26 100644
--- a/chrome/app/resources/generated_resources_iw.xtb
+++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">‏Plugin VM זקוק להרשאה כדי לפעול</translation>
 <translation id="1900305421498694955">‏ייתכן שלאפליקציות מ-Google Play תידרש גישה מלאה למערכת הקבצים לצורך קריאה וכתיבה של קבצים בהתקני אחסון חיצוניים. הקבצים והתיקיות שנוצרים במכשיר גלויים לכל מי שמשתמש בכונן החיצוני. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">בחר &amp;הכל</translation>
-<translation id="1901984611178952431">ניהול נתוני כניסה</translation>
 <translation id="1902576642799138955">תקופת תוקף</translation>
 <translation id="1905375423839394163">‏שם מכשיר Chromebook</translation>
 <translation id="1905710495812624430">חריגה ממספר הניסיונות המרבי המותר.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">עדכוני תוכנה ואבטחה עתידיים יותקנו באופן אוטומטי.</translation>
 <translation id="1979280758666859181">אתה עובר לערוץ עם גרסה ישנה יותר של <ph name="PRODUCT_NAME" />. שינוי הערוץ יוחל כאשר גרסת הערוץ תתאים לגרסה המותקנת כעת במכשיר שלך.</translation>
 <translation id="197989455406964291">‏KDC לא תומך בסוג ההצפנה</translation>
-<translation id="1981544341227357861">יש להסיר את מפתח האבטחה מהמכשיר, ולאחר מכן להכניס אותו שוב ולגעת בו.</translation>
 <translation id="1982354452682152483">אין תיאור.</translation>
 <translation id="1987317783729300807">חשבונות</translation>
 <translation id="1989112275319619282">דפדף</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">‏כניסה ל-Chrome</translation>
 <translation id="3285322247471302225">כרטיסייה &amp;חדשה</translation>
 <translation id="328571385944182268">לשמור את הסיסמאות?</translation>
-<translation id="3286737518123001369">הצגה ומחיקה של פרטי הכניסה המאוחסנים במפתח האבטחה</translation>
 <translation id="3288047731229977326">תוספים הרצים במצב מפתח יכולים להזיק למחשב שלך. אם אינך מפתח, עליך להשבית את התוספים הרצים במצב מפתח כדי לשמור על ביטחונך.</translation>
 <translation id="3289856944988573801">‏כדי לבדוק אם יש עדכונים, השתמש ב-Ethernet או ב-Wi-Fi.</translation>
 <translation id="3293644607209440645">שליחת הדף הזה</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">‏חתימת X9.62 ECDSA עם SHA-512</translation>
 <translation id="3544879808695557954">שם משתמש (אופציונלי)</translation>
 <translation id="354602065659584722">תוכנה מזיקה הוסרה</translation>
-<translation id="3547220315004609203">החלפת מצב של שורת הכרטיסיות</translation>
 <translation id="3547954654003013442">‏הגדרות Proxy</translation>
 <translation id="3550915441744863158">‏Chrome מתעדכן באופן אוטומטי כך שתשתמש תמיד בגרסה העדכנית ביותר</translation>
 <translation id="3551320343578183772">סגור כרטיסייה</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">ניתן להשתמש במיקרופון בדף זה</translation>
 <translation id="4031527940632463547">החיישנים חסומים</translation>
 <translation id="4033471457476425443">הוספת תיקייה חדשה</translation>
-<translation id="403456802563765809">כדי לנהל את טביעות האצבעות, יש להכניס את מפתח האבטחה ולגעת בו.</translation>
 <translation id="4034824040120875894">מדפסת</translation>
 <translation id="4035758313003622889">&amp;מנהל המשימות</translation>
 <translation id="4036778507053569103">המדיניות שהורדה מהשרת אינה חוקית.</translation>
@@ -3164,7 +3159,6 @@
 <translation id="5636996382092289526">כדי להשתמש ב-<ph name="NETWORK_ID" /> ייתכן שראשית יהיה עליך <ph name="LINK_START" />להיכנס לדף הכניסה של הרשת<ph name="LINK_END" />, שייפתח אוטומטית בעוד כמה שניות. אם הוא לא נפתח, לא ניתן יהיה להשתמש ברשת.</translation>
 <translation id="5637476008227280525">הפעלת נתונים סלולריים</translation>
 <translation id="5638309510554459422">‏תוספים ועיצובים זמינים ב<ph name="BEGIN_LINK" />חנות האינטרנט של Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">כדי לנהל את טביעות האצבעות יש להזין את קוד האימות של מפתח האבטחה. אם לא ידוע לך מהו קוד האימות, יהיה עליך לאפס את מפתח האבטחה.</translation>
 <translation id="5639549361331209298">טען מחדש את הדף, לחץ לחיצה ארוכה כדי להציג אפשרויות נוספות</translation>
 <translation id="5640133431808313291">ניהול מפתחות אבטחה</translation>
 <translation id="5642508497713047">‏חותם CRL</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">‏פורמט כתובת האתר לא חוקי. הפורמטים הנתמכים הם ‎\\server\share ו-smb://server/share.</translation>
 <translation id="5990386583461751448">מתורגם</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציה הזו.}two{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}many{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}other{כדי שאפשר יהיה להמשיך לגלוש באינטרנט, צריך לבקש ממנהל המערכת להסיר את האפליקציות האלה.}}</translation>
-<translation id="5995884201513800557">כדי לשמור את טביעת האצבע יש להמשיך לגעת במפתח האבטחה.</translation>
 <translation id="5997337190805127100">מידע נוסף על גישה לאתרים</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> תוצאות בשביל '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">קולות מועדפים</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">גישה לפלט אודיו</translation>
 <translation id="6011193465932186973">טביעת אצבע</translation>
 <translation id="6011449291337289699">מחיקה של נתוני אתר</translation>
-<translation id="6013505829696424563">כדי לראות את פרטי הכניסה, יש להזין את קוד האימות של מפתח האבטחה שלך. אם לא ידוע לך מהו קוד האימות, יהיה עליך לאפס את מפתח האבטחה.</translation>
 <translation id="6015266928248016057">‏PUK לא חוקי. מספר הניסיונות החוזרים שנותרו: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">שנה</translation>
 <translation id="6016551720757758985">‏אשר פעולת Powerwash בעת חזרה לגרסה קודמת</translation>
@@ -3972,7 +3964,6 @@
 <translation id="6840155290835956714">שאל לפני שליחה</translation>
 <translation id="6840184929775541289">אינו רשות אישורים</translation>
 <translation id="6841186874966388268">שגיאות</translation>
-<translation id="6841187140911216178">כדי לראות את פרטי הכניסה, יש להכניס את מפתח האבטחה ולגעת בלחצן ההפעלה שלו</translation>
 <translation id="6843423766595476978">‏התכונה Ok Google מוכנה</translation>
 <translation id="6845038076637626672">פתח בגודל מרבי</translation>
 <translation id="6845325883481699275">‏עזרה בשיפור האבטחה של Chrome</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">המבורגר</translation>
 <translation id="883911313571074303">רשום הערה לתמונה</translation>
 <translation id="8845001906332463065">קבל עזרה</translation>
-<translation id="8845164297565101021">צריך להכניס את מפתח האבטחה ולגעת בו כדי ליצור או לשנות קוד אימות.</translation>
 <translation id="8846132060409673887">קריאת היצרן והדגם של המחשב הזה</translation>
 <translation id="8846141544112579928">מחפש מקלדת...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">‏הגברה בינלאומית של Netscape</translation>
 <translation id="8944099748578356325">אפשרות זו גורמת לפריקה מהירה יותר של הסוללה (כרגע %<ph name="BATTERY_PERCENTAGE" />)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> משתף חלון עם <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">הוספה, שינוי שם ומחיקה של טביעות אצבעות שנשמרו במכשיר</translation>
 <translation id="8946359700442089734">תכונות לניפוי באגים לא הופעלו באופן מלא במכשיר <ph name="IDS_SHORT_PRODUCT_NAME" /> זה.</translation>
 <translation id="894871326938397531">לצאת ממצב גלישה בסתר?</translation>
 <translation id="8948939328578167195">האתר <ph name="WEBSITE" /> מבקש לקבל את פרטי היצרן והדגם של מפתח האבטחה שלך</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb
index 31e1c49..82311026 100644
--- a/chrome/app/resources/generated_resources_ja.xtb
+++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">プラグイン VM を実行する権限が必要です</translation>
 <translation id="1900305421498694955">Google Play のアプリで外部ストレージ デバイスのファイルの読み取りと書き込みを行うには、ファイル システムへのフルアクセスが必要となる場合があります。デバイス上に作成されたファイルやフォルダは、外部ドライブを使用する全員に表示されます。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">すべて選択(&amp;A)</translation>
-<translation id="1901984611178952431">ログインデータの管理</translation>
 <translation id="1902576642799138955">有効期間</translation>
 <translation id="1905375423839394163">Chromebook デバイス名</translation>
 <translation id="1905710495812624430">最大試行回数を超えました。</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">今後はソフトウェアとセキュリティに関するアップデートが自動的にインストールされます。</translation>
 <translation id="1979280758666859181">古いバージョンの <ph name="PRODUCT_NAME" /> のチャンネルに変更しようとしています。このチャンネル変更は、チャンネルのバージョンとお使いのデバイスにインストールされているバージョンとが一致したときに適用されます。</translation>
 <translation id="197989455406964291">KDC でサポートされていない暗号化タイプです</translation>
-<translation id="1981544341227357861">デバイスからセキュリティ キーを取り外してもう一度挿入し、タップします。</translation>
 <translation id="1982354452682152483">説明がありません。</translation>
 <translation id="1987317783729300807">アカウント</translation>
 <translation id="1989112275319619282">閲覧</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome にログイン</translation>
 <translation id="3285322247471302225">新しいタブ(&amp;T)</translation>
 <translation id="328571385944182268">パスワードを保存しますか?</translation>
-<translation id="3286737518123001369">セキュリティ キーに保存されているログインデータを確認したうえで削除できます</translation>
 <translation id="3288047731229977326">デベロッパー モードで実行される拡張機能はパソコンにダメージを与える恐れがあります。デベロッパーでない場合は、安全のため、デベロッパー モードで実行されているこれらの拡張機能を無効にしてください。</translation>
 <translation id="3289856944988573801">アップデートの有無を確認するには、イーサネットまたは Wi-Fi を使用してください。</translation>
 <translation id="3293644607209440645">このページを送信</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA 署名(SHA-512)</translation>
 <translation id="3544879808695557954">ユーザー名(任意)</translation>
 <translation id="354602065659584722">有害なソフトウェアが削除されました</translation>
-<translation id="3547220315004609203">タブバーを切り替えます</translation>
 <translation id="3547954654003013442">プロキシ設定</translation>
 <translation id="3550915441744863158">Chrome は自動更新されるため、常に最新版をご利用になれます</translation>
 <translation id="3551320343578183772">タブを閉じる</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">マイクを使用できます</translation>
 <translation id="4031527940632463547">センサーがブロックされました</translation>
 <translation id="4033471457476425443">新しいフォルダを追加</translation>
-<translation id="403456802563765809">フィンガープリントを管理するには、セキュリティ キーを差し込んでタッチしてください。</translation>
 <translation id="4034824040120875894">プリンタ</translation>
 <translation id="4035758313003622889">タスク マネージャ(&amp;T)</translation>
 <translation id="4036778507053569103">サーバーからダウンロードされたポリシーが無効です。</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> を使用するには、最初に<ph name="LINK_START" />ネットワークのログイン ページにアクセス<ph name="LINK_END" />する必要がある場合があります。その場合は、数秒でログイン ページが自動的に開きます。ログイン ページが自動的に開かない場合、そのネットワークは使用できません。</translation>
 <translation id="5637476008227280525">モバイルデータの有効化</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome ウェブストア<ph name="END_LINK" />で拡張機能やテーマを探すことができます</translation>
-<translation id="5639152092474119692">フィンガープリントを管理するには、セキュリティ キーの PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットする必要があります。</translation>
 <translation id="5639549361331209298">このページを再読み込みするには、詳細オプションが表示されるまで押し続けます</translation>
 <translation id="5640133431808313291">セキュリティ キーの管理</translation>
 <translation id="5642508497713047">CRL の署名者</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">URL の形式が無効です。サポートされている形式は \\server\share と smb://server/share です。</translation>
 <translation id="5990386583461751448">翻訳済み</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{今後もウェブ ブラウジングを続けられるように、管理者にこのアプリケーションの削除を依頼してください。}other{今後もウェブ ブラウジングを続けられるように、管理者にこれらのアプリケーションの削除を依頼してください。}}</translation>
-<translation id="5995884201513800557">フィンガープリントを保存するには、セキュリティ キーをタッチし続けてください。</translation>
 <translation id="5997337190805127100">サイトアクセスの詳細</translation>
 <translation id="6000758707621254961">「<ph name="SEARCH_TEXT" />」に対する <ph name="RESULT_COUNT" /> 件の検索結果</translation>
 <translation id="6002458620803359783">使用する音声</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">ビデオ入力にアクセスしています</translation>
 <translation id="6011193465932186973">指紋</translation>
 <translation id="6011449291337289699">サイトデータの削除</translation>
-<translation id="6013505829696424563">ログインデータを表示するには、セキュリティ キーの PIN を入力してください。PIN がわからない場合は、セキュリティ キーをリセットする必要があります。</translation>
 <translation id="6015266928248016057">無効な PUK です。入力できるのはあと <ph name="RETRIES" /> 回です。</translation>
 <translation id="6015796118275082299">年</translation>
 <translation id="6016551720757758985">Powerwash を実行して以前のバージョンに戻すことを確認</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">送信する前に確認する</translation>
 <translation id="6840184929775541289">認証局ではない</translation>
 <translation id="6841186874966388268">エラー</translation>
-<translation id="6841187140911216178">ログインデータを表示するには、セキュリティ キーを挿入してタップしてください。</translation>
 <translation id="6843423766595476978">OK Google の設定が完了しました</translation>
 <translation id="6845038076637626672">最大化して開く</translation>
 <translation id="6845325883481699275">Chrome のセキュリティ改善に協力する</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">ハンバーガー</translation>
 <translation id="883911313571074303">画像に注釈を付ける</translation>
 <translation id="8845001906332463065">ヘルプ</translation>
-<translation id="8845164297565101021">セキュリティ キーを挿入してタップし、PIN を作成するか変更してください</translation>
 <translation id="8846132060409673887">このパソコンのメーカーと機種の情報を取得する</translation>
 <translation id="8846141544112579928">キーボードを探しています...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">バッテリー消費が速くなります(現在 <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> が <ph name="TAB_NAME" /> のウィンドウを共有しています。</translation>
-<translation id="8945764661949477243">デバイスに保存されているフィンガープリントを追加、名称変更、削除します</translation>
 <translation id="8946359700442089734">この <ph name="IDS_SHORT_PRODUCT_NAME" /> デバイスでデバッグ機能が完全に有効になっていませんでした。</translation>
 <translation id="894871326938397531">シークレット モードを終了しますか?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> から、セキュリティ キーのメーカーとモデルの読み取り許可がリクエストされています</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb
index e339a2b..96ebc98 100644
--- a/chrome/app/resources/generated_resources_kn.xtb
+++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -641,7 +641,6 @@
 <translation id="1899826437968063457">ಪ್ಲಗ್‌ಇನ್ VM ಅನ್ನು ರನ್ ಮಾಡಲು ಅನುಮತಿಯ ಅಗತ್ಯವಿದೆ</translation>
 <translation id="1900305421498694955">Google Play ನಿಂದ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡುವ ಆ್ಯಪ್‌ಗಳು, ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ ಸಾಧನಗಳಲ್ಲಿರುವ ಫೈಲ್‌ಗಳನ್ನು ರೀಡ್ ಮಾಡಲು ಮತ್ತು ರೈಟ್ ಮಾಡಲು ಪೂರ್ಣ ಫೈಲ್ ಸಿಸ್ಟಂ ಅನ್ನು ಪ್ರವೇಶಿಸಬೇಕಾಗಬಹುದು. ಸಾಧನದಲ್ಲಿ ರಚಿಸಲಾದ ಫೈಲ್‌ಗಳು ಮತ್ತು ಫೋಲ್ಡರ್‌ಗಳು ಬಾಹ್ಯ ಡ್ರೈವ್ ಬಳಸುವ ಯಾರಿಗಾದರೂ ಗೋಚರಿಸುತ್ತವೆ. <ph name="LINK_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;ಎಲ್ಲ ಆಯ್ಕೆ ಮಾಡಿ</translation>
-<translation id="1901984611178952431">ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="1902576642799138955">ವಾಯಿದೆ ಅವಧಿ</translation>
 <translation id="1905375423839394163">Chromebook ಸಾಧನದ ಹೆಸರು</translation>
 <translation id="1905710495812624430">ಅನುಮತಿಸಲಾದ ಗರಿಷ್ಟ ಪ್ರಯತ್ನಗಳು ಮೀರಿವೆ.</translation>
@@ -692,7 +691,6 @@
 <translation id="1978006917103730774">ನಂತರದ ಸಾಫ್ಟವೇರ್ ಮತ್ತು ಭದ್ರತೆ ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation>
 <translation id="1979280758666859181">ನೀವು <ph name="PRODUCT_NAME" /> ದ ಹಳೆಯ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಚಾನಲ್‌ಗೆ ಬದಲಾಯಿಸುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ರಸ್ತುತ ಸ್ಥಾಪನೆ ಮಾಡಲಾಗಿರುವ ಆವೃತ್ತಿಗೆ ಹೊಂದಾಣಿಕೆಯಾದಾಗ ಮಾತ್ರ ಚಾನಲ್ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation>
 <translation id="197989455406964291">KDC ಯು ಎನ್‌ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರವನ್ನು ಬೆಂಬಲಿಸುತ್ತಿಲ್ಲ</translation>
-<translation id="1981544341227357861">ನಿಮ್ಮ ಸಾಧನದಿಂದ ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ತೆಗೆಯಿರಿ, ನಂತರ ಅದನ್ನು ಪುನಃ ಸೇರಿಸಿ ಮತ್ತು ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="1982354452682152483">ಯಾವುದೇ ವಿವರಣೆಯು ಲಭ್ಯವಿಲ್ಲ.</translation>
 <translation id="1987317783729300807">ಖಾತೆಗಳು</translation>
 <translation id="1989112275319619282">ಬ್ರೌಸ್ ಮಾಡಿ</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಿ</translation>
 <translation id="3285322247471302225">ಹೊಸ &amp;ಟ್ಯಾಬ್</translation>
 <translation id="328571385944182268">ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್‌ಗಳನ್ನು ಉಳಿಸುವುದೇ?</translation>
-<translation id="3286737518123001369">ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಿರುವ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅಳಿಸಿ</translation>
 <translation id="3288047731229977326">ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಚಾಲನೆಯಾಗುವ ವಿಸ್ತರಣೆಗಳು ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್‌ಗೆ ಹಾನಿಮಾಡಬಹುದು. ನೀವು ಡೆವಲಪರ್ ಆಗಿರದಿದ್ದರೇ, ಸುರಕ್ಷಿತವಾಗಿರಲು ಡೆವಲಪರ್ ಮೋಡ್‌ನಲ್ಲಿ ಈ ವಿಸ್ತರಣೆಗಳ ಚಾಲನೆಯನ್ನು ನೀವು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಬೇಕು.</translation>
 <translation id="3289856944988573801">ನವೀಕರಣಗಳಿಗಾಗಿ ಪರಿಶೀಲಿಸಲು, ದಯವಿಟ್ಟು Ethernet ಅಥವಾ ವೈ-ಫೈ ಬಳಸಿ.</translation>
 <translation id="3293644607209440645">ಈ ಪುಟವನ್ನು ಕಳುಹಿಸಿ</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">SHA-512 ಜೊತೆಗೆ X9.62 ECDSA ಸಹಿ</translation>
 <translation id="3544879808695557954">ಬಳಕೆದಾರರ ಹೆಸರು (ಐಚ್ಛಿಕ)</translation>
 <translation id="354602065659584722">ಹಾನಿಕಾರಕ ಸಾಫ್ಟ್‌ವೇರ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation>
-<translation id="3547220315004609203">ಟ್ಯಾಬ್ ಸ್ಟ್ರೈಪ್ ಟಾಗಲ್ ಮಾಡಿ</translation>
 <translation id="3547954654003013442">ಪ್ರಾಕ್ಸಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳು</translation>
 <translation id="3550915441744863158">Chrome ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಣಗೊಳ್ಳುತ್ತದೆ. ಹೀಗಾಗಿ ನೀವು ಯಾವಾಗಲೂ ತಾಜಾ ಆವೃತ್ತಿಯನ್ನು ಹೊಂದಿರುತ್ತೀರಿ.</translation>
 <translation id="3551320343578183772">ಟ್ಯಾಬ್ ಅನ್ನು ಮುಚ್ಚಿ</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">ಮೈಕ್ರೊಫೋನ್ ಅನುಮತಿಸಲಾಗಿದೆ</translation>
 <translation id="4031527940632463547">ಸೆನ್ಸರ್‌ಗಳನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ</translation>
 <translation id="4033471457476425443">ಹೊಸ ಫೋಲ್ಡರ್ ಸೇರಿಸಿ</translation>
-<translation id="403456802563765809">ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌‍ಗಳನ್ನು ನಿರ್ವಹಿಸುವುದಕ್ಕಾಗಿ, ನಿಮ್ಮ ಭದ್ರತಾ ಕೀಯನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="4034824040120875894">ಪ್ರಿಂಟರ್</translation>
 <translation id="4035758313003622889">&amp;ಕಾರ್ಯ ನಿರ್ವಾಹಕ</translation>
 <translation id="4036778507053569103">ಸರ್ವರ್‌ನಿಂದ ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾದ ಕಾರ್ಯನೀತಿಯು ಅಮಾನ್ಯವಾಗಿದೆ.</translation>
@@ -3169,7 +3164,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ಅನ್ನು ಬಳಸಲು ನೀವು ಮೊದಲಿಗೆ ಕೆಲವು ಸೆಕೆಂಡುಗಳಲ್ಲಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆರೆಯುವಂತಹ, <ph name="LINK_START" />ನೆಟ್‌ವರ್ಕ್‌ನ ಸೈನ್-ಇನ್ ಪುಟವನ್ನು ಭೇಟಿ ಮಾಡಬೇಕಾಗಿದೆ<ph name="LINK_END" />. ಇದು ಸಂಭವಿಸದಿದ್ದರೆ, ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಬಳಸಲು ಸಾಧ್ಯವಿಲ್ಲ.</translation>
 <translation id="5637476008227280525">ಮೊಬೈಲ್ ಡೇಟಾವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ</translation>
 <translation id="5638309510554459422">ವಿಸ್ತರಣೆಗಳು ಮತ್ತು ಥೀಮ್‌ಗಳನ್ನು <ph name="BEGIN_LINK" />Chrome ವೆಬ್ ಸ್ಟೋರ್‌ನಲ್ಲಿ<ph name="END_LINK" /> ಹುಡುಕಿ</translation>
-<translation id="5639152092474119692">ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌‍ಗಳನ್ನು ನಿರ್ವಹಿಸಲು, ನಿಮ್ಮ ಭದ್ರತಾ ಕೀಯ ಪಿನ್ ನಮೂದಿಸಿ. ನಿಮಗೆ ಪಿನ್ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ಭದ್ರತಾ ಕೀಯನ್ನು ಮರುಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="5639549361331209298">ಈ ಪುಟವನ್ನು ಮರು ಲೋಡ್ ಮಾಡಿ, ಇನ್ನಷ್ಟು ಆಯ್ಕೆಗಳನ್ನು ವೀಕ್ಷಿಸಲು ಒತ್ತಿಹಿಡಿಯಿರಿ</translation>
 <translation id="5640133431808313291">ಸುರಕ್ಷತಾ ಕೀಗಳನ್ನು ನಿರ್ವಹಿಸಿ</translation>
 <translation id="5642508497713047">CRL ಸೈನರ್</translation>
@@ -3412,7 +3406,6 @@
 <translation id="5985458664595100876">ಅಮಾನ್ಯ URL ಫಾರ್ಮ್ಯಾಟ್. \\server\share ಮತ್ತು smb://server/share ಫಾರ್ಮ್ಯಾಟ್‍ಗಳಿಗೆ ಬೆಂಬಲವಿದೆ.</translation>
 <translation id="5990386583461751448">ಅನುವಾದಿತ</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ತೆಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}one{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}other{ನೀವು ವೆಬ್ ಬ್ರೌಸ್ ಮಾಡುವುದನ್ನು ಮುಂದುವರಿಸಲು ಸಾಧ್ಯವಾಗುವಂತೆ, ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತಗೆದುಹಾಕಲು ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಗೆ ಹೇಳಿ.}}</translation>
-<translation id="5995884201513800557">ನಿಮ್ಮ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಉಳಿಸಲು ಭದ್ರತಾ ಕೀಯನ್ನು ಸ್ಪರ್ಶಿಸುತ್ತಾ ಇರಿ.</translation>
 <translation id="5997337190805127100">ಸೈಟ್ ಪ್ರವೇಶದ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' ಗಾಗಿ <ph name="RESULT_COUNT" /> ಫಲಿತಾಂಶಗಳು</translation>
 <translation id="6002458620803359783">ಆದ್ಯತೆಯ ಧ್ವನಿಗಳು</translation>
@@ -3422,7 +3415,6 @@
 <translation id="6010869025736512584">ವೀಡಿಯೊ ಇನ್‌ಪುಟ್ ಪ್ರವೇಶಿಸಲಾಗುತ್ತಿದೆ</translation>
 <translation id="6011193465932186973">ಫಿಂಗರ್‌ಪ್ರಿಂಟ್</translation>
 <translation id="6011449291337289699">ಸೈಟ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ</translation>
-<translation id="6013505829696424563">ಸೈನ್-ಇನ್ ಡೇಟಾ ವೀಕ್ಷಿಸಲು, ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀ ಪಿನ್ ಅನ್ನು ನಮೂದಿಸಿ. ನಿಮಗೆ ಪಿನ್ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ಮರುಹೊಂದಿಸಬೇಕಾಗುತ್ತದೆ.</translation>
 <translation id="6015266928248016057">ಅಮಾನ್ಯ PUK. ಬಾಕಿಯಿರುವ ಮರುಪ್ರಯತ್ನಗಳು: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">ವರ್ಷ</translation>
 <translation id="6016551720757758985">ಹಿಂದಿನ ಆವೃತ್ತಿಗೆ ಹಿಂತಿರುಗುವ ಮೂಲಕ ಪವರ್‌ವಾಶ್‌ ಅನ್ನು ದೃಢೀಕರಿಸಿ</translation>
@@ -3977,7 +3969,6 @@
 <translation id="6840155290835956714">ಕಳುಹಿಸುವ ಮೊದಲು ಕೇಳಿ</translation>
 <translation id="6840184929775541289">ಪ್ರಮಾಣೀಕರಣ ಪ್ರಾಧಿಕಾರವಲ್ಲ</translation>
 <translation id="6841186874966388268">ದೋಷಗಳು</translation>
-<translation id="6841187140911216178">ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ವೀಕ್ಷಿಸಲು, ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಸ್ಪರ್ಶಿಸಿ</translation>
 <translation id="6843423766595476978">ಓಕೆ Google ಸಿದ್ಧವಾಗಿದೆ</translation>
 <translation id="6845038076637626672">ಗರಿಷ್ಠಗೊಳಿಸುವಿಕೆಯಲ್ಲಿ ತೆರೆಯಿರಿ</translation>
 <translation id="6845325883481699275">Chrome ಭದ್ರತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡಿ</translation>
@@ -5382,7 +5373,6 @@
 <translation id="8838770651474809439">ಹ್ಯಾಂಬರ್ಗರ್</translation>
 <translation id="883911313571074303">ಚಿತ್ರವನ್ನು ಟಿಪ್ಪಣಿ ಮಾಡಿ</translation>
 <translation id="8845001906332463065">ಸಹಾಯ ಪಡೆಯಿರಿ</translation>
-<translation id="8845164297565101021">ಪಿನ್ ಅನ್ನು ರಚಿಸಲು ಅಥವಾ ಬದಲಾಯಿಸಲು, ನಿಮ್ಮ ಸುರಕ್ಷತಾ ಕೀಯನ್ನು ಸೇರಿಸಿ ಮತ್ತು ಅದನ್ನು ಸ್ಪರ್ಶಿಸಿ.</translation>
 <translation id="8846132060409673887">ಈ ಕಂಪ್ಯೂಟರ್‌ನ ತಯಾರಕರು ಮತ್ತು ಮಾದರಿಯನ್ನು ಓದಿ</translation>
 <translation id="8846141544112579928">ಕೀಬೋರ್ಡ್‍ಗಾಗಿ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5455,7 +5445,6 @@
 <translation id="894360074127026135">Netscape ಅಂತರರಾಷ್ಟ್ರೀಯ ಸ್ಟೆಪ್-ಅಪ್</translation>
 <translation id="8944099748578356325">ಇನ್ನಷ್ಟು ತ್ವರಿತವಾಗಿ ಬ್ಯಾಟರಿ ಬಳಸಿ (ಪ್ರಸ್ತುತವಾಗಿ <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="TAB_NAME" /> ಜೊತೆಗೆ <ph name="APP_NAME" /> ವಿಂಡೋ ಹಂಚಿಕೊಳ್ಳುತ್ತಿದೆ.</translation>
-<translation id="8945764661949477243">ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಉಳಿಸಿರುವ ಫಿಂಗರ್‌ಪ್ರಿಂಟ್‌‍ಗಳನ್ನು ಸೇರಿಸಿ, ಮರುಹೆಸರಿಸಿ ಮತ್ತು ಅಳಿಸಿ</translation>
 <translation id="8946359700442089734">ದೋಷ ನಿವಾರಣೆಯಾಗುತ್ತಿರುವ ವೈಶಿಷ್ಟ್ಯಗಳು ಈ ಸಾಧನದಲ್ಲಿ <ph name="IDS_SHORT_PRODUCT_NAME" /> ಇನ್ನೂ ಸಂಫೂರ್ಣವಾಗಿ ಸಕ್ರಿಯವಾಗಿಲ್ಲ.</translation>
 <translation id="894871326938397531">ಅದೃಶ್ಯ ಮೋಡ್‌‌ ತೊರೆಯುವುದೇ?</translation>
 <translation id="8948939328578167195">ನಿಮ್ಮ ಭದ್ರತೆ ಕೀಯ ತಯಾರಕರ ಬ್ರಾಂಡ್ ಹೆಸರು ಮತ್ತು ಮಾದರಿಯನ್ನು <ph name="WEBSITE" /> ನೋಡಲು ಬಯಸುತ್ತದೆ</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb
index ebdd85a..d8f75e2 100644
--- a/chrome/app/resources/generated_resources_ko.xtb
+++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">플러그인 VM에 실행 권한 필요</translation>
 <translation id="1900305421498694955">Google Play의 앱이 외부 저장장치에 있는 파일을 읽고 쓰기 위해 전체 파일 시스템 액세스 권한을 요구할 수도 있습니다. 이 기기에서 생성된 파일 및 폴더는 외장 드라이브를 사용하는 모든 사람이 볼 수 있습니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">전체 선택(&amp;A)</translation>
-<translation id="1901984611178952431">로그인 데이터 관리</translation>
 <translation id="1902576642799138955">유효성 기간</translation>
 <translation id="1905375423839394163">Chromebook 기기 이름</translation>
 <translation id="1905710495812624430">허용되는 최대 시도 횟수를 초과했습니다.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">향후 소프트웨어 및 보안 업데이트가 자동 설치됩니다.</translation>
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />의 이전 버전으로 채널을 변경하려 합니다. 채널 버전이 현재 기기에 설치되어 있는 버전과 일치할 때 채널 변경이 적용됩니다.</translation>
 <translation id="197989455406964291">KDC가 암호화 유형을 지원하지 않습니다.</translation>
-<translation id="1981544341227357861">기기에서 보안 키를 제거한 후 다시 삽입하고 터치하세요.</translation>
 <translation id="1982354452682152483">설명이 없습니다.</translation>
 <translation id="1987317783729300807">계정</translation>
 <translation id="1989112275319619282">찾아보기</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome에 로그인</translation>
 <translation id="3285322247471302225">새 탭(&amp;T)</translation>
 <translation id="328571385944182268">비밀번호를 저장하시겠습니까?</translation>
-<translation id="3286737518123001369">보안 키에 저장된 로그인 데이터를 보고 삭제합니다.</translation>
 <translation id="3288047731229977326">개발자 모드로 실행 중인 확장 프로그램은 컴퓨터에 해를 줄 수 있습니다. 개발자가 아닌 경우 컴퓨터를 안전하게 사용하려면 개발자 모드로 실행 중인 확장 프로그램을 사용 중지해야 합니다.</translation>
 <translation id="3289856944988573801">업데이트를 확인하려면 이더넷 또는 Wi-Fi를 사용하세요.</translation>
 <translation id="3293644607209440645">이 페이지 전송</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">SHA-512를 포함한 X9.62 ECDSA 서명</translation>
 <translation id="3544879808695557954">사용자 이름(선택사항)</translation>
 <translation id="354602065659584722">유해한 소프트웨어가 삭제됨</translation>
-<translation id="3547220315004609203">탭 표시줄 전환</translation>
 <translation id="3547954654003013442">프록시 설정</translation>
 <translation id="3550915441744863158">Chrome은 자동으로 업데이트되므로 항상 최신 버전을 사용할 수 있습니다.</translation>
 <translation id="3551320343578183772">탭 닫기</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">마이크 허용됨</translation>
 <translation id="4031527940632463547">센서 차단됨</translation>
 <translation id="4033471457476425443">새 폴더 추가</translation>
-<translation id="403456802563765809">지문을 관리하려면 보안 키를 삽입한 다음 터치하세요.</translation>
 <translation id="4034824040120875894">프린터</translation>
 <translation id="4035758313003622889">작업 관리자(&amp;T)</translation>
 <translation id="4036778507053569103">서버에서 다운로드한 정책이 올바르지 않습니다.</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" />을(를) 사용하려면 먼저 몇 초 뒤에 자동으로 열리는 <ph name="LINK_START" />네트워크 로그인 페이지로 이동<ph name="LINK_END" />해야 합니다. 네트워크 로그인 페이지가 자동으로 열리지 않으면 네트워크를 사용할 수 없습니다.</translation>
 <translation id="5637476008227280525">모바일 데이터 사용</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome 웹 스토어<ph name="END_LINK" />에서 확장 프로그램과 테마를 찾아보세요</translation>
-<translation id="5639152092474119692">지문을 관리하려면 보안 키의 PIN을 입력하세요. PIN을 모른다면 보안 키를 재설정해야 합니다.</translation>
 <translation id="5639549361331209298">옵션을 더 보려면 이 페이지를 새로고친 다음 누르기</translation>
 <translation id="5640133431808313291">보안 키 관리</translation>
 <translation id="5642508497713047">CRL 서명자</translation>
@@ -3408,7 +3402,6 @@
 <translation id="5985458664595100876">URL 형식이 잘못되었습니다. \\server\share 및 smb://server/share 형식이 지원됩니다.</translation>
 <translation id="5990386583461751448">번역됨</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}other{계속 웹을 탐색하려면 관리자에게 이 애플리케이션을 삭제해 달라고 요청하세요.}}</translation>
-<translation id="5995884201513800557">지문을 저장하려면 보안 키를 계속해서 터치하세요.</translation>
 <translation id="5997337190805127100">사이트 액세스 권한 자세히 알아보기</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' 검색결과 <ph name="RESULT_COUNT" />개</translation>
 <translation id="6002458620803359783">선호하는 음성</translation>
@@ -3418,7 +3411,6 @@
 <translation id="6010869025736512584">비디오 입력 장치에 액세스 중</translation>
 <translation id="6011193465932186973">지문</translation>
 <translation id="6011449291337289699">사이트 데이터 삭제</translation>
-<translation id="6013505829696424563">로그인 데이터를 보려면 보안 키의 PIN을 입력하세요. PIN을 모른다면 보안 키를 재설정해야 합니다.</translation>
 <translation id="6015266928248016057">잘못된 PUK입니다. 남은 재시도 횟수는 <ph name="RETRIES" />회입니다.</translation>
 <translation id="6015796118275082299">연도</translation>
 <translation id="6016551720757758985">이전 버전으로 돌아가서 Powerwash 확인</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">보내기 전에 확인</translation>
 <translation id="6840184929775541289">인증 기관 아님</translation>
 <translation id="6841186874966388268">오류</translation>
-<translation id="6841187140911216178">보안 키를 삽입 및 터치하여 로그인 데이터 보기</translation>
 <translation id="6843423766595476978">Ok Google 설정 완료</translation>
 <translation id="6845038076637626672">최대화 상태로 열기</translation>
 <translation id="6845325883481699275">Chrome 보안 강화 개선에 참여하기</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">햄버거</translation>
 <translation id="883911313571074303">이미지에 주석 달기</translation>
 <translation id="8845001906332463065">도움말 보기</translation>
-<translation id="8845164297565101021">보안 키를 삽입하고 터치하여 PIN을 만들거나 변경하세요.</translation>
 <translation id="8846132060409673887">이 컴퓨터의 제조업체 및 모델을 읽습니다.</translation>
 <translation id="8846141544112579928">키보드 검색 중...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">배터리 소모가 빨라짐(현재 <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" />에서 <ph name="TAB_NAME" />와(과) 창을 공유 중입니다.</translation>
-<translation id="8945764661949477243">기기에 저장된 지문 추가, 이름 변경 및 삭제</translation>
 <translation id="8946359700442089734">이 <ph name="IDS_SHORT_PRODUCT_NAME" /> 기기에서 디버깅 기능의 사용 설정을 완료하지 못했습니다.</translation>
 <translation id="894871326938397531">시크릿 모드를 종료할까요?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" />에서 보안 키 제조업체와 모델을 확인하려고 합니다.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb
index fea6ee8..5f72f93 100644
--- a/chrome/app/resources/generated_resources_lt.xtb
+++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Papildinio virtualiam įrenginiui reikalingas leidimas norint paleisti</translation>
 <translation id="1900305421498694955">Programose iš „Google Play“ gali būti prašoma leidimo pasiekti visas failų sistemos funkcijas, kad būtų galima nuskaityti ir įrašyti failus išoriniuose saugyklos įrenginiuose. Įrenginyje sukurtus failus ir aplankus gali matyti visi, naudojantys išorinį diską. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Pasirinkti &amp;viską</translation>
-<translation id="1901984611178952431">Tvarkyti prisijungimo duomenis</translation>
 <translation id="1902576642799138955">Galiojimo laikas</translation>
 <translation id="1905375423839394163">„Chromebook“ įrenginio pavadinimas</translation>
 <translation id="1905710495812624430">Viršytas didžiausias bandymų skaičius.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Būsimi programinės įrangos ir saugos naujiniai bus įdiegti automatiškai.</translation>
 <translation id="1979280758666859181">Keičiate į kanalą, kuriame naudojama senesnė „<ph name="PRODUCT_NAME" />“ versija. Kanalo pakeitimas bus pritaikytas, kai kanalo versija atitiks šiuo metu įrenginyje įdiegtą versiją.</translation>
 <translation id="197989455406964291">KDC nepalaiko šifruotės tipo</translation>
-<translation id="1981544341227357861">Išimkite saugos raktą iš įrenginio, įdėkite iš naujo ir palieskite jį.</translation>
 <translation id="1982354452682152483">Aprašo nėra.</translation>
 <translation id="1987317783729300807">Paskyros</translation>
 <translation id="1989112275319619282">Naršyti</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Prisijungti prie „Chrome“</translation>
 <translation id="3285322247471302225">Naujas &amp;skirtukas</translation>
 <translation id="328571385944182268">Išsaugoti slaptažodžius?</translation>
-<translation id="3286737518123001369">Peržiūrėkite ir ištrinkite prisijungimo duomenis, saugomus saugos rakte</translation>
 <translation id="3288047731229977326">Kūrėjo režimu veikiantys plėtiniai gali padaryti žalos kompiuteryje. Jei nesate kūrėjai, turėtumėte išjungti šių plėtinių veikimą kūrėjo režimu, kad išliktumėte saugūs.</translation>
 <translation id="3289856944988573801">Jei norite tikrinti, ar nėra naujinių, naudokite eternetą arba „Wi-Fi“.</translation>
 <translation id="3293644607209440645">Siųsti šį puslapį</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA parašas naudojant SHA-512</translation>
 <translation id="3544879808695557954">Naudotojo vardas (nebūtinas)</translation>
 <translation id="354602065659584722">Žalinga programinė įranga pašalinta</translation>
-<translation id="3547220315004609203">Perjungti skirtuko juostelę</translation>
 <translation id="3547954654003013442">Įgaliotojo serverio nustatymai</translation>
 <translation id="3550915441744863158">„Chrome“ atnaujinama automatiškai, todėl visada turite naujausią versiją</translation>
 <translation id="3551320343578183772">Uždaryti skirtuką</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofonas leidžiamas</translation>
 <translation id="4031527940632463547">Jutikliai užblokuoti</translation>
 <translation id="4033471457476425443">Pridėti naują aplanką</translation>
-<translation id="403456802563765809">Jei norite tvarkyti kontrolinius kodus, įdėkite ir palieskite saugos raktą.</translation>
 <translation id="4034824040120875894">Spausdintuvas</translation>
 <translation id="4035758313003622889">&amp;Užduočių tvarkytuvė</translation>
 <translation id="4036778507053569103">Iš serverio atsisiųsta politika yra netinkama.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">Kad naudotumėte „<ph name="NETWORK_ID" />“, pirmiausia reikės <ph name="LINK_START" />apsilankyti tinklo prisijungimo puslapyje<ph name="LINK_END" />, kuris bus automatiškai atidarytas po kelių sekundžių. Jei taip nenutiks, negalėsite naudoti tinklo.</translation>
 <translation id="5637476008227280525">Mobiliųjų duomenų įgalinimas</translation>
 <translation id="5638309510554459422">Raskite plėtinių ir temų <ph name="BEGIN_LINK" />„Chrome“ internetinėje parduotuvėje<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Jei norite tvarkyti kontrolinius kodus, įveskite saugos rakto PIN kodą. Jei PIN kodo nežinote, reikės iš naujo nustatyti saugos raktą.</translation>
 <translation id="5639549361331209298">Iš naujo įkelkite šį puslapį; palaukite, kol bus pateikta daugiau parinkčių</translation>
 <translation id="5640133431808313291">Saugos raktų valdymas</translation>
 <translation id="5642508497713047">CRL pasirašantis asmuo</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Netinkamas URL formatas. Palaikomi formatai yra „\\server\share“ ir „smb://server/share“.</translation>
 <translation id="5990386583461751448">Išversta</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="5995884201513800557">Pakartotinai lieskite saugos raktą, kad išsaugotumėte kontrolinį kodą.</translation>
 <translation id="5997337190805127100">Sužinokite daugiau apie prieigą prie svetainės</translation>
 <translation id="6000758707621254961">Rezultatų pagal užklausą „<ph name="SEARCH_TEXT" />“: <ph name="RESULT_COUNT" /></translation>
 <translation id="6002458620803359783">Pageidaujami balsai</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Pasiekiama vaizdo įrašų įvestis</translation>
 <translation id="6011193465932186973">Piršto antspaudas</translation>
 <translation id="6011449291337289699">Išvalyti svetainės duomenis</translation>
-<translation id="6013505829696424563">Jei norite peržiūrėti prisijungimo duomenis, įveskite saugos rakto PIN kodą. Jei PIN kodo nežinote, reikės iš naujo nustatyti saugos raktą.</translation>
 <translation id="6015266928248016057">Netinkamas PUK. Liko bandymų: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Metai</translation>
 <translation id="6016551720757758985">„Powerwash“ grąžinant ankstesnę versiją patvirtinimas</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Klausti prieš siunčiant</translation>
 <translation id="6840184929775541289">Nėra sertifikavimo institucija</translation>
 <translation id="6841186874966388268">Klaidos</translation>
-<translation id="6841187140911216178">Jei norite peržiūrėti prisijungimo duomenis, įdėkite ir palieskite saugos raktą</translation>
 <translation id="6843423766595476978">„Ok Google“ visiškai nustatyta</translation>
 <translation id="6845038076637626672">Atidaryti padidintą</translation>
 <translation id="6845325883481699275">Padėkite tobulinti „Chrome“ saugą</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Mėsainis</translation>
 <translation id="883911313571074303">Komentuoti vaizdą</translation>
 <translation id="8845001906332463065">Gauti pagalbos</translation>
-<translation id="8845164297565101021">Norėdami sukurti ar pakeisti PIN kodą įdėkite ir palieskite saugos raktą.</translation>
 <translation id="8846132060409673887">Skaityti šio kompiuterio gamintojo ir modelio informaciją</translation>
 <translation id="8846141544112579928">Ieškoma klaviatūros...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">„Netscape“ tarptautinė sąranka</translation>
 <translation id="8944099748578356325">Greičiau naudos akumuliatoriaus energiją (šiuo metu <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280">„<ph name="APP_NAME" />“ bendrina langą su <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Pridėkite, pervardykite ir ištrinkite įrenginyje išsaugotus kontrolinius kodus</translation>
 <translation id="8946359700442089734">Šiame „<ph name="IDS_SHORT_PRODUCT_NAME" />“ įrenginyje įgalintos ne visos derinimo funkcijos.</translation>
 <translation id="894871326938397531">Išjungti inkognito režimą?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> nori sužinoti jūsų saugos rakto tipą ir modelį</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb
index 57ef05d9..30bbbaea 100644
--- a/chrome/app/resources/generated_resources_lv.xtb
+++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Lai Plugin VM varētu darboties, ir nepieciešama atļauja</translation>
 <translation id="1900305421498694955">Dažreiz veikalā Google Play iegādātajām lietotnēm ir nepieciešama pilnīga piekļuve failu sistēmai, lai varētu lasīt un rakstīt failus ārējās krātuves ierīcēs. Ierīcē izveidotie faili un mapes ir redzamas visiem, kas lieto ārējo disku. <ph name="LINK_BEGIN" />Uzziniet vairāk<ph name="LINK_END" />.</translation>
 <translation id="1901303067676059328">Izvēlēties visus</translation>
-<translation id="1901984611178952431">Pārvaldīt pierakstīšanās datus</translation>
 <translation id="1902576642799138955">Derīguma laiks</translation>
 <translation id="1905375423839394163">Chromebook ierīces nosaukums</translation>
 <translation id="1905710495812624430">Ir pārsniegts maksimālais atļautais mēģinājumu skaits.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Turpmāki programmatūras un drošības atjauninājumi tiks instalēti automātiski.</translation>
 <translation id="1979280758666859181">Jūs gatavojaties pāriet uz kanālu ar vecāku <ph name="PRODUCT_NAME" /> versiju. Kanāla maiņa tiks piemērota, kad kanāla versija atbildīs versijai, kas pašreiz instalēta jūsu ierīcē.</translation>
 <translation id="197989455406964291">KDC neatbalsta šifrējuma veidu</translation>
-<translation id="1981544341227357861">Noņemiet drošības atslēgu no ierīces, pēc tam ievadiet to vēlreiz un pieskarieties tai.</translation>
 <translation id="1982354452682152483">Apraksts nav pieejams</translation>
 <translation id="1987317783729300807">Konti</translation>
 <translation id="1989112275319619282">Pārlūkot</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Pierakstīties pārlūkā Chrome</translation>
 <translation id="3285322247471302225">Jauna &amp;cilne</translation>
 <translation id="328571385944182268">Vai saglabāt jūsu paroles?</translation>
-<translation id="3286737518123001369">Skatīt un dzēst drošības atslēgā saglabātos pierakstīšanās datus</translation>
 <translation id="3288047731229977326">Paplašinājumi, kas darbojas izstrādātāja režīmā, var kaitēt jūsu datoram. Ja neesat izstrādātājs, drošības nolūkos atspējojiet šos paplašinājumus, kas darbojas izstrādātāja režīmā.</translation>
 <translation id="3289856944988573801">Lai pārbaudītu, vai ir pieejami atjauninājumi, lūdzu, izmantojiet tīklu Ethernet vai Wi-Fi.</translation>
 <translation id="3293644607209440645">Sūtīt šo lapu</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA paraksts ar SHA-512</translation>
 <translation id="3544879808695557954">Lietotājvārds (neobligāti)</translation>
 <translation id="354602065659584722">Kaitīgā programmatūra ir noņemta</translation>
-<translation id="3547220315004609203">Ieslēgt/izslēgt ciļņu joslu</translation>
 <translation id="3547954654003013442">Starpniekservera iestatījumi</translation>
 <translation id="3550915441744863158">Pārlūks Chrome tiek automātiski atjaunināts, tādēļ jums vienmēr būs pieejama visjaunākā versija.</translation>
 <translation id="3551320343578183772">Aizvērt cilni</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofona lietošana ir atļauta</translation>
 <translation id="4031527940632463547">Bloķēti sensori</translation>
 <translation id="4033471457476425443">Pievienot jaunu mapi</translation>
-<translation id="403456802563765809">Lai pārvaldītu savus pirkstu nospiedumus, ievietojiet drošības atslēgu un pieskarieties tai.</translation>
 <translation id="4034824040120875894">Printeris</translation>
 <translation id="4035758313003622889">Uzdevumu pārvaldnieks</translation>
 <translation id="4036778507053569103">No servera lejupielādētā politika nav derīga.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Lai izmantotu <ph name="NETWORK_ID" />, iespējams, jums vispirms būs <ph name="LINK_START" />jāapmeklē tīkla pierakstīšanās lapa<ph name="LINK_END" />, kas tiks automātiski atvērta pēc dažām sekundēm. Ja tā nenotiek, tīklu nevar izmantot.</translation>
 <translation id="5637476008227280525">Iespējot mobilos datus</translation>
 <translation id="5638309510554459422">Atrodiet paplašinājumus un motīvus <ph name="BEGIN_LINK" />Chrome interneta veikalā<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Lai pārvaldītu savus pirkstu nospiedumus, ievadiet drošības atslēgas PIN. Ja nezināt PIN, jums būs jāatiestata drošības atslēga.</translation>
 <translation id="5639549361331209298">Atkārtoti ielādējiet šo lapu; turiet, lai redzētu citas opcijas</translation>
 <translation id="5640133431808313291">Drošības atslēgu pārvaldīšana</translation>
 <translation id="5642508497713047">CRL parakstītājs</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Nederīgs vietrāža URL formāts. Atbalstītie formāti ir \\server\share un smb://server/share.</translation>
 <translation id="5990386583461751448">Tulkojums</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="5995884201513800557">Turpiniet pieskarties drošības atslēgai, lai saglabātu pirkstu nospiedumu.</translation>
 <translation id="5997337190805127100">Plašāka informācija par vietnes piekļuvi</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultāti vaicājumam “<ph name="SEARCH_TEXT" />”</translation>
 <translation id="6002458620803359783">Vēlamās balsis</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Notiek piekļūšana video ievadei</translation>
 <translation id="6011193465932186973">Pirksta nospiedums</translation>
 <translation id="6011449291337289699">Vietnes datu notīrīšana</translation>
-<translation id="6013505829696424563">Lai skatītu pierakstīšanās datus, ievadiet drošības atslēgas PIN. Ja nezināt PIN, būs jāatiestata drošības atslēga.</translation>
 <translation id="6015266928248016057">PUK nav derīgs. Atlikušo mēģinājumu skaits: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Gads</translation>
 <translation id="6016551720757758985">Apstiprinājums funkcijas Powerwash lietošanai, lai atjaunotu ierīcē iepriekšējo programmatūras versiju</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Jautāt pirms sūtīšanas</translation>
 <translation id="6840184929775541289">Nav sertifikāta izdevējiestāde</translation>
 <translation id="6841186874966388268">Kļūdas</translation>
-<translation id="6841187140911216178">Lai skatītu pierakstīšanās datus, ievadiet un pieskarieties savai drošības atslēgai</translation>
 <translation id="6843423766595476978">Komanda “Ok Google” tika iestatīta</translation>
 <translation id="6845038076637626672">Atvērt maksimizētā logā</translation>
 <translation id="6845325883481699275">Palīdzēt uzlabot Chrome drošību</translation>
@@ -5379,7 +5370,6 @@
 <translation id="8838770651474809439">Hamburgers</translation>
 <translation id="883911313571074303">Anotēt attēlu</translation>
 <translation id="8845001906332463065">Saņemt palīdzību</translation>
-<translation id="8845164297565101021">Ievadiet un pieskarieties savai drošības atslēgai, lai izveidotu vai mainītu PIN.</translation>
 <translation id="8846132060409673887">Nolasīt šī datora ražotāju un modeli</translation>
 <translation id="8846141544112579928">Notiek tastatūras meklēšana...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5452,7 +5442,6 @@
 <translation id="894360074127026135">Netscape starptautiskā palielināšana</translation>
 <translation id="8944099748578356325">tiks ātrāk iztērēta akumulatora jauda (pašlaik: <ph name="BATTERY_PERCENTAGE" />%);</translation>
 <translation id="8944964446326379280">Lietotne <ph name="APP_NAME" /> koplieto logu ar cilni <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Pievienojiet, pārdēvējiet un dzēsiet ierīcē saglabātos pirkstu nospiedumus.</translation>
 <translation id="8946359700442089734">Atkļūdošanas funkcijas šajā <ph name="IDS_SHORT_PRODUCT_NAME" /> ierīcē netika pilnībā iespējotas.</translation>
 <translation id="894871326938397531">Vai iziet no inkognito režīma?</translation>
 <translation id="8948939328578167195">Vietne <ph name="WEBSITE" /> vēlas skatīt jūsu drošības atslēgas ražotāju un modeli.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb
index 28b27fa..0a2a8911 100644
--- a/chrome/app/resources/generated_resources_ml.xtb
+++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">പ്ലഗിൻ VM-ന് റൺ ചെയ്യാൻ അനുമതി ആവശ്യമാണ്</translation>
 <translation id="1900305421498694955">ബാഹ്യ സ്‌റ്റോറേജ് ഉപകരണങ്ങളിലെ ഫയലുകൾ വായിക്കാനും എഴുതാനും Google Play-ൽ നിന്നുള്ള ആപ്പുകൾക്ക് പൂർണ്ണ ഫയൽ സിസ്‌റ്റം ആക്‌സസ് ആവശ്യമായേക്കാം. ഉപകരണത്തിൽ സൃഷ്‌ടിച്ച ഫയലുകളും ഫോൾഡറുകളും ബാഹ്യ ഡ്രൈവ് ഉപയോഗിക്കുന്ന ആർക്കും ദൃശ്യമാകും. <ph name="LINK_BEGIN" />കൂടുതലറിയുക<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">എല്ലാം &amp;തിരഞ്ഞെടുക്കൂ</translation>
-<translation id="1901984611178952431">സൈൻ ഇൻ ഡാറ്റ മാനേജ് ചെയ്യുക</translation>
 <translation id="1902576642799138955">സാധുതാ കാലാവധി</translation>
 <translation id="1905375423839394163">Chromebook ഉപകരണ നാമം</translation>
 <translation id="1905710495812624430">അനുവദനീയമായ പരമാവധി ശ്രമങ്ങൾ നടത്തിക്കഴിഞ്ഞു.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">ഭാവിയിൽ സോഫ്റ്റ്‌വെയറും സുരക്ഷാ അപ്ഡേറ്റുകളും സ്വയമേവ ഇൻസ്റ്റാൾ ചെയ്യും.</translation>
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-ന്റെ ഒരു പഴയ പതിപ്പ് ഉപയോഗിച്ച് നിങ്ങളൊരു ചാനലിലേക്ക് മാറുന്നു. ചാനൽ മാറ്റം നിലവിൽ നിങ്ങളുടെ ഉപകരണത്തിൽ ഇൻസ്റ്റാൾ ചെയ്‌ത പതിപ്പ്, ചാനൽ പതിപ്പുമായി പൊരുത്തപ്പെടുമ്പോൾ ബാധകമാക്കും.</translation>
 <translation id="197989455406964291">എൻക്രിപ്ഷൻ രീതി KDC പിന്തുണയ്ക്കുന്നില്ല</translation>
-<translation id="1981544341227357861">നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് സുരക്ഷാ കീ നീക്കം ചെയ്‌ത ശേഷം അത് വീണ്ടും പ്ലഗ് ഇൻ ചെയ്‌ത് സ്‌പർശിക്കുക.</translation>
 <translation id="1982354452682152483">വിവരണം ലഭ്യമല്ല.</translation>
 <translation id="1987317783729300807">അക്കൗണ്ടുകൾ</translation>
 <translation id="1989112275319619282">ബ്രൗസ് ചെയ്യുക</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Chrome-ലേക്ക് സൈൻ ഇൻ ചെയ്യുക</translation>
 <translation id="3285322247471302225">പുതിയ &amp;ടാബ്</translation>
 <translation id="328571385944182268">നിങ്ങളുടെ പാസ്‌വേഡുകൾ സംരക്ഷിക്കണോ?</translation>
-<translation id="3286737518123001369">നിങ്ങളുടെ സുരക്ഷാ കീയിൽ സംഭരിച്ചിരിക്കുന്ന സൈൻ ഇൻ ഡാറ്റ കാണുക, ഇല്ലാതാക്കുക</translation>
 <translation id="3288047731229977326">ഡെവലപ്പർ മോഡിൽ പ്രവർത്തിക്കുന്ന വിപുലീകരണങ്ങൾ നിങ്ങളുടെ കമ്പ്യൂട്ടർ കേടുവരുത്താനിടയുണ്ട്. നിങ്ങൾ ഒരു ഡെവലപ്പർ അല്ലെങ്കിൽ, സുരക്ഷിതമായി തുടരാൻ ഡെവലപ്പർ മോഡിൽ പ്രവർത്തിക്കുന്ന ഈ വിപുലീകരണങ്ങൾ പ്രവർത്തനരഹിതമാക്കണം.</translation>
 <translation id="3289856944988573801">അപ്‌ഡേറ്റുകൾക്കായി പരിശോധിക്കാൻ, ഇതർനെറ്റ് അല്ലെങ്കിൽ Wi-Fi ഉപയോഗിക്കുക.</translation>
 <translation id="3293644607209440645">ഈ പേജ് അയയ്ക്കുക</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">SHA-512 ഉള്ള X9.62 ECDSA സിഗ്നേച്ചർ</translation>
 <translation id="3544879808695557954">ഉപയോക്തൃനാമം (ഓപ്‌ഷണൽ)</translation>
 <translation id="354602065659584722">ദോഷകരമായ സോഫ്‌റ്റ്‌വയർ നീക്കംചെയ്‌തു</translation>
-<translation id="3547220315004609203">തുറന്ന് വച്ചിട്ടുള്ള ടാബുകൾ മാറ്റുക</translation>
 <translation id="3547954654003013442">പ്രോക്‌സി ക്രമീകരണം</translation>
 <translation id="3550915441744863158">സ്വയമേവ Chrome  അപ്‌ഡേറ്റ് ചെയ്യുന്നതിനാൽ നിങ്ങളുടേത് എപ്പോഴും പുതുമയുള്ള പതിപ്പായിരിക്കും.</translation>
 <translation id="3551320343578183772">ടാബ് അടയ്‌ക്കുക</translation>
@@ -2120,7 +2116,6 @@
 <translation id="4031179711345676612">മൈക്രോഫോൺ അനുവദനീയം</translation>
 <translation id="4031527940632463547">സെൻസറുകൾ ബ്ലോക്ക് ചെയ്‌തു</translation>
 <translation id="4033471457476425443">പുതിയ ഫോൾഡർ ചേർക്കുക</translation>
-<translation id="403456802563765809">നിങ്ങളുടെ ഫിംഗർപ്രിന്റുകൾ മാനേജ് ചെയ്യാൻ സുരക്ഷാ കീ ചേർത്ത്, അതിൽ സ്‌പർശിക്കുക.</translation>
 <translation id="4034824040120875894">പ്രിന്റർ</translation>
 <translation id="4035758313003622889">&amp;ടാസ്ക് മാനേജര്‍</translation>
 <translation id="4036778507053569103">സെർവറിൽ നിന്ന് ഡൗൺലോഡ് ചെയ്‌ത നയം അസാധുവാണ്.</translation>
@@ -3163,7 +3158,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ഉപയോഗിക്കുന്നതിന് നിങ്ങൾ ആദ്യം <ph name="LINK_START" />നെറ്റ്‌വർക്കിന്റെ സൈൻ-ഇൻ പേജ് സന്ദർശിക്കേണ്ടതുണ്ട്<ph name="LINK_END" />, അത് കുറച്ച് സെക്കൻഡിനുള്ളിൽ യാന്ത്രികമായി തുറക്കും. അങ്ങനെ സംഭവിച്ചില്ലെങ്കിൽ, നെറ്റ്‌വർക്ക് ഉപയോഗിക്കാനാകില്ല.</translation>
 <translation id="5637476008227280525">മൊബൈൽ ഡാറ്റ പ്രവർത്തനക്ഷമമാക്കുക</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome വെബ് സ്‌റ്റോറിൽ<ph name="END_LINK" /> വിപുലീകരണങ്ങളും തീമുകളും കണ്ടെത്തുക</translation>
-<translation id="5639152092474119692">നിങ്ങളുടെ ഫിംഗർപ്രിന്റുകൾ മാനേജ് ചെയ്യാൻ സുരക്ഷാ കീയുടെ PIN നൽകുക. നിങ്ങൾക്ക് പിൻ അറിയില്ലെങ്കിൽ, സുരക്ഷാ കീ റീസെറ്റ് ചെയ്യേണ്ടതുണ്ട്.</translation>
 <translation id="5639549361331209298">കൂടുതൽ ഓപ്‌ഷനുകൾ കാണുന്നതിന് ഈ പേജ് വീണ്ടും ലോഡുചെയ്‌ത് ഹോൾഡുചെയ്യുക</translation>
 <translation id="5640133431808313291">സുരക്ഷാ കീകൾ മാനേജ് ചെയ്യുക</translation>
 <translation id="5642508497713047">CRL സൈനര്‍‌</translation>
@@ -3407,7 +3401,6 @@
 <translation id="5985458664595100876">അസാധുവായ URL ഫോര്‍മാറ്റ്. \\server\share, smb://server/share എന്നിവയാണ്‌ പിന്തുണയ്‌ക്കുന്ന ഫോര്‍മാറ്റുകള്‍.</translation>
 <translation id="5990386583461751448">വിവർത്തനം ചെയ്‌തു</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ ആപ്പ് നീക്കം ചെയ്യാൻ അഡ്‌മിനോട് ആവശ്യപ്പെടുക.}other{നിങ്ങൾക്ക് വെബ് ബ്രൗസ് ചെയ്യുന്നത് തുടരാനാകുമെന്ന് ഉറപ്പാക്കാൻ, ഈ ആപ്പുകൾ നീക്കം ചെയ്യാൻ അഡ്‌മിനോട് ആവശ്യപ്പെടുക.}}</translation>
-<translation id="5995884201513800557">നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് സംരക്ഷിക്കാൻ സുരക്ഷാ കീ സ്‌പർശിക്കുന്നത് തുടരുക.</translation>
 <translation id="5997337190805127100">സൈറ്റ് ആക്‌സസിനെക്കുറിച്ച് കൂടുതലറിയുക</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' എന്നതിനായി <ph name="RESULT_COUNT" /> ഫലങ്ങള്‍</translation>
 <translation id="6002458620803359783">തിരഞ്ഞെടുത്ത ശബ്ദങ്ങൾ</translation>
@@ -3417,7 +3410,6 @@
 <translation id="6010869025736512584">വീഡിയോ ഇൻപുട്ട് ആക്‌സസ് ചെയ്യുന്നു</translation>
 <translation id="6011193465932186973">ഫിംഗർപ്രിന്റ്</translation>
 <translation id="6011449291337289699">സൈറ്റ് ഡാറ്റ മായ്‌ക്കുക</translation>
-<translation id="6013505829696424563">സൈൻ ഇൻ ഡാറ്റ കാണാൻ, നിങ്ങളുടെ സുരക്ഷാ കീയുടെ പിൻ നൽകുക. നിങ്ങൾക്ക് പിൻ അറിയില്ലെങ്കിൽ, സുരക്ഷാ കീ റീസെറ്റ് ചെയ്യേണ്ടതുണ്ട്.</translation>
 <translation id="6015266928248016057">PUK അസാധുവാണ്. ശേഷിക്കുന്ന ശ്രമങ്ങൾ: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">വര്‍ഷം</translation>
 <translation id="6016551720757758985">മുൻ പതിപ്പിലേക്ക് പോകുന്നതിലൂടെ പവർവാഷ് സ്ഥിരീകരിക്കുക</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">അയയ്‌ക്കുന്നതിന് മുമ്പ് ചോദിക്കുക</translation>
 <translation id="6840184929775541289">ഒരു സര്‍ട്ടിഫിക്കേഷന്‍ അതോറിറ്റി അല്ല</translation>
 <translation id="6841186874966388268">പിശകുകൾ</translation>
-<translation id="6841187140911216178">സൈൻ ഇൻ ഡാറ്റ കാണാൻ നിങ്ങളുടെ സുരക്ഷാ കീ ചേർത്ത്, അതിൽ സ്‌പർശിക്കുക</translation>
 <translation id="6843423766595476978">Ok Google സജ്ജമാണ്‌</translation>
 <translation id="6845038076637626672">ചെറുതാക്കി തുറക്കുക</translation>
 <translation id="6845325883481699275">Chrome സുരക്ഷ മെച്ചപ്പെടുത്താൻ സഹായിക്കുക</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">ഹാംബർഗർ</translation>
 <translation id="883911313571074303">ചിത്രം വ്യാഖ്യാനിക്കുക</translation>
 <translation id="8845001906332463065">സഹായം സ്വീകരിക്കുക</translation>
-<translation id="8845164297565101021">പിൻ സൃഷ്‌ടിക്കാനോ മാറ്റാനോ ആയി നിങ്ങളുടെ സുരക്ഷാ കീ പ്ലഗ് ഇൻ ചെയ്‌ത ശേഷം അതിൽ സ്‌പർശിക്കുക.</translation>
 <translation id="8846132060409673887">ഈ കമ്പ്യൂട്ടറിന്റെ നിർമ്മാതാവ്, മോഡൽ എന്നിവയെക്കുറിച്ചുള്ള വിവരം വായിക്കുക</translation>
 <translation id="8846141544112579928">കീബോർഡിനായി തിരയുന്നു...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">നെറ്റ്‌സ്‌കേപ്പ് അന്തര്‍‌ദ്ദേശീയ സ്റ്റെപ്പ്-അപ്പ്</translation>
 <translation id="8944099748578356325">കൂടുതൽ വേഗത്തിൽ ബാറ്ററി ഉപയോഗിക്കുക (നിലവിൽ <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" />, <ph name="TAB_NAME" /> എന്നതുമായി ഒരു വിൻഡോ പങ്കിടുന്നു.</translation>
-<translation id="8945764661949477243">നിങ്ങളുടെ ഉപകരണത്തിൽ ഫിംഗർപ്രിന്റ് ചേർക്കുക, പേരുമാറ്റുക, ഇല്ലാതാക്കുക</translation>
 <translation id="8946359700442089734">ഈ <ph name="IDS_SHORT_PRODUCT_NAME" /> ഉപകരണത്തിൽ ഡീബഗിംഗ് ഫീച്ചറുകൾ പൂർണ്ണമായി പ്രവർത്തനക്ഷമമാക്കിയിട്ടില്ല.</translation>
 <translation id="894871326938397531">അദൃശ്യ മോഡ് വിടണോ?</translation>
 <translation id="8948939328578167195">നിങ്ങളുടെ സുരക്ഷാ കീയുടെ നിർമ്മാതാവ്, മോഡൽ എന്നിവ <ph name="WEBSITE" />-ന് കാണണം</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb
index 83496a9..ea1d321 100644
--- a/chrome/app/resources/generated_resources_mr.xtb
+++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -11,7 +11,7 @@
 <translation id="1008557486741366299">सध्या नाही</translation>
 <translation id="1010498023906173788">हा टॅब सिरीअल पोर्टशी कनेक्ट केलेला आहे.</translation>
 <translation id="1010833424573920260">{NUM_PAGES,plural, =1{अप्रतिसादात्मक पृष्‍ठ}other{अप्रतिसादात्मक पृष्‍ठे}}</translation>
-<translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फायली सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन अॅक्सेस करण्यासाठी Google ड्राइव्ह अॅप उघडा.</translation>
+<translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फायली सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन ॲक्सेस करण्यासाठी Google ड्राइव्ह ॲप उघडा.</translation>
 <translation id="1012876632442809908">USB-C डिव्‍हाइस (पुढील बाजूचे पोर्ट)</translation>
 <translation id="1013707859758800957">या पेजवर चालण्यासाठी सॅन्डबॉक्स न केलेल्या प्लग-इनला अनुमती देण्यात आली.</translation>
 <translation id="1015318665228971643">फोल्डर नाव एडिट करा</translation>
@@ -25,10 +25,10 @@
 <translation id="1030706264415084469"><ph name="URL" /> ला तुमच्या डिव्हाइसवर मोठ्या प्रमाणावर डेटा कायमचा स्टोअर करायचा आहे</translation>
 <translation id="1031362278801463162">पूर्वावलोकन लोड करत आहे</translation>
 <translation id="103279545524624934">Android ॲप्स लाँच करण्यासाठी डिस्क स्थान मोकळे करा.</translation>
-<translation id="1033780634303702874">तुमची सीरिअल डिव्हाइस अॅक्सेस करा</translation>
+<translation id="1033780634303702874">तुमची सीरिअल डिव्हाइस ॲक्सेस करा</translation>
 <translation id="1034942643314881546">अ‍ॅप्स इलस्ट्रेशन तयार करण्यासाठी adb सुरू करणे</translation>
 <translation id="1036348656032585052">बंद करा</translation>
-<translation id="1036511912703768636">यापैकी कोणतीही USB डिव्हाइस अॅक्सेस करा</translation>
+<translation id="1036511912703768636">यापैकी कोणतीही USB डिव्हाइस ॲक्सेस करा</translation>
 <translation id="1036982837258183574">संपूर्ण स्क्रीनमधून बाहेर पडण्यासाठी |<ph name="ACCELERATOR" />| दाबा</translation>
 <translation id="1038168778161626396">केवळ एनसिफर</translation>
 <translation id="1039337018183941703">चुकीची किंवा दूषित फाइल</translation>
@@ -60,7 +60,7 @@
 <translation id="1072700771426194907">USB डिव्हाइस आढळले आहे</translation>
 <translation id="1076698951459398590">थीम सुरू करा</translation>
 <translation id="1076818208934827215">Microsoft Internet Explorer</translation>
-<translation id="1079766198702302550">कॅमेरा अॅक्सेस नेहमी ब्लॉक करा</translation>
+<translation id="1079766198702302550">कॅमेरा ॲक्सेस नेहमी ब्लॉक करा</translation>
 <translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> तुमच्या Chrome सेटिंग्ज त्यांच्या मूळ डीफॉल्टवर रिस्टोअर करू इच्छित आहे. हे तुमचे मुख्यपेज, नवीन टॅब पेज आणि शोध इंजिन रीसेट करेल, तुमच्या एक्स्टेंशनांना अक्षम करेल आणि सर्व टॅबना अनपिन करेल. ते कुकीज, सामग्री आणि साइट डेटासारखा इतर तात्पुरता आणि कॅश केलेला डेटा देखील साफ करेल.</translation>
 <translation id="1084824384139382525">लिंक पत्ता कॉपी करा</translation>
 <translation id="1085697365578766383">व्हर्च्युअल मशीन सुरू करताना एरर आली. कृपया पुन्हा प्रयत्न करा.</translation>
@@ -86,17 +86,17 @@
 <translation id="1118738876271697201">सिस्टमला डिव्हाइस मॉडेल किंवा सिरीअल नंबर निर्धारित करता आला नाही.</translation>
 <translation id="1119447706177454957">अंतर्गत एरर</translation>
 <translation id="1122198203221319518">&amp;साधने</translation>
-<translation id="1122242684574577509">अॉथेंटिकेशन अयशस्वी. तुम्ही वापरत असलेल्या (<ph name="NETWORK_ID" />) वाय-फाय नेटवर्कसाठी लॉग इन पेजला भेट देण्यासाठी वर क्लिक करा.</translation>
+<translation id="1122242684574577509">ऑथेंटिकेशन अयशस्वी. तुम्ही वापरत असलेल्या (<ph name="NETWORK_ID" />) वाय-फाय नेटवर्कसाठी लॉग इन पेजला भेट देण्यासाठी वर क्लिक करा.</translation>
 <translation id="1122960773616686544">बुकमार्क नाव</translation>
 <translation id="1124772482545689468">वापरकर्ता</translation>
 <translation id="1125550662859510761"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (नेटिव्ह) सारखे दिसते</translation>
-<translation id="1128109161498068552">MIDI डिव्हाइस अॅक्सेस करण्यासाठी सिस्टम विशेष मेसेज वापरण्याकरिता कोणत्याही साइटला परवानगी  देऊ नका</translation>
+<translation id="1128109161498068552">MIDI डिव्हाइस ॲक्सेस करण्यासाठी सिस्टम विशेष मेसेज वापरण्याकरिता कोणत्याही साइटला परवानगी  देऊ नका</translation>
 <translation id="1128128132059598906">EAP-TTLS</translation>
 <translation id="1128591060186966949">शोध इंजिन संपादित करा</translation>
 <translation id="1134009406053225289">गुप्त विंडोमध्ये उघडा</translation>
 <translation id="1136712381129578788">चुकीचा पिन बऱ्याच वेळा एंटर केल्यामुळे, सिक्युरिटी की लॉक झाली आहे. ती अनलॉक करण्यासाठी, ती काढून टाका आणि पुन्हा घाला.</translation>
 <translation id="1137673463384776352">लिंक <ph name="APP" /> मध्ये उघडा</translation>
-<translation id="1140351953533677694">तुमची ब्लूटूथ आणि सिरीअल डिव्हाइस अॅक्सेस करा</translation>
+<translation id="1140351953533677694">तुमची ब्लूटूथ आणि सिरीअल डिव्हाइस ॲक्सेस करा</translation>
 <translation id="114036956334641753">ऑडिओ आणि कॅप्शन</translation>
 <translation id="1140610710803014750">तुमच्या सर्व डिव्हाइसवर तुमचे बुकमार्क मिळवण्यासाठी, साइन इन करा आणि सिंक चालू करा.</translation>
 <translation id="1140746652461896221">तुम्ही भेट देत असलेल्या कोणत्याही पेजवरील आशय ब्लॉक करा</translation>
@@ -135,7 +135,7 @@
 <translation id="1186771945450942097">धोकादायक सॉफ्टवेअर काढून टाका</translation>
 <translation id="1187722533808055681">निष्क्रियता समाप्त करणे</translation>
 <translation id="1188807932851744811">लॉग अपलोड झाला नाही.</translation>
-<translation id="1189418886587279221">तुमचे डिव्हाइस वापरण्यास सुलभ करण्यासाठी अॅक्सेसिबिलिटी वैशिष्ट्ये सक्षम करा.</translation>
+<translation id="1189418886587279221">तुमचे डिव्हाइस वापरण्यास सुलभ करण्यासाठी ॲक्सेसिबिलिटी वैशिष्ट्ये सक्षम करा.</translation>
 <translation id="11901918071949011">{NUM_FILES,plural, =1{आपल्या संगणकावर संचयित केलेल्या फाईलवर प्रवेश करा}other{आपल्या संगणकावर संचयित केलेल्या # फायलींवर प्रवेश करा}}</translation>
 <translation id="1190660338026981543">एंटरप्राइझ व्यवस्थापनासाठी <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> ने तुमच्या  <ph name="DEVICE_TYPE" /> ची यशस्वीरीत्या नोंदणी केली आहे.</translation>
 <translation id="119092896208640858">तुमच्या Google खात्यामध्ये डेटा तसाच ठेवून फक्त या डिव्हाइसमधून ब्राउझ केलेला डेटा साफ करण्यासाठी, <ph name="BEGIN_LINK" />साइन आउट करा<ph name="END_LINK" />.</translation>
@@ -163,10 +163,10 @@
 <translation id="122082903575839559">सर्टिफिकेट स्वाक्षरी अल्गोरिदम</translation>
 <translation id="1221024147024329929">PKCS #1 RSA एंक्रिप्शनसह MD2</translation>
 <translation id="1221825588892235038">केवळ निवड</translation>
-<translation id="1223853788495130632">या सेटिंगसाठी तुमचा अॅडमिनिस्ट्रेटर विशिष्‍ट मूल्याची शिफारस करतो.</translation>
+<translation id="1223853788495130632">या सेटिंगसाठी तुमचा ॲडमिनिस्ट्रेटर विशिष्‍ट मूल्याची शिफारस करतो.</translation>
 <translation id="1224275271335624810">सर्वात जलद</translation>
 <translation id="1225177025209879837">विनंतीवर प्रक्रिया करत आहे...</translation>
-<translation id="1227507814927581609">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना अॉथेंटिकेशन अयशस्वी झाले.</translation>
+<translation id="1227507814927581609">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना ऑथेंटिकेशन अयशस्वी झाले.</translation>
 <translation id="1231733316453485619">सिंक सुरू करायचे का?</translation>
 <translation id="1232569758102978740">अशीर्षकांकित</translation>
 <translation id="1233497634904001272">विनंती पूर्ण करण्यासाठी तुमच्या सिक्युरिटी की ला पुन्हा स्पर्श करा.</translation>
@@ -175,7 +175,7 @@
 <translation id="1235458158152011030">ज्ञात नेटवर्क</translation>
 <translation id="123578888592755962">डिस्क भरली</translation>
 <translation id="1238191093934674082">VPN उघडा</translation>
-<translation id="1239594683407221485">Files अॅप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation>
+<translation id="1239594683407221485">Files ॲप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation>
 <translation id="124116460088058876">आणखी भाषा...</translation>
 <translation id="1241753985463165747">विनंती केल्यावर सध्याच्या वेबसाइटवर असलेला सर्व डेटा वाचू आणि बदलू शकता</translation>
 <translation id="1242633766021457174"><ph name="THIRD_PARTY_TOOL_NAME" /> आपल्या सेटिंग्ज रीसेट करू इच्छिते.</translation>
@@ -216,7 +216,7 @@
 <translation id="130491383855577612">Linux अ‍ॅप्स आणि फायली यशस्वीरीत्या बदलण्यात आल्या आहेत</translation>
 <translation id="1306606229401759371">सेटिंग्ज बदला</translation>
 <translation id="1307165550267142340">तुमचा पिन तयार केला गेला आहे</translation>
-<translation id="1307559529304613120">अरेरे! या डिव्हाइसाठी दीर्घ-मुदतीचे API अॅक्सेस टोकन स्टोअर करण्यात सिस्टम अयशस्वी झाली.</translation>
+<translation id="1307559529304613120">अरेरे! या डिव्हाइसाठी दीर्घ-मुदतीचे API ॲक्सेस टोकन स्टोअर करण्यात सिस्टम अयशस्वी झाली.</translation>
 <translation id="1313405956111467313">स्वयंचलित प्रॉक्सी कॉन्फिगरेशन</translation>
 <translation id="131364520783682672">Caps Lock</translation>
 <translation id="1313705515580255288">तुमचे बुकमार्क, इतिहास आणि इतर सेटिंग्ज आपल्या Google खात्यामध्ये संकालित केल्या जातील.</translation>
@@ -234,9 +234,9 @@
 <translation id="1330145147221172764">ऑन-स्क्रीन कीबोर्ड सुरू करा</translation>
 <translation id="1331977651797684645">ही व्यक्ती मी आहे.</translation>
 <translation id="133535873114485416">प्राधान्य असलेले इनपुट</translation>
-<translation id="1338802252451106843"><ph name="ORIGIN" /> ला हे अॅप्लिकेशन उघडायचे आहे.</translation>
+<translation id="1338802252451106843"><ph name="ORIGIN" /> ला हे ॲप्लिकेशन उघडायचे आहे.</translation>
 <translation id="1338950911836659113">हटवत आहे...</translation>
-<translation id="1340527397989195812">Files अॅप वापरून डिव्हाइसवरील मीडियाचा बॅकअप घ्या.</translation>
+<translation id="1340527397989195812">Files ॲप वापरून डिव्हाइसवरील मीडियाचा बॅकअप घ्या.</translation>
 <translation id="1341988552785875222">वर्तमान वॉलपेपर <ph name="APP_NAME" /> नी सेट केला आहे'. भिन्न वॉलपेपर निवडण्यापूर्वी तुम्हाला <ph name="APP_NAME" /> अनइंस्टॉल करण्‍याची आवश्‍यकता असेल.</translation>
 <translation id="1343865611738742294">USB डिव्हाइस ॲक्सेस करण्यासाठी Linux ला परवानगी द्या. USB डिव्हाइस काढून टाकल्यानंतर Linux ते लक्षात ठेवणार नाही.</translation>
 <translation id="1347256498747320987">अपडेट आणि अ‍ॅप्स इंस्टॉल करा. पुढे सुरू ठेवून, तुम्ही सहमती देता की, हे डिव्हाइस शक्यतो मोबाइल डेटा वापरून Google, तुमचा वाहक आणि तुमच्या डिव्हाइसच्या निर्मात्याकडून अपडेट आणि ॲप्ससुद्धा आपोआप डाउनलोड आणि इंस्टॉल करू शकतो. यापैकी काही ॲप्स ॲपमधील खरेदी करण्याचा पर्याय देऊ शकतात. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation>
@@ -277,9 +277,9 @@
 <translation id="1406500794671479665">सत्यापित करत आहे...</translation>
 <translation id="140723521119632973">सेल्युलर अ‍ॅक्टिव्हेशन</translation>
 <translation id="1407489512183974736">मध्यभागी क्रॉप केला</translation>
-<translation id="1408504635543854729">Files अॅपमध्ये डिव्हाइसचा आशय एक्सप्लोर करा. अॅडमिनिस्ट्रेटरने आशय प्रतिबंधित केला आहे आणि त्यात बदल केला जाऊ शकत नाही.</translation>
+<translation id="1408504635543854729">Files ॲपमध्ये डिव्हाइसचा आशय एक्सप्लोर करा. ॲडमिनिस्ट्रेटरने आशय प्रतिबंधित केला आहे आणि त्यात बदल केला जाऊ शकत नाही.</translation>
 <translation id="1410197035576869800">अ‍ॅप आयकन</translation>
-<translation id="1410616244180625362">तुमचा कॅमेरा अॅक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी  देणे सुरू ठेवा</translation>
+<translation id="1410616244180625362">तुमचा कॅमेरा ॲक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी  देणे सुरू ठेवा</translation>
 <translation id="1414648216875402825">तुम्ही <ph name="PRODUCT_NAME" /> च्या अस्थिर आवृत्तीवर अपडेट करत आहात ज्यात प्रगतीपथावर असलेली वैशिष्ट्ये आहेत. क्रॅश आणि अनपेक्षित दोष आढळतील. कृपया सावधगिरीसह पुढे जा.</translation>
 <translation id="1414866280542221544">या डिव्हाइसवर सुरू करा</translation>
 <translation id="1415708812149920388">क्लिपबोर्डचा रीड अ‍ॅक्सेस नाकारला</translation>
@@ -349,7 +349,7 @@
 <translation id="1507170440449692343">हे पृष्ठ आपल्या कॅमेर्‍यावर प्रवेश करण्यापासून अवरोधित केले गेले आहे.</translation>
 <translation id="1507246803636407672">&amp;टाकून द्या</translation>
 <translation id="1508491105858779599">डिव्हाइस अनलॉक करण्‍यासाठी तुमचे बोट फिंगरप्रिंट सेन्सरवर ठेवा.</translation>
-<translation id="1509281256533087115">USB द्वारे कोणतेही <ph name="DEVICE_NAME_AND_VENDOR" /> अॅक्सेस करा</translation>
+<translation id="1509281256533087115">USB द्वारे कोणतेही <ph name="DEVICE_NAME_AND_VENDOR" /> ॲक्सेस करा</translation>
 <translation id="150962533380566081">चुकीची PUK.</translation>
 <translation id="1510030919967934016">तुमचे स्थान ट्रॅक करण्यापासून या पृष्ठास अवरोधित केले गेले आहे.</translation>
 <translation id="1510055949674985293">या इमेजसाठी QR कोड तयार करा</translation>
@@ -357,8 +357,8 @@
 <translation id="1510581003097415337">या पेजसाठी QR कोड तयार करा</translation>
 <translation id="1510785804673676069">तुम्ही प्रॉक्सी सर्व्हर वापरत असल्यास, तुमची प्रॉक्सी सेटिंग्ज तपासा किंवा
         प्रॉक्सी सर्व्हर कार्य करत असल्याचे तपासण्यासाठी
-        तुमच्या नेटवर्क अॅडमिनिस्ट्रेटरशी संपर्क साधा. तुमचा प्रॉक्सी सर्व्हर वापरण्यावर तुमचा विश्वास नसल्यास,
-        तुमच्या <ph name="LINK_START" />प्रॉक्सी सेटिंग्ज<ph name="LINK_END" /> अॅडजस्ट करा.</translation>
+        तुमच्या नेटवर्क ॲडमिनिस्ट्रेटरशी संपर्क साधा. तुमचा प्रॉक्सी सर्व्हर वापरण्यावर तुमचा विश्वास नसल्यास,
+        तुमच्या <ph name="LINK_START" />प्रॉक्सी सेटिंग्ज<ph name="LINK_END" /> ॲडजस्ट करा.</translation>
 <translation id="1511997356770098059">ही सिक्युरिटी की कोणताही साइन इन डेटा स्टोअर करू शकत नाही</translation>
 <translation id="1512210426710821809">हे पहिल्यासारखे करण्‍याचा एकमेव मार्ग म्‍हणजे <ph name="IDS_SHORT_PRODUCT_OS_NAME" /> पुन्हा इन्‍स्‍टॉल करणे.</translation>
 <translation id="151501797353681931">Safari मधून इंपोर्ट केलेले</translation>
@@ -383,7 +383,7 @@
 <translation id="1545177026077493356">स्वयंचलित कियोस्क मोड</translation>
 <translation id="1545775234664667895">"<ph name="THEME_NAME" />" थीम इंस्टॉल केली</translation>
 <translation id="1546280085599573572">तुम्ही होम बटण क्लिक करता तेव्हा कोणते पेज दर्शविले जाते ते या एक्स्टेंशनने बदलले आहे.</translation>
-<translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> अॅक्सेस करू इच्छित आहे. हे तुमच्या फायलीमध्ये फेरफार करू किंवा त्या हटवू शकते.</translation>
+<translation id="1549788673239553762"><ph name="APP_NAME" /> <ph name="VOLUME_NAME" /> ॲक्सेस करू इच्छित आहे. हे तुमच्या फायलीमध्ये फेरफार करू किंवा त्या हटवू शकते.</translation>
 <translation id="1553538517812678578">अमर्यादित</translation>
 <translation id="1554390798506296774">सॅन्डबॉक्स न केलेल्या प्लगिन ना <ph name="HOST" /> वर नेहमी अनुमती द्या</translation>
 <translation id="1555130319947370107">निळा</translation>
@@ -403,7 +403,7 @@
 <translation id="1578558981922970608">सक्तीने बंद करा</translation>
 <translation id="1581962803218266616">फाइंडर मध्ये दर्शवा</translation>
 <translation id="1582955169539260415">[<ph name="FINGERPRINT_NAME" />] हटवा</translation>
-<translation id="1584990664401018068">तुम्ही वापरत असलेल्या वाय-फाय नेटवर्कला (<ph name="NETWORK_ID" />) अॉथेंटिकेशनची आवश्यकता असू शकते.</translation>
+<translation id="1584990664401018068">तुम्ही वापरत असलेल्या वाय-फाय नेटवर्कला (<ph name="NETWORK_ID" />) ऑथेंटिकेशनची आवश्यकता असू शकते.</translation>
 <translation id="1585717515139318619">तुमच्या कॉंप्युटरवरील दुसर्‍या प्रोग्रामने एक थीम जोडली जी Chrome ची काम करण्‍याची पद्धत कदाचित बदलू शकते.
 <ph name="EXTENSION_NAME" /></translation>
 <translation id="1587275751631642843">&amp;JavaScript कन्सोल</translation>
@@ -417,8 +417,8 @@
 <translation id="1593926297800505364">पेमेंट पद्धत सेव्ह करा</translation>
 <translation id="1595492813686795610">Linux अपग्रेड होत आहे</translation>
 <translation id="1596286373007273895">उपलब्ध आहे</translation>
-<translation id="1598233202702788831">तुमच्या अॅडमिनिस्ट्रेटरने अपडेट अक्षम केली आहेत.</translation>
-<translation id="1600857548979126453">पेज ‍डीबगर बॅकएंडला अॅक्सेस करा</translation>
+<translation id="1598233202702788831">तुमच्या ॲडमिनिस्ट्रेटरने अपडेट अक्षम केली आहेत.</translation>
+<translation id="1600857548979126453">पेज ‍डीबगर बॅकएंडला ॲक्सेस करा</translation>
 <translation id="1601560923496285236">लागू करा</translation>
 <translation id="1603914832182249871">(गुप्त)</translation>
 <translation id="1604432177629086300">प्रिंट करू शकलो नाही. प्रिंटर तपासा आणि पुन्हा प्रयत्न करा.</translation>
@@ -491,7 +491,7 @@
 <translation id="1698650002254827833">या ॲप्सची सूची लोड होऊ शकत नाही. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="1701062906490865540">या व्यक्तीस काढून टाका</translation>
 <translation id="1703331064825191675">तुमच्या पासवर्डची कधीही चिंता करू नका</translation>
-<translation id="1706586824377653884">तुमच्या अॅडमिनिस्ट्रेटरने जोडले</translation>
+<translation id="1706586824377653884">तुमच्या ॲडमिनिस्ट्रेटरने जोडले</translation>
 <translation id="1706625117072057435">झूम स्तर</translation>
 <translation id="1708338024780164500">(निष्क्रिय)</translation>
 <translation id="1708713382908678956"><ph name="NAME_PH" /> (आयडी: <ph name="ID_PH" />)</translation>
@@ -502,7 +502,7 @@
 <translation id="1717218214683051432">मोशन सेन्सर</translation>
 <translation id="1718835860248848330">शेवटच्या तासामधील</translation>
 <translation id="1719312230114180055">टिप: मजबूत पासवर्ड किंवा पिनपेक्षा तुमचे फिंगरप्रिंट कमी सुरक्षित असू शकतात.</translation>
-<translation id="1720318856472900922">TLS WWW सर्व्हर अॉथेंटिकेशन</translation>
+<translation id="1720318856472900922">TLS WWW सर्व्हर ऑथेंटिकेशन</translation>
 <translation id="1721312023322545264">या साइटला भेट देण्यासाठी तुमच्या <ph name="NAME" /> कडील परवानगी आवश्यक आहे</translation>
 <translation id="1721937473331968728">तुम्ही <ph name="CLOUD_PRINT_NAME" /> वर तुमच्या कॉंप्युटरशी कनेक्ट केलेले क्लासिक प्रिंटर जोडू शकता.</translation>
 <translation id="1722460139690167654"><ph name="ENROLLMENT_DOMAIN" />ने तुमचे <ph name="BEGIN_LINK" /><ph name="DEVICE_TYPE" /> व्यवस्थापित केले आहे <ph name="END_LINK" /></translation>
@@ -544,7 +544,7 @@
 <translation id="1766957085594317166">तुमच्या Google खात्यामध्ये पासवर्ड सुरक्षितपणे सेव्ह करा आणि तुम्हाला ते पुन्हा कधीही टाइप करावे लागणार नाहीत</translation>
 <translation id="1768278914020124551">अरेरे! लॉगऑन सर्व्हरशी संपर्क साधताना समस्या आली. कृपया तुमचे नेटवर्क कनेक्शन आणि डोमेन नेम तपासा, नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="1769104665586091481">लिंक नवीन &amp;विंडोमध्ये उघडा</translation>
-<translation id="1773212559869067373">अॉथेंटिकेशन प्रमाणपत्र स्थानिक पातळीवर नाकारले</translation>
+<translation id="1773212559869067373">ऑथेंटिकेशन प्रमाणपत्र स्थानिक पातळीवर नाकारले</translation>
 <translation id="177336675152937177">होस्ट केलेला अ‍ॅप डेटा</translation>
 <translation id="1776712937009046120">वापरकर्ता जोडा</translation>
 <translation id="1776883657531386793"><ph name="OID" />: <ph name="INFO" /></translation>
@@ -554,7 +554,7 @@
 <translation id="1781502536226964113">नवे टॅब पेज उघडा</translation>
 <translation id="1781771911845953849">खाती आणि सिंक</translation>
 <translation id="1782196717298160133">तुमचा फोन शोधणे</translation>
-<translation id="1784707308176068866">सहयोगी मूळ अॅप्लिकेशनने विनंती केल्यास बॅकग्राउंडमध्ये रन करा</translation>
+<translation id="1784707308176068866">सहयोगी मूळ ॲप्लिकेशनने विनंती केल्यास बॅकग्राउंडमध्ये रन करा</translation>
 <translation id="1784849162047402014">डिव्हाइसवर डिस्क स्‍थान कमी आहे</translation>
 <translation id="1787350673646245458">वापरकर्ता इमेज</translation>
 <translation id="1790194216133135334"><ph name="DEVICE_NAME" /> ला लिंक पाठवा</translation>
@@ -621,8 +621,8 @@
 <translation id="1871615898038944731">तुमचे <ph name="DEVICE_TYPE" /> अद्ययावत आहे</translation>
 <translation id="1875312262568496299">सुरुवात करा</translation>
 <translation id="1875387611427697908">हे केवळ <ph name="CHROME_WEB_STORE" /> वरून जोडले जाऊ शकते</translation>
-<translation id="1877520246462554164">अॉथेंटिकेशन टोकन मिळवण्यात अयशस्वी. कृपया साइन आउट करा आणि नंतर पुन्हा प्रयत्न करण्यासाठी साइन इन करा.</translation>
-<translation id="1877860345998737529">स्विच अॅक्शन असाइनमेंट</translation>
+<translation id="1877520246462554164">ऑथेंटिकेशन टोकन मिळवण्यात अयशस्वी. कृपया साइन आउट करा आणि नंतर पुन्हा प्रयत्न करण्यासाठी साइन इन करा.</translation>
+<translation id="1877860345998737529">स्विच ॲक्शन असाइनमेंट</translation>
 <translation id="1878541307036593717">परवानग्या सेट करा</translation>
 <translation id="1879000426787380528">हे म्हणून साइन करा</translation>
 <translation id="1880905663253319515">"<ph name="CERTIFICATE_NAME" />" सर्टिफिकेट हटवायचे?</translation>
@@ -639,7 +639,6 @@
 <translation id="1899826437968063457">रन करण्यासाठी प्लग-इन VM ला परवानगीची आवश्यकता आहे</translation>
 <translation id="1900305421498694955">Google Play वरील ॲप्सना कदाचित बाह्य स्टोरेज डिव्हाइसवरील फाइल रीड आणि राइट करण्यासाठी संपूर्ण फाइल सिस्टम ॲक्सेसची आवश्यकता असू शकते. डिव्हाइसवर तयार केलेल्या फाइल आणि फोल्डर हे बाह्य ड्राइव्ह वापरणार्‍या कोणालाही दिसतील. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;सर्व निवडा</translation>
-<translation id="1901984611178952431">साइन इन डेटा व्यवस्थापित करा</translation>
 <translation id="1902576642799138955">वैधता कालावधी</translation>
 <translation id="1905375423839394163">Chromebook डिव्हाइसचे नाव</translation>
 <translation id="1905710495812624430">कमाल अनुमती असलेले प्रयत्न ओलांडले.</translation>
@@ -657,15 +656,15 @@
 <translation id="1924559387127953748"><ph name="IDS_SHORT_PRODUCT_NAME" /> मध्ये Google स्‍मार्ट मिळवा</translation>
 <translation id="192494336144674234">यासह उघडा</translation>
 <translation id="1925021887439448749">कस्टम वेब पत्ता एंटर करा</translation>
-<translation id="1926339101652878330">या सेटिंग्ज संस्थेच्या धोरणानुसार नियंत्रित केल्या जातात. कृपया अधिक माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="1926339101652878330">या सेटिंग्ज संस्थेच्या धोरणानुसार नियंत्रित केल्या जातात. कृपया अधिक माहितीसाठी तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="1927632033341042996">फिंगर <ph name="NEW_FINGER_NUMBER" /></translation>
 <translation id="1928202201223835302">जुना पिन प्रविष्‍ट करा</translation>
 <translation id="1929546189971853037">आपल्या सर्व साइन इन केलेल्या डिव्हाइसेसवर तुमचा ब्राउझिंग इतिहास वाचा</translation>
 <translation id="1931152874660185993">कोणतेही घटक इंस्टॉल केले नाहीत.</translation>
-<translation id="1932026958134051332">अॅक्सेस पर्याय स्विच करा</translation>
+<translation id="1932026958134051332">ॲक्सेस पर्याय स्विच करा</translation>
 <translation id="1932098463447129402">पूर्वी नाही</translation>
 <translation id="1933809209549026293">कृपया एक माउस किंवा एक कीबोर्ड कनेक्ट करा. तुम्ही ब्लूटूथ डिव्हाइस वापरत असल्यास, पेअरिंगसाठी ते तयार असल्याचे खात्री करा.</translation>
-<translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> असलेल्या या डिव्हाइस सह <ph name="ARCHITECTURE_CONTAINER" /> प्रकारचे आर्किटेक्चर कंटेनर इंपोर्ट करू शकत नाही. तुम्ही हा कंटेनर वेगळ्या डिव्हाइसमध्ये रिस्टोअर करण्याचा प्रयत्न करू शकता किंवा तुम्ही या कंटेनर प्रतिमेच्या फायली Files अॅपमध्ये उघडून अॅक्सेस करू शकता.</translation>
+<translation id="1937774647013465102"><ph name="ARCHITECTURE_DEVICE" /> असलेल्या या डिव्हाइस सह <ph name="ARCHITECTURE_CONTAINER" /> प्रकारचे आर्किटेक्चर कंटेनर इंपोर्ट करू शकत नाही. तुम्ही हा कंटेनर वेगळ्या डिव्हाइसमध्ये रिस्टोअर करण्याचा प्रयत्न करू शकता किंवा तुम्ही या कंटेनर प्रतिमेच्या फायली Files ॲपमध्ये उघडून ॲक्सेस करू शकता.</translation>
 <translation id="1938351510777341717">बाह्य कमांड</translation>
 <translation id="1940546824932169984">कनेक्‍ट केलेले डिव्हाइस</translation>
 <translation id="1944921356641260203">अपडेट आढळले</translation>
@@ -690,7 +689,6 @@
 <translation id="1978006917103730774">भविष्यातील सॉफ्टवेअर आणि सुरक्षितता अपडेट आपोआप इंस्टॉल होतील.</translation>
 <translation id="1979280758666859181">तुम्ही <ph name="PRODUCT_NAME" /> च्या जुन्या आवृत्तीसह एका चॅनेलमध्ये बदलत आहात. आपल्या डिव्हाइसवर सध्या इंस्टॉल आवृत्तीशी चॅनेलची आवृत्ती जुळते तेव्हा चॅनेल बदल लागू होईल.</translation>
 <translation id="197989455406964291">KDC एंक्रिप्शन प्रकाराला सपोर्ट करत नाही</translation>
-<translation id="1981544341227357861">तुमच्या डिव्हाइसवरून तुमची सिक्युरिटी की काढा, त्यानंतर ती पुन्हा घाला आणि स्पर्श करा.</translation>
 <translation id="1982354452682152483">वर्णन उपलब्ध नाही.</translation>
 <translation id="1987317783729300807">खाती</translation>
 <translation id="1989112275319619282">ब्राउझ करा</translation>
@@ -723,15 +721,15 @@
 
 अन्यथा, आता साइन आउट करा जेणेकरून या खात्यामध्ये केलेले बदल या डिव्हाइसवर दिसतील.
 
-तुमच्या डिव्हाइसवर Family Link अॅप इंस्टॉल करून तुम्ही या खात्याची सेटिंग्ज व्यवस्थापित करू शकता.  आम्ही तुम्हाला ईमेलवर सूचना पाठवल्या आहेत.</translation>
-<translation id="2040460856718599782">अरेरे! तुम्हाला अॉथेंटिकेट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेंशियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation>
+तुमच्या डिव्हाइसवर Family Link ॲप इंस्टॉल करून तुम्ही या खात्याची सेटिंग्ज व्यवस्थापित करू शकता.  आम्ही तुम्हाला ईमेलवर सूचना पाठवल्या आहेत.</translation>
+<translation id="2040460856718599782">अरेरे! तुम्हाला ऑथेंटिकेट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेंशियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="2043818754674261542">फोनला हे <ph name="DEVICE_TYPE" /> अनलॉक करण्यासाठी अंतर ठेवण्याची आवश्यकता आहे</translation>
 <translation id="204497730941176055">Microsoft Certificate Template Name</translation>
 <translation id="2045117674524495717">कीबोर्ड शॉर्टकट मदतकर्ता</translation>
 <translation id="2045969484888636535">कुकी अवरोधित करणे सुरू ठेवा</translation>
 <translation id="204622017488417136">तुमचे डिव्हाइस Chrome च्या मागील इंस्टॉल केलेल्या आवृत्तीवर परत जाईल. सर्व वापरकर्ता खाती आणि स्थानिक डेटा काढला जाईल. हे पूर्ववत केले जाऊ शकत नाही.</translation>
 <translation id="2046702855113914483">रामेन</translation>
-<translation id="2048182445208425546">तुमच्या नेटवर्क रहदारी अॅक्सेस करा</translation>
+<translation id="2048182445208425546">तुमच्या नेटवर्क रहदारी ॲक्सेस करा</translation>
 <translation id="2048653237708779538">कृती उपलब्ध नाही</translation>
 <translation id="2050339315714019657">पोर्ट्रेट</translation>
 <translation id="2053312383184521053">निष्क्रिय स्थिती डेटा</translation>
@@ -764,7 +762,7 @@
 <translation id="2111670510994270194">उजवीकडील नवीन टॅब</translation>
 <translation id="21133533946938348">टॅब पिन करा</translation>
 <translation id="2113479184312716848">&amp;फाइल उघडा...</translation>
-<translation id="2113921862428609753">अधिकृतता माहिती अॅक्सेस</translation>
+<translation id="2113921862428609753">अधिकृतता माहिती ॲक्सेस</translation>
 <translation id="2114326799768592691">रीलोड आणि फ्रेम करा</translation>
 <translation id="2114896190328250491"><ph name="NAME" /> चे फोटो</translation>
 <translation id="2115103655317273167">फोन वर पाठवा</translation>
@@ -774,7 +772,7 @@
 <translation id="2122305276694332719">लपलेल्या नेटवर्कवर आपोआप कनेक्ट केल्याने इतरांना तुमचे डिव्हाइस आणि काही नेटवर्क सेटिंग्ज पाहण्याची अनुमती मिळते आणि याची शिफारस केली जात नाही.</translation>
 <translation id="2123766928840368256">वेगळी फाइल निवडा</translation>
 <translation id="2124930039827422115">{1,plural, =1{एका वापरकर्त्याने <ph name="AVERAGE_RATING" /> रेट केले.}other{# वापरकर्त्यांनी <ph name="AVERAGE_RATING" /> रेट केले.}}</translation>
-<translation id="2126167708562367080">तुमच्या अॅडमिनिस्ट्रेटरने सिंक अक्षम केले आहे.</translation>
+<translation id="2126167708562367080">तुमच्या ॲडमिनिस्ट्रेटरने सिंक अक्षम केले आहे.</translation>
 <translation id="2127372758936585790">निम्न-उर्जेचे चार्जर</translation>
 <translation id="212862741129535676">फ्रिक्वेन्सी स्थिती कब्जा टक्केवारी</translation>
 <translation id="212876957201860463">तुमचे मोबाइल डिव्हाइस सेट करण्यास तयार करत आहे…</translation>
@@ -887,7 +885,7 @@
 <translation id="225614027745146050">सुस्वागतम</translation>
 <translation id="225692081236532131">सक्रियन स्थिती</translation>
 <translation id="2258855745387252834">शेअर करण्यासाठी, Files ॲपमध्ये फोल्डरवर राइट क्लिक करा, त्यानंतर "प्लग-इन VM सह शेअर करा" निवडा.</translation>
-<translation id="2261323523305321874">तुमच्या अॅडमिनिस्ट्रेटरने संपूर्ण सिस्टममध्ये बदल केले आहेत, ज्‍यामुळे काही जुन्या प्रोफाइल बंद झाल्या आहेत.</translation>
+<translation id="2261323523305321874">तुमच्या ॲडमिनिस्ट्रेटरने संपूर्ण सिस्टममध्ये बदल केले आहेत, ज्‍यामुळे काही जुन्या प्रोफाइल बंद झाल्या आहेत.</translation>
 <translation id="2262332168014443534">लाइट मोड आता HTTPS सह सर्व पेजवर ब्राउझिंग अधिक जलद करतो.</translation>
 <translation id="2262477216570151239">पुनरावृत्तीपूर्वी विलंब</translation>
 <translation id="2263189956353037928">साइन आउट करून परत साइन इन करा</translation>
@@ -905,7 +903,7 @@
 <translation id="2282146716419988068">GPU प्रक्रिया</translation>
 <translation id="2282155092769082568">स्वयंकॉन्फिगरेशन URL:</translation>
 <translation id="2288181517385084064">व्हिडिओ रेकॉर्डरवर स्विच करा</translation>
-<translation id="2288735659267887385">अॅक्सेसिबिलिटी सेटिंग्ज</translation>
+<translation id="2288735659267887385">ॲक्सेसिबिलिटी सेटिंग्ज</translation>
 <translation id="2289270750774289114">साइटला केव्हा जवळपासचे ब्लूटूथ डिव्हाइस शोधायचे आहे हे विचारा (शिफारस केलेले)</translation>
 <translation id="2292848386125228270">कृपया <ph name="PRODUCT_NAME" /> चा सामान्य वापरकर्ता म्हणून सुरू करा. तुम्हाला विकासासाठी मूळ म्हणून चालविणे आवश्यक असल्यास, सॅन्डबॉक्स ध्वजांकन नाही -- सह पुन्हा चालवा.</translation>
 <translation id="2294358108254308676">तुम्ही <ph name="PRODUCT_NAME" /> स्‍थापित करू इच्छिता?</translation>
@@ -956,7 +954,7 @@
 <translation id="2359345697448000899">टूल मेनूमध्‍ये विस्तारांवर क्लिक करुन तुमचे विस्तार व्यवस्थापित करा.</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
 <translation id="236117173274098341">ऑप्टिमाइझ करा</translation>
-<translation id="236141728043665931">मायक्रोफोन अॅक्सेस नेहमी ब्लॉक करा</translation>
+<translation id="236141728043665931">मायक्रोफोन ॲक्सेस नेहमी ब्लॉक करा</translation>
 <translation id="2365507699358342471">या पेजवर क्लिपबोर्डवर कॉपी केलेला मजकूर आणि इमेज दिसू शकतात.</translation>
 <translation id="2366260648632264559">सिस्टम मजकूर या भाषेत दाखवा</translation>
 <translation id="2367972762794486313">अ‍ॅप्स दर्शवा</translation>
@@ -1046,7 +1044,7 @@
 <translation id="2495777824269688114">आणखी वैशिष्ट्ये शोधा किंवा उत्तरे मिळवा. मदतीसाठी “?” निवडा.</translation>
 <translation id="2496180316473517155">ब्राउझिंग इतिहास</translation>
 <translation id="2497229222757901769">माउस गती</translation>
-<translation id="2497852260688568942">तुमच्या अॅडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
+<translation id="2497852260688568942">तुमच्या ॲडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
 <translation id="2498539833203011245">लहान करा</translation>
 <translation id="2498765460639677199">विशाल</translation>
 <translation id="2499747912851752301">पासवर्ड एक्सपोर्ट करत आहे...</translation>
@@ -1054,7 +1052,7 @@
 <translation id="2501173422421700905">राखून ठेवलेले सर्टिफिकेट</translation>
 <translation id="2501278716633472235">परत जा</translation>
 <translation id="2501797496290880632">शॉर्टकट टाइप करा</translation>
-<translation id="2502441965851148920">स्वयंचलित अपडेट सक्षम केली आहेत. तुमच्या अॅडमिनिस्ट्रेटरने मॅन्युअल अपडेट अक्षम केली आहेत.</translation>
+<translation id="2502441965851148920">स्वयंचलित अपडेट सक्षम केली आहेत. तुमच्या ॲडमिनिस्ट्रेटरने मॅन्युअल अपडेट अक्षम केली आहेत.</translation>
 <translation id="2505127913256479918">हे पर्यवेक्षित खाते लवकरच काढले जाईल</translation>
 <translation id="2505324914378689427">{SCREEN_INDEX,plural, =1{स्क्रीन #}other{स्क्रीन #}}</translation>
 <translation id="2505402373176859469"><ph name="TOTAL_SIZE" /> पैकी <ph name="RECEIVED_AMOUNT" /></translation>
@@ -1085,7 +1083,7 @@
 <translation id="2540449034743108469">एक्स्टेंशन अ‍ॅक्टिव्हिटी ऐकण्यासाठी "सुरू करा" दाबा</translation>
 <translation id="2541002089857695151">फुलस्क्रीन कास्टिंग ऑप्टिमाइझ करायचे?</translation>
 <translation id="2541706104884128042">झोपण्याची नवीन वेळ सेट केली</translation>
-<translation id="2544853746127077729">अॉथेंटिकेशन प्रमाणपत्र नेटवर्कद्वारे नाकारले</translation>
+<translation id="2544853746127077729">ऑथेंटिकेशन प्रमाणपत्र नेटवर्कद्वारे नाकारले</translation>
 <translation id="2546283357679194313">कुकीज आणि साइट डेटा</translation>
 <translation id="2549985041256363841">रेकॉर्डिंग सुरू करा</translation>
 <translation id="2550212893339833758">स्वॅप केलेली मेमरी</translation>
@@ -1096,7 +1094,7 @@
 <translation id="2554553592469060349">निवडलेली फाईल खूप मोठी आहे (कमाल आकार: 3mb).</translation>
 <translation id="2557378327156922632">या फाइलमध्ये संवेदनशील आशयाचा समावेश आहे.</translation>
 <translation id="255747371423522804">सद्य गटामध्ये जोडा</translation>
-<translation id="2558896001721082624">सिस्टम मेनूमध्ये नेहमी अॅक्सेसिबिलिटी पर्याय दाखवा</translation>
+<translation id="2558896001721082624">सिस्टम मेनूमध्ये नेहमी ॲक्सेसिबिलिटी पर्याय दाखवा</translation>
 <translation id="2562743677925229011"><ph name="SHORT_PRODUCT_NAME" /> मध्‍ये साइन इन नाही</translation>
 <translation id="2564520396658920462">AppleScript द्वारे JavaScript एक्झिक्युट करणे बंद केले आहे. ते सुरू करण्यासाठी, मेनू बारवरून, पहा &gt; डेव्हलपर &gt; Apple इव्‍हेंटवरून JavaScript चालवू द्या यावर जा. अधिक माहितीसाठी: https://support.google.com/chrome/?p=applescript</translation>
 <translation id="2564653188463346023">वर्धित केलेले स्पेल चेक</translation>
@@ -1104,8 +1102,8 @@
 <translation id="2568774940984945469">इंफोबार कंटेनर</translation>
 <translation id="257088987046510401">थीम</translation>
 <translation id="2571655996835834626">कुकी, JavaScript, प्लग-इन, भौगोलिक स्थान, मायक्रोफोन, कॅमेरा इ. सारख्या वैशिष्ट्यांवरील वेबसाइटचे अ‍ॅक्सेस नियंत्रित करणार्‍या तुमच्या सेटिंग्ज बदला.</translation>
-<translation id="2572032849266859634"><ph name="VOLUME_NAME" /> साठी रीड-ओन्ली अॅक्सेस मंजूर केला गेला आहे.</translation>
-<translation id="2575247648642144396">एक्स्टेंशन वर्तमान पेजवर अॅक्शन करु शकत असेल तेव्हा हे आयकन दृश्यमान होईल. आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation>
+<translation id="2572032849266859634"><ph name="VOLUME_NAME" /> साठी रीड-ओन्ली ॲक्सेस मंजूर केला गेला आहे.</translation>
+<translation id="2575247648642144396">एक्स्टेंशन वर्तमान पेजवर ॲक्शन करु शकत असेल तेव्हा हे आयकन दृश्यमान होईल. आयकनवर क्लिक करुन किंवा <ph name="EXTENSION_SHORTCUT" /> दाबून हे एक्स्टेंशन वापरा.</translation>
 <translation id="257779572837908839">मीटिंगसाठी Chromebox म्हणून सेट अप करा</translation>
 <translation id="2580889980133367162">एकापेक्षा जास्त फायली डाउनलोड करण्यास <ph name="HOST" /> ला नेहमी अनुमती द्या</translation>
 <translation id="2580924999637585241">एकूण: <ph name="NUMBER_OF_SHEETS" /> <ph name="SHEETS_LABEL" /></translation>
@@ -1135,7 +1133,7 @@
 <translation id="26224892172169984">कोणत्याही साइटला प्रोटोकॉल हाताळण्याची परवानगी देऊ नका</translation>
 <translation id="2624142942574147739">हे पृष्‍ठ आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करत आहे.</translation>
 <translation id="2626799779920242286">कृपया नंतर पुन्हा प्रयत्न करा.</translation>
-<translation id="2629227353894235473">Android अॅप्स तयार करा</translation>
+<translation id="2629227353894235473">Android ॲप्स तयार करा</translation>
 <translation id="2630681426381349926">सुरुवात करण्यासाठी वाय-फाय वर कनेक्ट करा</translation>
 <translation id="2631120081682787498">तुम्हाला नक्की हा टॅब बंद करायचा आहे का?</translation>
 <translation id="2631498379019108537">शेल्फ मधील इनपुट पर्याय दर्शवा</translation>
@@ -1144,7 +1142,7 @@
 <translation id="2633764681656412085">FIDO</translation>
 <translation id="2635094637295383009">Twitter</translation>
 <translation id="2635276683026132559">साइन करत आहे</translation>
-<translation id="2636625531157955190">Chrome इमेजला अॅक्सेस करू शकत नाही.</translation>
+<translation id="2636625531157955190">Chrome इमेजला ॲक्सेस करू शकत नाही.</translation>
 <translation id="2637400434494156704">चुकीचा पिन. तुमच्याकडे एक प्रयत्न शिल्लक आहे.</translation>
 <translation id="2638087589890736295">सिंक सुरू करण्यासाठी सांकेतिक पासफ्रेझ आवश्यक आहे</translation>
 <translation id="2642111877055905627">सॉकर बॉल</translation>
@@ -1208,7 +1206,7 @@
 <translation id="2719936478972253983">पुढील कुकी ब्लॉक केल्या होत्‍या</translation>
 <translation id="2721037002783622288">इमेज <ph name="SEARCH_ENGINE" /> वर शोधा</translation>
 <translation id="2721334646575696520">Microsoft Edge</translation>
-<translation id="2721695630904737430">तुमच्या अॅडमिनिस्ट्रेटरने पर्यवेक्षित वापरकर्ते अक्षम केले आहेत.</translation>
+<translation id="2721695630904737430">तुमच्या ॲडमिनिस्ट्रेटरने पर्यवेक्षित वापरकर्ते अक्षम केले आहेत.</translation>
 <translation id="2724841811573117416">WebRTC लॉग</translation>
 <translation id="2725200716980197196">नेटवर्क कनेक्टिव्हिटी पुनर्संचयित</translation>
 <translation id="2727633948226935816">मला पुन्‍हा स्‍मरण करून देऊ नका</translation>
@@ -1223,7 +1221,7 @@
 <translation id="2737363922397526254">कोलॅप्स...</translation>
 <translation id="2738771556149464852">नंतर नाही</translation>
 <translation id="2739191690716947896">डीबग</translation>
-<translation id="2739240477418971307">तुमच्या अॅक्सेसिबिलिटी सेटिंग्ज बदला</translation>
+<translation id="2739240477418971307">तुमच्या ॲक्सेसिबिलिटी सेटिंग्ज बदला</translation>
 <translation id="274029851662193272">डिप्रेस्ड</translation>
 <translation id="2741912629735277980">लॉग इन स्क्रीनवर UI प्रदर्शित करा</translation>
 <translation id="274290345632688601">Linux अ‍ॅप्स आणि फायली रिस्टोअर करत आहे</translation>
@@ -1231,8 +1229,8 @@
 <translation id="2745080116229976798">Microsoft Qualified Subordination</translation>
 <translation id="2749756011735116528"><ph name="PRODUCT_NAME" /> मध्ये साइन इन करा</translation>
 <translation id="2749881179542288782">शुद्धलेखनासह व्याकरण तपासा</translation>
-<translation id="2751739896257479635">EAP टप्पा 2 अॉथेंटिकेशन</translation>
-<translation id="2755367719610958252">अॅक्सेसिबिलिटी वैशिष्ट्ये व्यवस्थापित करा</translation>
+<translation id="2751739896257479635">EAP टप्पा 2 ऑथेंटिकेशन</translation>
+<translation id="2755367719610958252">ॲक्सेसिबिलिटी वैशिष्ट्ये व्यवस्थापित करा</translation>
 <translation id="275662540872599901">स्क्रीन बंद</translation>
 <translation id="2762441749940182211">कॅमेरा ब्लॉक केला आहे</translation>
 <translation id="2765217105034171413">लहान</translation>
@@ -1256,7 +1254,7 @@
 <translation id="2785873697295365461">फाईल वर्णनकर्ते</translation>
 <translation id="2787354132612937472">—</translation>
 <translation id="2788135150614412178">+</translation>
-<translation id="2791952154587244007">एक एरर आली. कियोस्क अॅप्लिकेशन या डिव्हाइसवर ऑटो लाँच करणे शक्य होणार नाही.</translation>
+<translation id="2791952154587244007">एक एरर आली. कियोस्क ॲप्लिकेशन या डिव्हाइसवर ऑटो लाँच करणे शक्य होणार नाही.</translation>
 <translation id="2792290659606763004">Android ॲप्स काढून टाकायचे?</translation>
 <translation id="2794233252405721443">साइट अवरोधित केली</translation>
 <translation id="2796424461616874739">Authentication timeout while connecting to "<ph name="DEVICE_NAME" />".</translation>
@@ -1290,7 +1288,7 @@
 <translation id="2825848369316359348">तुमच्या सिक्युरिटी कीच्या मागील बाजूस प्रिंट केलेले नाव पाहा</translation>
 <translation id="2828650939514476812">वाय-फाय नेटवर्कवर कनेक्ट करा</translation>
 <translation id="2836269494620652131">क्रॅश</translation>
-<translation id="2836635946302913370">या वापरकर्तानावासह साइन इन करणे तुमच्या अॅडमिनिस्ट्रेटरद्वारे अक्षम केले गेले आहे.</translation>
+<translation id="2836635946302913370">या वापरकर्तानावासह साइन इन करणे तुमच्या ॲडमिनिस्ट्रेटरद्वारे अक्षम केले गेले आहे.</translation>
 <translation id="283669119850230892">नेटवर्क <ph name="NETWORK_ID" /> वापरण्‍यासाठी, प्रथम खालील इंटरनेटचे तुमचे कनेक्शन पूर्ण करा.</translation>
 <translation id="2838379631617906747">इंस्टॉल करीत आहे</translation>
 <translation id="2839032553903800133">सूचना ब्लॉक केल्या आहेत</translation>
@@ -1323,7 +1321,7 @@
 <translation id="2876336351874743617">दुसरे बोट</translation>
 <translation id="2876369937070532032">तुमची सुरक्षा धोक्यात असते तेव्हा, तुम्ही भेट दिलेल्या काही पेजचे URL Google ला पाठवते</translation>
 <translation id="2878782256107578644">स्कॅन प्रगतीपथावर आहे, आता उघडायचे आहे का?</translation>
-<translation id="288042212351694283">तुमच्या सर्वकष 2 रा घटक डिव्हाइस अॅक्सेस करा</translation>
+<translation id="288042212351694283">तुमच्या सर्वकष 2 रा घटक डिव्हाइस ॲक्सेस करा</translation>
 <translation id="2881076733170862447">तुम्ही एक्स्टेंशनवर क्लिक करता तेव्हा</translation>
 <translation id="2881966438216424900"> अखेरचा प्रवेशः</translation>
 <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> रीस्टार्ट होईल आणि क्षणभरात रीसेट होईल</translation>
@@ -1433,7 +1431,7 @@
 <translation id="3036546437875325427">फ्लॅश सुरू करा</translation>
 <translation id="3037754279345160234">डोमेनला कॉंफिगरेशनमध्ये सामील करण्यासाठी पार्स करू शकत नाही. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="3038612606416062604">एक प्रिंटर व्यक्तिचलितपणे जोडा</translation>
-<translation id="3038675903128704560">तुमचा कॉंप्युटर अॅक्सेस करण्यासाठी कोणत्याही साइटना प्लगिन वापरण्याची परवानगी देऊ नका</translation>
+<translation id="3038675903128704560">तुमचा कॉंप्युटर ॲक्सेस करण्यासाठी कोणत्याही साइटना प्लगिन वापरण्याची परवानगी देऊ नका</translation>
 <translation id="3039491566278747710">डिव्हाइसवर ऑफलाइन धोरण इंस्टॉल करता आले नाही.</translation>
 <translation id="3043581297103810752"><ph name="ORIGIN" /> वरून</translation>
 <translation id="3045447014237878114">या साइटने एकाहून अधिक फायली आपोआप डाउनलोड केल्या</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3285322247471302225">नवीन &amp;टॅब</translation>
 <translation id="328571385944182268">तुमचे पासवर्ड सेव्ह करायचे आहेत का?</translation>
-<translation id="3286737518123001369">तुमच्या सिक्युरिटी कीवर स्टोअर केलेला साइन इन डेटा पाहा आणि हटवा</translation>
 <translation id="3288047731229977326">डेव्हलपर मोडमध्‍ये चालणारे विस्‍तार तुमच्या कॉंप्युटरास हानी पोहचवू शकतात. तुम्ही डेव्हलपर नसल्‍यास, सुरक्षित राहाण्‍यासाठी डेव्हलपर मोडमध्‍ये चालणारे हे विस्‍तार तुम्ही अक्षम करावे.</translation>
 <translation id="3289856944988573801">अपडेट तपासण्यासाठी, कृपया इथरनेट किंवा वाय-फाय वापरा.</translation>
 <translation id="3293644607209440645">हे पेज पाठवा</translation>
@@ -1607,7 +1604,7 @@
 <translation id="3319048459796106952">नवीन &amp;गुप्त विंडो</translation>
 <translation id="3323521181261657960">बोनस! तुम्हाला आणखी स्क्रीन वेळ मिळाला</translation>
 <translation id="3325910708063135066">Mac सिस्टम प्राधान्ये मधील कॅमेरा आणि मायक्रोफोन बंद आहे</translation>
-<translation id="3328489342742826322">बॅकअपमधून रिस्टोअर केल्याने तुमची अस्तित्वात असलेली Linux अॅप्लिकेशन आणि तुमच्या Linux फाइल फोल्डरमध्ये असलेला डेटा हटवला जाईल.</translation>
+<translation id="3328489342742826322">बॅकअपमधून रिस्टोअर केल्याने तुमची अस्तित्वात असलेली Linux ॲप्लिकेशन आणि तुमच्या Linux फाइल फोल्डरमध्ये असलेला डेटा हटवला जाईल.</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>
@@ -1615,9 +1612,9 @@
 <translation id="3336664756920573711">तुमच्या Android फोनने तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करा</translation>
 <translation id="3340620525920140773">डाउनलोड पूर्ण झाले आहे: <ph name="FILE_NAME" />.</translation>
 <translation id="3341699307020049241">चुकीचा पिन. तुमच्याकडे <ph name="RETRIES" /> प्रयत्न शिल्लक आहेत.</translation>
-<translation id="3341703758641437857">फाइल URL अॅक्सेसला परवानगी  द्या</translation>
+<translation id="3341703758641437857">फाइल URL ॲक्सेसला परवानगी  द्या</translation>
 <translation id="3342361181740736773">"<ph name="TRIGGERING_EXTENSION_NAME" />" ला हे एक्स्टेंशन काढायचे आहे.</translation>
-<translation id="3345135638360864351">या साइट अॅक्सेस करण्याची तुमची विनंती <ph name="NAME" /> कडे पाठवली जाऊ शकली नाही. कृपया पुन्हा प्रयत्न करा.</translation>
+<translation id="3345135638360864351">या साइट ॲक्सेस करण्याची तुमची विनंती <ph name="NAME" /> कडे पाठवली जाऊ शकली नाही. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="3345886924813989455">समर्थित ब्राउझर आढळला नाही</translation>
 <translation id="3347086966102161372">इमेज पत्ता कॉपी करा</translation>
 <translation id="3348038390189153836">काढण्यायोग्य डिव्हाइस आढळले</translation>
@@ -1673,17 +1670,17 @@
 <translation id="343578350365773421">कागद संपले</translation>
 <translation id="3435896845095436175">सुरू करा</translation>
 <translation id="3438633801274389918">निन्जा</translation>
-<translation id="3439153939049640737">तुमचा मायक्रोफोन अॅक्सेस करण्यासाठी <ph name="HOST" /> ला नेहमी परवानगी  द्या</translation>
+<translation id="3439153939049640737">तुमचा मायक्रोफोन ॲक्सेस करण्यासाठी <ph name="HOST" /> ला नेहमी परवानगी  द्या</translation>
 <translation id="3439970425423980614">पूर्वावलोकनात पीडीएफ उघडत आहे</translation>
 <translation id="3440663250074896476"><ph name="BOOKMARK_NAME" /> साठी अधिक क्रिया</translation>
-<translation id="3440761377721825626">तुमचा कॉंप्युटर एखादी साइट अॅक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा</translation>
+<translation id="3440761377721825626">तुमचा कॉंप्युटर एखादी साइट ॲक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा</translation>
 <translation id="3441653493275994384">तपासा</translation>
 <translation id="3445925074670675829">USB-C डिव्‍हाइस</translation>
 <translation id="344630545793878684">अनेक वेबसाइटवर तुमचा डेटा वाचा</translation>
 <translation id="3448492834076427715">खाते अपडेट करा</translation>
 <translation id="3449839693241009168"><ph name="EXTENSION_NAME" /> कडे कमांड पाठविण्यासाठी <ph name="SEARCH_KEY" /> दाबा</translation>
 <translation id="3450157232394774192">निष्क्रिय स्थिती कब्जा टक्केवारी</translation>
-<translation id="3453612417627951340">अॉथेंटिकेशन आवश्यक</translation>
+<translation id="3453612417627951340">ऑथेंटिकेशन आवश्यक</translation>
 <translation id="3454157711543303649">सक्रियन पूर्ण झाले</translation>
 <translation id="3454213325559396544">या <ph name="DEVICE_TYPE" /> साठी हे अंतिम ऑटोमेटिक सॉफ्टवेअर आणि सिक्युरिटी अपडेट आहे. वैशिष्ट्यांसंबंधित अपडेट मिळवण्यासाठी, सर्वात नवीन मॉडेलवर अपग्रेड करा.</translation>
 <translation id="345693547134384690">नवीन विंडोमध्ये &amp;प्रतिमा उघडा</translation>
@@ -1702,7 +1699,7 @@
 <translation id="3475843873335999118">सॉरी, तुमचे फिंगरप्रिंट अद्याप ओळखले नाही. कृपया तुमचा पासवर्ड एंटर करा.</translation>
 <translation id="3476303763173086583">वापर आणि निदान डेटा पाठवा. Google ला आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा पाठवून तुमच्या लहान मुलाचा Android अनुभव सुधारण्यात मदत करा. हे तुमच्या लहान मुलाला ओळखण्यासाठी वापरले जाणार नाही आणि सिस्ट्म आणि अ‍ॅप स्थिरता आणि इतर सुधारणा करण्यात मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर सारख्या भागीदारांना देखील मदत करेल. या <ph name="BEGIN_LINK1" />सेटिंगची<ph name="END_LINK1" /> मालकाद्वारे अंमलबजावणी केली जाते. मालक या डिव्हाइससाठी निदान आणि वापर डेटा Google ला पाठवणे निवडू शकतो. तुमच्या लहान मुलासाठी अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सुरू केलेली असल्यास, ही माहिती त्याच्या Google खात्यामध्ये स्टोअर केली जाऊ शकते. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
 <translation id="347670947055184738">अरेरे! तुमच्या डीव्हाइससाठी धोरण आणण्यात सिस्टम अयशस्वी झाली.</translation>
-<translation id="347785443197175480">तुमचा कॅमेरा आणि मायक्रोफोन अॅक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी देणे सुरू ठेवा</translation>
+<translation id="347785443197175480">तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी देणे सुरू ठेवा</translation>
 <translation id="3478685642445675458">कृपया एखाद्या व्यक्तीस काढण्यापूर्वी तुमचे प्रोफाईल अनलॉक करा.</translation>
 <translation id="3479539252931486093">हे अनपेक्षित होते? <ph name="BEGIN_LINK" />आम्हाला कळवा<ph name="END_LINK" /></translation>
 <translation id="3479552764303398839">सध्या नाही</translation>
@@ -1720,7 +1717,7 @@
 <translation id="3496213124478423963">झूम कमी करा</translation>
 <translation id="3497560059572256875">डूडल शेअर करा</translation>
 <translation id="3498215018399854026">याक्षणी आम्ही आपल्या पालकांपर्यंत पोहोचू शकलो नाही. कृपया पुन्हा प्रयत्न करा.</translation>
-<translation id="3505030558724226696">डिव्‍हाइस अॅक्सेस रद्द करा</translation>
+<translation id="3505030558724226696">डिव्‍हाइस ॲक्सेस रद्द करा</translation>
 <translation id="3507421388498836150">"<ph name="EXTENSION_NAME" />" साठी वर्तमान परवानग्या</translation>
 <translation id="3507888235492474624">ब्ल्यूटूथ डिव्हाइस पुन्हा स्कॅन करा</translation>
 <translation id="3508492320654304609">तुमचा साइन इन डेटा हटवला जाऊ शकला नाही</translation>
@@ -1732,7 +1729,7 @@
 <translation id="3514373592552233661">एका पेक्षा जास्त नेटवर्क उपलब्ध असल्यास इतर ज्ञात नेटवर्क ऐवजी प्राधान्यीकृत नेटवर्कना प्राधान्य दिले जाईल</translation>
 <translation id="3518985090088779359">स्वीकारा आणि सुरु ठेवा</translation>
 <translation id="351952459507671940">नवीन गटावर जोडा</translation>
-<translation id="3523642406908660543">एखादी साइट तुमचा कॉंप्युटर अॅक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
+<translation id="3523642406908660543">एखादी साइट तुमचा कॉंप्युटर ॲक्सेस करण्यासाठी प्लगिन वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="3524965460886318643">ॲक्टिव्हिटी एक्सपोर्ट करा</translation>
 <translation id="3526034519184079374">साइटचा डेटा रीड करू किंवा बदलू शकत नाही</translation>
 <translation id="3527085408025491307">फोल्डर</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">SHA-1 सह X9.62 ECDSA स्वाक्षरी</translation>
 <translation id="3544879808695557954">वापरकर्तानाव (पर्यायी)</translation>
 <translation id="354602065659584722">धोकादायक सॉफ्टवेअर काढले</translation>
-<translation id="3547220315004609203">टॅब स्ट्रिप टॉगल करा</translation>
 <translation id="3547954654003013442">प्रॉक्सी सेटिंग्ज</translation>
 <translation id="3550915441744863158">Chrome स्वयंचलितपणे अपडेट होते जेणेकरून आपल्याकडे नेहमी नवीन आवृत्ती असते</translation>
 <translation id="3551320343578183772">टॅब बंद करा</translation>
@@ -1834,8 +1830,8 @@
 <translation id="3652817283076144888">सुरू होत आहे</translation>
 <translation id="3653160965917900914">नेटवर्क फाइल शेअर</translation>
 <translation id="3653842108912548333">Voice Match सह असिस्टंट अ‍ॅक्सेस करा</translation>
-<translation id="3653999333232393305">तुमचा मायक्रोफोन अॅक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी  देणे सुरू ठेवा</translation>
-<translation id="3654045516529121250">तुमच्या अॅक्सेस योग्यता सेटिंग्ज वाचा</translation>
+<translation id="3653999333232393305">तुमचा मायक्रोफोन ॲक्सेस करण्यासाठी <ph name="HOST" /> ला परवानगी  देणे सुरू ठेवा</translation>
+<translation id="3654045516529121250">तुमच्या ॲक्सेस योग्यता सेटिंग्ज वाचा</translation>
 <translation id="3655712721956801464">{NUM_FILES,plural, =1{यास एका फाईलवर कायमचा प्रवेश आहे.}other{यास # फायलींवर कायमचा प्रवेश आहे.}}</translation>
 <translation id="3660234220361471169">अविश्‍वासू</translation>
 <translation id="3661172646479098821">सध्या फक्त Android डिव्हाइसना सपोर्ट आहे.</translation>
@@ -1927,7 +1923,7 @@
 <translation id="3775432569830822555">SSL सर्व्हर प्रमाणप‍त्र</translation>
 <translation id="3775705724665058594">तुमच्या डिव्हाइसवर पाठवा</translation>
 <translation id="3776796446459804932">हे एक्स्टेंशन Chrome वेब स्टोअर धोरणाचे उल्लंघन करते.</translation>
-<translation id="3777483481409781352">मोबाइल डिव्हाइस अॅक्टिव्हेट करू शकलो नाही</translation>
+<translation id="3777483481409781352">मोबाइल डिव्हाइस ॲक्टिव्हेट करू शकलो नाही</translation>
 <translation id="3777806571986431400">एक्स्टेंशन सुरू करा</translation>
 <translation id="3778152852029592020">डाउनलोड रद्द झाले.</translation>
 <translation id="3778208826288864398">चुकीचा पिन बऱ्याच वेळा एंटर केल्यामुळे, सिक्युरिटी की लॉक झाली आहे. तुम्हाला सिक्युरिटी की रीसेट करण्याची आवश्यकता असेल</translation>
@@ -1963,11 +1959,11 @@
 <translation id="3817579325494460411">प्रदान केले नाही</translation>
 <translation id="3819257035322786455">बॅक अप</translation>
 <translation id="3819261658055281761">सिस्टमला या डिव्हाइससाठी दीर्घ मुदतीचे API ॲक्सेस टोकन स्टोअर करता आले नाही.</translation>
-<translation id="3819752733757735746">अॅक्सेस स्विच करा (केवळ एक किंवा दोन स्विचसह कॉंप्युटर नियंत्रित करा)</translation>
+<translation id="3819752733757735746">ॲक्सेस स्विच करा (केवळ एक किंवा दोन स्विचसह कॉंप्युटर नियंत्रित करा)</translation>
 <translation id="3819800052061700452">&amp;पूर्ण स्क्रीन</translation>
 <translation id="3820172043799983114">चुकीचे पिन.</translation>
 <translation id="3820749202859700794">SECG एल्लिपटिक कर्व्ह secp521r1 (aka NIST P-521)</translation>
-<translation id="3822559385185038546">या प्रॉक्सीची अंमलबजावणी तुमच्या अॅडमिनिस्ट्रेटरकडून होते</translation>
+<translation id="3822559385185038546">या प्रॉक्सीची अंमलबजावणी तुमच्या ॲडमिनिस्ट्रेटरकडून होते</translation>
 <translation id="3826440694796503677">तुमच्या अ‍ॅडमिनिस्ट्रेटरने आणखी Google खाती जोडणे बंद केले आहे</translation>
 <translation id="3827306204503227641">सॅन्डबॉक्स न केलेल्या प्लगिन ना अनुमती देणे सुरु ठेवा</translation>
 <translation id="3827774300009121996">&amp;पूर्ण स्क्रीन</translation>
@@ -2011,10 +2007,10 @@
 <translation id="3873915545594852654">ARC++ ला समस्या आली.</translation>
 <translation id="387924939625099872">ADB बंद करण्यासाठी, तुमचे <ph name="DEVICE_TYPE" /> रीस्टार्ट करा. ते फॅक्टरी सेटिंग्जवर रीसेट केले जाईल आणि सर्व वापरकर्ता खाती आणि स्थानिक डेटा मिटवला जाईल.</translation>
 <translation id="3879748587602334249">डाउनलोड व्यवस्थापक</translation>
-<translation id="3886446263141354045">या साइट अॅक्सेस करण्याची तुमची विनंती <ph name="NAME" /> कडे पाठवली गेली आहे</translation>
+<translation id="3886446263141354045">या साइट ॲक्सेस करण्याची तुमची विनंती <ph name="NAME" /> कडे पाठवली गेली आहे</translation>
 <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> सोबत टिपा घेणे</translation>
 <translation id="3892414795099177503">OpenVPN / L2TP जोडा...</translation>
-<translation id="3893536212201235195">तुमच्या अॅक्सेसिबिलिटी सेटिंग्ज जोडा आणि बदला</translation>
+<translation id="3893536212201235195">तुमच्या ॲक्सेसिबिलिटी सेटिंग्ज जोडा आणि बदला</translation>
 <translation id="3893630138897523026">ChromeVox (वाचिक अभिप्राय)</translation>
 <translation id="3893764153531140319"><ph name="DOWNLOADED_SIZE" />/<ph name="DOWNLOAD_SIZE" /></translation>
 <translation id="3894123633473837029">शेरलॉग वरून अलीकडील असिस्टंट इतिहासाचा समावेश करा. यामध्ये कदाचित तुमची ओळख, स्थान आणि डीबग माहिती यांचा समावेश असू शकतो. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
@@ -2053,8 +2049,8 @@
 <translation id="3937640725563832867">सर्टिफिकेट जारीकर्ता वैकल्पिक नाव</translation>
 <translation id="3937734102568271121">नेहमी <ph name="LANGUAGE" /> मध्‍ये भाषांतर करा</translation>
 <translation id="3938128855950761626">विक्रेता <ph name="VENDOR_ID" /> कडील डिव्हाइस</translation>
-<translation id="3940233957883229251">अॉटो-रिपीट सुरू करा</translation>
-<translation id="3941565636838060942">या प्रोग्रामवरील अॅक्सेस लपवण्यासाठी, तुम्हाला नियंत्रण पॅनेलमधील
+<translation id="3940233957883229251">ऑटो-रिपीट सुरू करा</translation>
+<translation id="3941565636838060942">या प्रोग्रामवरील ॲक्सेस लपवण्यासाठी, तुम्हाला नियंत्रण पॅनेलमधील
   <ph name="CONTROL_PANEL_APPLET_NAME" /> वापरून तो अनइंस्टॉल करण्याची आवश्यकता आहे.
 
   तुम्ही <ph name="CONTROL_PANEL_APPLET_NAME" /> सुरुवात करू इच्छिता?</translation>
@@ -2080,7 +2076,7 @@
 <translation id="3965965397408324205"><ph name="PROFILE_NAME" /> मधून बाहेर या</translation>
 <translation id="3966072572894326936">अन्य फोल्डर निवडा...</translation>
 <translation id="3967822245660637423">पूर्ण डाउनलोड करा</translation>
-<translation id="3967919079500697218">स्क्रीनशॉट घेण्याची क्षमता तुमच्या अॅडमिनिस्ट्रेटरद्वारे अक्षम केली गेली आहे.</translation>
+<translation id="3967919079500697218">स्क्रीनशॉट घेण्याची क्षमता तुमच्या ॲडमिनिस्ट्रेटरद्वारे अक्षम केली गेली आहे.</translation>
 <translation id="3969092967100188979">सुरू आहे, रोमिंग</translation>
 <translation id="3970114302595058915">आयडी</translation>
 <translation id="397105322502079400">गणना करत आहे...</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">मायक्रोफोनला अनुमती आहे</translation>
 <translation id="4031527940632463547">सेन्सर ब्लॉक केले गेले आहेत</translation>
 <translation id="4033471457476425443">नवीन फोल्डर जोडा</translation>
-<translation id="403456802563765809">तुमची फिंगरप्रिंट व्यवस्थापित करण्यासाठी, तुमची सिक्युरिटी की घाला आणि स्पर्श करा.</translation>
 <translation id="4034824040120875894">प्रिंटर</translation>
 <translation id="4035758313003622889">&amp;कार्य व्यवस्थापक</translation>
 <translation id="4036778507053569103">सर्व्हरवरून डाउनलोड केलेले धोरण चुकीचे आहे.</translation>
@@ -2162,7 +2157,7 @@
 <translation id="4087089424473531098">एक्स्टेंशन तयार केले: <ph name="EXTENSION_FILE" /></translation>
 <translation id="4088095054444612037">गटासाठी स्वीकारा</translation>
 <translation id="4089235344645910861">सेटिंग्ज सेव्ह केल्या. सिंक सुरू केले.</translation>
-<translation id="4090103403438682346">पडताळणीने दिलेला अॅक्सेस सक्षम करा</translation>
+<translation id="4090103403438682346">पडताळणीने दिलेला ॲक्सेस सक्षम करा</translation>
 <translation id="4090947011087001172"><ph name="SITE" /> साठी साइट परवानग्या रीसेट करायच्या?</translation>
 <translation id="4091434297613116013">कागदी पत्रके</translation>
 <translation id="4093955363990068916">स्थानिक फाईल:</translation>
@@ -2184,7 +2179,7 @@
 <translation id="4110490973560452005">डाउनलोड पूर्ण: <ph name="FILE_NAME" />. डाउनलोड बार भागाकडे जाण्यासाठी Shift+F6 दाबा.</translation>
 <translation id="4110895898888439383">उच्च कॉन्ट्रास्ट मोडमध्ये वेब ब्राउझ करा</translation>
 <translation id="4115002065223188701">नेटवर्क रेंजमध्‍ये नाही</translation>
-<translation id="4115080753528843955">काही आशय सेवा संरक्षित आशयवर अधिकृतरीत्या अॅक्सेस करण्यासाठी युनिक आयडेंटिफायर वापरतात</translation>
+<translation id="4115080753528843955">काही आशय सेवा संरक्षित आशयवर अधिकृतरीत्या ॲक्सेस करण्यासाठी युनिक आयडेंटिफायर वापरतात</translation>
 <translation id="4115378294792113321">किरमिजी</translation>
 <translation id="4118579674665737931">कृपया डिव्हाइस रीबूट करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="4120388883569225797">ही सिक्युरिटी की रीसेट करू शकत नाही</translation>
@@ -2239,8 +2234,8 @@
 <translation id="421182450098841253">बुकमार्क बार &amp;दर्शवा</translation>
 <translation id="4211851069413100178">वापर आणि निदान डेटा पाठवा. Google ला आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा पाठवून तुमचा Android अनुभव सुधारण्यात मदत करा. हे सिस्ट्म आणि अ‍ॅप स्थिरता आणि इतर सुधारणा करण्यात मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर सारख्या भागीदारांना देखील मदत करेल. या <ph name="BEGIN_LINK1" />सेटिंगची<ph name="END_LINK1" /> मालकाद्वारे अंमलबजावणी केली जाते. मालक या डिव्हाइससाठी निदान आणि वापर डेटा Google ला पाठवणे निवडू शकतो. जर तुमची अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सेटिंग सुरू केलेली असल्यास, हा डेटा तुमच्या Google खाते वर सेव्ह केला जाऊ शकतो. <ph name="BEGIN_LINK2" />अधिक जाणून घ्या<ph name="END_LINK2" /></translation>
 <translation id="42126664696688958">एक्सपोर्ट</translation>
-<translation id="42137655013211669">सर्व्हरद्वारे या स्त्रोताचा अॅक्सेस निषिद्ध केला होता.</translation>
-<translation id="4220648711404560261">अॅक्टिव्हेट करताना एरर आली.</translation>
+<translation id="42137655013211669">सर्व्हरद्वारे या स्त्रोताचा ॲक्सेस निषिद्ध केला होता.</translation>
+<translation id="4220648711404560261">ॲक्टिव्हेट करताना एरर आली.</translation>
 <translation id="4222772810963087151">तपशील तयार करा</translation>
 <translation id="4225397296022057997">सर्व साइटवर</translation>
 <translation id="4232375817808480934">Kerberos कॉन्फिगर करा</translation>
@@ -2337,7 +2332,7 @@
 <translation id="4384312707950789900">प्राधान्यीकृतमध्‍ये जोडा</translation>
 <translation id="4384652540891215547">एक्स्टेंशन सुरू करा</translation>
 <translation id="438503109373656455">Saratoga</translation>
-<translation id="4387004326333427325">अॉथेंटिकेशन प्रमाणपत्र रिमोट पद्धतीने नाकारले</translation>
+<translation id="4387004326333427325">ऑथेंटिकेशन प्रमाणपत्र रिमोट पद्धतीने नाकारले</translation>
 <translation id="4389091756366370506">वापरकर्ता <ph name="VALUE" /></translation>
 <translation id="4390000551125140321">{0,plural, =1{गुप्त}other{# गुप्त विंडो उघडा}}</translation>
 <translation id="439266289085815679">ब्लूटूथ कॉन्फिगरेशन <ph name="USER_EMAIL" /> नियंत्रित करते.</translation>
@@ -2364,18 +2359,18 @@
 <translation id="4421167684395067330">कनेक्ट करताना समस्या आली. कृपया मदतीसाठी <ph name="CARRIER_NAME" /> शी संपर्क साधा.</translation>
 <translation id="4421932782753506458">Fluffy</translation>
 <translation id="4423376891418188461">सेटिंग्ज पुनर्संचयित करा</translation>
-<translation id="442397852638519243"><ph name="USER_NAME" />, तुम्ही तुमचा पासवर्ड बदलणे तुमच्या अॅडमिनिस्ट्रेटरलााठी आवश्यक आहे.</translation>
+<translation id="442397852638519243"><ph name="USER_NAME" />, तुम्ही तुमचा पासवर्ड बदलणे तुमच्या ॲडमिनिस्ट्रेटरलााठी आवश्यक आहे.</translation>
 <translation id="4430019312045809116">व्हॉल्यूम</translation>
 <translation id="4430369329743628066">बुकमार्क जोडला</translation>
 <translation id="4434045419905280838">पॉप-अप आणि रीडिरेक्ट</translation>
 <translation id="443454694385851356">लेगसी (असुरक्षित)</translation>
-<translation id="443475966875174318">कंपॅटिबल नसलेली अॅप्लिकेशन अपडेट करा किंवा काढून टाका</translation>
+<translation id="443475966875174318">कंपॅटिबल नसलेली ॲप्लिकेशन अपडेट करा किंवा काढून टाका</translation>
 <translation id="4438043733494739848">पारदर्शक</translation>
 <translation id="4441124369922430666">मशीन चालू होते तेव्हा तुम्ही हा ॲप स्वयंचलितपणे प्रारंभ करू इच्छिता?</translation>
 <translation id="444134486829715816">विस्तार करा...</translation>
 <translation id="4442424173763614572">DNS लुकअप अयश्सवी</translation>
 <translation id="4443536555189480885">&amp;मदत</translation>
-<translation id="4444304522807523469">USB द्वारा संलग्न केलेल्या किंवा स्थानिक नेटवर्कवरील दस्तऐवज स्कॅनर अॅक्सेस करा</translation>
+<translation id="4444304522807523469">USB द्वारा संलग्न केलेल्या किंवा स्थानिक नेटवर्कवरील दस्तऐवज स्कॅनर ॲक्सेस करा</translation>
 <translation id="4444512841222467874">स्थान उपलब्ध केले नसल्यास, वापरकर्ते आणि डेटा स्वयंचलितपणे काढला जाऊ शकतो.</translation>
 <translation id="4446933390699670756">मिरर केलेले</translation>
 <translation id="4449996769074858870">हा टॅब ऑडिओ प्ले करत आहे.</translation>
@@ -2390,10 +2385,10 @@
 <translation id="4470957202018033307">बाह्य स्टोरेज प्राधान्ये</translation>
 <translation id="447252321002412580">Chrome ची वैशिष्ट्ये आणि परफॉर्मन्स सुधारण्यात मदत करा</translation>
 <translation id="4474155171896946103">सर्व टॅब बुकमार्क करा...</translation>
-<translation id="4474461121892222090">मोबाइल डेटा अॅक्टिव्हेशन पूर्ण होण्यास सुमारे १५ मिनिटे लागू शकतात.</translation>
+<translation id="4474461121892222090">मोबाइल डेटा ॲक्टिव्हेशन पूर्ण होण्यास सुमारे १५ मिनिटे लागू शकतात.</translation>
 <translation id="4475552974751346499">डाउनलोड शोधा</translation>
 <translation id="4476590490540813026">व्यायामपटू</translation>
-<translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर अॅप किंवा काही कॅमेरा अ‍ॅप्स वापरू शकता.</translation>
+<translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर ॲप किंवा काही कॅमेरा अ‍ॅप्स वापरू शकता.</translation>
 <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation>
 <translation id="4478664379124702289">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation>
 <translation id="4479424953165245642">कियोस्क ॲप्लिकेशन व्यवस्थापित करा</translation>
@@ -2459,7 +2454,7 @@
 <translation id="4568213207643490790">क्षमस्व, Google खात्यांना या डिव्हाइसवर अनुमती नाही.</translation>
 <translation id="4569747168316751899">निष्क्रिय असताना</translation>
 <translation id="4570387585180509432">पत्ते, फोन नंबर आणि अधिक</translation>
-<translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना अॉथेंटिकेशन रद्द झाले.</translation>
+<translation id="4572659312570518089">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना ऑथेंटिकेशन रद्द झाले.</translation>
 <translation id="4572779512957829735">तुमच्या सिक्युरिटी कीसाठी पिन एंटर करा</translation>
 <translation id="457386861538956877">अधिक...</translation>
 <translation id="4574741712540401491">•  <ph name="LIST_ITEM_TEXT" /></translation>
@@ -2476,7 +2471,7 @@
 <translation id="4598556348158889687">स्टोरेज व्यवस्थापन</translation>
 <translation id="4598776695426288251">एकाहून अधिक डिव्हाइसद्वारे वाय-फाय उपलब्ध आहे</translation>
 <translation id="4599134080475764833">प्लग-इन VM वापरण्यासाठी तयार आहे</translation>
-<translation id="4602466770786743961">नेहमी <ph name="HOST" /> ला तुमचा कॅमेरा आणि मायक्रोफोन अॅक्सेस करण्‍यास परवानगी द्या</translation>
+<translation id="4602466770786743961">नेहमी <ph name="HOST" /> ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्‍यास परवानगी द्या</translation>
 <translation id="4608500690299898628">&amp;शोधा...</translation>
 <translation id="4608520674724523647">यशस्वी नोंदणीचे उदाहरण</translation>
 <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ला एरर आली</translation>
@@ -2519,7 +2514,7 @@
 <translation id="4668721319092543482"><ph name="PLUGIN_NAME" /> सुरू करण्यासाठीवर क्लिक करा</translation>
 <translation id="4672657274720418656">Distill पृष्ठ</translation>
 <translation id="4673442866648850031">स्टायलस काढल्यानंतर स्टायलस टूल उघडा</translation>
-<translation id="4677585247300749148"><ph name="URL" /> ला अॅक्सेसिबिलिटी इव्‍हेंटना प्रतिसाद द्यायचा आहे</translation>
+<translation id="4677585247300749148"><ph name="URL" /> ला ॲक्सेसिबिलिटी इव्‍हेंटना प्रतिसाद द्यायचा आहे</translation>
 <translation id="4677772697204437347">GPU मेमरी</translation>
 <translation id="4680105648806843642">या पेजवर आवाज म्यूट केला होता</translation>
 <translation id="4681930562518940301">नवीन टॅबमध्‍ये मूळ &amp;प्रतिमा उघडा</translation>
@@ -2533,7 +2528,7 @@
 <translation id="469230890969474295">OEM फोल्डर</translation>
 <translation id="4692623383562244444">शोध इंजिने</translation>
 <translation id="4693155481716051732">सुशी</translation>
-<translation id="4694024090038830733">प्रिंटर कॉन्फिगरेशन अॅडमिनिस्ट्रेटरद्वारे हाताळले जाते.</translation>
+<translation id="4694024090038830733">प्रिंटर कॉन्फिगरेशन ॲडमिनिस्ट्रेटरद्वारे हाताळले जाते.</translation>
 <translation id="4694604912444486114">माकड</translation>
 <translation id="4697551882387947560">ब्राउझिंग सेशन समाप्त होते तेव्हा</translation>
 <translation id="4699172675775169585">कॅश   इमेज आणि फायली</translation>
@@ -2564,7 +2559,7 @@
 <translation id="473775607612524610">अपडेट करा</translation>
 <translation id="4739639199548674512">तिकिटे</translation>
 <translation id="4742746985488890273">शेल्फवर पिन करा</translation>
-<translation id="4743260470722568160"><ph name="BEGIN_LINK" />अॅप्लिकेशन कशी अपडेट करायची ते शिका<ph name="END_LINK" /></translation>
+<translation id="4743260470722568160"><ph name="BEGIN_LINK" />ॲप्लिकेशन कशी अपडेट करायची ते शिका<ph name="END_LINK" /></translation>
 <translation id="4744981231093950366">{NUM_TABS,plural, =1{साइट अनम्यूट करा}other{साइट अनम्यूट करा}}</translation>
 <translation id="4746351372139058112">संदेश</translation>
 <translation id="4748762018725435655">Chrome वेब स्टोअर वरून एक्स्टेंशन आवश्यक आहे</translation>
@@ -2602,7 +2597,7 @@
 <translation id="480990236307250886">होम पेज उघडा</translation>
 <translation id="4813136279048157860">माझ्या इमेज</translation>
 <translation id="4813512666221746211">नेटवर्क एरर</translation>
-<translation id="4820236583224459650">अॅक्टिव्ह तिकीट म्हणून सेट करा</translation>
+<translation id="4820236583224459650">ॲक्टिव्ह तिकीट म्हणून सेट करा</translation>
 <translation id="4821935166599369261">&amp;प्रोफाइलिंग सक्षम</translation>
 <translation id="4823484602432206655">वापरकर्ता आणि डिव्हाइस सेटिंग्ज वाचा आणि बदला</translation>
 <translation id="4824958205181053313">सिंक रद्द करायचे?</translation>
@@ -2612,16 +2607,16 @@
 <translation id="4830502475412647084">OS अपडेट इंस्टॉल करत आहे</translation>
 <translation id="4830573902900904548"><ph name="NETWORK_NAME" /> वापरून इंटरनेटशी कनेक्ट करण्‍यात तुमचे <ph name="DEVICE_TYPE" /> अक्षम आहे. कृपया अन्य नेटवर्क वापरा. <ph name="LEARN_MORE_LINK_START" />अधिक जाणून घ्‍या<ph name="LEARN_MORE_LINK_END" /></translation>
 <translation id="4833236810053292670">Chromebook मध्ये काय नवीन आहे ते पहा</translation>
-<translation id="4835385943915508971">Chrome ला विनंती केलेल्या संसाधनांचा अॅक्सेस नाही.</translation>
+<translation id="4835385943915508971">Chrome ला विनंती केलेल्या संसाधनांचा ॲक्सेस नाही.</translation>
 <translation id="4836504898754963407">फिंगरप्रिंट व्यवस्‍थापित करा</translation>
 <translation id="4837926214103741331">तुम्ही हे डिव्हाइस वापरण्यासाठी प्राधिकृत नाही. कृपया साइन इन करण्याच्या परवानगीसाठी डिव्हाइस मालकाशी संपर्क साधा.</translation>
 <translation id="4837952862063191349">तुमचा स्थानिक डेटा अनलॉक आणि रिस्टोअर करण्‍यासाठी, कृपया तुमचा जुना <ph name="DEVICE_TYPE" /> पासवर्ड एंटर करा.</translation>
-<translation id="4838836835474292213">क्लिपबोर्डचा रीड अॅक्सेस द्या</translation>
+<translation id="4838836835474292213">क्लिपबोर्डचा रीड ॲक्सेस द्या</translation>
 <translation id="4839303808932127586">म्हणून व्हिडिओ ज&amp;तन करा...</translation>
 <translation id="4840150926623932060">{NUM_DOWNLOAD,plural, =1{आणखी 1}other{आणखी #}}</translation>
 <translation id="4842976633412754305">हे पृष्ठ अप्रमाणिकृत स्त्रोतांवरून स्क्रिप्ट लोड करण्याचा प्रयत्न करत आहे.</translation>
 <translation id="4844333629810439236">अन्य कीबोर्ड</translation>
-<translation id="4846680374085650406">तुम्ही या सेटिंगसाठी अॅडमिनिस्ट्रेटरच्या शिफारसींना फॉलो करत आहात.</translation>
+<translation id="4846680374085650406">तुम्ही या सेटिंगसाठी ॲडमिनिस्ट्रेटरच्या शिफारसींना फॉलो करत आहात.</translation>
 <translation id="4848518990323155912">सिम कार्ड लॉक सुरू करा (मोबाईल डेटा वापरण्यासाठी पिन आवश्यक आहे)</translation>
 <translation id="4849286518551984791">समन्वित जागतिक वेळ (UTC/GMT)</translation>
 <translation id="4849517651082200438">इंस्टॉल करू नका</translation>
@@ -2637,7 +2632,7 @@
 <translation id="4863769717153320198"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (डीफॉल्ट) सारखे दिसते</translation>
 <translation id="4864369630010738180">साइन इन करत आहे...</translation>
 <translation id="486635084936119914">डाउनलोड केल्यानंतर काही फाईल प्रकार स्वयंचलितपणे उघडा</translation>
-<translation id="4869142322204669043">Google, <ph name="IDS_SHORT_PRODUCT_NAME" /> आणि भाषांतर, शोध आणि जाहिरातींसारख्‍या इतर Google सेवा पर्सनलाइझ करण्यासाठी तुम्ही भेट देत असलेल्या साइटवरील आशय आणि ब्राउझिंग अॅक्टिव्हिटी आणि संवादाचा वापर करू शकते. तुम्ही हे सेटिंग्जमध्ये कधीही कस्टमाइझ करू शकता.</translation>
+<translation id="4869142322204669043">Google, <ph name="IDS_SHORT_PRODUCT_NAME" /> आणि भाषांतर, शोध आणि जाहिरातींसारख्‍या इतर Google सेवा पर्सनलाइझ करण्यासाठी तुम्ही भेट देत असलेल्या साइटवरील आशय आणि ब्राउझिंग ॲक्टिव्हिटी आणि संवादाचा वापर करू शकते. तुम्ही हे सेटिंग्जमध्ये कधीही कस्टमाइझ करू शकता.</translation>
 <translation id="48704129375571883">अतिरिक्त वैशिष्ट्ये जोडा</translation>
 <translation id="4870758487381879312">कॉन्फिगरेशन माहिती मिळवण्यासाठी ॲडमिनने पुरवलेला पासवर्ड एंटर करा</translation>
 <translation id="4870903493621965035">कोणतेही जोडणी केलेले डिव्हाइस नाहीत</translation>
@@ -2650,7 +2645,7 @@
 <translation id="4876895919560854374">स्क्रीन लॉक आणि अनलॉक करा</translation>
 <translation id="4877276003880815204">तपासणी घटक</translation>
 <translation id="4879491255372875719">आपोआप (डीफॉल्ट)</translation>
-<translation id="4880328057631981605">अॅक्सेसबिंदूचे नाव</translation>
+<translation id="4880328057631981605">ॲक्सेसबिंदूचे नाव</translation>
 <translation id="4880827082731008257">इतिहास शोध</translation>
 <translation id="4881695831933465202">उघडा</translation>
 <translation id="4882312758060467256">या साइटचा ॲक्सेस आहे</translation>
@@ -2686,7 +2681,7 @@
 <translation id="492299503953721473">Android ॲप्स काढून टाका</translation>
 <translation id="4923279099980110923">होय, मी मदत घेऊ इच्छितो</translation>
 <translation id="4924352752174756392">१२x</translation>
-<translation id="4925542575807923399">या खात्याच्या अॅडमिनिस्ट्रेटरला हे खाते एका एकाहून अधिक साइन इन सेशनमधील प्रथम साइन इन केलेले खाते असणे आवश्यक आहे.</translation>
+<translation id="4925542575807923399">या खात्याच्या ॲडमिनिस्ट्रेटरला हे खाते एका एकाहून अधिक साइन इन सेशनमधील प्रथम साइन इन केलेले खाते असणे आवश्यक आहे.</translation>
 <translation id="4927753642311223124">येथे पाहण्यासाठी काही नाही, पुढे चला.</translation>
 <translation id="4927846293686536410">आपल्या सर्व डिव्हाइसवर तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्‍यासाठी साइन इन करा. तुम्ही स्वयंचलितपणे आपल्‍या Google सेवांवर देखील साइन इन कराल.</translation>
 <translation id="4929386379796360314">गंतव्यस्थाने प्रिंट करा</translation>
@@ -2702,18 +2697,18 @@
 <translation id="4943691134276646401">"<ph name="CHROME_EXTENSION_NAME" />" ना सिरीअल पोर्टशी कनेक्ट करायचे आहे</translation>
 <translation id="4944310289250773232">ही ऑथेंटिकेशन सेवा <ph name="SAML_DOMAIN" /> द्वारे होस्ट केली जाते</translation>
 <translation id="495170559598752135">क्रिया</translation>
-<translation id="4953689047182316270">अॅक्सेसिबिलिटी कामक्रमांना प्रतिसाद द्या</translation>
+<translation id="4953689047182316270">ॲक्सेसिबिलिटी कामक्रमांना प्रतिसाद द्या</translation>
 <translation id="4953808748584563296">डीफॉल्ट नारिंगी अवतार</translation>
 <translation id="4955710816792587366">तुमचा पिन निवडा</translation>
 <translation id="4955814292505481804">वार्षिक</translation>
 <translation id="4957949153200969297">फक्त <ph name="IDS_SHORT_PRODUCT_NAME" /> सिंकशी संबंधित वैशिष्ट्ये सुरू करा</translation>
 <translation id="4959262764292427323">तुम्हाला कोणत्याही डिव्हाइसवर वापरता यावे यासाठी तुमच्या Google खात्यामध्ये पासवर्ड सेव्ह केले जातात</translation>
 <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation>
-<translation id="496185450405387901">हे अॅप तुमच्या अ‍ॅडमिनिस्ट्रेटरने इंस्टॉल केले आहे.</translation>
+<translation id="496185450405387901">हे ॲप तुमच्या अ‍ॅडमिनिस्ट्रेटरने इंस्टॉल केले आहे.</translation>
 <translation id="4964455510556214366">व्यवस्था</translation>
 <translation id="4964673849688379040">तपासत आहे...</translation>
 <translation id="4965808351167763748">तुम्हाला हे डिव्हाइस Hangouts Meet वापरण्यासाठी खरोखर सेट अप करायचे आहे का?</translation>
-<translation id="496888482094675990">फायली अॅप तुम्ही Google ड्राइव्हवर, बाह्य स्टोरेजवर किंवा तुमच्या Chrome OS डिव्हाइसवर सेव्ह केलेल्या फायलीना जलद अॅक्सेस देतो.</translation>
+<translation id="496888482094675990">फायली ॲप तुम्ही Google ड्राइव्हवर, बाह्य स्टोरेजवर किंवा तुमच्या Chrome OS डिव्हाइसवर सेव्ह केलेल्या फायलीना जलद ॲक्सेस देतो.</translation>
 <translation id="4971412780836297815">पूर्ण झाल्यानंतर उघडा</translation>
 <translation id="4972129977812092092">प्रिंटर संपादित करा</translation>
 <translation id="4972164225939028131">चुकीचा पासवर्ड</translation>
@@ -2722,7 +2717,7 @@
 <translation id="4974733135013075877">बाहेर पडा आणि चाइल्डलॉक करा</translation>
 <translation id="4976009197147810135">उभे विभाजित करा</translation>
 <translation id="4976795213394241669">{0,plural, =0{आता अपडेट करा}=1{एका सेकंदामध्ये अपडेट करा}other{# सेकंदांमध्ये अपडेट करा}}</translation>
-<translation id="4977942889532008999">अॅक्सेस निश्चित करा</translation>
+<translation id="4977942889532008999">ॲक्सेस निश्चित करा</translation>
 <translation id="4980805016576257426">या एक्स्टेंशनमध्ये मालवेअर आहे.</translation>
 <translation id="4981449534399733132">तुमच्या सिंक केलेल्या सर्व डिव्हाइसमधून आणि तुमच्या Google खात्यामधून ब्राउझ केलेला डेटा साफ करण्यासाठी, <ph name="BEGIN_LINK" />साइन इन करा<ph name="END_LINK" />.</translation>
 <translation id="4988526792673242964">पेज</translation>
@@ -2771,7 +2766,7 @@
 <translation id="5063480226653192405">वापर</translation>
 <translation id="5065775832226780415">Smart Lock</translation>
 <translation id="5067399438976153555">नेहमी चालू</translation>
-<translation id="5067867186035333991"><ph name="HOST" /> तुमचा मायक्रोफोन अॅक्सेस करू इच्छित असल्यास विचारा</translation>
+<translation id="5067867186035333991"><ph name="HOST" /> तुमचा मायक्रोफोन ॲक्सेस करू इच्छित असल्यास विचारा</translation>
 <translation id="5068918910148307423">अलीकडील बंद केलेल्या साइटना डेटा पाठविणे आणि प्राप्त करणे समाप्त करण्यासाठी अनुमती देऊ नका</translation>
 <translation id="5068919226082848014">पिझ्झा</translation>
 <translation id="5072052264945641674">कर्सर आकार समायोजित करा</translation>
@@ -2826,7 +2821,7 @@
 <translation id="5142961317498132443">ऑथेंटिकेशन</translation>
 <translation id="5143374789336132547">The extension "<ph name="EXTENSION_NAME" />" has changed what page is shown when you click the Home button.</translation>
 <translation id="5143712164865402236">पूर्ण स्क्रीनमध्ये जा</translation>
-<translation id="514575469079499857">स्थान निर्धारित करण्यासाठी तुमचा आयपी अॅड्रेस वापरा (डीफॉल्ट)</translation>
+<translation id="514575469079499857">स्थान निर्धारित करण्यासाठी तुमचा आयपी ॲड्रेस वापरा (डीफॉल्ट)</translation>
 <translation id="5146995429444047494"><ph name="ORIGIN" />साठीच्या सूचना ब्लॉक केलेल्या आहेत</translation>
 <translation id="5150254825601720210">Netscape सर्टिफिकेट SSL सर्व्हर नाव</translation>
 <translation id="5151354047782775295">डिस्क स्थान मोकळे करा किंवा निवडलेला डेटा स्वयंचलितपणे हटवला जाऊ शकतो</translation>
@@ -2841,7 +2836,7 @@
 <translation id="5171045022955879922">URL शोधा किंवा टाइप करा</translation>
 <translation id="5171343362375269016">स्वॅप केलेली मेमरी</translation>
 <translation id="5175379009094579629">डिव्हाइस नाव चुकीचे आहे. पुन्हा प्रयत्न करण्यासाठी योग्य डिव्हाइस नाव एंटर करा.</translation>
-<translation id="5177479852722101802">कॅमेरा ब्लॉक करणे आणि मायक्रोफोन अॅक्सेस करणे सुरू ठेवा</translation>
+<translation id="5177479852722101802">कॅमेरा ब्लॉक करणे आणि मायक्रोफोन ॲक्सेस करणे सुरू ठेवा</translation>
 <translation id="5177549709747445269">तुम्ही मोबाईल डेटा वापरत आहात</translation>
 <translation id="5178667623289523808">मागील शोधा</translation>
 <translation id="5181140330217080051">डाउनलोड करीत आहे</translation>
@@ -2851,7 +2846,7 @@
 <translation id="5185386675596372454">"<ph name="EXTENSION_NAME" />" ची नवीनतम आवृत्ती अक्षम केली गेली कारण यासाठी अधिक परवानग्या आवश्यक आहेत.</translation>
 <translation id="5187826826541650604"><ph name="KEY_NAME" /> (<ph name="DEVICE" />)</translation>
 <translation id="51918995459521422"><ph name="ORIGIN" /> ला एकाहून अधिक फायली डाउनलोड करायच्या आहेत</translation>
-<translation id="5192062846343383368">तुमची पर्यवेक्षण सेटिंग्ज पाहण्यासाठी Family Link अॅप उघडा</translation>
+<translation id="5192062846343383368">तुमची पर्यवेक्षण सेटिंग्ज पाहण्यासाठी Family Link ॲप उघडा</translation>
 <translation id="5193988420012215838">तुमच्या क्लिपबोर्डवर कॉपी केले</translation>
 <translation id="5204673965307125349">कृपया डिव्हाइस पॉवरवॉश करा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="5206215183583316675">"<ph name="CERTIFICATE_NAME" />" हटवायचे?</translation>
@@ -2873,7 +2868,7 @@
 <translation id="5233638681132016545">नवीन टॅब</translation>
 <translation id="5233736638227740678">&amp;पेस्ट करा</translation>
 <translation id="5234764350956374838">डिसमिस करा</translation>
-<translation id="5235050375939235066">अॅप अनइंस्टॉल करायचे?</translation>
+<translation id="5235050375939235066">ॲप अनइंस्टॉल करायचे?</translation>
 <translation id="5235750401727657667">एखादा नवीन टॅब उघडताना दिसत असलेले पेज बदला</translation>
 <translation id="5238278114306905396">अ‍ॅप "<ph name="EXTENSION_NAME" />" स्वयंचलितपणे काढण्यात आला.</translation>
 <translation id="5241128660650683457">तुम्ही भेट देता त्या वेबसाइटवर तुमचा सर्व डेटा वाचा</translation>
@@ -2946,7 +2941,7 @@
 <translation id="5331425616433531170">"<ph name="CHROME_EXTENSION_NAME" />" जोडू इच्छिते</translation>
 <translation id="5331975486040154427">USB-C डिव्‍हाइस (डाव्या बाजूचे मागील पोर्ट)</translation>
 <translation id="5334142896108694079">स्क्रिप्ट कॅशे</translation>
-<translation id="5336126339807372270">कोणत्याही साइटना USB डिव्हाइस अॅक्सेस करू देऊ नका</translation>
+<translation id="5336126339807372270">कोणत्याही साइटना USB डिव्हाइस ॲक्सेस करू देऊ नका</translation>
 <translation id="5336688142483283574">हे पेज तुमच्या इतिहास आणि <ph name="SEARCH_ENGINE" /> ॲक्टिव्हिटी मधून देखील काढून टाकले जाईल.</translation>
 <translation id="5337771866151525739">एका तृतीय पक्षाद्वारे इंस्टॉल.</translation>
 <translation id="5338503421962489998">स्‍थानिक स्टोरेज</translation>
@@ -2974,7 +2969,7 @@
 <translation id="5376169624176189338">परत जाण्यासाठी क्लिक करा, इतिहास पाहण्यासाठी होल्ड करा</translation>
 <translation id="5376931455988532197">फाईल खूप मोठी आहे</translation>
 <translation id="537813040452600081">या विंडोमध्ये तुम्ही पाहत असलेली पेज ब्राउझर इतिहासात दिसणार नाहीत आणि तुम्ही साइन आउट केल्यानंतर, कॉंप्युटरवर कुकीज सारखे, अन्य ट्रेस ते सोडणार नाहीत. तुम्ही डाउनलोड करता त्या फायली आणि तुम्ही तयार करता ते बुकमार्क संरक्षित केले जाणार नाहीत.</translation>
-<translation id="5379140238605961210">मायक्रोफोन अॅक्सेस ब्लॉक करणे सुरू ठेवा</translation>
+<translation id="5379140238605961210">मायक्रोफोन ॲक्सेस ब्लॉक करणे सुरू ठेवा</translation>
 <translation id="5382591305415226340">समर्थित लिंक व्यवस्थापित करा</translation>
 <translation id="5383377866517186886">Mac सिस्टम प्राधान्ये मधील कॅमेरा बंद केला आहे</translation>
 <translation id="5384883051496921101">ही साइट गुप्त मोडच्या बाहेरील एखाद्या अ‍ॅपबरोबर ही माहिती शेअर करणार आहे.</translation>
@@ -2995,7 +2990,7 @@
 <translation id="5417312524372586921">ब्राउझर थीम</translation>
 <translation id="5419405654816502573">Voice match</translation>
 <translation id="5420438158931847627">मजकूर आणि इमेजचे शार्पनेस निर्धारित करते</translation>
-<translation id="5422221874247253874">अॅक्सेस पॉइंट</translation>
+<translation id="5422221874247253874">ॲक्सेस पॉइंट</translation>
 <translation id="5422781158178868512">सॉरी, तुमचे बाह्य स्टोरेज डिव्हाइस ओळखता आले नाही.</translation>
 <translation id="5423829801105537712">साधारण स्पेल चेक</translation>
 <translation id="5423849171846380976">सक्रिय</translation>
@@ -3041,7 +3036,7 @@
 <translation id="5471768120198416576">हाय! मी तुमचा टेक्‍स्‍ट टू स्‍पीच व्हॉइस आहे.</translation>
 <translation id="5473333559083690127">नवीन पिन पुन्हा प्रविष्‍ट करा</translation>
 <translation id="5481941284378890518">जवळपासचे प्रिंटर जोडा</translation>
-<translation id="5483785310822538350">फाइल आणि डिव्हाइस अॅक्सेस रद्द करा</translation>
+<translation id="5483785310822538350">फाइल आणि डिव्हाइस ॲक्सेस रद्द करा</translation>
 <translation id="5485080380723335835">तुमचे <ph name="DEVICE_TYPE" /> सुरक्षेच्या कारणास्तव लॉक करण्यात आलेले आहे. पुढे जाण्यासाठी तुम्ही तुमचा पासवर्ड स्वतः टाका.</translation>
 <translation id="5485102783864353244">ॲप्लिकेशन जोडा</translation>
 <translation id="5485754497697573575">सर्व टॅब पुनर्संचयित करा</translation>
@@ -3109,7 +3104,7 @@
 <translation id="5567989639534621706">ॲप्लिकेशन कॅश</translation>
 <translation id="5568069709869097550">साइन इन करणे शक्य नाही</translation>
 <translation id="5568144734023334204">Android स्टोरेज</translation>
-<translation id="5572851009514199876">कृपया सुरुवात करा आणि Chrome मध्‍ये साइन इन करा जेणेकरून तुम्हाला या साइट अॅक्सेस करण्‍याची परवानगी  आहे किंवा नाही ते Chrome तपासू शकेल.</translation>
+<translation id="5572851009514199876">कृपया सुरुवात करा आणि Chrome मध्‍ये साइन इन करा जेणेकरून तुम्हाला या साइट ॲक्सेस करण्‍याची परवानगी  आहे किंवा नाही ते Chrome तपासू शकेल.</translation>
 <translation id="5575473780076478375">गुप्त एक्स्टेंशन: <ph name="EXTENSION_NAME" /></translation>
 <translation id="5575528586625653441">डेमो नोंदणी विनंतीला समस्या आली.</translation>
 <translation id="557722062034137776">तुमचे डिव्हाइस रीसेट केल्याने या खात्यांवरील आपल्या Google खात्यांवर किंवा संकालित केलेल्या कोणत्याही डेटावर प्रभाव पडणार नाही. तथापि, आपल्या डिव्हाइसवर स्थानिकपणे सेव्ह केलेल्या सर्व फायली हटविल्या जातील.</translation>
@@ -3149,7 +3144,7 @@
 <translation id="5618075537869101857">अरेरे, कियोस्क ॲप्लिकेशन लाँच केले जाऊ शकले नाही.</translation>
 <translation id="5618333180342767515">(यास काही मिनिटे लागू शकतील)</translation>
 <translation id="56197088284879152">दूरस्थ डिव्हाइसवरील कनेक्शनमध्ये अडथळा आहे: " <ph name="DEVICE_NAME" /> ".</translation>
-<translation id="5620568081365989559">DevTools <ph name="FOLDER_PATH" /> मध्‍ये पूर्ण अॅक्सेसची विनंती करते. तुम्ही कोणतीही संवेदनशील माहिती उघड करत नाही हे निश्चित करा.</translation>
+<translation id="5620568081365989559">DevTools <ph name="FOLDER_PATH" /> मध्‍ये पूर्ण ॲक्सेसची विनंती करते. तुम्ही कोणतीही संवेदनशील माहिती उघड करत नाही हे निश्चित करा.</translation>
 <translation id="5620612546311710611">वापर आकडेवारी</translation>
 <translation id="5620655347161642930">पासवर्ड एक्सपोर्ट करा...</translation>
 <translation id="5623282979409330487">ही साइट तुमचा मोशन सेन्सर ॲक्सेस करत आहे.</translation>
@@ -3158,14 +3153,13 @@
 <translation id="5626134646977739690">नाव:</translation>
 <translation id="5627086634964711283">तुम्ही होम बटण क्लिक करता तेव्हा कोणते पेज दर्शविले जाते हे देखील हे नियंत्रित करते.</translation>
 <translation id="5627676517703583263">Chromeसह स्मार्ट ब्राउझ करा</translation>
-<translation id="562935524653278697">तुमच्या अॅडमिनिस्ट्रेटरने तुमचे बुकमार्क, इतिहास, संंकेतशब्द आणि अन्य सेटिंग्ज सिंक करणे अक्षम केले आहे.</translation>
+<translation id="562935524653278697">तुमच्या ॲडमिनिस्ट्रेटरने तुमचे बुकमार्क, इतिहास, संंकेतशब्द आणि अन्य सेटिंग्ज सिंक करणे अक्षम केले आहे.</translation>
 <translation id="5632566673632479864">तुमच्या <ph name="EMAIL" /> खात्याला यापुढे प्राथमिक खाते म्हणून अनुमती नाही. हे खाते <ph name="DOMAIN" /> ने व्यवस्थापित केले असल्याने, तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज या डिव्हाइस वरून साफ केले जाईल.</translation>
 <translation id="5632592977009207922">डाउनलोड करत आहे, <ph name="PERCENT_REMAINING" />% शिल्लक</translation>
 <translation id="563535393368633106">प्रवेश करण्यापूर्वी विचारा (शिफारस केलेले)</translation>
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> वापरण्यासाठी तुमच्या प्रथम <ph name="LINK_START" />नेटवर्कच्या साइन-इन पेजला भेट देणे<ph name="LINK_END" /> आवश्यक आहे, जे काही सेकंदांमध्ये आपोआप उघडेल. तसे न झाल्यास, नेटवर्क वापरणे शक्य नाही.</translation>
 <translation id="5637476008227280525">मोबाइल डेटा सुरू आहे</translation>
 <translation id="5638309510554459422">विस्तार आणि थीम <ph name="BEGIN_LINK" />Chrome वेब स्टोअर<ph name="END_LINK" /> मध्ये शोधा</translation>
-<translation id="5639152092474119692">तुमची फिंगरप्रिंट व्यवस्थापित करण्यासाठी, तुमच्या सिक्युरिटी कीचा पिन एंटर करा. तुम्हाला पिन माहीत नसल्यास, तुम्ही सिक्युरिटी की रीसेट करणे आवश्यक आहे.</translation>
 <translation id="5639549361331209298">हे पृष्ठ रीलोड करा, अधिक पर्याय पहाण्यासाठी होल्ड करा</translation>
 <translation id="5640133431808313291">सिक्युरिटी की व्यवस्थापित करा</translation>
 <translation id="5642508497713047">CRL स्वाक्षरीकर्ता</translation>
@@ -3189,7 +3183,7 @@
 <translation id="567643736130151854">सर्व डिव्हाइसवर तुमचे बुकमार्क, पासवर्ड आणि बरेच काही मिळविण्यासाठी साइन इन करा आणि सिंक सुरू करा</translation>
 <translation id="5677503058916217575">पृष्ठ भाषा:</translation>
 <translation id="5677928146339483299">अवरोधित</translation>
-<translation id="5678550637669481956"><ph name="VOLUME_NAME" /> ला रीड आणि राइट अॅक्सेस मंजूर केला आहे.</translation>
+<translation id="5678550637669481956"><ph name="VOLUME_NAME" /> ला रीड आणि राइट ॲक्सेस मंजूर केला आहे.</translation>
 <translation id="5678955352098267522"><ph name="WEBSITE_1" /> वर तुमचा डेटा वाचा</translation>
 <translation id="5684661240348539843">मालमत्ता अभिज्ञापक</translation>
 <translation id="5687326903064479980">टाइमझोन</translation>
@@ -3201,7 +3195,7 @@
 <translation id="5696679855467848181">वापरातली सद्य PPD फाइल: <ph name="PPD_NAME" /></translation>
 <translation id="5699533844376998780">एक्स्टेंशन "<ph name="EXTENSION_NAME" />" जोडले गेले आहे.</translation>
 <translation id="570043786759263127">Google Play ॲप्स आणि सेवा</translation>
-<translation id="5700836101007545240">तुमच्या अॅडमिनिस्ट्रेटरने कनेक्शन जोडा अक्षम केले आहे</translation>
+<translation id="5700836101007545240">तुमच्या ॲडमिनिस्ट्रेटरने कनेक्शन जोडा अक्षम केले आहे</translation>
 <translation id="5701080607174488915">सर्व्हरवरून धोरण मिळवताना एरर.</translation>
 <translation id="5701381305118179107">मध्यभागी</translation>
 <translation id="5702898740348134351">शोध इंजिने &amp;संपादित करा...</translation>
@@ -3220,7 +3214,7 @@
 <translation id="5722930212736070253">च्चक! Zip Archiver ला एरर आली.</translation>
 <translation id="572328651809341494">अलीकडील टॅब</translation>
 <translation id="5723508132121499792">कोणतेही पार्श्वभूमी ॲप्लिकेशन चालत नाहीत</translation>
-<translation id="5727728807527375859">एक्स्टेंशन, अॅप्लिकेशन आणि थीम तुमच्या कॉंप्युटरला हानी पोहोचवू शकतात. तुमची खात्री आहे की तुम्ही सुरू ठेवू इच्छिता?</translation>
+<translation id="5727728807527375859">एक्स्टेंशन, ॲप्लिकेशन आणि थीम तुमच्या कॉंप्युटरला हानी पोहोचवू शकतात. तुमची खात्री आहे की तुम्ही सुरू ठेवू इच्छिता?</translation>
 <translation id="5729712731028706266">&amp;दृश्य</translation>
 <translation id="5732392974455271431">तुमचे पालक तुमच्यासाठी ती अनावरोधित करू शकतात</translation>
 <translation id="5734362860645681824">संप्रेषणे</translation>
@@ -3297,7 +3291,7 @@
 <translation id="5835486486592033703"><ph name="WINDOW_TITLE" /> - कॅमेरा किंवा मायक्रोफोन रेकॉर्डिंग</translation>
 <translation id="5838456317242088717">वर्तमान गुप्त सेशन</translation>
 <translation id="5842497610951477805">ब्लूटूथ सक्षम आहे</translation>
-<translation id="5843250171025351504">तुमच्या अॅडमिनिस्ट्रेटरने नमूद केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता सुसंगत नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation>
+<translation id="5843250171025351504">तुमच्या ॲडमिनिस्ट्रेटरने नमूद केलेल्या किमान क्लायंट आवृत्तीसह तुमचे डिव्हाइस आता सुसंगत नाही. कृपया लॉग इन करण्यासाठी अपडेट करा.</translation>
 <translation id="5846200638699387931">रिलेशन सिंटॅक्स एरर: <ph name="ERROR_LINE" /></translation>
 <translation id="5849212445710944278">आधीच जोडला आहे</translation>
 <translation id="5849570051105887917">होम प्रोव्हाइडर कोड</translation>
@@ -3327,7 +3321,7 @@
 <translation id="5869029295770560994">ठीक आहे, समजले</translation>
 <translation id="5869522115854928033">सेव्ह केलेले पासवर्ड</translation>
 <translation id="5869948122057593679">तुमच्या सर्व विंडो बंद करा</translation>
-<translation id="5870086504539785141">अॅक्सेसिबिलिटी मेनू बंद करा</translation>
+<translation id="5870086504539785141">ॲक्सेसिबिलिटी मेनू बंद करा</translation>
 <translation id="5870155679953074650">हार्ड फॉल्‍ट</translation>
 <translation id="5876851302954717356">उजवीकडील नवीन टॅब</translation>
 <translation id="5877064549588274448">चॅनेल बदलले. बदल लागू करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा.</translation>
@@ -3355,7 +3349,7 @@
   <ph name="EXPONENT_HEX_DUMP" /></translation>
 <translation id="5916664084637901428">चालू</translation>
 <translation id="59174027418879706">सक्षम</translation>
-<translation id="5920543303088087579">तुमच्या अॅडमिनिस्ट्रेटरने या नेटवर्कशी कनेक्‍ट करणे अक्षम केले आहे</translation>
+<translation id="5920543303088087579">तुमच्या ॲडमिनिस्ट्रेटरने या नेटवर्कशी कनेक्‍ट करणे अक्षम केले आहे</translation>
 <translation id="5920835625712313205">ChromeOS सिस्टम इमेज लेखक</translation>
 <translation id="5924047253200400718">मदत मिळवा<ph name="SCANNING_STATUS" /></translation>
 <translation id="5924527146239595929">एक नवीन फोटो घ्या किंवा एक विद्यमान फोटो किंवा आयकन निवडा.
@@ -3380,7 +3374,7 @@
 <translation id="5946591249682680882">अहवाल आयडी <ph name="WEBRTC_LOG_REPORT_ID" /></translation>
 <translation id="5949544233750246342">फाइल पार्स करता आली नाही?</translation>
 <translation id="5955282598396714173">तुमचा पासवर्ड एक्सपायर झाला आहे. तो बदलण्यासाठी कृपया साइन आऊट करा आणि पुन्हा साइन इन करा.</translation>
-<translation id="5955721306465922729">वेबसाइटला हे अॅप्लिकेशन उघडायचे आहे.</translation>
+<translation id="5955721306465922729">वेबसाइटला हे ॲप्लिकेशन उघडायचे आहे.</translation>
 <translation id="5955809630138889698">हे डिव्हाइस फक्त ऑनलाइन डेमो मोडसाठी पात्र असू शकते. अधिक तपशिलांसाठी कृपया तुमच्या साहाय्य प्रतिनिधीशी संपर्क साधा.</translation>
 <translation id="5956585768868398362">तुम्ही अपेक्षा करत होता हे तेच शोध पृष्ठ आहे?</translation>
 <translation id="5957613098218939406">अधिक पर्याय</translation>
@@ -3403,13 +3397,12 @@
 <translation id="5976160379964388480">इतर</translation>
 <translation id="5978277834170881274">आणि मूलभूत स्पेल चेक वापरा</translation>
 <translation id="5979421442488174909"><ph name="LANGUAGE" /> मध्ये &amp;अनुवाद करा</translation>
-<translation id="5979469435153841984">पेज बुकमार्क करण्यासाठी, अॅड्रेस बारमधील स्टार क्लिक करा</translation>
+<translation id="5979469435153841984">पेज बुकमार्क करण्यासाठी, ॲड्रेस बारमधील स्टार क्लिक करा</translation>
 <translation id="5984222099446776634">अलीकडे भेट दिलेले</translation>
 <translation id="598472838394900788">{0,plural, =1{गुप्त}other{गुप्त (#)}}</translation>
 <translation id="5985458664595100876">चुकीचा URL फॉरमॅट. सपोर्ट केले जाणारे फॉरमॅट \\server\share आणि smb://server/share आहेत.</translation>
 <translation id="5990386583461751448">भाषांतर केले</translation>
-<translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या अॅडमिनिस्ट्रेटरला हे अॅप्लिकेशन काढून टाकण्यास सांगा.}}</translation>
-<translation id="5995884201513800557">तुमचे फिंगरप्रिंट सेव्ह करण्यासाठी तुमच्या सिक्युरिटी कीला स्पर्श करत राहा.</translation>
+<translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या ॲडमिनिस्ट्रेटरला हे ॲप्लिकेशन काढून टाकण्यास सांगा.}other{तुमचे वेब ब्राउझिंग चालू राहावे याची खात्री करण्यासाठी, तुमच्या ॲडमिनिस्ट्रेटरला हे ॲप्लिकेशन काढून टाकण्यास सांगा.}}</translation>
 <translation id="5997337190805127100">साइट ॲक्सेसबद्दल अधिक जाणून घ्या</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' साठी <ph name="RESULT_COUNT" /> परिणाम</translation>
 <translation id="6002458620803359783">प्राधान्य दिलेली व्हॉइस</translation>
@@ -3419,13 +3412,12 @@
 <translation id="6010869025736512584">व्हिडिओ इनपुटमध्‍ये प्रवेश करत आहे</translation>
 <translation id="6011193465932186973">फिंगरप्रिंट</translation>
 <translation id="6011449291337289699">साइट डेटा साफ करा</translation>
-<translation id="6013505829696424563">साइन इन डेटा पाहण्यासाठी, तुमच्या सिक्युरिटी कीसाठी पिन एंटर करा. तुम्हाला पिन माहीत नसल्यास, तुम्ही सिक्युरिटी की रीसेट करणे आवश्यक आहे.</translation>
 <translation id="6015266928248016057">अवैध PUK. बाकी असलेले प्रयत्न: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">वर्ष</translation>
 <translation id="6016551720757758985">मागील आवृत्तीवर परत येऊन Powerwash ची कन्फर्म करा</translation>
 <translation id="6016972670657536680">भाषा आणि कीबोर्ड बटण निवडा. सध्या निवडलेली भाषा <ph name="LANGUAGE" /> आहे.</translation>
 <translation id="6017514345406065928">हिरवा</translation>
-<translation id="6020431688553761150">हे संसाधन अॅक्सेस करण्यासाठी सर्व्हरने तुम्हाला परवानगी दिलेली नाही.</translation>
+<translation id="6020431688553761150">हे संसाधन ॲक्सेस करण्यासाठी सर्व्हरने तुम्हाला परवानगी दिलेली नाही.</translation>
 <translation id="6022526133015258832">फुल स्क्रीन उघडा</translation>
 <translation id="6022659036123304283">Chrome ला तुमच्या आवडीनुसार बनवा</translation>
 <translation id="6022705094403139349">तुमची सिक्युरिटी की पेअर करण्यासाठी तयार आहात का?</translation>
@@ -3449,7 +3441,7 @@
 <translation id="6044805581023976844"><ph name="APP_NAME" /> Chrome टॅब आणि ऑडिओ <ph name="TAB_NAME" /> सह शेअर करीत आहे.</translation>
 <translation id="6049004884579590341">पूर्ण स्क्रीनमधून बाहेर येण्यासाठी |<ph name="ACCELERATOR" />| दाबा आणि धरून ठेवा</translation>
 <translation id="6049065490165456785">अंतर्गत कॅमेर्‍यातील फोटो</translation>
-<translation id="6051354611314852653">अरेरे! सिस्टमला या डिव्हाइसाठी API अॅक्सेस अॉथोराइझ करण्यात अपयश आले.</translation>
+<translation id="6051354611314852653">अरेरे! सिस्टमला या डिव्हाइसाठी API ॲक्सेस ऑथोराइझ करण्यात अपयश आले.</translation>
 <translation id="6052976518993719690">SSL प्रमाणपत्र अधिकृतता</translation>
 <translation id="6053401458108962351">&amp;ब्राउझिंग डेटा साफ करा...</translation>
 <translation id="6055171183283175969">तुम्ही एंटर केलेला पासवर्ड चुकीचा आहे.</translation>
@@ -3465,8 +3457,8 @@
 <translation id="6071181508177083058">पासवर्ड कन्फर्म करा</translation>
 <translation id="6071576563962215370">सिस्टमला डिव्हाइस इंस्टॉलेशन वेळ विशेषता लॉक स्थापित करता आले नाही.</translation>
 <translation id="6073451960410192870">रेकॉर्डिंग थांबवा</translation>
-<translation id="6073903501322152803">अॅक्सेसिबिलिटी वैशिष्ट्ये जोडा</translation>
-<translation id="6075731018162044558">अरेरे! या डिव्हाइसाठी दीर्घ-मुदतीचा API अॅक्सेस टोकन मिळवण्यात सिस्टम अयशस्वी झाली.</translation>
+<translation id="6073903501322152803">ॲक्सेसिबिलिटी वैशिष्ट्ये जोडा</translation>
+<translation id="6075731018162044558">अरेरे! या डिव्हाइसाठी दीर्घ-मुदतीचा API ॲक्सेस टोकन मिळवण्यात सिस्टम अयशस्वी झाली.</translation>
 <translation id="6075907793831890935"><ph name="HOSTNAME" /> नावाच्या डिव्हाइससह डेटा अदलाबदल करा</translation>
 <translation id="6076175485108489240">स्‍थान वापरा. स्थान परवानगी असलेल्या अ‍ॅप्स आणि सेवांना तुमच्या डिव्हाइसचे स्थान वापरण्याची अनुमती द्या. Google अधूनमधून स्थान डेटा गोळा करू शकते आणि स्थान अचूकता व स्थानावर आधारित सेवांमध्ये सुधारणा करण्यासाठी हा डेटा निनावी वापरू शकते. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation>
 <translation id="6076448957780543068">हा स्क्रीनशॉट समाविष्ट करा</translation>
@@ -3479,7 +3471,7 @@
 <translation id="6080515710685820702">शेअर केलेला काँप्युटर वापरत आहात का? गुप्त विंडो उघडण्याचा प्रयत्न करा.</translation>
 <translation id="6080689532560039067">तुमची प्रणाली वेळ तपासा</translation>
 <translation id="6082651258230788217">टूलबारमध्ये दर्शवा</translation>
-<translation id="6086846494333236931">तुमच्या अॅडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation>
+<translation id="6086846494333236931">तुमच्या ॲडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation>
 <translation id="6087960857463881712">छान चेहरा</translation>
 <translation id="6091761513005122595">शेअर यशस्वीरीत्‍‍‍‍या माउंट केले आहे.</translation>
 <translation id="6093888419484831006">अपडेट रद्द करत आहे...</translation>
@@ -3510,7 +3502,7 @@
 <translation id="6124650939968185064">या एक्स्टेंशनवर अवलंबून असलेले खालील एक्स्टेंशन:</translation>
 <translation id="6124698108608891449">या साइटला आणखी परवानग्यांची आवश्यकता आहे.</translation>
 <translation id="6125479973208104919">दुर्दैवाने, तुम्हाला या <ph name="DEVICE_TYPE" /> वर तुमचे खाते पुन्हा जोडावे लागेल.</translation>
-<translation id="6129691635767514872">निवडलेला डेटा Chrome आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्‍या Google खात्यामध्ये Google च्या इतर सेवांमधील शोध आणि अॅक्टिव्हिटी यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर असू शकतात.</translation>
+<translation id="6129691635767514872">निवडलेला डेटा Chrome आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्‍या Google खात्यामध्ये Google च्या इतर सेवांमधील शोध आणि ॲक्टिव्हिटी यासारख्या ब्राउझिंग इतिहासाची इतर स्वरूपे <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर असू शकतात.</translation>
 <translation id="6129938384427316298">Netscape सर्टिफिकेट टिप्पणी</translation>
 <translation id="6129953537138746214">जागा</translation>
 <translation id="6136114942382973861">डाउनलोड बार बंद करा</translation>
@@ -3533,7 +3525,7 @@
 <translation id="6156323911414505561">बुकमार्क बार दर्शवा</translation>
 <translation id="6156863943908443225">स्क्रिप्ट कॅशे</translation>
 <translation id="6156960295318603523">भाषा सेटिंग्ज</translation>
-<translation id="6160625263637492097">अॉथेंटिकेशनसाठी प्रमाणपत्रे द्या</translation>
+<translation id="6160625263637492097">ऑथेंटिकेशनसाठी प्रमाणपत्रे द्या</translation>
 <translation id="6163363155248589649">&amp;सामान्य</translation>
 <translation id="6163522313638838258">सर्व विस्तार करा...</translation>
 <translation id="6164005077879661055">एकदा हा पर्यवेक्षित वापरकर्ता काढल्यानंतर पर्यवेक्षित वापरकर्त्याशी संबद्ध सर्व फायली आणि स्थानिक डेटा कायमचा हटवला जाईल. या पर्यवेक्षित वापरकर्त्यासाठी भेट दिलेल्या वेबसाइट आणि सेटिंग्ज तरीही <ph name="MANAGEMENT_URL" /> वर व्यवस्थापकाद्वारे दृश्यमान असू शकतात.</translation>
@@ -3559,7 +3551,7 @@
 <translation id="6207200176136643843">झूम स्तर डीफॉल्टवर रीसेट करा</translation>
 <translation id="6207282396926186323"><ph name="APP_NAME" /> इंस्टॉल करा (Linux अ‍ॅप)</translation>
 <translation id="6207937957461833379">देश/प्रदेश</translation>
-<translation id="6208521041562685716">मोबाइल डेटा अॅक्टिव्हेट करत आहे</translation>
+<translation id="6208521041562685716">मोबाइल डेटा ॲक्टिव्हेट करत आहे</translation>
 <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: सिंक काम करत नाही</translation>
 <translation id="6212039847102026977">प्रगत नेटवर्क वैशिष्ट्ये दर्शवा</translation>
 <translation id="6212168817037875041">डिस्प्ले बंद करा</translation>
@@ -3580,11 +3572,11 @@
 <translation id="6232116551750539448"><ph name="NAME" /> वरील कनेक्शन गमावले गेले आहे</translation>
 <translation id="6233154960150021497">कीबोर्डऐवजी व्हॉइस वापरण्यासाठी डीफॉल्ट</translation>
 <translation id="6234474535228214774">इंस्टॉल करणे प्रलंबित आहे</translation>
-<translation id="6237816943013845465">तुम्हाला स्क्रीन रिझोल्युशन अॅडजस्ट करण्याची अनुमती देते</translation>
+<translation id="6237816943013845465">तुम्हाला स्क्रीन रिझोल्युशन ॲडजस्ट करण्याची अनुमती देते</translation>
 <translation id="6238767809035845642">मजकूर इतर डिव्हाइसवरून शेअर केला आहे</translation>
 <translation id="6238923052227198598">लॉक स्क्रीनवर नवीनतम टीप ठेवा</translation>
 <translation id="6239558157302047471">रीलोड आणि फ्रेम करा</translation>
-<translation id="6241530762627360640">तुमच्या सिस्टमशी जोडलेल्या ब्लूटूथ डिव्हाइसविषयीची माहिती अॅक्सेस करा आणि जवळपासचे ब्लूटूथ डिव्हाइस शोधा.</translation>
+<translation id="6241530762627360640">तुमच्या सिस्टमशी जोडलेल्या ब्लूटूथ डिव्हाइसविषयीची माहिती ॲक्सेस करा आणि जवळपासचे ब्लूटूथ डिव्हाइस शोधा.</translation>
 <translation id="6242589501614145408">तुमची सिक्युरिटी की रीसेट करा</translation>
 <translation id="6242852299490624841">या टॅबवर फोकस करा</translation>
 <translation id="6243280677745499710">सध्या सेट केला आहे</translation>
@@ -3619,7 +3611,7 @@
 <translation id="6285120908535925801">{NUM_PRINTER,plural, =1{आपल्या नेटवर्कवरील नवीन प्रिंटर}other{आपल्या नेटवर्कवरील नवीन प्रिंटर}}</translation>
 <translation id="6286708577777130801">सेव्ह केलेले पासवर्ड तपशील</translation>
 <translation id="6289452883081499048">Play सारख्या पर्सनलाइझ Google सेवा</translation>
-<translation id="6291949900244949761">साइटला केव्हा USB डिव्हाइस अॅक्सेस करायचे आहेत हे विचारा (शिफारस केलेले)</translation>
+<translation id="6291949900244949761">साइटला केव्हा USB डिव्हाइस ॲक्सेस करायचे आहेत हे विचारा (शिफारस केलेले)</translation>
 <translation id="6291953229176937411">फाइंडर मध्ये &amp;दर्शवा</translation>
 <translation id="6295158916970320988">सर्व साइट</translation>
 <translation id="6295855836753816081">सेव्ह करत आहे...</translation>
@@ -3639,7 +3631,7 @@
 <translation id="6317318380444133405">आता सपोर्ट करत नाही.</translation>
 <translation id="6317369057005134371">ॲप्लिकेशन विंडोसाठी प्रतीक्षा करत आहे...</translation>
 <translation id="6318407754858604988">डाउनलोड सुरू झाले</translation>
-<translation id="6318944945640833942">प्रिंटर शोधू शकलो नाही. कृपया प्रिंटर अॅड्रेस पुन्हा एंटर करा.</translation>
+<translation id="6318944945640833942">प्रिंटर शोधू शकलो नाही. कृपया प्रिंटर ॲड्रेस पुन्हा एंटर करा.</translation>
 <translation id="6322653941595359182">तुमच्या Chromebook वरून एसएमएस पाठवा आणि मिळवा</translation>
 <translation id="6324916366299863871">शॉर्टकट संपादित करा</translation>
 <translation id="6325191661371220117">स्वयं-लाँच अक्षम करा</translation>
@@ -3652,7 +3644,7 @@
 <translation id="6340071272923955280">इंटरनेट प्रिंट प्रोटोकॉल (IPPS)</translation>
 <translation id="6340526405444716530">पर्सनलायझेशन</translation>
 <translation id="6341850831632289108">तुमचे प्रत्यक्ष स्थान तपासा</translation>
-<translation id="6344170822609224263">नेटवर्क कनेक्शनच्या सूची अॅक्सेस करा</translation>
+<translation id="6344170822609224263">नेटवर्क कनेक्शनच्या सूची ॲक्सेस करा</translation>
 <translation id="6349101878882523185"><ph name="APP_NAME" /> इंस्टॉल करा</translation>
 <translation id="6349170655202535379">सिंक कार्य करत नाही. साइन आउट करून पुन्हा साइन इन करून पहा.</translation>
 <translation id="6351063337294363751">तुम्ही या मेनूमधून तुमचा ब्राउझिंग डेटा साफ करू शकता</translation>
@@ -3701,7 +3693,7 @@
 <translation id="6416743254476733475">अनुमती द्या किंवा तुमच्या कॉंप्युटरवर ब्लॉक करा.</translation>
 <translation id="6417265370957905582">Google साहाय्यक</translation>
 <translation id="6418160186546245112"><ph name="IDS_SHORT_PRODUCT_NAME" /> च्या पूर्वी स्‍थापित केलेल्या आवृत्तीवर परत करत आहे</translation>
-<translation id="6418481728190846787">सर्व अॅप्ससाठी अॅक्सेस कायमचा काढा</translation>
+<translation id="6418481728190846787">सर्व ॲप्ससाठी ॲक्सेस कायमचा काढा</translation>
 <translation id="6418511932144861495">महत्त्वाचे अपडेट इंस्टॉल करा</translation>
 <translation id="6419288379019356534">हे डिव्हाइस <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> द्वारे व्यवस्थापित केले जाते.
     <ph name="LINE_BREAK" />
@@ -3752,7 +3744,7 @@
 <translation id="6488384360522318064">भाषा निवडा</translation>
 <translation id="648927581764831596">काहीही उपलब्ध नाही</translation>
 <translation id="6490471652906364588">USB-C डिव्‍हाइस (उजवे पोर्ट)</translation>
-<translation id="6491376743066338510">अॉथोरायझेशन अयशस्वी झाले</translation>
+<translation id="6491376743066338510">ऑथोरायझेशन अयशस्वी झाले</translation>
 <translation id="6492313032770352219">डिस्कवरील आकार:</translation>
 <translation id="6494445798847293442">प्रमाणीकरण अधिकृतता नाही</translation>
 <translation id="649454645705377674">बंद करा</translation>
@@ -3834,7 +3826,7 @@
 <translation id="6622980291894852883">इमेज अवरोधित करणे सुरू ठेवा</translation>
 <translation id="6624687053722465643">गोडवा</translation>
 <translation id="6628328486509726751">अपलोड केलेली <ph name="WEBRTC_LOG_UPLOAD_TIME" /></translation>
-<translation id="6630752851777525409">तुमच्यावतीने स्वत:स प्रमाणित करण्‍यासाठी प्रमाणपत्रामध्‍ये <ph name="EXTENSION_NAME" /> कायमचा अॅक्सेस इच्छितो.</translation>
+<translation id="6630752851777525409">तुमच्यावतीने स्वत:स प्रमाणित करण्‍यासाठी प्रमाणपत्रामध्‍ये <ph name="EXTENSION_NAME" /> कायमचा ॲक्सेस इच्छितो.</translation>
 <translation id="6635956300022133031">टेक्‍स्‍ट टू स्‍पीच व्हॉइस निवडा आणि कस्टमाइझ करा</translation>
 <translation id="6639554308659482635">SQLite मेमरी</translation>
 <translation id="6641138807883536517">यादृच्छिकपणे तयार केलेला सुरक्षित मॉड्युल पासवर्ड उपलब्ध नाही. पॉवरवॉशनंतर असे होणे स्‍वाभाविक आहे.</translation>
@@ -3953,7 +3945,7 @@
 <translation id="6811034713472274749">पेज पाहाण्यासाठी तयार आहे</translation>
 <translation id="6812349420832218321"><ph name="PRODUCT_NAME" /> मूळ म्हणून चालवणे शक्य नाही.</translation>
 <translation id="6812841287760418429">बदल ठेवा</translation>
-<translation id="6817174620439930047">MIDI डिव्हाइसमध्‍ये अॅक्सेस करण्यासाठी जेव्हा एखादी साइट सिस्टम अनन्य मेसेज वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
+<translation id="6817174620439930047">MIDI डिव्हाइसमध्‍ये ॲक्सेस करण्यासाठी जेव्हा एखादी साइट सिस्टम अनन्य मेसेज वापरू इच्छिते तेव्हा विचारा (शिफारस केलेले)</translation>
 <translation id="682123305478866682">डेस्कटॉप कास्ट करा</translation>
 <translation id="6823506025919456619">तुमची डिव्हाइसेस पाहण्यासाठी तुम्हाला Chrome वर साइन इन करणे आवश्यक आहे</translation>
 <translation id="6824564591481349393">&amp;ईमेल पत्ता कॉपी कराil Address</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">पाठविण्यापूर्वी विचारा</translation>
 <translation id="6840184929775541289">प्रमाणन अधिकृतता नाही</translation>
 <translation id="6841186874966388268">एरर</translation>
-<translation id="6841187140911216178">साइन इन डेटा पाहण्यासाठी, तुमची सिक्युरिटी की घाला आणि स्पर्श करा</translation>
 <translation id="6843423766595476978">Ok Google सर्व तयार आहे</translation>
 <translation id="6845038076637626672">वाढवलेले उघडा</translation>
 <translation id="6845325883481699275">Chrome सुरक्षेमध्ये सुधारणा करण्यात मदत करा</translation>
@@ -3987,7 +3978,7 @@
 <translation id="6857699260879628349">कॉन्फिगरेशन माहिती मिळवा</translation>
 <translation id="6860097299815761905">प्रॉक्सी सेटिंग्ज...</translation>
 <translation id="6860427144121307915">एका टॅबमध्ये उघडा</translation>
-<translation id="6865313869410766144">अॉटोफिल फॉर्म डेटा</translation>
+<translation id="6865313869410766144">ऑटोफिल फॉर्म डेटा</translation>
 <translation id="6865708901122695652">(<ph name="WEBRTC_EVENT_LOG_COUNT" />) WebRTC कार्यक्रम नोंदी</translation>
 <translation id="686664946474413495">रंगाचे तापमान</translation>
 <translation id="6870888490422746447">यासह शेअर करण्‍यासाठी एक ॲप निवडा:</translation>
@@ -4012,7 +4003,7 @@
 <translation id="6902066522699286937">पूर्वावलोकनासाठी व्हॉइस</translation>
 <translation id="6902336033320348843">विभाग सपोर्ट करत नाही: <ph name="ERROR_LINE" /></translation>
 <translation id="6902837902700739466">डोमेनशी डिव्हाइस जोडा</translation>
-<translation id="6904344821472985372">फाइल अॅक्सेस मागे घ्या</translation>
+<translation id="6904344821472985372">फाइल ॲक्सेस मागे घ्या</translation>
 <translation id="6904655473976120856">बाहेर पडण्यासाठी अ‍ॅप बटण दाबा</translation>
 <translation id="6910211073230771657">हटवला</translation>
 <translation id="6910240653697687763"><ph name="URL" /> ला तुमच्या MIDI डिव्हाइसचे पूर्ण नियंत्रण मिळवायचे आहे</translation>
@@ -4031,7 +4022,7 @@
 <translation id="6923633482430812883">शेअर माउंट करताना एरर आली. कृपया तुम्ही कनेक्ट करत असलेला फाइल सर्व्हर SMBv2 किंवा त्यानंतरच्या आवृत्तीला सपोर्ट करतो की नाही हे तपासा.</translation>
 <translation id="6930036377490597025">बाह्य सिक्युरिटी की किंवा बिल्ट-इन सेन्सर</translation>
 <translation id="693807610556624488">लिहा ऑपरेशन यावर विशेषतांची कमाल लांबी ओलांडते: " <ph name="DEVICE_NAME" /> ".</translation>
-<translation id="6941937518557314510">कृपया तुमच्या सर्टिफिकेटसह <ph name="HOST_NAME" /> चे अॉथेंटिकेशन करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
+<translation id="6941937518557314510">कृपया तुमच्या सर्टिफिकेटसह <ph name="HOST_NAME" /> चे ऑथेंटिकेशन करण्यासाठी <ph name="TOKEN_NAME" /> मध्ये साइन इन करा.</translation>
 <translation id="6943176775188458830">प्रिंट रद्द करा</translation>
 <translation id="6943836128787782965">HTTP अयशस्वी झाले</translation>
 <translation id="6945221475159498467">निवडा</translation>
@@ -4062,7 +4053,7 @@
 <translation id="6979044105893951891">लाँच करा आणि व्यवस्थापित केलेल्या अतिथी सत्रांमधून बाहेर पडा</translation>
 <translation id="6979440798594660689">निःशब्द करा (डीफॉल्ट)</translation>
 <translation id="6979737339423435258">पूर्णवेळ</translation>
-<translation id="6981982820502123353">अॅक्सेसिबिलिटी</translation>
+<translation id="6981982820502123353">ॲक्सेसिबिलिटी</translation>
 <translation id="6983783921975806247">नोंदणीकृत OID</translation>
 <translation id="6984299437918708277">साइन-इन स्क्रीनवर तुमच्या खात्यासाठी डिस्प्ले करण्याकरिता एक चित्र निवडा</translation>
 <translation id="6985235333261347343">Microsoft Key Recovery Agent</translation>
@@ -4100,7 +4091,7 @@
 <translation id="7031608529463141342"><ph name="WINDOW_TITLE" /> - सिरीअल पोर्ट कनेक्ट केला आहे</translation>
 <translation id="7031962166228839643">TPM तयार केले जात आहे, कृपया प्रतीक्षा करा (याला काही मिनिटे लागू शकतात)...</translation>
 <translation id="7037509989619051237">पूर्वावलोकनासाठी मजकूर</translation>
-<translation id="7039326228527141150"><ph name="VENDOR_NAME" /> कडील USB डिव्हाइस अॅक्सेस करा</translation>
+<translation id="7039326228527141150"><ph name="VENDOR_NAME" /> कडील USB डिव्हाइस ॲक्सेस करा</translation>
 <translation id="7039912931802252762">Microsoft Smart Card Logon</translation>
 <translation id="7040230719604914234">ऑपरेटर</translation>
 <translation id="7043108582968290193">झाले! कंपॅटिबल नसलेली कोणतीही ॲप्लिकेशन सापडली नाहीत.</translation>
@@ -4138,7 +4129,7 @@
 <translation id="7085389578340536476">Chrome ला ऑडिओ रेकॉर्ड करण्‍याची अनुमती द्यायची का?</translation>
 <translation id="7088434364990739311">अपडेट तपासणी सुरू होण्‍यात अयशस्वी (एरर कोड <ph name="ERROR" />).</translation>
 <translation id="7088561041432335295">Zip Archiver - Files ॲपमध्ये झिप फायली उघडा आणि पॅक करा.</translation>
-<translation id="7088674813905715446">हे डिव्‍हाइस अॅडमिनिस्ट्रेटरद्वारे तरतूद नसलेल्‍या स्‍थितीमध्ये ठेवले गेले आहे. ते नोंदणीकरिता सक्षम करण्‍यासाठी, कृपया तुमच्या अॅडमिनिस्ट्रेटरने डिव्‍हाइस एका प्रलंबित स्‍थितीमध्‍ये ठेवावे.</translation>
+<translation id="7088674813905715446">हे डिव्‍हाइस ॲडमिनिस्ट्रेटरद्वारे तरतूद नसलेल्‍या स्‍थितीमध्ये ठेवले गेले आहे. ते नोंदणीकरिता सक्षम करण्‍यासाठी, कृपया तुमच्या ॲडमिनिस्ट्रेटरने डिव्‍हाइस एका प्रलंबित स्‍थितीमध्‍ये ठेवावे.</translation>
 <translation id="7092474863625458670">Voice Match तुमचा आवाज वापरून थेट तुमचा असिस्टंट अ‍ॅक्सेस करू देते.
     <ph name="BR" />
     <ph name="BEGIN_BOLD" />लक्षात ठेवा:<ph name="END_BOLD" /> समान आवाज किंवा रेकॉर्डिंग देखील तुमचे असिस्टंट अ‍ॅक्सेस करू शकते. तुम्ही नंतर असिस्टंट सेटिंग्जमध्ये Voice Match परवानगी बंद करून ती काढून टाकू शकता.</translation>
@@ -4179,7 +4170,7 @@
 <translation id="7138678301420049075">इतर</translation>
 <translation id="713888829801648570">क्षमस्‍व, तुम्ही ऑफलाइन असल्‍याने तुमचा पासवर्ड पडताळणी करणे शक्य झाले नाही.</translation>
 <translation id="7140928199327930795">कोणतीही अन्य उपलब्ध डिव्हाइसेस नाहीत.</translation>
-<translation id="7141105143012495934">तुमचे खाते तपशील प्राप्त करणे शक्य झाले नसल्याने साइन-इन अयशस्वी झाले. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
+<translation id="7141105143012495934">तुमचे खाते तपशील प्राप्त करणे शक्य झाले नसल्याने साइन-इन अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
 <translation id="7143092389027215216">डेमो मोड सुरू करत आहे</translation>
 <translation id="7143207342074048698">कनेक्ट करीत आहे</translation>
 <translation id="7144878232160441200">पुन्हा प्रयत्न करा</translation>
@@ -4205,7 +4196,7 @@
 <translation id="7189234443051076392">तुमच्या डिव्हाइसवर पुरेशी जागा असल्याची खात्री करा</translation>
 <translation id="7189965711416741966">फिंगरप्रिंट जोडले.</translation>
 <translation id="7191159667348037">अज्ञात मुद्रक (USB)</translation>
-<translation id="7193051357671784796">हे अॅप तुमच्या संस्थेमध्ये जोडले गेले आहे. इंस्टॉल करणे पूर्ण करण्यासाठी अॅप रीस्टार्ट करा.</translation>
+<translation id="7193051357671784796">हे ॲप तुमच्या संस्थेमध्ये जोडले गेले आहे. इंस्टॉल करणे पूर्ण करण्यासाठी ॲप रीस्टार्ट करा.</translation>
 <translation id="7193374945610105795"><ph name="ORIGIN" /> चे कोणतेही पासवर्ड सेव्ह केलेले नाहीत</translation>
 <translation id="7196913789568937443">Google ड्राइव्ह मध्ये बॅकअप घ्या. तुमचा डेटा कधीही सहजपणे रिस्टोअर करा किंवा डिव्हाइस बदला. तुमच्या बॅकअपमध्ये ॲप डेटाचा समावेश असतो. तुमचे बॅकअप Google वर अपलोड केले आहेत आणि ते तुमचा Google खाते पासवर्ड वापरून एंक्रिप्ट केले आहेत. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation>
 <translation id="7197190419934240522">प्रत्येक वेळी ब्राउझ करताना Google शोध आणि Google स्मार्ट मिळवा</translation>
@@ -4250,7 +4241,7 @@
 <translation id="7245628041916450754"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (उत्कृष्‍ट)</translation>
 <translation id="7246230585855757313">तुमची सिक्युरिटी की पुन्हा घाला आणि पुन्हा प्रयत्न करा</translation>
 <translation id="7246947237293279874">FTP प्रॉक्सी</translation>
-<translation id="725109152065019550">क्षमस्व, तुमच्या अॅडमिनिस्ट्रेटरने तुमच्या खात्यावरील बाह्य स्टोरेज अक्षम केले आहे.</translation>
+<translation id="725109152065019550">क्षमस्व, तुमच्या ॲडमिनिस्ट्रेटरने तुमच्या खात्यावरील बाह्य स्टोरेज अक्षम केले आहे.</translation>
 <translation id="7251346854160851420">डीफॉल्ट वॉलपेपर</translation>
 <translation id="7253521419891527137">&amp;अधिक जाणून घ्या</translation>
 <translation id="7254554697254365959">हे पृष्‍ठ भाषांतरित केले जाऊ शकले नाही.</translation>
@@ -4264,11 +4255,11 @@
 <translation id="7257173066616499747">वाय-फाय नेटवर्क</translation>
 <translation id="725758059478686223">प्रिंटिंग सेवा</translation>
 <translation id="7257666756905341374">तुम्ही कॉपी आणि पेस्ट करता तो डेटा वाचा</translation>
-<translation id="7258225044283673131">अॅप्लिकेशन प्रतिसाद देत नाही. अॅप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation>
+<translation id="7258225044283673131">ॲप्लिकेशन प्रतिसाद देत नाही. ॲप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation>
 <translation id="7258697411818564379">तुमचा पिन जोडला आहे</translation>
 <translation id="7262004276116528033">ही साइन-इन सेवा <ph name="SAML_DOMAIN" /> द्वारे होस्ट केली जाते</translation>
 <translation id="7268127947535186412">हे सेटिंग डिव्हाइसच्या मालकाद्वारे व्यवस्थापित केले जाते.</translation>
-<translation id="7270858098575133036">MIDI डिव्हाइस अॅक्सेस करण्यासाठी जेव्हा एखादी साइट सिस्टम अनन्य मेसेज वापरू इच्छिते तेव्हा विचारा</translation>
+<translation id="7270858098575133036">MIDI डिव्हाइस ॲक्सेस करण्यासाठी जेव्हा एखादी साइट सिस्टम अनन्य मेसेज वापरू इच्छिते तेव्हा विचारा</translation>
 <translation id="7272674038937250585">वर्णन दिलेले नाही</translation>
 <translation id="7273110280511444812"><ph name="DATE" /> रोजी अंतिम संलग्न केले</translation>
 <translation id="727441411541283857"><ph name="PERCENTAGE" />% - पूर्ण होण्‍यास <ph name="TIME" /></translation>
@@ -4278,7 +4269,7 @@
 <translation id="7280649757394340890">टेक्‍स्‍ट टू स्‍पीच व्हॉइस सेटिंग्ज</translation>
 <translation id="7280877790564589615">परवानगीची विनंती केली</translation>
 <translation id="7282992757463864530">इन्फोबार</translation>
-<translation id="7287143125007575591">अॅक्सेस नाकारला.</translation>
+<translation id="7287143125007575591">ॲक्सेस नाकारला.</translation>
 <translation id="7287411021188441799">डीफॉल्ट बॅकग्राउंड रिस्टोअर करा</translation>
 <translation id="7288013116963835700"><ph name="DEVICE_TYPE" /> साठी Linux काढून टाका</translation>
 <translation id="7288676996127329262"><ph name="HORIZONTAL_DPI" />x<ph name="VERTICAL_DPI" /> dpi</translation>
@@ -4301,7 +4292,7 @@
 <translation id="7308002049209013926">नवीन अ‍ॅप्स आणि आक्टिव्हीटींवर त्वरित जाण्यासाठी लाँचर वापरा. येथे कीबोर्डने येण्यासाठी, Alt + Shift + L दाबा.</translation>
 <translation id="7309257895202129721">नियंत्रणे &amp;दर्शवा</translation>
 <translation id="7310598146671372464">लॉग इन करता आले नाही. सर्व्हर नमूद केलेल्या Kerberos एंक्रिप्शन प्रकारांना सपोर्ट करत नाही. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
-<translation id="7311079019872751559">सॅंडबॉक्स न केलेला प्लगिन अॅक्सेस</translation>
+<translation id="7311079019872751559">सॅंडबॉक्स न केलेला प्लगिन ॲक्सेस</translation>
 <translation id="73174032666024687"><ph name="NUMBER_OF_SHEETS" /> <ph name="SHEETS_LABEL" /></translation>
 <translation id="7321545336522791733">सर्व्हर आवाक्याबाहेर आहे</translation>
 <translation id="7324297612904500502">बीटा फोरम</translation>
@@ -4309,7 +4300,7 @@
 <translation id="7325437708553334317">हाय काँट्रास्ट एक्स्टेंशन</translation>
 <translation id="7328699668338161242">असिस्टंट तुमचा आवाज आधीपासूनच ओळखते</translation>
 <translation id="7328867076235380839">चुकीचे कॉंबिनेशन</translation>
-<translation id="7329154610228416156">सुरक्षित नसलेली URL (<ph name="BLOCKED_URL" />) वापरण्यासाठी साइन-इन कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="7329154610228416156">सुरक्षित नसलेली URL (<ph name="BLOCKED_URL" />) वापरण्यासाठी साइन-इन कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="7334190995941642545">Smart Lock सध्या अनुपलब्ध आहे. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="7334274148831027933">डॉक केलेले भिंग सुरू करा</translation>
 <translation id="7335974957018254119">यासाठी स्पेल चेक वापरा</translation>
@@ -4362,7 +4353,7 @@
 <translation id="7407430846095439694">इंपोर्ट करा आणि प्रतिबद्ध करा</translation>
 <translation id="7409549334477097887">आणखी मोठी</translation>
 <translation id="7409836189476010449">फ्लॅश रन करा</translation>
-<translation id="7410344089573941623"><ph name="HOST" /> तुमच्या कॅमेरा आणि मायक्रोफोन अॅक्सेस करू इच्छित असल्यास विचारा</translation>
+<translation id="7410344089573941623"><ph name="HOST" /> तुमच्या कॅमेरा आणि मायक्रोफोन ॲक्सेस करू इच्छित असल्यास विचारा</translation>
 <translation id="741204030948306876">होय, मला मान्य आहे</translation>
 <translation id="7412226954991670867">GPU मेमरी</translation>
 <translation id="7414464185801331860">१८x</translation>
@@ -4384,12 +4375,12 @@
 <translation id="7441830548568730290">इतर वापरकर्ते</translation>
 <translation id="7442465037756169001">तुमचे Hangouts Meet hardware सेट अप होण्यासाठी सज्ज आहे.</translation>
 <translation id="744341768939279100">एक नवीन प्रोफाईल तयार करा</translation>
-<translation id="7443806024147773267">तुम्ही तुमच्या Google खात्यामध्ये कधीही साइन इन करता तेव्हा तुमचे पासवर्ड अॅक्सेस करा</translation>
+<translation id="7443806024147773267">तुम्ही तुमच्या Google खात्यामध्ये कधीही साइन इन करता तेव्हा तुमचे पासवर्ड ॲक्सेस करा</translation>
 <translation id="7444046173054089907">ही साइट अवरोधित केली आहे</translation>
 <translation id="7444983668544353857"><ph name="NETWORKDEVICE" /> अक्षम करा</translation>
 <translation id="7448430327655618736">अ‍ॅप्स आपोआप इंस्टॉल करा</translation>
 <translation id="7450761244949417357">आता <ph name="ALTERNATIVE_BROWSER_NAME" /> मध्ये उघडत आहे</translation>
-<translation id="7453008956351770337">हा प्रिंटर निवडून, तुम्ही खालील एक्स्टेंशनला तुमच्या प्रिंटरमध्‍ये अॅक्सेस करण्‍याची परवानगी देत आहात:</translation>
+<translation id="7453008956351770337">हा प्रिंटर निवडून, तुम्ही खालील एक्स्टेंशनला तुमच्या प्रिंटरमध्‍ये ॲक्सेस करण्‍याची परवानगी देत आहात:</translation>
 <translation id="7456142309650173560">dev</translation>
 <translation id="7456847797759667638">स्थान उघडा...</translation>
 <translation id="7458168200501453431">Google शोध मध्ये वापरत असेलेले स्पेल चेकर वापरले जाते. तुम्ही ब्राउझरमध्ये टाइप करत असलेला मजकूर Google कडे पाठवला जातो.</translation>
@@ -4439,7 +4430,7 @@
 <translation id="7529411698175791732">तुमचे इंटरनेट कनेक्शन तपासा. समस्या कायम राहिल्यास, साइन आउट करून आणि पुन्हा साइन इन करून पहा.</translation>
 <translation id="7530016656428373557">डिस्चार्ज रेट वॉट्स मध्ये</translation>
 <translation id="7531779363494549572">सेटिंग्‍ज &gt; ॲप्‍स आणि सूचना &gt; सूचना वर जा.</translation>
-<translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही. अॅप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation>
+<translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही. ॲप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation>
 <translation id="7539856059004947393">ब्लूटूथ सिक्युरिटी की</translation>
 <translation id="7540972813190816353">अपडेट तपासताना एक एरर आली: <ph name="ERROR" /></translation>
 <translation id="7543104066686362383">या <ph name="IDS_SHORT_PRODUCT_NAME" /> डिव्‍हाइसवर डीबगिंग वैशिष्‍ट्ये सुरू करा</translation>
@@ -4482,7 +4473,7 @@
 <translation id="7600965453749440009">कधीही <ph name="LANGUAGE" /> चा भाषांतर करु नका</translation>
 <translation id="760197030861754408">कनेक्ट करण्यासाठी <ph name="LANDING_PAGE" /> वर जा.</translation>
 <translation id="7602079150116086782">अन्य डिव्हाइसेसवरील कोणतेही टॅब नाहीत</translation>
-<translation id="7604942372593434070">तुमची ब्राउझिंग अॅक्टिव्हिटी अॅक्सेस करा</translation>
+<translation id="7604942372593434070">तुमची ब्राउझिंग ॲक्टिव्हिटी ॲक्सेस करा</translation>
 <translation id="7605594153474022051">संकालन कार्य करत नाही</translation>
 <translation id="7606992457248886637">अधिकारी</translation>
 <translation id="7607002721634913082">विराम द्या</translation>
@@ -4519,7 +4510,7 @@
 <translation id="7652954539215530680">पिन तयार करा</translation>
 <translation id="7654941827281939388">हे खाते या कॉंप्युटरवर याआधीच वापरण्‍यात येत आहे.</translation>
 <translation id="7658239707568436148">रद्द करा</translation>
-<translation id="7659584679870740384">तुम्ही हे डिव्हाइस वापरण्यासाठी प्राधिकृत नाही. कृपया साइन इन करण्याच्या परवानगीसाठी अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="7659584679870740384">तुम्ही हे डिव्हाइस वापरण्यासाठी प्राधिकृत नाही. कृपया साइन इन करण्याच्या परवानगीसाठी ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="7661259717474717992">कुकी डेटा सेव्ह करण्यास आणि वाचण्यास साइटना अनुमती द्या</translation>
 <translation id="7661451191293163002">नोंदणी सर्टिफिकेट प्राप्त करणे शक्य झाले नाही.</translation>
 <translation id="7662283695561029522">कॉन्फिगर करण्यासाठी टॅप करा</translation>
@@ -4534,9 +4525,9 @@
 <translation id="7678280409648629969">गुप्त मोडमधून बाहेर आल्यावर साइन इन डेटा Chrome मध्ये स्टोअर केला जाईल. हे तुम्हाला पुन्हा या वेबसाइटसह टच आयडीचा वापर करू देईल.</translation>
 <translation id="7681095912841365527">साइट ब्लूटूथ वापरू शकते</translation>
 <translation id="7683373461016844951">पुढे सुरू ठेवण्यासाठी, ठीक आहे वर क्लिक करा, नंतर तुम्हाला <ph name="DOMAIN" /> ईमेल पत्त्यासाठी नवीन प्रोफाइल तयार करण्याकरता व्यक्तीला जोडावर क्लिक करा.</translation>
-<translation id="7684212569183643648">तुमच्या अॅडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation>
+<translation id="7684212569183643648">तुमच्या ॲडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation>
 <translation id="7684559058815332124">कॅप्टिव्ह लॉग इन पेजला भेट द्या</translation>
-<translation id="7684718995427157417">तुमची अॅप्स तयार करण्यासाठी आणि त्यांची चाचणी करण्यासाठी, Android डीबग ब्रिज (ADB) सुरू करा. लक्षात ठेवा की, ही क्रिया Google ने पडताळणी न केलेली Android अॅप्स इंस्टॉल करण्याची अनुमती देते आणि यासाठी फॅक्टरी रीसेट बंद करण्याची आवश्यकता आहे.</translation>
+<translation id="7684718995427157417">तुमची ॲप्स तयार करण्यासाठी आणि त्यांची चाचणी करण्यासाठी, Android डीबग ब्रिज (ADB) सुरू करा. लक्षात ठेवा की, ही क्रिया Google ने पडताळणी न केलेली Android ॲप्स इंस्टॉल करण्याची अनुमती देते आणि यासाठी फॅक्टरी रीसेट बंद करण्याची आवश्यकता आहे.</translation>
 <translation id="7685049629764448582">JavaScript मेमरी</translation>
 <translation id="7685087414635069102">पिन आवश्यक</translation>
 <translation id="768549422429443215">भाषा जोडा किंवा सूचीचा क्रम पुन्हा लावा.</translation>
@@ -4628,7 +4619,7 @@
 <translation id="780301667611848630">नाही, नको</translation>
 <translation id="7805768142964895445">स्थिती</translation>
 <translation id="7807067443225230855">शोध आणि साहाय्यक</translation>
-<translation id="7807711621188256451">तुमचा कॅमेरा अॅक्सेस करण्यासाठी <ph name="HOST" /> ला नेहमी परवानगी द्या</translation>
+<translation id="7807711621188256451">तुमचा कॅमेरा ॲक्सेस करण्यासाठी <ph name="HOST" /> ला नेहमी परवानगी द्या</translation>
 <translation id="7810202088502699111">या पेजवर पॉप-अप अवरोधित केलेले होते.</translation>
 <translation id="781167124805380294"><ph name="FILE_NAME" /> कास्ट करा</translation>
 <translation id="7814458197256864873">&amp;कॉपी करा</translation>
@@ -4679,7 +4670,7 @@
 <translation id="7849264908733290972">नवीन टॅबमध्ये &amp;प्रतिमा उघडा</translation>
 <translation id="784934925303690534">वेळ वर्गवारी</translation>
 <translation id="7851457902707056880">साइन इन केवळ मालकाच्या खात्यावर प्रतिबंधित आहे. कृपया रिबूट करा आणि मालक खात्यासह साइन इन करा. मशीन 30 सेकंदांमध्ये स्वयं रिबूट होईल.</translation>
-<translation id="7851716364080026749">नेहमी कॅमेरा आणि मायक्रोफोन अॅक्सेस ब्लॉक करा</translation>
+<translation id="7851716364080026749">नेहमी कॅमेरा आणि मायक्रोफोन ॲक्सेस ब्लॉक करा</translation>
 <translation id="7851720427268294554">IPP पार्सर</translation>
 <translation id="78526636422538552">आणखी Google खाती जोडणे बंद केले आहे</translation>
 <translation id="7853747251428735">अधिक साध&amp;ने</translation>
@@ -4693,7 +4684,7 @@
 <translation id="7870730066603611552">सेटअपनंतर सिंक पर्यायांचे परीक्षण करा</translation>
 <translation id="7870790288828963061">नवीन आवृत्तीसह कोणतीही कियोस्क अ‍ॅप्स आढळले नाहीत. काहीही अपडेट करू नका. कृपया USB स्टिक काढा.</translation>
 <translation id="7874257161694977650">Chrome बॅकग्राउंड</translation>
-<translation id="7877451762676714207">अज्ञात सर्व्हर एरर. कृपया पुन्हा प्रयत्न करा किंवा सर्व्हर अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="7877451762676714207">अज्ञात सर्व्हर एरर. कृपया पुन्हा प्रयत्न करा किंवा सर्व्हर ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="7877680364634660272">टूर</translation>
 <translation id="7878562273885520351">तुमच्या पासवर्डशी तडजोड होत असल्याची शक्यता आहे</translation>
 <translation id="7880823633812189969">तुम्ही रीस्टार्ट करता तेव्हा स्थानिक डेटा हटवला जाईल</translation>
@@ -4704,7 +4695,7 @@
 <translation id="7887864092952184874">ब्लूटूथ माउस जोडला</translation>
 <translation id="7889565820482017512">डिस्प्ले आकार</translation>
 <translation id="7892963120252479610">तुम्ही हा टॅब बंद करेपर्यंत <ph name="ORIGIN" /> <ph name="FOLDERNAME" /> मधील फाइल पाहू शकते</translation>
-<translation id="7893008570150657497">तुमच्या कॉंप्युटरवरील फोटो, संगीत आणि इतर माध्यमे अॅक्सेस करा</translation>
+<translation id="7893008570150657497">तुमच्या कॉंप्युटरवरील फोटो, संगीत आणि इतर माध्यमे ॲक्सेस करा</translation>
 <translation id="7893153962594818789">या <ph name="DEVICE_TYPE" /> वर ब्लूटूथ बंद आहे. तुमचा पासवर्ड टाका आणि ब्लूटूथ सुरू करा.</translation>
 <translation id="7893393459573308604"><ph name="ENGINE_NAME" /> (डीफॉल्ट)</translation>
 <translation id="7897900149154324287">भविष्यात, तुम्ही फायली ॲप मधील तुमचा काढण्यायोग्य डिव्हाइस अनप्लग करण्यापूर्वी तो निष्कासित करण्याचे सुनिश्चित करा. अन्यथा, तुम्ही डेटा गमावू शकता.</translation>
@@ -4714,7 +4705,7 @@
 <translation id="7903345046358933331">पृष्ठ असंवादी झाले आहे. तुम्ही ते संवादी होईपर्यंत प्रतीक्षा करू शकता किंवा ते बंद करू शकता.</translation>
 <translation id="7903742244674067440">तुमच्याकडे फाइलवर अशी सर्टिफिकेट आहेत जी या सर्टिफिकेट अधिकार्‍यांची ओळख पटवतात</translation>
 <translation id="7903925330883316394">उयुक्तता: <ph name="UTILITY_TYPE" /></translation>
-<translation id="7904094684485781019">या खात्याच्या अॅडमिनिस्ट्रेटरने एकाहून अधिक साइन इन ची परवानगी  रद्द केली आहे.</translation>
+<translation id="7904094684485781019">या खात्याच्या ॲडमिनिस्ट्रेटरने एकाहून अधिक साइन इन ची परवानगी  रद्द केली आहे.</translation>
 <translation id="7908378463497120834">सॉरी, तुमच्या बाह्य डिव्हाइस स्टोरेजमधील कमीत कमी एक विभाग बसविला जाऊ शकत नाही.</translation>
 <translation id="7909969815743704077">गुप्त मध्ये डाउनलोड केले</translation>
 <translation id="7910768399700579500">&amp;नवीन फोल्‍डर</translation>
@@ -4763,7 +4754,7 @@
 <translation id="7968982339740310781">तपशील पहा</translation>
 <translation id="7969046989155602842">कमांड</translation>
 <translation id="7972714317346275248">PKCS #1 RSA एंक्रिप्शनसह SHA-384</translation>
-<translation id="7973962044839454485">अयोग्य वापरकर्तानावामुळे किंवा पासवर्डमुळे PPP अॉथेंटिकेशन अयशस्वी झाले</translation>
+<translation id="7973962044839454485">अयोग्य वापरकर्तानावामुळे किंवा पासवर्डमुळे PPP ऑथेंटिकेशन अयशस्वी झाले</translation>
 <translation id="7974566588408714340"><ph name="EXTENSIONNAME" /> वापरून पुन्हा प्रयत्न करून पहा</translation>
 <translation id="7974936243149753750">ओव्हरस्कॅन</translation>
 <translation id="7978412674231730200">खाजगी की</translation>
@@ -4778,8 +4769,8 @@
 <translation id="7985283639530788531">तुम्ही गुप्त मोडमध्ये <ph name="APP_NAME" /> सह टच आयडी वापरू इच्छिता का?</translation>
 <translation id="7986295104073916105">सेव्ह केलेल्या पासवर्ड सेटिंग्ज वाचा आणि बदला</translation>
 <translation id="7987814697832569482">नेहमीच या VPN द्वारे कनेक्ट करा</translation>
-<translation id="7988355189918024273">अॅक्सेस वैशिष्ट्ये सक्षम करा</translation>
-<translation id="7991296728590311172">स्विच अॅक्सेस सेटिंग्ज</translation>
+<translation id="7988355189918024273">ॲक्सेस वैशिष्ट्ये सक्षम करा</translation>
+<translation id="7991296728590311172">स्विच ॲक्सेस सेटिंग्ज</translation>
 <translation id="7994702968232966508">EAP पद्धत</translation>
 <translation id="7997826902155442747">प्रक्रिया प्राधान्य</translation>
 <translation id="7999229196265990314">खालील फायली तयार केल्या:
@@ -4808,7 +4799,7 @@
 <translation id="8023801379949507775">एक्स्टेंशन त्वरित अपडेट करा</translation>
 <translation id="8024483450737722621">तुम्ही Google Play वरून डाउनलोड केलेले अ‍ॅप्स या Chromebook वरून हटविले जातील.
       <ph name="LINE_BREAKS1" />
-      तुम्ही खरेदी केलेला आशय जसे की चित्रपट, टीव्ही शो, संगीत, पुस्तके किंवा अन्य अॅप-मधील खरेदी हटविल्या जाऊ शकतात.
+      तुम्ही खरेदी केलेला आशय जसे की चित्रपट, टीव्ही शो, संगीत, पुस्तके किंवा अन्य ॲप-मधील खरेदी हटविल्या जाऊ शकतात.
       <ph name="LINE_BREAKS2" />
       यामुळे इतर डिव्हाइस वरील अ‍ॅप्स किंवा आशय प्रभावित होत नाहीत.</translation>
 <translation id="8026334261755873520">ब्राउझिंग डेटा साफ करा</translation>
@@ -4847,7 +4838,7 @@
     <ph name="BEGIN_PARAGRAPH3" />तुम्ही सेटिंग्जमध्ये ही सेवा बंद करू शकता.<ph name="END_PARAGRAPH3" /></translation>
 <translation id="8074127646604999664">अलीकडे बंद केलेल्या साइटना डेटा पाठविणे आणि प्राप्त करणे समाप्त करण्याची अनुमती द्या</translation>
 <translation id="8076492880354921740">टॅब</translation>
-<translation id="8076835018653442223">तुमच्या अॅडमिनिस्ट्रेटरने तुमच्या डिव्‍हाइसवरील स्‍थानिक फायलीचा अॅक्सेस बंद केला आहे</translation>
+<translation id="8076835018653442223">तुमच्या ॲडमिनिस्ट्रेटरने तुमच्या डिव्‍हाइसवरील स्‍थानिक फायलीचा ॲक्सेस बंद केला आहे</translation>
 <translation id="808089508890593134">Google</translation>
 <translation id="8084114998886531721">सेव्ह केलेले पासवर्ड</translation>
 <translation id="8086015605808120405"><ph name="PRINTER_NAME" /> कॉन्फिगर करत आहे...</translation>
@@ -4892,11 +4883,11 @@
 <translation id="8141725884565838206">तुमचे पासवर्ड व्यवस्थापित करा</translation>
 <translation id="8143442547342702591">चुकीचे ॲप्लिकेशन</translation>
 <translation id="8146177459103116374">तुम्ही या डिव्हाइसवर आधीपासूनच नोंदणीकृत असल्यास, तुम्ही <ph name="LINK2_START" />विद्यमान वापरकर्ता म्हणून साइन इन<ph name="LINK2_END" /> करु शकता.</translation>
-<translation id="8146793085009540321">साइन-इन अयशस्वी झाले. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
+<translation id="8146793085009540321">साइन-इन अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
 <translation id="8151638057146502721">कॉन्फिगर करा</translation>
 <translation id="8152091997436726702">प्रिंटरची नोंदणी कालबाह्य झाली आहे. प्रिंटरची नोंदणी करण्यासाठी, तुम्हाला प्रिंटरवर नोंदणीची पुष्टी करणे आवश्यक आहे.</translation>
 <translation id="8154790740888707867">फाईल नाही</translation>
-<translation id="815491593104042026">अरेरे! अॉथेंटिकेशन अ-सुरक्षित (<ph name="BLOCKED_URL" />) URL वापरण्यासाठी कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="815491593104042026">अरेरे! ऑथेंटिकेशन अ-सुरक्षित (<ph name="BLOCKED_URL" />) URL वापरण्यासाठी कॉन्फिगर केल्यामुळे ते अयशस्वी झाले. कृपया तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="8157704005178149728">पर्यवेक्षण सेट करत आहे</translation>
 <translation id="816055135686411707">सर्टिफिकेट विश्वास सेट करताना एरर</translation>
 <translation id="816095449251911490"><ph name="SPEED" /> - <ph name="RECEIVED_AMOUNT" />, <ph name="TIME_REMAINING" /></translation>
@@ -4910,7 +4901,7 @@
 <translation id="8180294223783876911">वापर आणि निदान डेटा पाठवा. हे डिव्हाइस सध्या Google ला आपोआप निदान, डिव्हाइस आणि अ‍ॅप वापर डेटा पाठवत आहे. हे सिस्ट्म आणि अ‍ॅप स्थिरता आणि इतर सुधारणा करण्यात मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर सारख्या भागीदारांना देखील मदत करेल. जर तुमची अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सेटिंग सुरू केलेली असल्यास, हा डेटा तुमच्या Google खाते वर सेव्ह केला जाऊ शकतो. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation>
 <translation id="8180786512391440389">"<ph name="EXTENSION" />" चेक केलेल्या स्थानांमधील इमेज, व्हिडिओ आणि ध्वनी फायली वाचू आणि हटवू शकते.</translation>
 <translation id="8181215761849004992">डोमेनशी जोडू शकत नाही. तुम्हाला डिव्हाइस जोडण्याचे पुरेसे विशेषाधिकार आहेत का हे पाहण्यासाठी तुमचे खाते तपासा.</translation>
-<translation id="8182105986296479640">अॅप्लिकेशन प्रतिसाद देत नाही.</translation>
+<translation id="8182105986296479640">ॲप्लिकेशन प्रतिसाद देत नाही.</translation>
 <translation id="8182664696082410784"><ph name="REASON" />
     ही साइट ब्लॉक केली जावी असे मला वाटत नाही!</translation>
 <translation id="8184288427634747179"><ph name="AVATAR_NAME" /> वर स्विच करा</translation>
@@ -4928,7 +4919,7 @@
 <translation id="8202160505685531999">कृपया तुमचे <ph name="DEVICE_TYPE" /> प्रोफाइल अपडेट करण्‍यासाठी तुमचा पासवर्ड पुन्हा एंटर करा.</translation>
 <translation id="8203732864715032075">Messages साठी हा कॉंप्युटर डीफॉल्ट म्हणून लक्षात ठेवण्याकरता तुम्हाला सूचना पाठवेल. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="820568752112382238">सर्वाधिक भेट दिलेल्या साइट</translation>
-<translation id="8206354486702514201">या सेटिंगची अंमलबजावणी तुमच्या अॅडमिनिस्ट्रेटरकडून होते.</translation>
+<translation id="8206354486702514201">या सेटिंगची अंमलबजावणी तुमच्या ॲडमिनिस्ट्रेटरकडून होते.</translation>
 <translation id="8206581664590136590">वापर आणि निदान डेटा पाठवा. Google ला आपोआप निदान आणि डिव्हाइस आणि अ‍ॅप वापर डेटा पाठवून तुमच्या लहान मुलाचा Android अनुभव सुधारण्यात मदत करा. हे तुमच्या लहान मुलाला ओळखण्यासाठी वापरले जाणार नाही आणि सिस्ट्म आणि अ‍ॅप स्थिरता आणि इतर सुधारणा करण्यात मदत करेल. काही एकत्रित केलेला डेटा Google अ‍ॅप्स आणि Android डेव्हलपर सारख्या भागीदारांना देखील मदत करेल. तुमच्या लहान मुलासाठी अतिरिक्त वेब आणि अ‍ॅप अ‍ॅक्टिव्हिटी सुरू केलेली असल्यास, ही माहिती त्याच्या Google खात्यामध्ये स्टोअर केली जाऊ शकते. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation>
 <translation id="8206745257863499010">Bluesy</translation>
 <translation id="8206859287963243715">सेल्यूलर</translation>
@@ -4938,7 +4929,7 @@
 <translation id="8214489666383623925">फाइल उघडा...</translation>
 <translation id="8214962590150211830">या व्यक्तीस काढून टाका</translation>
 <translation id="8217399928341212914">एकाधिक फायलींचे स्वयंचलित डाउनलोड अवरोधित करणे सुरू ठेवा</translation>
-<translation id="8225265270453771718">अॅप्लिकेशन विंडो शेअर करा</translation>
+<translation id="8225265270453771718">ॲप्लिकेशन विंडो शेअर करा</translation>
 <translation id="8225753906568652947">तुमच्या ऑफर रिडीम करा</translation>
 <translation id="8226222018808695353">निषिद्ध केलेले</translation>
 <translation id="8226619461731305576">रांग</translation>
@@ -4967,7 +4958,7 @@
 <translation id="8254954272268479918">Linux (बीटा) बंद करा</translation>
 <translation id="8255451560461371599">कोणतीही बॅकग्राउंड नाही</translation>
 <translation id="8256319818471787266">चमचमते</translation>
-<translation id="8257950718085972371">कॅमेरा अॅक्सेस ब्लॉक करणे सुरू ठेवा</translation>
+<translation id="8257950718085972371">कॅमेरा ॲक्सेस ब्लॉक करणे सुरू ठेवा</translation>
 <translation id="8259239505248583312">चला जाऊ या</translation>
 <translation id="8260126382462817229">पुन्हा साइन इन करण्याचा प्रयत्न करा</translation>
 <translation id="8260864402787962391">माउस</translation>
@@ -4992,7 +4983,7 @@
 <translation id="8276560076771292512">कॅशे आणि हार्ड रीलोड रिकामे करा</translation>
 <translation id="8281886186245836920">वगळा</translation>
 <translation id="8282947398454257691">तुमचा अनन्य डिव्हाइस अभिज्ञापक जाणून घ्या</translation>
-<translation id="8283475148136688298">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना अॉथेंटिकेशन कोड नाकारण्यात आला.</translation>
+<translation id="8283475148136688298">"<ph name="DEVICE_NAME" />" शी कनेक्ट करताना ऑथेंटिकेशन कोड नाकारण्यात आला.</translation>
 <translation id="8284279544186306258">सर्व <ph name="WEBSITE_1" /> साइट</translation>
 <translation id="8284326494547611709">मथळे</translation>
 <translation id="8286036467436129157">साइन इन</translation>
@@ -5006,7 +4997,7 @@
 <translation id="8300011035382349091">या टॅबचे बुकमार्क संपादित करा</translation>
 <translation id="8300374739238450534">भडक निळा</translation>
 <translation id="8300849813060516376">OTASP बिघडले</translation>
-<translation id="8308179586020895837"><ph name="HOST" /> तुमचा कॅमेरा अॅक्सेस करू इच्छित असल्यास विचारा</translation>
+<translation id="8308179586020895837"><ph name="HOST" /> तुमचा कॅमेरा ॲक्सेस करू इच्छित असल्यास विचारा</translation>
 <translation id="830868413617744215">बीटा</translation>
 <translation id="8309458809024885768">सर्टिफिकेट आधीपासूनच अस्तित्वात आहे</translation>
 <translation id="8314089908545021657">नवीन फोनसह पेअर करा</translation>
@@ -5026,7 +5017,7 @@
 <translation id="8337047789441383384">तुम्ही आधीच या सिक्युरिटी कीची नोंदणी केली आहे. तुम्हाला याची पुन्हा नोंदणी करण्याची गरज नाही.</translation>
 <translation id="8338952601723052325">डेव्हलपर वेबसाइट</translation>
 <translation id="8339059274628563283"><ph name="SITE" /> स्थानिकरित्या संचयित केलेला डेटा</translation>
-<translation id="833986336429795709">ही लिंक उघडण्यासाठी, अॅप निवडा</translation>
+<translation id="833986336429795709">ही लिंक उघडण्यासाठी, ॲप निवडा</translation>
 <translation id="8342861492835240085">संकलन निवडा</translation>
 <translation id="834290227245955730">चुकीचे पिन. बाकी असलेले प्रयत्न: <ph name="RETRIES" />.</translation>
 <translation id="8351419472474436977">या एक्स्टेंशनने तुमच्या प्रॉक्सी सेटिंग्जचे नियंत्रण घेतले आहे, याचा अर्थ ही बदलू शकते, खंडित होवू शकते किंवा तुम्ही ऑनलाइन करता ती कोणतीहीगोष्ट चोरून एकू शकतो. हा बदल का झाला, याबद्दल तुम्ही निश्चित नसल्यास, तुम्हाला कदाचित तो नको आहे.</translation>
@@ -5186,7 +5177,7 @@
 <translation id="8596540852772265699">कस्टम फायली</translation>
 <translation id="8597845839771543242">गुणधर्म स्‍वरूपन:</translation>
 <translation id="8598453409908276158">सँडबॉक्स न केलेले प्लगइन ब्लॉक केले</translation>
-<translation id="8601206103050338563">TLS WWW क्लायंट अॉथेंटिकेशन</translation>
+<translation id="8601206103050338563">TLS WWW क्लायंट ऑथेंटिकेशन</translation>
 <translation id="8602851771975208551">तुमच्या कॉंप्युटरवरील दुसऱ्या प्रोग्रामने Chrome च्या काम करण्याचा मार्ग बदलू शकणारा अ‍ॅप जोडला.</translation>
 <translation id="8605428685123651449">SQLite मेमरी</translation>
 <translation id="8606726445206553943">तुमचे MIDI डिव्हाइसेस वापरा</translation>
@@ -5224,7 +5215,7 @@
 <translation id="8654151524613148204">तुमच्या कॉंप्युटरला हाताळण्‍यासाठी ही फाइल खूप मोठी आहे. क्षमस्व.</translation>
 <translation id="8655295600908251630">खाडी</translation>
 <translation id="8655319619291175901">अरेरे, काहीतरी चूक झाली.</translation>
-<translation id="8655972064210167941">साइन-इन अयशस्वी झाले कारण तुमचा पासवर्डची पडताळणी करणे शक्य झाले नाही. कृपया तुमच्या अॅडमिनिस्ट्रेटरला संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
+<translation id="8655972064210167941">साइन-इन अयशस्वी झाले कारण तुमचा पासवर्डची पडताळणी करणे शक्य झाले नाही. कृपया तुमच्या ॲडमिनिस्ट्रेटरला संपर्क साधा किंवा पुन्हा प्रयत्न करा.</translation>
 <translation id="8656619792520327915">दुसरी ब्लूटूथ सिक्युरिटी की जोडा</translation>
 <translation id="8656768832129462377">तपासू नका</translation>
 <translation id="8658645149275195032"><ph name="APP_NAME" /> तुमची स्क्रीन आणि ऑडिओ <ph name="TAB_NAME" /> सह शेअर करीत आहे.</translation>
@@ -5239,7 +5230,7 @@
 <translation id="8664389313780386848">पृष्ठ स्रोत &amp;पहा</translation>
 <translation id="8665180165765946056">बॅकअप पूर्ण झाला</translation>
 <translation id="866611985033792019">ईमेल वापरकर्त्यांना ओळखण्यासाठी या सर्टिफिकेटवर विश्वास ठेवा</translation>
-<translation id="8666584013686199826">साइटला केव्हा USB डिव्हाइस अॅक्सेस करायची आहेत हे विचारा</translation>
+<translation id="8666584013686199826">साइटला केव्हा USB डिव्हाइस ॲक्सेस करायची आहेत हे विचारा</translation>
 <translation id="8667328578593601900"><ph name="FULLSCREEN_ORIGIN" /> आता फुल स्क्रीन असून तुमचा माउस कर्सर बंद केला आहे.</translation>
 <translation id="8669284339312441707">गरम</translation>
 <translation id="867085395664725367">तात्पुरती सर्व्हर एरर आली.</translation>
@@ -5249,7 +5240,7 @@
 <translation id="8676374126336081632">इनपुट साफ करा</translation>
 <translation id="8677212948402625567">सर्व कोलॅप्स करा...</translation>
 <translation id="8678648549315280022">डाउनलोड सेटिंग्ज व्यवस्थापित करा...</translation>
-<translation id="8678933587484842200">हे अॅप्लिकेशन कसे लॉंच व्हावे असे तुम्हाला वाटते?</translation>
+<translation id="8678933587484842200">हे ॲप्लिकेशन कसे लॉंच व्हावे असे तुम्हाला वाटते?</translation>
 <translation id="8680251145628383637">आपल्या सर्व डिव्हाइसेसवर तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर सेटिंग्ज मिळविण्‍यासाठी साइन इन करा. तुम्ही स्वयंचलितपणे आपल्‍या Google सेवांवर देखील साइन इन कराल.</translation>
 <translation id="8682730193597992579"><ph name="PRINTER_NAME" /> कनेक्ट केलेला आहे आणि तयार आहे</translation>
 <translation id="8688579245973331962">तुमचे नाव दिसत नाही?</translation>
@@ -5300,7 +5291,7 @@
 <translation id="8743864605301774756">1 तासापूर्वी अपडेट करण्यात आले</translation>
 <translation id="874689135111202667">{0,plural, =1{या साइटवर एक फाइल अपलोड करायची?}other{या साइटवर # फायली अपलोड करायच्या?}}</translation>
 <translation id="8748384418490037181">Smart Lock पर्याय</translation>
-<translation id="8749863574775030885">अज्ञात विक्रेत्याकडील USB डिव्हाइस अॅक्सेस करा</translation>
+<translation id="8749863574775030885">अज्ञात विक्रेत्याकडील USB डिव्हाइस ॲक्सेस करा</translation>
 <translation id="8750155211039279868"><ph name="ORIGIN" /> ला सिरीअल पोर्टशी कनेक्ट करायचे आहे</translation>
 <translation id="8754200782896249056">&lt;p&gt;सपोर्टेड डेस्कटॉप परिस्थिती अंतर्गत <ph name="PRODUCT_NAME" /> चालविताना, सिस्टम प्रॉक्सी सेटिंग्ज वापरल्या जातील. तथापि, एकतर तुमची सिस्टमला सपोर्ट नाही नसते किंवा तुमचे सिस्टम कॉन्फिगरेशन लाँच करताना समस्या आली.&lt;/p&gt;
 
@@ -5371,14 +5362,13 @@
 <translation id="8828933418460119530">DNS नाव</translation>
 <translation id="883062543841130884">उपघटक</translation>
 <translation id="8830796635868321089">विद्यमान प्रॉक्सी सेटिंग्ज वापरून अपडेट तपासणी अयशस्वी झाली. कृपया तुमच्या <ph name="PROXY_SETTINGS_LINK_START" />प्रॉक्सी 
-सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> अॅडजस्ट करा.</translation>
+सेटिंग्ज<ph name="PROXY_SETTINGS_LINK_END" /> ॲडजस्ट करा.</translation>
 <translation id="8831140208248705279">तुमचे <ph name="DEVICE_TYPE" /> आणि Android एकत्रितपणे आणखी चांगले काम करतात. तुम्हाला तुमच्या काँप्युटरवरून एसएमएस करणे, तुमचे इंटरनेट कनेक्शन शेअर करणे आणि तुमच्या फोनने तुमचे <ph name="DEVICE_TYPE" /> अनलॉक करणे शक्य होण्यासाठी त्यांना कनेक्ट करा.<ph name="FOOTNOTE_POINTER" /> <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="8834039744648160717"><ph name="USER_EMAIL" /> ने नेटवर्क कॉन्फिगरेशन नियंत्रित केले आहे.</translation>
 <translation id="8838601485495657486">अपारदर्शक</translation>
 <translation id="8838770651474809439">हॅमबर्गर</translation>
 <translation id="883911313571074303">इमेजवर भाष्य करा</translation>
 <translation id="8845001906332463065">मदत मिळवा</translation>
-<translation id="8845164297565101021">पिन तयार करण्यासाठी किंवा बदलण्यासाठी तुमची सिक्युरिटी की घाला आणि स्पर्श करा.</translation>
 <translation id="8846132060409673887">या कॉंप्युटरची उत्पादक आणि मॉडेल माहिती वाचा</translation>
 <translation id="8846141544112579928">कीबोर्डचा शोध घेत आहे...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5396,10 +5386,10 @@
 <translation id="8868626022555786497">वापरात आहे</translation>
 <translation id="8870318296973696995">होम</translation>
 <translation id="8870413625673593573">अलीकडे बंद</translation>
-<translation id="8871551568777368300">अॅडमिनिस्ट्रेटरने पिन केले</translation>
+<translation id="8871551568777368300">ॲडमिनिस्ट्रेटरने पिन केले</translation>
 <translation id="8871696467337989339">तुम्ही एक सपोर्ट नसलेले कमांड-लाइन फ्लॅग वापरत आहात: <ph name="BAD_FLAG" />. स्थिरता आणि सुरक्षा प्रभावित होईल.</translation>
 <translation id="8871974300055371298">आशय सेटिंग्ज</translation>
-<translation id="8872155268274985541">अवैध कियोस्क बाह्य अपडेट मॅनिफेस्ट फाइल आढळली. कियोस्क अॅप अपडेट करण्यात अयशस्वी. कृपया USB स्टिक काढून टाका.</translation>
+<translation id="8872155268274985541">अवैध कियोस्क बाह्य अपडेट मॅनिफेस्ट फाइल आढळली. कियोस्क ॲप अपडेट करण्यात अयशस्वी. कृपया USB स्टिक काढून टाका.</translation>
 <translation id="8874184842967597500">कनेक्ट केलेले नाही</translation>
 <translation id="8876307312329369159">हे सेटिंग डेमो सत्रामध्ये बदलले जाऊ शकत नाही.</translation>
 <translation id="8877448029301136595">[मूळ डिरेक्टरी]</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">अधिक द्रुतपणे बॅटरी वापरा (सध्या <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> विंडो <ph name="TAB_NAME" /> सह शेअर करीत आहे.</translation>
-<translation id="8945764661949477243">तुमच्या डिव्हाइसवर सेव्ह केलेली फिंगरप्रिंट जोडा, त्यांचे नाव बदला आणि हटवा</translation>
 <translation id="8946359700442089734">या <ph name="IDS_SHORT_PRODUCT_NAME" /> डिव्हाइसवर डीबगिंग वैशिष्ट्ये पूर्णपणे सक्षम केलेली नव्हती.</translation>
 <translation id="894871326938397531">गुप्त मोड सोडायचा?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> ला तुमच्या सिक्युरिटी की ची निर्मिती आणि मॉडेल पहायचा आहे</translation>
@@ -5467,9 +5456,9 @@
 <translation id="8966870118594285808">तुम्ही एखादा टॅब चुकून बंद केल्यास, तो पुन्हा उघडा</translation>
 <translation id="8967866634928501045">दाखवण्यासाठी Alt Shift A दाबा</translation>
 <translation id="89720367119469899">Escape</translation>
-<translation id="8972513834460200407">कृपया फायरवॉल Google सर्व्हरवरून डाउनलोड ब्लॉक करत नसल्याची खात्री करण्यासाठी तुमच्या नेटवर्क अॅडमिनिस्ट्रेटरच्या साहाय्याने तपासा.</translation>
+<translation id="8972513834460200407">कृपया फायरवॉल Google सर्व्हरवरून डाउनलोड ब्लॉक करत नसल्याची खात्री करण्यासाठी तुमच्या नेटवर्क ॲडमिनिस्ट्रेटरच्या साहाय्याने तपासा.</translation>
 <translation id="8973557916016709913">झूम स्तर काढून टाका</translation>
-<translation id="8973596347849323817">तुमच्या गरजा पूर्ण करण्यासाठी तुम्ही हे डिव्हाइस कस्टम करू शकता. ही अॅक्सेसिबिलिटी वैशिष्ट्ये नंतर सेटिंग्जमध्ये बदलली जाऊ शकतात.</translation>
+<translation id="8973596347849323817">तुमच्या गरजा पूर्ण करण्यासाठी तुम्ही हे डिव्हाइस कस्टम करू शकता. ही ॲक्सेसिबिलिटी वैशिष्ट्ये नंतर सेटिंग्जमध्ये बदलली जाऊ शकतात.</translation>
 <translation id="897414447285476047">कनेक्शनमधील समस्येमुळे डेस्टिनेशन फाइल अपूर्ण राहिली.</translation>
 <translation id="897525204902889653">क्वारंटाइन सेवा</translation>
 <translation id="8975562453115131273">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" आणि इतर एक टॅब}other{"<ph name="TAB_TITLE" />" आणि इतर # टॅब}}</translation>
@@ -5499,7 +5488,7 @@
 <translation id="9013707997379828817">तुमच्या ॲडमिनिस्ट्रेटरने हे डिव्हाइस रोल बॅक केले आहे. कृपया महत्त्वाच्या फायली सेव्ह करा, त्यानंतर रीस्टार्ट करा. या डिव्हाइस वरील सर्व डेटा हटवला जाईल.</translation>
 <translation id="9018218886431812662">इंस्टॉलेशन पूर्ण झाले</translation>
 <translation id="901834265349196618">ईमेल</translation>
-<translation id="9019062154811256702">अॉटोफिल सेटिंग्ज वाचा आणि बदला</translation>
+<translation id="9019062154811256702">ऑटोफिल सेटिंग्ज वाचा आणि बदला</translation>
 <translation id="9020362265352758658">४x</translation>
 <translation id="9021662811137657072">व्हायरस आढळला</translation>
 <translation id="9022847679183471841"><ph name="AVATAR_NAME" /> या कॉंप्युटरवर हे खाते आधीपासून वापरत आहे.</translation>
@@ -5510,13 +5499,13 @@
 <translation id="9026731007018893674">डाउनलोड करा</translation>
 <translation id="9026852570893462412">या प्रक्रियेला काही मिनिटे लागू शकतात. व्हर्च्युअल मशीन डाउनलोड करत आहे.</translation>
 <translation id="9027459031423301635">नवीन &amp;टॅब मध्ये लिंक उघडा</translation>
-<translation id="9030515284705930323">तुमच्या संस्थेने तुमच्या खात्यासाठी Google Play स्टोअर सक्षम केले नाही. अधिक माहितीसाठी तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="9030515284705930323">तुमच्या संस्थेने तुमच्या खात्यासाठी Google Play स्टोअर सक्षम केले नाही. अधिक माहितीसाठी तुमच्या ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="9030785788945687215">Gmail</translation>
 <translation id="9033857511263905942">&amp;पेस्ट करा</translation>
 <translation id="9037965129289936994">मूळ दर्शवा</translation>
 <translation id="9039663905644212491">PEAP</translation>
 <translation id="9040661932550800571"><ph name="ORIGIN" /> साठी पासवर्ड अपडेट करायचा आहे का?</translation>
-<translation id="9041692268811217999">तुमच्या अॅडमिनिस्ट्रेटरने तुमच्या मशीनवरील स्थानिक फायलीचा अ‍ॅक्सेस बंद केला आहे</translation>
+<translation id="9041692268811217999">तुमच्या ॲडमिनिस्ट्रेटरने तुमच्या मशीनवरील स्थानिक फायलीचा अ‍ॅक्सेस बंद केला आहे</translation>
 <translation id="9042893549633094279">गोपनीयता आणि सुरक्षा</translation>
 <translation id="904451693890288097">कृपया यासाठी पासकी प्रविष्‍ट करा "<ph name="DEVICE_NAME" />":</translation>
 <translation id="9044646465488564462">नेटवर्कशी कनेक्ट करण्यात अयशस्वी: <ph name="DETAILS" /></translation>
@@ -5535,7 +5524,7 @@
 <translation id="9062468308252555888">१४x</translation>
 <translation id="9063208415146866933">ओळ <ph name="ERROR_LINE_START" /> ते <ph name="ERROR_LINE_END" /> पर्यंत एरर</translation>
 <translation id="9064142312330104323">Google प्रोफाइल फोटो (लोड करत आहे)</translation>
-<translation id="9064275926664971810">एका क्लिकमध्ये वेब फॉर्म भरण्यासाठी अॉटोफिल सक्षम करा</translation>
+<translation id="9064275926664971810">एका क्लिकमध्ये वेब फॉर्म भरण्यासाठी ऑटोफिल सक्षम करा</translation>
 <translation id="9065203028668620118">संपादन</translation>
 <translation id="9066773882585798925">मोठ्याने वाचलेला मजकूर ऐका</translation>
 <translation id="9066782832737749352">टेक्स्ट टू स्पीच</translation>
@@ -5597,7 +5586,7 @@
 <translation id="91568222606626347">शॉर्टकट तयार करा...</translation>
 <translation id="9157096865782046368">०.८ सेकंद</translation>
 <translation id="9157697743260533322">सर्व वापरकर्त्यांसाठी ऑटोमॅटिक अपडेट सेट करण्यात अयशस्वी झाले (प्रीफ्लाइट लाँच एरर: <ph name="ERROR_NUMBER" />)</translation>
-<translation id="9158715103698450907">अरेरे! अॉथेंटिकेशनदरम्यान एक नेटवर्क संवाद समस्या आली. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.</translation>
+<translation id="9158715103698450907">अरेरे! ऑथेंटिकेशनदरम्यान एक नेटवर्क संवाद समस्या आली. कृपया तुमचे नेटवर्क कनेक्शन तपासा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="916607977885256133">चित्रात-चित्र</translation>
 <translation id="9168436347345867845">ते नंतर करा</translation>
 <translation id="9169496697824289689">कीबोर्ड शॉर्टकट पहा</translation>
@@ -5618,7 +5607,7 @@
 <translation id="9201220332032049474">स्क्रीन लॉक पर्याय</translation>
 <translation id="9203398526606335860">&amp;प्रोफाइलिंग सक्षम</translation>
 <translation id="9203904171912129171">एक डिव्हाइस निवडा</translation>
-<translation id="9203962528777363226">या डिव्हाइसच्या अॅडमिनिस्ट्रेटरने नवीन वापरकर्त्यांना जोडले जाण्यापासून अक्षम केले आहे</translation>
+<translation id="9203962528777363226">या डिव्हाइसच्या ॲडमिनिस्ट्रेटरने नवीन वापरकर्त्यांना जोडले जाण्यापासून अक्षम केले आहे</translation>
 <translation id="9214520840402538427">अरेरे! स्थापना-वेळ विशेषतांचे इंस्टॉलेशन कालबाह्य झाले. कृपया तुमच्या सपोर्ट प्रतिनिधीशी संपर्क साधा.</translation>
 <translation id="9214695392875603905">कपकेक</translation>
 <translation id="9215293857209265904">"<ph name="EXTENSION_NAME" />" जोडले</translation>
@@ -5644,7 +5633,7 @@
 <translation id="939598580284253335">सांकेतिक पासफ्रेझ एंटर करा</translation>
 <translation id="939736085109172342">नवीन फोल्‍डर</translation>
 <translation id="942532530371314860"><ph name="APP_NAME" /> Chrome टॅब आणि ऑडिओ शेअर करीत आहे.</translation>
-<translation id="945166830402967374">तुमच्या संस्थेच्या डिव्हाइस अॅडमिनशी संपर्क साधा</translation>
+<translation id="945166830402967374">तुमच्या संस्थेच्या डिव्हाइस ॲडमिनशी संपर्क साधा</translation>
 <translation id="945522503751344254">अभिप्राय पाठवा</translation>
 <translation id="947329552760389097">&amp;तपासणी घटक</translation>
 <translation id="952992212772159698">सक्रिय नाही</translation>
@@ -5653,7 +5642,7 @@
 <translation id="960719561871045870">ऑपरेटर कोड</translation>
 <translation id="960987915827980018">सुमारे 1 तास बाकी</translation>
 <translation id="962802172452141067">फोल्डर ट्री बुकमार्क करा</translation>
-<translation id="964286338916298286">तुमच्या IT अॅडमिनिस्ट्रेटरने तुमच्या डिव्हाइसाठी Chrome Goodies बंद केले आहे.</translation>
+<translation id="964286338916298286">तुमच्या IT ॲडमिनिस्ट्रेटरने तुमच्या डिव्हाइसाठी Chrome Goodies बंद केले आहे.</translation>
 <translation id="964439421054175458">{NUM_APLLICATIONS,plural, =1{ॲप्लिकेशन}other{ॲप्लिकेशन}}</translation>
 <translation id="965211523698323809">तुमच्या <ph name="DEVICE_TYPE" /> वरून एसएमएस पाठवा आणि मिळवा. <ph name="LINK_BEGIN" />अधिक जाणून घ्या<ph name="LINK_END" /></translation>
 <translation id="967624055006145463">डेटा स्टोअर केला</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb
index acf5626..19d6b9a 100644
--- a/chrome/app/resources/generated_resources_ms.xtb
+++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM memerlukan kebenaran untuk dijalankan</translation>
 <translation id="1900305421498694955">Apl daripada Google Play mungkin memerlukan akses sistem fail penuh untuk membaca dan menulis fail pada peranti storan luaran. Fail dan folder yang dibuat pada peranti ini dapat dilihat oleh sesiapa yang menggunakan pemacu luaran itu. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Pilih &amp;semua</translation>
-<translation id="1901984611178952431">Urus data log masuk</translation>
 <translation id="1902576642799138955">Tempoh Masa Sah</translation>
 <translation id="1905375423839394163">Nama peranti Chromebook</translation>
 <translation id="1905710495812624430">Melebihi had maksimum percubaan yang dibenarkan.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Kemas kini perisian dan keselamatan pada masa hadapan akan dipasang secara automatik.</translation>
 <translation id="1979280758666859181">Anda sedang beralih kepada saluran dengan versi <ph name="PRODUCT_NAME" /> yang lebih lama. Perubahan saluran akan dilaksanakan apabila versi saluran sepadan dengan versi yang sedang terpasang pada peranti anda.</translation>
 <translation id="197989455406964291">KDC tidak menyokong jenis penyulitan</translation>
-<translation id="1981544341227357861">Alih keluar kunci keselamatan daripada peranti anda, kemudian masukkan semula dan sentuh kunci itu.</translation>
 <translation id="1982354452682152483">Tiada perihalan tersedia.</translation>
 <translation id="1987317783729300807">Akaun</translation>
 <translation id="1989112275319619282">Semak Imbas</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Log masuk ke Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Baharu</translation>
 <translation id="328571385944182268">Simpan kata laluan anda?</translation>
-<translation id="3286737518123001369">Lihat dan padamkan data log masuk yang disimpan pada kunci keselamatan anda</translation>
 <translation id="3288047731229977326">Sambungan yang dijalankan dalam mod pembangun boleh membahayakan komputer anda. Jika anda bukan pembangun, anda harus melumpuhkan sambungan yang dijalankan dalam mod pembangun ini supaya kekal selamat.</translation>
 <translation id="3289856944988573801">Untuk menyemak kemas kini, sila gunakan Ethernet atau Wi-Fi.</translation>
 <translation id="3293644607209440645">Hantar halaman ini</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Tandatangan X9.62 ECDSA dengan SHA-512</translation>
 <translation id="3544879808695557954">Nama pengguna (pilihan)</translation>
 <translation id="354602065659584722">Perisian berbahaya dialih keluar</translation>
-<translation id="3547220315004609203">Togol jalur tab</translation>
 <translation id="3547954654003013442">Tetapan proksi</translation>
 <translation id="3550915441744863158">Chrome dikemas kini secara automatik supaya anda sentiasa mempunyai versi yang baharu</translation>
 <translation id="3551320343578183772">Tutup Tab</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofon dibenarkan</translation>
 <translation id="4031527940632463547">Penderia disekat</translation>
 <translation id="4033471457476425443">Tambahkan folder baharu</translation>
-<translation id="403456802563765809">Untuk mengurus cap jari anda, sisipkan dan sentuh kekunci keselamatan anda.</translation>
 <translation id="4034824040120875894">Pencetak</translation>
 <translation id="4035758313003622889">&amp;Pengurus tugas</translation>
 <translation id="4036778507053569103">Dasar yang dimuat turun daripada pelayan tidak sah.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Untuk menggunakan <ph name="NETWORK_ID" /> anda mungkin perlu <ph name="LINK_START" />melawat halaman log masuk rangkaian<ph name="LINK_END" /> terlebih dahulu, yang akan terbuka secara automatik dalam beberapa saat. Jika ini tidak berlaku, rangkaian tersebut tidak boleh digunakan.</translation>
 <translation id="5637476008227280525">Data mudah alih didayakan</translation>
 <translation id="5638309510554459422">Cari sambungan dan tema di <ph name="BEGIN_LINK" />Gedung Web Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Untuk mengurus cap jari anda, masukkan PIN untuk kekunci keselamatan anda. Jika anda tidak tahu nombor PIN, anda perlu menetapkan semula kunci keselamatan itu.</translation>
 <translation id="5639549361331209298">Muat semula halaman ini, tahan untuk melihat lagi pilihan</translation>
 <translation id="5640133431808313291">Urus kunci keselamatan</translation>
 <translation id="5642508497713047">Penandatangan CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Format URL tidak sah. Format yang disokong ialah \\server\share dan smb://server/share.</translation>
 <translation id="5990386583461751448">Diterjemahkan</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="5995884201513800557">Teruskan menyentuh kekunci keselamatan anda untuk menyimpan cap jari anda.</translation>
 <translation id="5997337190805127100">Ketahui Lebih Lanjut Tentang Akses Tapak</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> hasil carian untuk '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Suara Pilihan</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Mengakses input video</translation>
 <translation id="6011193465932186973">Cap jari</translation>
 <translation id="6011449291337289699">Kosongkan data tapak</translation>
-<translation id="6013505829696424563">Untuk melihat data log masuk, masukkan PIN untuk kunci keselamatan anda. Jika anda tidak tahu nombor PIN, anda perlu menetapkan semula kunci keselamatan itu.</translation>
 <translation id="6015266928248016057">PUK tidak sah. Baki cubaan semula: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Tahun</translation>
 <translation id="6016551720757758985">Sahkan Powerwash dengan kembali ke versi terdahulu</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Tanya sebelum menghantar</translation>
 <translation id="6840184929775541289">Adalah bukan Pihak Berkuasa Pensijilan</translation>
 <translation id="6841186874966388268">Ralat</translation>
-<translation id="6841187140911216178">Untuk melihat data log masuk, sisipkan dan sentuh kunci keselamatan anda</translation>
 <translation id="6843423766595476978">Ok Google sudah disediakan</translation>
 <translation id="6845038076637626672">Buka dimaksimumkan</translation>
 <translation id="6845325883481699275">Bantu tingkatkan keselamatan Chrome</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Anotasikan imej</translation>
 <translation id="8845001906332463065">Dapatkan bantuan</translation>
-<translation id="8845164297565101021">Masukkan dan sentuh kunci keselamatan anda untuk membuat atau menukar PIN.</translation>
 <translation id="8846132060409673887">Baca tentang pengeluar dan model komputer ini</translation>
 <translation id="8846141544112579928">Mencari papan kekunci...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">Peningkatan Antarabangsa Netscape</translation>
 <translation id="8944099748578356325">Gunakan bateri dengan lebih cepat (pada masa ini <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> berkongsi tetingkap dengan <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Tambah, namakan semula dan padam cap jari yang disimpan pada peranti anda</translation>
 <translation id="8946359700442089734">Ciri penyahpepijatan tidak didayakan sepenuhnya pada peranti ini <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Tinggalkan mod inkognito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> ingin melihat jenama dan model kunci keselamatan anda</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb
index af8f3e82..ed05e29f 100644
--- a/chrome/app/resources/generated_resources_nl.xtb
+++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM heeft toestemming nodig om te kunnen worden uitgevoerd</translation>
 <translation id="1900305421498694955">Apps uit Google Play hebben mogelijk toegang nodig tot het volledige bestandssysteem om bestanden te lezen en schrijven op externe opslagapparaten. Bestanden en mappen die zijn gemaakt op het apparaat, zijn zichtbaar voor iedereen die de externe schijf gebruikt. <ph name="LINK_BEGIN" />Meer informatie<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;Alles selecteren</translation>
-<translation id="1901984611178952431">Inloggegevens beheren</translation>
 <translation id="1902576642799138955">Geldigheidsduur</translation>
 <translation id="1905375423839394163">Naam Chromebook-apparaat</translation>
 <translation id="1905710495812624430">Maximumaantal toegestane pogingen overschreden.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Toekomstige software- en beveiligingsupdates worden automatisch geïnstalleerd.</translation>
 <translation id="1979280758666859181">Je wijzigt naar een kanaal met een oudere versie van <ph name="PRODUCT_NAME" />. De wijziging van kanaal wordt toegepast wanneer de versie van het kanaal overeenkomt met de versie die momenteel op het apparaat is geïnstalleerd.</translation>
 <translation id="197989455406964291">KDC ondersteunt versleutelingstype niet</translation>
-<translation id="1981544341227357861">Verwijder je beveiligingssleutel uit je apparaat, steek hem er opnieuw in en tik erop.</translation>
 <translation id="1982354452682152483">Er is geen beschrijving beschikbaar.</translation>
 <translation id="1987317783729300807">Accounts</translation>
 <translation id="1989112275319619282">Browsen</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Inloggen bij Chrome</translation>
 <translation id="3285322247471302225">Nieuw &amp;tabblad</translation>
 <translation id="328571385944182268">Je wachtwoorden opslaan?</translation>
-<translation id="3286737518123001369">De inloggegevens bekijken en verwijderen die op je beveiligingssleutel zijn opgeslagen</translation>
 <translation id="3288047731229977326">Extensies die in de ontwikkelaarmodus worden uitgevoerd, kunnen je computer beschadigen. Als je geen ontwikkelaar bent, moet je deze extensies uitschakelen, die in de ontwikkelaarsmodus worden uitgevoerd, om beveiligd te blijven.</translation>
 <translation id="3289856944988573801">Gebruik Ethernet of wifi om op updates te controleren.</translation>
 <translation id="3293644607209440645">Deze pagina verzenden</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA-handtekening met SHA-512</translation>
 <translation id="3544879808695557954">Gebruikersnaam (optioneel)</translation>
 <translation id="354602065659584722">Schadelijke software verwijderd</translation>
-<translation id="3547220315004609203">Tabbladstrook in-/uitschakelen</translation>
 <translation id="3547954654003013442">Proxyinstellingen</translation>
 <translation id="3550915441744863158">Chrome wordt automatisch bijgewerkt, zodat je altijd beschikt over de nieuwste versie</translation>
 <translation id="3551320343578183772">Tabblad sluiten</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Microfoon toegestaan</translation>
 <translation id="4031527940632463547">Sensoren geblokkeerd</translation>
 <translation id="4033471457476425443">Nieuwe map toevoegen</translation>
-<translation id="403456802563765809">Plaats je beveiligingssleutel en raak deze aan om je vingerafdrukken te beheren.</translation>
 <translation id="4034824040120875894">Printer</translation>
 <translation id="4035758313003622889">&amp;Taakbeheer</translation>
 <translation id="4036778507053569103">Het beleid dat van de server is gedownload, is ongeldig.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Als je <ph name="NETWORK_ID" /> wilt gebruiken, moet je mogelijk eerst <ph name="LINK_START" />de inlogpagina van het netwerk bezoeken<ph name="LINK_END" />, die over enkele seconden automatisch wordt geopend. Als de pagina niet wordt geopend, kan het netwerk niet worden gebruikt.</translation>
 <translation id="5637476008227280525">Mobiele data inschakelen</translation>
 <translation id="5638309510554459422">Zoek extensies en thema's in de <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Geef de pincode van je beveiligingssleutel op om je vingerafdrukken te beheren. Als je de pincode niet weet, moet je de beveiligingssleutel resetten.</translation>
 <translation id="5639549361331209298">Deze pagina opnieuw laden, vasthouden om meer opties weer te geven</translation>
 <translation id="5640133431808313291">Beveiligingssleutels beheren</translation>
 <translation id="5642508497713047">CRL-ondertekenaar</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Ongeldige URL-indeling. Ondersteunde formaten zijn \\server\share en smb://server/share.</translation>
 <translation id="5990386583461751448">Vertaald</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="5995884201513800557">Blijf je beveiligingssleutel aanraken om je vingerafdruk op te slaan.</translation>
 <translation id="5997337190805127100">Meer informatie over sitetoegang</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultaten voor '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Voorkeursstemmen</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Video-invoer openen</translation>
 <translation id="6011193465932186973">Vingerafdruk</translation>
 <translation id="6011449291337289699">Sitegegevens wissen</translation>
-<translation id="6013505829696424563">Geef de pincode van je beveiligingssleutel op om de inloggegevens te bekijken. Als je de pincode niet weet, moet je de beveiligingssleutel resetten.</translation>
 <translation id="6015266928248016057">Ongeldige pukcode. Resterende pogingen: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Jaar</translation>
 <translation id="6016551720757758985">Powerwash bevestigen met herstel van eerdere versie</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Vragen vóór verzenden</translation>
 <translation id="6840184929775541289">Is geen certificeringsinstantie</translation>
 <translation id="6841186874966388268">Fouten</translation>
-<translation id="6841187140911216178">Plaats je beveiligingssleutel en tik erop om de inloggegevens te bekijken</translation>
 <translation id="6843423766595476978">'Oké Google' is helemaal ingesteld</translation>
 <translation id="6845038076637626672">Gemaximaliseerd openen</translation>
 <translation id="6845325883481699275">Help de beveiliging van Chrome te verbeteren</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Afbeelding annoteren</translation>
 <translation id="8845001906332463065">Hulp nodig?</translation>
-<translation id="8845164297565101021">Plaats de beveiligingssleutel en tik erop om een pincode in te stellen of te wijzigen.</translation>
 <translation id="8846132060409673887">De fabrikant en het model van deze computer lezen</translation>
 <translation id="8846141544112579928">Toetsenbord zoeken...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Internationale Netscape-step-up</translation>
 <translation id="8944099748578356325">De batterij sneller gebruiken (momenteel <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> deelt een venster met <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Opgeslagen vingerafdrukken op je apparaat toevoegen, verwijderen of de naam wijzigen</translation>
 <translation id="8946359700442089734">Foutopsporingsfuncties zijn niet volledig ingeschakeld op dit <ph name="IDS_SHORT_PRODUCT_NAME" />-apparaat.</translation>
 <translation id="894871326938397531">Incognitomodus verlaten?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> wil het merk en het model van je beveiligingssleutel bekijken</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb
index c82b6477..3200b6e8 100644
--- a/chrome/app/resources/generated_resources_no.xtb
+++ b/chrome/app/resources/generated_resources_no.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Plugin VM trenger tillatelse til å kjøre</translation>
 <translation id="1900305421498694955">Apper fra Google Play trenger kanskje full tilgang til filsystemet for å kunne lese og skrive til filer på eksterne lagringsenheter. Filer og mapper som opprettes på enheten, er synlige for alle som bruker den eksterne stasjonen. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Marker &amp;alt</translation>
-<translation id="1901984611178952431">Administrer påloggingsdata</translation>
 <translation id="1902576642799138955">Gyldighetsperiode</translation>
 <translation id="1905375423839394163">Navn på Chromebook-enhet</translation>
 <translation id="1905710495812624430">Du har overskredet maksimumsgrensen for antall forsøk.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Fremtidige programvare- og sikkerhetsoppdateringer blir installert automatisk.</translation>
 <translation id="1979280758666859181">Du endrer til en kanal med en eldre versjon av <ph name="PRODUCT_NAME" />. Kanalendringen trer i kraft når kanalversjonen samsvarer med versjonen som allerede er installert på enheten din.</translation>
 <translation id="197989455406964291">KDC støtter ikke krypteringstypen</translation>
-<translation id="1981544341227357861">Fjern sikkerhetsnøkkelen fra enheten din før du setter den inn på nytt og tar på den.</translation>
 <translation id="1982354452682152483">Beskrivelse er ikke tilgjengelig.</translation>
 <translation id="1987317783729300807">Kontoer</translation>
 <translation id="1989112275319619282">Bla gjennom</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Logg på Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;fane</translation>
 <translation id="328571385944182268">Vil du lagre passordene dine?</translation>
-<translation id="3286737518123001369">Vis og slett påloggingsdataene som er lagret på sikkerhetsnøkkelen</translation>
 <translation id="3288047731229977326">Utvidelser som kjører i utviklermodus kan skade datamaskinen din. Hvis du ikke er utvikler, bør du deaktivere disse utvidelsene som kjører i utviklermodus, for å være på den sikre siden.</translation>
 <translation id="3289856944988573801">For å sjekke etter oppdateringer, kan du bruke Ethernet eller Wi-Fi.</translation>
 <translation id="3293644607209440645">Send denne siden</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA-signatur med SHA-512</translation>
 <translation id="3544879808695557954">Brukernavn (valgfritt)</translation>
 <translation id="354602065659584722">Den skadelige programvaren er fjernet</translation>
-<translation id="3547220315004609203">Slå av/på faneraden</translation>
 <translation id="3547954654003013442">Innstillinger for proxy-tjener</translation>
 <translation id="3550915441744863158">Chrome oppdateres automatisk slik at du alltid har den nyeste versjonen</translation>
 <translation id="3551320343578183772">Lukk fanen</translation>
@@ -2119,7 +2115,6 @@
 <translation id="4031179711345676612">Mikrofonen er tillatt</translation>
 <translation id="4031527940632463547">Sensorene er blokkerte</translation>
 <translation id="4033471457476425443">Legg til ny mappe</translation>
-<translation id="403456802563765809">For å administrere fingeravtrykkene dine, sett inn sikkerhetsnøkkelen og trykk på den.</translation>
 <translation id="4034824040120875894">Skriver</translation>
 <translation id="4035758313003622889">&amp;Oppgavebehandling</translation>
 <translation id="4036778507053569103">Regelen som ble lastet ned fra tjeneren, er ugyldig.</translation>
@@ -3162,7 +3157,6 @@
 <translation id="5636996382092289526">Hvis du vil bruke <ph name="NETWORK_ID" />, er det mulig du må <ph name="LINK_START" />gå til nettverkets påloggingsside<ph name="LINK_END" />, som åpnes automatisk om få sekunder. Hvis det ikke skjer, kan ikke nettverket brukes.</translation>
 <translation id="5637476008227280525">Slå på mobildata</translation>
 <translation id="5638309510554459422">Finn utvidelser og temaer i <ph name="BEGIN_LINK" />Chrome Nettmarked<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">For å administrere fingeravtrykkene dine, skriv inn PIN-koden til sikkerhetsnøkkelen. Hvis du ikke kan PIN-koden, må du tilbakestille sikkerhetsnøkkelen.</translation>
 <translation id="5639549361331209298">Last inn denne siden på nytt – hold inne for flere alternativer</translation>
 <translation id="5640133431808313291">Administrer sikkerhetsnøkler</translation>
 <translation id="5642508497713047">Signatar for sertifikatopphevelsesliste</translation>
@@ -3405,7 +3399,6 @@
 <translation id="5985458664595100876">Ugyldig nettadresseformat. Støttede formater er \\tjener\delt og smb://tjener/delt.</translation>
 <translation id="5990386583461751448">Oversatt</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="5995884201513800557">Fortsett å trykke på sikkerhetsnøkkelen for å lagre fingeravtrykket.</translation>
 <translation id="5997337190805127100">Finn ut mer om nettstedstilgang</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultater for «<ph name="SEARCH_TEXT" />»</translation>
 <translation id="6002458620803359783">Foretrukne stemmer</translation>
@@ -3415,7 +3408,6 @@
 <translation id="6010869025736512584">Åpner videoinngang</translation>
 <translation id="6011193465932186973">Fingeravtrykk</translation>
 <translation id="6011449291337289699">Fjern nettstedsdata</translation>
-<translation id="6013505829696424563">For å se påloggingsinformasjonen, skriv inn PIN-koden til sikkerhetsnøkkelen. Hvis du ikke kan PIN-koden, må du tilbakestille sikkerhetsnøkkelen.</translation>
 <translation id="6015266928248016057">Ugyldig PUK-kode. Gjenværende forsøk: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">År</translation>
 <translation id="6016551720757758985">Bekreft kjøring av Powerwash, som tilbakestiller enheten til forrige versjon</translation>
@@ -3970,7 +3962,6 @@
 <translation id="6840155290835956714">Spør før noe sendes</translation>
 <translation id="6840184929775541289">Er ikke en sertifiseringsinstans</translation>
 <translation id="6841186874966388268">Feil</translation>
-<translation id="6841187140911216178">For å se påloggingsinformasjon, sett inn sikkerhetsnøkkelen og trykk på den</translation>
 <translation id="6843423766595476978">Ok Google er konfigurert</translation>
 <translation id="6845038076637626672">Maksimer ved åpning</translation>
 <translation id="6845325883481699275">Bidra til å gjøre Chrome sikrere</translation>
@@ -5375,7 +5366,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Kommenter bildet</translation>
 <translation id="8845001906332463065">Få hjelp</translation>
-<translation id="8845164297565101021">Sett sikkerhetsnøkkelen inn og ta på den for å opprette eller endre en PIN-kode.</translation>
 <translation id="8846132060409673887">Les om datamaskinens produsent og modell</translation>
 <translation id="8846141544112579928">Søker etter tastatur …</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5448,7 +5438,6 @@
 <translation id="894360074127026135">Internasjonal oppgradering av Netscape</translation>
 <translation id="8944099748578356325">bruke opp batteriet raskere (for øyeblikket <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> deler et vindu med <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Legg til, slett og gi nytt navn til fingeravtrykk som er lagret på enheten</translation>
 <translation id="8946359700442089734">Feilsøkingsfunksjonene ble ikke påslått på denne <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten.</translation>
 <translation id="894871326938397531">Vil du avslutte inkognitomodus?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> ber om å se merket og modellen til sikkerhetsnøkkelen din</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb
index 4c54e810..a629036 100644
--- a/chrome/app/resources/generated_resources_pl.xtb
+++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Oprogramowanie Plugin VM potrzebuje uprawnień, by działać prawidłowo</translation>
 <translation id="1900305421498694955">Aplikacje z Google Play mogą wymagać pełnego dostępu do systemu plików, by odczytywać i zapisywać pliki na zewnętrznych urządzeniach pamięci masowej. Pliki i foldery utworzone na urządzeniu są widoczne dla każdej osoby używającej dysku zewnętrznego. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Zaznacz &amp;wszystko</translation>
-<translation id="1901984611178952431">Zarządzaj danymi logowania</translation>
 <translation id="1902576642799138955">Okres ważności</translation>
 <translation id="1905375423839394163">Nazwa Chromebooka</translation>
 <translation id="1905710495812624430">Przekroczono maksymalną liczbę prób.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Przyszłe aktualizacje oprogramowania i zabezpieczeń będą instalowane automatycznie.</translation>
 <translation id="1979280758666859181">Przechodzisz na kanał, w którym <ph name="PRODUCT_NAME" /> jest w starszej wersji. Zmiana nastąpi wtedy, gdy wersja na wybranym kanale będzie zgodna z tą zainstalowaną na Twoim urządzeniu.</translation>
 <translation id="197989455406964291">KDC nie obsługuje tego typu szyfrowania</translation>
-<translation id="1981544341227357861">Odłącz klucz bezpieczeństwa od urządzenia, a potem jeszcze raz go podłącz i dotknij.</translation>
 <translation id="1982354452682152483">Brak opisu.</translation>
 <translation id="1987317783729300807">Konta</translation>
 <translation id="1989112275319619282">Przeglądaj</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Zaloguj się w Chrome</translation>
 <translation id="3285322247471302225">Nowa &amp;karta</translation>
 <translation id="328571385944182268">Zapisywać Twoje hasła?</translation>
-<translation id="3286737518123001369">Przeglądaj i usuwaj dane logowania zapisane na kluczu bezpieczeństwa</translation>
 <translation id="3288047731229977326">Rozszerzenia działające w trybie dewelopera mogą uszkodzić Twój komputer. Jeśli nie jesteś deweloperem, wyłącz je dla bezpieczeństwa.</translation>
 <translation id="3289856944988573801">Jeśli chcesz sprawdzić aktualizacje, użyj Ethernetu lub Wi-Fi.</translation>
 <translation id="3293644607209440645">Wyślij tę stronę</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Podpis X9.62 ECDSA z SHA-512</translation>
 <translation id="3544879808695557954">Nazwa użytkownika (opcjonalnie)</translation>
 <translation id="354602065659584722">Szkodliwe oprogramowanie zostało usunięte</translation>
-<translation id="3547220315004609203">Przełącz pasek kart</translation>
 <translation id="3547954654003013442">Ustawienia serwera proxy</translation>
 <translation id="3550915441744863158">Chrome aktualizuje się automatycznie, więc zawsze masz najnowszą wersję</translation>
 <translation id="3551320343578183772">Zamknij kartę</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Zezwolono na dostęp do mikrofonu</translation>
 <translation id="4031527940632463547">Zablokowano dostęp do czujników</translation>
 <translation id="4033471457476425443">Dodaj nowy folder</translation>
-<translation id="403456802563765809">Aby zarządzać odciskami palców, podłącz klucz bezpieczeństwa i dotknij go.</translation>
 <translation id="4034824040120875894">Drukarka</translation>
 <translation id="4035758313003622889">&amp;Menedżer zadań</translation>
 <translation id="4036778507053569103">Zasady pobrane z serwera są nieprawidłowe.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Skorzystanie z <ph name="NETWORK_ID" /> może wymagać <ph name="LINK_START" />wejścia na stronę logowania się do sieci<ph name="LINK_END" />, która otworzy się automatycznie za kilka sekund. Jeśli tak się nie stanie, nie będzie można użyć tej sieci.</translation>
 <translation id="5637476008227280525">Włączanie komórkowej transmisji danych</translation>
 <translation id="5638309510554459422">Znajdź rozszerzenia i motywy w <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Aby zarządzać odciskami palców, wpisz kod PIN swojego klucza bezpieczeństwa. Jeśli go nie znasz, musisz zresetować klucz.</translation>
 <translation id="5639549361331209298">Załaduj tę stronę ponownie. Przytrzymaj, by wyświetlić więcej opcji</translation>
 <translation id="5640133431808313291">Zarządzanie kluczami bezpieczeństwa</translation>
 <translation id="5642508497713047">Podmiot podpisujący listę CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Nieprawidłowy format adresu URL. Obsługiwane formaty to \\server\share i smb://server/share.</translation>
 <translation id="5990386583461751448">Przetłumaczona</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="5995884201513800557">Dotykaj dalej klucza bezpieczeństwa, by zapisać odcisk palca.</translation>
 <translation id="5997337190805127100">Więcej informacji o uprawnieniach dostępu do stron</translation>
 <translation id="6000758707621254961">Wyniki wyszukiwania dla zapytania „<ph name="SEARCH_TEXT" />”: <ph name="RESULT_COUNT" /></translation>
 <translation id="6002458620803359783">Preferowane głosy</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Otwieram wejście wideo</translation>
 <translation id="6011193465932186973">Odcisk palca</translation>
 <translation id="6011449291337289699">Wyczyść dane witryny</translation>
-<translation id="6013505829696424563">Aby wyświetlić dane logowania, wpisz kod PIN swojego klucza bezpieczeństwa. Jeśli nie znasz kodu PIN, musisz zresetować klucz bezpieczeństwa.</translation>
 <translation id="6015266928248016057">Nieprawidłowy PUK. Pozostała liczba prób: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Rok</translation>
 <translation id="6016551720757758985">Potwierdzanie wykonania funkcji Powerwash z przywróceniem poprzedniej wersji</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Pytaj przed wysłaniem</translation>
 <translation id="6840184929775541289">Nie jest urzędem certyfikacji</translation>
 <translation id="6841186874966388268">Błędy</translation>
-<translation id="6841187140911216178">Aby wyświetlić dane logowania, podłącz klucz bezpieczeństwa i dotknij go</translation>
 <translation id="6843423766595476978">Ukończono konfigurację OK Google</translation>
 <translation id="6845038076637626672">Otwórz zmaksymalizowane</translation>
 <translation id="6845325883481699275">Pomóż zwiększyć bezpieczeństwo Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj notatkę na grafice</translation>
 <translation id="8845001906332463065">Uzyskaj pomoc</translation>
-<translation id="8845164297565101021">Aby utworzyć lub zmienić kod PIN, podłącz klucz bezpieczeństwa i dotknij go.</translation>
 <translation id="8846132060409673887">Odczytywanie producenta i modelu tego komputera</translation>
 <translation id="8846141544112579928">Szukam klawiatury...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Dostęp międzynarodowy firmy Netscape</translation>
 <translation id="8944099748578356325">szybciej zużyje baterię (obecnie <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> udostępnia okno karcie <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Zarządzaj odciskami palców na urządzeniu – dodawaj, zmieniaj ich nazwy i usuwaj je</translation>
 <translation id="8946359700442089734">Funkcje debugowania nie zostały w pełni włączone na urządzeniu <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Zamknąć tryb incognito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> chce odczytać markę i model Twojego klucza bezpieczeństwa</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb
index 7873ba7..9b19ebb 100644
--- a/chrome/app/resources/generated_resources_pt-BR.xtb
+++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">A Plugin VM precisa de permissão para ser executada</translation>
 <translation id="1900305421498694955">Os apps do Google Play podem exigir acesso total ao sistema de arquivos para a leitura e a gravação de arquivos em dispositivos de armazenamento externo. Os arquivos e pastas criados no dispositivo ficam visíveis para qualquer pessoa que use o drive externo. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Selecionar &amp;tudo</translation>
-<translation id="1901984611178952431">Gerenciar dados de login</translation>
 <translation id="1902576642799138955">Período de validade</translation>
 <translation id="1905375423839394163">Nome do dispositivo Chromebook</translation>
 <translation id="1905710495812624430">O número máximo de tentativas permitidas foi excedido.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">As atualizações de software e de segurança futuras serão instaladas automaticamente.</translation>
 <translation id="1979280758666859181">Você está mudando para um canal com uma versão mais antiga do <ph name="PRODUCT_NAME" />. A mudança de canal será aplicada quando a versão do canal corresponder à versão instalada atualmente no dispositivo.</translation>
 <translation id="197989455406964291">O KDC não é compatível com esse tipo de criptografia</translation>
-<translation id="1981544341227357861">Remova sua chave de segurança do dispositivo, depois reinsira-a e toque nela.</translation>
 <translation id="1982354452682152483">Nenhuma descrição disponível.</translation>
 <translation id="1987317783729300807">Contas</translation>
 <translation id="1989112275319619282">Procurar</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Fazer login no Google Chrome</translation>
 <translation id="3285322247471302225">Nova &amp;guia</translation>
 <translation id="328571385944182268">Salvar senhas?</translation>
-<translation id="3286737518123001369">Ver e excluir os dados de login armazenados na sua chave de segurança</translation>
 <translation id="3288047731229977326">Extensões executadas no modo de desenvolvedor podem prejudicar o computador. Se você não for desenvolvedor, para sua segurança, desative essas extensões que estão sendo executadas no modo de desenvolvedor.</translation>
 <translation id="3289856944988573801">Para verificar se há atualizações, utilize Ethernet ou Wi-Fi.</translation>
 <translation id="3293644607209440645">Enviar esta página</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Assinatura X9.62 ECDSA com SHA-512</translation>
 <translation id="3544879808695557954">Nome de usuário (opcional)</translation>
 <translation id="354602065659584722">Software perigoso removido</translation>
-<translation id="3547220315004609203">Alternar barra de guias</translation>
 <translation id="3547954654003013442">Configurações de proxy</translation>
 <translation id="3550915441744863158">O Google Chrome é atualizado automaticamente para que você tenha sempre a versão mais recente.</translation>
 <translation id="3551320343578183772">Fechar guia</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Microfone permitido</translation>
 <translation id="4031527940632463547">Sensores bloqueados</translation>
 <translation id="4033471457476425443">Adicionar nova pasta</translation>
-<translation id="403456802563765809">Para gerenciar suas impressões digitais, insira sua chave de segurança e toque nela.</translation>
 <translation id="4034824040120875894">Impressora</translation>
 <translation id="4035758313003622889">&amp;Gerenciador de tarefas</translation>
 <translation id="4036778507053569103">A política transferida do servidor por meio de download é inválida.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">Para usar <ph name="NETWORK_ID" />, talvez seja necessário primeiro <ph name="LINK_START" />visitar a página de login da rede<ph name="LINK_END" />, que abrirá automaticamente em alguns segundos. Se isso não acontecer, significa que a rede não pode ser usada.</translation>
 <translation id="5637476008227280525">Ativar dados móveis</translation>
 <translation id="5638309510554459422">Encontre extensões e temas na <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Para gerenciar suas impressões digitais, insira o PIN da sua chave de segurança. Se não souber o PIN, redefina a chave de segurança.</translation>
 <translation id="5639549361331209298">Recarrega esta página; mantenha pressionado para ver mais opções</translation>
 <translation id="5640133431808313291">Gerenciar chaves de segurança</translation>
 <translation id="5642508497713047">Signatário de lista de certificados revogados</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Formato de URL inválido. Os formatos compatíveis são \\server\share e smb://server/share.</translation>
 <translation id="5990386583461751448">Traduzida</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="5995884201513800557">Continue tocando na sua chave de segurança para salvar sua impressão digital.</translation>
 <translation id="5997337190805127100">Saiba mais sobre o acesso aos sites</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Vozes preferidas</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Acessando entrada de vídeo</translation>
 <translation id="6011193465932186973">Impressão digital</translation>
 <translation id="6011449291337289699">Limpar dados de sites</translation>
-<translation id="6013505829696424563">Para ver dados de login, insira o PIN da sua chave de segurança. Se não souber o PIN, redefina a chave de segurança.</translation>
 <translation id="6015266928248016057">PUK inválida. Tentativas restantes: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Ano</translation>
 <translation id="6016551720757758985">Confirmar powerwash com retorno à versão anterior</translation>
@@ -3977,7 +3969,6 @@
 <translation id="6840155290835956714">Perguntar antes de enviar</translation>
 <translation id="6840184929775541289">Não é uma Autoridade de certificação</translation>
 <translation id="6841186874966388268">Erros</translation>
-<translation id="6841187140911216178">Para ver dados de login, insira sua chave de segurança e toque nela</translation>
 <translation id="6843423766595476978">Ok Google configurado</translation>
 <translation id="6845038076637626672">Abrir maximizado</translation>
 <translation id="6845325883481699275">Ajudar a melhorar a segurança do Chrome</translation>
@@ -5089,7 +5080,7 @@
 <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>
+<translation id="8438566539970814960">Melhorar as pesquisas e a navegação</translation>
 <translation id="8439506636278576865">Oferecer a tradução de páginas neste idioma</translation>
 <translation id="8440630305826533614">Aplicativos Linux</translation>
 <translation id="8443338615972234259">Crie uma nova conta para seu usuário supervisionado agora mesmo.</translation>
@@ -5382,7 +5373,6 @@
 <translation id="8838770651474809439">Hambúrger</translation>
 <translation id="883911313571074303">Nota na imagem</translation>
 <translation id="8845001906332463065">Ajuda</translation>
-<translation id="8845164297565101021">Insira sua chave de segurança e toque nela para criar ou alterar um PIN.</translation>
 <translation id="8846132060409673887">Ler as informações sobre o fabricante e modelo deste computador</translation>
 <translation id="8846141544112579928">Procurando teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5455,7 +5445,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Consumir a bateria mais rapidamente (no momento com <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">O app <ph name="APP_NAME" /> está compartilhando uma janela com <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Adicionar, renomear e excluir as impressões digitais salvas no dispositivo</translation>
 <translation id="8946359700442089734">Os recursos de depuração não foram completamente ativados neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Sair do modo de navegação anônima?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> quer ver a marca e o modelo da sua chave de segurança</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb
index 53c222c..727d31e 100644
--- a/chrome/app/resources/generated_resources_pt-PT.xtb
+++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">O Plugin VM necessita de autorização para ser executado</translation>
 <translation id="1900305421498694955">As aplicações do Google Play podem necessitar de acesso completo ao sistema de ficheiros para ler e gravar ficheiros em dispositivos de armazenamento externos. Os ficheiros e as pastas criados no dispositivo são visíveis para qualquer pessoa que utilize a unidade externa. <ph name="LINK_BEGIN" />Saber mais<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Seleccion&amp;ar tudo</translation>
-<translation id="1901984611178952431">Gerir dados de início de sessão</translation>
 <translation id="1902576642799138955">Período de validade</translation>
 <translation id="1905375423839394163">Nome do dispositivo do Chromebook</translation>
 <translation id="1905710495812624430">Foi excedido o número máximo de tentativas permitidas.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">As atualizações de software e segurança futuras serão instaladas automaticamente.</translation>
 <translation id="1979280758666859181">Está a mudar para um canal com uma versão mais antiga do <ph name="PRODUCT_NAME" />. A alteração de canal será aplicada quando a versão do canal corresponder à versão atualmente instalada no seu dispositivo.</translation>
 <translation id="197989455406964291">O KDC não suporta o tipo de encriptação.</translation>
-<translation id="1981544341227357861">Remova a chave de segurança do dispositivo e, em seguida, volte a introduzi-la e toque na mesma.</translation>
 <translation id="1982354452682152483">Nenhuma descrição disponível.</translation>
 <translation id="1987317783729300807">Contas</translation>
 <translation id="1989112275319619282">Procurar</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Iniciar sessão no Chrome</translation>
 <translation id="3285322247471302225">Novo &amp;Separador</translation>
 <translation id="328571385944182268">Pretende guardar as suas palavras-passe?</translation>
-<translation id="3286737518123001369">Veja e elimine os dados de início de sessão armazenados na sua chave de segurança.</translation>
 <translation id="3288047731229977326">As extensões que funcionam no modo de programador podem danificar o seu computador. Se não é programador, deverá desativar as extensões que sejam executadas neste modo para se manter protegido.</translation>
 <translation id="3289856944988573801">Para verificar se existem atualizações, utilize Ethernet ou Wi-Fi.</translation>
 <translation id="3293644607209440645">Enviar esta página</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Assinatura X9.62 ECDSA com SHA-512</translation>
 <translation id="3544879808695557954">Nome de utilizador (opcional)</translation>
 <translation id="354602065659584722">Software prejudicial removido</translation>
-<translation id="3547220315004609203">Ativar/desativar Faixa de separadores</translation>
 <translation id="3547954654003013442">Definições de proxy</translation>
 <translation id="3550915441744863158">O Chrome é atualizado automaticamente para que tenha sempre a versão mais recente</translation>
 <translation id="3551320343578183772">Fechar Separador</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Microfone permitido</translation>
 <translation id="4031527940632463547">Sensores bloqueados</translation>
 <translation id="4033471457476425443">Adicionar nova pasta</translation>
-<translation id="403456802563765809">Para gerir as suas impressões digitais, insira e toque na chave de segurança.</translation>
 <translation id="4034824040120875894">Impressora</translation>
 <translation id="4035758313003622889">Gestor de &amp;tarefas</translation>
 <translation id="4036778507053569103">A política transferida do servidor é inválida.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526">Para utilizar <ph name="NETWORK_ID" /> poderá ter primeiro de <ph name="LINK_START" />visitar a página de início de sessão da rede<ph name="LINK_END" />, que será aberta automaticamente dentro de alguns segundos. Se isso não acontecer, a rede não pode ser utilizada.</translation>
 <translation id="5637476008227280525">Ativar dados móveis</translation>
 <translation id="5638309510554459422">Encontre extensões e temas na <ph name="BEGIN_LINK" />Web Store do Chrome<ph name="END_LINK" />.</translation>
-<translation id="5639152092474119692">Para gerir as suas impressões digitais, introduza o PIN da chave de segurança. Se não souber o PIN, terá de repor a chave de segurança.</translation>
 <translation id="5639549361331209298">Atualizar esta página, premir sem soltar para ver mais opções</translation>
 <translation id="5640133431808313291">Efetue a gestão das chaves de segurança</translation>
 <translation id="5642508497713047">Signatário CRL</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Formato de URL inválido. Os formatos suportados são \\server\share e smb://server/share.</translation>
 <translation id="5990386583461751448">Tradução</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="5995884201513800557">Continue a tocar na chave de segurança para guardar a sua impressão digital.</translation>
 <translation id="5997337190805127100">Saiba mais acerca do acesso a sites</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultados para "<ph name="SEARCH_TEXT" />"</translation>
 <translation id="6002458620803359783">Vozes preferidas</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">A aceder à entrada de vídeo</translation>
 <translation id="6011193465932186973">Impressão digital</translation>
 <translation id="6011449291337289699">Limpar dados do site</translation>
-<translation id="6013505829696424563">Para ver os dados de início de sessão, introduza o PIN para a sua chave de segurança. Se não souber o PIN, terá de repor a chave de segurança.</translation>
 <translation id="6015266928248016057">PUK inválido. Tentativas restantes: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Ano</translation>
 <translation id="6016551720757758985">Confirmar o Powerwash com o regresso à versão anterior</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Perguntar antes de enviar</translation>
 <translation id="6840184929775541289">Não é uma autoridade de certificação</translation>
 <translation id="6841186874966388268">Erros</translation>
-<translation id="6841187140911216178">Para ver os dados de início de sessão, insira e toque na sua chave de segurança.</translation>
 <translation id="6843423766595476978">O Ok Google está pronto</translation>
 <translation id="6845038076637626672">Abrir Maximizada</translation>
 <translation id="6845325883481699275">Ajudar a melhorar a segurança do Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hambúrguer</translation>
 <translation id="883911313571074303">Anotar imagem</translation>
 <translation id="8845001906332463065">Obter ajuda</translation>
-<translation id="8845164297565101021">Introduza e toque na chave de segurança para criar ou alterar um PIN.</translation>
 <translation id="8846132060409673887">Consultar o fabricante e modelo deste computador</translation>
 <translation id="8846141544112579928">A pesquisar teclado...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Step-Up Internacional Netscape</translation>
 <translation id="8944099748578356325">Utilizar a bateria mais rapidamente (atualmente, <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> está a partilhar uma janela com <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Adicionar, mudar o nome e eliminar impressões digitais guardadas no dispositivo</translation>
 <translation id="8946359700442089734">As funcionalidades de depuração não foram totalmente ativadas neste dispositivo <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Sair da navegação anónima?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> pretende ver a marca e o modelo da sua chave de segurança.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb
index 8c7746a..e112603e 100644
--- a/chrome/app/resources/generated_resources_ro.xtb
+++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM are nevoie de permisiunea de a rula</translation>
 <translation id="1900305421498694955">Aplicațiile din Google Play pot necesita acces deplin la sistemul de fișiere pentru a citi și a scrie fișiere pe dispozitive de stocare externe. Fișierele și dosarele create pe dispozitiv sunt vizibile oricărei persoane care folosește unitatea externă. <ph name="LINK_BEGIN" />Află mai multe<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Select&amp;ează tot</translation>
-<translation id="1901984611178952431">Gestionează datele de conectare</translation>
 <translation id="1902576642799138955">Perioadă de validitate</translation>
 <translation id="1905375423839394163">Numele dispozitivului Chromebook</translation>
 <translation id="1905710495812624430">Ai depășit numărul maxim de încercări permise.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Actualizările de software și de securitate ulterioare se vor instala automat.</translation>
 <translation id="1979280758666859181">Treceți la un canal cu o versiune <ph name="PRODUCT_NAME" /> mai veche. Schimbarea canalului se va aplica atunci când versiunea canalului va corespunde cu versiunea instalată în prezent pe dispozitiv.</translation>
 <translation id="197989455406964291">KDC nu acceptă tipul de criptare</translation>
-<translation id="1981544341227357861">Scoate cheia de securitate din dispozitiv, apoi introdu-o din nou și atinge-o.</translation>
 <translation id="1982354452682152483">Nu este disponibilă nicio descriere.</translation>
 <translation id="1987317783729300807">Conturi</translation>
 <translation id="1989112275319619282">Răsfoiește</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Conectează-te la Chrome</translation>
 <translation id="3285322247471302225">Filă &amp;nouă</translation>
 <translation id="328571385944182268">Salvezi parolele?</translation>
-<translation id="3286737518123001369">Consultă și șterge datele de conectare stocate pe cheia de securitate</translation>
 <translation id="3288047731229977326">Extensiile care rulează în modul pentru dezvoltatori pot afecta computerul. Dacă nu sunteți dezvoltator, se recomandă să dezactivați aceste extensii, pentru siguranță.</translation>
 <translation id="3289856944988573801">Pentru a verifica dacă există actualizări, utilizați Ethernet sau Wi-Fi.</translation>
 <translation id="3293644607209440645">Trimite pagina</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Semnătură X9.62 ECDSA cu SHA-512</translation>
 <translation id="3544879808695557954">Nume de utilizator (opțional)</translation>
 <translation id="354602065659584722">Software-ul dăunător a fost eliminat</translation>
-<translation id="3547220315004609203">Activează/dezactivează bara de file</translation>
 <translation id="3547954654003013442">Setări proxy</translation>
 <translation id="3550915441744863158">Chrome se actualizează automat, astfel încât să aveți întotdeauna cea mai recentă versiune</translation>
 <translation id="3551320343578183772">Închide fila</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Microfonul este permis</translation>
 <translation id="4031527940632463547">Senzorii sunt blocați</translation>
 <translation id="4033471457476425443">Adaugă un dosar nou</translation>
-<translation id="403456802563765809">Ca să gestionezi amprentele, introdu și atinge cheia de securitate.</translation>
 <translation id="4034824040120875894">Imprimantă</translation>
 <translation id="4035758313003622889">&amp;Manager de activități</translation>
 <translation id="4036778507053569103">Politica descărcată de pe server nu este validă.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Pentru a utiliza <ph name="NETWORK_ID" /> ar putea fi necesar să <ph name="LINK_START" />accesați mai întâi pagina de conectare a rețelei<ph name="LINK_END" />, care se va deschide automat în câteva secunde. Dacă acest lucru nu se întâmplă, rețeaua nu poate fi utilizată.</translation>
 <translation id="5637476008227280525">Activează datele mobile</translation>
 <translation id="5638309510554459422">Găsește extensii și teme în <ph name="BEGIN_LINK" />Magazinul web Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Pentru a gestiona amprentele digitale, introdu codul PIN al cheii de securitate. Dacă nu știi codul PIN, va trebui să resetezi cheia de securitate.</translation>
 <translation id="5639549361331209298">Reîncărcați această pagină. Țineți apăsat pentru a vedea mai multe opțiuni</translation>
 <translation id="5640133431808313291">Gestionează cheile de securitate</translation>
 <translation id="5642508497713047">Semnatar CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Format nevalid al adresei URL. Formatele acceptate sunt \\server\share și smb://server/share.</translation>
 <translation id="5990386583461751448">Tradusă</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="5995884201513800557">Atinge mai departe cheia de securitate pentru a-ți salva amprenta digitală.</translation>
 <translation id="5997337190805127100">Află mai multe despre accesul la site</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> rezultate pentru „<ph name="SEARCH_TEXT" />”</translation>
 <translation id="6002458620803359783">Vocile preferate</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Se accesează intrarea video</translation>
 <translation id="6011193465932186973">Amprentă</translation>
 <translation id="6011449291337289699">Șterge datele site-ului</translation>
-<translation id="6013505829696424563">Pentru a vedea datele de conectare, introdu codul PIN pentru cheia de securitate. Dacă nu știi codul PIN, va trebui să resetezi cheia de securitate.</translation>
 <translation id="6015266928248016057">PUK nevalid. Număr de reîncercări rămase: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">An</translation>
 <translation id="6016551720757758985">Confirmă Powerwash cu revenire la versiunea anterioară</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Întreabă înainte de a trimite</translation>
 <translation id="6840184929775541289">Nu este o Autoritate de certificare</translation>
 <translation id="6841186874966388268">Erori</translation>
-<translation id="6841187140911216178">Pentru a vedea datele de conectare, inserează și atinge cheia de securitate</translation>
 <translation id="6843423766595476978">Ok Google este configurat</translation>
 <translation id="6845038076637626672">Deschideți aplicația maximizată</translation>
 <translation id="6845325883481699275">Contribuie la îmbunătățirea securității pentru Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Adnotează imaginea</translation>
 <translation id="8845001906332463065">Obține ajutor</translation>
-<translation id="8845164297565101021">Introdu și atinge cheia de securitate ca să creezi sau să modifici un cod PIN.</translation>
 <translation id="8846132060409673887">Citește producătorul și modelul acestui computer</translation>
 <translation id="8846141544112579928">Se caută tastatura...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">va consuma bateria mai rapid (în prezent, <ph name="BATTERY_PERCENTAGE" />%);</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> trimite conținutul unei ferestre către <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Adaugă, redenumește și șterge amprentele digitale salvate pe dispozitiv</translation>
 <translation id="8946359700442089734">Funcțiile de remediere a erorilor nu au fost activate complet pe acest dispozitiv <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Ieși din modul incognito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> dorește să vadă marca și modelul cheii de securitate</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb
index 34a3eb4..1e6736d 100644
--- a/chrome/app/resources/generated_resources_ru.xtb
+++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -639,7 +639,6 @@
 <translation id="1899826437968063457">Необходимо разрешение для запуска Plugin VM</translation>
 <translation id="1900305421498694955">Приложения из Google Play могут запрашивать разрешение на полный доступ к чтению и записи файлов на внешних запоминающих устройствах. При этом созданные на устройстве файлы и папки будут видны всем пользователям внешнего запоминающего устройства. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Выделить &amp;все</translation>
-<translation id="1901984611178952431">Управление учетными данными</translation>
 <translation id="1902576642799138955">Срок действия</translation>
 <translation id="1905375423839394163">Название устройства Chromebook</translation>
 <translation id="1905710495812624430">Превышено максимально допустимое число попыток.</translation>
@@ -690,7 +689,6 @@
 <translation id="1978006917103730774">Новые версии ПО и обновления безопасности будут устанавливаться автоматически.</translation>
 <translation id="1979280758666859181">Вы переходите на канал обновления с более ранней версией <ph name="PRODUCT_NAME" />. Чтобы изменения вступили в силу, версия канала и текущая версия на вашем устройстве должны совпадать.</translation>
 <translation id="197989455406964291">Центр распространения ключей (KDC) не поддерживает такой тип шифрования.</translation>
-<translation id="1981544341227357861">Извлеките электронный ключ, вставьте его в устройство и нажмите кнопку на нем.</translation>
 <translation id="1982354452682152483">Описание недоступно.</translation>
 <translation id="1987317783729300807">Аккаунты</translation>
 <translation id="1989112275319619282">Выбрать</translation>
@@ -1577,7 +1575,6 @@
 <translation id="3282568296779691940">Войти в Chrome</translation>
 <translation id="3285322247471302225">Новая вкладка</translation>
 <translation id="328571385944182268">Сохранить пароли?</translation>
-<translation id="3286737518123001369">Просмотр и удаление учетных данных, которые хранятся на электронном ключе.</translation>
 <translation id="3288047731229977326">Расширения, запущенные в режиме разработчика, могут причинить вред вашему компьютеру. Если вы не являетесь разработчиком, их следует отключить, чтобы обеспечить безопасность данных.</translation>
 <translation id="3289856944988573801">Чтобы проверить наличие обновлений, подключитесь через сеть Ethernet или Wi-Fi.</translation>
 <translation id="3293644607209440645">Отправить страницу</translation>
@@ -1747,7 +1744,6 @@
 <translation id="3543597750097719865">Подпись ECDSA X9.62 с SHA-512</translation>
 <translation id="3544879808695557954">Имя пользователя (необязательно)</translation>
 <translation id="354602065659584722">Вредоносное ПО удалено</translation>
-<translation id="3547220315004609203">Показать/скрыть панель вкладок</translation>
 <translation id="3547954654003013442">Настройки прокси-сервера</translation>
 <translation id="3550915441744863158">Chrome обновляется автоматически, поэтому у вас всегда будет установлена последняя версия.</translation>
 <translation id="3551320343578183772">Закрыть вкладку</translation>
@@ -2122,7 +2118,6 @@
 <translation id="4031179711345676612">Доступ к микрофону разрешен</translation>
 <translation id="4031527940632463547">Использование датчиков запрещено</translation>
 <translation id="4033471457476425443">Новая папка</translation>
-<translation id="403456802563765809">Чтобы перейти к управлению цифровыми отпечатками, вставьте электронный ключ и коснитесь кнопки.</translation>
 <translation id="4034824040120875894">Принтер</translation>
 <translation id="4035758313003622889">&amp;Диспетчер задач</translation>
 <translation id="4036778507053569103">Скачанная с сервера политика недействительна.</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526">Чтобы подключиться к сети "<ph name="NETWORK_ID" />", <ph name="LINK_START" />перейдите на страницу входа<ph name="LINK_END" /> – она автоматически откроется через несколько секунд. Если этого не произойдет, значит использование сети невозможно.</translation>
 <translation id="5637476008227280525">Включить мобильные данные</translation>
 <translation id="5638309510554459422">Найдите полезные расширения и приложения в <ph name="BEGIN_LINK" />Интернет-магазине Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Чтобы перейти к управлению цифровыми отпечатками, введите PIN-код для электронного ключа. Если вы не знаете PIN-код, сбросьте настройки ключа.</translation>
 <translation id="5639549361331209298">Обновить страницу (удерживайте, чтобы отобразить дополнительные параметры)</translation>
 <translation id="5640133431808313291">Настройки электронных ключей</translation>
 <translation id="5642508497713047">Сторона, подписавшая список отзыва сертификатов</translation>
@@ -3408,7 +3402,6 @@
 <translation id="5985458664595100876">Произошла ошибка. Необходимо использовать допустимые форматы URL: \\server\share или smb://server/share.</translation>
 <translation id="5990386583461751448">Перевод</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить это приложение.}one{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}few{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}many{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}other{Чтобы продолжить просмотр веб-страниц, попросите администратора удалить эти приложения.}}</translation>
-<translation id="5995884201513800557">Дотрагивайтесь до электронного ключа, чтобы сохранить цифровой отпечаток.</translation>
 <translation id="5997337190805127100">Подробнее о доступе для сайта…</translation>
 <translation id="6000758707621254961">Количество результатов поиска по запросу "<ph name="SEARCH_TEXT" />": <ph name="RESULT_COUNT" /></translation>
 <translation id="6002458620803359783">Голоса по умолчанию</translation>
@@ -3418,7 +3411,6 @@
 <translation id="6010869025736512584">Доступ к видеовходу</translation>
 <translation id="6011193465932186973">Отпечатки пальцев</translation>
 <translation id="6011449291337289699">Удаление данных сайтов</translation>
-<translation id="6013505829696424563">Чтобы посмотреть учетные данные, введите PIN-код для электронного ключа. Если вы не знаете PIN-код, сбросьте настройки ключа.</translation>
 <translation id="6015266928248016057">Недействительный PUK-код. Осталось попыток: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Год</translation>
 <translation id="6016551720757758985">Подтверждение Powerwash и возврата к предыдущей версии</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">Запрашивать разрешение перед отправкой</translation>
 <translation id="6840184929775541289">Не является Центром сертификации</translation>
 <translation id="6841186874966388268">Ошибки</translation>
-<translation id="6841187140911216178">Чтобы посмотреть учетные данные, вставьте электронный ключ и коснитесь его.</translation>
 <translation id="6843423766595476978">Команда "Окей, Google" настроена</translation>
 <translation id="6845038076637626672">Развернуть</translation>
 <translation id="6845325883481699275">Помочь Chrome стать ещё безопаснее</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">Гамбургер</translation>
 <translation id="883911313571074303">Добавить примечание к изображению</translation>
 <translation id="8845001906332463065">Справка</translation>
-<translation id="8845164297565101021">Чтобы установить или изменить PIN-код, вставьте электронный ключ и нажмите кнопку на нем.</translation>
 <translation id="8846132060409673887">Доступ к информации о производителе и модели компьютера</translation>
 <translation id="8846141544112579928">Поиск клавиатуры…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Начнет быстрее расходовать заряд батареи (сейчас она заряжена на <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280">Приложение "<ph name="APP_NAME" />" предоставило сайту <ph name="TAB_NAME" /> доступ к окну.</translation>
-<translation id="8945764661949477243">Добавить, переименовать или удалить цифровые отпечатки, сохраненные на устройстве.</translation>
 <translation id="8946359700442089734">На устройстве <ph name="IDS_SHORT_PRODUCT_NAME" /> включены не все функции отладки.</translation>
 <translation id="894871326938397531">Выйти из режима инкогнито?</translation>
 <translation id="8948939328578167195">Сайт <ph name="WEBSITE" /> запрашивает доступ к сведениям о производителе и модели вашего электронного ключа.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb
index b9028be..332b58d 100644
--- a/chrome/app/resources/generated_resources_sk.xtb
+++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -285,7 +285,7 @@
 <translation id="1415708812149920388">Bol zakázaný prístup k čítaniu obsahu schránky</translation>
 <translation id="1415990189994829608">Rozšírenie <ph name="EXTENSION_NAME" /> (ID rozšírenia <ph name="EXTENSION_ID" />) nie je v tomto type relácie povolené.</translation>
 <translation id="1416836038590872660">EAP-MD5</translation>
-<translation id="1418954524306642206">Prehliadaním špecifikujte súbor PPD tlačiarne</translation>
+<translation id="1418954524306642206">Vyhľadajte v počítači súbor PPD vašej tlačiarne</translation>
 <translation id="1420834118113404499">Licencie médií</translation>
 <translation id="1420920093772172268">Ak chcete povoliť párovanie, <ph name="TURN_ON_BLUETOOTH_LINK" /></translation>
 <translation id="1422159345171879700">Načítať nebezpečné skripty</translation>
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM vyžaduje povolenie na spustenie</translation>
 <translation id="1900305421498694955">Aplikácie na Google Play môžu vyžadovať úplný prístup k systému súborov a povolenie zapisovať súbory v externých úložiskách. Súbory a priečinky vytvorené v zariadení sú viditeľné pre všetkých používateľov príslušného externého disku. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Vybrať &amp;všetko</translation>
-<translation id="1901984611178952431">Spravovať prihlasovacie údaje</translation>
 <translation id="1902576642799138955">Doba platnosti</translation>
 <translation id="1905375423839394163">Názov zariadenia Chromebook</translation>
 <translation id="1905710495812624430">Maximálny počet povolených pokusov bol prekročený.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Budúce aktualizácie softvéru a zabezpečenia sa budú inštalovať automaticky.</translation>
 <translation id="1979280758666859181">Chystáte sa zmeniť na kanál so staršou verziou prehliadača <ph name="PRODUCT_NAME" />. Zmena kanála sa prejaví, keď sa verzia kanála bude zhodovať s verziou, ktorá je momentálne nainštalovaná v zariadení.</translation>
 <translation id="197989455406964291">KDC nepodporuje typ šifrovania</translation>
-<translation id="1981544341227357861">Odpojte bezpečnostný kľúč od zariadenia, potom ho znova pripojte a stlačte jeho tlačidlo.</translation>
 <translation id="1982354452682152483">K dispozícii nie je žiadny popis.</translation>
 <translation id="1987317783729300807">Účty</translation>
 <translation id="1989112275319619282">Prehliadať</translation>
@@ -818,7 +816,7 @@
 <translation id="2173801458090845390">Pridať do tohto zariadenia ID rekvizície</translation>
 <translation id="2175042898143291048">Vždy prekladať</translation>
 <translation id="2175607476662778685">Panel Rýchle spustenie</translation>
-<translation id="217576141146192373">Tlačiareň sa nedá pridať. Skontrolujte jej konfiguráciu a skúste to znova.</translation>
+<translation id="217576141146192373">Tlačiareň sa nepodarilo pridať. Skontrolujte jej konfiguráciu a skúste to znova.</translation>
 <translation id="2177950615300672361">Karta inkognito: <ph name="TAB_NAME" /></translation>
 <translation id="2178098616815594724"><ph name="PEPPER_PLUGIN_NAME" /> na webe <ph name="PEPPER_PLUGIN_DOMAIN" /> chce získať prístup k vášmu počítaču</translation>
 <translation id="2178614541317717477">Ohrozenie zabezpečenia CA</translation>
@@ -931,7 +929,7 @@
 <translation id="2326931316514688470">&amp;Znova načítať aplikáciu</translation>
 <translation id="2327492829706409234">Povoliť aplikáciu</translation>
 <translation id="2329597144923131178">Prihláste sa a používajte svoje záložky, históriu, heslá a ďalšie nastavenia vo všetkých svojich zariadeniach.</translation>
-<translation id="2330129964253841015">Upozorniť v prípade napadnutia hesiel</translation>
+<translation id="2330129964253841015">Upozorňovať pri odhalení hesiel</translation>
 <translation id="2332131598580221120">Zobraziť v obchode</translation>
 <translation id="2332192922827071008">Otvoriť predvoľby</translation>
 <translation id="2332742915001411729">Obnoviť na predvolené hodnoty</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">Prihlásenie do prehliadača Chrome</translation>
 <translation id="3285322247471302225">Nová &amp;karta</translation>
 <translation id="328571385944182268">Chcete ukladať heslá?</translation>
-<translation id="3286737518123001369">Zobraziť a vymazať prihlasovacie údaje uložené v bezpečnostnom kľúči</translation>
 <translation id="3288047731229977326">Rozšírenia spustené v režime pre vývojárov môžu poškodiť váš počítač. Ak nie ste vývojár, mali by ste v záujme bezpečnosti rozšírenia spustené v režime vývojára zakázať.</translation>
 <translation id="3289856944988573801">Ak chcete skontrolovať aktualizácie, použite sieť ethernet alebo Wi‑Fi.</translation>
 <translation id="3293644607209440645">Odoslať túto stránku</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">Podpis X9.62 ECDSA s SHA-512</translation>
 <translation id="3544879808695557954">Používateľské meno (voliteľné)</translation>
 <translation id="354602065659584722">Škodlivý softvér bol odstránený</translation>
-<translation id="3547220315004609203">Prepínač panela kariet</translation>
 <translation id="3547954654003013442">Nastavenia servera proxy</translation>
 <translation id="3550915441744863158">Prehliadač Chrome sa automaticky aktualizuje, takže budete mať vždy tú najnovšiu verziu</translation>
 <translation id="3551320343578183772">Zatvoriť kartu</translation>
@@ -2123,7 +2119,6 @@
 <translation id="4031179711345676612">Mikrofón je povolený</translation>
 <translation id="4031527940632463547">Senzory sú blokované</translation>
 <translation id="4033471457476425443">Pridať nový priečinok</translation>
-<translation id="403456802563765809">Ak chcete spravovať odtlačky prstov, vložte bezpečnostný kľúč a klepnite naň.</translation>
 <translation id="4034824040120875894">Tlačiareň</translation>
 <translation id="4035758313003622889">&amp;Správca úloh</translation>
 <translation id="4036778507053569103">Pravidlo stiahnuté zo servera je neplatné.</translation>
@@ -3166,7 +3161,6 @@
 <translation id="5636996382092289526">Pred použitím siete <ph name="NETWORK_ID" /> bude možno potrebné najprv <ph name="LINK_START" />prejsť na prihlasovaciu stránku siete<ph name="LINK_END" />, ktorá sa otvorí automaticky v priebehu niekoľkých sekúnd. Ak k tomu nedôjde, daná sieť sa nedá použiť.</translation>
 <translation id="5637476008227280525">Povoliť mobilné dáta</translation>
 <translation id="5638309510554459422">Nájdite rozšírenia a motívy v <ph name="BEGIN_LINK" />Internetovom obchode Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Ak chcete spravovať odtlačky prstov, zadajte kód PIN bezpečnostného kľúča. Ak si ho nepamätáte, budete musieť bezpečnostný kľúč resetovať.</translation>
 <translation id="5639549361331209298">Načítať túto stránku, ďalšie možnosti zobrazíte podržaním</translation>
 <translation id="5640133431808313291">Správa bezpečnostných kľúčov</translation>
 <translation id="5642508497713047">Podpisovateľ CRL</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">Neplatný formát webovej adresy. Podporované formáty sú \\server\share a smb://server/share.</translation>
 <translation id="5990386583461751448">Preložené</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="5995884201513800557">Ak chcete odtlačok uložiť, opakovane klepnite na bezpečnostný kľúč.</translation>
 <translation id="5997337190805127100">Ďalšie informácie o prístupe k webom</translation>
 <translation id="6000758707621254961">Viacero výsledkov (<ph name="RESULT_COUNT" />) pre hľadaný výraz „<ph name="SEARCH_TEXT" />“</translation>
 <translation id="6002458620803359783">Preferované hlasy</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">Pristupovanie k vstupu videa</translation>
 <translation id="6011193465932186973">Odtlačok prsta</translation>
 <translation id="6011449291337289699">Vymazanie dát webu</translation>
-<translation id="6013505829696424563">Ak si chcete zobraziť prihlasovacie údaje, zadajte kód PIN svojho bezpečnostného kľúča. Ak si ho nepamätáte, budete musieť bezpečnostný kľúč resetovať.</translation>
 <translation id="6015266928248016057">Neplatný kód PUK. Zostávajúci počet pokusov: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Rok</translation>
 <translation id="6016551720757758985">Potvrdenie obnovenia Powerwash s návratom k predchádzajúcej verzii</translation>
@@ -3776,7 +3768,7 @@
         <ph name="EVENT_NAME" /></translation>
 <translation id="652492607360843641">Máte aktívne pripojenie k sieti <ph name="NETWORK_TYPE" />.</translation>
 <translation id="6527303717912515753">Zdieľať</translation>
-<translation id="6528189551082329571">Vždy otvárať odkazy tohto typu v spojenej aplikácii</translation>
+<translation id="6528189551082329571">Vždy otvárať odkazy tohto typu v súvisiacej aplikácii</translation>
 <translation id="6528513914570774834">Povoliť ostatným používateľom zariadenia pripojiť sa k tejto sieti</translation>
 <translation id="652948702951888897">História Chromu</translation>
 <translation id="6530186581263215931">Tieto nastavenia sú vynútené správcom</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Spýtať sa pred odoslaním</translation>
 <translation id="6840184929775541289">Nie je certifikačnou autoritou</translation>
 <translation id="6841186874966388268">Chyby</translation>
-<translation id="6841187140911216178">Ak si chcete zobraziť prihlasovacie údaje, vložte bezpečnostný kľúč a klepnite naň</translation>
 <translation id="6843423766595476978">Výraz „Ok Google“ je nastavený</translation>
 <translation id="6845038076637626672">Otvoriť maximalizované</translation>
 <translation id="6845325883481699275">Pomoc so zlepšením zabezpečenia Chromu</translation>
@@ -5085,7 +5076,7 @@
 <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>
+<translation id="8438566539970814960">Zlepšovať vyhľadávanie a prehliadanie</translation>
 <translation id="8439506636278576865">Ponúkať preklad stránok v tomto jazyku</translation>
 <translation id="8440630305826533614">Aplikácie pre Linux</translation>
 <translation id="8443338615972234259">Zriaďte ihneď nový účet pre kontrolovaného používateľa.</translation>
@@ -5378,7 +5369,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Pridať k obrázku poznámku</translation>
 <translation id="8845001906332463065">Získať pomoc</translation>
-<translation id="8845164297565101021">Ak chcete vytvoriť alebo zmeniť PIN, vložte bezpečnostný kľúč a stlačte jeho tlačidlo.</translation>
 <translation id="8846132060409673887">Prečítať informácie o výrobcovi a modeli tohto zariadenia</translation>
 <translation id="8846141544112579928">Hľadá sa klávesnica...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5451,7 +5441,6 @@
 <translation id="894360074127026135">Netscape – medzinárodný prestup na vyššiu edíciu</translation>
 <translation id="8944099748578356325">Bude intenzívnejšie využívať batériu (aktuálne <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> zdieľa okno s kartou <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Pridanie, premenovanie a odstraňovanie odtlačkov prstov uložených v zariadení</translation>
 <translation id="8946359700442089734">Na tomto zariadení <ph name="IDS_SHORT_PRODUCT_NAME" /> neboli úplne povolené funkcie ladenia</translation>
 <translation id="894871326938397531">Ukončiť režim inkognito?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> chce zistiť model a značku vášho bezpečnostného kľúča</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb
index c6807f7..d9a66b13 100644
--- a/chrome/app/resources/generated_resources_sl.xtb
+++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM potrebuje dovoljenje za izvajanje</translation>
 <translation id="1900305421498694955">Aplikacije v Googlu Play za branje in pisanje datotek v zunanjih napravah za shranjevanje morda zahtevajo popoln dostop do datotečnega sistema. Datoteke in mape, ustvarjene v tej napravi, so vidne vsem, ki uporabljajo zunanji pogon. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Izberi &amp;vse</translation>
-<translation id="1901984611178952431">Upravljanje podatkov za prijavo</translation>
 <translation id="1902576642799138955">Obdobje veljavnosti</translation>
 <translation id="1905375423839394163">Ime Chromebooka</translation>
 <translation id="1905710495812624430">Preseženo je največje dovoljeno število dovoljenih poskusov.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Prihodnje posodobitve programske opreme in varnostne posodobitve bodo nameščene samodejno.</translation>
 <translation id="1979280758666859181">Preklapljate na kanal s starejšo različico brskalnika <ph name="PRODUCT_NAME" />. Sprememba kanala bo uporabljena, ko se različica kanala ujema z različico, ki je trenutno nameščena v vaši napravi.</translation>
 <translation id="197989455406964291">KDC ne podpira vrste šifriranja</translation>
-<translation id="1981544341227357861">Odstranite varnostni ključ iz naprave, nato ga znova vstavite in se ga dotaknite.</translation>
 <translation id="1982354452682152483">Opis ni na voljo.</translation>
 <translation id="1987317783729300807">Računi</translation>
 <translation id="1989112275319619282">Brskanje</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Prijava v Chrome</translation>
 <translation id="3285322247471302225">Nov &amp;zavihek</translation>
 <translation id="328571385944182268">Želite shranjevati gesla?</translation>
-<translation id="3286737518123001369">Ogled in brisanje podatkov za prijavo, shranjenih na varnostnem ključu</translation>
 <translation id="3288047731229977326">Razširitve, ki se izvajajo v razvijalskem načinu, lahko škodijo vašemu računalniku. Če niste razvijalec, zaradi varnosti onemogočite razširitve, ki se izvajajo v razvijalskem načinu.</translation>
 <translation id="3289856944988573801">Če želite preveriti, ali so na voljo posodobitve, uporabite ethernet ali Wi-Fi.</translation>
 <translation id="3293644607209440645">Pošlji to stran</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Podpis X9.62 ECDSA z algoritmom SHA-512</translation>
 <translation id="3544879808695557954">Uporabniško ime (izbirno)</translation>
 <translation id="354602065659584722">Škodljiva programska oprema odstranjena</translation>
-<translation id="3547220315004609203">Vklop ali izklop traku z zavihki</translation>
 <translation id="3547954654003013442">Nastavitve proxyja</translation>
 <translation id="3550915441744863158">Chrome se posodablja samodejno, zato boste vedno imeli najnovejšo različico</translation>
 <translation id="3551320343578183772">Zapri zavihek</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofon je dovoljen</translation>
 <translation id="4031527940632463547">Tipala so blokirana</translation>
 <translation id="4033471457476425443">Dodaj novo mapo</translation>
-<translation id="403456802563765809">Če želite upravljati prstne odtise, vstavite varnostni ključ in se ga dotaknite.</translation>
 <translation id="4034824040120875894">Tiskalnik</translation>
 <translation id="4035758313003622889">&amp;Upravitelj opravil</translation>
 <translation id="4036778507053569103">Pravilnik, prenesen iz strežnika, ni veljaven.</translation>
@@ -3169,7 +3164,6 @@
 <translation id="5636996382092289526">Če želite uporabljati omrežje <ph name="NETWORK_ID" />, morate najprej <ph name="LINK_START" />obiskati stran za prijavo v omrežje<ph name="LINK_END" />, ki se bo samodejno odprla čez nekaj sekund. Če se ne odpre, omrežja ne morete uporabljati.</translation>
 <translation id="5637476008227280525">Omogoči prenos podatkov v mobilnih omrežjih</translation>
 <translation id="5638309510554459422">Poiščite razširitve in teme v <ph name="BEGIN_LINK" />Spletni trgovini Chrome<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Če želite upravljati prstne odtise, vnesite kodo PIN za varnostni ključ Če ne veste kode PIN, morate ponastaviti varnostni ključ.</translation>
 <translation id="5639549361331209298">Vnovično nalaganje te strani, pridržite za prikaz več možnosti</translation>
 <translation id="5640133431808313291">Upravljanje varnostnih ključev</translation>
 <translation id="5642508497713047">Podpisnik seznama ukinjenih potrdil</translation>
@@ -3412,7 +3406,6 @@
 <translation id="5985458664595100876">Neveljavna oblika URL-ja. Podprti obliki sta \\server\share in smb://server/share.</translation>
 <translation id="5990386583461751448">Prevedeno</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="5995884201513800557">Dotikajte se varnostnega ključa, da se shrani prstni odtis.</translation>
 <translation id="5997337190805127100">Več o dostopu do spletnih mest</translation>
 <translation id="6000758707621254961">Rezultati za »<ph name="SEARCH_TEXT" />« (<ph name="RESULT_COUNT" />)</translation>
 <translation id="6002458620803359783">Prednostni glasovi</translation>
@@ -3422,7 +3415,6 @@
 <translation id="6010869025736512584">Dostopanje do videovhoda</translation>
 <translation id="6011193465932186973">Prstni odtis</translation>
 <translation id="6011449291337289699">Brisanje podatkov spletnih mest</translation>
-<translation id="6013505829696424563">Če si želite ogledati podatke za prijavo, vnesite kodo PIN varnostnega ključa. Če ne veste kode PIN, morate ponastaviti varnostni ključ.</translation>
 <translation id="6015266928248016057">Neveljavna koda PUK. Še toliko vnovičnih poskusov: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Leto</translation>
 <translation id="6016551720757758985">Potrdite, da želite izvesti Powerwash in povrniti prejšnjo različico.</translation>
@@ -3977,7 +3969,6 @@
 <translation id="6840155290835956714">Vprašaj pred pošiljanjem</translation>
 <translation id="6840184929775541289">Ni overitelj potrdil</translation>
 <translation id="6841186874966388268">Napake</translation>
-<translation id="6841187140911216178">Če si želite ogledati podatke za prijavo, vstavite varnostni ključ in se ga dotaknite</translation>
 <translation id="6843423766595476978">Ok Google je pripravljen</translation>
 <translation id="6845038076637626672">Odpri povečano</translation>
 <translation id="6845325883481699275">Pomagajte izboljšati varnost v Chromu</translation>
@@ -5382,7 +5373,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Dodaj pripis sliki</translation>
 <translation id="8845001906332463065">Poiščite pomoč</translation>
-<translation id="8845164297565101021">Vstavite varnostni ključ in se ga dotaknite, če želite ustvariti ali spremeniti kodo PIN.</translation>
 <translation id="8846132060409673887">Dostop do podatkov o proizvajalcu in modelu računalnika</translation>
 <translation id="8846141544112579928">Iskanje tipkovnice ...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5455,7 +5445,6 @@
 <translation id="894360074127026135">Nadgradnja Netscape International</translation>
 <translation id="8944099748578356325">Hitrejša poraba energije akumulatorja (trenutno <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280">Aplikacija <ph name="APP_NAME" /> je v skupno rabo z zavihkom <ph name="TAB_NAME" /> dala okno.</translation>
-<translation id="8945764661949477243">Dodajanje, preimenovanje in brisanje prstnih odtisov, shranjenih v napravi</translation>
 <translation id="8946359700442089734">V tej napravi niso bile v celoti omogočene funkcije za odpravljanje napak: <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Izklop načina brez belež. zgod.?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> si želi ogledati znamko in model varnostnega ključa</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb
index 7ab163e4..1571dc7 100644
--- a/chrome/app/resources/generated_resources_sr.xtb
+++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Додатној компоненти VM треба дозвола за покретање</translation>
 <translation id="1900305421498694955">Апликацијама са Google Play-а ће можда требати потпуни приступ систему датотека да би читале и уписивале датотеке на спољним меморијским уређајима. Датотеке и директоријуми направљени на уређају су видљиви свима који користе спољни диск. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Изабери &amp;све</translation>
-<translation id="1901984611178952431">Управљајте подацима за пријављивање</translation>
 <translation id="1902576642799138955">Период валидности</translation>
 <translation id="1905375423839394163">Назив Chromebook уређаја</translation>
 <translation id="1905710495812624430">Премашен је максимални број покушаја.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Будућа софтверска и безбедносна ажурирања ће се инсталирати аутоматски.</translation>
 <translation id="1979280758666859181">Прелазите на канал са старијом верзијом <ph name="PRODUCT_NAME" />-а. Промена канала ће се применити када се верзија канала буде подударала са верзијом која је тренутно инсталирана на уређају.</translation>
 <translation id="197989455406964291">KDC не подржава тип шифровања</translation>
-<translation id="1981544341227357861">Уклоните безбедносни кључ са уређаја, па га поново уметните и додирните.</translation>
 <translation id="1982354452682152483">Није доступан опис.</translation>
 <translation id="1987317783729300807">Налози</translation>
 <translation id="1989112275319619282">Прегледај</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Пријављивање у Chrome</translation>
 <translation id="3285322247471302225">Нова &amp;картица</translation>
 <translation id="328571385944182268">Желите ли да сачувате лозинке?</translation>
-<translation id="3286737518123001369">Прегледајте и избришите податке за пријављивање сачуване на безбедносном кључу</translation>
 <translation id="3288047731229977326">Додаци покренути у режиму програмера могу да нашкоде рачунару. Ако нисте програмер, требало би да онемогућите ове додатке покренуте у режиму програмера да бисте се заштитили.</translation>
 <translation id="3289856944988573801">Да бисте потражили ажурирања, користите етернет или Wi-Fi.</translation>
 <translation id="3293644607209440645">Пошаљи ову страницу</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">Потпис X9.62 ECDSA путем SHA-512</translation>
 <translation id="3544879808695557954">Корисничко име (опционално)</translation>
 <translation id="354602065659584722">Штетан софтвер је уклоњен</translation>
-<translation id="3547220315004609203">Укључите/искључите траку са картицама</translation>
 <translation id="3547954654003013442">Подешавања проксија</translation>
 <translation id="3550915441744863158">Chrome се аутоматски ажурира, па увек имате најновију верзију</translation>
 <translation id="3551320343578183772">Затвори картицу</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">Микрофон је дозвољен</translation>
 <translation id="4031527940632463547">Приступ сензорима је блокиран</translation>
 <translation id="4033471457476425443">Додај нови директоријум</translation>
-<translation id="403456802563765809">Да бисте управљали отисцима прстију, уметните и додирните безбедносни кључ.</translation>
 <translation id="4034824040120875894">Штампач</translation>
 <translation id="4035758313003622889">&amp;Менаџер задатака</translation>
 <translation id="4036778507053569103">Смернице преузете са сервера су неважеће.</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526">Да бисте користили <ph name="NETWORK_ID" />, можда ћете прво морати да <ph name="LINK_START" />посетите страницу за пријављивање на мрежу<ph name="LINK_END" />, која ће се аутоматски отворити за неколико секунди. Ако се то не деси, мрежа не може да се користи.</translation>
 <translation id="5637476008227280525">Омогући мобилне податке</translation>
 <translation id="5638309510554459422">Пронађите додатке и теме у <ph name="BEGIN_LINK" />Chrome веб-продавници<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Да бисте управљали отисцима прстију, унесите PIN безбедносног кључа. Ако не знате PIN, треба да ресетујете безбедносни кључ.</translation>
 <translation id="5639549361331209298">Поново учитајте ову страницу, задржите да бисте видели више опција</translation>
 <translation id="5640133431808313291">Управљајте безбедносним кључевима</translation>
 <translation id="5642508497713047">CRL потписник</translation>
@@ -3409,7 +3403,6 @@
 <translation id="5985458664595100876">Неважећи формат URL-а. Подржани формати су \\server\share и smb://server/share.</translation>
 <translation id="5990386583461751448">Преведено</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ову апликацију.}one{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}few{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}other{Да бисте се уверили да можете да наставите да прегледате веб, затражите од администратора да уклони ове апликације.}}</translation>
-<translation id="5995884201513800557">Наставите да додирујете безбедносни кључ да бисте сачували отисак прста.</translation>
 <translation id="5997337190805127100">Сазнајте више о приступу сајтовима</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> резултата за „<ph name="SEARCH_TEXT" />“</translation>
 <translation id="6002458620803359783">Жељени гласови</translation>
@@ -3419,7 +3412,6 @@
 <translation id="6010869025736512584">Приступа се видео улазу</translation>
 <translation id="6011193465932186973">Дигитални отисак</translation>
 <translation id="6011449291337289699">Обришите податке сајта</translation>
-<translation id="6013505829696424563">Да бисте прегледали податке за пријављивање, унесите PIN безбедносног кључа. Ако не знате PIN, треба да ресетујете безбедносни кључ.</translation>
 <translation id="6015266928248016057">Неважећи PUK. Преосталих покушаја: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Година</translation>
 <translation id="6016551720757758985">Потврђивање Powerwash-а уз враћање на претходну верзију</translation>
@@ -3974,7 +3966,6 @@
 <translation id="6840155290835956714">Питај пре слања</translation>
 <translation id="6840184929775541289">Није ауторитет за издавање сертификата</translation>
 <translation id="6841186874966388268">Грешке</translation>
-<translation id="6841187140911216178">Да бисте прегледали податке за пријављивање, уметните и додирните безбедносни кључ</translation>
 <translation id="6843423766595476978">Опција Ок Google је спремна</translation>
 <translation id="6845038076637626672">Отвори увећано</translation>
 <translation id="6845325883481699275">Помозите нам да побољшамо Chrome безбедност</translation>
@@ -5379,7 +5370,6 @@
 <translation id="8838770651474809439">Хамбургер</translation>
 <translation id="883911313571074303">Додај напомену у слику</translation>
 <translation id="8845001906332463065">Затражите помоћ</translation>
-<translation id="8845164297565101021">Уметните и додирните безбедносни кључ да бисте направили или променили PIN.</translation>
 <translation id="8846132060409673887">Прочитајте произвођача и модел овог рачунара</translation>
 <translation id="8846141544112579928">Тражимо тастатуру...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5452,7 +5442,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">бржа потрошња батерије (тренутно <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> дели прозор са <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Додајте, преименујте и бришите отиске прстију сачуване на уређају</translation>
 <translation id="8946359700442089734">Функције за отклањање грешака нису у потпуности омогућене на овом <ph name="IDS_SHORT_PRODUCT_NAME" /> уређају.</translation>
 <translation id="894871326938397531">Излазите из режима без архивирања?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> жели да види произвођача и модел безбедносног кључа</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb
index de7384f..ab0cc34 100644
--- a/chrome/app/resources/generated_resources_sv.xtb
+++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM behöver behörighet för att köras</translation>
 <translation id="1900305421498694955">Appar från Google Play kan behöva fullständig åtkomst till filsystemet för att kunna läsa och skriva filer på externa lagringsenheter. Alla som använder den externa enheten kan se filer och mappar som skapats på den. <ph name="LINK_BEGIN" />Läs mer<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Välj &amp;alla</translation>
-<translation id="1901984611178952431">Hantera inloggningsdata</translation>
 <translation id="1902576642799138955">Giltighetsperiod</translation>
 <translation id="1905375423839394163">Chromebook-enhetens namn</translation>
 <translation id="1905710495812624430">Du har försökt för många gånger.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Framtida programvara och säkerhetsuppdateringar installeras automatiskt.</translation>
 <translation id="1979280758666859181">Du byter till en kanal med en äldre version av <ph name="PRODUCT_NAME" />. Kanalen byts när kanalversionen matchar den version som är installerad på din enhet.</translation>
 <translation id="197989455406964291">KDC har inte stöd för krypteringstypen</translation>
-<translation id="1981544341227357861">Ta ut säkerhetsnyckeln från enheten. Sätt sedan i den igen och tryck på den.</translation>
 <translation id="1982354452682152483">Ingen beskrivning är tillgänglig.</translation>
 <translation id="1987317783729300807">Konton</translation>
 <translation id="1989112275319619282">Bläddra</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Logga in i Chrome</translation>
 <translation id="3285322247471302225">Ny &amp;flik</translation>
 <translation id="328571385944182268">Vill du spara lösenorden?</translation>
-<translation id="3286737518123001369">Visa och radera inloggningsuppgifter som lagrats på säkerhetsnyckeln</translation>
 <translation id="3288047731229977326">Tillägg som körs i utvecklarläge kan skada datorn. Om du inte är en utvecklare bör du inaktivera tillägg som körs i utvecklarläge för att skydda dig.</translation>
 <translation id="3289856944988573801">Använd Ethernet eller Wi-Fi om du vill söka efter uppdateringar.</translation>
 <translation id="3293644607209440645">Skicka sidan</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">X9.62 ECDSA-signatur med SHA-512</translation>
 <translation id="3544879808695557954">Användarnamn (valfritt)</translation>
 <translation id="354602065659584722">Den skadliga programvaran har tagits bort</translation>
-<translation id="3547220315004609203">Aktivera/inaktivera flikhuvud</translation>
 <translation id="3547954654003013442">Proxyinställningar</translation>
 <translation id="3550915441744863158">Chrome uppdateras automatiskt så att du alltid har den senaste versionen</translation>
 <translation id="3551320343578183772">Stäng flik</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofon är tillåten</translation>
 <translation id="4031527940632463547">Användning av sensorer har blockerats</translation>
 <translation id="4033471457476425443">Lägg till ny mapp</translation>
-<translation id="403456802563765809">Sätt i och tryck på säkerhetsnyckeln om du vill hantera fingeravtryck.</translation>
 <translation id="4034824040120875894">Skrivare</translation>
 <translation id="4035758313003622889">&amp;Aktivitetshanteraren</translation>
 <translation id="4036778507053569103">Policyn som laddades ned från servern är ogiltig.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Om du vill använda <ph name="NETWORK_ID" /> kanske du först måste <ph name="LINK_START" />besöka nätverkets inloggningssida<ph name="LINK_END" />, som öppnas automatiskt om några sekunder. Om den inte öppnas går det inte att använda nätverket.</translation>
 <translation id="5637476008227280525">Aktivera mobildata</translation>
 <translation id="5638309510554459422">Hitta tillägg och teman i <ph name="BEGIN_LINK" />Chrome Web Store<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Du måste ange säkerhetsnyckelns pinkod om du vill hantera fingeravtryck. Om du inte kommer ihåg pinkoden måste du återställa säkerhetsnyckeln.</translation>
 <translation id="5639549361331209298">Uppdatera sidan och vänta om du vill se fler alternativ</translation>
 <translation id="5640133431808313291">Hantera säkerhetsnycklar</translation>
 <translation id="5642508497713047">CRL-signerare</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Ogiltigt webbadressformat. Följande format stöds: \\server\share och smb://server/share.</translation>
 <translation id="5990386583461751448">Översatt</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="5995884201513800557">Fortsätt att trycka på säkerhetsnyckeln för att spara fingeravtrycket.</translation>
 <translation id="5997337190805127100">Läs mer om webbplatsåtkomst</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> resultat för <ph name="SEARCH_TEXT" /></translation>
 <translation id="6002458620803359783">Önskade röster</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Får åtkomst till videoindata</translation>
 <translation id="6011193465932186973">Fingeravtryck</translation>
 <translation id="6011449291337289699">Rensa webbplatsdata</translation>
-<translation id="6013505829696424563">Du måste ange säkerhetsnyckelns pinkod innan inloggningsuppgifter visas. Om du inte kommer ihåg pinkoden måste du återställa säkerhetsnyckeln.</translation>
 <translation id="6015266928248016057">Ogiltig PUK-kod. Återstående försök: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">År</translation>
 <translation id="6016551720757758985">Bekräfta återställningen till den tidigare versionen med Powerwash</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Fråga innan något skickas</translation>
 <translation id="6840184929775541289">Är inte en certifikatutfärdare</translation>
 <translation id="6841186874966388268">Fel</translation>
-<translation id="6841187140911216178">Sätt i och tryck på säkerhetsnyckeln om du vill visa inloggningsuppgifterna</translation>
 <translation id="6843423766595476978">Ok Google är klart att använda</translation>
 <translation id="6845038076637626672">Öppna maximerad</translation>
 <translation id="6845325883481699275">Bidra till att göra Chrome säkrare</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburgare</translation>
 <translation id="883911313571074303">Kommentera bild</translation>
 <translation id="8845001906332463065">Få hjälp</translation>
-<translation id="8845164297565101021">Sätt i säkerhetsnyckeln och tryck på den om du vill ställa in eller byta pinkod.</translation>
 <translation id="8846132060409673887">Läsa information om datorns tillverkare och modell</translation>
 <translation id="8846141544112579928">Söker efter tangentbord …</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscapes internationella uppgradering</translation>
 <translation id="8944099748578356325">Batteriet förbrukas snabbare (för närvarande <ph name="BATTERY_PERCENTAGE" /> %)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> delar ett fönster med <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Läsa, döpa om och radera fingeravtryck som är sparade på enheten</translation>
 <translation id="8946359700442089734">Felsökningsfunktionerna aktiverades inte helt på den här <ph name="IDS_SHORT_PRODUCT_NAME" />-enheten.</translation>
 <translation id="894871326938397531">Inaktivera inkognitoläget?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> vill få tillgång till din säkerhetsnyckels märke och modell</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb
index 30befd0..b428f8b 100644
--- a/chrome/app/resources/generated_resources_sw.xtb
+++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">Plugin VM inataka ruhusa ili itekeleze shughuli</translation>
 <translation id="1900305421498694955">Huenda programu kwenye Google Play zikahitaji ufikiaji kamili wa mfumo wa faili ili kusoma na kuandika faili kwenye vifaa vya hifadhi ya nje. Faili na folda mpya zinazoongezwa kwenye kifaa huonekana kwa mtu yeyote anayetumia hifadhi ya nje. <ph name="LINK_BEGIN" />Pata maelezo zaidi<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Chagua &amp;yote</translation>
-<translation id="1901984611178952431">Dhibiti data ya kuingia katika akaunti</translation>
 <translation id="1902576642799138955">Kipindi cha Uhalali</translation>
 <translation id="1905375423839394163">Jina la kifaa cha Chromebook</translation>
 <translation id="1905710495812624430">Idadi ya juu ya majaribio yanayoruhusiwa.</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">Masasisho ya baadaye ya programu na usalama yatasakinishwa kiotomatiki.</translation>
 <translation id="1979280758666859181">Unabadilisha hadi kituo chenye toleo zee la <ph name="PRODUCT_NAME" />. Mabadiliko ya kituo yatatumika wakati toleo la kituo linalingana na toleo lililosanidiwa kwenye kifaa chako.</translation>
 <translation id="197989455406964291">KDC haitumii aina ya usimbaji fiche</translation>
-<translation id="1981544341227357861">Ondoa ufunguo wako wa usalama kwenye kifaa chako, kisha uuweke tena na uuguse.</translation>
 <translation id="1982354452682152483">Hakuna ufafanuzi unaopatikana.</translation>
 <translation id="1987317783729300807">Akaunti</translation>
 <translation id="1989112275319619282">Vinjari</translation>
@@ -1576,7 +1574,6 @@
 <translation id="3282568296779691940">Ingia katika Chrome</translation>
 <translation id="3285322247471302225">Kichupo &amp;Kipya</translation>
 <translation id="328571385944182268">Ungependa kuhifadhi manenosiri yako?</translation>
-<translation id="3286737518123001369">Angalia na ufute data ya kuingia katika akaunti iliyohifadhiwa kwenye ufunguo wako wa usalama</translation>
 <translation id="3288047731229977326">Viendelezi vinavyoendeshwa katika hali ya msanidi programu vinaweza vikadhuru kompyuta yako. Kama wewe si msanidi programu, unapaswa kuzima viendelezi hivi vinavyoendeshwa katika hali ya msanidi programu ili ukae salama.</translation>
 <translation id="3289856944988573801">Ili kuangalia sasisho, tafadhali tumia Ethernet au Wi-Fi.</translation>
 <translation id="3293644607209440645">Tuma ukurasa huu</translation>
@@ -1746,7 +1743,6 @@
 <translation id="3543597750097719865">Sahihi ya X9.62 ECDSA yenye SHA-512</translation>
 <translation id="3544879808695557954">Jina la mtumiaji (si lazima)</translation>
 <translation id="354602065659584722">Programu hatari imeondolewa</translation>
-<translation id="3547220315004609203">Washa/zima ukanda wa kichupo</translation>
 <translation id="3547954654003013442">Mipangilio ya proksi</translation>
 <translation id="3550915441744863158">Chrome husasisha kiotomatiki, kwa hivyo, kila wakati utakuwa na toleo jipya zaidi</translation>
 <translation id="3551320343578183772">Funga Kichupo</translation>
@@ -2121,7 +2117,6 @@
 <translation id="4031179711345676612">Maikrofoni imeruhusiwa</translation>
 <translation id="4031527940632463547">Imezuia vitambuzi</translation>
 <translation id="4033471457476425443">Ongeza folda mpya</translation>
-<translation id="403456802563765809">Ili udhibiti alama zako bainifu, weka na uguse ufunguo wako wa usalama.</translation>
 <translation id="4034824040120875894">Printa</translation>
 <translation id="4035758313003622889">&amp;Kidhibiti cha shughuli</translation>
 <translation id="4036778507053569103">Sera iliyopakuliwa kutoka kwenye seva ni batili.</translation>
@@ -3162,7 +3157,6 @@
 <translation id="5636996382092289526">Ili kutumia <ph name="NETWORK_ID" /> huenda kwanza ukahitaji kutembelea <ph name="LINK_START" /> ukurasa wa kuingia wa mtandao<ph name="LINK_END" />, ambao utafunguka otomatiki katika sekunde chache. Ikiwa haitafanyika, mtandao hauwezi kutumika.</translation>
 <translation id="5637476008227280525">Washa data ya kifaa cha mkononi</translation>
 <translation id="5638309510554459422">Pata viendelezi na mandhari katika <ph name="BEGIN_LINK" />Duka la Chrome kwenye Wavuti<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Ili udhibiti alama zako bainifu, weka PIN ya ufunguo wako wa usalama. Ikiwa hujui PIN, utahitaji kuweka upya mipangilio ya ufunguo wa usalama.</translation>
 <translation id="5639549361331209298">Pakia upya ukurasa huu, shikilia ili kuona chaguo zaidi</translation>
 <translation id="5640133431808313291">Dhibiti funguo za usalama</translation>
 <translation id="5642508497713047">Kitia Sahihi cha CRL</translation>
@@ -3405,7 +3399,6 @@
 <translation id="5985458664595100876">Mfumo wa URL si sahihi. Mifumo inayotumika ni \\server\share na smb://server/share.</translation>
 <translation id="5990386583461751448">Imetafsiriwa</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="5995884201513800557">Endelea kugusa ufunguo wako wa usalama ili uhifadhi alama yako bainifu.</translation>
 <translation id="5997337190805127100">Pata Maelezo Zaidi kuhusu Ufikiaji wa Tovuti</translation>
 <translation id="6000758707621254961">Matokeo <ph name="RESULT_COUNT" /> ya '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Sauti Zinazopendelewa</translation>
@@ -3415,7 +3408,6 @@
 <translation id="6010869025736512584">Inafikia vifaa vya kuingiza sauti ya video</translation>
 <translation id="6011193465932186973">Alama ya kidole</translation>
 <translation id="6011449291337289699">Futa data ya tovuti</translation>
-<translation id="6013505829696424563">Ili kuona data ya kuingia katika akaunti, weka PIN ya ufunguo wako wa usalama. Ikiwa hujui PIN, utahitaji kuweka upya mipangilio ya ufunguo wa usalama.</translation>
 <translation id="6015266928248016057">PUK si sahihi. Mara za kujaribu ulizobakisha: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Mwaka</translation>
 <translation id="6016551720757758985">Thibitisha Powerwash kwa kurejea kwenye toleo la awali</translation>
@@ -3970,7 +3962,6 @@
 <translation id="6840155290835956714">Uliza kabla ya kutuma</translation>
 <translation id="6840184929775541289">Siyo Idhini ya Cheti</translation>
 <translation id="6841186874966388268">Hitilafu</translation>
-<translation id="6841187140911216178">Ili kuona data ya kuingia katika akaunti, weka na uguse ufunguo wako wa usalama</translation>
 <translation id="6843423766595476978">Imemaliza kuweka mipangilio ya Ok Google</translation>
 <translation id="6845038076637626672">Fungua Iliyoongezwa</translation>
 <translation id="6845325883481699275">Tusaidie kuboresha usalama wa Chrome</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">Hambaga</translation>
 <translation id="883911313571074303">Eleza kuhusu picha</translation>
 <translation id="8845001906332463065">Pata usaidizi</translation>
-<translation id="8845164297565101021">Weka na uguse ufunguo wako wa usalama ili uunde au ubadilishe PIN.</translation>
 <translation id="8846132060409673887">Soma maelezo ya mtengenezaji na muundo wa kompyuta hii</translation>
 <translation id="8846141544112579928">Inatafuta kibodi...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Tumia betri kwa haraka zaidi (kwa sasa <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> inashiriki dirisha na <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Ongeza, badilisha jina na ufute alama bainifu ulizohifadhi kwenye kifaa chako</translation>
 <translation id="8946359700442089734">Vipengele vya kutatua havikuwashwa kikamilifu kwenye kifaa hiki cha <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Ungependa kuondoka kwenye hali fiche?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> inataka kuona muundo na aina ya ufunguo wako wa usalama</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb
index 3e3bc38..b770b22 100644
--- a/chrome/app/resources/generated_resources_ta.xtb
+++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">செருகுநிரல் VM இயங்குவதற்கு அனுமதி தேவை</translation>
 <translation id="1900305421498694955">Google Playயிலிருந்து பதிவிறக்கப்படும் ஆப்ஸுக்கு வெளிப்புறச் சேமிப்பக சாதனங்களில் உள்ள கோப்புகளைப் படிப்பதற்கும் திருத்துவதற்கும் ஃபைல் சிஸ்டத்திற்கான முழு அணுகல் தேவைப்படக்கூடும். வெளிப்புற இயக்ககத்தைப் பயன்படுத்தும் அனைவராலும் சாதனத்தில் உருவாக்கப்பட்ட கோப்புகளையும் கோப்புறைகளையும் பார்க்க முடியும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">அ&amp;னைத்தையும் தேர்ந்தெடு</translation>
-<translation id="1901984611178952431">உள்நுழைவுத் தகவல்களை நிர்வகி</translation>
 <translation id="1902576642799138955">செல்லுபடிக் காலம்</translation>
 <translation id="1905375423839394163">Chromebookகின் சாதனப் பெயர்</translation>
 <translation id="1905710495812624430">அனுமதிக்கப்பட்ட அதிகபட்ச முயற்சிகளைக் கடந்துவிட்டீர்கள்.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">இனிவரும் மென்பொருளும் பாதுகாப்பு தொடர்பான புதுப்பிப்புகளும் தானாகவே நிறுவப்படும்.</translation>
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> இன் பழைய பதிப்பிற்கு சேனலை மாற்றுகிறீர்கள். உங்கள் சாதனத்தில் நிறுவப்பட்ட பதிப்புடன் சேனல் பதிப்பு பொருந்தும்போது சேனலின் மாற்றமும் பயன்படுத்தப்படும்.</translation>
 <translation id="197989455406964291">என்க்ரிப்ஷன் வகையை KDC ஆதரிக்கவில்லை</translation>
-<translation id="1981544341227357861">உங்கள் சாதனத்திலிருந்து பாதுகாப்பு விசையை அகற்றி மீண்டும் செருகித் தொடவும்.</translation>
 <translation id="1982354452682152483">விளக்கம் இல்லை.</translation>
 <translation id="1987317783729300807">கணக்குகள்</translation>
 <translation id="1989112275319619282">உலாவு</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome இல் உள்நுழைக</translation>
 <translation id="3285322247471302225">புதிய &amp;தாவல்</translation>
 <translation id="328571385944182268">உங்கள் கடவுச்சொற்களைச் சேமிக்க வேண்டுமா?</translation>
-<translation id="3286737518123001369">உங்கள் பாதுகாப்பு விசையில் சேமிக்கப்பட்டுள்ள உள்நுழைவுத் தகவல்களைப் பார்க்கலாம் நீக்கலாம்</translation>
 <translation id="3288047731229977326">டெவெலப்பர் பயன்முறையில் இயங்கிக்கொண்டிருக்கும் நீட்டிப்புகள் உங்கள் கம்ப்யூட்டருக்குத் தீங்கு விளைவிக்கலாம். நீங்கள் டெவெலப்பர் இல்லையென்றால், பாதுகாப்பு காரணமாக டெவெலப்பர் பயன்முறையில் இயங்கிக்கொண்டிருக்கும் இந்த நீட்டிப்புகளை முடக்க வேண்டும்.</translation>
 <translation id="3289856944988573801">புதுப்பிப்புகளைப் பார்க்க, ஈத்தர்நெட் அல்லது வைஃபை ஐப் பயன்படுத்தவும்.</translation>
 <translation id="3293644607209440645">இந்தப் பக்கத்தை அனுப்பு</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">SHA-512 உடனான X9.62 ECDSA கையொப்பம்</translation>
 <translation id="3544879808695557954">பயனர்பெயர் (விரும்பினால்)</translation>
 <translation id="354602065659584722">தீங்கிழைக்கும் மென்பொருள் அகற்றப்பட்டது</translation>
-<translation id="3547220315004609203">தாவல் பட்டையைக் காட்டும்/மறைக்கும்</translation>
 <translation id="3547954654003013442">ப்ராக்ஸி அமைப்புகள்</translation>
 <translation id="3550915441744863158">Chrome தானாகவே புதுப்பித்துக்கொள்வதால், எப்போதுமே புதிய பதிப்பைப் பெறுவீர்கள்.</translation>
 <translation id="3551320343578183772">தாவலை மூடுக</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">மைக்ரோஃபோன் அனுமதிக்கப்பட்டது</translation>
 <translation id="4031527940632463547">சென்சார்கள் தடுக்கப்பட்டுள்ளன</translation>
 <translation id="4033471457476425443">புதிய கோப்புறையைச் சேர்</translation>
-<translation id="403456802563765809">உங்களது கைரேகைகளை நிர்வகிக்க பாதுகாப்பு விசையைச் செருகி இயக்குவதற்கான பட்டனைத் தொடவும்.</translation>
 <translation id="4034824040120875894">பிரிண்டர்</translation>
 <translation id="4035758313003622889">&amp;பணி நிர்வாகி</translation>
 <translation id="4036778507053569103">சேவையகத்திலிருந்து பதிவிறக்கிய கொள்கை தவறானது.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ஐப் பயன்படுத்த, நீங்கள் முதலில் <ph name="LINK_START" />நெட்வொர்க்கின் உள்நுழைவுப் பக்கத்தைப்<ph name="LINK_END" /> பார்வையிட வேண்டும். இது சில வினாடிகளில் தானாகவே திறக்கும். அது நடைபெறவில்லை எனில், நெட்வொர்க்கைப் பயன்படுத்த முடியாது.</translation>
 <translation id="5637476008227280525">மொபைல் டேட்டாவை இயக்கு</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome இணைய அங்காடியில்<ph name="END_LINK" /> நீட்டிப்புகளையும் தீம்களையும் பெறுங்கள்</translation>
-<translation id="5639152092474119692">உங்கள் கைரேகைகளை நிர்வகிக்க பாதுகாப்பு விசைக்கான பின்னை உள்ளிடவும். 'பின்' தெரியவில்லை எனில் பாதுகாப்பு விசையை மீட்டமைக்க வேண்டும்.</translation>
 <translation id="5639549361331209298">மேலும் விருப்பங்களைக் காண இந்தப் பக்கத்தை மீண்டும் ஏற்றி காத்திருக்கவும்</translation>
 <translation id="5640133431808313291">பாதுகாப்பு விசைகளை நிர்வகித்தல்</translation>
 <translation id="5642508497713047">CRL கையொப்பமிடுநர்</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">தவறான URL வடிவமைப்பு. ஆதரிக்கப்படும் வடிவமைப்புகள்: \\server\share, smb://server/share.</translation>
 <translation id="5990386583461751448">மொழிபெயர்க்கப்பட்டது</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்த ஆப்ஸை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}other{இணையத்தில் உங்களால் தொடர்ந்து உலாவ முடிய வேண்டுமானால், இந்த ஆப்ஸை அகற்றும்படி உங்கள் நிர்வாகியிடம் தெரிவிக்கவும்.}}</translation>
-<translation id="5995884201513800557">உங்கள் கைரேகையைச் சேமிக்க பாதுகாப்பு விசையை சிறிது நேரம் தொட்டுக்கொண்டே இருக்கவும்.</translation>
 <translation id="5997337190805127100">தள அணுகலைப் பற்றி மேலும் அறிக</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />'க்கு <ph name="RESULT_COUNT" /> முடிவுகள் உள்ளன</translation>
 <translation id="6002458620803359783">விருப்பமான குரல்கள்</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">வீடியோ உள்ளீட்டை அணுகுகிறது</translation>
 <translation id="6011193465932186973">கைரேகை</translation>
 <translation id="6011449291337289699">தளத் தரவை அழி</translation>
-<translation id="6013505829696424563">உள்நுழைவுத் தரவைப் பார்ப்பதற்கு பாதுகாப்பு விசையில் 'பின்னை' உள்ளிட வேண்டும். 'பின்' தெரியவில்லை எனில் பாதுகாப்பு விசையை மீட்டமைக்க வேண்டும்.</translation>
 <translation id="6015266928248016057">தவறான PUK. இன்னும் <ph name="RETRIES" /> முறை முயலலாம்.</translation>
 <translation id="6015796118275082299">ஆண்டு</translation>
 <translation id="6016551720757758985">முந்தைய பதிப்பிற்கு மாற, பவர்வாஷை உறுதிப்படுத்தவும்</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">அனுப்பும் முன் கேள்</translation>
 <translation id="6840184929775541289">இது ஒரு சான்றளிக்கும் மையம் அல்ல</translation>
 <translation id="6841186874966388268">பிழைகள்</translation>
-<translation id="6841187140911216178">உள்நுழைவுத் தரவைப் பார்க்க பாதுகாப்பு விசையைச் செருகித் தொட வேண்டும்</translation>
 <translation id="6843423766595476978">Ok Google அமைக்கப்பட்டுவிட்டது</translation>
 <translation id="6845038076637626672">பெரிதாக்கப்பட்டதை திற</translation>
 <translation id="6845325883481699275">Chromeமின் பாதுகாப்பை மேம்படுத்த உதவுக</translation>
@@ -5381,7 +5372,6 @@
 <translation id="8838770651474809439">ஹம்பர்கர்</translation>
 <translation id="883911313571074303">படத்தைக் குறிப்பிடு</translation>
 <translation id="8845001906332463065">உதவி பெறுக</translation>
-<translation id="8845164297565101021">பாதுகாப்பு விசையை உருவாக்கவோ பின்னை மாற்றவோ அதைச் செருகித் தொடவும்.</translation>
 <translation id="8846132060409673887">இந்தக் கம்ப்யூட்டரின் உற்பத்தியாளர் பற்றிய தகவலையும் மாடலையும் படிக்கலாம்</translation>
 <translation id="8846141544112579928">விசைப்பலகையைத் தேடுகிறது...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5454,7 +5444,6 @@
 <translation id="894360074127026135">Netscape சர்வதேச மேம்படுத்தல்</translation>
 <translation id="8944099748578356325">பேட்டரியை அதிகமாகப் பயன்படுத்தும் (தற்போது <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> <ph name="TAB_NAME" /> உடன் சாளரத்தைப் பகிர்கிறது.</translation>
-<translation id="8945764661949477243">உங்கள் சாதனத்தில் கைரேகைகளைச் சேர்க்கலாம், பெயரை மாற்றலாம், சேமித்ததை நீக்கலாம்</translation>
 <translation id="8946359700442089734">இந்த <ph name="IDS_SHORT_PRODUCT_NAME" /> சாதனத்தில் பிழைத் திருத்த அம்சங்கள் முழுமையாக இயக்கப்படவில்லை.</translation>
 <translation id="894871326938397531">மறைநிலையிலிருந்து வெளியேறவா?</translation>
 <translation id="8948939328578167195">உங்கள் பாதுகாப்பு விசையின் உற்பத்தியாளர் மற்றும் மாடலைத் தெரிந்துகொள்ள <ph name="WEBSITE" /> விரும்புகிறது</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb
index c4cc9d17..96ad4e6 100644
--- a/chrome/app/resources/generated_resources_te.xtb
+++ b/chrome/app/resources/generated_resources_te.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">ప్లగ్ఇన్ VMను అమలు చేయడానికి అనుమతి మంజూరు చేయాలి</translation>
 <translation id="1900305421498694955">బాహ్య నిల్వ పరికరాలలో ఫైల్‌లను చదవడానికి, రాయడానికి, Google Play యాప్‌లకు పూర్తి ఫైల్ సిస్టమ్ యాక్సెస్ అవసరం పడొచ్చు. బాహ్య డిస్క్‌ను ఉపయోగించే ఎవరికైనా పరికరంలో సృష్టించిన ఫైల్‌లు, ఫోల్డర్‌లు కనిపిస్తాయి. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">&amp;అన్నీ ఎంచుకోండి</translation>
-<translation id="1901984611178952431">సైన్-ఇన్ డేటాను నిర్వహించు</translation>
 <translation id="1902576642799138955">చెల్లుబాటు కాలం</translation>
 <translation id="1905375423839394163">Chromebook పరికరం పేరు</translation>
 <translation id="1905710495812624430">అనుమతించిన గరిష్ట ప్రయత్నాలు మించిపోయారు.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">అలాగే సాఫ్ట్‌వేర్, భద్రతా అప్‌డేట్‌లు ఆటోమేటిక్‌గా ఇన్‌స్టాల్ చేయబడతాయి.</translation>
 <translation id="1979280758666859181">మీరు <ph name="PRODUCT_NAME" /> పాత వెర్షన్ ఉన్న ఛానెల్‌కు మారుతున్నారు. ఈ ఛానెల్ వెర్షన్, మీ పరికరంలో ప్రస్తుతం ఇన్‌స్టాల్ అయిన వెర్షన్‌కు సరిపోలినప్పుడు ఛానెల్ మార్పు వర్తిస్తుంది.</translation>
 <translation id="197989455406964291">ఎన్‌క్రిప్షన్ రకానికి KDC మద్దతు లేదు</translation>
-<translation id="1981544341227357861">మీ పరికరం నుండి మీ సెక్యూరిటీ కీని తీసివేసి, ఆపై మళ్లీ ఇన్‌సర్ట్ చేసి, తాకండి.</translation>
 <translation id="1982354452682152483">వివరణ ఏదీ లేదు.</translation>
 <translation id="1987317783729300807">ఖాతాలు</translation>
 <translation id="1989112275319619282">బ్రౌజ్ చేయి</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chromeకు సైన్ ఇన్ చేయండి</translation>
 <translation id="3285322247471302225">క్రొత్త &amp;టాబ్</translation>
 <translation id="328571385944182268">మీ పాస్‌వర్డ్‌లను సేవ్ చేయాలా?</translation>
-<translation id="3286737518123001369">మీ 'సెక్యూరిటీ కీ'లో నిల్వ చేసిన సైన్-ఇన్ డేటాను చూసి, తొలగించండి</translation>
 <translation id="3288047731229977326">డెవలపర్ మోడ్‌లో అమలవుతున్న ఎక్స్‌టెన్ష‌న్‌లు మీ కంప్యూటర్‌కు హాని కలిగించవచ్చు. మీరు డెవలపర్ కాకపోతే, సురక్షితంగా ఉంచడానికి డెవలపర్ మోడ్‌లో అమలవుతున్న ఈ ఎక్స్‌టెన్ష‌న్‌లను నిలిపివేయాలి.</translation>
 <translation id="3289856944988573801">అప్‌డేట్‌ల కోసం తనిఖీ చేయడానికి, దయచేసి ఈథర్‌నెట్ లేదా Wi-Fiని ఉపయోగించండి.</translation>
 <translation id="3293644607209440645">ఈ పేజీని పంపండి</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">SHA-512తో X9.62 ECDSA సంతకం</translation>
 <translation id="3544879808695557954">వినియోగదారు పేరు (ఐచ్ఛికం)</translation>
 <translation id="354602065659584722">హానికరమైన సాఫ్ట్‌వేర్ తీసివేయబడింది</translation>
-<translation id="3547220315004609203">ట్యాబ్ స్ట్రిప్‌ను టోగుల్ చేయండి</translation>
 <translation id="3547954654003013442">ప్రాక్సీ సెట్టింగ్‌లు</translation>
 <translation id="3550915441744863158">Chrome ఆటోమేటిక్‌గా అప్‌డేట్ అవుతుంది కాబట్టి మీ వద్ద ఎప్పుడూ సరికొత్త వెర్షన్ ఉంటుంది</translation>
 <translation id="3551320343578183772">ట్యాబ్‌ను మూసివేయి</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">మైక్రోఫోన్ అనుమతించబడింది</translation>
 <translation id="4031527940632463547">సెన్సార్‌లు బ్లాక్ చేయబడ్డాయి</translation>
 <translation id="4033471457476425443">కొత్త ఫోల్డర్‌ను జోడించు</translation>
-<translation id="403456802563765809">మీ వేలిముద్రలను నిర్వహించడానికి, మీ సెక్యూరిటీ కీని చొప్పించి, తాకండి.</translation>
 <translation id="4034824040120875894">ప్రింటర్</translation>
 <translation id="4035758313003622889">&amp;కార్య నిర్వాహకుడు</translation>
 <translation id="4036778507053569103">సర్వర్ నుండి డౌన్‌లోడ్ చేయబడిన విధానం చెల్లదు.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">మీరు <ph name="NETWORK_ID" />ను ఉపయోగించడానికి మొదట కొన్నిసెకన్లలో ఆటోమేటిక్‌గా తెరవబడే <ph name="LINK_START" />నెట్‌వర్క్ సైన్ ఇన్ పేజీని సందర్శించాలి<ph name="LINK_END" />. ఇది జరగకపోతే, నెట్‌వర్క్‌ను ఉపయోగించలేరు.</translation>
 <translation id="5637476008227280525">మొబైల్ డేటాను ప్రారంభించు</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome వెబ్ స్టోర్‌లో<ph name="END_LINK" /> ఎక్స్‌టెన్ష‌న్‌లు మరియు థీమ్‌లను కనుగొనండి</translation>
-<translation id="5639152092474119692">మీ వేలిముద్రలను నిర్వహించడానికి, మీ 'సెక్యూరిటీ కీ'కి సంబంధించిన పిన్ నమోదు చేయండి. మీకు పిన్ తెలియకపోతే, మీరు 'సెక్యూరిటీ కీ'ని రీసెట్ చేయాలి.</translation>
 <translation id="5639549361331209298">ఈ పేజీని మళ్లీ లోడ్ చేయండి, మరిన్ని ఎంపికలను చూడటానికి దీనిపై కర్సర్ ఉంచండి</translation>
 <translation id="5640133431808313291">సెక్యూరిటీ కీలను నిర్వహించండి</translation>
 <translation id="5642508497713047">CRL సైన్ చేసినవారు</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">URL ఫార్మాట్ చెల్లదు. మద్దతు ఉన్న ఫార్మాట్‌లు \\server\share మరియు smb://server/share.</translation>
 <translation id="5990386583461751448">అనువదించబడింది</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{వెబ్‌ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్‌ను తీసివేయమని కోరండి.}other{వెబ్‌ను బ్రౌజ్ చేస్తూనే ఉండడాన్ని నిర్ధారించడానికి, మీ నిర్వాహకుడిని ఈ అప్లికేషన్‌లను తీసివేయమని కోరండి.}}</translation>
-<translation id="5995884201513800557">మీ వేలిముద్రను సేవ్ చేయడానికి, మీ సెక్యూరిటీ కీని తాకుతూ ఉండండి.</translation>
 <translation id="5997337190805127100">సైట్ యాక్సెస్ గురించి మరింత తెలుసుకోండి</translation>
 <translation id="6000758707621254961">'<ph name="SEARCH_TEXT" />' అనే దానికి <ph name="RESULT_COUNT" /> ఫలితాలు లభించాయి</translation>
 <translation id="6002458620803359783">ప్రాధాన్య వాయిస్‌లు</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">వీడియో ఇన్‌పుట్ యాక్సెస్‌ చేయబడుతోంది</translation>
 <translation id="6011193465932186973">వేలిముద్ర</translation>
 <translation id="6011449291337289699">సైట్ డేటాను తీసివేయండి</translation>
-<translation id="6013505829696424563">సైన్-ఇన్ డేటాను చూడటానికి, మీ 'సెక్యూరిటీ కీ'కి సంబంధించిన పిన్ నమోదు చేయండి. మీకు పిన్ తెలియకపోతే, మీరు 'సెక్యూరిటీ కీ'ని రీసెట్ చేయాలి.</translation>
 <translation id="6015266928248016057">PUK చెల్లదు. మిగిలి ఉన్న పునఃప్రయత్నాల సంఖ్య: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">సంవత్సరం</translation>
 <translation id="6016551720757758985">మునుపటి వెర్షన్‌కు తిరిగి మార్చేలా చేసే పవర్‌వాష్‌ను నిర్ధారించండి</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">పంపే ముందు అడగాలి</translation>
 <translation id="6840184929775541289">ప్రమాణపత్రం అధికారం కాదు</translation>
 <translation id="6841186874966388268">లోపాలు</translation>
-<translation id="6841187140911216178">సైన్-ఇన్ డేటాను చూడటానికి, మీ 'సెక్యూరిటీ కీ'ని చొప్పించి, తాకండి</translation>
 <translation id="6843423766595476978">Ok Googleని పూర్తిగా సిద్ధం చేశారు</translation>
 <translation id="6845038076637626672">గరిష్టీకరించిన దాన్ని తెరువు</translation>
 <translation id="6845325883481699275">Chrome భద్రతను మెరుగుపరచడంలో సహాయం చేయండి</translation>
@@ -5376,7 +5367,6 @@
 <translation id="8838770651474809439">హాంబర్గర్</translation>
 <translation id="883911313571074303">చిత్రంపై అదనపు గమనికలు పంపండి</translation>
 <translation id="8845001906332463065">సహాయం పొందండి</translation>
-<translation id="8845164297565101021">పిన్‌ను సృష్టించడానికి లేదా మార్చడానికి మీ సెక్యూరిటీ కీని ఇన్‌సర్ట్ చేసి, దానిని తాకండి.</translation>
 <translation id="8846132060409673887">ఈ కంప్యూటర్ తయారీదారు పేరు మరియు మోడల్‌కి సంబంధించిన సమాచారాన్ని చదవగలుగుతుంది</translation>
 <translation id="8846141544112579928">కీబోర్డ్ కోసం శోధిస్తోంది...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5449,7 +5439,6 @@
 <translation id="894360074127026135">Netscape అంతర్జాతీయ స్టెప్‌-అప్</translation>
 <translation id="8944099748578356325">బ్యాటరీని మరింత వేగంగా ఉపయోగిస్తుంది (ప్రస్తుతం <ph name="BATTERY_PERCENTAGE" />% ఉంది)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> ఒక విండోను <ph name="TAB_NAME" />తో షేర్ చేస్తోంది.</translation>
-<translation id="8945764661949477243">మీ పరికరంలో సేవ్ చేయబడిన వేలిముద్రలను జోడించండి, పేరు మార్చండి, తొలగించండి</translation>
 <translation id="8946359700442089734">డీబగ్గింగ్ ఫీచ‌ర్‌లు ఈ <ph name="IDS_SHORT_PRODUCT_NAME" /> పరికరంలో పూర్తిగా ప్రారంభించబడలేదు.</translation>
 <translation id="894871326938397531">అజ్ఞాత మోడ్ నుండి నిష్క్రమించాలా?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> మీ సెక్యూరిటీ కీ తయారీదారు బ్రాండ్ పేరు మరియు మోడల్‌ను చూడాలనుకుంటోంది</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb
index 4424b4d..63c54892 100644
--- a/chrome/app/resources/generated_resources_th.xtb
+++ b/chrome/app/resources/generated_resources_th.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM ต้องได้รับอนุญาตให้ทำงาน</translation>
 <translation id="1900305421498694955">แอปจาก Google Play อาจต้องมีสิทธิ์เข้าถึงระบบไฟล์โดยสมบูรณ์เพื่ออ่านและเขียนไฟล์ในอุปกรณ์เก็บข้อมูลภายนอก ไฟล์และโฟลเดอร์ที่สร้างขึ้นในอุปกรณ์จะแสดงแก่ทุกคนที่ใช้ไดรฟ์ภายนอก <ph name="LINK_BEGIN" />ดูข้อมูลเพิ่มเติม<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">เลือก&amp;ทั้งหมด</translation>
-<translation id="1901984611178952431">จัดการข้อมูลการลงชื่อเข้าใช้</translation>
 <translation id="1902576642799138955">ระยะเวลาที่มีผลบังคับใช้</translation>
 <translation id="1905375423839394163">ชื่ออุปกรณ์ Chromebook</translation>
 <translation id="1905710495812624430">ลองทำเกินจำนวนครั้งที่กำหนดไว้แล้ว</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">การอัปเดตซอฟต์แวร์และการรักษาความปลอดภัยในอนาคตจะติดตั้งโดยอัตโนมัติ</translation>
 <translation id="1979280758666859181">คุณกำลังเปลี่ยนเป็นช่องที่มี <ph name="PRODUCT_NAME" /> เวอร์ชันเก่ากว่า การเปลี่ยนช่องจะถูกนำมาใช้เมื่อเวอร์ชันของช่องตรงกับเวอร์ชันที่ติดตั้งอยู่ในอุปกรณ์ของคุณในปัจจุบัน</translation>
 <translation id="197989455406964291">KDC ไม่รองรับการเข้ารหัสประเภทนี้</translation>
-<translation id="1981544341227357861">นำคีย์ความปลอดภัยออกจากอุปกรณ์ จากนั้นเสียบกลับเข้าไปและแตะคีย์</translation>
 <translation id="1982354452682152483">ไม่มีคำอธิบาย</translation>
 <translation id="1987317783729300807">บัญชี</translation>
 <translation id="1989112275319619282">เล่นเน็ต</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">ลงชื่อเข้าใช้ Chrome</translation>
 <translation id="3285322247471302225">แ&amp;ท็บใหม่</translation>
 <translation id="328571385944182268">บันทึกรหัสผ่านไหม</translation>
-<translation id="3286737518123001369">ดูและลบข้อมูลการลงชื่อเข้าใช้ที่เก็บไว้ในคีย์ความปลอดภัย</translation>
 <translation id="3288047731229977326">ส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์อาจเป็นอันตรายต่อคอมพิวเตอร์ของคุณ หากคุณไม่ใช่นักพัฒนาซอฟต์แวร์ คุณควรปิดส่วนขยายที่ทำงานอยู่ในโหมดนักพัฒนาซอฟต์แวร์เพื่อรักษาความปลอดภัย</translation>
 <translation id="3289856944988573801">ในการตรวจหาการอัปเดต โปรดใช้อีเทอร์เน็ตหรือ WiFi</translation>
 <translation id="3293644607209440645">ส่งหน้านี้</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">ลายเซ็น X9.62 ECDSA ที่มี SHA-512</translation>
 <translation id="3544879808695557954">ชื่อผู้ใช้ (ไม่บังคับ)</translation>
 <translation id="354602065659584722">นำซอฟต์แวร์อันตรายออกแล้ว</translation>
-<translation id="3547220315004609203">เปิด/ปิดแนวแท็บ</translation>
 <translation id="3547954654003013442">การตั้งค่าพร็อกซี</translation>
 <translation id="3550915441744863158">Chrome จะอัปเดตโดยอัตโนมัติเพื่อให้คุณได้ใช้เวอร์ชันใหม่ที่สุดอยู่เสมอ</translation>
 <translation id="3551320343578183772">ปิดแท็บ</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">อนุญาตให้ใช้ไมโครโฟน</translation>
 <translation id="4031527940632463547">มีการบล็อกเซ็นเซอร์</translation>
 <translation id="4033471457476425443">เพิ่มโฟลเดอร์ใหม่</translation>
-<translation id="403456802563765809">หากต้องการจัดการลายนิ้วมือ ให้เสียบและแตะคีย์ความปลอดภัย</translation>
 <translation id="4034824040120875894">เครื่องพิมพ์</translation>
 <translation id="4035758313003622889">&amp;ตัวจัดการงาน</translation>
 <translation id="4036778507053569103">นโยบายที่ดาวน์โหลดจากเซิร์ฟเวอร์ไม่ถูกต้อง</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">หากต้องการใช้ <ph name="NETWORK_ID" /> ก่อนอื่น คุณอาจจำเป็นต้อง<ph name="LINK_START" />ไปที่หน้าลงชื่อเข้าใช้ของเครือข่าย<ph name="LINK_END" /> ซึ่งจะเปิดขึ้นโดยอัตโนมัติในอีกไม่กี่วินาที ถ้าหน้าดังกล่าวไม่เปิดขึ้น แสดงว่าไม่สามารถใช้เครือข่ายดังกล่าวได้</translation>
 <translation id="5637476008227280525">เปิดใช้อินเทอร์เน็ตมือถือ</translation>
 <translation id="5638309510554459422">ค้นหาส่วนขยายและธีมต่างๆ ได้ใน <ph name="BEGIN_LINK" />Chrome เว็บสโตร์<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">หากต้องการจัดการลายนิ้วมือ ให้ป้อน PIN ของคีย์ความปลอดภัย หากไม่ทราบ PIN คุณจะต้องรีเซ็ตคีย์ความปลอดภัย</translation>
 <translation id="5639549361331209298">โหลดหน้าเว็บนี้ซ้ำ กดค้างไว้เพื่อดูตัวเลือกเพิ่มเติม</translation>
 <translation id="5640133431808313291">จัดการคีย์ความปลอดภัย</translation>
 <translation id="5642508497713047">ผู้เซ็นชื่อ CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">รูปแบบ URL ไม่ถูกต้อง รูปแบบที่รองรับคือ \\server\share และ smb://server/share</translation>
 <translation id="5990386583461751448">แปลแล้ว</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}other{โปรดขอให้ผู้ดูแลระบบนำแอปพลิเคชันนี้ออกเพื่อให้คุณท่องเว็บได้ต่อไป}}</translation>
-<translation id="5995884201513800557">แตะคีย์ความปลอดภัยซ้ำๆ เพื่อบันทึกลายนิ้วมือของคุณ</translation>
 <translation id="5997337190805127100">ดูข้อมูลเพิ่มเติมเกี่ยวกับการเข้าถึงเว็บไซต์</translation>
 <translation id="6000758707621254961">มีผลการค้นหา "<ph name="SEARCH_TEXT" />" <ph name="RESULT_COUNT" /> รายการ</translation>
 <translation id="6002458620803359783">เสียงที่ต้องการ</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">กำลังเข้าถึงอินพุตวิดีโอ</translation>
 <translation id="6011193465932186973">ลายนิ้วมือ</translation>
 <translation id="6011449291337289699">ล้างข้อมูลเว็บไซต์</translation>
-<translation id="6013505829696424563">หากต้องการดูข้อมูลการลงชื่อเข้าใช้ ให้ป้อน PIN สำหรับคีย์ความปลอดภัย หากไม่ทราบ PIN คุณจะต้องรีเซ็ตคีย์ความปลอดภัย</translation>
 <translation id="6015266928248016057">PUK ไม่ถูกต้อง ป้อนได้อีก <ph name="RETRIES" /> ครั้ง</translation>
 <translation id="6015796118275082299">ปี</translation>
 <translation id="6016551720757758985">ยืนยัน Powerwash และเปลี่ยนกลับเป็นเวอร์ชันก่อนหน้า</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">ถามก่อนที่จะส่ง</translation>
 <translation id="6840184929775541289">ไม่ได้เป็นผู้ออกใบรับรอง</translation>
 <translation id="6841186874966388268">ข้อผิดพลาด</translation>
-<translation id="6841187140911216178">หากต้องการดูข้อมูลการลงชื่อเข้าใช้ ให้เสียบและแตะคีย์ความปลอดภัย</translation>
 <translation id="6843423766595476978">Ok Google พร้อมใช้งานแล้ว</translation>
 <translation id="6845038076637626672">เปิดแบบเต็มหน้าจอ</translation>
 <translation id="6845325883481699275">ช่วยปรับปรุงความปลอดภัยของ Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">แฮมเบอร์เกอร์</translation>
 <translation id="883911313571074303">ใส่หมายเหตุในรูปภาพ</translation>
 <translation id="8845001906332463065">ขอความช่วยเหลือ</translation>
-<translation id="8845164297565101021">เสียบและแตะคีย์ความปลอดภัยเพื่อสร้างหรือเปลี่ยน PIN</translation>
 <translation id="8846132060409673887">ดูผู้ผลิตและรุ่นของคอมพิวเตอร์เครื่องนี้</translation>
 <translation id="8846141544112579928">กำลังค้นหาแป้นพิมพ์...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">ใช้แบตเตอรี่หมดเร็วขึ้น (ขณะนี้อยู่ที่ <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> กำลังแชร์หน้าต่างกับ <ph name="TAB_NAME" /></translation>
-<translation id="8945764661949477243">เพิ่ม เปลี่ยนชื่อ และลบลายนิ้วมือที่บันทึกในอุปกรณ์ของคุณ</translation>
 <translation id="8946359700442089734">ไม่ได้เปิดใช้ฟีเจอร์การแก้ไขข้อบกพร่องอย่างสมบูรณ์บนอุปกรณ์ <ph name="IDS_SHORT_PRODUCT_NAME" /> นี้</translation>
 <translation id="894871326938397531">ออกจากโหมดไม่ระบุตัวตนไหม</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> ต้องการดูยี่ห้อและรุ่นของคีย์ความปลอดภัย</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb
index a2a0649..cc6682c 100644
--- a/chrome/app/resources/generated_resources_tr.xtb
+++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Eklenti sanal makinesinin çalışmak için izne ihtiyacı var</translation>
 <translation id="1900305421498694955">Google Play uygulamaları, harici depolama cihazlarında bulunan dosyaları ve klasörleri okuyup yazmak için tam dosya sistemi erişim izni gerektirebilir. Cihazda oluşturulan dosyalar ve klasörler, harici sürücüyü kullanan herkes tarafından görülebilir. <ph name="LINK_BEGIN" />Daha fazla bilgi<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Tümünü &amp;seç</translation>
-<translation id="1901984611178952431">Oturum açma verilerini yönet</translation>
 <translation id="1902576642799138955">Geçerlilik Süresi</translation>
 <translation id="1905375423839394163">Chromebook cihaz adı</translation>
 <translation id="1905710495812624430">İzin verilen maksimum deneme sayısı aşıldı.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Gelecekteki yazılım ve güvenlik güncellemeleri otomatik olarak yüklenir.</translation>
 <translation id="1979280758666859181"><ph name="PRODUCT_NAME" /> ürününün eski sürümünü destekleyen bir kanala geçiyorsunuz. Kanal değişikliği, kanalın sürümü cihazınızda şu an yüklenmiş olan sürümle eşleştiğinde uygulanacak.</translation>
 <translation id="197989455406964291">KDC, şifreleme türünü desteklemiyor</translation>
-<translation id="1981544341227357861">Güvenlik anahtarınızı cihazınızdan çıkarıp tekrar takın ve anahtara dokunun.</translation>
 <translation id="1982354452682152483">Açıklama yok.</translation>
 <translation id="1987317783729300807">Hesaplar</translation>
 <translation id="1989112275319619282">Göz at</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Chrome'da oturum aç</translation>
 <translation id="3285322247471302225">Yeni &amp;Sekme</translation>
 <translation id="328571385944182268">Şifreleriniz kaydedilsin mi?</translation>
-<translation id="3286737518123001369">Güvenlik anahtarınızda depolanan oturum açma verilerini görüntüleyin ve silin</translation>
 <translation id="3288047731229977326">Geliştirici modunda çalışan uzantılar bilgisayarınıza zarar verebilir. Geliştirici değilseniz, geliştirici modundayken güvende olmak için bu uzantıların çalışmasını devre dışı bırakmanız gerekir.</translation>
 <translation id="3289856944988573801">Güncellemeleri kontrol etmek için lütfen Ethernet veya Kablosuz kullanın.</translation>
 <translation id="3293644607209440645">Bu sayfayı gönder</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">SHA-512 ile X9.62 ECDSA İmzası</translation>
 <translation id="3544879808695557954">Kullanıcı adı (isteğe bağlı)</translation>
 <translation id="354602065659584722">Zararlı yazılım kaldırıldı</translation>
-<translation id="3547220315004609203">Sekme şeridini aç/kapat</translation>
 <translation id="3547954654003013442">Proxy ayarları</translation>
 <translation id="3550915441744863158">Chrome otomatik olarak güncellenir, böylece her zaman en yeni sürüme sahip olursunuz.</translation>
 <translation id="3551320343578183772">Sekmeyi Kapat</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Mikrofona izin verildi</translation>
 <translation id="4031527940632463547">Sensörler engellendi</translation>
 <translation id="4033471457476425443">Yeni klasör ekle</translation>
-<translation id="403456802563765809">Parmak izlerinizi yönetmek için güvenlik anahtarınızı takıp dokunun.</translation>
 <translation id="4034824040120875894">Yazıcı</translation>
 <translation id="4035758313003622889">&amp;Görev yöneticisi</translation>
 <translation id="4036778507053569103">Sunucudan indirilen politika geçersiz.</translation>
@@ -3168,7 +3163,6 @@
 <translation id="5636996382092289526"><ph name="NETWORK_ID" /> ağını kullanabilmek için öncelikle <ph name="LINK_START" />ağın oturum açma sayfasını ziyaret etmeniz<ph name="LINK_END" /> gerekebilir. Söz konusu sayfa birkaç saniye içinde otomatik olarak açılacaktır. Açılmazsa, ağ kullanılamaz.</translation>
 <translation id="5637476008227280525">Mobil veriyi etkinleştir</translation>
 <translation id="5638309510554459422"><ph name="BEGIN_LINK" />Chrome Web Mağazası<ph name="END_LINK" />'nda uzantılar ve temalar bulun</translation>
-<translation id="5639152092474119692">Parmak izlerinizi yönetmek için güvenlik anahtarınızın PIN kodunu girin. PIN kodunu bilmiyorsanız, güvenlik anahtarını sıfırlamanız gerekir.</translation>
 <translation id="5639549361331209298">Bu sayfayı yeniden yükleyin, daha fazla seçeneği görmek için tutun</translation>
 <translation id="5640133431808313291">Güvenlik anahtarlarını yönetme</translation>
 <translation id="5642508497713047">CRL İmza Sahibi</translation>
@@ -3411,7 +3405,6 @@
 <translation id="5985458664595100876">Geçersiz URL biçimi. \\sunucu\paylaşım ve smb://sunucu/paylaşım biçimleri desteklenir.</translation>
 <translation id="5990386583461751448">Çevrildi</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="5995884201513800557">Parmak izinizi kaydetmek için güvenlik anahtarınıza dokunmaya devam edin.</translation>
 <translation id="5997337190805127100">Site Erişimi Hakkında Daha Fazla Bilgi</translation>
 <translation id="6000758707621254961">"<ph name="SEARCH_TEXT" />" için bulunan <ph name="RESULT_COUNT" /> sonuç gösteriliyor</translation>
 <translation id="6002458620803359783">Tercih Edilen Sesler</translation>
@@ -3421,7 +3414,6 @@
 <translation id="6010869025736512584">Video girişine erişiliyor</translation>
 <translation id="6011193465932186973">Parmak izi</translation>
 <translation id="6011449291337289699">Site verilerini temizle</translation>
-<translation id="6013505829696424563">Oturum açma verilerini görüntülemek için güvenlik anahtarınızın PIN kodunu girin. PIN kodunu bilmiyorsanız, güvenlik anahtarını sıfırlamanız gerekir.</translation>
 <translation id="6015266928248016057">Geçersiz PUK. Kalan deneme sayısı: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Yıl</translation>
 <translation id="6016551720757758985">Bir önceki sürüme geri dönüşü sağlayan Powerwash işlemini onaylayın</translation>
@@ -3976,7 +3968,6 @@
 <translation id="6840155290835956714">Göndermeden önce sor</translation>
 <translation id="6840184929775541289">Sertifika Yetkilisi değildir</translation>
 <translation id="6841186874966388268">Hatalar</translation>
-<translation id="6841187140911216178">Oturum açma verilerini görüntülemek için güvenlik anahtarınızı takın ve anahtara dokunun</translation>
 <translation id="6843423766595476978">Ok Google hazır</translation>
 <translation id="6845038076637626672">Ekranı Kaplayacak Şekilde Aç</translation>
 <translation id="6845325883481699275">Chrome güvenliğini iyileştirmeye yardımcı olun</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Hamburger</translation>
 <translation id="883911313571074303">Resme açıklama ekle</translation>
 <translation id="8845001906332463065">Yardım alın</translation>
-<translation id="8845164297565101021">PIN oluşturmak veya mevcut PIN'i değiştirmek için güvenlik anahtarınızı takın veya anahtara dokunun.</translation>
 <translation id="8846132060409673887">Bu bilgisayarın üreticisini ve modelini okuma</translation>
 <translation id="8846141544112579928">Klavye aranıyor...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape Uluslararası İlerlemesi</translation>
 <translation id="8944099748578356325">Pili daha çabuk tüketir (şu anda %<ph name="BATTERY_PERCENTAGE" />)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" />, bir pencereyi <ph name="TAB_NAME" /> ile paylaşıyor.</translation>
-<translation id="8945764661949477243">Cihazınıza parmak izi ekleyin, kayıtlı parmak izlerini yeniden adlandırın ve silin</translation>
 <translation id="8946359700442089734">Hata ayıklama özellikleri bu <ph name="IDS_SHORT_PRODUCT_NAME" /> cihazda tam olarak etkinleştirilmemişti.</translation>
 <translation id="894871326938397531">Gizli moddan çıkılsın mı?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" />, güvenlik anahtarınızın markasını ve modelini görmek istiyor</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb
index 2075b63..f0ccce59 100644
--- a/chrome/app/resources/generated_resources_uk.xtb
+++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Для запуску Plugin VM потрібен дозвіл</translation>
 <translation id="1900305421498694955">Додатки з Google Play можуть просити повний системний доступ до файлів, щоб переглядати й змінювати їх на зовнішніх пристроях пам'яті. Усі користувачі, які мають доступ до зовнішнього диска, можуть переглядати файли й папки, створені на пристрої. <ph name="LINK_BEGIN" />Докладніше<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Вибрати &amp;всі</translation>
-<translation id="1901984611178952431">Керувати даними для входу</translation>
 <translation id="1902576642799138955">Період чинності</translation>
 <translation id="1905375423839394163">Назва пристрою Chromebook</translation>
 <translation id="1905710495812624430">Перевищено максимальну кількість дозволених спроб.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Майбутні оновлення програмного забезпечення й системи безпеки встановлюватимуться автоматично.</translation>
 <translation id="1979280758666859181">Ви переходите на старішу версію <ph name="PRODUCT_NAME" />. Щоб зміни набули чинності, версія на вашому пристрої та версія, яку ви встановлюєте, мають збігатися.</translation>
 <translation id="197989455406964291">KDC не підтримує тип шифрування</translation>
-<translation id="1981544341227357861">Вийміть та знову вставте ключ безпеки, а потім торкніться його.</translation>
 <translation id="1982354452682152483">Немає опису.</translation>
 <translation id="1987317783729300807">Облікові записи</translation>
 <translation id="1989112275319619282">Переглянути</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Вхід у Chrome</translation>
 <translation id="3285322247471302225">Нова &amp;вкладка</translation>
 <translation id="328571385944182268">Зберігати паролі?</translation>
-<translation id="3286737518123001369">Переглянути й видалити дані для входу, збережені на ключі безпеки</translation>
 <translation id="3288047731229977326">Розширення, які працюють у режимі розробника, можуть пошкодити ваш комп’ютер. Якщо ви не розробник, вимкніть їх заради безпеки.</translation>
 <translation id="3289856944988573801">Щоб перевірити наявність оновлень, скористайтеся мережею Ethernet чи Wi-Fi.</translation>
 <translation id="3293644607209440645">Надіслати цю сторінку</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Алгоритм ECDSA X9.62 з підписом SHA-512</translation>
 <translation id="3544879808695557954">Ім’я користувача (необов’язково)</translation>
 <translation id="354602065659584722">Зловмисне програмне забезпечення вилучено</translation>
-<translation id="3547220315004609203">Перемкнути панель вкладок</translation>
 <translation id="3547954654003013442">Налаштування проксі-сервера</translation>
 <translation id="3550915441744863158">Chrome оновлюється автоматично, тому ви завжди маєте найновішу версію</translation>
 <translation id="3551320343578183772">Закрити вкладку</translation>
@@ -1818,7 +1814,7 @@
 <translation id="3629631988386925734">Щоб увімкнути Smart Lock, введіть пароль. Наступного разу ви зможете розблокувати пристрій <ph name="DEVICE_TYPE" /> за допомогою свого телефона. Smart Lock можна вимкнути в налаштуваннях.</translation>
 <translation id="3630132874740063857">Ваш номер телефону</translation>
 <translation id="3630995161997703415">Додайте цей сайт на полицю, щоб завжди мати його під рукою</translation>
-<translation id="3635353578505343390">Надсилати відгук у Google</translation>
+<translation id="3635353578505343390">Надіслати відгук у Google</translation>
 <translation id="3636096452488277381">Вітаємо, <ph name="USER_GIVEN_NAME" />!</translation>
 <translation id="3636766455281737684"><ph name="PERCENTAGE" />% – залишилося <ph name="TIME" /></translation>
 <translation id="3637561406135221044">Перевірка файлів на наявність конфіденційних даних…</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Дозволено використовувати мікрофон</translation>
 <translation id="4031527940632463547">Датчики заблоковано</translation>
 <translation id="4033471457476425443">Додати нову папку</translation>
-<translation id="403456802563765809">Щоб керувати відбитками пальців, вставте ключ безпеки й торкніться його.</translation>
 <translation id="4034824040120875894">Принтер</translation>
 <translation id="4035758313003622889">&amp;Диспетчер завдань</translation>
 <translation id="4036778507053569103">Завантажене із сервера правило недійсне.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Щоб користуватися цією мережею (<ph name="NETWORK_ID" />), можливо, спершу потрібно буде <ph name="LINK_START" />перейти на сторінку входу мережі<ph name="LINK_END" />, яка автоматично відкриється за декілька секунд. Якщо цього не станеться, мережею користуватися не можна.</translation>
 <translation id="5637476008227280525">Увімкнути мобільний трафік</translation>
 <translation id="5638309510554459422">Шукайте розширення й теми у <ph name="BEGIN_LINK" />Веб-магазині Chrome <ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Щоб керувати відбитками пальців, введіть PIN-код ключа безпеки. Якщо ви не знаєте PIN-код, потрібно скинути ключ безпеки.</translation>
 <translation id="5639549361331209298">Перезавантажити цю сторінку. Утримуйте, щоб побачити інші варіанти</translation>
 <translation id="5640133431808313291">Керуйте ключами безпеки</translation>
 <translation id="5642508497713047">Сторона, що підписала CRL</translation>
@@ -3176,7 +3170,7 @@
 <translation id="5646558797914161501">Бізнесмен</translation>
 <translation id="5648166631817621825">Останні 7 днів</translation>
 <translation id="5649053991847567735">Автоматичні завантаження</translation>
-<translation id="5656845498778518563">Надсилати відгук у Google</translation>
+<translation id="5656845498778518563">Надіслати відгук у Google</translation>
 <translation id="5657667036353380798">Для зовнішнього розширення потрібна версія Chrome <ph name="MINIMUM_CHROME_VERSION" /> або новіша.</translation>
 <translation id="5658415415603568799">З міркувань безпеки Smart Lock запропонує ввести пароль через 20 годин.</translation>
 <translation id="5659593005791499971">Електронна пошта</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Недійсний формат URL-адреси. Підтримувані формати: \\server\share і smb://server/share.</translation>
 <translation id="5990386583461751448">Перекладено</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити цей додаток.}one{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}few{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}many{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}other{Щоб мати можливість переглядати веб-сторінки, попросіть адміністратора видалити ці додатки.}}</translation>
-<translation id="5995884201513800557">Щоб зберегти відбиток пальця, торкайтеся ключа безпеки.</translation>
 <translation id="5997337190805127100">Докладніше про доступ до сайтів</translation>
 <translation id="6000758707621254961">Результатів для запиту "<ph name="SEARCH_TEXT" />": <ph name="RESULT_COUNT" /></translation>
 <translation id="6002458620803359783">Рекомендовані голоси</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Отримання доступу до відеовходу</translation>
 <translation id="6011193465932186973">Відбиток пальця</translation>
 <translation id="6011449291337289699">Очистити дані веб-сайту</translation>
-<translation id="6013505829696424563">Щоб переглянути дані для входу, введіть PIN-код ключа безпеки. Якщо ви не знаєте PIN-код, потрібно скинути ключ безпеки.</translation>
 <translation id="6015266928248016057">Недійсний PUK-код. Залишилося стільки спроб: <ph name="RETRIES" />.</translation>
 <translation id="6015796118275082299">Рік</translation>
 <translation id="6016551720757758985">Підтвердити Powerwash і повернення до попередньої версії</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Запитувати, перш ніж надсилати</translation>
 <translation id="6840184929775541289">Не є Центром сертифікації</translation>
 <translation id="6841186874966388268">Помилки</translation>
-<translation id="6841187140911216178">Щоб переглянути дані для входу, вставте ключ безпеки й торкніться його</translation>
 <translation id="6843423766595476978">Команду "Ok Google" налаштовано</translation>
 <translation id="6845038076637626672">Відкрити в розгорнутому вигляді</translation>
 <translation id="6845325883481699275">Допоможіть покращити безпеку Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Гамбургер</translation>
 <translation id="883911313571074303">Додати нотатку до зображення</translation>
 <translation id="8845001906332463065">Отримати довідку</translation>
-<translation id="8845164297565101021">Щоб створити або змінити PIN-код, вставте ключ безпеки й торкніться його.</translation>
 <translation id="8846132060409673887">Показувати виробника й модель цього комп’ютера</translation>
 <translation id="8846141544112579928">Пошук клавіатури…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Програма підвищення до міжнародного рівня Netscape</translation>
 <translation id="8944099748578356325">швидше виснажуватиме акумулятор (наразі <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> транслює вікно на вкладку <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Додавайте, перейменовуйте та видаляйте відбитки пальців, збережені на пристрої</translation>
 <translation id="8946359700442089734">Функції налагодження не повністю ввімкнено на цьому пристрої <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation>
 <translation id="894871326938397531">Завершити анонімний перегляд?</translation>
 <translation id="8948939328578167195">Сайт <ph name="WEBSITE" /> хоче бачити марку й модель вашого ключа безпеки</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb
index 74885bd..0ea25b9 100644
--- a/chrome/app/resources/generated_resources_vi.xtb
+++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Máy chủ ảo plugin cần có quyền chạy</translation>
 <translation id="1900305421498694955">Các ứng dụng trên Google Play có thể yêu cầu quyền truy cập vào toàn bộ hệ thống tệp để đọc và ghi tệp trên các thiết bị lưu trữ bên ngoài. Bất cứ ai dùng ổ đĩa bên ngoài đều sẽ nhìn thấy các tệp và thư mục tạo trên thiết bị này. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">Chọn &amp;tất cả</translation>
-<translation id="1901984611178952431">Quản lý dữ liệu đăng nhập</translation>
 <translation id="1902576642799138955">Thời gian Có hiệu lực</translation>
 <translation id="1905375423839394163">Tên thiết bị Chromebook</translation>
 <translation id="1905710495812624430">Đã vượt quá số lần thử tối đa được phép.</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">Các bản cập nhật bảo mật và phần mềm trong tương lai sẽ tự động cài đặt.</translation>
 <translation id="1979280758666859181">Bạn đang thay đổi sang kênh có phiên bản <ph name="PRODUCT_NAME" /> cũ hơn. Sẽ áp dụng thay đổi kênh khi phiên bản kênh khớp với phiên bản hiện được cài đặt trên thiết bị của bạn.</translation>
 <translation id="197989455406964291">KDC không hỗ trợ loại mã hóa</translation>
-<translation id="1981544341227357861">Rút khóa bảo mật khỏi thiết bị rồi cắm lại và chạm vào khóa.</translation>
 <translation id="1982354452682152483">Không có mô tả.</translation>
 <translation id="1987317783729300807">Tài khoản</translation>
 <translation id="1989112275319619282">Duyệt qua</translation>
@@ -1579,7 +1577,6 @@
 <translation id="3282568296779691940">Đăng nhập vào Chrome</translation>
 <translation id="3285322247471302225">&amp;Tab Mới</translation>
 <translation id="328571385944182268">Lưu mật khẩu của bạn?</translation>
-<translation id="3286737518123001369">Xem và xóa dữ liệu đăng nhập lưu trữ trên khóa bảo mật của bạn</translation>
 <translation id="3288047731229977326">Tiện ích chạy ở chế độ nhà phát triển có thể gây hại cho máy tính của bạn. Nếu bạn không phải là nhà phát triển, bạn nên vô hiệu hóa các tiện ích này chạy trong chế độ nhà phát triển để giữ an toàn.</translation>
 <translation id="3289856944988573801">Để kiểm tra các cập nhật, hãy sử dụng kết nối Ethernet hoặc Wi-Fi.</translation>
 <translation id="3293644607209440645">Gửi trang này</translation>
@@ -1749,7 +1746,6 @@
 <translation id="3543597750097719865">Chữ ký X9.62 ECDSA với SHA-512</translation>
 <translation id="3544879808695557954">Tên người dùng (tùy chọn)</translation>
 <translation id="354602065659584722">Đã xóa phần mềm độc hại</translation>
-<translation id="3547220315004609203">Bật/tắt thanh tab</translation>
 <translation id="3547954654003013442">Cài đặt proxy</translation>
 <translation id="3550915441744863158">Chrome tự động cập nhật nên bạn luôn có phiên bản mới nhất</translation>
 <translation id="3551320343578183772">Đóng Tab</translation>
@@ -2124,7 +2120,6 @@
 <translation id="4031179711345676612">Cho phép micrô</translation>
 <translation id="4031527940632463547">Đã chặn sử dụng cảm biến</translation>
 <translation id="4033471457476425443">Thêm thư mục mới</translation>
-<translation id="403456802563765809">Để quản lý vân tay số của bạn, hãy cắm rồi chạm vào khóa bảo mật.</translation>
 <translation id="4034824040120875894">Máy in</translation>
 <translation id="4035758313003622889">&amp;Trình quản lý tác vụ</translation>
 <translation id="4036778507053569103">Chính sách được tải xuống từ máy chủ là không hợp lệ.</translation>
@@ -3167,7 +3162,6 @@
 <translation id="5636996382092289526">Để sử dụng <ph name="NETWORK_ID" />, trước hết bạn cần <ph name="LINK_START" />truy cập vào trang đăng nhập của mạng<ph name="LINK_END" />. Trang này thường tự động mở sau vài giây. Nếu trang này không mở thì không thể sử dụng mạng này.</translation>
 <translation id="5637476008227280525">Bật dữ liệu di động</translation>
 <translation id="5638309510554459422">Tìm tiện ích và chủ đề trong <ph name="BEGIN_LINK" />Cửa hàng Chrome trực tuyến<ph name="END_LINK" /></translation>
-<translation id="5639152092474119692">Để quản lý vân tay số của bạn, hãy nhập mã PIN cho khóa bảo mật. Bạn cần đặt lại khóa bảo mật nếu không biết mã PIN này.</translation>
 <translation id="5639549361331209298">Tải lại trang này, giữ để xem các tùy chọn khác</translation>
 <translation id="5640133431808313291">Quản lý khóa bảo mật</translation>
 <translation id="5642508497713047">Trình ký CRL</translation>
@@ -3410,7 +3404,6 @@
 <translation id="5985458664595100876">Định dạng URL không hợp lệ. Các định dạng được hỗ trợ là \\server\share và smb://server/share.</translation>
 <translation id="5990386583461751448">Đã dịch</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="5995884201513800557">Chạm liên tục vào khóa bảo mật để lưu vân tay số của bạn.</translation>
 <translation id="5997337190805127100">Tìm hiểu thêm về quyền truy cập vào trang web</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> kết quả cho '<ph name="SEARCH_TEXT" />'</translation>
 <translation id="6002458620803359783">Giọng nói ưu tiên</translation>
@@ -3420,7 +3413,6 @@
 <translation id="6010869025736512584">Đang truy cập thiết bị đầu vào video</translation>
 <translation id="6011193465932186973">Vân tay</translation>
 <translation id="6011449291337289699">Xóa dữ liệu trang web</translation>
-<translation id="6013505829696424563">Để xem dữ liệu đăng nhập, hãy nhập mã PIN cho khóa bảo mật của bạn. Bạn sẽ cần đặt lại khóa bảo mật nếu không biết mã PIN này.</translation>
 <translation id="6015266928248016057">PUK không hợp lệ. Bạn còn <ph name="RETRIES" /> lần thử lại.</translation>
 <translation id="6015796118275082299">Năm</translation>
 <translation id="6016551720757758985">Xác nhận Powerwash quay lại phiên bản trước</translation>
@@ -3975,7 +3967,6 @@
 <translation id="6840155290835956714">Hỏi trước khi gửi</translation>
 <translation id="6840184929775541289">Không phải là Tổ chức phát hành chứng chỉ</translation>
 <translation id="6841186874966388268">Lỗi</translation>
-<translation id="6841187140911216178">Để xem dữ liệu đăng nhập, hãy cắm rồi chạm vào khóa bảo mật của bạn</translation>
 <translation id="6843423766595476978">Đã thiết lập xong Ok Google</translation>
 <translation id="6845038076637626672">Mở ở dạng phóng to</translation>
 <translation id="6845325883481699275">Giúp cải thiện khả năng bảo mật của Chrome</translation>
@@ -5380,7 +5371,6 @@
 <translation id="8838770651474809439">Bánh hamburger</translation>
 <translation id="883911313571074303">Chú thích hình ảnh</translation>
 <translation id="8845001906332463065">Nhận trợ giúp</translation>
-<translation id="8845164297565101021">Cắm và chạm vào khóa bảo mật để tạo hoặc đổi mã PIN.</translation>
 <translation id="8846132060409673887">Đọc thông tin về nhà sản xuất và kiểu máy của máy tính này</translation>
 <translation id="8846141544112579928">Đang tìm kiếm bàn phím...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5453,7 +5443,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">Sử dụng pin nhanh hơn (hiện tại là <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> đang chia sẻ một cửa sổ với <ph name="TAB_NAME" />.</translation>
-<translation id="8945764661949477243">Thêm, đổi tên và xóa vân tay số đã lưu trên thiết bị</translation>
 <translation id="8946359700442089734">Tính năng gỡ lỗi không được bật hoàn toàn trên thiết bị <ph name="IDS_SHORT_PRODUCT_NAME" /> này.</translation>
 <translation id="894871326938397531">Thoát chế độ ẩn danh?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> muốn xem nhãn hiệu và mẫu khóa bảo mật của bạn</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb
index 0083b426..10ccaed 100644
--- a/chrome/app/resources/generated_resources_zh-CN.xtb
+++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -637,7 +637,6 @@
 <translation id="1899826437968063457">插件虚拟机需要权限才能运行</translation>
 <translation id="1900305421498694955">Google Play 中的应用可能需要获得完整的文件系统访问权限,才能在外部存储设备上读取和写入文件。任何使用外部驱动器的人员都能看到在此设备上创建的文件和文件夹。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">全选(&amp;A)</translation>
-<translation id="1901984611178952431">管理登录数据</translation>
 <translation id="1902576642799138955">有效期</translation>
 <translation id="1905375423839394163">Chromebook 设备名称</translation>
 <translation id="1905710495812624430">已超过允许的尝试次数上限。</translation>
@@ -688,7 +687,6 @@
 <translation id="1978006917103730774">后续的软件更新和安全更新将会自动安装。</translation>
 <translation id="1979280758666859181">您正将版本更改为较旧版的 <ph name="PRODUCT_NAME" />。该版本的版本号必须与您设备上目前所安装版本的版本号相符,版本变更才会生效。</translation>
 <translation id="197989455406964291">KDC 不支持加密类型</translation>
-<translation id="1981544341227357861">请从您的设备上拔出安全密钥,然后重新插入并轻触它。</translation>
 <translation id="1982354452682152483">未提供说明。</translation>
 <translation id="1987317783729300807">帐号</translation>
 <translation id="1989112275319619282">浏览</translation>
@@ -1575,7 +1573,6 @@
 <translation id="3282568296779691940">登录 Chrome</translation>
 <translation id="3285322247471302225">打开新的标签页(&amp;T)</translation>
 <translation id="328571385944182268">保存您的密码?</translation>
-<translation id="3286737518123001369">查看和删除您的安全密钥中存储的登录数据</translation>
 <translation id="3288047731229977326">以开发者模式运行的扩展程序可能会损害您的计算机。如果您不是开发者,那么,为安全起见,应停用以开发者模式运行的扩展程序。</translation>
 <translation id="3289856944988573801">要检查是否有更新,请使用以太网或 WLAN。</translation>
 <translation id="3293644607209440645">发送此页面</translation>
@@ -1745,7 +1742,6 @@
 <translation id="3543597750097719865">采用 SHA-512 算法的 X9.62 ECDSA 签名</translation>
 <translation id="3544879808695557954">用户名(选填)</translation>
 <translation id="354602065659584722">有害软件已移除</translation>
-<translation id="3547220315004609203">打开/关闭标签栏</translation>
 <translation id="3547954654003013442">代理设置</translation>
 <translation id="3550915441744863158">Chrome会自动更新,因此您使用的始终都是最新版本</translation>
 <translation id="3551320343578183772">关闭标签页</translation>
@@ -2119,7 +2115,6 @@
 <translation id="4031179711345676612">已允许使用麦克风</translation>
 <translation id="4031527940632463547">已禁止使用传感器</translation>
 <translation id="4033471457476425443">添加新文件夹</translation>
-<translation id="403456802563765809">要管理您的指纹,请插入并轻触您的安全密钥。</translation>
 <translation id="4034824040120875894">打印机</translation>
 <translation id="4035758313003622889">任务管理器(&amp;T)</translation>
 <translation id="4036778507053569103">从服务器下载的政策无效。</translation>
@@ -3162,7 +3157,6 @@
 <translation id="5636996382092289526">要使用“<ph name="NETWORK_ID" />”,您可能需要先<ph name="LINK_START" />访问该网络的登录页面<ph name="LINK_END" />,该页面会在几秒钟后自动打开。如果未打开,就表示该网络无法使用。</translation>
 <translation id="5637476008227280525">移动数据开关</translation>
 <translation id="5638309510554459422">在 <ph name="BEGIN_LINK" />Chrome 网上应用店<ph name="END_LINK" />中查找扩展程序和主题背景</translation>
-<translation id="5639152092474119692">要管理您的指纹,请输入安全密钥的 PIN 码。如果您不知道 PIN 码,则需重置此安全密钥。</translation>
 <translation id="5639549361331209298">重新加载此网页,按下可查看更多选项</translation>
 <translation id="5640133431808313291">管理安全密钥</translation>
 <translation id="5642508497713047">CRL 签名人</translation>
@@ -3405,7 +3399,6 @@
 <translation id="5985458664595100876">网址格式无效。支持的格式为 \\server\share 和 smb://server/share。</translation>
 <translation id="5990386583461751448">已翻译</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{为确保您能够继续浏览网页,请让您的管理员卸载这款应用。}other{为确保您能够继续浏览网页,请让您的管理员卸载这些应用。}}</translation>
-<translation id="5995884201513800557">连续轻触您的安全密钥以保存您的指纹。</translation>
 <translation id="5997337190805127100">详细了解网站访问权限</translation>
 <translation id="6000758707621254961"><ph name="RESULT_COUNT" /> 个与“<ph name="SEARCH_TEXT" />”相符的搜索结果</translation>
 <translation id="6002458620803359783">首选语音</translation>
@@ -3415,7 +3408,6 @@
 <translation id="6010869025736512584">正在存取视频输入</translation>
 <translation id="6011193465932186973">指纹</translation>
 <translation id="6011449291337289699">清除网站数据</translation>
-<translation id="6013505829696424563">要查看登录数据,请输入安全密钥的 PIN 码。如果您不知道 PIN 码,则需重置此安全密钥。</translation>
 <translation id="6015266928248016057">PUK 无效。剩余重试次数:<ph name="RETRIES" /> 次。</translation>
 <translation id="6015796118275082299">年</translation>
 <translation id="6016551720757758985">确认 Powerwash 是否将设备还原到之前的版本</translation>
@@ -3970,7 +3962,6 @@
 <translation id="6840155290835956714">发送前先询问</translation>
 <translation id="6840184929775541289">不是证书授权中心</translation>
 <translation id="6841186874966388268">错误</translation>
-<translation id="6841187140911216178">要查看登录数据,请插入并轻触您的安全密钥</translation>
 <translation id="6843423766595476978">Ok Google 已设置完毕</translation>
 <translation id="6845038076637626672">以最大化模式打开</translation>
 <translation id="6845325883481699275">帮助我们改善 Chrome 安全性</translation>
@@ -5374,7 +5365,6 @@
 <translation id="8838770651474809439">汉堡</translation>
 <translation id="883911313571074303">为图片添加注释</translation>
 <translation id="8845001906332463065">获取帮助</translation>
-<translation id="8845164297565101021">请插入并轻触您的安全密钥,以创建或更改 PIN 码。</translation>
 <translation id="8846132060409673887">查看此计算机的制造商和型号</translation>
 <translation id="8846141544112579928">正在搜索键盘…</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5447,7 +5437,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">这样会更快消耗电量(目前电量:<ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> 正在与 <ph name="TAB_NAME" /> 共享窗口。</translation>
-<translation id="8945764661949477243">添加、重命名以及删除保存到设备中的指纹</translation>
 <translation id="8946359700442089734">此<ph name="IDS_SHORT_PRODUCT_NAME" />设备上未完全启用调试功能。</translation>
 <translation id="894871326938397531">退出隐身模式?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> 想查看您的安全密钥的品牌和型号</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb
index e810027..ff7fa01 100644
--- a/chrome/app/resources/generated_resources_zh-TW.xtb
+++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -640,7 +640,6 @@
 <translation id="1899826437968063457">Plugin VM 需要取得權限才能執行</translation>
 <translation id="1900305421498694955">透過 Google Play 下載的應用程式可能會要求取得檔案系統的完整存取權,以讀取和寫入外部儲存裝置上的檔案。外接式磁碟的任何使用者都能看見在此裝置上建立的檔案和資料夾。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation>
 <translation id="1901303067676059328">選取全部(&amp;A)</translation>
-<translation id="1901984611178952431">管理登入資料</translation>
 <translation id="1902576642799138955">有效期間</translation>
 <translation id="1905375423839394163">Chromebook 裝置名稱</translation>
 <translation id="1905710495812624430">超過嘗試次數上限。</translation>
@@ -691,7 +690,6 @@
 <translation id="1978006917103730774">日後系統會自動安裝新版軟體和安全性更新。</translation>
 <translation id="1979280758666859181">你即將變更為較舊版本的 <ph name="PRODUCT_NAME" />。該版本的版本號與你電腦上所安裝的版本號必須相符,系統才會套用版本變更。</translation>
 <translation id="197989455406964291">KDC 不支援加密類型</translation>
-<translation id="1981544341227357861">請從裝置上移除安全金鑰,然後重新插入並輕觸安全金鑰。</translation>
 <translation id="1982354452682152483">沒有說明。</translation>
 <translation id="1987317783729300807">帳戶</translation>
 <translation id="1989112275319619282">瀏覽</translation>
@@ -1578,7 +1576,6 @@
 <translation id="3282568296779691940">登入 Chrome</translation>
 <translation id="3285322247471302225">新增分頁(&amp;T)</translation>
 <translation id="328571385944182268">要儲存密碼嗎?</translation>
-<translation id="3286737518123001369">查看並刪除安全金鑰儲存的登入資料</translation>
 <translation id="3288047731229977326">在開發人員模式中執行擴充功能可能會損害你的電腦。如果你不是開發人員,最好在開發人員模式中停用這些擴充功能,以策安全。</translation>
 <translation id="3289856944988573801">如要檢查更新,請使用乙太網路或 Wi-Fi。</translation>
 <translation id="3293644607209440645">傳送這個頁面</translation>
@@ -1748,7 +1745,6 @@
 <translation id="3543597750097719865">使用 SHA-512 的 X9.62 ECDSA 簽章</translation>
 <translation id="3544879808695557954">使用者名稱 (選填)</translation>
 <translation id="354602065659584722">有害軟體已移除</translation>
-<translation id="3547220315004609203">切換分頁列</translation>
 <translation id="3547954654003013442">Proxy 設定</translation>
 <translation id="3550915441744863158">Chrome 會自動更新,隨時讓你使用最新版本</translation>
 <translation id="3551320343578183772">關閉分頁</translation>
@@ -2122,7 +2118,6 @@
 <translation id="4031179711345676612">可使用麥克風</translation>
 <translation id="4031527940632463547">禁止使用感應器</translation>
 <translation id="4033471457476425443">新增資料夾</translation>
-<translation id="403456802563765809">如要管理你的指紋,請插入並輕觸安全金鑰。</translation>
 <translation id="4034824040120875894">印表機</translation>
 <translation id="4035758313003622889">工作管理員(&amp;T)</translation>
 <translation id="4036778507053569103">從伺服器下載的政策無效。</translation>
@@ -3165,7 +3160,6 @@
 <translation id="5636996382092289526">如要使用 <ph name="NETWORK_ID" />,你必須先<ph name="LINK_START" />造訪網路的登入頁面<ph name="LINK_END" />,系統隨即會自動開啟登入頁面;如果沒有,你就無法使用這個網路。</translation>
 <translation id="5637476008227280525">啟用行動數據</translation>
 <translation id="5638309510554459422">歡迎前往 <ph name="BEGIN_LINK" />Chrome 線上應用程式商店<ph name="END_LINK" />尋找擴充功能和主題</translation>
-<translation id="5639152092474119692">如要管理你的指紋,請輸入安全金鑰的 PIN 碼。如果你不知道 PIN 碼,則必須重設安全金鑰。</translation>
 <translation id="5639549361331209298">重新載入這個網頁 (按住即可查看更多選項)</translation>
 <translation id="5640133431808313291">管理安全金鑰</translation>
 <translation id="5642508497713047">CRL 簽署者</translation>
@@ -3408,7 +3402,6 @@
 <translation id="5985458664595100876">網址格式無效。支援的格式為 \\server\share 和 smb://server/share。</translation>
 <translation id="5990386583461751448">已翻譯</translation>
 <translation id="599131315899248751">{NUM_APPLICATIONS,plural, =1{為確保你可以持續瀏覽網路,請要求你的管理員移除這個應用程式。}other{為確保你可以持續瀏覽網路,請要求你的管理員移除這些應用程式。}}</translation>
-<translation id="5995884201513800557">如要儲存指紋,請持續輕觸安全金鑰。</translation>
 <translation id="5997337190805127100">進一步瞭解網站存取權</translation>
 <translation id="6000758707621254961">有 <ph name="RESULT_COUNT" /> 個與「<ph name="SEARCH_TEXT" />」相符的搜尋結果</translation>
 <translation id="6002458620803359783">聲音偏好</translation>
@@ -3418,7 +3411,6 @@
 <translation id="6010869025736512584">正在存取視訊輸入</translation>
 <translation id="6011193465932186973">指紋</translation>
 <translation id="6011449291337289699">清除網站資料</translation>
-<translation id="6013505829696424563">如要查看登入資料,請輸入安全金鑰的 PIN 碼。如果你不知道 PIN 碼,則必須重設安全金鑰。</translation>
 <translation id="6015266928248016057">PUK 無效。剩餘重試次數:<ph name="RETRIES" /> 次。</translation>
 <translation id="6015796118275082299">年</translation>
 <translation id="6016551720757758985">確認執行 Powerwash 並還原至上一個版本</translation>
@@ -3973,7 +3965,6 @@
 <translation id="6840155290835956714">傳送前詢問我</translation>
 <translation id="6840184929775541289">這不是憑證授權單位</translation>
 <translation id="6841186874966388268">錯誤</translation>
-<translation id="6841187140911216178">如要查看登入資料,請插入並輕觸安全金鑰</translation>
 <translation id="6843423766595476978">Ok Google 設定完成</translation>
 <translation id="6845038076637626672">最大化開啟</translation>
 <translation id="6845325883481699275">協助改善 Chrome 安全性</translation>
@@ -5377,7 +5368,6 @@
 <translation id="8838770651474809439">漢堡</translation>
 <translation id="883911313571074303">為圖片加註</translation>
 <translation id="8845001906332463065">尋求協助</translation>
-<translation id="8845164297565101021">請插入並輕觸你的安全金鑰,以建立或變更 PIN 碼。</translation>
 <translation id="8846132060409673887">閱讀這部電腦的製造商和型號資訊</translation>
 <translation id="8846141544112579928">正在搜尋鍵盤...</translation>
 <translation id="8847988622838149491">USB</translation>
@@ -5450,7 +5440,6 @@
 <translation id="894360074127026135">Netscape International Step-Up</translation>
 <translation id="8944099748578356325">更快耗盡電量 (目前為 <ph name="BATTERY_PERCENTAGE" />%)</translation>
 <translation id="8944964446326379280"><ph name="APP_NAME" /> 正在與 <ph name="TAB_NAME" /> 共用視窗。</translation>
-<translation id="8945764661949477243">新增、重新命名及刪除裝置上儲存的指紋</translation>
 <translation id="8946359700442089734">尚未在這個 <ph name="IDS_SHORT_PRODUCT_NAME" /> 裝置上完整啟用偵錯功能。</translation>
 <translation id="894871326938397531">要退出無痕模式嗎?</translation>
 <translation id="8948939328578167195"><ph name="WEBSITE" /> 要求查看安全金鑰的製造商和型號</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb
index 341aec6c..c3d509e 100644
--- a/chrome/app/resources/google_chrome_strings_mr.xtb
+++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -37,7 +37,7 @@
 <translation id="174539241580958092">साइन इन करण्यात एरर आल्यामुळे Google Chrome तुमचा डेटा सिंक करू शकले नाही.</translation>
 <translation id="1759842336958782510">Chrome</translation>
 <translation id="1812689907177901597">हे बंद करून, तुम्ही Chrome वर साइन इन न करता Gmail सारख्या Google सायटींवर साइन इन करू शकता</translation>
-<translation id="1860536484129686729">या साइटसाठी Chrome ला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="1860536484129686729">या साइटसाठी Chrome ला तुमचा कॅमेरा ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="1873233029667955273">Google Chrome तुमचा डीफॉल्ट ब्राउझर नाही</translation>
 <translation id="1874309113135274312">Google Chrome बीटा (mDNS-In)</translation>
 <translation id="1877026089748256423">Chrome कालबाह्य आहे</translation>
@@ -53,7 +53,7 @@
 <translation id="2290014774651636340">Google API की गहाळ आहेत. Google Chrome ची काही कार्यक्षमता अक्षम केली जाईल.</translation>
 <translation id="2290095356545025170">तुमची खात्री आहे की तुम्ही Google Chrome अनइंस्टॉल करू इच्छिता?</translation>
 <translation id="2309047409763057870">ही Google Chrome ची दुय्यम स्थापना असून त्यास तुमचा डीफॉल्ट ब्राउझर बनवू शकत नाही.</translation>
-<translation id="2348335408836342058">या साइटसाठी Chrome ला तुमचा कॅमेरा आणि मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="2348335408836342058">या साइटसाठी Chrome ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="2429317896000329049">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Google Chrome तुमचा डेटा संकालित करू शकले नाही.</translation>
 <translation id="2467438592969358367">Google Chrome ला तुमचे पासवर्ड निर्यात करायचे आहेत. हे करू देण्यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation>
 <translation id="2485422356828889247">अनइंस्टॉल करा</translation>
@@ -65,7 +65,7 @@
 <translation id="2652691236519827073">लिंक नवीन Chrome &amp;टॅबमध्ये उघडा</translation>
 <translation id="2665296953892887393">Google कडे क्रॅश अहवाल आणि <ph name="UMA_LINK" /> पाठवून Google Chrome ला अधिक चांगले बनवण्यात मदत करा</translation>
 <translation id="2689103672227170538">तुम्ही Chrome सुरू करता तेव्हा कोणते पेज दर्शविले जाते हे या एक्स्टेंशनने बदलले आहे.</translation>
-<translation id="2765403129283291972">या साइटसाठी Chrome ला तुमचा मायक्रोफोन अॅक्सेस करण्याची परवानगी हवी आहे</translation>
+<translation id="2765403129283291972">या साइटसाठी Chrome ला तुमचा मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation>
 <translation id="2770231113462710648">डीफॉल्ट ब्राउझर यावर बदला:</translation>
 <translation id="2799223571221894425">पुन्हा लाँच करा</translation>
 <translation id="2847461019998147611">Google Chrome या भाषेत डिस्प्ले करा</translation>
@@ -103,7 +103,7 @@
 <translation id="4050175100176540509">नवीनतम आवृत्तीमध्‍ये महत्त्वाच्या सुरक्षितता सुधारणा आणि नवीन वैशिष्ट्ये उपलब्‍ध आहेत.</translation>
 <translation id="4053720452172726777">Google Chrome कस्टमाइझ करा आणि नियंत्रित करा</translation>
 <translation id="4143243756087420366">Chrome नाव आणि फोटो</translation>
-<translation id="4147555960264124640">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Google Chrome प्रोफाइलवर त्याच्या अॅडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chrome डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्ड द्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation>
+<translation id="4147555960264124640">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Google Chrome प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chrome डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्ड द्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. <ph name="LEARN_MORE" /></translation>
 <translation id="4149882025268051530">संग्रहण संक्षिप्त करण्यास इन्स्टॉलर अयशस्वी. कृपया Google Chrome पुन्हा डाउनलोड करा.</translation>
 <translation id="4191857738314598978">{0,plural, =1{एका दिवसामध्ये Chrome पुन्हा लाँच करा}other{# दिवसांमध्ये Chrome पुन्हा लाँच करा}}</translation>
 <translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation>
@@ -116,7 +116,7 @@
 <translation id="4458462641685292929">Google Chrome वर दुसरे ऑपरेशन प्रगतीपथावर आहे. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="4480040274068703980">साइन इन करण्यात एररमुळे Chrome OS तुमचा डेटा सिंक करू शकले नाही.</translation>
 <translation id="4561051373932531560">Google Chrome तुम्हाला वेबवरील फोन नंबर क्लिक करू देते आणि त्या नंबरवर Skype द्वारा कॉल करू देते!</translation>
-<translation id="4567424176335768812">तुम्ही <ph name="USER_EMAIL_ADDRESS" /> म्हणून साइन इन केले आहे. आता तुम्ही तुमच्या सर्व साइन इन केलेल्या डिव्हाइसवरील तुमच्या बुकमार्क, इतिहास आणि अन्य सेटिंग्ज अॅक्सेस करू शकता.</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>
@@ -174,7 +174,7 @@
 <translation id="6368958679917195344"> Chrome OS अतिरिक्त <ph name="BEGIN_LINK_CROS_OSS" />मुक्त स्रोत सॉफ्टवेअर<ph name="END_LINK_CROS_OSS" /> द्वारे शक्य झाले आहे.</translation>
 <translation id="6515495397637126556"><ph name="PAGE_TITLE" /> - Google Chrome डेव्हलपर</translation>
 <translation id="6566149418543181476">Google Chrome अपडेट करीत आहे (<ph name="PROGRESS_PERCENT" />)</translation>
-<translation id="6676384891291319759">इंटरनेट अॅक्सेस करा</translation>
+<translation id="6676384891291319759">इंटरनेट ॲक्सेस करा</translation>
 <translation id="6679975945624592337">Google Chrome बॅकग्राउंडमध्ये चालू द्या</translation>
 <translation id="6750954913813541382">शब्दलेखनाच्या चुकांमध्ये सुधारणा करण्यासाठी, तुम्ही ब्राउझरमध्ये टाइप करता तो मजकूर Chrome Google ला पाठवते</translation>
 <translation id="677276454032249905">तरीही Chrome बंद करायचे?</translation>
@@ -187,10 +187,10 @@
 <translation id="7098166902387133879">Google Chrome तुमचा मायक्रोफोन वापरत आहे.</translation>
 <translation id="7106741999175697885">टास्क मॅनेजर – Google Chrome</translation>
 <translation id="7140653346177713799">{COUNT,plural, =0{Chrome चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल.}=1{Chrome चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{Chrome चे नवीन अपडेट उपलब्ध आहे आणि तुम्ही ते पुन्हा लाँच करताच लागू केले जाईल. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation>
-<translation id="7242029209006116544">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Google Chrome प्रोफाइलवर त्याच्या अॅडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chrome डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. तुम्ही तुमचा विद्यमान Chrome डेटा वेगळा ठेवण्यासाठी एक नवीन प्रोफाइल वैकल्पिकपणे तयार करू शकता. <ph name="LEARN_MORE" /></translation>
+<translation id="7242029209006116544">तुम्ही एका व्यवस्थापित खात्यासह साइन इन करत आहात आणि तुमच्या Google Chrome प्रोफाइलवर त्याच्या ॲडमिनिस्ट्रेटरला नियंत्रण देत आहात. तुमचा Chrome डेटा, जसे की तुमचे अ‍ॅप्स, बुकमार्क, इतिहास, पासवर्ड आणि अन्य सेटिंग्ज <ph name="USER_NAME" /> वर कायमच्या बद्ध होतील. तुम्ही Google खाती डॅशबोर्डद्वारे हा डेटा हटवण्यात सक्षम व्हाल, परंतु तुम्ही दुसर्‍या खात्यासह हा डेटा संबद्ध करण्यात सक्षम असणार नाही. तुम्ही तुमचा विद्यमान Chrome डेटा वेगळा ठेवण्यासाठी एक नवीन प्रोफाइल वैकल्पिकपणे तयार करू शकता. <ph name="LEARN_MORE" /></translation>
 <translation id="7295052994004373688">ही भाषा Google Chrome UI दाखवण्यासाठी वापरली जाते</translation>
 <translation id="7296210096911315575">महत्त्वाचा वापर आणि सुरक्षा माहिती</translation>
-<translation id="7308322188646931570">फायली डाउनलोड करण्यासाठी Chrome ला स्टोरेजचा अॅक्सेस हवा आहे</translation>
+<translation id="7308322188646931570">फायली डाउनलोड करण्यासाठी Chrome ला स्टोरेजचा ॲक्सेस हवा आहे</translation>
 <translation id="7339898014177206373">नवीन विंडो</translation>
 <translation id="7398801000654795464">तुम्ही <ph name="USER_EMAIL_ADDRESS" /> या रुपात Chrome मध्ये साइन इन केले होते. कृपया पुन्हा साइन इन करण्यासाठी समान खाते वापरा.</translation>
 <translation id="7408085963519505752">Chrome OS अटी</translation>
@@ -238,7 +238,7 @@
 <translation id="873133009373065397">Google Chrome डीफॉल्ट ब्राउझर निर्धारित करू शकत नाही किंवा सेट करू शकत नाही</translation>
 <translation id="8823341990149967727">Chrome कालबाह्य आहे</translation>
 <translation id="884296878221830158">तुम्ही Chrome सुरू करता किंवा होम बटण क्लिक करता तेव्हा कोणते पेज दर्शविले जाते ते देखील हे नियंत्रित करते.</translation>
-<translation id="8862326446509486874">तुमच्याकडे सिस्टम स्तरावरील इंस्टॉलसाठी योग्य अधिकार नाहीत. अॅडमिनिस्ट्रेटर म्हणून पुन्हा इंस्टॉलर चालविण्याचा प्रयत्न करा.</translation>
+<translation id="8862326446509486874">तुमच्याकडे सिस्टम स्तरावरील इंस्टॉलसाठी योग्य अधिकार नाहीत. ॲडमिनिस्ट्रेटर म्हणून पुन्हा इंस्टॉलर चालविण्याचा प्रयत्न करा.</translation>
 <translation id="8914504000324227558">Chrome रीलाँच करा</translation>
 <translation id="8999208279178790196">{0,plural, =0{Chrome अपडेट उपलब्ध आहे}=1{Chrome अपडेट उपलब्ध आहे}other{Chrome अपडेट # दिवसांसाठी उपलब्ध आहे}}</translation>
 <translation id="9026991721384951619">तुमचे खाते साइन इन तपशील कालबाह्य झाल्यामुळे Chrome OS तुमचा डेटा संकालित करू शकले नाही.</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index a6f3529..df325a4 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -5580,6 +5580,7 @@
     "//content/test:test_support",
     "//google_apis:test_support",
     "//net:test_support",
+    "//services/data_decoder/public/cpp:test_support",
     "//services/preferences/public/cpp/tracked:test_support",
     "//skia",
     "//testing/gmock",
diff --git a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.cc b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.cc
index f076972..7559283 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.cc
+++ b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.cc
@@ -18,6 +18,7 @@
 
 using base::android::JavaParamRef;
 using base::android::ScopedJavaLocalRef;
+using contextual_search::UnhandledTapWebContentsObserver;
 
 ContextualSearchTabHelper::ContextualSearchTabHelper(JNIEnv* env,
                                                      jobject obj,
@@ -62,15 +63,21 @@
   content::WebContents* base_web_contents =
       content::WebContents::FromJavaWebContents(j_base_web_contents);
   DCHECK(base_web_contents);
-  if (!unhandled_tap_web_contents_observer_ ||
-      base_web_contents !=
-          unhandled_tap_web_contents_observer_->web_contents()) {
-    unhandled_tap_web_contents_observer_.reset(
-        new contextual_search::UnhandledTapWebContentsObserver(
-            base_web_contents, device_scale_factor,
-            base::BindRepeating(
-                &ContextualSearchTabHelper::OnShowUnhandledTapUIIfNeeded,
-                weak_factory_.GetWeakPtr())));
+
+  if (!UnhandledTapWebContentsObserver::FromWebContents(base_web_contents)) {
+    // Create an UnhandledTapWebContentsObserver owned by |base_web_contents|.
+    UnhandledTapWebContentsObserver::CreateForWebContents(base_web_contents);
+
+    // As per WebContentsUserData::CreateForWebContents(), the constructor of
+    // UnhandledTapWebContentsObserver must only accept one parameter holding a
+    // pointer to the WebContents that will own it (i.e. |base_web_contents|),
+    // forcing us to defer the rest of the initialization to the setters below.
+    auto* utwc_observer =
+        UnhandledTapWebContentsObserver::FromWebContents(base_web_contents);
+    utwc_observer->set_device_scale_factor(device_scale_factor);
+    utwc_observer->set_unhandled_tap_callback(base::BindRepeating(
+        &ContextualSearchTabHelper::OnShowUnhandledTapUIIfNeeded,
+        weak_factory_.GetWeakPtr()));
   }
 }
 
diff --git a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
index 06f49c3..6d2c1cc 100644
--- a/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
+++ b/chrome/browser/android/contextualsearch/contextual_search_tab_helper.h
@@ -15,10 +15,6 @@
 
 class Profile;
 
-namespace contextual_search {
-class UnhandledTapWebContentsObserver;
-}
-
 class ContextualSearchTabHelper {
  public:
   ContextualSearchTabHelper(JNIEnv* env, jobject obj, Profile* profile);
@@ -50,11 +46,6 @@
   JavaObjectWeakGlobalRef weak_java_ref_;
   std::unique_ptr<PrefChangeRegistrar> pref_change_registrar_;
 
-  // The unhandled tap WebContentsObserver for the current tab.
-  // Installs a mojo handler for ShowUnhandledTapUIIfNeeded.
-  std::unique_ptr<contextual_search::UnhandledTapWebContentsObserver>
-      unhandled_tap_web_contents_observer_;
-
   base::WeakPtrFactory<ContextualSearchTabHelper> weak_factory_{this};
   DISALLOW_COPY_AND_ASSIGN(ContextualSearchTabHelper);
 };
diff --git a/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.cc b/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.cc
index 780fc61..832a827 100644
--- a/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.cc
+++ b/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.cc
@@ -4,39 +4,14 @@
 
 #include "chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h"
 
-#include <utility>
-
-#include "base/bind.h"
-#include "build/build_config.h"
-#include "third_party/blink/public/public_buildflags.h"
-
-#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
-#include "chrome/browser/android/contextualsearch/unhandled_tap_notifier_impl.h"
-#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
-
 namespace contextual_search {
 
 UnhandledTapWebContentsObserver::UnhandledTapWebContentsObserver(
-    content::WebContents* web_contents,
-    float device_scale_factor,
-    UnhandledTapCallback callback)
-    : content::WebContentsObserver(web_contents) {
-#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
-  registry_.AddInterface(
-      base::BindRepeating(&contextual_search::CreateUnhandledTapNotifierImpl,
-                          device_scale_factor, std::move(callback)));
-#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
-}
+    content::WebContents* web_contents)
+    : content::WebContentsObserver(web_contents) {}
 
 UnhandledTapWebContentsObserver::~UnhandledTapWebContentsObserver() {}
 
-void UnhandledTapWebContentsObserver::OnInterfaceRequestFromFrame(
-    content::RenderFrameHost* render_frame_host,
-    const std::string& interface_name,
-    mojo::ScopedMessagePipeHandle* interface_pipe) {
-#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
-  registry_.TryBindInterface(interface_name, interface_pipe);
-#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
-}
+WEB_CONTENTS_USER_DATA_KEY_IMPL(UnhandledTapWebContentsObserver)
 
 }  // namespace contextual_search
diff --git a/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h b/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h
index be4a599..5780d99 100644
--- a/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h
+++ b/chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h
@@ -6,9 +6,8 @@
 #define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_UNHANDLED_TAP_WEB_CONTENTS_OBSERVER_H_
 
 #include "base/macros.h"
-#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents_observer.h"
-#include "services/service_manager/public/cpp/binder_registry.h"
+#include "content/public/browser/web_contents_user_data.h"
 
 namespace contextual_search {
 
@@ -18,27 +17,39 @@
 
 // Binds a Mojo unhandled-tap notifier message-handler to the frame host
 // observed by this observer.
-class UnhandledTapWebContentsObserver : public content::WebContentsObserver {
+class UnhandledTapWebContentsObserver
+    : public content::WebContentsObserver,
+      public content::WebContentsUserData<UnhandledTapWebContentsObserver> {
  public:
   // Creates an observer for the given |web_contents| that binds a Mojo request
   // for an endpoint to the UnhandledTapNotifier service.  This will create an
   // instance of the contextual_search::CreateUnhandledTapNotifierImpl to handle
-  // those messages.  May use the given |scale_factor| to convert from dips to
-  // pixels for tap coordinates when calling back through the given |callback|.
-  UnhandledTapWebContentsObserver(content::WebContents* web_contents,
-                                  float device_scale_factor,
-                                  UnhandledTapCallback callback);
+  // those messages.
+  explicit UnhandledTapWebContentsObserver(content::WebContents* web_contents);
 
   ~UnhandledTapWebContentsObserver() override;
 
- private:
-  // content::WebContentsObserver implementation.
-  void OnInterfaceRequestFromFrame(
-      content::RenderFrameHost* render_frame_host,
-      const std::string& interface_name,
-      mojo::ScopedMessagePipeHandle* interface_pipe) override;
+  void set_device_scale_factor(float factor) { device_scale_factor_ = factor; }
 
-  service_manager::BinderRegistry registry_;
+  float device_scale_factor() const { return device_scale_factor_; }
+
+  void set_unhandled_tap_callback(UnhandledTapCallback callback) {
+    unhandled_tap_callback_ = callback;
+  }
+
+  UnhandledTapCallback unhandled_tap_callback() const {
+    return unhandled_tap_callback_;
+  }
+
+ private:
+  friend class content::WebContentsUserData<UnhandledTapWebContentsObserver>;
+
+  // Scale factor to convert from dips to pixels for tap coordinates when
+  // calling back through the given |unhandled_tap_callback_|.
+  float device_scale_factor_;
+  UnhandledTapCallback unhandled_tap_callback_;
+
+  WEB_CONTENTS_USER_DATA_KEY_DECL();
 
   DISALLOW_COPY_AND_ASSIGN(UnhandledTapWebContentsObserver);
 };
diff --git a/chrome/browser/android/explore_sites/image_helper.cc b/chrome/browser/android/explore_sites/image_helper.cc
index ab961b6..e83e16a2 100644
--- a/chrome/browser/android/explore_sites/image_helper.cc
+++ b/chrome/browser/android/explore_sites/image_helper.cc
@@ -9,7 +9,6 @@
 #include "base/metrics/histogram_macros.h"
 #include "base/time/time.h"
 #include "chrome/browser/android/explore_sites/explore_sites_types.h"
-#include "content/public/browser/data_decoder_service.h"
 #include "services/data_decoder/public/cpp/decode_image.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
@@ -25,11 +24,6 @@
 // Ratio of icon size to the amount of padding between the icons.
 const int kIconPaddingScale = 8;
 
-// How long to let our Data Decoder service instance hang around unused before
-// terminating it.
-constexpr base::TimeDelta kDataDecoderInstanceTimeout{
-    base::TimeDelta::FromSeconds(5)};
-
 }  // namespace
 
 // Class Job is used to manage multiple calls to the ImageHelper. Each request
@@ -48,11 +42,9 @@
   ~Job();
 
   // Start begins the work that a Job performs (decoding and composition).
-  void Start(data_decoder::mojom::DataDecoderService* service_override);
+  void Start();
 
-  void DecodeImageBytes(
-      std::unique_ptr<EncodedImageBytes> image_bytes,
-      data_decoder::mojom::DataDecoderService* service_override);
+  void DecodeImageBytes(std::unique_ptr<EncodedImageBytes> image_bytes);
   void OnDecodeSiteImageDone(const SkBitmap& decoded_image);
   void OnDecodeCategoryImageDone(const SkBitmap& decoded_image);
   std::unique_ptr<SkBitmap> CombineImages();
@@ -91,18 +83,16 @@
 
 ImageHelper::Job::~Job() = default;
 
-void ImageHelper::Job::Start(
-    data_decoder::mojom::DataDecoderService* service_override) {
+void ImageHelper::Job::Start() {
   for (int i = 0; i < num_icons_; i++) {
     // TODO(freedjm): preserve order of images.
     DVLOG(1) << "Decoding image " << i + 1 << " of " << images_.size();
-    DecodeImageBytes(std::move(images_[i]), service_override);
+    DecodeImageBytes(std::move(images_[i]));
   }
 }
 
 void ImageHelper::Job::DecodeImageBytes(
-    std::unique_ptr<EncodedImageBytes> image_bytes,
-    data_decoder::mojom::DataDecoderService* service_override) {
+    std::unique_ptr<EncodedImageBytes> image_bytes) {
   data_decoder::mojom::ImageDecoder::DecodeImageCallback callback;
   if (job_type_ == ImageJobType::kSiteIcon) {
     callback = base::BindOnce(&ImageHelper::Job::OnDecodeSiteImageDone,
@@ -112,16 +102,7 @@
                               weak_ptr_factory_.GetWeakPtr());
   }
 
-  mojo::PendingRemote<data_decoder::mojom::ImageDecoder> decoder;
-  if (service_override) {
-    service_override->BindImageDecoder(
-        decoder.InitWithNewPipeAndPassReceiver());
-  } else {
-    image_helper_->GetDataDecoder()->BindImageDecoder(
-        decoder.InitWithNewPipeAndPassReceiver());
-  }
-
-  data_decoder::DecodeImage(std::move(decoder), *image_bytes,
+  data_decoder::DecodeImage(&image_helper_->data_decoder_, *image_bytes,
                             data_decoder::mojom::ImageCodec::DEFAULT, false,
                             data_decoder::kDefaultMaxSizeInBytes, gfx::Size(),
                             std::move(callback));
@@ -288,18 +269,16 @@
 
 ImageHelper::~ImageHelper() {}
 
-void ImageHelper::NewJob(
-    ImageJobType job_type,
-    ImageJobFinishedCallback job_finished_callback,
-    BitmapCallback bitmap_callback,
-    EncodedImageList images,
-    int pixel_size,
-    data_decoder::mojom::DataDecoderService* service_override) {
+void ImageHelper::NewJob(ImageJobType job_type,
+                         ImageJobFinishedCallback job_finished_callback,
+                         BitmapCallback bitmap_callback,
+                         EncodedImageList images,
+                         int pixel_size) {
   auto job = std::make_unique<Job>(
       this, job_type, std::move(job_finished_callback),
       std::move(bitmap_callback), std::move(images), pixel_size);
   id_to_job_[last_used_job_id_] = std::move(job);
-  id_to_job_[last_used_job_id_]->Start(service_override);
+  id_to_job_[last_used_job_id_]->Start();
 }
 
 void ImageHelper::OnJobFinished(int job_id) {
@@ -307,10 +286,8 @@
   id_to_job_.erase(job_id);
 }
 
-void ImageHelper::ComposeSiteImage(
-    BitmapCallback callback,
-    EncodedImageList images,
-    data_decoder::mojom::DataDecoderService* service_override) {
+void ImageHelper::ComposeSiteImage(BitmapCallback callback,
+                                   EncodedImageList images) {
   DVLOG(1) << "Requested decoding for site image";
   if (images.size() == 0) {
     std::move(callback).Run(nullptr);
@@ -320,14 +297,12 @@
   NewJob(ImageJobType::kSiteIcon,
          base::BindOnce(&ImageHelper::OnJobFinished, weak_factory_.GetWeakPtr(),
                         ++last_used_job_id_),
-         std::move(callback), std::move(images), -1, service_override);
+         std::move(callback), std::move(images), -1);
 }
 
-void ImageHelper::ComposeCategoryImage(
-    BitmapCallback callback,
-    int pixel_size,
-    EncodedImageList images,
-    data_decoder::mojom::DataDecoderService* service_override) {
+void ImageHelper::ComposeCategoryImage(BitmapCallback callback,
+                                       int pixel_size,
+                                       EncodedImageList images) {
   DVLOG(1) << "Requested decoding " << images.size()
            << " images for category image";
 
@@ -339,17 +314,7 @@
   NewJob(ImageJobType::kCategoryImage,
          base::BindOnce(&ImageHelper::OnJobFinished, weak_factory_.GetWeakPtr(),
                         ++last_used_job_id_),
-         std::move(callback), std::move(images), pixel_size, service_override);
-}
-
-data_decoder::mojom::DataDecoderService* ImageHelper::GetDataDecoder() {
-  if (!data_decoder_) {
-    data_decoder_ = content::LaunchDataDecoder();
-    data_decoder_.reset_on_disconnect();
-    data_decoder_.reset_on_idle_timeout(kDataDecoderInstanceTimeout);
-  }
-
-  return data_decoder_.get();
+         std::move(callback), std::move(images), pixel_size);
 }
 
 }  // namespace explore_sites
diff --git a/chrome/browser/android/explore_sites/image_helper.h b/chrome/browser/android/explore_sites/image_helper.h
index 344c1d2..cf7b2f6b 100644
--- a/chrome/browser/android/explore_sites/image_helper.h
+++ b/chrome/browser/android/explore_sites/image_helper.h
@@ -12,7 +12,7 @@
 #include "base/memory/weak_ptr.h"
 #include "chrome/browser/android/explore_sites/explore_sites_types.h"
 #include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace explore_sites {
@@ -29,18 +29,13 @@
   virtual ~ImageHelper();
 
   // Compose a single site icon and return via |callback|.
-  void ComposeSiteImage(
-      BitmapCallback callback,
-      EncodedImageList images,
-      data_decoder::mojom::DataDecoderService* service_override = nullptr);
+  void ComposeSiteImage(BitmapCallback callback, EncodedImageList images);
 
   // Compose a category icon containing [1 - 4] site icons and return via
   // |callback|.
-  void ComposeCategoryImage(
-      BitmapCallback callback,
-      int pixel_size,
-      EncodedImageList images,
-      data_decoder::mojom::DataDecoderService* service_override = nullptr);
+  void ComposeCategoryImage(BitmapCallback callback,
+                            int pixel_size,
+                            EncodedImageList images);
 
  private:
   class Job;
@@ -49,14 +44,15 @@
               ImageJobFinishedCallback job_finished_callback,
               BitmapCallback bitmap_callback,
               EncodedImageList images,
-              int pixel_size,
-              data_decoder::mojom::DataDecoderService* service_override);
+              int pixel_size);
 
   void OnJobFinished(int job_id);
 
-  data_decoder::mojom::DataDecoderService* GetDataDecoder();
+  // The instance of the Data Decoder used by this ImageHelper to perform any
+  // image decoding operations. The underlying service instance is started
+  // lazily when needed and torn down when not in use.
+  data_decoder::DataDecoder data_decoder_;
 
-  mojo::Remote<data_decoder::mojom::DataDecoderService> data_decoder_;
   std::map<int, std::unique_ptr<Job>> id_to_job_;
   int last_used_job_id_;
 
diff --git a/chrome/browser/android/explore_sites/image_helper_unittest.cc b/chrome/browser/android/explore_sites/image_helper_unittest.cc
index dfe8d22..2595b68f1 100644
--- a/chrome/browser/android/explore_sites/image_helper_unittest.cc
+++ b/chrome/browser/android/explore_sites/image_helper_unittest.cc
@@ -12,7 +12,7 @@
 #include "base/test/metrics/histogram_tester.h"
 #include "base/test/task_environment.h"
 #include "base/test/test_simple_task_runner.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkColor.h"
@@ -63,12 +63,10 @@
 
   std::vector<std::unique_ptr<SkBitmap>> last_bitmap_list;
 
-  data_decoder::DataDecoderService* data_decoder() { return &data_decoder_; }
-
  protected:
   base::test::TaskEnvironment task_environment_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
 
-  data_decoder::DataDecoderService data_decoder_;
   base::HistogramTester histogram_tester_;
 };
 
@@ -86,8 +84,7 @@
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_SiteIcon) {
   ImageHelper image_helper;
 
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
 
   task_environment_.RunUntilIdle();
 
@@ -101,15 +98,13 @@
 // Test that two sequential calls to get site icons works.
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_SiteIcon_MultipleCalls) {
   ImageHelper image_helper;
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
   EXPECT_FALSE(last_bitmap_list[0]->isNull());
 
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[1]);
@@ -119,10 +114,8 @@
 // Test that two concurrent calls to get site icons works.
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_SiteIcon_ConcurrentCalls) {
   ImageHelper image_helper;
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
@@ -135,7 +128,7 @@
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_CategoryImage_One) {
   ImageHelper image_helper;
   image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                    GetEncodedImageList(1), data_decoder());
+                                    GetEncodedImageList(1));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
@@ -162,7 +155,7 @@
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_CategoryImage_Two) {
   ImageHelper image_helper;
   image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                    GetEncodedImageList(2), data_decoder());
+                                    GetEncodedImageList(2));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
@@ -188,7 +181,7 @@
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_CategoryImage_Three) {
   ImageHelper image_helper;
   image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                    GetEncodedImageList(3), data_decoder());
+                                    GetEncodedImageList(3));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
@@ -217,7 +210,7 @@
 TEST_F(ExploreSitesImageHelperTest, TestImageHelper_CategoryImage_Four) {
   ImageHelper image_helper;
   image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                    GetEncodedImageList(4), data_decoder());
+                                    GetEncodedImageList(4));
   task_environment_.RunUntilIdle();
 
   ASSERT_NE(nullptr, last_bitmap_list[0]);
@@ -257,7 +250,7 @@
       image_list.push_back(std::make_unique<EncodedImageBytes>(kWebpBytes));
     }
     image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                      std::move(image_list), data_decoder());
+                                      std::move(image_list));
 
     task_environment_.RunUntilIdle();
 
@@ -275,8 +268,7 @@
   ImageHelper image_helper;
 
   // Record one success UMA from CompseSiteImage.
-  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), GetEncodedImageList(1));
   task_environment_.RunUntilIdle();
 
   histograms().ExpectTotalCount("ExploreSites.ImageDecoded", 1);
@@ -285,8 +277,7 @@
   // Record one failure UMA from ComposeSiteImage.
   EncodedImageList image_list;
   image_list.push_back(std::make_unique<EncodedImageBytes>(kInvalidWebpBytes));
-  image_helper.ComposeSiteImage(StoreBitmap(), std::move(image_list),
-                                data_decoder());
+  image_helper.ComposeSiteImage(StoreBitmap(), std::move(image_list));
   task_environment_.RunUntilIdle();
 
   histograms().ExpectTotalCount("ExploreSites.ImageDecoded", 2);
@@ -294,7 +285,7 @@
 
   // Record 2 samples from ComposeCategoryImage.
   image_helper.ComposeCategoryImage(StoreBitmap(), kIconSize,
-                                    GetEncodedImageList(2), data_decoder());
+                                    GetEncodedImageList(2));
   task_environment_.RunUntilIdle();
 
   histograms().ExpectTotalCount("ExploreSites.ImageDecoded", 4);
diff --git a/chrome/browser/apps/app_service/app_icon_factory.cc b/chrome/browser/apps/app_service/app_icon_factory.cc
index 33402e38..cc62120 100644
--- a/chrome/browser/apps/app_service/app_icon_factory.cc
+++ b/chrome/browser/apps/app_service/app_icon_factory.cc
@@ -21,7 +21,6 @@
 #include "chrome/browser/extensions/chrome_app_icon.h"
 #include "chrome/browser/extensions/chrome_app_icon_loader.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/system_connector.h"
 #include "extensions/browser/component_extension_resource_manager.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extensions_browser_client.h"
@@ -286,9 +285,8 @@
     return;
   }
 
-  data_decoder::DecodeImage(
-      content::GetSystemConnector(), data,
-      data_decoder::mojom::ImageCodec::DEFAULT, false,
+  data_decoder::DecodeImageIsolated(
+      data, data_decoder::mojom::ImageCodec::DEFAULT, false,
       data_decoder::kDefaultMaxSizeInBytes, gfx::Size(),
       base::BindOnce(&RunCallbackWithSkBitmap, size_hint_in_dip,
                      is_placeholder_icon, icon_effects, icon_compression,
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc
index 64fe2dc..4f2e8710 100644
--- a/chrome/browser/chrome_browser_interface_binders.cc
+++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -4,6 +4,8 @@
 
 #include "chrome/browser/chrome_browser_interface_binders.h"
 
+#include <utility>
+
 #include "base/feature_list.h"
 #include "build/build_config.h"
 #include "chrome/browser/accessibility/accessibility_labels_service.h"
@@ -21,6 +23,13 @@
 #include "third_party/blink/public/mojom/insecure_input/insecure_input_service.mojom.h"
 #include "third_party/blink/public/mojom/loader/navigation_predictor.mojom.h"
 #include "third_party/blink/public/mojom/payments/payment_request.mojom.h"
+#include "third_party/blink/public/public_buildflags.h"
+
+#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
+#include "chrome/browser/android/contextualsearch/unhandled_tap_notifier_impl.h"
+#include "chrome/browser/android/contextualsearch/unhandled_tap_web_contents_observer.h"
+#include "third_party/blink/public/mojom/unhandled_tap_notifier/unhandled_tap_notifier.mojom.h"
+#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
 
 #if defined(OS_ANDROID)
 #include "content/public/browser/web_contents.h"
@@ -38,6 +47,20 @@
 namespace chrome {
 namespace internal {
 
+#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
+void BindUnhandledTapWebContentsObserver(
+    content::RenderFrameHost* const host,
+    mojo::PendingReceiver<blink::mojom::UnhandledTapNotifier> receiver) {
+  auto* unhandled_tap_notifier_observer =
+      contextual_search::UnhandledTapWebContentsObserver::FromWebContents(
+          content::WebContents::FromRenderFrameHost(host));
+  contextual_search::CreateUnhandledTapNotifierImpl(
+      unhandled_tap_notifier_observer->device_scale_factor(),
+      unhandled_tap_notifier_observer->unhandled_tap_callback(),
+      std::move(receiver));
+}
+#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
+
 // Forward image Annotator requests to the profile's AccessibilityLabelsService.
 void BindImageAnnotator(
     content::RenderFrameHost* const frame_host,
@@ -92,6 +115,12 @@
   }
   map->Add<blink::mojom::ShareService>(base::BindRepeating(
       &ForwardToJavaWebContents<blink::mojom::ShareService>));
+
+#if BUILDFLAG(ENABLE_UNHANDLED_TAP)
+  map->Add<blink::mojom::UnhandledTapNotifier>(
+      base::BindRepeating(&BindUnhandledTapWebContentsObserver));
+#endif  // BUILDFLAG(ENABLE_UNHANDLED_TAP)
+
 #if defined(ENABLE_SPATIAL_NAVIGATION_HOST)
   map->Add<blink::mojom::SpatialNavigationHost>(base::BindRepeating(
       &ForwardToJavaWebContents<blink::mojom::SpatialNavigationHost>));
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 4153850c..c34bfbd 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -2095,6 +2095,11 @@
         command_line->AppendSwitch(switches::kAllowSyncXHRInPageDismissal);
       }
 
+      if (prefs->HasPrefPath(prefs::kWebComponentsV0Enabled) &&
+          prefs->GetBoolean(prefs::kWebComponentsV0Enabled)) {
+        command_line->AppendSwitch(switches::kWebComponentsV0Enabled);
+      }
+
       if (!profile->ShouldEnableOutOfBlinkCors()) {
         command_line->AppendSwitch(
             network::switches::kForceToDisableOutOfBlinkCors);
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer.cc b/chrome/browser/chromeos/apps/apk_web_app_installer.cc
index 1fd19f96..fd15a40 100644
--- a/chrome/browser/chromeos/apps/apk_web_app_installer.cc
+++ b/chrome/browser/chromeos/apps/apk_web_app_installer.cc
@@ -17,10 +17,7 @@
 #include "chrome/browser/web_applications/components/web_app_install_utils.h"
 #include "chrome/browser/web_applications/web_app_provider.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/system_connector.h"
-#include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "services/data_decoder/public/cpp/decode_image.h"
-#include "services/service_manager/public/cpp/connector.h"
 #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
 #include "third_party/skia/include/core/SkColor.h"
 #include "url/gurl.h"
@@ -47,8 +44,7 @@
   // CompleteInstallation().
   auto* installer =
       new ApkWebAppInstaller(profile, std::move(callback), weak_owner);
-  installer->Start(content::GetSystemConnector(), std::move(web_app_info),
-                   icon_png_data);
+  installer->Start(std::move(web_app_info), icon_png_data);
 }
 
 ApkWebAppInstaller::ApkWebAppInstaller(Profile* profile,
@@ -60,8 +56,7 @@
 
 ApkWebAppInstaller::~ApkWebAppInstaller() = default;
 
-void ApkWebAppInstaller::Start(service_manager::Connector* connector,
-                               arc::mojom::WebAppInfoPtr web_app_info,
+void ApkWebAppInstaller::Start(arc::mojom::WebAppInfoPtr web_app_info,
                                const std::vector<uint8_t>& icon_png_data) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
   if (!weak_owner_.get()) {
@@ -97,16 +92,10 @@
   web_app_info_->display_mode = blink::mojom::DisplayMode::kStandalone;
   web_app_info_->open_as_window = true;
 
-  // Set up the connection to the service manager to decode the raw PNG icon
-  // bytes into SkBitmaps.
-  mojo::PendingReceiver<service_manager::mojom::Connector> connector_receiver;
-  connector_ = service_manager::Connector::Create(&connector_receiver);
-  connector->BindConnectorReceiver(std::move(connector_receiver));
-
   // Decode the image in a sandboxed process off the main thread.
   // base::Unretained is safe because this object owns itself.
-  data_decoder::DecodeImage(
-      connector_.get(), icon_png_data, data_decoder::mojom::ImageCodec::DEFAULT,
+  data_decoder::DecodeImageIsolated(
+      icon_png_data, data_decoder::mojom::ImageCodec::DEFAULT,
       /*shrink_to_fit=*/false, data_decoder::kDefaultMaxSizeInBytes,
       /*desired_image_frame_size=*/gfx::Size(),
       base::BindOnce(&ApkWebAppInstaller::OnImageDecoded,
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer.h b/chrome/browser/chromeos/apps/apk_web_app_installer.h
index 63ad487..f15ae34 100644
--- a/chrome/browser/chromeos/apps/apk_web_app_installer.h
+++ b/chrome/browser/chromeos/apps/apk_web_app_installer.h
@@ -18,10 +18,6 @@
 class GURL;
 class Profile;
 
-namespace service_manager {
-class Connector;
-}
-
 namespace web_app {
 enum class InstallResultCode;
 }
@@ -59,8 +55,7 @@
   virtual ~ApkWebAppInstaller();
 
   // Starts the installation flow by decoding icon data.
-  void Start(service_manager::Connector* connector,
-             arc::mojom::WebAppInfoPtr web_app_info,
+  void Start(arc::mojom::WebAppInfoPtr web_app_info,
              const std::vector<uint8_t>& icon_png_data);
 
   // Calls |callback_| with |id|, and deletes this object. Virtual for testing.
@@ -82,8 +77,6 @@
   const WebApplicationInfo& web_app_info() const { return *web_app_info_; }
 
  private:
-  std::unique_ptr<service_manager::Connector> connector_;
-
   // If |weak_owner_| is ever invalidated while this class is working,
   // installation will be aborted. |weak_owner_|'s lifetime must be equal to or
   // shorter than that of |profile_|.
diff --git a/chrome/browser/chromeos/apps/apk_web_app_installer_unittest.cc b/chrome/browser/chromeos/apps/apk_web_app_installer_unittest.cc
index 1432775..23d75a9 100644
--- a/chrome/browser/chromeos/apps/apk_web_app_installer_unittest.cc
+++ b/chrome/browser/chromeos/apps/apk_web_app_installer_unittest.cc
@@ -16,7 +16,7 @@
 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/arc/test/fake_app_instance.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "url/gurl.h"
 
 namespace {
@@ -90,11 +90,7 @@
   ~ApkWebAppInstallerTest() override = default;
 
  protected:
-  service_manager::Connector* connector() const {
-    return test_data_decoder_service_.connector();
-  }
-
-  data_decoder::TestDataDecoderService test_data_decoder_service_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
 
   // Must stay as last member.
   base::WeakPtrFactory<ApkWebAppInstallerTest> weak_ptr_factory_{this};
@@ -105,7 +101,7 @@
   FakeApkWebAppInstaller apk_web_app_installer(
       profile(), weak_ptr_factory_.GetWeakPtr(), run_loop.QuitClosure());
 
-  apk_web_app_installer.Start(connector(), GetWebAppInfo(), GetIconBytes());
+  apk_web_app_installer.Start(GetWebAppInfo(), GetIconBytes());
   run_loop.Run();
 
   EXPECT_FALSE(apk_web_app_installer.complete_installation_called());
@@ -133,7 +129,7 @@
       profile(), weak_ptr_factory_.GetWeakPtr(), run_loop.QuitClosure());
 
   weak_ptr_factory_.InvalidateWeakPtrs();
-  apk_web_app_installer.Start(connector(), GetWebAppInfo(), GetIconBytes());
+  apk_web_app_installer.Start(GetWebAppInfo(), GetIconBytes());
   run_loop.Run();
 
   EXPECT_EQ("", apk_web_app_installer.id());
@@ -149,7 +145,7 @@
   FakeApkWebAppInstaller apk_web_app_installer(
       profile(), weak_ptr_factory_.GetWeakPtr(), run_loop.QuitClosure());
 
-  apk_web_app_installer.Start(connector(), GetWebAppInfo(), GetIconBytes());
+  apk_web_app_installer.Start(GetWebAppInfo(), GetIconBytes());
   weak_ptr_factory_.InvalidateWeakPtrs();
   run_loop.Run();
 
@@ -163,8 +159,7 @@
   FakeApkWebAppInstaller apk_web_app_installer(
       profile(), weak_ptr_factory_.GetWeakPtr(), run_loop.QuitClosure());
 
-  apk_web_app_installer.Start(connector(), /*web_app_info=*/nullptr,
-                              GetIconBytes());
+  apk_web_app_installer.Start(/*web_app_info=*/nullptr, GetIconBytes());
   run_loop.Run();
 
   EXPECT_EQ("", apk_web_app_installer.id());
@@ -179,7 +174,7 @@
   FakeApkWebAppInstaller apk_web_app_installer(
       profile(), weak_ptr_factory_.GetWeakPtr(), run_loop.QuitClosure());
 
-  apk_web_app_installer.Start(connector(), GetWebAppInfo(), {});
+  apk_web_app_installer.Start(GetWebAppInfo(), {});
   run_loop.Run();
 
   EXPECT_EQ("", apk_web_app_installer.id());
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc
index c21f63d..ba2f2be 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.cc
@@ -302,10 +302,7 @@
     GurlAndActivityInfo* out_url_and_activity_name,
     bool* in_out_safe_to_bypass_ui) {
   DCHECK(out_url_and_activity_name);
-  if (!handlers.size()) {
-    *in_out_safe_to_bypass_ui = false;
-    return GetActionResult::SHOW_CHROME_OS_DIALOG;  // no apps found.
-  }
+  DCHECK(!handlers.empty());
 
   if (selected_app_index == handlers.size()) {
     // The user hasn't made the selection yet.
@@ -419,10 +416,6 @@
     *out_result = result;
 
   switch (result) {
-    case GetActionResult::SHOW_CHROME_OS_DIALOG:
-      ShowFallbackExternalProtocolDialog(render_process_host_id, routing_id,
-                                         url);
-      return true;
     case GetActionResult::OPEN_URL_IN_CHROME:
       OpenUrlInChrome(render_process_host_id, routing_id,
                       url_and_activity_name.first);
@@ -692,7 +685,7 @@
   // We only reach here if Chrome doesn't think it can handle the URL. If ARC is
   // not running anymore, or Chrome is the only candidate returned, show the
   // usual Chrome OS dialog that says we cannot handle the URL.
-  if (!instance || !intent_helper_bridge ||
+  if (!instance || !intent_helper_bridge || handlers.empty() ||
       IsChromeOnlyAppCandidate(handlers)) {
     ShowExternalProtocolDialogWithoutApps(render_process_host_id, routing_id,
                                           url, initiating_origin);
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
index 8c6ede2a..217103da 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog.h
@@ -34,10 +34,6 @@
 
 // An enum returned from GetAction function. This is visible for testing.
 enum class GetActionResult {
-  // ARC cannot handle the |original_url|, and the URL does not have a fallback
-  // http(s) URL. Chrome should show the "Google Chrome OS can't open the page"
-  // dialog now.
-  SHOW_CHROME_OS_DIALOG,
   // ARC cannot handle the |original_url|, but the URL did have a fallback URL
   // which Chrome can handle. Chrome should show the fallback URL now.
   OPEN_URL_IN_CHROME,
diff --git a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog_unittest.cc b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog_unittest.cc
index 91774c91..7039e9a 100644
--- a/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog_unittest.cc
+++ b/chrome/browser/chromeos/arc/intent_helper/arc_external_protocol_dialog_unittest.cc
@@ -7,10 +7,18 @@
 #include "base/macros.h"
 #include "base/time/time.h"
 #include "chrome/browser/chromeos/arc/arc_web_contents_data.h"
+#include "chrome/browser/sharing/click_to_call/click_to_call_ui_controller.h"
 #include "chrome/browser/sharing/mock_sharing_service.h"
 #include "chrome/browser/sharing/sharing_service_factory.h"
+#include "chrome/browser/ui/app_list/arc/arc_app_test.h"
 #include "chrome/test/base/browser_with_test_window_test.h"
+#include "chromeos/dbus/session_manager/fake_session_manager_client.h"
+#include "components/arc/arc_prefs.h"
+#include "components/arc/arc_service_manager.h"
 #include "components/arc/intent_helper/arc_intent_helper_bridge.h"
+#include "components/arc/session/arc_bridge_service.h"
+#include "components/arc/test/connection_holder_util.h"
+#include "components/arc/test/fake_intent_helper_instance.h"
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -20,11 +28,42 @@
 
 namespace {
 
-// Helper class to run tests that need a dummy WebContents.
+// Helper class to run tests that need a dummy WebContents and arc bridge.
 class ArcExternalProtocolDialogTestUtils : public BrowserWithTestWindowTest {
  public:
   ArcExternalProtocolDialogTestUtils() = default;
 
+  void SetUp() override {
+    chromeos::SessionManagerClient::InitializeFakeInMemory();
+    chromeos::FakeSessionManagerClient::Get()->set_arc_available(true);
+    BrowserWithTestWindowTest::SetUp();
+
+    profile()->GetPrefs()->SetBoolean(arc::prefs::kArcEnabled, true);
+    arc_test_.set_wait_default_apps(true);
+    arc_test_.SetUp(profile());
+    // Set up ArcIntentHelperBridge to emulate full-duplex IntentHelper
+    // connection.
+    intent_helper_bridge_ = std::make_unique<arc::ArcIntentHelperBridge>(
+        profile(), arc::ArcServiceManager::Get()->arc_bridge_service());
+    arc::ArcServiceManager::Get()
+        ->arc_bridge_service()
+        ->intent_helper()
+        ->SetInstance(&intent_helper_);
+    WaitForInstanceReady(
+        arc::ArcServiceManager::Get()->arc_bridge_service()->intent_helper());
+  }
+
+  void TearDown() override {
+    arc::ArcServiceManager::Get()
+        ->arc_bridge_service()
+        ->intent_helper()
+        ->CloseInstance(&intent_helper_);
+    intent_helper_bridge_.reset();
+    arc_test_.TearDown();
+    BrowserWithTestWindowTest::TearDown();
+    chromeos::SessionManagerClient::Shutdown();
+  }
+
  protected:
   void CreateTab(bool started_from_arc) {
     AddTab(browser(), GURL("http://www.tests.com"));
@@ -41,11 +80,35 @@
         web_contents_);
   }
 
+  std::unique_ptr<syncer::DeviceInfo> CreateSharingDevice(
+      const std::string& device_guid) {
+    return std::make_unique<syncer::DeviceInfo>(
+        device_guid, "device_name", "chrome_version", "user_agent",
+        sync_pb::SyncEnums_DeviceType_TYPE_PHONE, "device_id",
+        base::SysInfo::HardwareInfo(),
+        /*last_updated_timestamp=*/base::Time::Now(),
+        /*send_tab_to_self_receiving_enabled=*/false,
+        /*sharing_info=*/base::nullopt);
+  }
+
+  MockSharingService* CreateSharingService() {
+    return static_cast<MockSharingService*>(
+        SharingServiceFactory::GetInstance()->SetTestingFactoryAndUse(
+            profile(),
+            base::BindRepeating([](content::BrowserContext* context) {
+              return static_cast<std::unique_ptr<KeyedService>>(
+                  std::make_unique<MockSharingService>());
+            })));
+  }
+
   content::WebContents* web_contents() { return web_contents_; }
 
  private:
   // Keep only one |WebContents| at a time.
   content::WebContents* web_contents_;
+  arc::FakeIntentHelperInstance intent_helper_;
+  ArcAppTest arc_test_;
+  std::unique_ptr<arc::ArcIntentHelperBridge> intent_helper_bridge_;
 
   DISALLOW_COPY_AND_ASSIGN(ArcExternalProtocolDialogTestUtils);
 };
@@ -78,29 +141,6 @@
 
 }  // namespace
 
-// Tests that when no apps are returned from ARC, GetAction returns
-// SHOW_CHROME_OS_DIALOG.
-TEST(ArcExternalProtocolDialogTest, TestGetActionWithNoApp) {
-  std::vector<mojom::IntentHandlerInfoPtr> handlers;
-  GurlAndActivityInfo url_and_activity_name = CreateEmptyGurlAndActivityInfo();
-
-  // Marking this as safe to bypass or not makes no difference since there are
-  // no handlers.
-  bool in_out_safe_to_bypass_ui = false;
-  EXPECT_EQ(GetActionResult::SHOW_CHROME_OS_DIALOG,
-            GetActionForTesting(GURL("external-protocol:foo"), handlers,
-                                handlers.size(), &url_and_activity_name,
-                                &in_out_safe_to_bypass_ui));
-  EXPECT_FALSE(in_out_safe_to_bypass_ui);
-
-  in_out_safe_to_bypass_ui = true;
-  EXPECT_EQ(GetActionResult::SHOW_CHROME_OS_DIALOG,
-            GetActionForTesting(GURL("external-protocol:foo"), handlers,
-                                handlers.size(), &url_and_activity_name,
-                                &in_out_safe_to_bypass_ui));
-  EXPECT_FALSE(in_out_safe_to_bypass_ui);
-}
-
 // Tests that when one app is passed to GetAction but the user hasn't selected
 // it and |in_out_safe_to_bypass_ui| is true, the function returns
 // HANDLE_URL_IN_ARC.
@@ -962,33 +1002,19 @@
 
 // Tests that clicking on a device calls through to SharingService.
 TEST_F(ArcExternalProtocolDialogTestUtils, TestSelectDeviceForTelLink) {
-  std::string device_guid = "device_guid";
+  CreateTab(/*started_from_arc=*/false);
 
-  MockSharingService* sharing_service = static_cast<MockSharingService*>(
-      SharingServiceFactory::GetInstance()->SetTestingFactoryAndUse(
-          profile(), base::BindRepeating([](content::BrowserContext* context) {
-            return static_cast<std::unique_ptr<KeyedService>>(
-                std::make_unique<MockSharingService>());
-          })));
+  std::string device_guid = "device_guid";
+  MockSharingService* sharing_service = CreateSharingService();
+  content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
+  std::vector<mojom::IntentHandlerInfoPtr> handlers;
+  std::vector<std::unique_ptr<syncer::DeviceInfo>> devices;
+  devices.push_back(CreateSharingDevice(device_guid));
 
   EXPECT_CALL(*sharing_service,
               SendMessageToDevice(testing::Eq(device_guid), testing::_,
                                   testing::_, testing::_));
 
-  CreateTab(/*started_from_arc=*/false);
-
-  content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
-  std::vector<mojom::IntentHandlerInfoPtr> handlers;
-  std::vector<std::unique_ptr<syncer::DeviceInfo>> devices;
-
-  devices.push_back(std::make_unique<syncer::DeviceInfo>(
-      device_guid, "device_name", "chrome_version", "user_agent",
-      sync_pb::SyncEnums_DeviceType_TYPE_PHONE, "device_id",
-      base::SysInfo::HardwareInfo(),
-      /*last_updated_timestamp=*/base::Time::Now(),
-      /*send_tab_to_self_receiving_enabled=*/false,
-      /*sharing_info=*/base::nullopt));
-
   OnIntentPickerClosedForTesting(
       rvh->GetProcess()->GetID(), rvh->GetRoutingID(), GURL("tel:0123456789"),
       /*safe_to_bypass_ui=*/true, std::move(handlers), std::move(devices),
@@ -996,4 +1022,28 @@
       apps::IntentPickerCloseReason::OPEN_APP, /*should_persist=*/false);
 }
 
+TEST_F(ArcExternalProtocolDialogTestUtils, TestDialogWithoutAppsWithDevices) {
+  CreateTab(/*started_from_arc=*/false);
+
+  MockSharingService* sharing_service = CreateSharingService();
+  content::RenderViewHost* rvh = web_contents()->GetRenderViewHost();
+  std::vector<std::unique_ptr<syncer::DeviceInfo>> devices;
+  devices.push_back(CreateSharingDevice("device_guid"));
+
+  EXPECT_CALL(*sharing_service, GetDeviceCandidates(testing::_))
+      .WillOnce(testing::Return(testing::ByMove(std::move(devices))));
+
+  base::RunLoop run_loop;
+  ClickToCallUiController::GetOrCreateFromWebContents(web_contents())
+      ->set_on_dialog_shown_closure_for_testing(run_loop.QuitClosure());
+
+  ASSERT_TRUE(arc::RunArcExternalProtocolDialog(
+      GURL("tel:12341234"), /*initiating_origin=*/base::nullopt,
+      rvh->GetProcess()->GetID(), rvh->GetRoutingID(), ui::PAGE_TRANSITION_LINK,
+      /*has_user_gesture=*/true));
+
+  // Wait until the bubble is visible.
+  run_loop.Run();
+}
+
 }  // namespace arc
diff --git a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
index d84ee23..a95b21b 100644
--- a/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
+++ b/chrome/browser/chromeos/login/existing_user_controller_browsertest.cc
@@ -1147,8 +1147,9 @@
   EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls());
 
   test::OobeJS().ExpectVisiblePath({"tpm-error-message"});
-  test::OobeJS().ExpectVisiblePath({"reboot-button"});
-  test::OobeJS().Evaluate("document.getElementById('reboot-button').click()");
+  test::OobeJS().ExpectVisiblePath({"tpm-restart-button"});
+  test::OobeJS().Evaluate(
+      "document.getElementById('tpm-restart-button').click()");
 
   EXPECT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls());
 }
diff --git a/chrome/browser/extensions/BUILD.gn b/chrome/browser/extensions/BUILD.gn
index d6dbacb4..0b6767c 100644
--- a/chrome/browser/extensions/BUILD.gn
+++ b/chrome/browser/extensions/BUILD.gn
@@ -410,6 +410,8 @@
     "api/webrtc_desktop_capture_private/webrtc_desktop_capture_private_api.h",
     "api/webrtc_logging_private/webrtc_logging_private_api.cc",
     "api/webrtc_logging_private/webrtc_logging_private_api.h",
+    "api/webstore_private/extension_install_status.cc",
+    "api/webstore_private/extension_install_status.h",
     "api/webstore_private/webstore_private_api.cc",
     "api/webstore_private/webstore_private_api.h",
     "app_data_migrator.cc",
diff --git a/chrome/browser/extensions/api/webstore_private/extension_install_status.cc b/chrome/browser/extensions/api/webstore_private/extension_install_status.cc
new file mode 100644
index 0000000..cb534d1
--- /dev/null
+++ b/chrome/browser/extensions/api/webstore_private/extension_install_status.cc
@@ -0,0 +1,74 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/webstore_private/extension_install_status.h"
+
+#include "base/memory/scoped_refptr.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/pref_names.h"
+#include "components/crx_file/id_util.h"
+#include "components/prefs/pref_service.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/extension_urls.h"
+#include "extensions/common/manifest_constants.h"
+
+namespace extensions {
+
+ExtensionInstallStatus GetWebstoreExtensionInstallStatus(
+    const ExtensionId& extension_id,
+    Profile* profile) {
+  DCHECK(crx_file::id_util::IdIsValid(extension_id));
+
+  ExtensionRegistry* registry = ExtensionRegistry::Get(profile);
+  if (registry->enabled_extensions().Contains(extension_id))
+    return kEnabled;
+
+  if (registry->terminated_extensions().Contains(extension_id))
+    return kTerminated;
+
+  if (registry->blacklisted_extensions().Contains(extension_id))
+    return kBlacklisted;
+
+  ExtensionManagement* extension_management =
+      ExtensionManagementFactory::GetForBrowserContext(profile);
+  ExtensionManagement::InstallationMode mode =
+      extension_management->GetInstallationMode(
+          extension_id, extension_urls::GetDefaultWebstoreUpdateUrl().spec());
+
+  // If an installed extension is disabled due to policy, returns
+  // kBlockedByPolicy, kCanRequest or kRequestPending instead of kDisabled.
+  // By doing so, user can still request an installed and policy blocked
+  // extension.
+  if (mode == ExtensionManagement::INSTALLATION_FORCED ||
+      mode == ExtensionManagement::INSTALLATION_RECOMMENDED ||
+      mode == ExtensionManagement::INSTALLATION_ALLOWED) {
+    if (registry->disabled_extensions().Contains(extension_id))
+      return kDisabled;
+    return kInstallable;
+  }
+
+  // The ability to request extension installs is not available if the extension
+  // request policy is disabled
+  if (!profile->GetPrefs()->GetBoolean(prefs::kCloudExtensionRequestEnabled))
+    return kBlockedByPolicy;
+
+  if (extension_management->IsInstallationExplicitlyBlocked(extension_id))
+    return kBlockedByPolicy;
+
+  const auto pending_list =
+      profile->GetPrefs()->GetList(prefs::kCloudExtensionRequestIds)->GetList();
+  if (std::any_of(pending_list.begin(), pending_list.end(),
+                  [&extension_id](const base::Value& pending_id) {
+                    return pending_id.GetString() == extension_id;
+                  })) {
+    return kRequestPending;
+  }
+
+  return kCanRequest;
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/api/webstore_private/extension_install_status.h b/chrome/browser/extensions/api/webstore_private/extension_install_status.h
new file mode 100644
index 0000000..0e7285d
--- /dev/null
+++ b/chrome/browser/extensions/api/webstore_private/extension_install_status.h
@@ -0,0 +1,41 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_API_WEBSTORE_PRIVATE_EXTENSION_INSTALL_STATUS_H_
+#define CHROME_BROWSER_EXTENSIONS_API_WEBSTORE_PRIVATE_EXTENSION_INSTALL_STATUS_H_
+
+#include "extensions/common/extension_id.h"
+
+class Profile;
+
+namespace extensions {
+
+enum ExtensionInstallStatus {
+  // Extension is blocked by policy but can be requested.
+  kCanRequest,
+  // Extension install request has been sent and is waiting to be reviewed.
+  kRequestPending,
+  // Extension is blocked by policy and can not be requested.
+  kBlockedByPolicy,
+  // Extension is not installed and has not not been blocked by policy.
+  kInstallable,
+  // Extension has been installed and it's enabled.
+  kEnabled,
+  // Extension has been installed but it's disabled and not blocked by policy.
+  kDisabled,
+  // Extension has been installed but it's terminated.
+  kTerminated,
+  // Extension is blacklisted.
+  kBlacklisted
+};
+
+// Returns the Extension install status for an Chrome web store extension with
+// |extension_id| in |profile|.
+ExtensionInstallStatus GetWebstoreExtensionInstallStatus(
+    const ExtensionId& extension_id,
+    Profile* profile);
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_API_WEBSTORE_PRIVATE_EXTENSION_INSTALL_STATUS_H_
diff --git a/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc b/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc
new file mode 100644
index 0000000..cb503edc
--- /dev/null
+++ b/chrome/browser/extensions/api/webstore_private/extension_install_status_unittest.cc
@@ -0,0 +1,212 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/api/webstore_private/extension_install_status.h"
+
+#include <vector>
+
+#include "base/json/json_reader.h"
+#include "base/macros.h"
+#include "base/strings/stringprintf.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "components/sync_preferences/testing_pref_service_syncable.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/browser/pref_names.h"
+#include "extensions/common/extension_builder.h"
+
+namespace extensions {
+namespace {
+constexpr char kExtensionId[] = "abcdefghijklmnopabcdefghijklmnop";
+constexpr char kExtensionSettingsWithUpdateUrlBlocking[] = R"({
+  "update_url:https://clients2.google.com/service/update2/crx": {
+    "installation_mode": "blocked"
+  }
+})";
+
+constexpr char kExtensionSettingsWithWildcardBlocking[] = R"({
+  "*": {
+    "installation_mode": "blocked"
+  }
+})";
+
+constexpr char kExtensionSettingsWithIdBlocked[] = R"({
+  "abcdefghijklmnopabcdefghijklmnop": {
+    "installation_mode": "blocked"
+  }
+})";
+
+constexpr char kExtensionSettingsWithIdAllowed[] = R"({
+  "abcdefghijklmnopabcdefghijklmnop": {
+    "installation_mode": "allowed"
+  }
+})";
+}  // namespace
+
+class ExtensionInstallStatusTest : public BrowserWithTestWindowTest {
+ public:
+  ExtensionInstallStatusTest() = default;
+
+  std::string GenerateArgs(const char* id) {
+    return base::StringPrintf(R"(["%s"])", id);
+  }
+
+  scoped_refptr<const Extension> CreateExtension(const ExtensionId& id) {
+    return ExtensionBuilder("extension").SetID(id).Build();
+  }
+
+  void SetExtensionSettings(const std::string& settings_string) {
+    base::Optional<base::Value> settings =
+        base::JSONReader::Read(settings_string);
+    ASSERT_TRUE(settings);
+    SetPolicy(pref_names::kExtensionManagement,
+              base::Value::ToUniquePtrValue(std::move(*settings)));
+  }
+
+  void SetPolicy(const std::string& pref_name,
+                 std::unique_ptr<base::Value> value) {
+    profile()->GetTestingPrefService()->SetManagedPref(pref_name,
+                                                       std::move(value));
+  }
+
+  void AddExtensionsToPendingList(const std::vector<ExtensionId>& ids) {
+    base::Value::ListStorage id_values;
+    for (const auto& id : ids)
+      id_values.push_back(base::Value(id));
+    profile()->GetTestingPrefService()->SetUserPref(
+        prefs::kCloudExtensionRequestIds,
+        std::make_unique<base::Value>(std::move(id_values)));
+  }
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(ExtensionInstallStatusTest);
+};
+
+TEST_F(ExtensionInstallStatusTest, ExtensionEnabled) {
+  ExtensionRegistry::Get(profile())->AddEnabled(CreateExtension(kExtensionId));
+  EXPECT_EQ(ExtensionInstallStatus::kEnabled,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionDisabled) {
+  ExtensionRegistry::Get(profile())->AddDisabled(CreateExtension(kExtensionId));
+  EXPECT_EQ(ExtensionInstallStatus::kDisabled,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionInstalledButDisabledByPolicy) {
+  ExtensionRegistry::Get(profile())->AddDisabled(CreateExtension(kExtensionId));
+  SetExtensionSettings(kExtensionSettingsWithIdBlocked);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionTerminated) {
+  ExtensionRegistry::Get(profile())->AddTerminated(
+      CreateExtension(kExtensionId));
+  EXPECT_EQ(ExtensionInstallStatus::kTerminated,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlacklisted) {
+  ExtensionRegistry::Get(profile())->AddBlacklisted(
+      CreateExtension(kExtensionId));
+  EXPECT_EQ(ExtensionInstallStatus::kBlacklisted,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionAllowed) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlockedByUpdateUrl) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetExtensionSettings(kExtensionSettingsWithUpdateUrlBlocking);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlockedByWildcard) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetExtensionSettings(kExtensionSettingsWithWildcardBlocking);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlockedById) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetExtensionSettings(kExtensionSettingsWithIdBlocked);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest,
+       ExtensionBlockByUpdateUrlWithRequestEnabled) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  SetExtensionSettings(kExtensionSettingsWithUpdateUrlBlocking);
+  EXPECT_EQ(ExtensionInstallStatus::kCanRequest,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlockByWildcardWithRequestEnabled) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  SetExtensionSettings(kExtensionSettingsWithWildcardBlocking);
+  EXPECT_EQ(ExtensionInstallStatus::kCanRequest,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, ExtensionBlockByIdWithRequestEnabled) {
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  // An extension that is blocked by its ID can't be requested anymore.
+  SetExtensionSettings(kExtensionSettingsWithIdBlocked);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, PendingExtenisonIsWaitingToBeReviewed) {
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  std::vector<ExtensionId> ids = {kExtensionId};
+  AddExtensionsToPendingList(ids);
+
+  // The extension is blocked by wildcard and pending approval.
+  SetExtensionSettings(kExtensionSettingsWithWildcardBlocking);
+  EXPECT_EQ(ExtensionInstallStatus::kRequestPending,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, PendingExtenisonIsApproved) {
+  // Extension is approved but not installed, returns as INSTALLABLE.
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  std::vector<ExtensionId> ids = {kExtensionId};
+  SetExtensionSettings(kExtensionSettingsWithIdAllowed);
+  EXPECT_EQ(ExtensionInstallStatus::kInstallable,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+TEST_F(ExtensionInstallStatusTest, PendingExtenisonIsRejected) {
+  // Extension is rejected, it should be moved from the pending list soon.
+  SetPolicy(prefs::kCloudExtensionRequestEnabled,
+            std::make_unique<base::Value>(true));
+  std::vector<ExtensionId> ids = {kExtensionId};
+  SetExtensionSettings(kExtensionSettingsWithIdBlocked);
+  EXPECT_EQ(ExtensionInstallStatus::kBlockedByPolicy,
+            GetWebstoreExtensionInstallStatus(kExtensionId, profile()));
+}
+
+}  // namespace extensions
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
index 3e74afd..5c68984 100644
--- a/chrome/browser/extensions/extension_management.cc
+++ b/chrome/browser/extensions/extension_management.cc
@@ -116,14 +116,21 @@
 
 ExtensionManagement::InstallationMode ExtensionManagement::GetInstallationMode(
     const Extension* extension) const {
+  std::string update_url;
+  if (extension->manifest()->GetString(manifest_keys::kUpdateURL, &update_url))
+    return GetInstallationMode(extension->id(), update_url);
+  return GetInstallationMode(extension->id(), std::string());
+}
+
+ExtensionManagement::InstallationMode ExtensionManagement::GetInstallationMode(
+    const ExtensionId& extension_id,
+    const std::string& update_url) const {
   // Check per-extension installation mode setting first.
-  auto iter_id = settings_by_id_.find(extension->id());
+  auto iter_id = settings_by_id_.find(extension_id);
   if (iter_id != settings_by_id_.end())
     return iter_id->second->installation_mode;
-  std::string update_url;
   // Check per-update-url installation mode setting.
-  if (extension->manifest()->GetString(manifest_keys::kUpdateURL,
-                                       &update_url)) {
+  if (!update_url.empty()) {
     auto iter_update_url = settings_by_update_url_.find(update_url);
     if (iter_update_url != settings_by_update_url_.end())
       return iter_update_url->second->installation_mode;
diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h
index 3d4b8a79..731bc04 100644
--- a/chrome/browser/extensions/extension_management.h
+++ b/chrome/browser/extensions/extension_management.h
@@ -96,6 +96,11 @@
   // Returns installation mode for an extension.
   InstallationMode GetInstallationMode(const Extension* extension) const;
 
+  // Returns installation mode for an extension with id |id| and updated with
+  // |update_url|.
+  InstallationMode GetInstallationMode(const ExtensionId& extension_id,
+                                       const std::string& update_url) const;
+
   // Returns the force install list, in format specified by
   // ExternalPolicyLoader::AddExtension().
   std::unique_ptr<base::DictionaryValue> GetForceInstallList() const;
diff --git a/chrome/browser/extensions/test_extension_system.cc b/chrome/browser/extensions/test_extension_system.cc
index 0561e92..a751ab5 100644
--- a/chrome/browser/extensions/test_extension_system.cc
+++ b/chrome/browser/extensions/test_extension_system.cc
@@ -33,7 +33,6 @@
 #include "extensions/browser/value_store/test_value_store_factory.h"
 #include "extensions/browser/value_store/testing_value_store.h"
 #include "services/data_decoder/data_decoder_service.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
 #if defined(OS_CHROMEOS)
 #include "components/user_manager/user_manager.h"
 #endif
diff --git a/chrome/browser/extensions/updater/extension_updater_unittest.cc b/chrome/browser/extensions/updater/extension_updater_unittest.cc
index abbf45b8..4872984 100644
--- a/chrome/browser/extensions/updater/extension_updater_unittest.cc
+++ b/chrome/browser/extensions/updater/extension_updater_unittest.cc
@@ -75,7 +75,6 @@
 #include "net/base/escape.h"
 #include "net/base/load_flags.h"
 #include "net/http/http_request_headers.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
 #include "services/network/public/cpp/simple_url_loader.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "services/network/test/test_url_loader_factory.h"
diff --git a/chrome/browser/image_decoder.cc b/chrome/browser/image_decoder.cc
index 586648c..191ff6a 100644
--- a/chrome/browser/image_decoder.cc
+++ b/chrome/browser/image_decoder.cc
@@ -13,10 +13,8 @@
 #include "build/build_config.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/system_connector.h"
 #include "ipc/ipc_channel.h"
 #include "services/data_decoder/public/cpp/decode_image.h"
-#include "services/service_manager/public/cpp/connector.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/geometry/size.h"
 
@@ -38,12 +36,6 @@
     fail_callback.Run(request_id);
 }
 
-void BindToBrowserConnector(
-    mojo::PendingReceiver<service_manager::mojom::Connector> receiver) {
-  DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
-  content::GetSystemConnector()->BindConnectorReceiver(std::move(receiver));
-}
-
 void RunDecodeCallbackOnTaskRunner(
     data_decoder::mojom::ImageDecoder::DecodeImageCallback callback,
     scoped_refptr<base::SequencedTaskRunner> task_runner,
@@ -60,15 +52,8 @@
     scoped_refptr<base::SequencedTaskRunner> callback_task_runner) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
-  mojo::PendingReceiver<service_manager::mojom::Connector> connector_receiver;
-  std::unique_ptr<service_manager::Connector> connector =
-      service_manager::Connector::Create(&connector_receiver);
-  base::PostTask(
-      FROM_HERE, {content::BrowserThread::UI},
-      base::BindOnce(&BindToBrowserConnector, std::move(connector_receiver)));
-
-  data_decoder::DecodeImage(
-      connector.get(), image_data, codec, shrink_to_fit, kMaxImageSizeInBytes,
+  data_decoder::DecodeImageIsolated(
+      image_data, codec, shrink_to_fit, kMaxImageSizeInBytes,
       desired_image_frame_size,
       base::BindOnce(&RunDecodeCallbackOnTaskRunner, std::move(callback),
                      std::move(callback_task_runner)));
diff --git a/chrome/browser/importer/in_process_importer_bridge.cc b/chrome/browser/importer/in_process_importer_bridge.cc
index bf1731f..75663d9 100644
--- a/chrome/browser/importer/in_process_importer_bridge.cc
+++ b/chrome/browser/importer/in_process_importer_bridge.cc
@@ -21,6 +21,7 @@
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_parser.h"
 #include "components/search_engines/template_url_prepopulate_data.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #include "ui/base/l10n/l10n_util.h"
 
 #include <iterator>
@@ -92,53 +93,95 @@
   return std::make_unique<TemplateURL>(data);
 }
 
-// Parses the OpenSearch XML files in |xml_files| and populates |search_engines|
-// with the resulting TemplateURLs.
-void ParseSearchEnginesFromFirefoxXMLData(
-    const std::vector<std::string>& xml_data,
-    TemplateURLService::OwnedTemplateURLVector* search_engines) {
-  DCHECK(search_engines);
+}  // namespace
 
-  std::map<std::string, std::unique_ptr<TemplateURL>> search_engine_for_url;
-  // The first XML file represents the default search engine in Firefox 3, so we
-  // need to keep it on top of the list.
-  auto default_turl = search_engine_for_url.end();
-  for (auto xml_iter = xml_data.begin(); xml_iter != xml_data.end();
-       ++xml_iter) {
-    std::unique_ptr<TemplateURL> template_url = TemplateURLParser::Parse(
-        UIThreadSearchTermsData(), xml_iter->data(), xml_iter->length(),
-        base::BindRepeating(&FirefoxURLParameterFilter));
-    if (template_url) {
-      auto iter = search_engine_for_url.find(template_url->url());
-      if (iter == search_engine_for_url.end()) {
-        iter = search_engine_for_url
-                   .insert(std::make_pair(template_url->url(),
-                                          std::move(template_url)))
-                   .first;
-      } else {
-        // We have already found a search engine with the same URL.  We give
-        // priority to the latest one found, as GetSearchEnginesXMLFiles()
-        // returns a vector with first Firefox default search engines and then
-        // the user's ones.  We want to give priority to the user ones.
-        iter->second = std::move(template_url);
-      }
-      if (default_turl == search_engine_for_url.end())
-        default_turl = iter;
+// When the Bridge receives the search engines XML data via
+// SetFirefoxSearchEnginesXMLData(), this class is responsible for managing the
+// asynchronous TemplateURL parsing operations. The Bridge generally operates
+// synchronously, so this class manages the state and notifies the bridge when
+// parsing is done.
+class InProcessImporterBridge::SearchEnginesParser {
+ public:
+  // Starts parsing the |search_engines_xml_data| and will notify |bridge|
+  // upon completion.
+  SearchEnginesParser(const std::vector<std::string>& search_engines_xml_data,
+                      InProcessImporterBridge* bridge)
+      : bridge_(bridge), data_decoder_(new data_decoder::DataDecoder()) {
+    DCHECK(!search_engines_xml_data.empty());
+    StartParse(search_engines_xml_data);
+  }
+
+  // Returns true if all the data have been parsed, false if the operation
+  // is still ongoing.
+  bool is_done() const { return is_done_; }
+
+  // If InProcessImporterBridge::NotifyEnded() is called before is_done()
+  // returns true, NotifyEnded() sets this flag so that it can be called back
+  // to complete the import.
+  void set_notify_ended_on_completion() { notify_ended_on_completion_ = true; }
+
+ private:
+  void StartParse(const std::vector<std::string>& search_engines_xml_data) {
+    const auto& last_item = search_engines_xml_data.end() - 1;
+    TemplateURLParser::ParameterFilter param_filter =
+        base::BindRepeating(&FirefoxURLParameterFilter);
+
+    for (auto it = search_engines_xml_data.begin();
+         it != search_engines_xml_data.end(); ++it) {
+      // Because all TemplateURLParser are handled by the same data_decoder_
+      // instance, the results will be returned FIFO.
+      // The SearchEnginesParser is owned by the InProcessImporterBridge,
+      // which is not deleted until NotifyEnded() is called, so using Unretained
+      // is safe.
+      TemplateURLParser::ParseWithDataDecoder(
+          data_decoder_.get(), &search_terms_data_, *it, param_filter,
+          base::BindOnce(&SearchEnginesParser::OnURLParsed,
+                         base::Unretained(this), it == last_item));
     }
   }
 
-  // Put the results in the |search_engines| vector.
-  for (auto t_iter = search_engine_for_url.begin();
-       t_iter != search_engine_for_url.end(); ++t_iter) {
-    if (t_iter == default_turl)
-      search_engines->insert(search_engines->begin(),
-                             std::move(default_turl->second));
-    else
-      search_engines->push_back(std::move(t_iter->second));
-  }
-}
+  void OnURLParsed(bool is_last_item, std::unique_ptr<TemplateURL> url) {
+    if (url)
+      parsed_urls_.push_back(std::move(url));
 
-}  // namespace
+    if (is_last_item)
+      FinishParsing();
+  }
+
+  void FinishParsing() {
+    is_done_ = true;
+
+    // Shut down the DataDecoder.
+    data_decoder_.reset();
+
+    bridge_->WriteSearchEngines(std::move(parsed_urls_));
+
+    if (notify_ended_on_completion_)
+      bridge_->NotifyEnded();
+  }
+
+  // Storage for the URLs. These are stored in the same order as the original
+  // |search_engines_xml_data|.
+  TemplateURLService::OwnedTemplateURLVector parsed_urls_;
+
+  InProcessImporterBridge* bridge_;  // Weak, owns this.
+
+  // Set to true if the last search engine has been parsed.
+  bool is_done_ = false;
+
+  // Set to true if the ImporterBridge has been NotifyEnded() already but was
+  // waiting on this class to finish the import.
+  bool notify_ended_on_completion_ = false;
+
+  // Parameter for TemplateURLParser.
+  UIThreadSearchTermsData search_terms_data_;
+
+  // The DataDecoder instance that is shared amongst all the TemplateURLs being
+  // parsed.
+  std::unique_ptr<data_decoder::DataDecoder> data_decoder_;
+
+  DISALLOW_COPY_AND_ASSIGN(SearchEnginesParser);
+};
 
 InProcessImporterBridge::InProcessImporterBridge(
     ProfileWriter* writer,
@@ -186,10 +229,10 @@
 
 void InProcessImporterBridge::SetFirefoxSearchEnginesXMLData(
     const std::vector<std::string>& search_engine_data) {
-  TemplateURLService::OwnedTemplateURLVector search_engines;
-  ParseSearchEnginesFromFirefoxXMLData(search_engine_data, &search_engines);
-
-  writer_->AddKeywords(std::move(search_engines), true);
+  if (!search_engine_data.empty()) {
+    // SearchEnginesParser will call back the Bridge back when it is done.
+    search_engines_.reset(new SearchEnginesParser(search_engine_data, this));
+  }
 }
 
 void InProcessImporterBridge::SetPasswordForm(
@@ -228,6 +271,13 @@
 }
 
 void InProcessImporterBridge::NotifyEnded() {
+  // If there are search engines to parse but parsing them is not yet complete,
+  // arrange to be called back when they are done.
+  if (search_engines_ && !search_engines_->is_done()) {
+    search_engines_->set_notify_ended_on_completion();
+    return;
+  }
+
   host_->NotifyImportEnded();
 }
 
@@ -236,3 +286,35 @@
 }
 
 InProcessImporterBridge::~InProcessImporterBridge() {}
+
+void InProcessImporterBridge::WriteSearchEngines(
+    TemplateURL::OwnedTemplateURLVector template_urls) {
+  std::map<std::string, std::unique_ptr<TemplateURL>> search_engine_for_url;
+  for (auto& template_url : template_urls) {
+    std::string key = template_url->url();
+    // Give priority to the latest template URL that is found, as
+    // GetSearchEnginesXMLFiles() returns a vector with first Firefox default
+    // search engines and then the user's ones. The user ones should take
+    // precedence.
+    search_engine_for_url[key] = std::move(template_url);
+  }
+  // The first URL represents the default search engine in Firefox 3, so we
+  // need to keep it on top of the list.
+  auto default_turl = search_engine_for_url.end();
+  if (!template_urls.empty())
+    default_turl = search_engine_for_url.find(template_urls[0]->url());
+
+  // Put the results in the |search_engines| vector.
+  TemplateURLService::OwnedTemplateURLVector search_engines;
+  for (auto it = search_engine_for_url.begin();
+       it != search_engine_for_url.end(); ++it) {
+    if (it == default_turl) {
+      search_engines.insert(search_engines.begin(),
+                            std::move(default_turl->second));
+    } else {
+      search_engines.push_back(std::move(it->second));
+    }
+  }
+
+  writer_->AddKeywords(std::move(search_engines), true);
+}
diff --git a/chrome/browser/importer/in_process_importer_bridge.h b/chrome/browser/importer/in_process_importer_bridge.h
index b77d9ea7..59ae221 100644
--- a/chrome/browser/importer/in_process_importer_bridge.h
+++ b/chrome/browser/importer/in_process_importer_bridge.h
@@ -60,10 +60,19 @@
   // End ImporterBridge implementation.
 
  private:
+  class SearchEnginesParser;
+  friend class SearchEnginesParser;
+
   ~InProcessImporterBridge() override;
 
+  // Called by the SearchEnginesParser when all the search engines have been
+  // parsed. The |template_urls| vector is in the same sort order that was
+  // passed to SetFirefoxSearchEnginesXMLData().
+  void WriteSearchEngines(TemplateURL::OwnedTemplateURLVector template_urls);
+
   ProfileWriter* const writer_;  // weak
   const base::WeakPtr<ExternalProcessImporterHost> host_;
+  std::unique_ptr<SearchEnginesParser> search_engines_;
 
   DISALLOW_COPY_AND_ASSIGN(InProcessImporterBridge);
 };
diff --git a/chrome/browser/media/encrypted_media_browsertest.cc b/chrome/browser/media/encrypted_media_browsertest.cc
index 9e1a8db..73077e6 100644
--- a/chrome/browser/media/encrypted_media_browsertest.cc
+++ b/chrome/browser/media/encrypted_media_browsertest.cc
@@ -722,11 +722,7 @@
     return;
   }
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   TestSimplePlayback("bear-640x360-v_frag-cbcs.mp4");
-#else
-  DVLOG(0) << "Skipping test; 'cbcs' decryption not supported.";
-#endif
 }
 
 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest,
@@ -861,9 +857,7 @@
   // 'cbcs' decryption is only supported on CDM 10 or later as long as
   // the appropriate buildflag is enabled.
   std::string expected_result =
-      GetCdmInterfaceVersion() >= 10 && BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
-          ? media::kEnded
-          : media::kError;
+      GetCdmInterfaceVersion() >= 10 ? media::kEnded : media::kError;
   RunEncryptedMediaTest(kDefaultEmePlayer, "bear-640x360-v_frag-cbcs.mp4",
                         kExternalClearKeyDecryptOnlyKeySystem, SrcType::MSE,
                         kNoSessionToLoad, false, PlayCount::ONCE,
@@ -894,9 +888,7 @@
   // 'cbcs' decryption is only supported on CDM 10 or later as long as
   // the appropriate buildflag is enabled.
   std::string expected_result =
-      GetCdmInterfaceVersion() >= 10 && BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
-          ? media::kEnded
-          : media::kError;
+      GetCdmInterfaceVersion() >= 10 ? media::kEnded : media::kError;
   RunEncryptedMediaMultipleFileTest(
       kExternalClearKeyKeySystem, "bear-640x360-v_frag-cbcs.mp4",
       "bear-640x360-a_frag-cbcs.mp4", expected_result);
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
index 425d08e1..1886b03 100644
--- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc
+++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -349,12 +349,13 @@
     base::Value::Type::INTEGER},
   { key::kSafeBrowsingRealTimeLookupEnabled,
     prefs::kSafeBrowsingRealTimeLookupEnabled,
-    base::Value::Type::BOOLEAN
-  },
+    base::Value::Type::BOOLEAN },
   { key::kSendFilesForMalwareCheck,
     prefs::kSafeBrowsingSendFilesForMalwareCheck,
-    base::Value::Type::INTEGER
-  },
+    base::Value::Type::INTEGER },
+  { key::kWebComponentsV0Enabled,
+    prefs::kWebComponentsV0Enabled,
+    base::Value::Type::BOOLEAN },
 #if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
   { key::kAuthNegotiateDelegateByKdcPolicy,
     prefs::kAuthNegotiateDelegateByKdcPolicy,
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc
index 623a3bd6..0a7ba48 100644
--- a/chrome/browser/prefs/browser_prefs.cc
+++ b/chrome/browser/prefs/browser_prefs.cc
@@ -85,6 +85,7 @@
 #include "chrome/common/buildflags.h"
 #include "chrome/common/pref_names.h"
 #include "chrome/common/secure_origin_whitelist.h"
+#include "chrome/common/web_components_prefs.h"
 #include "components/autofill/core/common/autofill_prefs.h"
 #include "components/browsing_data/core/pref_names.h"
 #include "components/certificate_transparency/pref_names.h"
@@ -835,6 +836,7 @@
   syncer::SyncPrefs::RegisterProfilePrefs(registry);
   syncer::PerUserTopicRegistrationManager::RegisterProfilePrefs(registry);
   syncer::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry);
+  web_components_prefs::RegisterProfilePrefs(registry);
   TemplateURLPrepopulateData::RegisterProfilePrefs(registry);
   translate::TranslatePrefs::RegisterProfilePrefs(registry);
   ZeroSuggestProvider::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index 257bad6..23388db1 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -151,7 +151,6 @@
 #include "content/public/browser/render_process_host.h"
 #include "content/public/browser/shared_cors_origin_access_list.h"
 #include "content/public/browser/storage_partition.h"
-#include "content/public/browser/system_connector.h"
 #include "content/public/browser/url_data_source.h"
 #include "content/public/common/content_constants.h"
 #include "extensions/buildflags/buildflags.h"
@@ -159,7 +158,7 @@
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
 #include "ppapi/buildflags/buildflags.h"
 #include "printing/buildflags/buildflags.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #include "services/identity/identity_service.h"
 #include "services/network/public/cpp/features.h"
 #include "services/preferences/public/cpp/in_process_service_factory.h"
diff --git a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js
index f5d87a9..8c254ed 100644
--- a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js
+++ b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_overview_tracing_ui.js
@@ -179,9 +179,10 @@
   var lastTimestamp = 0;
   var totalEnergy = 0;
   var index = events.getFirstEvent();
-  while (index > 0) {
+  while (index >= 0) {
     var timestamp = events.events[index][1];
-    totalEnergy = events.events[index][2] * (timestamp - lastTimestamp);
+    totalEnergy +=
+        events.events[index][2] * (timestamp - lastTimestamp) * 0.001;
     lastTimestamp = timestamp;
     index = events.getNextEvent(index, 1 /* direction */);
   }
@@ -304,9 +305,7 @@
     var attributes = Object.assign({}, attributesTemplate);
     attributes.color = modelColors.get(models[i]);
     bands.addChartSources(
-        [new Events(
-            models[i].system.memory, 9 /* kCpuTemperature */,
-            9 /* kCpuFrequency */)],
+        [new Events(models[i].system.memory, 9 /* kCpuFrequency */)],
         true /* smooth */, attributes);
   }
 }
@@ -332,14 +331,38 @@
     var attributes = Object.assign({}, attributesTemplate);
     attributes.color = modelColors.get(models[i]);
     bands.addChartSources(
-        [new Events(
-            models[i].system.memory, 8 /* kCpuTemperature */,
-            8 /* kCpuTemperature */)],
+        [new Events(models[i].system.memory, 8 /* kCpuTemperature */)],
         true /* smooth */, attributes);
   }
 }
 
 /**
+ * Creates view that shows GPU frequency.
+ *
+ * @param {HTMLElement} parent container for the newly created view.
+ * @param {number} resolution scale of the chart in microseconds per pixel.
+ * @param {number} duration length of the chart in microseconds.
+ */
+function addGPUFrequencyView(parent, resolution, duration) {
+  // Range from 300MHz to 1GHz
+  // 14MHz  1 pixel resolution
+  var bands = createChart(
+      parent, 'GPU Frequency' /* title */, resolution, duration,
+      50 /* height */, 4 /* gridLinesCount */);
+  var attributesTemplate =
+      Object.assign({}, valueAttributes[7 /* kGpuFrequency */]);
+  attributesTemplate.minValue = 300;   // Mhz
+  attributesTemplate.maxValue = 1000;  // Mhz
+  for (i = 0; i < models.length; i++) {
+    var attributes = Object.assign({}, attributesTemplate);
+    attributes.color = modelColors.get(models[i]);
+    bands.addChartSources(
+        [new Events(models[i].system.memory, 7 /* kGpuFrequency */)],
+        false /* smooth */, attributes);
+  }
+}
+
+/**
  * Creates view that shows FPS change for app commits or swaps for Chrome
  * updates.
  *
@@ -463,6 +486,7 @@
 
   addCPUFrequencyView(parent, resolution, duration);
   addCPUTempView(parent, resolution, duration);
+  addGPUFrequencyView(parent, resolution, duration);
   addFPSView(parent, resolution, duration, true /* appView */);
   addDeltaView(parent, resolution, duration, true /* appView */);
   addFPSView(parent, resolution, duration, false /* appView */);
diff --git a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_tracing_ui.js b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_tracing_ui.js
index 7464e63..36c4dc11 100644
--- a/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_tracing_ui.js
+++ b/chrome/browser/resources/chromeos/arc_graphics_tracing/arc_tracing_ui.js
@@ -1222,8 +1222,8 @@
   showTooltipForEvent_(event, svg, height, width) {
     svg.setAttribute('height', height + 'px');
     svg.setAttribute('width', width + 'px');
-    this.tooltip.style.left = event.clientX + 'px';
-    this.tooltip.style.top = event.clientY + 'px';
+    this.tooltip.style.left = event.pageX + 'px';
+    this.tooltip.style.top = event.pageY + 'px';
     this.tooltip.style.height = height + 'px';
     this.tooltip.style.width = width + 'px';
     this.tooltip.classList.add('active');
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb
index 216dfcb..9ebd06b7 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_gu.xtb
@@ -153,6 +153,7 @@
 <translation id="2063539687800151747">શિલાલેખ</translation>
 <translation id="207477615537953741">સિમેન્ટિક્સ બંધ</translation>
 <translation id="2086961585857038472">આગલો શબ્દ</translation>
+<translation id="2087981446621639008">વર્ણનની સૂચિની વિગત</translation>
 <translation id="2089387485033699258">gu</translation>
 <translation id="2091933974477985526">ફેરફાર કારી શકાય તેવો ટેક્સ્ટ એરિયા</translation>
 <translation id="2100350898815792233">તમામ વિરામચિહ્ન</translation>
@@ -193,6 +194,7 @@
 <translation id="2416512023405990736">અનચેક કરેલુંં ચેકબોક્સ</translation>
 <translation id="2417569100218200841">કન્ટેન્ટ માહિતી</translation>
 <translation id="2417948780551741035">અંતિમ નોંધ</translation>
+<translation id="2419852971200420169">વર્ણનની સૂચિ</translation>
 <translation id="2421113964388408478">ડિલીટ કરો</translation>
 <translation id="2422937916923936891">મેનૂ આઇટમ ચેક બૉક્સ</translation>
 <translation id="2428534162001909979">આદેશ મેનૂઝ</translation>
@@ -371,6 +373,7 @@
 <translation id="3497063866483065785">{COUNT,plural, =1{પ્રશ્નાર્થ ચિહ્ન}one{# પ્રશ્નાર્થ ચિહ્ન}other{# પ્રશ્નાર્થ ચિહ્ન}}</translation>
 <translation id="3514822174137761109">{COUNT,plural, =1{કૅરેટ}one{# કૅરેટ}other{# કૅરેટ}}</translation>
 <translation id="352577523970648069">સંપાદનયોગ્ય ટેક્સ્ટ ફીલ્ડ</translation>
+<translation id="3538907380453898475">વર્ણનની સૂચિ</translation>
 <translation id="3549141990712742152"><ph name="TEXT" /> કાપો.</translation>
 <translation id="3549680091535286226">હંગામી રૂપે સ્પીચને રોકવા માટે 2 આંગળીઓથી ટૅપ કરો</translation>
 <translation id="3568702578574425662"><ph name="NAME" />, ચેકબૉક્સ ચેક કરેલુંં નથી</translation>
@@ -779,6 +782,7 @@
 <translation id="6378394210114975876">આછો જાંબલી</translation>
 <translation id="6385591741672306837">કૉલમ</translation>
 <translation id="6387719785439924554">aside</translation>
+<translation id="6393014464788431702">ઇવેન્ટના બધા ફિલ્ટર બંધ કરો</translation>
 <translation id="6411426777058107714">કોઈ પાછલું રેડિયો બટન નથી.</translation>
 <translation id="6414968628640960377">પાછલાં ભિન્ન ઘટક.</translation>
 <translation id="6417265370957905582">Google સહાયક</translation>
@@ -914,6 +918,7 @@
 <translation id="7332592614823088566"><ph name="ROWTOTAL" /> માંથી <ph name="ROWINDEX" /> પંક્તિ, <ph name="COLTOTAL" /> માંથી <ph name="COLINDEX" /> કૉલમ</translation>
 <translation id="7336596009609913925">તેમાં પૉપઅપ છે</translation>
 <translation id="7356165926712028380">8 ડોટ બ્રેઇલ પર સ્વિચ કરો</translation>
+<translation id="7356610683936413584">વર્ણનની સૂચિની વિગત</translation>
 <translation id="7362871137496673139">કોઈ પાછલું લેવલ 2 શીર્ષક નથી.</translation>
 <translation id="7370432716629432284">{COUNT,plural, =1{એમ્પરસેંડ}one{# એમ્પરસેંડ્સ}other{# એમ્પરસેંડ્સ}}</translation>
 <translation id="737396357417333429">clk</translation>
@@ -1092,6 +1097,7 @@
 <translation id="8096975275316362544">મિન્ટ ક્રીમ</translation>
 <translation id="8098587210054821856">સ્લેટ ગ્રે</translation>
 <translation id="8110647606445335195">ARIA સ્થળ નિશાનીઓ નથી.</translation>
+<translation id="8121539003537428024">ઇવેન્ટના બધા ફિલ્ટર ચાલુ કરો</translation>
 <translation id="812886159861361726"><ph name="FILE_NAME" />નું ડાઉનલોડ રોક્યું</translation>
 <translation id="8138880386467279117">ટચ કરો</translation>
 <translation id="8153880621934657047">કોષ્ટકની અંદર નથી</translation>
diff --git a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
index 642b1a39..29f242f 100644
--- a/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
+++ b/chrome/browser/resources/chromeos/chromevox/strings/chromevox_strings_mr.xtb
@@ -11,7 +11,7 @@
 <translation id="1025074108959230262">रोचक मोड अक्षम</translation>
 <translation id="1031961866430398710">नंतर</translation>
 <translation id="1038643060055067718">रेखा:</translation>
-<translation id="1038795173450935438">पेजवरील आयटम मधून पुढे जाण्याकरिता, Search + Right किंवा परत मागे जाण्यासाठी Search + Left अॅरो दाबा. पुढील ओळीवर जाण्यासाठी, Search + Down अॅरो दाबा. मागील ओळीवर जाण्यासाठी Search + Up अॅरो वापरा. तुम्ही क्लिक करू इच्छित आयटमवर पोहचल्यास, Search + Space दाबा.</translation>
+<translation id="1038795173450935438">पेजवरील आयटम मधून पुढे जाण्याकरिता, Search + Right किंवा परत मागे जाण्यासाठी Search + Left ॲरो दाबा. पुढील ओळीवर जाण्यासाठी, Search + Down ॲरो दाबा. मागील ओळीवर जाण्यासाठी Search + Up ॲरो वापरा. तुम्ही क्लिक करू इच्छित आयटमवर पोहचल्यास, Search + Space दाबा.</translation>
 <translation id="1044777062731150180">कोणतेही शीर्षलेख नाहीत</translation>
 <translation id="106222400312645156">rwhdr</translation>
 <translation id="1065552602950927991">चुकीचे इनपुट</translation>
@@ -159,7 +159,7 @@
 <translation id="2100350898815792233">सर्व विरामचिन्‍ह</translation>
 <translation id="2110480898214777136">पेज, डायलॉग किंवा अन्य कंटेनरमध्ये सुरूवातीपासून समाप्तीपर्यंत किंवा समाप्तीपासून सुरूवातीपर्यंत पूर्ण करा</translation>
 <translation id="2119965627982867824">spnbtn</translation>
-<translation id="2121067395472282800">अॅक्सेस की:<ph name="KEY" /></translation>
+<translation id="2121067395472282800">ॲक्सेस की:<ph name="KEY" /></translation>
 <translation id="2126597928985245619">या आयटमसाठी कोणताही मजकूर उपलब्ध नाही</translation>
 <translation id="2127747486437921899">तिरपे</translation>
 <translation id="2138345533858834403">स्क्रीनच्या वर ChromeVox पॅनेलमध्ये रिफ्रेश करता येण्यासारख्या ब्रेल डिस्प्लेच्या आउटपुटचे सिम्युलेशन करेल.</translation>
@@ -398,14 +398,14 @@
 <translation id="3716845769494773620">एकाधिक रेखा</translation>
 <translation id="3731746171184829332">मागील मथळा नाही.</translation>
 <translation id="3735039640698208086">ऑडिओ प्ले करताना...</translation>
-<translation id="3755561384917041694">कृपया विस्तारित ब्रेल आदेश वापरण्यासाठी स्टेटस ट्रेच्या अॅक्सेसिबिलिटीमधून स्क्रीनवरील कीबोर्ड चालू करा.</translation>
+<translation id="3755561384917041694">कृपया विस्तारित ब्रेल आदेश वापरण्यासाठी स्टेटस ट्रेच्या ॲक्सेसिबिलिटीमधून स्क्रीनवरील कीबोर्ड चालू करा.</translation>
 <translation id="3762198587642264450">वर्तमान पंक्तीच्या शेवटी जा</translation>
 <translation id="3777255250339039212">h1</translation>
 <translation id="3777742246909257041">पांढरा शुभ्र</translation>
 <translation id="3781428340399460090">गडद गुलाबी</translation>
 <translation id="3783725005098956899">लॉग दाखवा</translation>
 <translation id="3793710123303304873">डायलॉगच्या बाहेर पडले.</translation>
-<translation id="3801735343383419236">अॉटोकंप्लीशन सूची</translation>
+<translation id="3801735343383419236">ऑटोकंप्लीशन सूची</translation>
 <translation id="3810838688059735925">व्हिडिओ</translation>
 <translation id="3813387282697781382">फिकट लाल</translation>
 <translation id="3816633764618089385">पुढील माध्यम</translation>
@@ -675,14 +675,14 @@
 <translation id="5597933780944041114">पुढील मथळा नाही.</translation>
 <translation id="5598905979683743333"><ph name="NAME" />, रेडिओ बटण निवडले नाही</translation>
 <translation id="5601172225407283979">डीफॉल्ट क्रिया करा</translation>
-<translation id="5608798115546226984">अॉटोकंप्लीशन इनलाइन</translation>
+<translation id="5608798115546226984">ऑटोकंप्लीशन इनलाइन</translation>
 <translation id="561939826962581046">time</translation>
 <translation id="5623778242535476823">rbtn</translation>
 <translation id="5623842676595125836">लॉग</translation>
 <translation id="5628125749885014029">h4</translation>
 <translation id="5632083598315326067">ग्राफिक्स चिन्ह</translation>
 <translation id="5637871198229500030">मागील सारणी नाही.</translation>
-<translation id="5653397561111110475">Chromebook टच स्क्रीन अॅक्सेसिबिलिटी वैशिष्ट्ये वापरा</translation>
+<translation id="5653397561111110475">Chromebook टच स्क्रीन ॲक्सेसिबिलिटी वैशिष्ट्ये वापरा</translation>
 <translation id="5655682562155942719">जाण्याचे आदेश</translation>
 <translation id="56637627897541303">मजकूर क्षेत्र</translation>
 <translation id="5678161956734658133">mled</translation>
@@ -864,7 +864,7 @@
 <translation id="7043850226734279132">गडद खाकी</translation>
 <translation id="7048792632163898198">पुढील काही शॉर्टकट ChromeVox कमांड नाहीत, परंतु तरीही Chromeमधून बरेच काही मिळवण्यासाठी ते खूप उपयुक्त आहेत.
 बटणे आणि लिंक यांसारख्या कृती करण्यायोग्य आयटममधून पुढे नेव्हिगेट करण्यासाठी, Tab की, दाबा. मागे नेव्हिगेट करण्यासाठी, Shift+Tab दाबा.
-Chrome ब्राउझरच्या, ऑम्निबॉक्स असेही म्हणवल्या जाणाऱ्या, अॅड्रेस बॉक्समध्ये अॅक्सेस करण्यासाठी Control + L दाबा.
+Chrome ब्राउझरच्या, ऑम्निबॉक्स असेही म्हणवल्या जाणाऱ्या, ॲड्रेस बॉक्समध्ये ॲक्सेस करण्यासाठी Control + L दाबा.
 नवीन टॅब उघडण्यासाठी आणि त्यामध्ये आपोआप जाण्यासाठी, Control+T दाबा. तुमचा कर्सर ऑम्निबॉक्समध्ये असेल.
 टॅब बंद करण्यासाठी, Control+W दाबा.
 उघडलेल्या टॅबमध्ये पुढे जाण्यासाठी, Control+Tab वापरा.
@@ -1124,14 +1124,14 @@
 <translation id="8345569862449483843">{COUNT,plural, =1{पाउंड}other{# पाउंड चिन्हे}}</translation>
 <translation id="8374154622594089836">महिना</translation>
 <translation id="8378855320830505539">प्रदेश</translation>
-<translation id="8382679411218029383">अॉटोकंप्लीशन इनलाइन आणि सूची</translation>
+<translation id="8382679411218029383">ऑटोकंप्लीशन इनलाइन आणि सूची</translation>
 <translation id="8428603554127842284">स्तर <ph name="DEPTH" /></translation>
 <translation id="842922884199979200">पुढील स्‍तर 3 मथळा नाही.</translation>
 <translation id="8430049249787218991">mnubr</translation>
 <translation id="844681116543532394">मागील चेकबॉक्‍स नाही.</translation>
 <translation id="8446884382197647889">अधिक जाणून घ्या</translation>
 <translation id="8455868257606149352">कमाल <ph name="X" /></translation>
-<translation id="84575901236241018">अॅक्सेस की आहे, <ph name="KEY" /></translation>
+<translation id="84575901236241018">ॲक्सेस की आहे, <ph name="KEY" /></translation>
 <translation id="8463645336674919227">व्याकरणाची चूक सुधारलेली नाही</translation>
 <translation id="847154984256717791">व्यस्त</translation>
 <translation id="8476408756881832830">ChromeVox बोलत असताना प्लेबॅकला विराम द्या</translation>
diff --git a/chrome/browser/resources/chromeos/login/screen_tpm_error.css b/chrome/browser/resources/chromeos/login/screen_tpm_error.css
index 78b70c6..397b9131 100644
--- a/chrome/browser/resources/chromeos/login/screen_tpm_error.css
+++ b/chrome/browser/resources/chromeos/login/screen_tpm_error.css
@@ -2,15 +2,6 @@
  * Use of this source code is governed by a BSD-style license that can be
  * found in the LICENSE file. */
 
-#tpm-error-message {
-  min-width: 650px;
+oobe-dialog > iron-icon.warning {
+  --iron-icon-fill-color: rgb(219, 68, 55);
 }
-
-#oobe.tpm-error-message #step-logo {
-  z-index: 1;
-}
-
-#tpm-error-message-controls {
-  text-align: end;
-}
-
diff --git a/chrome/browser/resources/chromeos/login/screen_tpm_error.html b/chrome/browser/resources/chromeos/login/screen_tpm_error.html
index 26fc939..8add5b4 100644
--- a/chrome/browser/resources/chromeos/login/screen_tpm_error.html
+++ b/chrome/browser/resources/chromeos/login/screen_tpm_error.html
@@ -1,15 +1,14 @@
 <div id="tpm-error-message" class="step faded hidden" hidden>
-  <div class="step-contents">
-    <div class="error-header">
-      <img alt class="error-icon" src="chrome://theme/IDR_FATAL_ERROR">
-      <div id="tpm-error-title" class="error-title"
-          i18n-content="errorTpmFailureTitle"></div>
+  <oobe-dialog id="tpm-error-dialog" role="dialog" has-buttons>
+    <iron-icon slot="oobe-icon" icon="cr:warning" class="warning">
+    </iron-icon>
+    <h1 slot="title" i18n-content="errorTpmFailureTitle"></h1>
+    <div slot="subtitle" i18n-content="errorTpmFailureReboot"></div>
+    <div slot="bottom-buttons" class="layout horizontal end-justified">
+      <oobe-text-button id="tpm-restart-button" inverse>
+        <div id="tmp-error-reboot-text"
+            i18n-content="errorTpmFailureRebootButton"></div>
+      </oobe-text-button>
     </div>
-    <div class="error-body">
-      <div id="tmp-error-reboot-text" class="error-message-paragraph"
-          i18n-content="errorTpmFailureReboot"></div>
-      <div id="tpm-error-message-controls"
-          class="error-message-paragraph"></div>
-    </div>
-  </div>
+  </oobe-dialog>
 </div>
diff --git a/chrome/browser/resources/chromeos/login/screen_tpm_error.js b/chrome/browser/resources/chromeos/login/screen_tpm_error.js
index 04c6615..de226f4 100644
--- a/chrome/browser/resources/chromeos/login/screen_tpm_error.js
+++ b/chrome/browser/resources/chromeos/login/screen_tpm_error.js
@@ -10,19 +10,11 @@
   return {
     EXTERNAL_API: ['show'],
 
-    /**
-     * Buttons in oobe wizard's button strip.
-     * @type {array} Array of Buttons.
-     */
-    get buttons() {
-      var rebootButton = this.ownerDocument.createElement('button');
-      rebootButton.id = 'reboot-button';
-      rebootButton.textContent =
-          loadTimeData.getString('errorTpmFailureRebootButton');
-      rebootButton.addEventListener('click', function() {
+    /** @override */
+    decorate: function() {
+      $('tpm-restart-button').addEventListener('click', function(e) {
         chrome.send('rebootSystem');
       });
-      return [rebootButton];
     },
 
     /**
diff --git a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
index 1b305f8..0e2bd6f3 100644
--- a/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc
@@ -1890,6 +1890,31 @@
       browser()->tab_strip_model()->GetActiveWebContents()));
 }
 
+// Tests that commands work in a subframe triggered interstitial if a different
+// interstitial has been shown previously on the same webcontents. Regression
+// test for crbug.com/1021334
+IN_PROC_BROWSER_TEST_P(
+    SafeBrowsingBlockingPageBrowserTestWithCommittedSBInterstitials,
+    IframeProceedAfterMainFrameInterstitial) {
+  // Navigate to a site that triggers an interstitial due to a bad main frame
+  // URL.
+  ui_test_utils::NavigateToURL(browser(),
+                               GURL(kChromeUISafeBrowsingMatchMalwareUrl));
+  EXPECT_TRUE(WaitForReady(browser()));
+  EXPECT_TRUE(ClickAndWaitForDetach("primary-button"));
+  AssertNoInterstitial(false);
+
+  // Navigate to a site that triggers an interstitial due to a bad iframe.
+  GURL url = SetupThreatIframeWarningAndNavigate();
+
+  // Commands should work.
+  EXPECT_TRUE(ClickAndWaitForDetach("proceed-link"));
+  AssertNoInterstitial(true);  // Assert the interstitial is gone
+
+  EXPECT_EQ(url,
+            browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
+}
+
 INSTANTIATE_TEST_SUITE_P(
     SafeBrowsingBlockingPageBrowserTestWithThreatTypeAndIsolationSetting,
     SafeBrowsingBlockingPageBrowserTestWithCommittedSBInterstitials,
diff --git a/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.cc b/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.cc
index 529b8720..38b8128 100644
--- a/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.cc
+++ b/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.cc
@@ -18,7 +18,7 @@
 
 SafeBrowsingSubresourceTabHelper::~SafeBrowsingSubresourceTabHelper() {}
 
-void SafeBrowsingSubresourceTabHelper::DidFinishNavigation(
+void SafeBrowsingSubresourceTabHelper::ReadyToCommitNavigation(
     content::NavigationHandle* navigation_handle) {
   if (navigation_handle->GetNetErrorCode() == net::ERR_BLOCKED_BY_CLIENT) {
     safe_browsing::SafeBrowsingService* service =
diff --git a/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.h b/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.h
index e06683fe0..039b8877d 100644
--- a/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.h
+++ b/chrome/browser/safe_browsing/safe_browsing_subresource_tab_helper.h
@@ -22,7 +22,7 @@
   ~SafeBrowsingSubresourceTabHelper() override;
 
   // WebContentsObserver::
-  void DidFinishNavigation(
+  void ReadyToCommitNavigation(
       content::NavigationHandle* navigation_handle) override;
 
  private:
diff --git a/chrome/browser/search_engines/template_url_parser_unittest.cc b/chrome/browser/search_engines/template_url_parser_unittest.cc
index 41bc92c..f831670 100644
--- a/chrome/browser/search_engines/template_url_parser_unittest.cc
+++ b/chrome/browser/search_engines/template_url_parser_unittest.cc
@@ -10,9 +10,11 @@
 #include "base/path_service.h"
 #include "base/stl_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/test/task_environment.h"
 #include "chrome/common/chrome_paths.h"
 #include "components/search_engines/search_terms_data.h"
 #include "components/search_engines/template_url.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using base::ASCIIToUTF16;
@@ -39,15 +41,25 @@
   void ParseFile(const std::string& file_name,
                  const TemplateURLParser::ParameterFilter& filter);
 
+  void ParseString(const std::string& data,
+                   const TemplateURLParser::ParameterFilter& filter);
+
   // ParseFile parses the results into this template_url.
   std::unique_ptr<TemplateURL> template_url_;
 
  private:
+  void OnTemplateURLParsed(base::OnceClosure quit_closure,
+                           std::unique_ptr<TemplateURL> template_url) {
+    template_url_ = std::move(template_url);
+    std::move(quit_closure).Run();
+  }
+
   base::FilePath osdd_dir_;
+  base::test::TaskEnvironment task_environment_;
+  data_decoder::test::InProcessDataDecoder data_decoder_;
 };
 
-TemplateURLParserTest::TemplateURLParserTest() {
-}
+TemplateURLParserTest::TemplateURLParserTest() {}
 
 TemplateURLParserTest::~TemplateURLParserTest() {
 }
@@ -66,8 +78,19 @@
 
   std::string contents;
   ASSERT_TRUE(base::ReadFileToString(full_path, &contents));
-  template_url_ = TemplateURLParser::Parse(SearchTermsData(), contents.data(),
-                                           contents.length(), filter);
+  ParseString(contents, filter);
+}
+
+void TemplateURLParserTest::ParseString(
+    const std::string& data,
+    const TemplateURLParser::ParameterFilter& filter) {
+  base::RunLoop run_loop;
+  SearchTermsData search_terms_data;
+  TemplateURLParser::Parse(
+      &search_terms_data, data, filter,
+      base::BindOnce(&TemplateURLParserTest::OnTemplateURLParsed,
+                     base::Unretained(this), run_loop.QuitClosure()));
+  run_loop.Run();
 }
 
 // Actual tests ---------------------------------------------------------------
@@ -249,6 +272,5 @@
     </Url>
     </OpenSearchDescription>
   )";
-  TemplateURLParser::Parse(SearchTermsData(), char_data, base::size(char_data),
-                           filter);
+  ParseString(char_data, filter);
 }
diff --git a/chrome/browser/search_engines/template_url_service_test_util.h b/chrome/browser/search_engines/template_url_service_test_util.h
index 8cc6aa662..4897f954 100644
--- a/chrome/browser/search_engines/template_url_service_test_util.h
+++ b/chrome/browser/search_engines/template_url_service_test_util.h
@@ -15,6 +15,7 @@
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_data.h"
 #include "components/search_engines/template_url_service_observer.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 
 class KeywordWebDataService;
 class TemplateURLService;
@@ -83,6 +84,7 @@
   base::string16 search_term_;
   scoped_refptr<KeywordWebDataService> web_data_service_;
   std::unique_ptr<TemplateURLService> model_;
+  data_decoder::test::InProcessDataDecoder data_decoder_;
 
   DISALLOW_COPY_AND_ASSIGN(TemplateURLServiceTestUtil);
 };
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index e10078b6..5319bd85a 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -940,6 +940,11 @@
       "global_media_controls/media_dialog_delegate.h",
       "global_media_controls/media_notification_container_impl.h",
       "global_media_controls/media_notification_container_observer.h",
+      "global_media_controls/media_notification_service.cc",
+      "global_media_controls/media_notification_service.h",
+      "global_media_controls/media_notification_service_factory.cc",
+      "global_media_controls/media_notification_service_factory.h",
+      "global_media_controls/media_notification_service_observer.h",
       "global_media_controls/media_toolbar_button_controller.cc",
       "global_media_controls/media_toolbar_button_controller.h",
       "global_media_controls/media_toolbar_button_controller_delegate.cc",
diff --git a/chrome/browser/ui/app_list/search/search_controller.cc b/chrome/browser/ui/app_list/search/search_controller.cc
index 742bc82a..71f9139 100644
--- a/chrome/browser/ui/app_list/search/search_controller.cc
+++ b/chrome/browser/ui/app_list/search/search_controller.cc
@@ -78,14 +78,11 @@
 
 SearchController::~SearchController() {}
 
-void SearchController::InitializeRankers(
-    service_manager::Connector* connector) {
+void SearchController::InitializeRankers() {
   std::unique_ptr<SearchResultRanker> ranker =
       std::make_unique<SearchResultRanker>(
-          profile_,
-          HistoryServiceFactory::GetForProfile(
-              profile_, ServiceAccessType::EXPLICIT_ACCESS),
-          connector);
+          profile_, HistoryServiceFactory::GetForProfile(
+                        profile_, ServiceAccessType::EXPLICIT_ACCESS));
   ranker->InitializeRankers(this);
   mixer_->SetNonAppSearchResultRanker(std::move(ranker));
 }
diff --git a/chrome/browser/ui/app_list/search/search_controller.h b/chrome/browser/ui/app_list/search/search_controller.h
index d55c09b..4d88179c 100644
--- a/chrome/browser/ui/app_list/search/search_controller.h
+++ b/chrome/browser/ui/app_list/search/search_controller.h
@@ -21,10 +21,6 @@
 class ChromeSearchResult;
 class Profile;
 
-namespace service_manager {
-class Connector;
-}
-
 namespace app_list {
 
 class SearchResultRanker;
@@ -41,7 +37,7 @@
                    Profile* profile);
   virtual ~SearchController();
 
-  void InitializeRankers(service_manager::Connector* connector);
+  void InitializeRankers();
 
   void Start(const base::string16& query);
   void ViewClosing();
diff --git a/chrome/browser/ui/app_list/search/search_controller_factory.cc b/chrome/browser/ui/app_list/search/search_controller_factory.cc
index 7fde4bf..b4f0cbc 100644
--- a/chrome/browser/ui/app_list/search/search_controller_factory.cc
+++ b/chrome/browser/ui/app_list/search/search_controller_factory.cc
@@ -32,7 +32,6 @@
 #include "chrome/common/chrome_features.h"
 #include "chrome/common/chrome_switches.h"
 #include "components/arc/arc_util.h"
-#include "content/public/browser/system_connector.h"
 
 namespace app_list {
 
@@ -78,7 +77,7 @@
                                          profile);
 
   // Set up rankers for search results.
-  controller->InitializeRankers(content::GetSystemConnector());
+  controller->InitializeRankers();
 
   // Add mixer groups. There are four main groups: answer card, apps
   // and omnibox. Each group has a "soft" maximum number of results. However, if
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc
index 93141a2..ba6f8357 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc
@@ -17,13 +17,6 @@
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_predictor.pb.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker.pb.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_config.pb.h"
-#include "content/public/browser/system_connector.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
 
 namespace app_list {
 namespace {
@@ -236,51 +229,34 @@
 }
 
 std::unique_ptr<JsonConfigConverter> JsonConfigConverter::Convert(
-    service_manager::Connector* connector,
     const std::string& json_string,
     const std::string& model_identifier,
     OnConfigLoadedCallback callback) {
   // We don't use make_unique because the ctor is private.
-  std::unique_ptr<JsonConfigConverter> converter(
-      new JsonConfigConverter(connector));
+  std::unique_ptr<JsonConfigConverter> converter(new JsonConfigConverter());
   converter->Start(json_string, model_identifier, std::move(callback));
   return converter;
 }
 
-JsonConfigConverter::JsonConfigConverter(service_manager::Connector* connector)
-    : connector_(connector) {}
-JsonConfigConverter::~JsonConfigConverter() {}
+JsonConfigConverter::JsonConfigConverter() = default;
+
+JsonConfigConverter::~JsonConfigConverter() = default;
 
 void JsonConfigConverter::Start(const std::string& json_string,
                                 const std::string& model_identifier,
                                 OnConfigLoadedCallback callback) {
-  DCHECK(connector_);
-  connector_->Connect(data_decoder::mojom::kServiceName,
-                      json_parser_.BindNewPipeAndPassReceiver());
-  json_parser_.set_disconnect_handler(base::BindOnce(
-      [](JsonConfigConverter* const converter) {
-        converter->json_parser_.reset();
-      },
-      base::Unretained(this)));
-
-  json_parser_->Parse(
-      json_string,
-      base::BindOnce(&JsonConfigConverter::OnJsonParsed, base::Unretained(this),
-                     std::move(callback), model_identifier));
+  data_decoder::DataDecoder::ParseJsonIsolated(
+      json_string, base::BindOnce(&JsonConfigConverter::OnJsonParsed,
+                                  weak_ptr_factory_.GetWeakPtr(),
+                                  std::move(callback), model_identifier));
 }
 
 void JsonConfigConverter::OnJsonParsed(
     OnConfigLoadedCallback callback,
     const std::string& model_identifier,
-    const base::Optional<base::Value> json_data,
-    const base::Optional<std::string>& error) {
-  // Unbind the data decoder service remote. This makes it safe to keep a
-  // JsonConfigConverter object alive for eg. the lifetime of Chrome without a
-  // significant memory cost.
-  json_parser_.reset();
-
+    data_decoder::DataDecoder::ValueOrError result) {
   RecurrenceRankerConfigProto proto;
-  if (json_data && ConvertRecurrenceRanker(&json_data.value(), &proto)) {
+  if (result.value && ConvertRecurrenceRanker(&result.value.value(), &proto)) {
     LogJsonConfigConversionStatus(model_identifier,
                                   JsonConfigConversionStatus::kSuccess);
     std::move(callback).Run(std::move(proto));
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.h b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.h
index 0a56c508..0fb4e4f 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.h
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.h
@@ -9,19 +9,10 @@
 #include <string>
 
 #include "base/macros.h"
+#include "base/memory/weak_ptr.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_predictor.h"
 #include "chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_config.pb.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/json_parser.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace base {
-class Value;
-}
-
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
+#include "services/data_decoder/public/cpp/data_decoder.h"
 
 namespace app_list {
 
@@ -44,8 +35,7 @@
 
   // Creates a JsonConfigConverter and starts a conversion of |json_string|.
   // |model_identifier| is used for metrics reporting in the same way as
-  // RecurrenceRanker's |model_identifier|. |connector| can be
-  // content::GetSystemConnector() in most cases.
+  // RecurrenceRanker's |model_identifier|.
   //
   // The provided |callback| will be called with the resulting proto if the
   // conversion succeeded, or base::nullopt if the parsing or conversion failed.
@@ -54,7 +44,6 @@
   //
   // |callback| should destroy the returned JsonConfigConverter instance.
   static std::unique_ptr<JsonConfigConverter> Convert(
-      service_manager::Connector* connector,
       const std::string& json_string,
       const std::string& model_identifier,
       OnConfigLoadedCallback callback);
@@ -62,9 +51,7 @@
   ~JsonConfigConverter();
 
  private:
-  // The constructor requires a connector to interact with the parsing service.
-  // For most use cases, this can be content::GetSystemConnector().
-  explicit JsonConfigConverter(service_manager::Connector* connector);
+  JsonConfigConverter();
 
   // Performs a conversion.
   void Start(const std::string& json_string,
@@ -74,13 +61,10 @@
   // Callback for parser.
   void OnJsonParsed(OnConfigLoadedCallback callback,
                     const std::string& model_identifier,
-                    const base::Optional<base::Value> json_data,
-                    const base::Optional<std::string>& error);
+                    data_decoder::DataDecoder::ValueOrError result);
 
   std::string model_identifier_;
-
-  service_manager::Connector* connector_;
-  mojo::Remote<data_decoder::mojom::JsonParser> json_parser_;
+  base::WeakPtrFactory<JsonConfigConverter> weak_ptr_factory_{this};
 };
 
 }  // namespace app_list
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util_unittest.cc b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util_unittest.cc
index a96e32f..8a63d14 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util_unittest.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util_unittest.cc
@@ -9,9 +9,7 @@
 
 #include "base/strings/string_util.h"
 #include "base/test/task_environment.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -29,7 +27,7 @@
     base::RunLoop run_loop;
     done_callback_ = run_loop.QuitClosure();
     converter_ = JsonConfigConverter::Convert(
-        dd_service_.connector(), json, "",
+        json, "",
         base::BindOnce(
             [](RecurrenceRankerJsonConfigConverterTest* fixture,
                base::Optional<RecurrenceRankerConfigProto> config) {
@@ -56,7 +54,7 @@
   std::unique_ptr<JsonConfigConverter> converter_;
 
   base::Closure done_callback_;
-  data_decoder::TestDataDecoderService dd_service_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
   base::Optional<RecurrenceRankerConfigProto> config_;
 };
 
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
index 718e621..a55b0d2 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.cc
@@ -159,12 +159,8 @@
 }  // namespace
 
 SearchResultRanker::SearchResultRanker(Profile* profile,
-                                       history::HistoryService* history_service,
-                                       service_manager::Connector* connector)
-    : connector_(connector),
-      history_service_observer_(this),
-      profile_(profile),
-      weak_factory_(this) {
+                                       history::HistoryService* history_service)
+    : history_service_observer_(this), profile_(profile), weak_factory_(this) {
   DCHECK(profile);
   DCHECK(history_service);
   history_service_observer_.Add(history_service);
@@ -220,7 +216,7 @@
       const std::string config_json = GetFieldTrialParamValueByFeature(
           app_list_features::kEnableQueryBasedMixedTypesRanker, "config");
       query_mixed_config_converter_ = JsonConfigConverter::Convert(
-          connector_, config_json, "QueryBasedMixedTypes",
+          config_json, "QueryBasedMixedTypes",
           base::BindOnce(
               [](SearchResultRanker* ranker,
                  const RecurrenceRankerConfigProto& default_config,
@@ -267,7 +263,7 @@
         app_list_features::kEnableZeroStateMixedTypesRanker, "config");
 
     zero_state_config_converter_ = JsonConfigConverter::Convert(
-        connector_, config_json, "ZeroStateGroups",
+        config_json, "ZeroStateGroups",
         base::BindOnce(
             [](SearchResultRanker* ranker,
                const RecurrenceRankerConfigProto& default_config,
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
index d955450b..f43ab7b 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker.h
@@ -43,8 +43,7 @@
                            history::HistoryServiceObserver {
  public:
   SearchResultRanker(Profile* profile,
-                     history::HistoryService* history_service,
-                     service_manager::Connector* connector);
+                     history::HistoryService* history_service);
   ~SearchResultRanker() override;
 
   // Performs all setup of rankers. This is separated from the constructor for
@@ -176,7 +175,6 @@
   std::unique_ptr<RecurrenceRanker> app_ranker_;
   std::map<std::string, float> app_ranks_;
 
-  service_manager::Connector* connector_;
   // Testing-only closure to inform tests once a JSON config has been parsed.
   base::OnceClosure json_config_parsed_for_testing_;
 
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
index 09372f1..5bbd4a9 100644
--- a/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
+++ b/chrome/browser/ui/app_list/search/search_result_ranker/search_result_ranker_unittest.cc
@@ -37,7 +37,7 @@
 #include "components/history/core/test/history_service_test_util.h"
 #include "components/history/core/test/test_history_database.h"
 #include "content/public/test/browser_task_environment.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -170,9 +170,8 @@
   }
 
   std::unique_ptr<SearchResultRanker> MakeRanker() {
-    dd_service_ = std::make_unique<data_decoder::TestDataDecoderService>();
-    return std::make_unique<SearchResultRanker>(
-        profile_.get(), history_service_.get(), dd_service_->connector());
+    return std::make_unique<SearchResultRanker>(profile_.get(),
+                                                history_service_.get());
   }
 
   Mixer::SortedResults MakeSearchResults(const std::vector<std::string>& ids,
@@ -200,8 +199,7 @@
   std::list<TestSearchResult> test_search_results_;
 
   content::BrowserTaskEnvironment task_environment_;
-
-  std::unique_ptr<data_decoder::TestDataDecoderService> dd_service_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
 
   ScopedFeatureList scoped_feature_list_;
   ScopedTempDir temp_dir_;
@@ -534,9 +532,8 @@
 
   // Load a new ranker from disk and ensure |url_1| hasn't been retained.
   base::RunLoop new_run_loop;
-  dd_service_ = std::make_unique<data_decoder::TestDataDecoderService>();
-  auto new_ranker = std::make_unique<SearchResultRanker>(
-      profile_.get(), history_service(), dd_service_->connector());
+  auto new_ranker =
+      std::make_unique<SearchResultRanker>(profile_.get(), history_service());
   new_ranker->set_json_config_parsed_for_testing(new_run_loop.QuitClosure());
   new_ranker->InitializeRankers(MakeSearchController());
   new_run_loop.Run();
diff --git a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc
index 9c35f13..bb5c4dec 100644
--- a/chrome/browser/ui/ash/chrome_screenshot_grabber.cc
+++ b/chrome/browser/ui/ash/chrome_screenshot_grabber.cc
@@ -43,9 +43,7 @@
 #include "components/prefs/pref_service.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/system_connector.h"
 #include "services/data_decoder/public/cpp/decode_image.h"
-#include "services/service_manager/public/cpp/connector.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/base/clipboard/scoped_clipboard_writer.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -97,8 +95,7 @@
 
   // Decode the image in sandboxed process because |png_data| comes from
   // external storage.
-  data_decoder::DecodeImage(
-      content::GetSystemConnector(),
+  data_decoder::DecodeImageIsolated(
       std::vector<uint8_t>(png_data->data().begin(), png_data->data().end()),
       data_decoder::mojom::ImageCodec::DEFAULT, false,
       data_decoder::kDefaultMaxSizeInBytes, gfx::Size(),
@@ -510,8 +507,7 @@
 
   // Decode the image in sandboxed process becuase decode image_data comes from
   // external storage.
-  data_decoder::DecodeImage(
-      content::GetSystemConnector(),
+  data_decoder::DecodeImageIsolated(
       std::vector<uint8_t>(image_data.begin(), image_data.end()),
       data_decoder::mojom::ImageCodec::DEFAULT, false,
       data_decoder::kDefaultMaxSizeInBytes, gfx::Size(),
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index 3c39acb..0d4126c6 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -24,7 +24,6 @@
 #include "chrome/browser/ui/browser_window.h"
 #include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
 #include "chrome/browser/ui/views/frame/browser_view.h"
-#include "content/public/browser/data_decoder_service.h"
 #include "ui/aura/window.h"
 #include "url/gurl.h"
 
@@ -76,7 +75,3 @@
   return std::make_unique<ChromeScreenshotGrabber>();
 }
 
-mojo::Remote<data_decoder::mojom::DataDecoderService>
-ChromeShellDelegate::LaunchDataDecoder() {
-  return content::LaunchDataDecoder();
-}
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.h b/chrome/browser/ui/ash/chrome_shell_delegate.h
index 2d7311c..e20d66f8 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.h
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.h
@@ -19,8 +19,6 @@
   ash::AccessibilityDelegate* CreateAccessibilityDelegate() override;
   void OpenKeyboardShortcutHelpPage() const override;
   bool CanGoBack(gfx::NativeWindow window) const override;
-  mojo::Remote<data_decoder::mojom::DataDecoderService> LaunchDataDecoder()
-      override;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(ChromeShellDelegate);
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
index 508fabe..b94c079 100644
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller_browsertest.cc
@@ -2221,7 +2221,8 @@
 
 // Verify that the in-app shelf should be shown when the app icon receives
 // the accessibility focus.
-IN_PROC_BROWSER_TEST_F(HotseatShelfAppBrowserTest, EnableChromeVox) {
+// https://crbug.com/1020806 flaky.
+IN_PROC_BROWSER_TEST_F(HotseatShelfAppBrowserTest, DISABLED_EnableChromeVox) {
   ash::Shell::Get()->tablet_mode_controller()->SetEnabledForTest(true);
   chromeos::SpeechMonitor speech_monitor;
 
diff --git a/chrome/browser/ui/cocoa/first_run_dialog.mm b/chrome/browser/ui/cocoa/first_run_dialog.mm
index 0f4eeeab..34e1c95 100644
--- a/chrome/browser/ui/cocoa/first_run_dialog.mm
+++ b/chrome/browser/ui/cocoa/first_run_dialog.mm
@@ -24,7 +24,6 @@
 #include "chrome/common/chrome_switches.h"
 #include "chrome/common/url_constants.h"
 #include "content/public/common/content_switches.h"
-#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
 #include "ui/base/l10n/l10n_util_mac.h"
 #include "url/gurl.h"
 
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.cc b/chrome/browser/ui/global_media_controls/media_notification_service.cc
new file mode 100644
index 0000000..34efdb7
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.cc
@@ -0,0 +1,333 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
+
+#include "base/metrics/histogram_functions.h"
+#include "chrome/browser/media/router/media_router_feature.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_list.h"
+#include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_container_impl.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service_observer.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "components/media_message_center/media_notification_item.h"
+#include "components/media_message_center/media_notification_util.h"
+#include "components/media_message_center/media_session_notification_item.h"
+#include "content/public/browser/media_session.h"
+#include "media/base/media_switches.h"
+#include "services/media_session/public/mojom/constants.mojom.h"
+#include "services/media_session/public/mojom/media_session.mojom.h"
+#include "services/service_manager/public/cpp/connector.h"
+
+namespace {
+
+// Here we check to see if the WebContents is focused. Note that since Session
+// is a WebContentsObserver, we could in theory listen for
+// |OnWebContentsFocused()| and |OnWebContentsLostFocus()|. However, this won't
+// actually work since focusing the MediaDialogView causes the WebContents to
+// "lose focus", so we'd never be focused.
+bool IsWebContentsFocused(content::WebContents* web_contents) {
+  DCHECK(web_contents);
+  Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
+  if (!browser)
+    return false;
+
+  // If the given WebContents is not in the focused window, then it's not
+  // focused. Note that we know a Browser is focused because otherwise the user
+  // could not interact with the MediaDialogView.
+  if (BrowserList::GetInstance()->GetLastActive() != browser)
+    return false;
+
+  return browser->tab_strip_model()->GetActiveWebContents() == web_contents;
+}
+
+}  // anonymous namespace
+
+MediaNotificationService::Session::Session(
+    MediaNotificationService* owner,
+    const std::string& id,
+    std::unique_ptr<media_message_center::MediaSessionNotificationItem> item,
+    content::WebContents* web_contents)
+    : content::WebContentsObserver(web_contents),
+      owner_(owner),
+      id_(id),
+      item_(std::move(item)) {
+  DCHECK(owner_);
+  DCHECK(item_);
+}
+
+MediaNotificationService::Session::~Session() = default;
+
+void MediaNotificationService::Session::WebContentsDestroyed() {
+  // If the WebContents is destroyed, then we should just remove the item
+  // instead of freezing it.
+  owner_->RemoveItem(id_);
+}
+
+MediaNotificationService::MediaNotificationService(
+    Profile* profile,
+    service_manager::Connector* connector)
+    : connector_(connector) {
+  if (base::FeatureList::IsEnabled(media::kGlobalMediaControlsForCast) &&
+      media_router::MediaRouterEnabled(profile)) {
+    cast_notification_provider_ =
+        std::make_unique<CastMediaNotificationProvider>(
+            profile, this,
+            base::BindRepeating(
+                &MediaNotificationService::OnCastNotificationsChanged,
+                base::Unretained(this)));
+  }
+
+  // |connector_| can be null in tests.
+  if (!connector_)
+    return;
+
+  const base::UnguessableToken& source_id =
+      content::MediaSession::GetSourceId(profile);
+
+  // Connect to the controller manager so we can create media controllers for
+  // media sessions.
+  connector_->Connect(media_session::mojom::kServiceName,
+                      controller_manager_remote_.BindNewPipeAndPassReceiver());
+
+  // Connect to receive audio focus events.
+  connector_->Connect(media_session::mojom::kServiceName,
+                      audio_focus_remote_.BindNewPipeAndPassReceiver());
+  audio_focus_remote_->AddSourceObserver(
+      source_id, audio_focus_observer_receiver_.BindNewPipeAndPassRemote());
+
+  audio_focus_remote_->GetSourceFocusRequests(
+      source_id,
+      base::BindOnce(&MediaNotificationService::OnReceivedAudioFocusRequests,
+                     weak_ptr_factory_.GetWeakPtr()));
+}
+
+MediaNotificationService::~MediaNotificationService() {
+  for (auto container_pair : observed_containers_)
+    container_pair.second->RemoveObserver(this);
+}
+
+void MediaNotificationService::AddObserver(
+    MediaNotificationServiceObserver* observer) {
+  observers_.AddObserver(observer);
+}
+
+void MediaNotificationService::RemoveObserver(
+    MediaNotificationServiceObserver* observer) {
+  observers_.RemoveObserver(observer);
+}
+
+void MediaNotificationService::OnFocusGained(
+    media_session::mojom::AudioFocusRequestStatePtr session) {
+  const std::string id = session->request_id->ToString();
+
+  // If we have an existing unfrozen item then this is a duplicate call and
+  // we should ignore it.
+  auto it = sessions_.find(id);
+  if (it != sessions_.end() && !it->second.item()->frozen())
+    return;
+
+  mojo::Remote<media_session::mojom::MediaController> controller;
+
+  // |controller_manager_remote_| may be null in tests where connector is
+  // unavailable.
+  if (controller_manager_remote_) {
+    controller_manager_remote_->CreateMediaControllerForSession(
+        controller.BindNewPipeAndPassReceiver(), *session->request_id);
+  }
+
+  if (it != sessions_.end()) {
+    // If the notification was previously frozen then we should reset the
+    // controller because the mojo pipe would have been reset.
+    it->second.item()->SetController(std::move(controller),
+                                     std::move(session->session_info));
+    active_controllable_session_ids_.insert(id);
+    frozen_session_ids_.erase(id);
+    for (auto& observer : observers_)
+      observer.OnNotificationListChanged();
+  } else {
+    sessions_.emplace(
+        std::piecewise_construct, std::forward_as_tuple(id),
+        std::forward_as_tuple(
+            this, id,
+            std::make_unique<
+                media_message_center::MediaSessionNotificationItem>(
+                this, id, session->source_name.value_or(std::string()),
+                std::move(controller), std::move(session->session_info)),
+            content::MediaSession::GetWebContentsFromRequestId(
+                *session->request_id)));
+  }
+}
+
+void MediaNotificationService::OnFocusLost(
+    media_session::mojom::AudioFocusRequestStatePtr session) {
+  const std::string id = session->request_id->ToString();
+
+  auto it = sessions_.find(id);
+  if (it == sessions_.end())
+    return;
+
+  it->second.item()->Freeze();
+  active_controllable_session_ids_.erase(id);
+  frozen_session_ids_.insert(id);
+  for (auto& observer : observers_)
+    observer.OnNotificationListChanged();
+}
+
+void MediaNotificationService::ShowNotification(const std::string& id) {
+  active_controllable_session_ids_.insert(id);
+  for (auto& observer : observers_)
+    observer.OnNotificationListChanged();
+
+  if (!dialog_delegate_)
+    return;
+
+  base::WeakPtr<media_message_center::MediaNotificationItem> item =
+      GetNotificationItem(id);
+  MediaNotificationContainerImpl* container =
+      dialog_delegate_->ShowMediaSession(id, item);
+
+  // Observe the container for dismissal.
+  if (container) {
+    container->AddObserver(this);
+    observed_containers_[id] = container;
+  }
+}
+
+void MediaNotificationService::HideNotification(const std::string& id) {
+  active_controllable_session_ids_.erase(id);
+  frozen_session_ids_.erase(id);
+  for (auto& observer : observers_)
+    observer.OnNotificationListChanged();
+
+  if (!dialog_delegate_)
+    return;
+
+  dialog_delegate_->HideMediaSession(id);
+}
+
+scoped_refptr<base::SequencedTaskRunner>
+MediaNotificationService::GetTaskRunner() const {
+  return nullptr;
+}
+
+void MediaNotificationService::RemoveItem(const std::string& id) {
+  active_controllable_session_ids_.erase(id);
+  frozen_session_ids_.erase(id);
+  sessions_.erase(id);
+
+  for (auto& observer : observers_)
+    observer.OnNotificationListChanged();
+}
+
+void MediaNotificationService::LogMediaSessionActionButtonPressed(
+    const std::string& id) {
+  auto it = sessions_.find(id);
+  if (it == sessions_.end())
+    return;
+
+  content::WebContents* web_contents = it->second.web_contents();
+  if (!web_contents)
+    return;
+
+  base::UmaHistogramBoolean("Media.GlobalMediaControls.UserActionFocus",
+                            IsWebContentsFocused(web_contents));
+}
+
+void MediaNotificationService::OnContainerClicked(const std::string& id) {
+  auto it = sessions_.find(id);
+  if (it == sessions_.end())
+    return;
+
+  content::WebContents* web_contents = it->second.web_contents();
+  if (!web_contents)
+    return;
+
+  content::WebContentsDelegate* delegate = web_contents->GetDelegate();
+  if (!delegate)
+    return;
+
+  delegate->ActivateContents(web_contents);
+}
+
+void MediaNotificationService::OnContainerDismissed(const std::string& id) {
+  auto it = sessions_.find(id);
+  if (it != sessions_.end())
+    it->second.item()->Dismiss();
+}
+
+void MediaNotificationService::OnContainerDestroyed(const std::string& id) {
+  auto iter = observed_containers_.find(id);
+  DCHECK(iter != observed_containers_.end());
+
+  iter->second->RemoveObserver(this);
+  observed_containers_.erase(iter);
+}
+
+void MediaNotificationService::OnCastNotificationsChanged() {
+  for (auto& observer : observers_)
+    observer.OnNotificationListChanged();
+}
+
+void MediaNotificationService::SetDialogDelegate(
+    MediaDialogDelegate* delegate) {
+  DCHECK(!delegate || !dialog_delegate_);
+  dialog_delegate_ = delegate;
+
+  for (auto& observer : observers_)
+    observer.OnMediaDialogOpenedOrClosed();
+
+  if (!dialog_delegate_)
+    return;
+
+  for (const std::string& id : active_controllable_session_ids_) {
+    base::WeakPtr<media_message_center::MediaNotificationItem> item =
+        GetNotificationItem(id);
+    MediaNotificationContainerImpl* container =
+        dialog_delegate_->ShowMediaSession(id, item);
+
+    // Observe the container for dismissal.
+    if (container) {
+      container->AddObserver(this);
+      observed_containers_[id] = container;
+    }
+  }
+
+  media_message_center::RecordConcurrentNotificationCount(
+      active_controllable_session_ids_.size());
+}
+
+bool MediaNotificationService::HasActiveNotifications() const {
+  return !active_controllable_session_ids_.empty() ||
+         (cast_notification_provider_ &&
+          cast_notification_provider_->HasItems());
+}
+
+bool MediaNotificationService::HasFrozenNotifications() const {
+  return !frozen_session_ids_.empty();
+}
+
+bool MediaNotificationService::HasOpenDialog() const {
+  return !!dialog_delegate_;
+}
+
+void MediaNotificationService::OnReceivedAudioFocusRequests(
+    std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions) {
+  for (auto& session : sessions)
+    OnFocusGained(std::move(session));
+}
+
+base::WeakPtr<media_message_center::MediaNotificationItem>
+MediaNotificationService::GetNotificationItem(const std::string& id) {
+  auto it = sessions_.find(id);
+  if (it != sessions_.end()) {
+    return it->second.item()->GetWeakPtr();
+  } else if (cast_notification_provider_) {
+    return cast_notification_provider_->GetNotificationItem(id);
+  }
+  return nullptr;
+}
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service.h b/chrome/browser/ui/global_media_controls/media_notification_service.h
new file mode 100644
index 0000000..3e8e7e9e
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service.h
@@ -0,0 +1,157 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_H_
+#define CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/ui/global_media_controls/cast_media_notification_provider.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_container_observer.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/media_message_center/media_notification_controller.h"
+#include "content/public/browser/web_contents_observer.h"
+#include "mojo/public/cpp/bindings/receiver.h"
+#include "mojo/public/cpp/bindings/remote.h"
+#include "services/media_session/public/mojom/audio_focus.mojom.h"
+#include "services/media_session/public/mojom/media_controller.mojom.h"
+
+namespace content {
+class WebContents;
+}  // namespace content
+
+namespace media_message_center {
+class MediaSessionNotificationItem;
+}  // namespace media_message_center
+
+namespace service_manager {
+class Connector;
+}  // namespace service_manager
+
+class MediaDialogDelegate;
+class MediaNotificationContainerImpl;
+class MediaNotificationServiceObserver;
+
+class MediaNotificationService
+    : public KeyedService,
+      public media_session::mojom::AudioFocusObserver,
+      public media_message_center::MediaNotificationController,
+      public MediaNotificationContainerObserver {
+ public:
+  MediaNotificationService(Profile* profile,
+                           service_manager::Connector* connector);
+  MediaNotificationService(const MediaNotificationService&) = delete;
+  MediaNotificationService& operator=(const MediaNotificationService&) = delete;
+  ~MediaNotificationService() override;
+
+  void AddObserver(MediaNotificationServiceObserver* observer);
+  void RemoveObserver(MediaNotificationServiceObserver* observer);
+
+  // media_session::mojom::AudioFocusObserver implementation.
+  void OnFocusGained(
+      media_session::mojom::AudioFocusRequestStatePtr session) override;
+  void OnFocusLost(
+      media_session::mojom::AudioFocusRequestStatePtr session) override;
+
+  // media_message_center::MediaNotificationController implementation.
+  void ShowNotification(const std::string& id) override;
+  void HideNotification(const std::string& id) override;
+  void RemoveItem(const std::string& id) override;
+  scoped_refptr<base::SequencedTaskRunner> GetTaskRunner() const override;
+  void LogMediaSessionActionButtonPressed(const std::string& id) override;
+
+  // MediaNotificationContainerObserver implementation.
+  void OnContainerExpanded(bool expanded) override {}
+  void OnContainerMetadataChanged() override {}
+  void OnContainerClicked(const std::string& id) override;
+  void OnContainerDismissed(const std::string& id) override;
+  void OnContainerDestroyed(const std::string& id) override;
+
+  void OnCastNotificationsChanged();
+
+  void SetDialogDelegate(MediaDialogDelegate* delegate);
+
+  // True if there are active non-frozen media session notifications or active
+  // cast notifications.
+  bool HasActiveNotifications() const;
+
+  // True if there are active frozen media session notifications.
+  bool HasFrozenNotifications() const;
+
+  // True if there is an open MediaDialogView associated with this service.
+  bool HasOpenDialog() const;
+
+ private:
+  friend class MediaNotificationServiceTest;
+  friend class MediaToolbarButtonControllerTest;
+
+  class Session : public content::WebContentsObserver {
+   public:
+    Session(MediaNotificationService* owner,
+            const std::string& id,
+            std::unique_ptr<media_message_center::MediaSessionNotificationItem>
+                item,
+            content::WebContents* web_contents);
+    Session(const Session&) = delete;
+    Session& operator=(const Session&) = delete;
+    ~Session() override;
+
+    // content::WebContentsObserver implementation.
+    void WebContentsDestroyed() override;
+
+    media_message_center::MediaSessionNotificationItem* item() {
+      return item_.get();
+    }
+
+   private:
+    MediaNotificationService* owner_;
+    const std::string id_;
+    std::unique_ptr<media_message_center::MediaSessionNotificationItem> item_;
+  };
+
+  void OnReceivedAudioFocusRequests(
+      std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions);
+
+  base::WeakPtr<media_message_center::MediaNotificationItem>
+  GetNotificationItem(const std::string& id);
+
+  service_manager::Connector* const connector_;
+  MediaDialogDelegate* dialog_delegate_ = nullptr;
+
+  // Used to track whether there are any active controllable media sessions. If
+  // not, then there's nothing to show in the dialog and we can hide the toolbar
+  // icon.
+  std::unordered_set<std::string> active_controllable_session_ids_;
+
+  // Tracks the sessions that are currently frozen. If there are only frozen
+  // sessions, we will disable the toolbar icon and wait to hide it.
+  std::unordered_set<std::string> frozen_session_ids_;
+
+  // Stores a Session for each media session keyed by its |request_id| in string
+  // format.
+  std::map<std::string, Session> sessions_;
+
+  // A map of all containers we're currently observing.
+  std::map<std::string, MediaNotificationContainerImpl*> observed_containers_;
+
+  // Connections with the media session service to listen for audio focus
+  // updates and control media sessions.
+  mojo::Remote<media_session::mojom::AudioFocusManager> audio_focus_remote_;
+  mojo::Remote<media_session::mojom::MediaControllerManager>
+      controller_manager_remote_;
+  mojo::Receiver<media_session::mojom::AudioFocusObserver>
+      audio_focus_observer_receiver_{this};
+
+  std::unique_ptr<CastMediaNotificationProvider> cast_notification_provider_;
+
+  base::ObserverList<MediaNotificationServiceObserver> observers_;
+
+  base::WeakPtrFactory<MediaNotificationService> weak_ptr_factory_{this};
+};
+
+#endif  // CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_H_
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_factory.cc b/chrome/browser/ui/global_media_controls/media_notification_service_factory.cc
new file mode 100644
index 0000000..95aab50
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_factory.cc
@@ -0,0 +1,46 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/global_media_controls/media_notification_service_factory.h"
+
+#include <memory>
+
+#include "base/memory/singleton.h"
+#include "chrome/browser/profiles/incognito_helpers.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
+#include "components/keyed_service/content/browser_context_dependency_manager.h"
+#include "content/public/browser/system_connector.h"
+
+MediaNotificationServiceFactory::MediaNotificationServiceFactory()
+    : BrowserContextKeyedServiceFactory(
+          "MediaNotificationService",
+          BrowserContextDependencyManager::GetInstance()) {}
+
+MediaNotificationServiceFactory::~MediaNotificationServiceFactory() {}
+
+// static
+MediaNotificationServiceFactory*
+MediaNotificationServiceFactory::GetInstance() {
+  return base::Singleton<MediaNotificationServiceFactory>::get();
+}
+
+// static
+MediaNotificationService* MediaNotificationServiceFactory::GetForProfile(
+    Profile* profile) {
+  return static_cast<MediaNotificationService*>(
+      GetInstance()->GetServiceForBrowserContext(profile, true));
+}
+
+KeyedService* MediaNotificationServiceFactory::BuildServiceInstanceFor(
+    content::BrowserContext* context) const {
+  return new MediaNotificationService(Profile::FromBrowserContext(context),
+                                      content::GetSystemConnector());
+}
+
+content::BrowserContext*
+MediaNotificationServiceFactory::GetBrowserContextToUse(
+    content::BrowserContext* context) const {
+  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
+}
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_factory.h b/chrome/browser/ui/global_media_controls/media_notification_service_factory.h
new file mode 100644
index 0000000..7eba9b6
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_factory.h
@@ -0,0 +1,49 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_FACTORY_H_
+#define CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_FACTORY_H_
+
+#include "base/macros.h"
+#include "components/keyed_service/content/browser_context_keyed_service_factory.h"
+
+class Profile;
+
+namespace base {
+template <typename T>
+struct DefaultSingletonTraits;
+}  // namespace base
+
+namespace content {
+class BrowserContext;
+}  // namespace content
+
+class MediaNotificationService;
+
+class MediaNotificationServiceFactory
+    : public BrowserContextKeyedServiceFactory {
+ public:
+  MediaNotificationServiceFactory(const MediaNotificationServiceFactory&) =
+      delete;
+  MediaNotificationServiceFactory& operator=(
+      const MediaNotificationServiceFactory&) = delete;
+
+  static MediaNotificationServiceFactory* GetInstance();
+
+  static MediaNotificationService* GetForProfile(Profile* profile);
+
+ private:
+  friend struct base::DefaultSingletonTraits<MediaNotificationServiceFactory>;
+
+  MediaNotificationServiceFactory();
+  ~MediaNotificationServiceFactory() override;
+
+  // BrowserContextKeyedServiceFactory overrides:
+  KeyedService* BuildServiceInstanceFor(
+      content::BrowserContext* context) const override;
+  content::BrowserContext* GetBrowserContextToUse(
+      content::BrowserContext* context) const override;
+};
+
+#endif  // CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_FACTORY_H_
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_observer.h b/chrome/browser/ui/global_media_controls/media_notification_service_observer.h
new file mode 100644
index 0000000..c0f30b1
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_observer.h
@@ -0,0 +1,24 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_OBSERVER_H_
+#define CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_OBSERVER_H_
+
+#include "base/observer_list_types.h"
+
+class MediaNotificationServiceObserver : public base::CheckedObserver {
+ public:
+  // Called when the list of active, cast, or frozen media notifications
+  // changes.
+  virtual void OnNotificationListChanged() = 0;
+
+  // Called when a media dialog associated with the service is either opened or
+  // closed.
+  virtual void OnMediaDialogOpenedOrClosed() = 0;
+
+ protected:
+  ~MediaNotificationServiceObserver() override = default;
+};
+
+#endif  // CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_NOTIFICATION_SERVICE_OBSERVER_H_
diff --git a/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
new file mode 100644
index 0000000..2c96938
--- /dev/null
+++ b/chrome/browser/ui/global_media_controls/media_notification_service_unittest.cc
@@ -0,0 +1,509 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
+
+#include <memory>
+
+#include "base/strings/utf_string_conversions.h"
+#include "base/test/metrics/histogram_tester.h"
+#include "base/test/scoped_feature_list.h"
+#include "base/unguessable_token.h"
+#include "chrome/browser/media/router/media_router_factory.h"
+#include "chrome/browser/media/router/test/mock_media_router.h"
+#include "chrome/browser/ui/global_media_controls/cast_media_notification_provider.h"
+#include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service_observer.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/media_message_center/media_notification_item.h"
+#include "components/media_message_center/media_notification_util.h"
+#include "components/media_message_center/media_session_notification_item.h"
+#include "content/public/test/browser_task_environment.h"
+#include "media/base/media_switches.h"
+#include "services/media_session/public/mojom/audio_focus.mojom.h"
+#include "services/media_session/public/mojom/media_session.mojom.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using media_session::mojom::AudioFocusRequestState;
+using media_session::mojom::AudioFocusRequestStatePtr;
+using media_session::mojom::MediaSessionInfo;
+using media_session::mojom::MediaSessionInfoPtr;
+using testing::_;
+using testing::AtLeast;
+
+namespace {
+
+class MockMediaNotificationServiceObserver
+    : public MediaNotificationServiceObserver {
+ public:
+  MockMediaNotificationServiceObserver() = default;
+  MockMediaNotificationServiceObserver(
+      const MockMediaNotificationServiceObserver&) = delete;
+  MockMediaNotificationServiceObserver& operator=(
+      const MockMediaNotificationServiceObserver&) = delete;
+  ~MockMediaNotificationServiceObserver() override = default;
+
+  // MediaNotificationServiceObserver implementation.
+  MOCK_METHOD0(OnNotificationListChanged, void());
+  MOCK_METHOD0(OnMediaDialogOpenedOrClosed, void());
+};
+
+class MockMediaDialogDelegate : public MediaDialogDelegate {
+ public:
+  MockMediaDialogDelegate() = default;
+  ~MockMediaDialogDelegate() override { Close(); }
+
+  void Open(MediaNotificationService* service) {
+    ASSERT_NE(nullptr, service);
+    service_ = service;
+    service_->SetDialogDelegate(this);
+  }
+
+  void Close() {
+    if (!service_)
+      return;
+
+    service_->SetDialogDelegate(nullptr);
+    service_ = nullptr;
+  }
+
+  // MediaDialogDelegate implementation.
+  MOCK_METHOD2(
+      ShowMediaSession,
+      MediaNotificationContainerImpl*(
+          const std::string& id,
+          base::WeakPtr<media_message_center::MediaNotificationItem> item));
+  MOCK_METHOD1(HideMediaSession, void(const std::string& id));
+
+ private:
+  MediaNotificationService* service_;
+
+  DISALLOW_COPY_AND_ASSIGN(MockMediaDialogDelegate);
+};
+
+}  // anonymous namespace
+
+class MediaNotificationServiceTest : public testing::Test {
+ public:
+  MediaNotificationServiceTest()
+      : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME,
+                          base::test::TaskEnvironment::MainThreadType::UI) {}
+  ~MediaNotificationServiceTest() override = default;
+
+  void SetUp() override {
+    media_router::MediaRouterFactory::GetInstance()->SetTestingFactory(
+        &profile_, base::BindRepeating(&media_router::MockMediaRouter::Create));
+    service_ = std::make_unique<MediaNotificationService>(&profile_, nullptr);
+    service_->AddObserver(&observer_);
+  }
+
+  void TearDown() override { service_.reset(); }
+
+ protected:
+  void AdvanceClockMilliseconds(int milliseconds) {
+    task_environment_.FastForwardBy(
+        base::TimeDelta::FromMilliseconds(milliseconds));
+  }
+
+  base::UnguessableToken SimulatePlayingControllableMedia() {
+    base::UnguessableToken id = base::UnguessableToken::Create();
+    SimulateFocusGained(id, true);
+    SimulateNecessaryMetadata(id);
+    return id;
+  }
+
+  AudioFocusRequestStatePtr CreateFocusRequest(const base::UnguessableToken& id,
+                                               bool controllable) {
+    MediaSessionInfoPtr session_info(MediaSessionInfo::New());
+    session_info->is_controllable = controllable;
+
+    AudioFocusRequestStatePtr focus(AudioFocusRequestState::New());
+    focus->request_id = id;
+    focus->session_info = std::move(session_info);
+    return focus;
+  }
+
+  void SimulateFocusGained(const base::UnguessableToken& id,
+                           bool controllable) {
+    service_->OnFocusGained(CreateFocusRequest(id, controllable));
+  }
+
+  void SimulateFocusLost(const base::UnguessableToken& id) {
+    AudioFocusRequestStatePtr focus(AudioFocusRequestState::New());
+    focus->request_id = id;
+    service_->OnFocusLost(std::move(focus));
+  }
+
+  void SimulateNecessaryMetadata(const base::UnguessableToken& id) {
+    // In order for the MediaNotificationItem to tell the
+    // MediaNotificationService to show a media session, that session needs
+    // a title and artist. Typically this would happen through the media session
+    // service, but since the service doesn't run for this test, we'll manually
+    // grab the MediaNotificationItem from the MediaNotificationService and
+    // set the metadata.
+    auto item_itr = service_->sessions_.find(id.ToString());
+    ASSERT_NE(service_->sessions_.end(), item_itr);
+
+    media_session::MediaMetadata metadata;
+    metadata.title = base::ASCIIToUTF16("title");
+    metadata.artist = base::ASCIIToUTF16("artist");
+    item_itr->second.item()->MediaSessionMetadataChanged(std::move(metadata));
+  }
+
+  void SimulateHasArtwork(const base::UnguessableToken& id) {
+    auto item_itr = service_->sessions_.find(id.ToString());
+    ASSERT_NE(service_->sessions_.end(), item_itr);
+
+    SkBitmap image;
+    image.allocN32Pixels(10, 10);
+    image.eraseColor(SK_ColorMAGENTA);
+
+    item_itr->second.item()->MediaControllerImageChanged(
+        media_session::mojom::MediaSessionImageType::kArtwork, image);
+  }
+
+  void SimulateHasNoArtwork(const base::UnguessableToken& id) {
+    auto item_itr = service_->sessions_.find(id.ToString());
+    ASSERT_NE(service_->sessions_.end(), item_itr);
+
+    item_itr->second.item()->MediaControllerImageChanged(
+        media_session::mojom::MediaSessionImageType::kArtwork, SkBitmap());
+  }
+
+  void SimulateReceivedAudioFocusRequests(
+      std::vector<AudioFocusRequestStatePtr> requests) {
+    service_->OnReceivedAudioFocusRequests(std::move(requests));
+  }
+
+  bool IsSessionFrozen(const base::UnguessableToken& id) const {
+    auto item_itr = service_->sessions_.find(id.ToString());
+    EXPECT_NE(service_->sessions_.end(), item_itr);
+    return item_itr->second.item()->frozen();
+  }
+
+  bool HasActiveNotifications() const {
+    return service_->HasActiveNotifications();
+  }
+
+  bool HasFrozenNotifications() const {
+    return service_->HasFrozenNotifications();
+  }
+
+  bool HasOpenDialog() const { return service_->HasOpenDialog(); }
+
+  void SimulateDialogOpened(MockMediaDialogDelegate* delegate) {
+    delegate->Open(service_.get());
+  }
+
+  void SimulateTabClosed(const base::UnguessableToken& id) {
+    // When a tab is closing, audio focus will be lost before the WebContents is
+    // destroyed, so to simulate closer to reality we will also simulate audio
+    // focus lost here.
+    SimulateFocusLost(id);
+
+    // Now, close the tab.
+    auto item_itr = service_->sessions_.find(id.ToString());
+    EXPECT_NE(service_->sessions_.end(), item_itr);
+    item_itr->second.WebContentsDestroyed();
+  }
+
+  void SimulateDismissButtonClicked(const base::UnguessableToken& id) {
+    service_->OnContainerDismissed(id.ToString());
+  }
+
+  void ExpectHistogramCountRecorded(int count, int size) {
+    histogram_tester_.ExpectBucketCount(
+        media_message_center::kCountHistogramName, count, size);
+  }
+
+  void SimulateMediaRoutesUpdate(
+      const std::vector<media_router::MediaRoute>& routes) {
+    service_->cast_notification_provider_->OnRoutesUpdated(routes, {});
+  }
+
+  MockMediaNotificationServiceObserver& observer() { return observer_; }
+
+ private:
+  content::BrowserTaskEnvironment task_environment_;
+  MockMediaNotificationServiceObserver observer_;
+  std::unique_ptr<MediaNotificationService> service_;
+  base::HistogramTester histogram_tester_;
+  TestingProfile profile_;
+};
+
+// TODO(takumif): Remove this class once |kGlobalMediaControlsForCast| is
+// enabled by default.
+class MediaNotificationServiceCastTest : public MediaNotificationServiceTest {
+ public:
+  void SetUp() override {
+    feature_list_.InitAndEnableFeature(media::kGlobalMediaControlsForCast);
+    MediaNotificationServiceTest::SetUp();
+  }
+
+ private:
+  base::test::ScopedFeatureList feature_list_;
+};
+
+TEST_F(MediaNotificationServiceTest, ShowControllableOnGainAndHideOnLoss) {
+  // Simulate a new active, controllable media session.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  EXPECT_FALSE(HasActiveNotifications());
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_FALSE(IsSessionFrozen(id));
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Ensure that the observer was notified of the new notification.
+  testing::Mock::VerifyAndClearExpectations(&observer());
+
+  // Simulate opening a MediaDialogView.
+  MockMediaDialogDelegate dialog_delegate;
+  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
+  EXPECT_CALL(observer(), OnMediaDialogOpenedOrClosed());
+  EXPECT_FALSE(HasOpenDialog());
+  SimulateDialogOpened(&dialog_delegate);
+
+  // Ensure that the session was shown.
+  ExpectHistogramCountRecorded(1, 1);
+  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
+
+  // Ensure that the observer was notified of the dialog opening.
+  EXPECT_TRUE(HasOpenDialog());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+
+  // Simulate the active session ending.
+  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString())).Times(0);
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  EXPECT_FALSE(HasFrozenNotifications());
+  SimulateFocusLost(id);
+
+  // Ensure that the session was frozen and not hidden.
+  EXPECT_TRUE(IsSessionFrozen(id));
+  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
+
+  // Ensure that the observer was notification of the frozen notification.
+  EXPECT_TRUE(HasFrozenNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+
+  // Once the freeze timer fires, we should hide the media session.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString()));
+  AdvanceClockMilliseconds(2500);
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
+
+TEST_F(MediaNotificationServiceTest, DoesNotShowUncontrollableSession) {
+  base::UnguessableToken id = base::UnguessableToken::Create();
+
+  EXPECT_FALSE(HasActiveNotifications());
+  SimulateFocusGained(id, false);
+  SimulateNecessaryMetadata(id);
+  EXPECT_FALSE(HasActiveNotifications());
+}
+
+TEST_F(MediaNotificationServiceTest, ShowsAllInitialControllableSessions) {
+  base::UnguessableToken controllable1_id = base::UnguessableToken::Create();
+  base::UnguessableToken uncontrollable_id = base::UnguessableToken::Create();
+  base::UnguessableToken controllable2_id = base::UnguessableToken::Create();
+
+  std::vector<AudioFocusRequestStatePtr> requests;
+  requests.push_back(CreateFocusRequest(controllable1_id, true));
+  requests.push_back(CreateFocusRequest(uncontrollable_id, false));
+  requests.push_back(CreateFocusRequest(controllable2_id, true));
+
+  EXPECT_FALSE(HasActiveNotifications());
+
+  // Having controllable sessions should count as active.
+  SimulateReceivedAudioFocusRequests(std::move(requests));
+
+  SimulateNecessaryMetadata(controllable1_id);
+  SimulateNecessaryMetadata(uncontrollable_id);
+  SimulateNecessaryMetadata(controllable2_id);
+
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // If we open a dialog, it should be told to show the controllable sessions,
+  // but not the uncontrollable one.
+  MockMediaDialogDelegate dialog_delegate;
+
+  EXPECT_CALL(dialog_delegate,
+              ShowMediaSession(controllable1_id.ToString(), _));
+  EXPECT_CALL(dialog_delegate,
+              ShowMediaSession(uncontrollable_id.ToString(), _))
+      .Times(0);
+  EXPECT_CALL(dialog_delegate,
+              ShowMediaSession(controllable2_id.ToString(), _));
+  SimulateDialogOpened(&dialog_delegate);
+
+  // Ensure that we properly recorded the number of active sessions shown.
+  ExpectHistogramCountRecorded(2, 1);
+}
+
+TEST_F(MediaNotificationServiceTest, HideAfterTimeoutAndActiveAgainOnPlay) {
+  // First, start an active session.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, stop playing media so the session is frozen, but not yet hidden.
+  SimulateFocusLost(id);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // If the time hasn't elapsed yet, the session should still be frozen.
+  AdvanceClockMilliseconds(2400);
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // Once the time is elapsed, the session should be hidden.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  AdvanceClockMilliseconds(200);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_FALSE(HasFrozenNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+
+  // If media starts playing again, we should show and enable the button.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
+
+TEST_F(MediaNotificationServiceTest,
+       BecomesActiveIfMediaStartsPlayingWithinTimeout) {
+  // First, start playing active media.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, stop playing media so the session is frozen, but hasn't been hidden
+  // yet.
+  SimulateFocusLost(id);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // If the time hasn't elapsed yet, we should still not be hidden.
+  AdvanceClockMilliseconds(2400);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // If media starts playing again, we should become active again.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
+
+TEST_F(MediaNotificationServiceTest, NewMediaSessionWhileDialogOpen) {
+  // First, start playing active media.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, open a dialog.
+  MockMediaDialogDelegate dialog_delegate;
+  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
+  SimulateDialogOpened(&dialog_delegate);
+  ExpectHistogramCountRecorded(1, 1);
+  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
+
+  // Then, have a new media session start while the dialog is opened. This
+  // should update the dialog.
+  base::UnguessableToken new_id = base::UnguessableToken::Create();
+  EXPECT_CALL(dialog_delegate, ShowMediaSession(new_id.ToString(), _));
+  SimulateFocusGained(new_id, true);
+  SimulateNecessaryMetadata(new_id);
+  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
+
+  // If we close this dialog and open a new one, the new one should receive both
+  // media sessions immediately.
+  dialog_delegate.Close();
+  MockMediaDialogDelegate new_dialog;
+  EXPECT_CALL(new_dialog, ShowMediaSession(id.ToString(), _));
+  EXPECT_CALL(new_dialog, ShowMediaSession(new_id.ToString(), _));
+  SimulateDialogOpened(&new_dialog);
+  ExpectHistogramCountRecorded(1, 1);
+  ExpectHistogramCountRecorded(2, 1);
+}
+
+TEST_F(MediaNotificationServiceTest,
+       SessionIsRemovedImmediatelyWhenATabCloses) {
+  // Start playing active media.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, close the tab. The session should immediately be hidden.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  SimulateTabClosed(id);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_FALSE(HasFrozenNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
+
+TEST_F(MediaNotificationServiceTest, DismissesMediaSession) {
+  // First, start playing active media.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, open a dialog.
+  MockMediaDialogDelegate dialog_delegate;
+  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
+  SimulateDialogOpened(&dialog_delegate);
+
+  // Then, click the dismiss button. This should stop and hide the session.
+  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString()));
+  SimulateDismissButtonClicked(id);
+  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
+}
+
+TEST_F(MediaNotificationServiceCastTest, CountCastSessionsAsActive) {
+  media_router::MediaRoute media_route("id",
+                                       media_router::MediaSource("source_id"),
+                                       "sink_id", "description", true, true);
+  media_route.set_controller_type(media_router::RouteControllerType::kGeneric);
+
+  EXPECT_CALL(observer(), OnNotificationListChanged());
+  EXPECT_FALSE(HasActiveNotifications());
+  SimulateMediaRoutesUpdate({media_route});
+  EXPECT_TRUE(HasActiveNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+
+  EXPECT_CALL(observer(), OnNotificationListChanged());
+  SimulateMediaRoutesUpdate({});
+  EXPECT_FALSE(HasActiveNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
+
+// Regression test for https://crbug.com/1015903: we could end up in a situation
+// where the toolbar icon was disabled indefinitely.
+TEST_F(MediaNotificationServiceTest, LoseGainLoseDoesNotCauseRaceCondition) {
+  // First, start an active session and include artwork.
+  base::UnguessableToken id = SimulatePlayingControllableMedia();
+  SimulateHasArtwork(id);
+  EXPECT_TRUE(HasActiveNotifications());
+
+  // Then, stop playing media so the session is frozen, but hasn't been hidden
+  // yet.
+  SimulateFocusLost(id);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // Simulate no artwork, so we wait for new artwork.
+  SimulateHasNoArtwork(id);
+
+  // Simulate regaining focus, but no artwork yet so we wait.
+  SimulateFocusGained(id, true);
+  SimulateNecessaryMetadata(id);
+  EXPECT_TRUE(HasActiveNotifications());
+  EXPECT_FALSE(HasFrozenNotifications());
+
+  // Then, lose focus again before getting artwork.
+  SimulateFocusLost(id);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_TRUE(HasFrozenNotifications());
+
+  // When the freeze timer fires, we should be hidden.
+  EXPECT_CALL(observer(), OnNotificationListChanged()).Times(AtLeast(1));
+  AdvanceClockMilliseconds(2600);
+  EXPECT_FALSE(HasActiveNotifications());
+  EXPECT_FALSE(HasFrozenNotifications());
+  testing::Mock::VerifyAndClearExpectations(&observer());
+}
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
index 8ed445c..4a6374e 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.cc
@@ -4,294 +4,32 @@
 
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h"
 
-#include "base/metrics/histogram_functions.h"
-#include "chrome/browser/media/router/media_router_feature.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_finder.h"
-#include "chrome/browser/ui/browser_list.h"
-#include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h"
-#include "chrome/browser/ui/global_media_controls/media_notification_container_impl.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h"
-#include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "components/media_message_center/media_notification_item.h"
-#include "components/media_message_center/media_notification_util.h"
-#include "components/media_message_center/media_session_notification_item.h"
-#include "content/public/browser/media_session.h"
-#include "media/base/media_switches.h"
-#include "services/media_session/public/mojom/constants.mojom.h"
-#include "services/media_session/public/mojom/media_session.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
-
-namespace {
-
-// Here we check to see if the WebContents is focused. Note that since Session
-// is a WebContentsObserver, we could in theory listen for
-// |OnWebContentsFocused()| and |OnWebContentsLostFocus()|. However, this won't
-// actually work since focusing the MediaDialogView causes the WebContents to
-// "lose focus", so we'd never be focused.
-bool IsWebContentsFocused(content::WebContents* web_contents) {
-  DCHECK(web_contents);
-  Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
-  if (!browser)
-    return false;
-
-  // If the given WebContents is not in the focused window, then it's not
-  // focused. Note that we know a Browser is focused because otherwise the user
-  // could not interact with the MediaDialogView.
-  if (BrowserList::GetInstance()->GetLastActive() != browser)
-    return false;
-
-  return browser->tab_strip_model()->GetActiveWebContents() == web_contents;
-}
-
-}  // anonymous namespace
-
-MediaToolbarButtonController::Session::Session(
-    MediaToolbarButtonController* owner,
-    const std::string& id,
-    std::unique_ptr<media_message_center::MediaSessionNotificationItem> item,
-    content::WebContents* web_contents)
-    : content::WebContentsObserver(web_contents),
-      owner_(owner),
-      id_(id),
-      item_(std::move(item)) {
-  DCHECK(owner_);
-  DCHECK(item_);
-}
-
-MediaToolbarButtonController::Session::~Session() = default;
-
-void MediaToolbarButtonController::Session::WebContentsDestroyed() {
-  // If the WebContents is destroyed, then we should just remove the item
-  // instead of freezing it.
-  owner_->RemoveItem(id_);
-}
 
 MediaToolbarButtonController::MediaToolbarButtonController(
-    const base::UnguessableToken& source_id,
-    service_manager::Connector* connector,
     MediaToolbarButtonControllerDelegate* delegate,
-    Profile* profile)
-    : connector_(connector), delegate_(delegate) {
+    MediaNotificationService* service)
+    : delegate_(delegate), service_(service) {
   DCHECK(delegate_);
-
-  if (base::FeatureList::IsEnabled(media::kGlobalMediaControlsForCast) &&
-      media_router::MediaRouterEnabled(profile)) {
-    cast_notification_provider_ =
-        std::make_unique<CastMediaNotificationProvider>(
-            profile, this,
-            base::BindRepeating(
-                &MediaToolbarButtonController::UpdateToolbarButtonState,
-                base::Unretained(this)));
-  }
-
-  // |connector| can be null in tests.
-  if (!connector_)
-    return;
-
-  // Connect to the controller manager so we can create media controllers for
-  // media sessions.
-  connector_->Connect(media_session::mojom::kServiceName,
-                      controller_manager_remote_.BindNewPipeAndPassReceiver());
-
-  // Connect to receive audio focus events.
-  connector_->Connect(media_session::mojom::kServiceName,
-                      audio_focus_remote_.BindNewPipeAndPassReceiver());
-  audio_focus_remote_->AddSourceObserver(
-      source_id, audio_focus_observer_receiver_.BindNewPipeAndPassRemote());
-
-  audio_focus_remote_->GetSourceFocusRequests(
-      source_id,
-      base::BindOnce(
-          &MediaToolbarButtonController::OnReceivedAudioFocusRequests,
-          weak_ptr_factory_.GetWeakPtr()));
+  service_->AddObserver(this);
+  UpdateToolbarButtonState();
 }
 
 MediaToolbarButtonController::~MediaToolbarButtonController() {
-  for (auto container_pair : observed_containers_)
-    container_pair.second->RemoveObserver(this);
+  service_->RemoveObserver(this);
 }
 
-void MediaToolbarButtonController::OnFocusGained(
-    media_session::mojom::AudioFocusRequestStatePtr session) {
-  const std::string id = session->request_id->ToString();
-
-  // If we have an existing unfrozen item then this is a duplicate call and
-  // we should ignore it.
-  auto it = sessions_.find(id);
-  if (it != sessions_.end() && !it->second.item()->frozen())
-    return;
-
-  mojo::Remote<media_session::mojom::MediaController> controller;
-
-  // |controller_manager_remote_| may be null in tests where connector is
-  // unavailable.
-  if (controller_manager_remote_) {
-    controller_manager_remote_->CreateMediaControllerForSession(
-        controller.BindNewPipeAndPassReceiver(), *session->request_id);
-  }
-
-  if (it != sessions_.end()) {
-    // If the notification was previously frozen then we should reset the
-    // controller because the mojo pipe would have been reset.
-    it->second.item()->SetController(std::move(controller),
-                                     std::move(session->session_info));
-    active_controllable_session_ids_.insert(id);
-    frozen_session_ids_.erase(id);
-    UpdateToolbarButtonState();
-  } else {
-    sessions_.emplace(
-        std::piecewise_construct, std::forward_as_tuple(id),
-        std::forward_as_tuple(
-            this, id,
-            std::make_unique<
-                media_message_center::MediaSessionNotificationItem>(
-                this, id, session->source_name.value_or(std::string()),
-                std::move(controller), std::move(session->session_info)),
-            content::MediaSession::GetWebContentsFromRequestId(
-                *session->request_id)));
-  }
-}
-
-void MediaToolbarButtonController::OnFocusLost(
-    media_session::mojom::AudioFocusRequestStatePtr session) {
-  const std::string id = session->request_id->ToString();
-
-  auto it = sessions_.find(id);
-  if (it == sessions_.end())
-    return;
-
-  it->second.item()->Freeze();
-  active_controllable_session_ids_.erase(id);
-  frozen_session_ids_.insert(id);
+void MediaToolbarButtonController::OnNotificationListChanged() {
   UpdateToolbarButtonState();
 }
 
-void MediaToolbarButtonController::ShowNotification(const std::string& id) {
-  active_controllable_session_ids_.insert(id);
+void MediaToolbarButtonController::OnMediaDialogOpenedOrClosed() {
   UpdateToolbarButtonState();
-
-  if (!dialog_delegate_)
-    return;
-
-  base::WeakPtr<media_message_center::MediaNotificationItem> item =
-      GetNotificationItem(id);
-  MediaNotificationContainerImpl* container =
-      dialog_delegate_->ShowMediaSession(id, item);
-
-  // Observe the container for dismissal.
-  if (container) {
-    container->AddObserver(this);
-    observed_containers_[id] = container;
-  }
-}
-
-void MediaToolbarButtonController::HideNotification(const std::string& id) {
-  active_controllable_session_ids_.erase(id);
-  frozen_session_ids_.erase(id);
-  UpdateToolbarButtonState();
-
-  if (!dialog_delegate_)
-    return;
-
-  dialog_delegate_->HideMediaSession(id);
-}
-
-scoped_refptr<base::SequencedTaskRunner>
-MediaToolbarButtonController::GetTaskRunner() const {
-  return nullptr;
-}
-
-void MediaToolbarButtonController::RemoveItem(const std::string& id) {
-  active_controllable_session_ids_.erase(id);
-  frozen_session_ids_.erase(id);
-  sessions_.erase(id);
-
-  UpdateToolbarButtonState();
-}
-
-void MediaToolbarButtonController::LogMediaSessionActionButtonPressed(
-    const std::string& id) {
-  auto it = sessions_.find(id);
-  if (it == sessions_.end())
-    return;
-
-  content::WebContents* web_contents = it->second.web_contents();
-  if (!web_contents)
-    return;
-
-  base::UmaHistogramBoolean("Media.GlobalMediaControls.UserActionFocus",
-                            IsWebContentsFocused(web_contents));
-}
-
-void MediaToolbarButtonController::OnContainerClicked(const std::string& id) {
-  auto it = sessions_.find(id);
-  if (it == sessions_.end())
-    return;
-
-  content::WebContents* web_contents = it->second.web_contents();
-  if (!web_contents)
-    return;
-
-  content::WebContentsDelegate* delegate = web_contents->GetDelegate();
-  if (!delegate)
-    return;
-
-  delegate->ActivateContents(web_contents);
-}
-
-void MediaToolbarButtonController::OnContainerDismissed(const std::string& id) {
-  auto it = sessions_.find(id);
-  if (it != sessions_.end())
-    it->second.item()->Dismiss();
-}
-
-void MediaToolbarButtonController::OnContainerDestroyed(const std::string& id) {
-  auto iter = observed_containers_.find(id);
-  DCHECK(iter != observed_containers_.end());
-
-  iter->second->RemoveObserver(this);
-  observed_containers_.erase(iter);
-}
-
-void MediaToolbarButtonController::SetDialogDelegate(
-    MediaDialogDelegate* delegate) {
-  DCHECK(!delegate || !dialog_delegate_);
-  dialog_delegate_ = delegate;
-
-  UpdateToolbarButtonState();
-
-  if (!dialog_delegate_)
-    return;
-
-  for (const std::string& id : active_controllable_session_ids_) {
-    base::WeakPtr<media_message_center::MediaNotificationItem> item =
-        GetNotificationItem(id);
-    MediaNotificationContainerImpl* container =
-        dialog_delegate_->ShowMediaSession(id, item);
-
-    // Observe the container for dismissal.
-    if (container) {
-      container->AddObserver(this);
-      observed_containers_[id] = container;
-    }
-  }
-
-  media_message_center::RecordConcurrentNotificationCount(
-      active_controllable_session_ids_.size());
-}
-
-void MediaToolbarButtonController::OnReceivedAudioFocusRequests(
-    std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions) {
-  for (auto& session : sessions)
-    OnFocusGained(std::move(session));
 }
 
 void MediaToolbarButtonController::UpdateToolbarButtonState() {
-  if (!active_controllable_session_ids_.empty() ||
-      (cast_notification_provider_ &&
-       cast_notification_provider_->HasItems())) {
+  if (service_->HasActiveNotifications()) {
     if (delegate_display_state_ != DisplayState::kShown) {
       delegate_->Enable();
       delegate_->Show();
@@ -300,27 +38,16 @@
     return;
   }
 
-  if (frozen_session_ids_.empty()) {
+  if (!service_->HasFrozenNotifications()) {
     if (delegate_display_state_ != DisplayState::kHidden)
       delegate_->Hide();
     delegate_display_state_ = DisplayState::kHidden;
     return;
   }
 
-  if (!dialog_delegate_) {
+  if (!service_->HasOpenDialog()) {
     if (delegate_display_state_ != DisplayState::kDisabled)
       delegate_->Disable();
     delegate_display_state_ = DisplayState::kDisabled;
   }
 }
-
-base::WeakPtr<media_message_center::MediaNotificationItem>
-MediaToolbarButtonController::GetNotificationItem(const std::string& id) {
-  auto it = sessions_.find(id);
-  if (it != sessions_.end()) {
-    return it->second.item()->GetWeakPtr();
-  } else if (cast_notification_provider_) {
-    return cast_notification_provider_->GetNotificationItem(id);
-  }
-  return nullptr;
-}
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h
index 0e379a0..f59ab2e 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h
@@ -5,77 +5,27 @@
 #ifndef CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_TOOLBAR_BUTTON_CONTROLLER_H_
 #define CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_TOOLBAR_BUTTON_CONTROLLER_H_
 
-#include <map>
-#include <string>
-#include <vector>
+#include "chrome/browser/ui/global_media_controls/media_notification_service_observer.h"
 
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "chrome/browser/media/router/media_routes_observer.h"
-#include "chrome/browser/ui/global_media_controls/cast_media_notification_provider.h"
-#include "chrome/browser/ui/global_media_controls/media_notification_container_observer.h"
-#include "components/media_message_center/media_notification_controller.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/media_session/public/mojom/audio_focus.mojom.h"
-#include "services/media_session/public/mojom/media_controller.mojom.h"
-
-namespace content {
-class WebContents;
-}  // namespace content
-
-namespace media_message_center {
-class MediaSessionNotificationItem;
-}  // namespace media_message_center
-
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
-
-class MediaDialogDelegate;
-class MediaNotificationContainerImpl;
+class MediaNotificationService;
 class MediaToolbarButtonControllerDelegate;
 
 // Controller for the MediaToolbarButtonView that decides when to show or hide
-// the icon from the toolbar. Also passes MediaNotificationItems to the
-// MediaDialogView to display.
-class MediaToolbarButtonController
-    : public media_session::mojom::AudioFocusObserver,
-      public media_message_center::MediaNotificationController,
-      public MediaNotificationContainerObserver {
+// the icon from the toolbar.
+class MediaToolbarButtonController : public MediaNotificationServiceObserver {
  public:
-  MediaToolbarButtonController(const base::UnguessableToken& source_id,
-                               service_manager::Connector* connector,
-                               MediaToolbarButtonControllerDelegate* delegate,
-                               Profile* profile);
+  MediaToolbarButtonController(MediaToolbarButtonControllerDelegate* delegate,
+                               MediaNotificationService* service);
+  MediaToolbarButtonController(const MediaToolbarButtonController&) = delete;
+  MediaToolbarButtonController& operator=(const MediaToolbarButtonController&) =
+      delete;
   ~MediaToolbarButtonController() override;
 
-  // media_session::mojom::AudioFocusObserver implementation.
-  void OnFocusGained(
-      media_session::mojom::AudioFocusRequestStatePtr session) override;
-  void OnFocusLost(
-      media_session::mojom::AudioFocusRequestStatePtr session) override;
-
-  // media_message_center::MediaNotificationController implementation.
-  void ShowNotification(const std::string& id) override;
-  void HideNotification(const std::string& id) override;
-  void RemoveItem(const std::string& id) override;
-  scoped_refptr<base::SequencedTaskRunner> GetTaskRunner() const override;
-  void LogMediaSessionActionButtonPressed(const std::string& id) override;
-
-  // MediaNotificationContainerObserver implementation.
-  void OnContainerExpanded(bool expanded) override {}
-  void OnContainerMetadataChanged() override {}
-  void OnContainerClicked(const std::string& id) override;
-  void OnContainerDismissed(const std::string& id) override;
-  void OnContainerDestroyed(const std::string& id) override;
-
-  void SetDialogDelegate(MediaDialogDelegate* delegate);
+  // MediaNotificationServiceObserver implementation.
+  void OnNotificationListChanged() override;
+  void OnMediaDialogOpenedOrClosed() override;
 
  private:
-  friend class MediaToolbarButtonControllerTest;
-
   // Tracks the current display state of the toolbar button delegate.
   enum class DisplayState {
     kShown,
@@ -83,74 +33,13 @@
     kHidden,
   };
 
-  class Session : public content::WebContentsObserver {
-   public:
-    Session(MediaToolbarButtonController* owner,
-            const std::string& id,
-            std::unique_ptr<media_message_center::MediaSessionNotificationItem>
-                item,
-            content::WebContents* web_contents);
-    Session(const Session&) = delete;
-    Session& operator=(const Session&) = delete;
-    ~Session() override;
-
-    // content::WebContentsObserver implementation.
-    void WebContentsDestroyed() override;
-
-    media_message_center::MediaSessionNotificationItem* item() {
-      return item_.get();
-    }
-
-   private:
-    MediaToolbarButtonController* owner_;
-    const std::string id_;
-    std::unique_ptr<media_message_center::MediaSessionNotificationItem> item_;
-  };
-
-  void OnReceivedAudioFocusRequests(
-      std::vector<media_session::mojom::AudioFocusRequestStatePtr> sessions);
-
   void UpdateToolbarButtonState();
 
-  base::WeakPtr<media_message_center::MediaNotificationItem>
-  GetNotificationItem(const std::string& id);
-
-  service_manager::Connector* const connector_;
   MediaToolbarButtonControllerDelegate* const delegate_;
-  MediaDialogDelegate* dialog_delegate_ = nullptr;
+  MediaNotificationService* const service_;
 
   // The delegate starts hidden and isn't shown until media playback starts.
   DisplayState delegate_display_state_ = DisplayState::kHidden;
-
-  // Used to track whether there are any active controllable media sessions. If
-  // not, then there's nothing to show in the dialog and we can hide the toolbar
-  // icon.
-  std::unordered_set<std::string> active_controllable_session_ids_;
-
-  // Tracks the sessions that are currently frozen. If there are only frozen
-  // sessions, we will disable the toolbar icon and wait to hide it.
-  std::unordered_set<std::string> frozen_session_ids_;
-
-  // Stores a Session for each media session keyed by its |request_id| in string
-  // format.
-  std::map<std::string, Session> sessions_;
-
-  // A map of all containers we're currently observing.
-  std::map<std::string, MediaNotificationContainerImpl*> observed_containers_;
-
-  // Connections with the media session service to listen for audio focus
-  // updates and control media sessions.
-  mojo::Remote<media_session::mojom::AudioFocusManager> audio_focus_remote_;
-  mojo::Remote<media_session::mojom::MediaControllerManager>
-      controller_manager_remote_;
-  mojo::Receiver<media_session::mojom::AudioFocusObserver>
-      audio_focus_observer_receiver_{this};
-
-  std::unique_ptr<CastMediaNotificationProvider> cast_notification_provider_;
-
-  base::WeakPtrFactory<MediaToolbarButtonController> weak_ptr_factory_{this};
-
-  DISALLOW_COPY_AND_ASSIGN(MediaToolbarButtonController);
 };
 
 #endif  // CHROME_BROWSER_UI_GLOBAL_MEDIA_CONTROLS_MEDIA_TOOLBAR_BUTTON_CONTROLLER_H_
diff --git a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
index 5a6e423..c0af645 100644
--- a/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
+++ b/chrome/browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc
@@ -7,13 +7,9 @@
 #include <memory>
 
 #include "base/strings/utf_string_conversions.h"
-#include "base/test/metrics/histogram_tester.h"
-#include "base/test/scoped_feature_list.h"
 #include "base/unguessable_token.h"
-#include "chrome/browser/media/router/media_router_factory.h"
-#include "chrome/browser/media/router/test/mock_media_router.h"
-#include "chrome/browser/ui/global_media_controls/cast_media_notification_provider.h"
 #include "chrome/browser/ui/global_media_controls/media_dialog_delegate.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h"
 #include "chrome/test/base/testing_profile.h"
 #include "components/media_message_center/media_notification_item.h"
@@ -52,18 +48,18 @@
   MockMediaDialogDelegate() = default;
   ~MockMediaDialogDelegate() override { Close(); }
 
-  void Open(MediaToolbarButtonController* controller) {
-    ASSERT_NE(nullptr, controller);
-    controller_ = controller;
-    controller_->SetDialogDelegate(this);
+  void Open(MediaNotificationService* service) {
+    ASSERT_NE(nullptr, service);
+    service_ = service;
+    service_->SetDialogDelegate(this);
   }
 
   void Close() {
-    if (!controller_)
+    if (!service_)
       return;
 
-    controller_->SetDialogDelegate(nullptr);
-    controller_ = nullptr;
+    service_->SetDialogDelegate(nullptr);
+    service_ = nullptr;
   }
 
   // MediaDialogDelegate implementation.
@@ -75,7 +71,7 @@
   MOCK_METHOD1(HideMediaSession, void(const std::string& id));
 
  private:
-  MediaToolbarButtonController* controller_;
+  MediaNotificationService* service_;
 
   DISALLOW_COPY_AND_ASSIGN(MockMediaDialogDelegate);
 };
@@ -86,14 +82,13 @@
  public:
   MediaToolbarButtonControllerTest()
       : task_environment_(base::test::TaskEnvironment::TimeSource::MOCK_TIME,
-                          base::test::TaskEnvironment::MainThreadType::UI) {}
+                          base::test::TaskEnvironment::MainThreadType::UI),
+        service_(&profile_, nullptr) {}
   ~MediaToolbarButtonControllerTest() override = default;
 
   void SetUp() override {
-    media_router::MediaRouterFactory::GetInstance()->SetTestingFactory(
-        &profile_, base::BindRepeating(&media_router::MockMediaRouter::Create));
-    controller_ = std::make_unique<MediaToolbarButtonController>(
-        base::UnguessableToken::Create(), nullptr, &delegate_, &profile_);
+    controller_ =
+        std::make_unique<MediaToolbarButtonController>(&delegate_, &service_);
   }
 
   void TearDown() override { controller_.reset(); }
@@ -124,24 +119,24 @@
 
   void SimulateFocusGained(const base::UnguessableToken& id,
                            bool controllable) {
-    controller_->OnFocusGained(CreateFocusRequest(id, controllable));
+    service_.OnFocusGained(CreateFocusRequest(id, controllable));
   }
 
   void SimulateFocusLost(const base::UnguessableToken& id) {
     AudioFocusRequestStatePtr focus(AudioFocusRequestState::New());
     focus->request_id = id;
-    controller_->OnFocusLost(std::move(focus));
+    service_.OnFocusLost(std::move(focus));
   }
 
   void SimulateNecessaryMetadata(const base::UnguessableToken& id) {
     // In order for the MediaNotificationItem to tell the
-    // MediaToolbarButtonController to show a media session, that session needs
+    // MediaNotificationService to show a media session, that session needs
     // a title and artist. Typically this would happen through the media session
     // service, but since the service doesn't run for this test, we'll manually
-    // grab the MediaNotificationItem from the MediaToolbarButtonController and
+    // grab the MediaNotificationItem from the MediaNotificationService and
     // set the metadata.
-    auto item_itr = controller_->sessions_.find(id.ToString());
-    ASSERT_NE(controller_->sessions_.end(), item_itr);
+    auto item_itr = service_.sessions_.find(id.ToString());
+    ASSERT_NE(service_.sessions_.end(), item_itr);
 
     media_session::MediaMetadata metadata;
     metadata.title = base::ASCIIToUTF16("title");
@@ -149,65 +144,8 @@
     item_itr->second.item()->MediaSessionMetadataChanged(std::move(metadata));
   }
 
-  void SimulateHasArtwork(const base::UnguessableToken& id) {
-    auto item_itr = controller_->sessions_.find(id.ToString());
-    ASSERT_NE(controller_->sessions_.end(), item_itr);
-
-    SkBitmap image;
-    image.allocN32Pixels(10, 10);
-    image.eraseColor(SK_ColorMAGENTA);
-
-    item_itr->second.item()->MediaControllerImageChanged(
-        media_session::mojom::MediaSessionImageType::kArtwork, image);
-  }
-
-  void SimulateHasNoArtwork(const base::UnguessableToken& id) {
-    auto item_itr = controller_->sessions_.find(id.ToString());
-    ASSERT_NE(controller_->sessions_.end(), item_itr);
-
-    item_itr->second.item()->MediaControllerImageChanged(
-        media_session::mojom::MediaSessionImageType::kArtwork, SkBitmap());
-  }
-
-  void SimulateReceivedAudioFocusRequests(
-      std::vector<AudioFocusRequestStatePtr> requests) {
-    controller_->OnReceivedAudioFocusRequests(std::move(requests));
-  }
-
-  bool IsSessionFrozen(const base::UnguessableToken& id) const {
-    auto item_itr = controller_->sessions_.find(id.ToString());
-    EXPECT_NE(controller_->sessions_.end(), item_itr);
-    return item_itr->second.item()->frozen();
-  }
-
   void SimulateDialogOpened(MockMediaDialogDelegate* delegate) {
-    delegate->Open(controller_.get());
-  }
-
-  void SimulateTabClosed(const base::UnguessableToken& id) {
-    // When a tab is closing, audio focus will be lost before the WebContents is
-    // destroyed, so to simulate closer to reality we will also simulate audio
-    // focus lost here.
-    SimulateFocusLost(id);
-
-    // Now, close the tab.
-    auto item_itr = controller_->sessions_.find(id.ToString());
-    EXPECT_NE(controller_->sessions_.end(), item_itr);
-    item_itr->second.WebContentsDestroyed();
-  }
-
-  void SimulateDismissButtonClicked(const base::UnguessableToken& id) {
-    controller_->OnContainerDismissed(id.ToString());
-  }
-
-  void ExpectHistogramCountRecorded(int count, int size) {
-    histogram_tester_.ExpectBucketCount(
-        media_message_center::kCountHistogramName, count, size);
-  }
-
-  void SimulateMediaRoutesUpdate(
-      const std::vector<media_router::MediaRoute>& routes) {
-    controller_->cast_notification_provider_->OnRoutesUpdated(routes, {});
+    delegate->Open(&service_);
   }
 
   MockMediaToolbarButtonControllerDelegate& delegate() { return delegate_; }
@@ -215,107 +153,15 @@
  private:
   content::BrowserTaskEnvironment task_environment_;
   MockMediaToolbarButtonControllerDelegate delegate_;
-  std::unique_ptr<MediaToolbarButtonController> controller_;
-  base::HistogramTester histogram_tester_;
   TestingProfile profile_;
+  MediaNotificationService service_;
+  std::unique_ptr<MediaToolbarButtonController> controller_;
 
   DISALLOW_COPY_AND_ASSIGN(MediaToolbarButtonControllerTest);
 };
 
-// TODO(takumif): Remove this class once |kGlobalMediaControlsForCast| is
-// enabled by default.
-class MediaToolbarButtonControllerCastTest
-    : public MediaToolbarButtonControllerTest {
- public:
-  void SetUp() override {
-    feature_list_.InitAndEnableFeature(media::kGlobalMediaControlsForCast);
-    MediaToolbarButtonControllerTest::SetUp();
-  }
-
- private:
-  base::test::ScopedFeatureList feature_list_;
-};
-
-TEST_F(MediaToolbarButtonControllerTest, ShowControllableOnGainAndHideOnLoss) {
-  // Simulate a new active, controllable media session.
-  EXPECT_CALL(delegate(), Show());
-  base::UnguessableToken id = SimulatePlayingControllableMedia();
-  EXPECT_FALSE(IsSessionFrozen(id));
-
-  // Ensure that the toolbar button was shown.
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Simulate opening a MediaDialogView.
-  MockMediaDialogDelegate dialog_delegate;
-  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
-  SimulateDialogOpened(&dialog_delegate);
-
-  // Ensure that the session was shown.
-  ExpectHistogramCountRecorded(1, 1);
-  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
-
-  // Simulate the active session ending.
-  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString())).Times(0);
-  SimulateFocusLost(id);
-
-  // Ensure that the session was frozen and not hidden.
-  EXPECT_TRUE(IsSessionFrozen(id));
-  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
-
-  // Once the freeze timer fires, we should hide the media session.
-  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString()));
-  AdvanceClockMilliseconds(2500);
-}
-
-TEST_F(MediaToolbarButtonControllerTest, DoesNotShowUncontrollableSession) {
-  base::UnguessableToken id = base::UnguessableToken::Create();
-
-  EXPECT_CALL(delegate(), Show()).Times(0);
-
-  SimulateFocusGained(id, false);
-  SimulateNecessaryMetadata(id);
-}
-
-TEST_F(MediaToolbarButtonControllerTest, ShowsAllInitialControllableSessions) {
-  base::UnguessableToken controllable1_id = base::UnguessableToken::Create();
-  base::UnguessableToken uncontrollable_id = base::UnguessableToken::Create();
-  base::UnguessableToken controllable2_id = base::UnguessableToken::Create();
-
-  std::vector<AudioFocusRequestStatePtr> requests;
-  requests.push_back(CreateFocusRequest(controllable1_id, true));
-  requests.push_back(CreateFocusRequest(uncontrollable_id, false));
-  requests.push_back(CreateFocusRequest(controllable2_id, true));
-
-  // Having active, controllable sessions should show the toolbar button.
-  EXPECT_CALL(delegate(), Show());
-
-  SimulateReceivedAudioFocusRequests(std::move(requests));
-
-  SimulateNecessaryMetadata(controllable1_id);
-  SimulateNecessaryMetadata(uncontrollable_id);
-  SimulateNecessaryMetadata(controllable2_id);
-
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // If we open a dialog, it should be told to show the controllable sessions,
-  // but not the uncontrollable one.
-  MockMediaDialogDelegate dialog_delegate;
-
-  EXPECT_CALL(dialog_delegate,
-              ShowMediaSession(controllable1_id.ToString(), _));
-  EXPECT_CALL(dialog_delegate,
-              ShowMediaSession(uncontrollable_id.ToString(), _))
-      .Times(0);
-  EXPECT_CALL(dialog_delegate,
-              ShowMediaSession(controllable2_id.ToString(), _));
-  SimulateDialogOpened(&dialog_delegate);
-
-  // Ensure that we properly recorded the number of active sessions shown.
-  ExpectHistogramCountRecorded(2, 1);
-}
-
 TEST_F(MediaToolbarButtonControllerTest, HidesAfterTimeoutAndShowsAgainOnPlay) {
-  // First, show the button.
+  // First, show the button by playing media.
   EXPECT_CALL(delegate(), Show());
   base::UnguessableToken id = SimulatePlayingControllableMedia();
   testing::Mock::VerifyAndClearExpectations(&delegate());
@@ -388,119 +234,3 @@
   SimulatePlayingControllableMedia();
   testing::Mock::VerifyAndClearExpectations(&delegate());
 }
-
-TEST_F(MediaToolbarButtonControllerTest, NewMediaSessionWhileDialogOpen) {
-  // First, show the button.
-  EXPECT_CALL(delegate(), Show());
-  base::UnguessableToken id = SimulatePlayingControllableMedia();
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Then, open a dialog.
-  MockMediaDialogDelegate dialog_delegate;
-  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
-  SimulateDialogOpened(&dialog_delegate);
-  ExpectHistogramCountRecorded(1, 1);
-  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
-
-  // Then, have a new media session start while the dialog is opened. This
-  // should update the dialog.
-  base::UnguessableToken new_id = base::UnguessableToken::Create();
-  EXPECT_CALL(dialog_delegate, ShowMediaSession(new_id.ToString(), _));
-  SimulateFocusGained(new_id, true);
-  SimulateNecessaryMetadata(new_id);
-  testing::Mock::VerifyAndClearExpectations(&dialog_delegate);
-
-  // If we close this dialog and open a new one, the new one should receive both
-  // media sessions immediately.
-  dialog_delegate.Close();
-  MockMediaDialogDelegate new_dialog;
-  EXPECT_CALL(new_dialog, ShowMediaSession(id.ToString(), _));
-  EXPECT_CALL(new_dialog, ShowMediaSession(new_id.ToString(), _));
-  SimulateDialogOpened(&new_dialog);
-  ExpectHistogramCountRecorded(1, 1);
-  ExpectHistogramCountRecorded(2, 1);
-}
-
-TEST_F(MediaToolbarButtonControllerTest,
-       SessionIsRemovedImmediatelyWhenATabCloses) {
-  // First, show the button.
-  EXPECT_CALL(delegate(), Show());
-  base::UnguessableToken id = SimulatePlayingControllableMedia();
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Then, close the tab. The button should immediately hide.
-  EXPECT_CALL(delegate(), Hide());
-  SimulateTabClosed(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-}
-
-TEST_F(MediaToolbarButtonControllerTest, DismissesMediaSession) {
-  // First, show the button.
-  EXPECT_CALL(delegate(), Show());
-  base::UnguessableToken id = SimulatePlayingControllableMedia();
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Then, open a dialog.
-  MockMediaDialogDelegate dialog_delegate;
-  EXPECT_CALL(dialog_delegate, ShowMediaSession(id.ToString(), _));
-  SimulateDialogOpened(&dialog_delegate);
-
-  // Then, click the dismiss button. This should stop and hide the session.
-  EXPECT_CALL(dialog_delegate, HideMediaSession(id.ToString()));
-  SimulateDismissButtonClicked(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-}
-
-TEST_F(MediaToolbarButtonControllerCastTest, ShowButtonForCastSession) {
-  media_router::MediaRoute media_route("id",
-                                       media_router::MediaSource("source_id"),
-                                       "sink_id", "description", true, true);
-  media_route.set_controller_type(media_router::RouteControllerType::kGeneric);
-
-  EXPECT_CALL(delegate(), Enable());
-  EXPECT_CALL(delegate(), Show());
-  SimulateMediaRoutesUpdate({media_route});
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  EXPECT_CALL(delegate(), Hide());
-  SimulateMediaRoutesUpdate({});
-}
-
-// Regression test for https://crbug.com/1015903: we could end up in a situation
-// where the toolbar icon was disabled indefinitely.
-TEST_F(MediaToolbarButtonControllerTest,
-       LoseGainLoseDoesNotCauseRaceCondition) {
-  // First, show the button, and include artwork.
-  EXPECT_CALL(delegate(), Show());
-  base::UnguessableToken id = SimulatePlayingControllableMedia();
-  SimulateHasArtwork(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Then, stop playing media so the button is disabled, but hasn't been hidden
-  // yet.
-  EXPECT_CALL(delegate(), Disable());
-  EXPECT_CALL(delegate(), Hide()).Times(0);
-  SimulateFocusLost(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Simulate no artwork, so we wait for new artwork.
-  SimulateHasNoArtwork(id);
-
-  // Simulate regaining focus, but no artwork yet so we wait.
-  EXPECT_CALL(delegate(), Show());
-  SimulateFocusGained(id, true);
-  SimulateNecessaryMetadata(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // Then, lose focus again before getting artwork.
-  EXPECT_CALL(delegate(), Show()).Times(0);
-  EXPECT_CALL(delegate(), Disable());
-  EXPECT_CALL(delegate(), Hide()).Times(0);
-  SimulateFocusLost(id);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-
-  // When the freeze timer fires, we should be hidden.
-  EXPECT_CALL(delegate(), Hide());
-  AdvanceClockMilliseconds(2600);
-  testing::Mock::VerifyAndClearExpectations(&delegate());
-}
diff --git a/chrome/browser/ui/media_router/media_router_file_dialog.cc b/chrome/browser/ui/media_router/media_router_file_dialog.cc
index 146179a..f373e3d 100644
--- a/chrome/browser/ui/media_router/media_router_file_dialog.cc
+++ b/chrome/browser/ui/media_router/media_router_file_dialog.cc
@@ -69,9 +69,12 @@
 
 }  // namespace
 
-// FileSystemDelegate default implementations
 MediaRouterFileDialog::FileSystemDelegate::FileSystemDelegate() = default;
-MediaRouterFileDialog::FileSystemDelegate::~FileSystemDelegate() = default;
+
+MediaRouterFileDialog::FileSystemDelegate::~FileSystemDelegate() {
+  if (select_file_dialog_)
+    select_file_dialog_->ListenerDestroyed();
+}
 
 bool MediaRouterFileDialog::FileSystemDelegate::FileExists(
     const base::FilePath& file_path) const {
diff --git a/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc b/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc
index 30aba11..c6ad7140 100644
--- a/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc
+++ b/chrome/browser/ui/media_router/media_router_file_dialog_unittest.cc
@@ -27,7 +27,7 @@
 
 namespace {
 
-// Clears out async tasks
+// Clears out async tasks.
 void FlushTasks() {
   base::ThreadPoolInstance::Get()->FlushForTesting();
   base::RunLoop().RunUntilIdle();
@@ -73,9 +73,8 @@
 
 class MediaRouterFileDialogTest : public Test {
  public:
-  MediaRouterFileDialogTest() {
-    fake_path = base::FilePath(FILE_PATH_LITERAL("im/a/fake_path.mp3"));
-  }
+  MediaRouterFileDialogTest()
+      : fake_path_(base::FilePath(FILE_PATH_LITERAL("im/a/fake_path.mp3"))) {}
 
   void SetUp() override {
     mock_delegate_ = std::make_unique<MockDelegate>();
@@ -87,7 +86,7 @@
         mock_delegate_->GetWeakPtr(), std::move(temp_mock));
     dialog_as_listener_ = dialog_.get();
 
-    // Setup default file checks to all pass
+    // Setup default file checks to all pass.
     ON_CALL(*mock_file_system_delegate, FileExists(_))
         .WillByDefault(Return(true));
     ON_CALL(*mock_file_system_delegate, IsFileReadable(_))
@@ -98,17 +97,28 @@
         .WillByDefault(Return(1));
   }
 
-  void FileSelectedExpectFailure(base::FilePath fake_path) {
-    fake_path_name = fake_path.BaseName().LossyDisplayName();
+  void SelectValidFile(const base::FilePath& path) {
+    EXPECT_CALL(*mock_file_system_delegate, FileExists(path))
+        .WillOnce(Return(true));
+    EXPECT_CALL(*mock_file_system_delegate, IsFileReadable(path))
+        .WillOnce(Return(true));
+    EXPECT_CALL(*mock_file_system_delegate, GetFileSize(path))
+        .WillOnce(Return(1));
+
+    dialog_as_listener_->FileSelected(path, 0, nullptr);
+  }
+
+  void SelectFileAndExpectFailure(const base::FilePath& path) {
+    base::string16 path_name = path.BaseName().LossyDisplayName();
     std::string error_title = l10n_util::GetStringFUTF8(
-        IDS_MEDIA_ROUTER_ISSUE_FILE_CAST_ERROR, fake_path_name);
+        IDS_MEDIA_ROUTER_ISSUE_FILE_CAST_ERROR, path_name);
 
     EXPECT_CALL(*mock_delegate_, FileDialogSelectionFailed(
                                      Field(&IssueInfo::title, error_title)));
 
-    dialog_as_listener_->FileSelected(fake_path, 0, 0);
+    dialog_as_listener_->FileSelected(path, 0, nullptr);
 
-    // Flush out the async file validation calls
+    // Flush out the async file validation calls.
     FlushTasks();
   }
 
@@ -120,76 +130,83 @@
   // Used for simulating calls from a SelectFileDialog.
   ui::SelectFileDialog::Listener* dialog_as_listener_ = nullptr;
 
-  base::FilePath fake_path;
-  base::string16 fake_path_name;
+  const base::FilePath fake_path_;
 
   content::BrowserTaskEnvironment task_environment_;
 };
 
+// File selection succeeds, success callback called with the right file info.
+// Selected file URL is set properly.
 TEST_F(MediaRouterFileDialogTest, SelectFileSuccess) {
-  // File selection succeeds, success callback called with the right file info.
-  // Selected file URL is set properly.
-
-  // Expect all the checks and return passes
-  EXPECT_CALL(*mock_file_system_delegate, FileExists(fake_path))
-      .WillOnce(Return(true));
-  EXPECT_CALL(*mock_file_system_delegate, IsFileReadable(fake_path))
-      .WillOnce(Return(true));
-  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path))
-      .WillOnce(Return(1));
-
   EXPECT_CALL(*mock_delegate_,
               FileDialogFileSelected(
-                  Field(&ui::SelectedFileInfo::local_path, fake_path)));
-
-  dialog_as_listener_->FileSelected(fake_path, 0, 0);
+                  Field(&ui::SelectedFileInfo::local_path, fake_path_)));
+  SelectValidFile(fake_path_);
 
   FlushTasks();
 
   ASSERT_THAT(dialog_->GetLastSelectedFileUrl().GetContent(),
-              ContainsRegex(base::UTF16ToUTF8(fake_path.LossyDisplayName())));
+              ContainsRegex(base::UTF16ToUTF8(fake_path_.LossyDisplayName())));
 }
 
+// File selection gets cancelled, and the failure callback gets called.
 TEST_F(MediaRouterFileDialogTest, SelectFileCanceled) {
-  // File selection gets cancelled, failure callback called
   EXPECT_CALL(*mock_delegate_, FileDialogSelectionCanceled());
 
   dialog_as_listener_->FileSelectionCanceled(0);
 }
 
 TEST_F(MediaRouterFileDialogTest, SelectFailureFileDoesNotExist) {
-  EXPECT_CALL(*mock_file_system_delegate, FileExists(fake_path))
+  EXPECT_CALL(*mock_file_system_delegate, FileExists(fake_path_))
       .WillOnce(Return(false));
 
-  FileSelectedExpectFailure(fake_path);
+  SelectFileAndExpectFailure(fake_path_);
 }
 
 TEST_F(MediaRouterFileDialogTest, SelectFailureFileDoesNotContainContent) {
-  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path))
+  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path_))
       .WillOnce(Return(0));
 
-  FileSelectedExpectFailure(fake_path);
+  SelectFileAndExpectFailure(fake_path_);
 }
 
 TEST_F(MediaRouterFileDialogTest, SelectFailureCannotReadGetFileSize) {
-  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path))
+  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path_))
       .WillOnce(Return(-1));
 
-  FileSelectedExpectFailure(fake_path);
+  SelectFileAndExpectFailure(fake_path_);
 }
 
 TEST_F(MediaRouterFileDialogTest, SelectFailureCannotReadFile) {
-  EXPECT_CALL(*mock_file_system_delegate, IsFileReadable(fake_path))
+  EXPECT_CALL(*mock_file_system_delegate, IsFileReadable(fake_path_))
       .WillOnce(Return(false));
 
-  FileSelectedExpectFailure(fake_path);
+  SelectFileAndExpectFailure(fake_path_);
 }
 
 TEST_F(MediaRouterFileDialogTest, SelectFailureFileNotSupported) {
-  EXPECT_CALL(*mock_file_system_delegate, IsFileTypeSupported(fake_path))
+  EXPECT_CALL(*mock_file_system_delegate, IsFileTypeSupported(fake_path_))
       .WillOnce(Return(false));
 
-  FileSelectedExpectFailure(fake_path);
+  SelectFileAndExpectFailure(fake_path_);
+}
+
+TEST_F(MediaRouterFileDialogTest, CancelFileSelectionAfterDelegateDeleted) {
+  mock_delegate_.reset();
+  dialog_as_listener_->FileSelectionCanceled(nullptr);
+}
+
+TEST_F(MediaRouterFileDialogTest, SelectValidFileAfterDelegateDeleted) {
+  mock_delegate_.reset();
+  SelectValidFile(fake_path_);
+}
+
+TEST_F(MediaRouterFileDialogTest, SelectInvalidFileAfterDelegateDeleted) {
+  mock_delegate_.reset();
+
+  EXPECT_CALL(*mock_file_system_delegate, GetFileSize(fake_path_))
+      .WillOnce(Return(-1));
+  dialog_as_listener_->FileSelected(fake_path_, 0, nullptr);
 }
 
 }  // namespace media_router
diff --git a/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc b/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
index 818fb69..a0f6767 100644
--- a/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
+++ b/chrome/browser/ui/toolbar/browser_actions_bar_browsertest.cc
@@ -42,7 +42,6 @@
 #include "extensions/browser/notification_types.h"
 #include "extensions/common/extension.h"
 #include "extensions/common/extension_builder.h"
-#include "extensions/common/value_builder.h"
 #include "extensions/test/extension_test_message_listener.h"
 #include "extensions/test/test_extension_dir.h"
 #include "net/dns/mock_host_resolver.h"
@@ -54,17 +53,10 @@
 scoped_refptr<const extensions::Extension> CreateExtension(
     const std::string& name,
     bool has_browser_action) {
-  extensions::DictionaryBuilder manifest;
-  manifest.Set("name", name).
-           Set("description", "an extension").
-           Set("manifest_version", 2).
-           Set("version", "1.0");
+  extensions::ExtensionBuilder builder(name);
   if (has_browser_action)
-    manifest.Set("browser_action", extensions::DictionaryBuilder().Build());
-  return extensions::ExtensionBuilder()
-      .SetManifest(manifest.Build())
-      .SetID(crx_file::id_util::GenerateId(name))
-      .Build();
+    builder.SetAction(extensions::ExtensionBuilder::ActionType::BROWSER_ACTION);
+  return builder.Build();
 }
 
 class BlockedActionWaiter
diff --git a/chrome/browser/ui/views/OWNERS b/chrome/browser/ui/views/OWNERS
index 89a1cba4..a3212204 100644
--- a/chrome/browser/ui/views/OWNERS
+++ b/chrome/browser/ui/views/OWNERS
@@ -8,6 +8,7 @@
 pbos@chromium.org
 pkasting@chromium.org
 sky@chromium.org
+collinbaker@chromium.org
 
 per-file drag_and_drop_interactive_uitest.*=lukasza@chromium.org
 per-file drag_and_drop_interactive_uitest.*=paulmeyer@chromium.org
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc b/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc
index 448d542..9ecd1af 100644
--- a/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc
+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_button.cc
@@ -7,6 +7,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/views/extensions/extensions_menu_view.h"
+#include "chrome/browser/ui/views/extensions/extensions_toolbar_container.h"
 #include "chrome/grit/generated_resources.h"
 #include "extensions/browser/extension_registry.h"
 #include "ui/base/l10n/l10n_util.h"
@@ -18,7 +19,7 @@
 
 ExtensionsToolbarButton::ExtensionsToolbarButton(
     Browser* browser,
-    ExtensionsContainer* extensions_container)
+    ExtensionsToolbarContainer* extensions_container)
     : ToolbarButton(this),
       browser_(browser),
       extensions_container_(extensions_container) {
@@ -32,10 +33,9 @@
   const int icon_size = ui::MaterialDesignController::touch_ui()
                             ? kDefaultTouchableIconSize
                             : kDefaultIconSize;
-  const SkColor normal_color =
-      GetThemeProvider()->GetColor(ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON);
   SetImage(views::Button::STATE_NORMAL,
-           gfx::CreateVectorIcon(kExtensionIcon, icon_size, normal_color));
+           gfx::CreateVectorIcon(kExtensionIcon, icon_size,
+                                 extensions_container_->GetIconColor()));
 }
 
 void ExtensionsToolbarButton::ButtonPressed(views::Button* sender,
diff --git a/chrome/browser/ui/views/extensions/extensions_toolbar_button.h b/chrome/browser/ui/views/extensions/extensions_toolbar_button.h
index a0310d5..e3acdda 100644
--- a/chrome/browser/ui/views/extensions/extensions_toolbar_button.h
+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_button.h
@@ -8,7 +8,7 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
 
 class Browser;
-class ExtensionsContainer;
+class ExtensionsToolbarContainer;
 
 // Button in the toolbar that provides access to the corresponding extensions
 // menu.
@@ -16,7 +16,7 @@
                                 public views::ButtonListener {
  public:
   ExtensionsToolbarButton(Browser* browser,
-                          ExtensionsContainer* extensions_container);
+                          ExtensionsToolbarContainer* extensions_container);
 
   void UpdateIcon();
 
@@ -25,7 +25,7 @@
   void ButtonPressed(views::Button* sender, const ui::Event& event) override;
 
   Browser* const browser_;
-  ExtensionsContainer* const extensions_container_;
+  ExtensionsToolbarContainer* const extensions_container_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionsToolbarButton);
 };
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
index d59f6b12..a260421 100644
--- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.cc
@@ -6,7 +6,7 @@
 
 #include "base/metrics/histogram_functions.h"
 #include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/global_media_controls/media_dialog_view_observer.h"
 #include "chrome/browser/ui/views/global_media_controls/media_notification_container_impl_view.h"
@@ -27,11 +27,10 @@
 
 // static
 void MediaDialogView::ShowDialog(views::View* anchor_view,
-                                 MediaToolbarButtonController* controller,
-                                 service_manager::Connector* connector) {
+                                 MediaNotificationService* service) {
   DCHECK(!instance_);
-  DCHECK(controller);
-  instance_ = new MediaDialogView(anchor_view, controller, connector);
+  DCHECK(service);
+  instance_ = new MediaDialogView(anchor_view, service);
 
   views::Widget* widget =
       views::BubbleDialogDelegateView::CreateBubble(instance_);
@@ -45,7 +44,7 @@
 // static
 void MediaDialogView::HideDialog() {
   if (IsShowing()) {
-    instance_->controller_->SetDialogDelegate(nullptr);
+    instance_->service_->SetDialogDelegate(nullptr);
     instance_->GetWidget()->Close();
   }
 
@@ -110,7 +109,7 @@
   SetPaintToLayer();
   layer()->SetRoundedCornerRadius(gfx::RoundedCornersF(corner_radius));
 
-  controller_->SetDialogDelegate(this);
+  service_->SetDialogDelegate(this);
 }
 
 gfx::Size MediaDialogView::CalculatePreferredSize() const {
@@ -155,13 +154,12 @@
 }
 
 MediaDialogView::MediaDialogView(views::View* anchor_view,
-                                 MediaToolbarButtonController* controller,
-                                 service_manager::Connector* connector)
+                                 MediaNotificationService* service)
     : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
-      controller_(controller),
+      service_(service),
       active_sessions_view_(
           AddChildView(std::make_unique<MediaNotificationListView>())) {
-  DCHECK(controller_);
+  DCHECK(service_);
 }
 
 MediaDialogView::~MediaDialogView() {
@@ -179,6 +177,6 @@
 void MediaDialogView::WindowClosing() {
   if (instance_ == this) {
     instance_ = nullptr;
-    controller_->SetDialogDelegate(nullptr);
+    service_->SetDialogDelegate(nullptr);
   }
 }
diff --git a/chrome/browser/ui/views/global_media_controls/media_dialog_view.h b/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
index 4dc7bb2..d714f51 100644
--- a/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_dialog_view.h
@@ -11,14 +11,10 @@
 #include "chrome/browser/ui/global_media_controls/media_notification_container_observer.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
-
 class MediaDialogViewObserver;
 class MediaNotificationContainerImplView;
 class MediaNotificationListView;
-class MediaToolbarButtonController;
+class MediaNotificationService;
 
 // Dialog that shows media controls that control the active media session.
 class MediaDialogView : public views::BubbleDialogDelegateView,
@@ -26,8 +22,7 @@
                         public MediaNotificationContainerObserver {
  public:
   static void ShowDialog(views::View* anchor_view,
-                         MediaToolbarButtonController* controller,
-                         service_manager::Connector* connector);
+                         MediaNotificationService* service);
   static void HideDialog();
   static bool IsShowing();
 
@@ -62,8 +57,7 @@
 
  private:
   explicit MediaDialogView(views::View* anchor_view,
-                           MediaToolbarButtonController* controller,
-                           service_manager::Connector* connector);
+                           MediaNotificationService* service);
   ~MediaDialogView() override;
 
   static MediaDialogView* instance_;
@@ -75,7 +69,7 @@
   void Init() override;
   void WindowClosing() override;
 
-  MediaToolbarButtonController* const controller_;
+  MediaNotificationService* const service_;
 
   MediaNotificationListView* const active_sessions_view_;
 
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
index 7371d0a2..8be0bc8 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.cc
@@ -8,6 +8,7 @@
 #include "chrome/app/vector_icons/vector_icons.h"
 #include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/global_media_controls/media_notification_service_factory.h"
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller.h"
 #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help.h"
 #include "chrome/browser/ui/in_product_help/global_media_controls_in_product_help_factory.h"
@@ -25,17 +26,10 @@
 #include "ui/views/animation/ink_drop.h"
 #include "ui/views/controls/button/button_controller.h"
 
-MediaToolbarButtonView::MediaToolbarButtonView(
-    const base::UnguessableToken& source_id,
-    service_manager::Connector* connector,
-    const Browser* browser)
+MediaToolbarButtonView::MediaToolbarButtonView(const Browser* browser)
     : ToolbarButton(this),
-      connector_(connector),
-      controller_(
-          std::make_unique<MediaToolbarButtonController>(source_id,
-                                                         connector_,
-                                                         this,
-                                                         browser->profile())),
+      service_(
+          MediaNotificationServiceFactory::GetForProfile(browser->profile())),
       browser_(browser) {
   GlobalMediaControlsInProductHelp* in_product_help =
       GlobalMediaControlsInProductHelpFactory::GetForProfile(
@@ -54,6 +48,10 @@
 
   // We start hidden and only show once |controller_| tells us to.
   SetVisible(false);
+
+  // Wait until we're done with everything else before creating |controller_|
+  // since it can call |Show()| synchronously.
+  controller_ = std::make_unique<MediaToolbarButtonController>(this, service_);
 }
 
 MediaToolbarButtonView::~MediaToolbarButtonView() {
@@ -77,7 +75,7 @@
   if (MediaDialogView::IsShowing()) {
     MediaDialogView::HideDialog();
   } else {
-    MediaDialogView::ShowDialog(this, controller_.get(), connector_);
+    MediaDialogView::ShowDialog(this, service_);
 
     // Inform observers. Since the promo controller cares about the dialog
     // showing, we need to ensure that it's created.
diff --git a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
index 57036f2..62240028 100644
--- a/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
+++ b/chrome/browser/ui/views/global_media_controls/media_toolbar_button_view.h
@@ -9,16 +9,9 @@
 #include "chrome/browser/ui/global_media_controls/media_toolbar_button_controller_delegate.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
 
-namespace base {
-class UnguessableToken;
-}  // namespace base
-
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
-
 class Browser;
 class GlobalMediaControlsPromoController;
+class MediaNotificationService;
 class MediaToolbarButtonController;
 class MediaToolbarButtonObserver;
 
@@ -29,9 +22,7 @@
                                public MediaToolbarButtonControllerDelegate,
                                public views::ButtonListener {
  public:
-  MediaToolbarButtonView(const base::UnguessableToken& source_id,
-                         service_manager::Connector* connector,
-                         const Browser* browser);
+  explicit MediaToolbarButtonView(const Browser* browser);
   ~MediaToolbarButtonView() override;
 
   void AddObserver(MediaToolbarButtonObserver* observer);
@@ -81,7 +72,7 @@
   // True if the in-product help bubble is currently showing.
   bool is_promo_showing_ = false;
 
-  service_manager::Connector* const connector_;
+  MediaNotificationService* const service_;
   std::unique_ptr<MediaToolbarButtonController> controller_;
   const Browser* const browser_;
 
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_unittest.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_unittest.cc
index 01c1b77..457c774 100644
--- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_unittest.cc
+++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_unittest.cc
@@ -19,7 +19,7 @@
 #if !defined(OS_CHROMEOS)
 
 TEST_F(AvatarToolbarButtonTest, HighlightMeetsMinimumContrast) {
-  auto parent = std::make_unique<ToolbarIconContainerView>(browser());
+  auto parent = std::make_unique<ToolbarAccountIconContainerView>(browser());
   auto button = std::make_unique<AvatarToolbarButton>(browser(), parent.get());
   button->set_owned_by_client();
 
diff --git a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
index caa6091..7f904ff 100644
--- a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
+++ b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
@@ -789,9 +789,16 @@
   ui_test_utils::NavigateToURL(browser(), content::GetWebUIURL("foo/"));
 }
 
+// Flaky on MacOS - crbug.com/1021209
+#if defined(OS_MACOSX)
+#define MAYBE_NoWebUIInIframe DISABLED_NoWebUIInIframe
+#else
+#define MAYBE_NoWebUIInIframe NoWebUIInIframe
+#endif
 // Make sure that the foo webui handler does not get created when we try to
 // load it inside the iframe of the login ui.
-IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest, NoWebUIInIframe) {
+IN_PROC_BROWSER_TEST_F(InlineLoginUISafeIframeBrowserTest,
+                       MAYBE_NoWebUIInIframe) {
   GURL url = GetSigninPromoURL().Resolve(
       "?source=0&access_point=0&reason=5&frameUrl=chrome://foo");
   EXPECT_CALL(foo_provider(), NewWebUI(_, _)).Times(0);
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
index bf5add6..e790fc4 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <memory>
 
+#include "base/containers/mru_cache.h"
 #include "base/metrics/field_trial_params.h"
 #include "base/metrics/histogram_macros.h"
 #include "build/build_config.h"
@@ -308,6 +309,75 @@
   }
 };
 
+// Maintains a set of thumbnails to watch, ensuring the capture count on the
+// associated WebContents stays nonzero until a valid thumbnail has been
+// captured.
+class TabHoverCardBubbleView::ThumbnailWatcher {
+ public:
+  explicit ThumbnailWatcher(TabHoverCardBubbleView* hover_card)
+      : hover_card_(hover_card) {}
+  ~ThumbnailWatcher() = default;
+
+  // Begin watching the specified thumbnail image for updates. Ideally, should
+  // trigger the associated WebContents to load (if not loaded already) and
+  // retrieve a valid thumbnail. If too many thumbnails are being watched, the
+  // least-recently watched will be unwatched.
+  void Watch(scoped_refptr<ThumbnailImage> thumbnail_image) {
+    ThumbnailImage* const ptr = thumbnail_image.get();
+    auto it = recent_observers_.Get(ptr);
+    if (it == recent_observers_.end()) {
+      recent_observers_.Put(ptr, std::make_unique<ThumbnailObserver>(
+                                     this, std::move(thumbnail_image)));
+    }
+    ptr->RequestThumbnailImage();
+  }
+
+  // Returns the current (most recent) thumbnail being watched.
+  ThumbnailImage* current_image() const {
+    return recent_observers_.empty() ? nullptr
+                                     : recent_observers_.begin()->first;
+  }
+
+  void OnNewImage(const ThumbnailImage* thumbnail, gfx::ImageSkia image) {
+    DCHECK(!recent_observers_.empty());
+    if (recent_observers_.begin()->first == thumbnail)
+      hover_card_->OnThumbnailImageAvailable(std::move(image));
+  }
+
+ private:
+  // Actually does the work of watching a single thumbnail. Cleans itself up
+  // (including unregistering as an observer) on destruction.
+  class ThumbnailObserver : public ThumbnailImage::Observer {
+   public:
+    ThumbnailObserver(ThumbnailWatcher* thumbnail_watcher,
+                      scoped_refptr<ThumbnailImage> thumbnail_image)
+        : thumbnail_watcher_(thumbnail_watcher),
+          thumbnail_image_(std::move(thumbnail_image)) {
+      scoped_observer_.Add(thumbnail_image_.get());
+    }
+    ~ThumbnailObserver() override = default;
+
+    base::Optional<gfx::Size> GetThumbnailSizeHint() const override {
+      return TabStyle::GetPreviewImageSize();
+    }
+
+    void OnThumbnailImageAvailable(gfx::ImageSkia preview_image) override {
+      thumbnail_watcher_->OnNewImage(thumbnail_image_.get(),
+                                     std::move(preview_image));
+    }
+
+   private:
+    ThumbnailWatcher* const thumbnail_watcher_;
+    scoped_refptr<ThumbnailImage> thumbnail_image_;
+    ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> scoped_observer_{
+        this};
+  };
+
+  TabHoverCardBubbleView* const hover_card_;
+  base::MRUCache<ThumbnailImage*, std::unique_ptr<ThumbnailObserver>>
+      recent_observers_{5};
+};
+
 TabHoverCardBubbleView::TabHoverCardBubbleView(Tab* tab)
     : BubbleDialogDelegateView(tab, views::BubbleBorder::TOP_LEFT) {
   // We'll do all of our own layout inside the bubble, so no need to inset this
@@ -403,6 +473,7 @@
       std::make_unique<WidgetSlideAnimationDelegate>(this);
   fade_animation_delegate_ =
       std::make_unique<WidgetFadeAnimationDelegate>(widget_);
+  thumbnail_watcher_ = std::make_unique<ThumbnailWatcher>(this);
 
   constexpr int kFootnoteVerticalMargin = 8;
   GetBubbleFrameView()->set_footnote_margins(
@@ -504,7 +575,6 @@
 
 void TabHoverCardBubbleView::FadeOutToHide() {
   delayed_show_timer_.Stop();
-  RegisterToThumbnailImageUpdates(nullptr);
   if (!widget_->IsVisible())
     return;
   slide_animation_delegate_->StopAnimation();
@@ -665,7 +735,13 @@
 
   // If the preview image feature is not enabled, |preview_image_| will be null.
   if (preview_image_ && preview_image_->GetVisible()) {
-    RegisterToThumbnailImageUpdates(tab->data().thumbnail);
+    auto thumbnail = tab->data().thumbnail;
+    if (!thumbnail) {
+      ClearPreviewImage();
+    } else if (thumbnail != thumbnail_watcher_->current_image()) {
+      waiting_for_decompress_ = true;
+      thumbnail_watcher_->Watch(thumbnail);
+    }
   }
 }
 
@@ -674,28 +750,6 @@
   domain_fade_label_->SetFade(percent);
 }
 
-void TabHoverCardBubbleView::RegisterToThumbnailImageUpdates(
-    scoped_refptr<ThumbnailImage> thumbnail_image) {
-  if (thumbnail_image_ == thumbnail_image)
-    return;
-
-  if (thumbnail_image_) {
-    thumbnail_observer_.Remove(thumbnail_image_.get());
-    thumbnail_image_.reset();
-  }
-
-  if (thumbnail_image) {
-    if (!thumbnail_image->has_data())
-      ClearPreviewImage();
-    else
-      waiting_for_decompress_ = true;
-
-    thumbnail_image_ = thumbnail_image;
-    thumbnail_observer_.Add(thumbnail_image_.get());
-    thumbnail_image->RequestThumbnailImage();
-  }
-}
-
 void TabHoverCardBubbleView::ClearPreviewImage() {
   // Check the no-preview color and size to see if it needs to be
   // regenerated. DPI or theme change can cause a regeneration.
@@ -748,10 +802,6 @@
   waiting_for_decompress_ = false;
 }
 
-base::Optional<gfx::Size> TabHoverCardBubbleView::GetThumbnailSizeHint() const {
-  return TabStyle::GetPreviewImageSize();
-}
-
 gfx::Size TabHoverCardBubbleView::CalculatePreferredSize() const {
   gfx::Size preferred_size = GetLayoutManager()->GetPreferredSize(this);
   preferred_size.set_width(TabStyle::GetPreviewImageSize().width());
diff --git a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
index e834c784..281ceb0 100644
--- a/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
+++ b/chrome/browser/ui/views/tabs/tab_hover_card_bubble_view.h
@@ -7,12 +7,10 @@
 
 #include <memory>
 
-#include "base/memory/weak_ptr.h"
 #include "base/scoped_observer.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "chrome/browser/ui/tabs/tab_utils.h"
-#include "chrome/browser/ui/thumbnails/thumbnail_image.h"
 #include "ui/views/bubble/bubble_dialog_delegate_view.h"
 
 namespace gfx {
@@ -28,8 +26,7 @@
 class Tab;
 
 // Dialog that displays an informational hover card containing page information.
-class TabHoverCardBubbleView : public views::BubbleDialogDelegateView,
-                               public ThumbnailImage::Observer {
+class TabHoverCardBubbleView : public views::BubbleDialogDelegateView {
  public:
   explicit TabHoverCardBubbleView(Tab* tab);
 
@@ -71,6 +68,7 @@
   class WidgetFadeAnimationDelegate;
   class WidgetSlideAnimationDelegate;
   class FadeLabel;
+  class ThumbnailWatcher;
 
   // Get delay in milliseconds based on tab width.
   base::TimeDelta GetDelay(int tab_width) const;
@@ -83,9 +81,7 @@
   // Update the text fade to the given percent, which should be between 0 and 1.
   void UpdateTextFade(double percent);
 
-  void RegisterToThumbnailImageUpdates(
-      scoped_refptr<ThumbnailImage> thumbnail_image);
-
+  void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image);
   void ClearPreviewImage();
 
   // Called when a hover card lands on the tab it's supposed to be a preview
@@ -93,10 +89,6 @@
   // animation completes.
   void OnHoverCardLanded();
 
-  // ThumbnailImage::Observer:
-  void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image) override;
-  base::Optional<gfx::Size> GetThumbnailSizeHint() const override;
-
   // views::BubbleDialogDelegateView:
   gfx::Size CalculatePreferredSize() const override;
 
@@ -109,6 +101,7 @@
   std::unique_ptr<WidgetFadeAnimationDelegate> fade_animation_delegate_;
   // Used to animate the tab hover card's movement between tabs.
   std::unique_ptr<WidgetSlideAnimationDelegate> slide_animation_delegate_;
+  std::unique_ptr<ThumbnailWatcher> thumbnail_watcher_;
 
   // Timestamp of the last time a hover card was visible, recorded before it is
   // hidden. This is used for metrics.
@@ -130,13 +123,8 @@
   // Counter used to keep track of the number of tab hover cards seen before a
   // tab is selected by mouse press.
   size_t hover_cards_seen_count_ = 0;
-  scoped_refptr<ThumbnailImage> thumbnail_image_;
-  ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> thumbnail_observer_{
-      this};
   bool waiting_for_decompress_ = false;
 
-  base::WeakPtrFactory<TabHoverCardBubbleView> weak_factory_{this};
-
   DISALLOW_COPY_AND_ASSIGN(TabHoverCardBubbleView);
 };
 
diff --git a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
index 65b3381..52eb36c 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.cc
@@ -5,7 +5,6 @@
 #include "chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.h"
 
 #include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/browser_command_controller.h"
 #include "chrome/browser/ui/views/autofill/payments/local_card_migration_icon_view.h"
@@ -93,11 +92,6 @@
   return kToolbarAccountIconContainerViewClassName;
 }
 
-SkColor ToolbarAccountIconContainerView::GetIconColor() const {
-  return GetThemeProvider()->GetColor(
-      ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON);
-}
-
 const views::View::Views& ToolbarAccountIconContainerView::GetChildren() const {
   return page_action_icon_container_view_->children();
 }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.h b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.h
index 781d8ac0..2365bc01 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_account_icon_container_view.h
@@ -49,8 +49,6 @@
   // ToolbarIconContainerView:
   const views::View::Views& GetChildren() const override;
 
-  SkColor GetIconColor() const;
-
   PageActionIconContainerView* page_action_icon_container_view_ = nullptr;
 
   AvatarToolbarButton* const avatar_ = nullptr;
diff --git a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
index 097081e..dc26d5b9 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.cc
@@ -7,6 +7,7 @@
 #include <memory>
 
 #include "base/stl_util.h"
+#include "chrome/browser/themes/theme_properties.h"
 #include "chrome/browser/ui/layout_constants.h"
 #include "chrome/browser/ui/views/chrome_layout_provider.h"
 #include "chrome/browser/ui/views/toolbar/toolbar_button.h"
@@ -40,8 +41,6 @@
   RemoveAllChildViews(true);
 }
 
-void ToolbarIconContainerView::UpdateAllIcons() {}
-
 void ToolbarIconContainerView::AddMainButton(views::Button* main_button) {
   DCHECK(!main_button_);
   main_button->AddObserver(this);
@@ -159,6 +158,18 @@
     observer.OnHighlightChanged();
 }
 
+void ToolbarIconContainerView::OverrideIconColor(SkColor color) {
+  icon_color_ = color;
+  UpdateAllIcons();
+}
+
+SkColor ToolbarIconContainerView::GetIconColor() const {
+  if (icon_color_)
+    return icon_color_.value();
+  return GetThemeProvider()->GetColor(
+      ThemeProperties::COLOR_TOOLBAR_BUTTON_ICON);
+}
+
 bool ToolbarIconContainerView::IsHighlighted() {
   return ShouldDisplayHighlight();
 }
diff --git a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h
index 539c682e..655909f 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h
+++ b/chrome/browser/ui/views/toolbar/toolbar_icon_container_view.h
@@ -27,8 +27,8 @@
   ToolbarIconContainerView& operator=(const ToolbarIconContainerView&) = delete;
   ~ToolbarIconContainerView() override;
 
-  // Update all the icons it contains. Override by subclass.
-  virtual void UpdateAllIcons();
+  // Update all the icons it contains.
+  virtual void UpdateAllIcons() = 0;
 
   // Adds the RHS child as well as setting its margins.
   void AddMainButton(views::Button* main_button);
@@ -36,6 +36,9 @@
   void AddObserver(Observer* obs);
   void RemoveObserver(const Observer* obs);
 
+  void OverrideIconColor(SkColor icon_color);
+  SkColor GetIconColor() const;
+
   bool IsHighlighted();
 
   // views::ButtonObserver:
@@ -84,6 +87,10 @@
   // hierarchy.
   views::Button* main_button_ = nullptr;
 
+  // Override for the icon color. If not set, |COLOR_TOOLBAR_BUTTON_ICON| is
+  // used.
+  base::Optional<SkColor> icon_color_;
+
   // Points to the child buttons that we know are currently highlighted.
   // TODO(pbos): Consider observing buttons leaving our hierarchy and removing
   // them from this set.
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc
index 7f5977a1..115c695 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -66,9 +66,7 @@
 #include "components/prefs/pref_service.h"
 #include "components/strings/grit/components_strings.h"
 #include "components/vector_icons/vector_icons.h"
-#include "content/public/browser/media_session.h"
 #include "content/public/browser/render_view_host.h"
-#include "content/public/browser/system_connector.h"
 #include "content/public/browser/web_contents.h"
 #include "media/base/media_switches.h"
 #include "ui/accessibility/ax_node_data.h"
@@ -213,10 +211,7 @@
 
   std::unique_ptr<MediaToolbarButtonView> media_button;
   if (base::FeatureList::IsEnabled(media::kGlobalMediaControls)) {
-    const base::UnguessableToken& source_id =
-        content::MediaSession::GetSourceId(browser_->profile());
-    media_button = std::make_unique<MediaToolbarButtonView>(
-        source_id, content::GetSystemConnector(), browser_);
+    media_button = std::make_unique<MediaToolbarButtonView>(browser_);
   }
 
   std::unique_ptr<ToolbarAccountIconContainerView>
diff --git a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
index 5fcdebe7..0bde8357 100644
--- a/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
+++ b/chrome/browser/ui/views/web_apps/web_app_frame_toolbar_view.cc
@@ -613,6 +613,8 @@
     web_app_origin_text_->SetTextColor(icon_color);
   if (content_settings_container_)
     content_settings_container_->SetIconColor(icon_color);
+  if (extensions_container_)
+    extensions_container_->OverrideIconColor(icon_color);
   page_action_icon_container_view_->SetIconColor(icon_color);
   web_app_menu_button_->SetColor(icon_color);
 }
diff --git a/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc b/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
index 30420f0..eee2fcb5 100644
--- a/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc
@@ -88,7 +88,7 @@
       normalized_name[index++] = '_';
       continue;
     }
-    if (c >= 'a' && c <= 'z')
+    if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
       normalized_name[index++] = c;
   }
   normalized_name[index] = 0;
@@ -286,6 +286,8 @@
     case ArcGraphicsTracingMode::kOverview: {
       base::trace_event::TraceConfig config(
           "-*,exo,viz,toplevel,gpu", base::trace_event::RECORD_CONTINUOUSLY);
+      config.EnableSystrace();
+      config.EnableSystraceEvent("i915:intel_gpu_freq_change");
       return config;
     }
   }
diff --git a/chrome/browser/web_components_browsertest.cc b/chrome/browser/web_components_browsertest.cc
new file mode 100644
index 0000000..a28ee2a
--- /dev/null
+++ b/chrome/browser/web_components_browsertest.cc
@@ -0,0 +1,64 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/policy/policy_test_utils.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "components/policy/policy_constants.h"
+#include "components/prefs/pref_service.h"
+
+namespace web_components_prefs {
+
+class WebComponentsV0Test : public policy::PolicyTest {
+  void SetUpInProcessBrowserTestFixture() override {
+    PolicyTest::SetUpInProcessBrowserTestFixture();
+    policy::PolicyMap policies;
+    policies.Set(policy::key::kWebComponentsV0Enabled,
+                 policy::POLICY_LEVEL_MANDATORY, policy::POLICY_SCOPE_USER,
+                 policy::POLICY_SOURCE_CLOUD,
+                 std::make_unique<base::Value>(true), nullptr);
+    provider_.UpdateChromePolicy(policies);
+  }
+};
+
+IN_PROC_BROWSER_TEST_F(WebComponentsV0Test, CheckWebComponentsV0Enabled) {
+  ASSERT_TRUE(embedded_test_server()->Start());
+
+  PrefService* prefs = browser()->profile()->GetPrefs();
+  EXPECT_TRUE(prefs->IsManagedPreference(prefs::kWebComponentsV0Enabled));
+  EXPECT_TRUE(prefs->GetBoolean(prefs::kWebComponentsV0Enabled));
+
+  GURL url(embedded_test_server()->GetURL("/empty.html"));
+  ui_test_utils::NavigateToURL(browser(), url);
+  constexpr char kScript[] =
+      R"({
+          let link = document.createElement('link');
+          link.setAttribute('rel','import');
+          let div = document.createElement('div');
+          try { div.createShadowRoot(); } catch {}
+          try { document.registerElement('test-element'); } catch {}
+          const observer = new ReportingObserver((reports, observer) => {
+            var needed = ['HTMLImports','ElementCreateShadowRoot',
+               'DocumentRegisterElement'];
+            for (const report of reports) {
+              needed = needed.filter(item => item !== report.body.id);
+            }
+            var allEnabled = needed.length == 0;
+            window.domAutomationController.send(allEnabled);
+          }, {types: ['deprecation'], buffered: true});
+          observer.observe();
+         })";
+  content::WebContents* web_contents =
+      browser()->tab_strip_model()->GetActiveWebContents();
+
+  content::DOMMessageQueue message_queue;
+  content::ExecuteScriptAsync(web_contents, kScript);
+  std::string message;
+  EXPECT_TRUE(message_queue.WaitForMessage(&message));
+  EXPECT_EQ("true", message);
+}
+
+}  // namespace web_components_prefs
diff --git a/chrome/common/BUILD.gn b/chrome/common/BUILD.gn
index bb07777..ce3a5b5 100644
--- a/chrome/common/BUILD.gn
+++ b/chrome/common/BUILD.gn
@@ -168,6 +168,8 @@
     "secure_origin_whitelist.h",
     "ssl_insecure_content.cc",
     "ssl_insecure_content.h",
+    "web_components_prefs.cc",
+    "web_components_prefs.h",
 
     # TODO(asvitkine): Move the next four entries to chrome/common/profiler/.
     "stack_sampling_configuration.cc",
diff --git a/chrome/common/mac/DEPS b/chrome/common/mac/DEPS
deleted file mode 100644
index d6b1434b6..0000000
--- a/chrome/common/mac/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
-  "+third_party/google_toolbox_for_mac/src",
-]
diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc
index ba5c5e8..1a707ca 100644
--- a/chrome/common/pref_names.cc
+++ b/chrome/common/pref_names.cc
@@ -2837,4 +2837,9 @@
 const char kExternalProtocolDialogShowAlwaysOpenCheckbox[] =
     "external_protocol_dialog.show_always_open_checkbox";
 
+// This pref allows the Web Components v0 APIs to be re-enabled temporarily
+// from M80 through M84.
+// TODO(937746): Remove this after M84.
+const char kWebComponentsV0Enabled[] = "web_components_v0_enabled";
+
 }  // namespace prefs
diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h
index ff74a44f..64f93ef 100644
--- a/chrome/common/pref_names.h
+++ b/chrome/common/pref_names.h
@@ -1007,6 +1007,8 @@
 
 extern const char kExternalProtocolDialogShowAlwaysOpenCheckbox[];
 
+extern const char kWebComponentsV0Enabled[];
+
 }  // namespace prefs
 
 #endif  // CHROME_COMMON_PREF_NAMES_H_
diff --git a/chrome/common/web_components_prefs.cc b/chrome/common/web_components_prefs.cc
new file mode 100644
index 0000000..41bffa7
--- /dev/null
+++ b/chrome/common/web_components_prefs.cc
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/web_components_prefs.h"
+
+#include "chrome/common/pref_names.h"
+#include "components/prefs/pref_registry_simple.h"
+
+namespace web_components_prefs {
+
+void RegisterProfilePrefs(PrefRegistrySimple* registry) {
+  registry->RegisterBooleanPref(prefs::kWebComponentsV0Enabled,
+                                /*default_value=*/false);
+}
+
+}  // namespace web_components_prefs
diff --git a/chrome/common/web_components_prefs.h b/chrome/common/web_components_prefs.h
new file mode 100644
index 0000000..863bca6
--- /dev/null
+++ b/chrome/common/web_components_prefs.h
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_COMMON_WEB_COMPONENTS_PREFS_H_
+#define CHROME_COMMON_WEB_COMPONENTS_PREFS_H_
+
+class PrefRegistrySimple;
+
+namespace web_components_prefs {
+
+// Register preferences for Web Components.
+void RegisterProfilePrefs(PrefRegistrySimple* registry);
+
+}  // namespace web_components_prefs
+
+#endif  // CHROME_COMMON_WEB_COMPONENTS_PREFS_H_
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index c890fa0f..1c8d2f8 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1140,6 +1140,7 @@
       "../browser/ui/views/tabs/tab_hover_card_bubble_view_browsertest.cc",
       "../browser/ui/views/tabs/tab_strip_browsertest.cc",
       "../browser/wake_lock/wake_lock_browsertest.cc",
+      "../browser/web_components_browsertest.cc",
 
       # If this list is used on Android in the future, these browser / speech/*
       # files will probably not be applicable.
@@ -3849,6 +3850,7 @@
       "../browser/ui/extensions/extension_message_bubble_bridge_unittest.cc",
       "../browser/ui/global_error/global_error_service_unittest.cc",
       "../browser/ui/global_media_controls/cast_media_notification_provider_unittest.cc",
+      "../browser/ui/global_media_controls/media_notification_service_unittest.cc",
       "../browser/ui/global_media_controls/media_toolbar_button_controller_unittest.cc",
       "../browser/ui/hid/hid_chooser_controller_unittest.cc",
       "../browser/ui/in_product_help/active_tab_tracker_unittest.cc",
@@ -4269,6 +4271,7 @@
       "../browser/extensions/api/web_request/web_request_api_unittest.cc",
       "../browser/extensions/api/web_request/web_request_event_details_unittest.cc",
       "../browser/extensions/api/web_request/web_request_permissions_unittest.cc",
+      "../browser/extensions/api/webstore_private/extension_install_status_unittest.cc",
       "../browser/extensions/app_data_migrator_unittest.cc",
       "../browser/extensions/blacklist_check_unittest.cc",
       "../browser/extensions/blacklist_state_fetcher_unittest.cc",
diff --git a/chrome/test/base/perf/performance_test.cc b/chrome/test/base/perf/performance_test.cc
index 8c999c95..e22a695 100644
--- a/chrome/test/base/perf/performance_test.cc
+++ b/chrome/test/base/perf/performance_test.cc
@@ -79,7 +79,7 @@
     const std::vector<std::string>& tbm_metrics) {
   perf_test::LuciTestResult result =
       perf_test::LuciTestResult::CreateForGTest();
-  result.AddOutputArtifactFile("trace/1", trace_file, "application/json");
+  result.AddOutputArtifactFile("trace/1.json", trace_file, "application/json");
   for (auto& metric : tbm_metrics)
     result.AddTag("tbmv2", metric);
 
diff --git a/chrome/test/data/policy/policy_test_cases.json b/chrome/test/data/policy/policy_test_cases.json
index a1fefb9..8d7cab83af 100644
--- a/chrome/test/data/policy/policy_test_cases.json
+++ b/chrome/test/data/policy/policy_test_cases.json
@@ -2949,6 +2949,12 @@
     ]
   },
 
+  "WebComponentsV0Enabled": {
+    "os": ["win", "linux", "mac", "chromeos", "android"],
+    "test_policy": { "WebComponentsV0Enabled": true },
+    "pref_mappings": [{ "pref": "web_components_v0_enabled" }]
+  },
+
   "GloballyScopeHTTPAuthCacheEnabled": {
     "os": ["win", "linux", "mac", "chromeos", "android"],
     "test_policy": { "GloballyScopeHTTPAuthCacheEnabled": true },
diff --git a/chrome/updater/win/net/network_fetcher.cc b/chrome/updater/win/net/network_fetcher.cc
index 1ca27e1d..c747504 100644
--- a/chrome/updater/win/net/network_fetcher.cc
+++ b/chrome/updater/win/net/network_fetcher.cc
@@ -69,8 +69,7 @@
 void NetworkFetcher::DownloadToFileComplete() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   std::move(download_to_file_complete_callback_)
-      .Run(network_fetcher_->GetFilePath(), network_fetcher_->GetNetError(),
-           network_fetcher_->GetContentSize());
+      .Run(network_fetcher_->GetNetError(), network_fetcher_->GetContentSize());
 }
 
 NetworkFetcherFactory::NetworkFetcherFactory()
diff --git a/chrome/updater/win/net/network_winhttp.cc b/chrome/updater/win/net/network_winhttp.cc
index 43923cd9..8f685eb 100644
--- a/chrome/updater/win/net/network_winhttp.cc
+++ b/chrome/updater/win/net/network_winhttp.cc
@@ -289,9 +289,7 @@
     xheader_retry_after_sec_ = xheader_retry_after_sec;
   }
 
-  std::move(fetch_started_callback_)
-      .Run(final_url_.is_valid() ? final_url_ : url_, response_code,
-           content_length);
+  std::move(fetch_started_callback_).Run(response_code, content_length);
 
   net_error_ = QueryDataAvailable();
   if (FAILED(net_error_))
@@ -525,9 +523,6 @@
           << " handle=" << handle << ", " << msg;
 
   switch (status) {
-    case WINHTTP_CALLBACK_STATUS_REDIRECT:
-      final_url_ = GURL(static_cast<base::char16*>(info));
-      break;
     case WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING:
       self_ = nullptr;
       break;
diff --git a/chrome/updater/win/net/network_winhttp.h b/chrome/updater/win/net/network_winhttp.h
index c34b602..2f7d7e6c 100644
--- a/chrome/updater/win/net/network_winhttp.h
+++ b/chrome/updater/win/net/network_winhttp.h
@@ -122,7 +122,6 @@
   int port_ = 0;
   std::string path_for_request_;
 
-  GURL final_url_;
   base::StringPiece16 verb_;
   base::StringPiece16 content_type_;
   WriteDataCallback write_data_callback_;
diff --git a/chrome/utility/BUILD.gn b/chrome/utility/BUILD.gn
index c849f2d0..f303e47 100644
--- a/chrome/utility/BUILD.gn
+++ b/chrome/utility/BUILD.gn
@@ -48,6 +48,7 @@
     "//media",
     "//net:net_with_v8",
     "//printing/buildflags",
+    "//services/data_decoder:lib",
     "//services/network:network_service",
     "//services/service_manager/public/cpp",
     "//skia",
@@ -100,7 +101,6 @@
       "//chrome/common:mojo_bindings",
       "//chrome/common/importer:interfaces",
       "//components/autofill/core/common",
-      "//services/data_decoder:lib",
       "//services/proxy_resolver:lib",
     ]
   }
diff --git a/chromecast/media/audio/capture_service/capture_service_receiver.cc b/chromecast/media/audio/capture_service/capture_service_receiver.cc
index b4180e9..55b4900 100644
--- a/chromecast/media/audio/capture_service/capture_service_receiver.cc
+++ b/chromecast/media/audio/capture_service/capture_service_receiver.cc
@@ -12,6 +12,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/message_loop/message_pump_type.h"
+#include "base/synchronization/waitable_event.h"
 #include "base/threading/sequenced_task_runner_handle.h"
 #include "chromecast/media/audio/audio_buildflags.h"
 #include "chromecast/media/audio/capture_service/constants.h"
@@ -236,9 +237,16 @@
 }
 
 void CaptureServiceReceiver::Stop() {
-  ENSURE_ON_IO_THREAD(Stop);
+  base::WaitableEvent finished;
+  StopOnTaskRunner(&finished);
+  finished.Wait();
+}
+
+void CaptureServiceReceiver::StopOnTaskRunner(base::WaitableEvent* finished) {
+  ENSURE_ON_IO_THREAD(StopOnTaskRunner, finished);
   connecting_socket_.reset();
   socket_.reset();
+  finished->Signal();
 }
 
 void CaptureServiceReceiver::SetTaskRunnerForTest(
diff --git a/chromecast/media/audio/capture_service/capture_service_receiver.h b/chromecast/media/audio/capture_service/capture_service_receiver.h
index 9fe39c8..cfb43fd 100644
--- a/chromecast/media/audio/capture_service/capture_service_receiver.h
+++ b/chromecast/media/audio/capture_service/capture_service_receiver.h
@@ -16,6 +16,7 @@
 
 namespace base {
 class SequencedTaskRunner;
+class WaitableEvent;
 }  // namespace base
 
 namespace net {
@@ -56,6 +57,7 @@
       int result);
   void OnConnectTimeout(
       ::media::AudioInputStream::AudioInputCallback* input_callback);
+  void StopOnTaskRunner(base::WaitableEvent* finished);
 
   const ::media::AudioParameters audio_params_;
 
diff --git a/chromecast/media/cma/backend/android/audio_decoder_android.cc b/chromecast/media/cma/backend/android/audio_decoder_android.cc
index 794ad828..5cf3a2b3c 100644
--- a/chromecast/media/cma/backend/android/audio_decoder_android.cc
+++ b/chromecast/media/cma/backend/android/audio_decoder_android.cc
@@ -18,6 +18,7 @@
 #include "chromecast/media/cma/backend/android/media_pipeline_backend_android.h"
 #include "chromecast/media/cma/base/decoder_buffer_adapter.h"
 #include "chromecast/media/cma/base/decoder_buffer_base.h"
+#include "chromecast/media/cma/base/decoder_config_adapter.h"
 #include "chromecast/public/media/cast_decoder_buffer.h"
 #include "media/base/audio_bus.h"
 #include "media/base/channel_layout.h"
@@ -38,7 +39,6 @@
 
 namespace {
 
-const int kNumChannels = 2;
 const int kDefaultFramesPerBuffer = 1024;
 const int kSilenceBufferFrames = 2048;
 const int kMaxOutputMs = 20;
@@ -73,8 +73,6 @@
       got_eos_(false),
       pushed_eos_(false),
       sink_error_(false),
-      rate_shifter_output_(
-          ::media::AudioBus::Create(kNumChannels, kDefaultFramesPerBuffer)),
       current_pts_(kInvalidTimestamp),
       sink_(AudioSinkManager::GetDefaultSinkType()),
       pending_output_frames_(kNoPendingOutput),
@@ -121,8 +119,9 @@
   TRACE_FUNCTION_ENTRY0();
   current_pts_ = start_pts;
   DCHECK(IsValidConfig(config_));
-  sink_.Reset(this, config_.samples_per_second, backend_->Primary(),
-              backend_->DeviceId(), backend_->ContentType());
+  sink_.Reset(this, config_.channel_number, config_.samples_per_second,
+              backend_->Primary(), backend_->DeviceId(),
+              backend_->ContentType());
   sink_->SetStreamVolumeMultiplier(volume_multiplier_);
   // Create decoder_ if necessary. This can happen if Stop() was called, and
   // SetConfig() was not called since then.
@@ -130,7 +129,7 @@
     CreateDecoder();
   }
   if (!rate_shifter_) {
-    CreateRateShifter(config_.samples_per_second);
+    CreateRateShifter(config_);
   }
   return true;
 }
@@ -259,22 +258,23 @@
     return false;
   }
 
-  bool changed_sample_rate =
-      (config.samples_per_second != config_.samples_per_second);
+  bool changed_config =
+      (config.samples_per_second != config_.samples_per_second ||
+       config.channel_number != config_.channel_number);
 
-  if (!rate_shifter_ || changed_sample_rate) {
-    CreateRateShifter(config.samples_per_second);
+  if (!rate_shifter_ || changed_config) {
+    CreateRateShifter(config);
   }
 
-  if (sink_ && changed_sample_rate) {
-    ResetSinkForNewSampleRate(config.samples_per_second);
+  if (sink_ && changed_config) {
+    ResetSinkForNewConfig(config);
   }
 
   config_ = config;
   decoder_.reset();
   CreateDecoder();
 
-  if (pending_buffer_complete_ && changed_sample_rate) {
+  if (pending_buffer_complete_ && changed_config) {
     pending_buffer_complete_ = false;
     delegate_->OnPushBufferComplete(
         MediaPipelineBackendAndroid::kBufferSuccess);
@@ -282,8 +282,9 @@
   return true;
 }
 
-void AudioDecoderAndroid::ResetSinkForNewSampleRate(int sample_rate) {
-  sink_.Reset(this, sample_rate, backend_->Primary(), backend_->DeviceId(),
+void AudioDecoderAndroid::ResetSinkForNewConfig(const AudioConfig& config) {
+  sink_.Reset(this, config.channel_number, config.samples_per_second,
+              backend_->Primary(), backend_->DeviceId(),
               backend_->ContentType());
   sink_->SetStreamVolumeMultiplier(volume_multiplier_);
   pending_output_frames_ = kNoPendingOutput;
@@ -309,18 +310,21 @@
                      base::Unretained(this)));
 }
 
-void AudioDecoderAndroid::CreateRateShifter(int samples_per_second) {
-  LOG(INFO) << __func__ << ": samples_per_second=" << samples_per_second;
+void AudioDecoderAndroid::CreateRateShifter(const AudioConfig& config) {
+  LOG(INFO) << __func__ << ": channel_number=" << config.channel_number
+            << " samples_per_second=" << config.samples_per_second;
 
   rate_shifter_info_.clear();
   rate_shifter_info_.push_back(RateShifterInfo(1.0f));
 
+  rate_shifter_output_.reset();
   rate_shifter_.reset(new ::media::AudioRendererAlgorithm());
   bool is_encrypted = false;
   rate_shifter_->Initialize(
-      ::media::AudioParameters(::media::AudioParameters::AUDIO_PCM_LINEAR,
-                               ::media::CHANNEL_LAYOUT_STEREO,
-                               samples_per_second, kDefaultFramesPerBuffer),
+      ::media::AudioParameters(
+          ::media::AudioParameters::AUDIO_PCM_LINEAR,
+          DecoderConfigAdapter::ToMediaChannelLayout(config.channel_layout),
+          config.samples_per_second, kDefaultFramesPerBuffer),
       is_encrypted);
 }
 
@@ -402,14 +406,26 @@
   delta.decoded_bytes = input_bytes;
   UpdateStatistics(delta);
 
+  bool changed_config = false;
   if (config.samples_per_second != config_.samples_per_second) {
-    // Sample rate from actual stream doesn't match supposed sample rate from
-    // the container. Update the sink and rate shifter. Note that for now we
+    LOG(INFO) << "Input sample rate changed from " << config_.samples_per_second
+              << " to " << config.samples_per_second;
+    config_.samples_per_second = config.samples_per_second;
+    changed_config = true;
+  }
+  if (config.channel_number != config_.channel_number) {
+    LOG(INFO) << "Input channel count changed from " << config_.channel_number
+              << " to " << config.channel_number;
+    config_.channel_number = config.channel_number;
+    changed_config = true;
+  }
+  if (changed_config) {
+    // Config from actual stream doesn't match supposed config from the
+    // container. Update the sink and rate shifter. Note that for now we
     // assume that this can only happen at start of stream (ie, on the first
     // decoded buffer).
-    config_.samples_per_second = config.samples_per_second;
-    CreateRateShifter(config.samples_per_second);
-    ResetSinkForNewSampleRate(config.samples_per_second);
+    CreateRateShifter(config_);
+    ResetSinkForNewConfig(config_);
   }
 
   pending_buffer_complete_ = true;
@@ -417,7 +433,8 @@
     got_eos_ = true;
     LOG(INFO) << __func__ << ": decoded buffer marked EOS";
   } else {
-    int input_frames = decoded->data_size() / (kNumChannels * sizeof(float));
+    int input_frames =
+        decoded->data_size() / (config_.channel_number * sizeof(float));
 
     DCHECK(!rate_shifter_info_.empty());
 
@@ -429,9 +446,10 @@
              backend_->AudioChannel() == AudioChannel::kRight);
       const int playout_channel =
           backend_->AudioChannel() == AudioChannel::kLeft ? 0 : 1;
-      for (int c = 0; c < kNumChannels; ++c) {
+      for (int c = 0; c < config_.channel_number; ++c) {
         if (c != playout_channel) {
-          const size_t channel_size = decoded->data_size() / kNumChannels;
+          const size_t channel_size =
+              decoded->data_size() / config_.channel_number;
           std::memcpy(decoded->writable_data() + c * channel_size,
                       decoded->writable_data() + playout_channel * channel_size,
                       channel_size);
@@ -457,12 +475,19 @@
 
     // Otherwise, queue data into the rate shifter, and then try to push the
     // rate-shifted data.
-    const uint8_t* channels[kNumChannels] = {
-        decoded->data(), decoded->data() + input_frames * sizeof(float)};
-    scoped_refptr<::media::AudioBuffer> buffer = ::media::AudioBuffer::CopyFrom(
-        ::media::kSampleFormatPlanarF32, ::media::CHANNEL_LAYOUT_STEREO,
-        kNumChannels, config_.samples_per_second, input_frames, channels,
-        base::TimeDelta(), pool_);
+    scoped_refptr<::media::AudioBuffer> buffer =
+        ::media::AudioBuffer::CreateBuffer(
+            ::media::kSampleFormatPlanarF32,
+            DecoderConfigAdapter::ToMediaChannelLayout(config_.channel_layout),
+            config_.channel_number, config_.samples_per_second, input_frames,
+            pool_);
+    buffer->set_timestamp(base::TimeDelta());
+    const int channel_data_size = input_frames * sizeof(float);
+    for (int c = 0; c < config_.channel_number; ++c) {
+      memcpy(buffer->channel_data()[c], decoded->data() + c * channel_data_size,
+             channel_data_size);
+    }
+
     rate_shifter_->EnqueueBuffer(buffer);
     rate_shifter_info_.back().input_frames += input_frames;
   }
@@ -513,8 +538,9 @@
     // Push some silence into the rate shifter so we can get out any remaining
     // rate-shifted data.
     rate_shifter_->EnqueueBuffer(::media::AudioBuffer::CreateEmptyBuffer(
-        ::media::CHANNEL_LAYOUT_STEREO, kNumChannels,
-        config_.samples_per_second, kSilenceBufferFrames, base::TimeDelta()));
+        DecoderConfigAdapter::ToMediaChannelLayout(config_.channel_layout),
+        config_.channel_number, config_.samples_per_second,
+        kSilenceBufferFrames, base::TimeDelta()));
   }
 
   DCHECK(!rate_shifter_info_.empty());
@@ -541,9 +567,10 @@
       desired_output_frames,
       config_.samples_per_second * kMaxOutputMs / kMillisecondsPerSecond);
 
-  if (desired_output_frames > rate_shifter_output_->frames()) {
-    rate_shifter_output_ =
-        ::media::AudioBus::Create(kNumChannels, desired_output_frames);
+  if (!rate_shifter_output_ ||
+      desired_output_frames > rate_shifter_output_->frames()) {
+    rate_shifter_output_ = ::media::AudioBus::Create(config_.channel_number,
+                                                     desired_output_frames);
   }
 
   int out_frames = rate_shifter_->FillBuffer(
@@ -557,8 +584,8 @@
 
   int channel_data_size = out_frames * sizeof(float);
   scoped_refptr<DecoderBufferBase> output_buffer(new DecoderBufferAdapter(
-      new ::media::DecoderBuffer(channel_data_size * kNumChannels)));
-  for (int c = 0; c < kNumChannels; ++c) {
+      new ::media::DecoderBuffer(channel_data_size * config_.channel_number)));
+  for (int c = 0; c < config_.channel_number; ++c) {
     memcpy(output_buffer->writable_data() + c * channel_data_size,
            rate_shifter_output_->channel(c), channel_data_size);
   }
@@ -586,7 +613,7 @@
       if (extra_frames > 0) {
         // Clear out extra buffered data.
         std::unique_ptr<::media::AudioBus> dropped =
-            ::media::AudioBus::Create(kNumChannels, extra_frames);
+            ::media::AudioBus::Create(config_.channel_number, extra_frames);
         int cleared_frames =
             rate_shifter_->FillBuffer(dropped.get(), 0, extra_frames, 1.0f);
         DCHECK_EQ(extra_frames, cleared_frames);
diff --git a/chromecast/media/cma/backend/android/audio_decoder_android.h b/chromecast/media/cma/backend/android/audio_decoder_android.h
index 058df998..4e9e12d 100644
--- a/chromecast/media/cma/backend/android/audio_decoder_android.h
+++ b/chromecast/media/cma/backend/android/audio_decoder_android.h
@@ -75,9 +75,9 @@
   void OnSinkError(SinkError error) override;
 
   void CleanUpPcm();
-  void ResetSinkForNewSampleRate(int sample_rate);
+  void ResetSinkForNewConfig(const AudioConfig& config);
   void CreateDecoder();
-  void CreateRateShifter(int samples_per_second);
+  void CreateRateShifter(const AudioConfig& config);
   void OnDecoderInitialized(bool success);
   void OnBufferDecoded(uint64_t input_bytes,
                        CastAudioDecoder::Status status,
diff --git a/chromecast/media/cma/backend/android/audio_sink_android.cc b/chromecast/media/cma/backend/android/audio_sink_android.cc
index d6fd4b3..706254bc 100644
--- a/chromecast/media/cma/backend/android/audio_sink_android.cc
+++ b/chromecast/media/cma/backend/android/audio_sink_android.cc
@@ -53,7 +53,7 @@
       break;
     case AudioSinkAndroid::kSinkTypeJavaBased:
       return AudioSinkAndroidAudioTrackImpl::GetMinimumBufferedTime(
-          config.samples_per_second);
+          config.channel_number, config.samples_per_second);
   }
   return kDefaultMinBufferTimeUs;
 }
@@ -70,6 +70,7 @@
 }
 
 void ManagedAudioSink::Reset(Delegate* delegate,
+                             int num_channels,
                              int samples_per_second,
                              bool primary,
                              const std::string& device_id,
@@ -83,8 +84,9 @@
       NOTREACHED() << "Native-based audio sink is not implemented yet!";
       break;
     case AudioSinkAndroid::kSinkTypeJavaBased:
-      sink_ = new AudioSinkAndroidAudioTrackImpl(
-          delegate, samples_per_second, primary, device_id, content_type);
+      sink_ = new AudioSinkAndroidAudioTrackImpl(delegate, num_channels,
+                                                 samples_per_second, primary,
+                                                 device_id, content_type);
   }
   AudioSinkManager::Get()->Add(sink_);
 }
diff --git a/chromecast/media/cma/backend/android/audio_sink_android.h b/chromecast/media/cma/backend/android/audio_sink_android.h
index 3ac772e..acf9d61 100644
--- a/chromecast/media/cma/backend/android/audio_sink_android.h
+++ b/chromecast/media/cma/backend/android/audio_sink_android.h
@@ -122,6 +122,7 @@
   // the manager. If a valid instance existed on entry it is removed from the
   // manager and deleted before creating the new one.
   void Reset(Delegate* delegate,
+             int num_channels,
              int samples_per_second,
              bool primary,
              const std::string& device_id,
diff --git a/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.cc b/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.cc
index 1aa996aa..df91515 100644
--- a/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.cc
+++ b/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.cc
@@ -6,6 +6,7 @@
 
 #include <algorithm>
 #include <string>
+#include <vector>
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -67,18 +68,21 @@
 
 // static
 int64_t AudioSinkAndroidAudioTrackImpl::GetMinimumBufferedTime(
+    int num_channels,
     int samples_per_second) {
   return Java_AudioSinkAudioTrackImpl_getMinimumBufferedTime(
-      base::android::AttachCurrentThread(), samples_per_second);
+      base::android::AttachCurrentThread(), num_channels, samples_per_second);
 }
 
 AudioSinkAndroidAudioTrackImpl::AudioSinkAndroidAudioTrackImpl(
     AudioSinkAndroid::Delegate* delegate,
+    int num_channels,
     int input_samples_per_second,
     bool primary,
     const std::string& device_id,
     AudioContentType content_type)
     : delegate_(delegate),
+      num_channels_(num_channels),
       input_samples_per_second_(input_samples_per_second),
       primary_(primary),
       device_id_(device_id),
@@ -93,10 +97,12 @@
       state_(kStateUninitialized),
       weak_factory_(this) {
   LOG(INFO) << __func__ << "(" << this << "):"
+            << " num_channels_=" << num_channels_
             << " input_samples_per_second_=" << input_samples_per_second_
             << " primary_=" << primary_ << " device_id_=" << device_id_
             << " content_type__=" << GetContentTypeName();
   DCHECK(delegate_);
+  DCHECK_GT(num_channels_, 0);
 
   // Create Java part and initialize.
   DCHECK(j_audio_sink_audiotrack_impl_.is_null());
@@ -106,7 +112,7 @@
           reinterpret_cast<intptr_t>(this)));
   Java_AudioSinkAudioTrackImpl_init(
       base::android::AttachCurrentThread(), j_audio_sink_audiotrack_impl_,
-      static_cast<int>(content_type_), input_samples_per_second_,
+      static_cast<int>(content_type_), num_channels_, input_samples_per_second_,
       kDirectBufferSize);
   // Should be set now.
   DCHECK(direct_pcm_buffer_address_);
@@ -266,20 +272,24 @@
 }
 
 void AudioSinkAndroidAudioTrackImpl::ReformatData() {
-  // Data is in planar float format, i.e. all left samples first, then all
-  // right -> "LLLLLLLLLLLLLLLLRRRRRRRRRRRRRRRR").
+  // Data is in planar float format, i.e., planar audio data for stereo is all
+  // left samples first, then all right -> "LLLLLLLLLLLLLLLLRRRRRRRRRRRRRRRR").
   // AudioTrack needs interleaved format -> "LRLRLRLRLRLRLRLRLRLRLRLRLRLRLRLR").
   DCHECK(direct_pcm_buffer_address_);
   DCHECK_EQ(0, static_cast<int>(pending_data_->data_size() % sizeof(float)));
-  CHECK(pending_data_->data_size() < kDirectBufferSize);
+  CHECK_LT(static_cast<int>(pending_data_->data_size()), kDirectBufferSize);
   int num_of_samples = pending_data_->data_size() / sizeof(float);
-  int num_of_frames = num_of_samples / 2;
-  const float* src_left = reinterpret_cast<const float*>(pending_data_->data());
-  const float* src_right = src_left + num_of_samples / 2;
+  int num_of_frames = num_of_samples / num_channels_;
+  std::vector<const float*> src(num_channels_);
+  for (int c = 0; c < num_channels_; c++) {
+    src[c] = reinterpret_cast<const float*>(pending_data_->data()) +
+             c * num_of_frames;
+  }
   float* dst = reinterpret_cast<float*>(direct_pcm_buffer_address_);
   for (int f = 0; f < num_of_frames; f++) {
-    *dst++ = *src_left++;
-    *dst++ = *src_right++;
+    for (int c = 0; c < num_channels_; c++) {
+      *dst++ = *src[c]++;
+    }
   }
 }
 
diff --git a/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.h b/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.h
index 783734e..d3feb44 100644
--- a/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.h
+++ b/chromecast/media/cma/backend/android/audio_sink_android_audiotrack_impl.h
@@ -47,7 +47,8 @@
   // Returns true if the ids populated are valid.
   static bool GetSessionIds(int* media_id, int* communication_id);
 
-  static int64_t GetMinimumBufferedTime(int samples_per_second);
+  static int64_t GetMinimumBufferedTime(int num_channels,
+                                        int samples_per_second);
 
   // Called from Java so that we can cache the addresses of the Java-managed
   // byte_buffers.
@@ -81,6 +82,7 @@
   friend class ManagedAudioSink;
 
   AudioSinkAndroidAudioTrackImpl(AudioSinkAndroid::Delegate* delegate,
+                                 int num_channels,
                                  int input_samples_per_second,
                                  bool primary,
                                  const std::string& device_id,
@@ -113,6 +115,7 @@
 
   // Config parameters provided into c'tor.
   Delegate* const delegate_;
+  const int num_channels_;
   const int input_samples_per_second_;
   const bool primary_;
   const std::string device_id_;
diff --git a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
index 5c1ff77..a48cadff 100644
--- a/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
+++ b/chromecast/media/cma/backend/android/java/src/org/chromium/chromecast/cma/backend/android/AudioSinkAudioTrackImpl.java
@@ -32,11 +32,11 @@
  * Implements an audio sink object using Android's AudioTrack module to
  * playback audio samples.
  * It assumes the following fixed configuration parameters:
- *   - 2-channel audio
  *   - PCM audio format (i.e., no encoded data like mp3)
- *   - samples are 4-byte floats, interleaved channels ("LRLRLRLRLR").
- * The only configurable audio parameter is the sample rate (typically 44.1 or
- * 48 KHz).
+ *   - samples are 4-byte floats, interleaved channels (i.e., interleaved audio
+ *     data for stereo is "LRLRLRLRLR").
+ * The configurable audio parameters are the sample rate (typically 44.1 or
+ * 48 KHz) and the channel number.
  *
  * PCM data is shared through the JNI using memory-mapped ByteBuffer objects.
  * The AudioTrack.write() function is called in BLOCKING mode. That means when
@@ -88,10 +88,9 @@
     };
 
     // Hardcoded AudioTrack config parameters.
-    private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_OUT_STEREO;
     private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_FLOAT;
     private static final int AUDIO_MODE = AudioTrack.MODE_STREAM;
-    private static final int BYTES_PER_FRAME = 2 * 4; // 2 channels, float (4-bytes)
+    private static final int BYTES_PER_SAMPLE = 4; // float (4-bytes)
 
     // Parameter to determine the proper internal buffer size of the AudioTrack instance. In order
     // to minimize latency we want a buffer as small as possible. However, to avoid underruns we
@@ -175,6 +174,7 @@
 
     // Dynamic AudioTrack config parameter.
     private int mSampleRateInHz;
+    private int mChannelCount;
 
     private AudioTrack mAudioTrack;
 
@@ -229,10 +229,33 @@
         return sAudioManager;
     }
 
+    private static int getChannelConfig(int channelCount) {
+        switch (channelCount) {
+            case 1:
+                return AudioFormat.CHANNEL_OUT_MONO;
+            case 2:
+                return AudioFormat.CHANNEL_OUT_STEREO;
+            case 4:
+                return AudioFormat.CHANNEL_OUT_QUAD;
+            case 6:
+                return AudioFormat.CHANNEL_OUT_5POINT1;
+            case 8:
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+                    return AudioFormat.CHANNEL_OUT_7POINT1_SURROUND;
+                } else {
+                    return AudioFormat.CHANNEL_OUT_7POINT1;
+                }
+            default:
+                return AudioFormat.CHANNEL_OUT_DEFAULT;
+        }
+    }
+
     @CalledByNative
-    public static long getMinimumBufferedTime(int sampleRateInHz) {
-        int sizeBytes = AudioTrack.getMinBufferSize(sampleRateInHz, CHANNEL_CONFIG, AUDIO_FORMAT);
-        long sizeUs = SEC_IN_USEC * (long) sizeBytes / (BYTES_PER_FRAME * (long) sampleRateInHz);
+    public static long getMinimumBufferedTime(int channelCount, int sampleRateInHz) {
+        int sizeBytes = AudioTrack.getMinBufferSize(
+                sampleRateInHz, getChannelConfig(channelCount), AUDIO_FORMAT);
+        long sizeUs = SEC_IN_USEC * (long) sizeBytes
+                / (BYTES_PER_SAMPLE * channelCount * (long) sampleRateInHz);
         return sizeUs + MIN_BUFFERED_TIME_PADDING_US;
     }
 
@@ -301,8 +324,8 @@
      * the shared memory buffers.
      */
     @CalledByNative
-    private void init(
-            @AudioContentType int castContentType, int sampleRateInHz, int bytesPerBuffer) {
+    private void init(@AudioContentType int castContentType, int channelCount, int sampleRateInHz,
+            int bytesPerBuffer) {
         mTag = TAG + "(" + castContentType + ":" + (sInstanceCounter++) + ")";
 
         // Setup throttled logs: pass the first 5, then every 1sec, reset after 5.
@@ -312,7 +335,7 @@
 
         Log.i(mTag,
                 "Init:"
-                        + " sampleRateInHz=" + sampleRateInHz
+                        + " channelCount=" + channelCount + " sampleRateInHz=" + sampleRateInHz
                         + " bytesPerBuffer=" + bytesPerBuffer);
 
         if (mIsInitialized) {
@@ -325,6 +348,7 @@
             return;
         }
         mSampleRateInHz = sampleRateInHz;
+        mChannelCount = channelCount;
 
         int usageType = CAST_TYPE_TO_ANDROID_USAGE_TYPE_MAP.get(castContentType);
         int contentType = CAST_TYPE_TO_ANDROID_CONTENT_TYPE_MAP.get(castContentType);
@@ -337,9 +361,11 @@
         }
         // AudioContentType.ALARM doesn't get a sessionId.
 
+        int channelConfig = getChannelConfig(mChannelCount);
         int bufferSizeInBytes = MIN_BUFFER_SIZE_MULTIPLIER
-                * AudioTrack.getMinBufferSize(mSampleRateInHz, CHANNEL_CONFIG, AUDIO_FORMAT);
-        int bufferSizeInMs = 1000 * bufferSizeInBytes / (BYTES_PER_FRAME * mSampleRateInHz);
+                * AudioTrack.getMinBufferSize(mSampleRateInHz, channelConfig, AUDIO_FORMAT);
+        int bufferSizeInMs =
+                1000 * bufferSizeInBytes / (BYTES_PER_SAMPLE * mChannelCount * mSampleRateInHz);
         Log.i(mTag,
                 "Init: create an AudioTrack of size=" + bufferSizeInBytes + " (" + bufferSizeInMs
                         + "ms) usageType=" + usageType + " contentType=" + contentType
@@ -359,7 +385,7 @@
                         .setAudioFormat(new AudioFormat.Builder()
                                                 .setEncoding(AUDIO_FORMAT)
                                                 .setSampleRate(mSampleRateInHz)
-                                                .setChannelMask(CHANNEL_CONFIG)
+                                                .setChannelMask(channelConfig)
                                                 .build());
                 if (sessionId != AudioManager.ERROR) builder.setSessionId(sessionId);
                 mAudioTrack = builder.build();
@@ -368,11 +394,11 @@
             // Using pre-M API.
             if (sessionId == AudioManager.ERROR) {
                 mAudioTrack = new AudioTrack(CAST_TYPE_TO_ANDROID_STREAM_TYPE.get(castContentType),
-                        mSampleRateInHz, CHANNEL_CONFIG, AUDIO_FORMAT, bufferSizeInBytes,
+                        mSampleRateInHz, channelConfig, AUDIO_FORMAT, bufferSizeInBytes,
                         AudioTrack.MODE_STREAM);
             } else {
                 mAudioTrack = new AudioTrack(CAST_TYPE_TO_ANDROID_STREAM_TYPE.get(castContentType),
-                        mSampleRateInHz, CHANNEL_CONFIG, AUDIO_FORMAT, bufferSizeInBytes,
+                        mSampleRateInHz, channelConfig, AUDIO_FORMAT, bufferSizeInBytes,
                         AudioTrack.MODE_STREAM, sessionId);
             }
         }
@@ -548,13 +574,13 @@
             }
         }
 
-        int framesWritten = bytesWritten / BYTES_PER_FRAME;
+        int framesWritten = bytesWritten / (BYTES_PER_SAMPLE * mChannelCount);
         mTotalFramesWritten += framesWritten;
 
         if (DEBUG_LEVEL >= 3) {
             Log.i(mTag,
-                    "  wrote " + bytesWritten + "/" + sizeInBytes
-                            + " total_bytes_written=" + (mTotalFramesWritten * BYTES_PER_FRAME)
+                    "  wrote " + bytesWritten + "/" + sizeInBytes + " total_bytes_written="
+                            + (mTotalFramesWritten * BYTES_PER_SAMPLE * mChannelCount)
                             + " took:" + (SystemClock.elapsedRealtime() - beforeMsecs) + "ms");
         }
 
diff --git a/chromecast/media/cma/decoder/cast_audio_decoder.cc b/chromecast/media/cma/decoder/cast_audio_decoder.cc
index 700ea5c..1f06881 100644
--- a/chromecast/media/cma/decoder/cast_audio_decoder.cc
+++ b/chromecast/media/cma/decoder/cast_audio_decoder.cc
@@ -203,6 +203,8 @@
     }
 
     if (decoded->channel_count() != config_.channel_number) {
+      LOG(WARNING) << "channel_count changed to " << decoded->channel_count()
+                   << " from " << config_.channel_number;
       config_.channel_number = decoded->channel_count();
       decoded_bus_.reset();
     }
diff --git a/chromeos/components/tether/host_scanner_operation.cc b/chromeos/components/tether/host_scanner_operation.cc
index 1ee7915f..fc14f60 100644
--- a/chromeos/components/tether/host_scanner_operation.cc
+++ b/chromeos/components/tether/host_scanner_operation.cc
@@ -199,7 +199,7 @@
       static_cast<TetherAvailabilityResponse*>(
           message_wrapper->GetProto().get());
   if (AreGmsCoreNotificationsDisabled(response)) {
-    PA_LOG(VERBOSE)
+    PA_LOG(WARNING)
         << "Received TetherAvailabilityResponse from device with ID "
         << remote_device.GetTruncatedDeviceIdForLogs() << " which "
         << "indicates that Google Play Services notifications are "
@@ -209,10 +209,11 @@
   } else if (!IsTetheringAvailableWithValidDeviceStatus(response)) {
     // If the received message is invalid or if it states that tethering is
     // unavailable, ignore it.
-    PA_LOG(VERBOSE)
+    PA_LOG(WARNING)
         << "Received TetherAvailabilityResponse from device with ID "
         << remote_device.GetTruncatedDeviceIdForLogs() << " which "
-        << "indicates that tethering is not available.";
+        << "indicates that tethering is not available. Response code: "
+        << response->response_code();
   } else {
     bool setup_required =
         response->response_code() ==
diff --git a/chromeos/strings/chromeos_strings_mr.xtb b/chromeos/strings/chromeos_strings_mr.xtb
index 41f1fbf..ad8c527 100644
--- a/chromeos/strings/chromeos_strings_mr.xtb
+++ b/chromeos/strings/chromeos_strings_mr.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
-<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> हे डिव्हाइस व्यवस्थापित करते आणि तुमची अॅक्टिव्हिटी पाहू शकेल.</translation>
+<translation id="1482734542997480527"><ph name="ENROLLMENT_DOMAIN" /> हे डिव्हाइस व्यवस्थापित करते आणि तुमची ॲक्टिव्हिटी पाहू शकेल.</translation>
 <translation id="1510238584712386396">लाँचर</translation>
 <translation id="1734367976349034509">या डिव्हाइसला संस्थेेने व्यवस्थापित केेले आहे</translation>
 <translation id="1930797645656624981">Chrome OS इनपुट पद्धत सेवा</translation>
@@ -13,7 +13,7 @@
 <translation id="2872961005593481000">बंद करा</translation>
 <translation id="3008341117444806826">रिफ्रेश करा</translation>
 <translation id="3838338534323494292">नवीन पासवर्ड</translation>
-<translation id="4003259559679196451">हे डिव्हाइस <ph name="ENROLLMENT_DOMAIN" />व्यवस्थापित करते आणि भेट दिलेली वेबपेज पासवर्ड आणि ईमेलसह सर्व वापरकर्ता अॅक्टिव्हिटीचा त्यांना अॅक्सेस आहे.</translation>
+<translation id="4003259559679196451">हे डिव्हाइस <ph name="ENROLLMENT_DOMAIN" />व्यवस्थापित करते आणि भेट दिलेली वेबपेज पासवर्ड आणि ईमेलसह सर्व वापरकर्ता ॲक्टिव्हिटीचा त्यांना ॲक्सेस आहे.</translation>
 <translation id="4227825898293920515"><ph name="TIME" /> मध्ये पासवर्ड एक्स्पायर होईल</translation>
 <translation id="4429881212383817840">Kerberos तिकीट लवकरच एक्स्पायर होईल</translation>
 <translation id="445059817448385655">जुना पासवर्ड</translation>
diff --git a/components/arc/test/fake_intent_helper_instance.cc b/components/arc/test/fake_intent_helper_instance.cc
index 742c5b0..4c2ddbc 100644
--- a/components/arc/test/fake_intent_helper_instance.cc
+++ b/components/arc/test/fake_intent_helper_instance.cc
@@ -114,7 +114,12 @@
 
 void FakeIntentHelperInstance::RequestUrlHandlerList(
     const std::string& url,
-    RequestUrlHandlerListCallback callback) {}
+    RequestUrlHandlerListCallback callback) {
+  std::vector<mojom::IntentHandlerInfoPtr> handlers;
+  // Post the reply to run asynchronously to match the real implementation.
+  base::ThreadTaskRunnerHandle::Get()->PostTask(
+      FROM_HERE, base::BindOnce(std::move(callback), std::move(handlers)));
+}
 
 void FakeIntentHelperInstance::RequestUrlListHandlerList(
     std::vector<mojom::UrlWithMimeTypePtr> urls,
diff --git a/components/autofill/android/java/strings/translations/autofill_strings_mr.xtb b/components/autofill/android/java/strings/translations/autofill_strings_mr.xtb
index c0bea65..48d2a9b 100644
--- a/components/autofill/android/java/strings/translations/autofill_strings_mr.xtb
+++ b/components/autofill/android/java/strings/translations/autofill_strings_mr.xtb
@@ -1,5 +1,5 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="mr">
-<translation id="1112374155460533568">अॉटोफिल पॉपअप दाखवत आहे</translation>
+<translation id="1112374155460533568">ऑटोफिल पॉपअप दाखवत आहे</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/components/autofill/core/browser/form_structure.cc b/components/autofill/core/browser/form_structure.cc
index 0e65729..542afd7f 100644
--- a/components/autofill/core/browser/form_structure.cc
+++ b/components/autofill/core/browser/form_structure.cc
@@ -823,6 +823,14 @@
       if (heuristic_type != UNKNOWN_TYPE)
         heuristics_detected_fillable_field = true;
 
+      // Clears the server prediction for CVC-fields if the corresponding Finch
+      // feature is not enabled.
+      if (!base::FeatureList::IsEnabled(
+              autofill::features::kAutofillUseServerCVCPrediction) &&
+          field_type == ServerFieldType::CREDIT_CARD_VERIFICATION_CODE) {
+        field_type = ServerFieldType::NO_SERVER_DATA;
+      }
+
       field->set_server_type(field_type);
       std::vector<AutofillQueryResponseContents::Field::FieldPrediction>
           server_predictions;
diff --git a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
index 7a715bb8..eada6b33 100644
--- a/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
+++ b/components/autofill/core/browser/payments/credit_card_fido_authenticator.cc
@@ -525,7 +525,18 @@
       "timeout_millis", base::Value::Type::INTEGER);
   options->adjusted_timeout = base::TimeDelta::FromMilliseconds(
       timeout ? timeout->GetInt() : kWebAuthnTimeoutMs);
-  options->attestation = AttestationConveyancePreference::kDirect;
+
+  const auto* attestation =
+      creation_options.FindStringKey("attestation_conveyance_preference");
+  if (!attestation || base::EqualsCaseInsensitiveASCII(*attestation, "NONE")) {
+    options->attestation = AttestationConveyancePreference::kNone;
+  } else if (base::EqualsCaseInsensitiveASCII(*attestation, "INDIRECT")) {
+    options->attestation = AttestationConveyancePreference::kIndirect;
+  } else if (base::EqualsCaseInsensitiveASCII(*attestation, "DIRECT")) {
+    options->attestation = AttestationConveyancePreference::kDirect;
+  } else {
+    NOTREACHED();
+  }
 
   // Only allow user-verifying platform authenticators.
   options->authenticator_selection = AuthenticatorSelectionCriteria(
diff --git a/components/autofill/core/common/autofill_features.cc b/components/autofill/core/common/autofill_features.cc
index d74bdca..7f4ca82 100644
--- a/components/autofill/core/common/autofill_features.cc
+++ b/components/autofill/core/common/autofill_features.cc
@@ -191,6 +191,10 @@
     "AutofillUseImprovedLabelDisambiguation",
     base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Server predictions for CVC fields are used if the feature is enabled.
+const base::Feature kAutofillUseServerCVCPrediction{
+    "AutofillUseServerCVCPrediction", base::FEATURE_ENABLED_BY_DEFAULT};
+
 #if defined(OS_ANDROID)
 // Controls whether the Autofill manual fallback for Addresses and Payments is
 // present on Android.
diff --git a/components/autofill/core/common/autofill_features.h b/components/autofill/core/common/autofill_features.h
index 98c4609..78a8bfc 100644
--- a/components/autofill/core/common/autofill_features.h
+++ b/components/autofill/core/common/autofill_features.h
@@ -57,7 +57,7 @@
 extern const base::Feature kAutofillUploadThrottling;
 extern const base::Feature kAutofillUseApi;
 extern const base::Feature kAutofillUseImprovedLabelDisambiguation;
-
+extern const base::Feature kAutofillUseServerCVCPrediction;
 #if defined(OS_ANDROID)
 extern const base::Feature kAutofillManualFallbackAndroid;
 extern const base::Feature kAutofillRefreshStyleAndroid;
diff --git a/components/exo/seat.cc b/components/exo/seat.cc
index 9a3896f..a1d0591 100644
--- a/components/exo/seat.cc
+++ b/components/exo/seat.cc
@@ -28,10 +28,6 @@
 #include "ui/events/event_utils.h"
 #include "ui/events/platform/platform_event_source.h"
 
-namespace service_manager {
-class Connector;
-}  // namespace service_manager
-
 namespace exo {
 namespace {
 
@@ -161,9 +157,8 @@
                        const std::string& mime_type,
                        const std::vector<uint8_t>& data) {
 #if defined(OS_CHROMEOS)
-  data_decoder::DecodeImage(
-      ash::Shell::Get()->connector(), data,
-      data_decoder::mojom::ImageCodec::DEFAULT, false,
+  data_decoder::DecodeImageIsolated(
+      data, data_decoder::mojom::ImageCodec::DEFAULT, false,
       std::numeric_limits<int64_t>::max(), gfx::Size(),
       base::BindOnce(&Seat::OnImageDecoded, weak_ptr_factory_.GetWeakPtr(),
                      std::move(callback), writer));
diff --git a/components/metrics/BUILD.gn b/components/metrics/BUILD.gn
index b5da617..a8ed78b 100644
--- a/components/metrics/BUILD.gn
+++ b/components/metrics/BUILD.gn
@@ -322,10 +322,12 @@
 source_set("child_call_stack_profile_builder") {
   public = [
     "call_stack_profile_builder.h",
+    "call_stack_profile_metadata.h",
     "child_call_stack_profile_collector.h",
   ]
   sources = [
     "call_stack_profile_builder.cc",
+    "call_stack_profile_metadata.cc",
     "child_call_stack_profile_collector.cc",
   ]
   public_deps = [
@@ -406,6 +408,7 @@
   sources = [
     "android_metrics_provider_unittest.cc",
     "call_stack_profile_builder_unittest.cc",
+    "call_stack_profile_metadata_unittest.cc",
     "call_stack_profile_metrics_provider_unittest.cc",
     "child_call_stack_profile_collector_unittest.cc",
     "cloned_install_detector_unittest.cc",
diff --git a/components/metrics/call_stack_profile_builder.cc b/components/metrics/call_stack_profile_builder.cc
index f00b8f4..e0c900e 100644
--- a/components/metrics/call_stack_profile_builder.cc
+++ b/components/metrics/call_stack_profile_builder.cc
@@ -83,7 +83,7 @@
     }
   }
 
-  metadata_item_count_ = metadata_provider->GetItems(&metadata_items_);
+  metadata_.RecordMetadata(metadata_provider);
 }
 
 void CallStackProfileBuilder::OnSampleCompleted(
@@ -148,8 +148,8 @@
   if (is_continued_work_)
     stack_sample_proto->set_continued_work(is_continued_work_);
 
-  *stack_sample_proto->mutable_metadata() =
-      CreateSampleMetadata(call_stack_profile->mutable_metadata_name_hash());
+  *stack_sample_proto->mutable_metadata() = metadata_.CreateSampleMetadata(
+      call_stack_profile->mutable_metadata_name_hash());
 }
 
 void CallStackProfileBuilder::OnProfileCompleted(
@@ -223,126 +223,4 @@
       });
 }
 
-bool CallStackProfileBuilder::MetadataKeyCompare::operator()(
-    const MetadataKey& a,
-    const MetadataKey& b) const {
-  return std::tie(a.name_hash, a.key) < std::tie(b.name_hash, b.key);
-}
-
-CallStackProfileBuilder::MetadataKey::MetadataKey(uint64_t name_hash,
-                                                  base::Optional<int64_t> key)
-    : name_hash(name_hash), key(key) {}
-
-CallStackProfileBuilder::MetadataKey::MetadataKey(const MetadataKey& other) =
-    default;
-CallStackProfileBuilder::MetadataKey& CallStackProfileBuilder::MetadataKey::
-operator=(const MetadataKey& other) = default;
-
-CallStackProfileBuilder::MetadataMap CallStackProfileBuilder::CreateMetadataMap(
-    base::ProfileBuilder::MetadataItemArray items,
-    size_t item_count) {
-  MetadataMap item_map;
-  for (size_t i = 0; i < item_count; ++i)
-    item_map[MetadataKey{items[i].name_hash, items[i].key}] = items[i].value;
-  return item_map;
-}
-
-CallStackProfileBuilder::MetadataMap
-CallStackProfileBuilder::GetNewOrModifiedMetadataItems(
-    const MetadataMap& current_items,
-    const MetadataMap& previous_items) {
-  MetadataMap new_or_modified_items;
-  // Find the new or modified items by subtracting any previous items that are
-  // exactly the same as the current items (i.e. equal in key *and* value).
-  auto key_and_value_comparator = [](const std::pair<MetadataKey, int64_t>& a,
-                                     const std::pair<MetadataKey, int64_t>& b) {
-    return std::tie(a.first.name_hash, a.first.key, a.second) <
-           std::tie(b.first.name_hash, b.first.key, b.second);
-  };
-  std::set_difference(
-      current_items.begin(), current_items.end(), previous_items.begin(),
-      previous_items.end(),
-      std::inserter(new_or_modified_items, new_or_modified_items.begin()),
-      key_and_value_comparator);
-  return new_or_modified_items;
-}
-
-CallStackProfileBuilder::MetadataMap
-CallStackProfileBuilder::GetDeletedMetadataItems(
-    const MetadataMap& current_items,
-    const MetadataMap& previous_items) {
-  MetadataMap deleted_items;
-  // Find the deleted metadata items by subtracting the current items from the
-  // previous items, comparing items solely map key (as opposed to map key and
-  // value as in GetNewOrModifiedMetadataItems()). Comparing by key is necessary
-  // to distinguish modified items from deleted items: subtraction of modified
-  // items, which have the same key but different values, should produce the
-  // empty set. Deleted items have a key only in |previous_items| so should be
-  // retained in the result.
-  auto key_comparator = [](const std::pair<MetadataKey, int64_t>& lhs,
-                           const std::pair<MetadataKey, int64_t>& rhs) {
-    return MetadataKeyCompare()(lhs.first, rhs.first);
-  };
-  std::set_difference(previous_items.begin(), previous_items.end(),
-                      current_items.begin(), current_items.end(),
-                      std::inserter(deleted_items, deleted_items.begin()),
-                      key_comparator);
-  return deleted_items;
-}
-
-google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
-CallStackProfileBuilder::CreateSampleMetadata(
-    google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes) {
-  DCHECK_EQ(metadata_hashes_cache_.size(),
-            static_cast<size_t>(metadata_name_hashes->size()));
-
-  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
-      metadata_items;
-  MetadataMap current_items =
-      CreateMetadataMap(metadata_items_, metadata_item_count_);
-
-  for (auto item :
-       GetNewOrModifiedMetadataItems(current_items, previous_items_)) {
-    size_t name_hash_index =
-        MaybeAppendNameHash(item.first.name_hash, metadata_name_hashes);
-
-    CallStackProfile::MetadataItem* profile_item = metadata_items.Add();
-    profile_item->set_name_hash_index(name_hash_index);
-    if (item.first.key.has_value())
-      profile_item->set_key(*item.first.key);
-    profile_item->set_value(item.second);
-  }
-
-  for (auto item : GetDeletedMetadataItems(current_items, previous_items_)) {
-    size_t name_hash_index =
-        MaybeAppendNameHash(item.first.name_hash, metadata_name_hashes);
-
-    CallStackProfile::MetadataItem* profile_item = metadata_items.Add();
-    profile_item->set_name_hash_index(name_hash_index);
-    if (item.first.key.has_value())
-      profile_item->set_key(*item.first.key);
-    // Leave the value empty to indicate that the item was deleted.
-  }
-
-  previous_items_ = std::move(current_items);
-  metadata_item_count_ = 0;
-
-  return metadata_items;
-}
-
-size_t CallStackProfileBuilder::MaybeAppendNameHash(
-    uint64_t name_hash,
-    google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes) {
-  std::unordered_map<uint64_t, int>::iterator it;
-  bool inserted;
-  int next_item_index = metadata_name_hashes->size();
-
-  std::tie(it, inserted) =
-      metadata_hashes_cache_.emplace(name_hash, next_item_index);
-  if (inserted)
-    metadata_name_hashes->Add(name_hash);
-
-  return it->second;
-}
-
 }  // namespace metrics
diff --git a/components/metrics/call_stack_profile_builder.h b/components/metrics/call_stack_profile_builder.h
index 2634c754..dc020df 100644
--- a/components/metrics/call_stack_profile_builder.h
+++ b/components/metrics/call_stack_profile_builder.h
@@ -18,6 +18,7 @@
 #include "base/profiler/profile_builder.h"
 #include "base/sampling_heap_profiler/module_cache.h"
 #include "base/time/time.h"
+#include "components/metrics/call_stack_profile_metadata.h"
 #include "components/metrics/call_stack_profile_params.h"
 #include "components/metrics/child_call_stack_profile_collector.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -100,52 +101,6 @@
                     const CallStackProfile::Stack* stack2) const;
   };
 
-  // Comparison function for the metadata map.
-  struct MetadataKey;
-  struct MetadataKeyCompare {
-    bool operator()(const MetadataKey& a, const MetadataKey& b) const;
-  };
-
-  // Definitions for a map-based representation of sample metadata.
-  struct MetadataKey {
-    MetadataKey(uint64_t name_hash, base::Optional<int64_t> key);
-
-    MetadataKey(const MetadataKey& other);
-    MetadataKey& operator=(const MetadataKey& other);
-
-    // The name_hash and optional user-specified key uniquely identifies a
-    // metadata value. See base::MetadataRecorder for details.
-    uint64_t name_hash;
-    base::Optional<int64_t> key;
-  };
-  using MetadataMap = std::map<MetadataKey, int64_t, MetadataKeyCompare>;
-
-  // Creates the metdata map from the array of items.
-  MetadataMap CreateMetadataMap(base::ProfileBuilder::MetadataItemArray items,
-                                size_t item_count);
-
-  // Returns all metadata items with new values in the current sample.
-  MetadataMap GetNewOrModifiedMetadataItems(const MetadataMap& current_items,
-                                            const MetadataMap& previous_items);
-
-  // Returns all metadata items deleted since the previous sample.
-  MetadataMap GetDeletedMetadataItems(const MetadataMap& current_items,
-                                      const MetadataMap& previous_items);
-
-  // Creates MetadataItems for the currently active metadata, adding new name
-  // hashes to |metadata_name_hashes| if necessary. The same
-  // |metadata_name_hashes| must be passed to each invocation, and must not be
-  // modified outside this function.
-  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
-  CreateSampleMetadata(
-      google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes);
-
-  // Appends the |name_hash| to |name_hashes| if it's not already
-  // present. Returns its index in |name_hashes|.
-  size_t MaybeAppendNameHash(
-      uint64_t name_hash,
-      google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes);
-
   // The module cache to use for the duration the sampling associated with this
   // ProfileBuilder.
   base::ModuleCache module_cache_;
@@ -173,15 +128,8 @@
   // The start time of a profile collection.
   const base::TimeTicks profile_start_time_;
 
-  // The data fetched from the MetadataRecorder for the next sample.
-  base::ProfileBuilder::MetadataItemArray metadata_items_;
-  size_t metadata_item_count_ = 0;
-
-  // The data fetched from the MetadataRecorder for the previous sample.
-  MetadataMap previous_items_;
-
-  // Maps metadata hash to index in |metadata_name_hash| array.
-  std::unordered_map<uint64_t, int> metadata_hashes_cache_;
+  // Maintains the current metadata to apply to samples.
+  CallStackProfileMetadata metadata_;
 
   DISALLOW_COPY_AND_ASSIGN(CallStackProfileBuilder);
 };
diff --git a/components/metrics/call_stack_profile_builder_unittest.cc b/components/metrics/call_stack_profile_builder_unittest.cc
index 4e73d67..7a9d47c1 100644
--- a/components/metrics/call_stack_profile_builder_unittest.cc
+++ b/components/metrics/call_stack_profile_builder_unittest.cc
@@ -444,7 +444,10 @@
   EXPECT_TRUE(profile.stack_sample(4).continued_work());
 }
 
-TEST(CallStackProfileBuilderTest, MetadataRecorder_NoItems) {
+// A basic test of the metadata functionality at the level of the
+// CallStackProfileBuilder. The underlying implementation in
+// CallStackProfileMetadata is tested independently.
+TEST(CallStackProfileBuilderTest, RecordMetadata) {
   base::MetadataRecorder metadata_recorder;
   auto profile_builder =
       std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
@@ -452,6 +455,7 @@
   TestModule module;
   base::Frame frame = {0x10, &module};
 
+  metadata_recorder.Set(100, base::nullopt, 10);
   profile_builder->RecordMetadata(
       metadata_recorder.CreateMetadataProvider().get());
   profile_builder->OnSampleCompleted({frame});
@@ -464,488 +468,16 @@
   ASSERT_TRUE(proto.has_call_stack_profile());
   const CallStackProfile& profile = proto.call_stack_profile();
 
-  ASSERT_EQ(0, profile.metadata_name_hash_size());
-  ASSERT_EQ(1, profile.stack_sample_size());
-  ASSERT_EQ(0, profile.stack_sample(0).metadata_size());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_RepeatItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
   ASSERT_EQ(1, profile.metadata_name_hash_size());
   EXPECT_EQ(100u, profile.metadata_name_hash(0));
 
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  ASSERT_EQ(1, profile.stack_sample(0).metadata_size());
-  EXPECT_EQ(0, profile.stack_sample(0).metadata(0).name_hash_index());
-  EXPECT_FALSE(profile.stack_sample(0).metadata(0).has_key());
-  EXPECT_EQ(10, profile.stack_sample(0).metadata(0).value());
-
-  // The second sample shouldn't have any metadata because it's all the same as
-  // the last sample.
-  ASSERT_EQ(0, profile.stack_sample(1).metadata_size());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_RepeatKeyedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(1, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  ASSERT_EQ(1, profile.stack_sample(0).metadata_size());
-  EXPECT_EQ(0, profile.stack_sample(0).metadata(0).name_hash_index());
-  EXPECT_TRUE(profile.stack_sample(0).metadata(0).has_key());
-  EXPECT_EQ(50, profile.stack_sample(0).metadata(0).key());
-  EXPECT_EQ(10, profile.stack_sample(0).metadata(0).value());
-
-  // The second sample shouldn't have any metadata because it's all the same as
-  // the last sample.
-  ASSERT_EQ(0, profile.stack_sample(1).metadata_size());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_ModifiedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  metadata_recorder.Set(100, base::nullopt, 11);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(1, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample1.metadata(0).has_key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have the metadata item with its new value.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(1, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample2.metadata(0).has_key());
-  EXPECT_EQ(11, sample2.metadata(0).value());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_ModifiedKeyedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  metadata_recorder.Set(100, 50, 11);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(1, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample1.metadata(0).has_key());
-  EXPECT_EQ(50, sample1.metadata(0).key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have the metadata item with its new value.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(1, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample2.metadata(0).has_key());
-  EXPECT_EQ(50, sample2.metadata(0).key());
-  EXPECT_EQ(11, sample2.metadata(0).value());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_NewItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  metadata_recorder.Set(100, base::nullopt, 11);
-  metadata_recorder.Set(200, base::nullopt, 20);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(2, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-  EXPECT_EQ(200u, profile.metadata_name_hash(1));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample1.metadata(0).has_key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have the new item in it.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(2, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample2.metadata(0).has_key());
-  EXPECT_EQ(11, sample2.metadata(0).value());
-
-  EXPECT_EQ(1, sample2.metadata(1).name_hash_index());
-  EXPECT_FALSE(sample2.metadata(1).has_key());
-  EXPECT_EQ(20, sample2.metadata(1).value());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_NewKeyedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  metadata_recorder.Set(100, 50, 11);
-  metadata_recorder.Set(200, 50, 20);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(2, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-  EXPECT_EQ(200u, profile.metadata_name_hash(1));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample1.metadata(0).has_key());
-  EXPECT_EQ(50, sample1.metadata(0).key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have the new item in it.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(2, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample2.metadata(0).has_key());
-  EXPECT_EQ(50, sample2.metadata(0).key());
-  EXPECT_EQ(11, sample2.metadata(0).value());
-
-  EXPECT_EQ(1, sample2.metadata(1).name_hash_index());
-  EXPECT_TRUE(sample2.metadata(1).has_key());
-  EXPECT_EQ(50, sample2.metadata(1).key());
-  EXPECT_EQ(20, sample2.metadata(1).value());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_RemovedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  metadata_recorder.Remove(100, base::nullopt);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(1, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample1.metadata(0).has_key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have a metadata item with a set name hash but an
-  // empty value to indicate that the metadata item was removed.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(1, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample1.metadata(0).has_key());
-  EXPECT_FALSE(sample2.metadata(0).has_value());
-}
-
-TEST(CallStackProfileBuilderTest, MetadataRecorder_RemovedKeyedItem) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-  metadata_recorder.Remove(100, 50);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(1, profile.metadata_name_hash_size());
-  EXPECT_EQ(100u, profile.metadata_name_hash(0));
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample1 = profile.stack_sample(0);
-  ASSERT_EQ(1, sample1.metadata_size());
-  EXPECT_EQ(0, sample1.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample1.metadata(0).has_key());
-  EXPECT_EQ(50, sample1.metadata(0).key());
-  EXPECT_EQ(10, sample1.metadata(0).value());
-
-  // The second sample should have a metadata item with a set name hash but an
-  // empty value to indicate that the metadata item was removed.
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(1, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_TRUE(sample1.metadata(0).has_key());
-  EXPECT_EQ(50, sample1.metadata(0).key());
-  EXPECT_FALSE(sample2.metadata(0).has_value());
-}
-
-TEST(CallStackProfileBuilderTest,
-     MetadataRecorder_SetMixedUnkeyedAndKeyedItems) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 20);
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
   ASSERT_EQ(1, profile.stack_sample_size());
 
   auto sample = profile.stack_sample(0);
-  ASSERT_EQ(2, sample.metadata_size());
-
+  ASSERT_EQ(1, sample.metadata_size());
   EXPECT_EQ(0, sample.metadata(0).name_hash_index());
   EXPECT_FALSE(sample.metadata(0).has_key());
-  EXPECT_EQ(20, sample.metadata(0).value());
-
-  EXPECT_EQ(0, sample.metadata(1).name_hash_index());
-  EXPECT_TRUE(sample.metadata(1).has_key());
-  EXPECT_EQ(50, sample.metadata(1).key());
-  EXPECT_EQ(10, sample.metadata(1).value());
-}
-
-TEST(CallStackProfileBuilderTest,
-     MetadataRecorder_RemoveMixedUnkeyedAndKeyedItems) {
-  base::MetadataRecorder metadata_recorder;
-  auto profile_builder =
-      std::make_unique<TestingCallStackProfileBuilder>(kProfileParams, nullptr);
-
-  TestModule module;
-  base::Frame frame = {0x10, &module};
-
-  metadata_recorder.Set(100, base::nullopt, 20);
-  metadata_recorder.Set(100, 50, 10);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  metadata_recorder.Remove(100, base::nullopt);
-  {
-    auto get_items = metadata_recorder.CreateMetadataProvider();
-    profile_builder->RecordMetadata(get_items.get());
-  }
-  profile_builder->OnSampleCompleted({frame});
-
-  profile_builder->OnProfileCompleted(base::TimeDelta::FromMilliseconds(500),
-                                      base::TimeDelta::FromMilliseconds(100));
-
-  const SampledProfile& proto = profile_builder->test_sampled_profile();
-
-  ASSERT_TRUE(proto.has_call_stack_profile());
-  const CallStackProfile& profile = proto.call_stack_profile();
-
-  ASSERT_EQ(2, profile.stack_sample_size());
-
-  auto sample2 = profile.stack_sample(1);
-  ASSERT_EQ(1, sample2.metadata_size());
-  EXPECT_EQ(0, sample2.metadata(0).name_hash_index());
-  EXPECT_FALSE(sample2.metadata(0).has_key());
-  EXPECT_FALSE(sample2.metadata(0).has_value());
+  EXPECT_EQ(10, sample.metadata(0).value());
 }
 
 }  // namespace metrics
diff --git a/components/metrics/call_stack_profile_metadata.cc b/components/metrics/call_stack_profile_metadata.cc
new file mode 100644
index 0000000..191de3af
--- /dev/null
+++ b/components/metrics/call_stack_profile_metadata.cc
@@ -0,0 +1,148 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/metrics/call_stack_profile_metadata.h"
+
+#include <algorithm>
+#include <iterator>
+#include <tuple>
+
+namespace metrics {
+
+CallStackProfileMetadata::CallStackProfileMetadata() = default;
+
+CallStackProfileMetadata::~CallStackProfileMetadata() = default;
+
+// This function is invoked on the profiler thread while the target thread is
+// suspended so must not take any locks, including indirectly through use of
+// heap allocation, LOG, CHECK, or DCHECK.
+void CallStackProfileMetadata::RecordMetadata(
+    base::ProfileBuilder::MetadataProvider* metadata_provider) {
+  metadata_item_count_ = metadata_provider->GetItems(&metadata_items_);
+}
+
+google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
+CallStackProfileMetadata::CreateSampleMetadata(
+    google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes) {
+  DCHECK_EQ(metadata_hashes_cache_.size(),
+            static_cast<size_t>(metadata_name_hashes->size()));
+
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
+      metadata_items;
+  MetadataMap current_items =
+      CreateMetadataMap(metadata_items_, metadata_item_count_);
+
+  for (auto item :
+       GetNewOrModifiedMetadataItems(current_items, previous_items_)) {
+    size_t name_hash_index =
+        MaybeAppendNameHash(item.first.name_hash, metadata_name_hashes);
+
+    CallStackProfile::MetadataItem* profile_item = metadata_items.Add();
+    profile_item->set_name_hash_index(name_hash_index);
+    if (item.first.key.has_value())
+      profile_item->set_key(*item.first.key);
+    profile_item->set_value(item.second);
+  }
+
+  for (auto item : GetDeletedMetadataItems(current_items, previous_items_)) {
+    size_t name_hash_index =
+        MaybeAppendNameHash(item.first.name_hash, metadata_name_hashes);
+
+    CallStackProfile::MetadataItem* profile_item = metadata_items.Add();
+    profile_item->set_name_hash_index(name_hash_index);
+    if (item.first.key.has_value())
+      profile_item->set_key(*item.first.key);
+    // Leave the value empty to indicate that the item was deleted.
+  }
+
+  previous_items_ = std::move(current_items);
+  metadata_item_count_ = 0;
+
+  return metadata_items;
+}
+
+bool CallStackProfileMetadata::MetadataKeyCompare::operator()(
+    const MetadataKey& a,
+    const MetadataKey& b) const {
+  return std::tie(a.name_hash, a.key) < std::tie(b.name_hash, b.key);
+}
+
+CallStackProfileMetadata::MetadataKey::MetadataKey(uint64_t name_hash,
+                                                   base::Optional<int64_t> key)
+    : name_hash(name_hash), key(key) {}
+
+CallStackProfileMetadata::MetadataKey::MetadataKey(const MetadataKey& other) =
+    default;
+CallStackProfileMetadata::MetadataKey& CallStackProfileMetadata::MetadataKey::
+operator=(const MetadataKey& other) = default;
+
+CallStackProfileMetadata::MetadataMap
+CallStackProfileMetadata::CreateMetadataMap(
+    base::ProfileBuilder::MetadataItemArray items,
+    size_t item_count) {
+  MetadataMap item_map;
+  for (size_t i = 0; i < item_count; ++i)
+    item_map[MetadataKey{items[i].name_hash, items[i].key}] = items[i].value;
+  return item_map;
+}
+
+CallStackProfileMetadata::MetadataMap
+CallStackProfileMetadata::GetNewOrModifiedMetadataItems(
+    const MetadataMap& current_items,
+    const MetadataMap& previous_items) {
+  MetadataMap new_or_modified_items;
+  // Find the new or modified items by subtracting any previous items that are
+  // exactly the same as the current items (i.e. equal in key *and* value).
+  auto key_and_value_comparator = [](const std::pair<MetadataKey, int64_t>& a,
+                                     const std::pair<MetadataKey, int64_t>& b) {
+    return std::tie(a.first.name_hash, a.first.key, a.second) <
+           std::tie(b.first.name_hash, b.first.key, b.second);
+  };
+  std::set_difference(
+      current_items.begin(), current_items.end(), previous_items.begin(),
+      previous_items.end(),
+      std::inserter(new_or_modified_items, new_or_modified_items.begin()),
+      key_and_value_comparator);
+  return new_or_modified_items;
+}
+
+CallStackProfileMetadata::MetadataMap
+CallStackProfileMetadata::GetDeletedMetadataItems(
+    const MetadataMap& current_items,
+    const MetadataMap& previous_items) {
+  MetadataMap deleted_items;
+  // Find the deleted metadata items by subtracting the current items from the
+  // previous items, comparing items solely map key (as opposed to map key and
+  // value as in GetNewOrModifiedMetadataItems()). Comparing by key is necessary
+  // to distinguish modified items from deleted items: subtraction of modified
+  // items, which have the same key but different values, should produce the
+  // empty set. Deleted items have a key only in |previous_items| so should be
+  // retained in the result.
+  auto key_comparator = [](const std::pair<MetadataKey, int64_t>& lhs,
+                           const std::pair<MetadataKey, int64_t>& rhs) {
+    return MetadataKeyCompare()(lhs.first, rhs.first);
+  };
+  std::set_difference(previous_items.begin(), previous_items.end(),
+                      current_items.begin(), current_items.end(),
+                      std::inserter(deleted_items, deleted_items.begin()),
+                      key_comparator);
+  return deleted_items;
+}
+
+size_t CallStackProfileMetadata::MaybeAppendNameHash(
+    uint64_t name_hash,
+    google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes) {
+  std::unordered_map<uint64_t, int>::iterator it;
+  bool inserted;
+  int next_item_index = metadata_name_hashes->size();
+
+  std::tie(it, inserted) =
+      metadata_hashes_cache_.emplace(name_hash, next_item_index);
+  if (inserted)
+    metadata_name_hashes->Add(name_hash);
+
+  return it->second;
+}
+
+}  // namespace metrics
diff --git a/components/metrics/call_stack_profile_metadata.h b/components/metrics/call_stack_profile_metadata.h
new file mode 100644
index 0000000..e23f6d3
--- /dev/null
+++ b/components/metrics/call_stack_profile_metadata.h
@@ -0,0 +1,93 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_METADATA_H_
+#define COMPONENTS_METRICS_CALL_STACK_PROFILE_METADATA_H_
+
+#include <map>
+#include <unordered_map>
+#include <utility>
+
+#include "base/optional.h"
+#include "base/profiler/metadata_recorder.h"
+#include "third_party/metrics_proto/sampled_profile.pb.h"
+
+namespace metrics {
+
+// Helper class for maintaining metadata state across samples and generating
+// metadata proto messages.
+class CallStackProfileMetadata {
+ public:
+  CallStackProfileMetadata();
+  ~CallStackProfileMetadata();
+
+  CallStackProfileMetadata(const CallStackProfileMetadata& other) = delete;
+  CallStackProfileMetadata& operator=(const CallStackProfileMetadata& other) =
+      delete;
+
+  // Records the metadata for the next sample.
+  void RecordMetadata(
+      base::ProfileBuilder::MetadataProvider* metadata_provider);
+
+  // Creates MetadataItems for the currently active metadata, adding new name
+  // hashes to |metadata_name_hashes| if necessary. The same
+  // |metadata_name_hashes| must be passed to each invocation, and must not be
+  // modified outside this function.
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem>
+  CreateSampleMetadata(
+      google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes);
+
+ private:
+  // Comparison function for the metadata map.
+  struct MetadataKey;
+  struct MetadataKeyCompare {
+    bool operator()(const MetadataKey& a, const MetadataKey& b) const;
+  };
+
+  // Definitions for a map-based representation of sample metadata.
+  struct MetadataKey {
+    MetadataKey(uint64_t name_hash, base::Optional<int64_t> key);
+
+    MetadataKey(const MetadataKey& other);
+    MetadataKey& operator=(const MetadataKey& other);
+
+    // The name_hash and optional user-specified key uniquely identifies a
+    // metadata value. See base::MetadataRecorder for details.
+    uint64_t name_hash;
+    base::Optional<int64_t> key;
+  };
+  using MetadataMap = std::map<MetadataKey, int64_t, MetadataKeyCompare>;
+
+  // Creates the metdata map from the array of items.
+  MetadataMap CreateMetadataMap(base::ProfileBuilder::MetadataItemArray items,
+                                size_t item_count);
+
+  // Returns all metadata items with new values in the current sample.
+  MetadataMap GetNewOrModifiedMetadataItems(const MetadataMap& current_items,
+                                            const MetadataMap& previous_items);
+
+  // Returns all metadata items deleted since the previous sample.
+  MetadataMap GetDeletedMetadataItems(const MetadataMap& current_items,
+                                      const MetadataMap& previous_items);
+
+  // Appends the |name_hash| to |name_hashes| if it's not already
+  // present. Returns its index in |name_hashes|.
+  size_t MaybeAppendNameHash(
+      uint64_t name_hash,
+      google::protobuf::RepeatedField<uint64_t>* metadata_name_hashes);
+
+  // The data provided for the next sample.
+  base::ProfileBuilder::MetadataItemArray metadata_items_;
+  size_t metadata_item_count_ = 0;
+
+  // The data provided for the previous sample.
+  MetadataMap previous_items_;
+
+  // Maps metadata hash to index in |metadata_name_hash| array.
+  std::unordered_map<uint64_t, int> metadata_hashes_cache_;
+};
+
+}  // namespace metrics
+
+#endif  // COMPONENTS_METRICS_CALL_STACK_PROFILE_METADATA_H_
diff --git a/components/metrics/call_stack_profile_metadata_unittest.cc b/components/metrics/call_stack_profile_metadata_unittest.cc
new file mode 100644
index 0000000..936fe0d
--- /dev/null
+++ b/components/metrics/call_stack_profile_metadata_unittest.cc
@@ -0,0 +1,288 @@
+// 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/metrics/call_stack_profile_metadata.h"
+
+#include <utility>
+
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/metrics_proto/sampled_profile.pb.h"
+
+namespace metrics {
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_NoItems) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(0, name_hashes.size());
+  ASSERT_EQ(0, items.size());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_SetItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(1, name_hashes.size());
+  EXPECT_EQ(100u, name_hashes[0]);
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_EQ(10, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_SetKeyedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(1, name_hashes.size());
+  EXPECT_EQ(100u, name_hashes[0]);
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_TRUE(items[0].has_key());
+  EXPECT_EQ(50, items[0].key());
+  EXPECT_EQ(10, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_RepeatItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  // The second sample shouldn't have any metadata because it's all the same
+  // as the last sample.
+  EXPECT_EQ(1, name_hashes.size());
+  EXPECT_TRUE(items.empty());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_RepeatKeyedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  // The second sample shouldn't have any metadata because it's all the same
+  // as the last sample.
+  EXPECT_EQ(1, name_hashes.size());
+  EXPECT_TRUE(items.empty());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_ModifiedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Set(100, base::nullopt, 11);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  EXPECT_EQ(1, name_hashes.size());
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_EQ(11, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_ModifiedKeyedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Set(100, 50, 11);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  EXPECT_EQ(1, name_hashes.size());
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_TRUE(items[0].has_key());
+  EXPECT_EQ(50, items[0].key());
+  EXPECT_EQ(11, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_NewItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Set(101, base::nullopt, 11);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(2, name_hashes.size());
+  EXPECT_EQ(101u, name_hashes[1]);
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(1, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_EQ(11, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_NewKeyedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Set(101, 50, 11);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(2, name_hashes.size());
+  EXPECT_EQ(101u, name_hashes[1]);
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(1, items[0].name_hash_index());
+  EXPECT_TRUE(items[0].has_key());
+  EXPECT_EQ(50, items[0].key());
+  EXPECT_EQ(11, items[0].value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_RemovedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Remove(100, base::nullopt);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  EXPECT_EQ(1, name_hashes.size());
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_FALSE(items[0].has_value());
+}
+
+TEST(CallStackProfileMetadataTest, MetadataRecorder_RemovedKeyedItem) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Remove(100, 50);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  EXPECT_EQ(1, name_hashes.size());
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_TRUE(items[0].has_key());
+  EXPECT_EQ(50, items[0].key());
+  EXPECT_FALSE(items[0].has_value());
+}
+
+TEST(CallStackProfileMetadataTest,
+     MetadataRecorder_SetMixedUnkeyedAndKeyedItems) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 20);
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(2, items.size());
+
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_EQ(20, items[0].value());
+
+  EXPECT_EQ(0, items[1].name_hash_index());
+  EXPECT_TRUE(items[1].has_key());
+  EXPECT_EQ(50, items[1].key());
+  EXPECT_EQ(10, items[1].value());
+}
+
+TEST(CallStackProfileMetadataTest,
+     MetadataRecorder_RemoveMixedUnkeyedAndKeyedItems) {
+  base::MetadataRecorder metadata_recorder;
+  CallStackProfileMetadata metadata;
+  google::protobuf::RepeatedField<uint64_t> name_hashes;
+
+  metadata_recorder.Set(100, base::nullopt, 20);
+  metadata_recorder.Set(100, 50, 10);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  (void)metadata.CreateSampleMetadata(&name_hashes);
+
+  metadata_recorder.Remove(100, base::nullopt);
+  metadata.RecordMetadata(metadata_recorder.CreateMetadataProvider().get());
+  google::protobuf::RepeatedPtrField<CallStackProfile::MetadataItem> items =
+      metadata.CreateSampleMetadata(&name_hashes);
+
+  ASSERT_EQ(1, items.size());
+  EXPECT_EQ(0, items[0].name_hash_index());
+  EXPECT_FALSE(items[0].has_key());
+  EXPECT_FALSE(items[0].has_value());
+}
+
+}  // namespace metrics
diff --git a/components/os_crypt/key_storage_linux.cc b/components/os_crypt/key_storage_linux.cc
index c16d6a2..7a29616 100644
--- a/components/os_crypt/key_storage_linux.cc
+++ b/components/os_crypt/key_storage_linux.cc
@@ -34,6 +34,8 @@
 const char KeyStorageLinux::kKey[] = "Chromium Safe Storage";
 #endif
 
+#if defined(USE_LIBSECRET) || defined(USE_KEYRING) || defined(USE_KWALLET)
+
 namespace {
 
 const char* SelectedLinuxBackendToString(
@@ -60,6 +62,9 @@
 
 }  // namespace
 
+#endif  // defined(USE_LIBSECRET) || defined(USE_KEYRING) ||
+        // defined(USE_KWALLET)
+
 // static
 std::unique_ptr<KeyStorageLinux> KeyStorageLinux::CreateService(
     const os_crypt::Config& config) {
diff --git a/components/payments/content/BUILD.gn b/components/payments/content/BUILD.gn
index 4730ae1..711d338 100644
--- a/components/payments/content/BUILD.gn
+++ b/components/payments/content/BUILD.gn
@@ -57,6 +57,8 @@
       "service_worker_payment_instrument.cc",
       "service_worker_payment_instrument.h",
     ]
+
+    deps += [ "//components/payments/core:method_strings" ]
   }
 }
 
@@ -98,6 +100,7 @@
     "//components/payments/content/utility",
     "//components/payments/core",
     "//components/payments/core:error_strings",
+    "//components/payments/core:method_strings",
     "//components/strings",
     "//components/webdata/common",
     "//content/public/browser",
diff --git a/components/payments/content/android/BUILD.gn b/components/payments/content/android/BUILD.gn
index ee1aa95..3ec052c3 100644
--- a/components/payments/content/android/BUILD.gn
+++ b/components/payments/content/android/BUILD.gn
@@ -77,3 +77,11 @@
 
   template = "java_templates/ErrorStrings.java.tmpl"
 }
+
+java_cpp_strings("method_strings_generated_srcjar") {
+  sources = [
+    "//components/payments/core/method_strings.cc",
+  ]
+
+  template = "java_templates/MethodStrings.java.tmpl"
+}
diff --git a/components/payments/content/android/java_templates/MethodStrings.java.tmpl b/components/payments/content/android/java_templates/MethodStrings.java.tmpl
new file mode 100644
index 0000000..ac2f6653
--- /dev/null
+++ b/components/payments/content/android/java_templates/MethodStrings.java.tmpl
@@ -0,0 +1,17 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This file is autogenerated by
+//   //components/payments/content/android/BUILD.gn
+
+package org.chromium.components.payments;
+
+/** Payment method identifier strings. */
+public abstract class MethodStrings {{
+
+{NATIVE_STRINGS}
+
+    // Prevent instantiation.
+    private MethodStrings() {{}}
+}}
diff --git a/components/payments/content/manifest_verifier.cc b/components/payments/content/manifest_verifier.cc
index 0fa85aa..3549be8 100644
--- a/components/payments/content/manifest_verifier.cc
+++ b/components/payments/content/manifest_verifier.cc
@@ -14,6 +14,7 @@
 #include "base/strings/string_util.h"
 #include "components/payments/content/payment_manifest_web_data_service.h"
 #include "components/payments/content/utility/payment_manifest_parser.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_manifest_downloader.h"
 #include "components/payments/core/url_util.h"
 #include "components/webdata/common/web_data_results.h"
@@ -91,13 +92,10 @@
     for (const auto& method : app.second->enabled_methods) {
       // For non-URL payment method names, only names published by W3C should be
       // supported. Keep this in sync with AndroidPaymentAppFinder.java.
-      // https://w3c.github.io/payment-method-basic-card/
-      // https://w3c.github.io/webpayments/proposals/interledger-payment-method.html
-      // https://w3c.github.io/webpayments-methods-credit-transfer-direct-debit/
-      // https://w3c.github.io/webpayments-methods-tokenization/
-      if (method == "basic-card" || method == "interledger" ||
-          method == "payee-credit-transfer" ||
-          method == "payer-credit-transfer" || method == "tokenized-card") {
+      if (method == methods::kBasicCard || method == methods::kInterledger ||
+          method == methods::kPayeeCreditTransfer ||
+          method == methods::kPayerCreditTransfer ||
+          method == methods::kTokenizedCard) {
         verified_method_names.emplace_back(method);
         continue;
       }
diff --git a/components/payments/content/payment_request.cc b/components/payments/content/payment_request.cc
index 85b9c542..18ca4f9 100644
--- a/components/payments/content/payment_request.cc
+++ b/components/payments/content/payment_request.cc
@@ -21,6 +21,7 @@
 #include "components/payments/core/can_make_payment_query.h"
 #include "components/payments/core/error_strings.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/native_error_strings.h"
 #include "components/payments/core/payment_details.h"
 #include "components/payments/core/payment_details_validation.h"
@@ -45,8 +46,8 @@
 using ::payments::mojom::HasEnrolledInstrumentQueryResult;
 
 bool IsGooglePaymentMethodInstrumentSelected(const std::string& method_name) {
-  return method_name == kGooglePayMethodName ||
-         method_name == kAndroidPayMethodName;
+  return method_name == methods::kGooglePay ||
+         method_name == methods::kAndroidPay;
 }
 
 std::string GetNotSupportedErrorMessage(PaymentRequestSpec* spec) {
@@ -196,8 +197,8 @@
       spec_->request_payer_phone(), spec_->request_payer_name());
 
   // Log metrics around which payment methods are requested by the merchant.
-  GURL google_pay_url(kGooglePayMethodName);
-  GURL android_pay_url(kAndroidPayMethodName);
+  GURL google_pay_url(methods::kGooglePay);
+  GURL android_pay_url(methods::kAndroidPay);
   // Looking for payment methods that are NOT google-related payment methods.
   auto non_google_it =
       std::find_if(spec_->url_payment_method_identifiers().begin(),
diff --git a/components/payments/content/payment_request_spec.cc b/components/payments/content/payment_request_spec.cc
index c8b7c31..98e2306 100644
--- a/components/payments/content/payment_request_spec.cc
+++ b/components/payments/content/payment_request_spec.cc
@@ -13,6 +13,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/payments/content/payment_request_converter.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/payments/core/payment_method_data.h"
 #include "components/payments/core/payment_request_data_util.h"
@@ -77,10 +78,6 @@
 
 }  // namespace
 
-const char kBasicCardMethodName[] = "basic-card";
-const char kGooglePayMethodName[] = "https://google.com/pay";
-const char kAndroidPayMethodName[] = "https://android.com/pay";
-
 PaymentRequestSpec::PaymentRequestSpec(
     mojom::PaymentOptionsPtr options,
     mojom::PaymentDetailsPtr details,
@@ -109,7 +106,7 @@
       &stringified_method_data_);
 
   query_for_quota_ = stringified_method_data_;
-  if (base::Contains(payment_method_identifiers_set_, "basic-card") &&
+  if (base::Contains(payment_method_identifiers_set_, methods::kBasicCard) &&
       PaymentsExperimentalFeatures::IsEnabled(
           features::kStrictHasEnrolledAutofillInstrument)) {
     query_for_quota_["basic-card-payment-options"] = {
diff --git a/components/payments/content/payment_request_spec.h b/components/payments/content/payment_request_spec.h
index 80735b7..1b93d50 100644
--- a/components/payments/content/payment_request_spec.h
+++ b/components/payments/content/payment_request_spec.h
@@ -25,12 +25,6 @@
 
 class PaymentInstrument;
 
-// Identifier for the basic card payment method and google-related payment
-// methods in the PaymentMethodData.
-extern const char kBasicCardMethodName[];
-extern const char kGooglePayMethodName[];
-extern const char kAndroidPayMethodName[];
-
 // The spec contains all the options that the merchant has specified about this
 // Payment Request. It's a (mostly) read-only view, which can be updated in
 // certain occasions by the merchant (see API).
diff --git a/components/payments/content/payment_request_state.cc b/components/payments/content/payment_request_state.cc
index f3a6310..40699a93 100644
--- a/components/payments/content/payment_request_state.cc
+++ b/components/payments/content/payment_request_state.cc
@@ -26,6 +26,7 @@
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/error_strings.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_instrument.h"
 #include "components/payments/core/payment_request_data_util.h"
 #include "components/payments/core/payments_experimental_features.h"
@@ -178,8 +179,8 @@
 
   std::vector<std::string> instrument_method_names =
       instrument->GetInstrumentMethodNames();
-  if (base::Contains(instrument_method_names, kGooglePayMethodName) ||
-      base::Contains(instrument_method_names, kAndroidPayMethodName)) {
+  if (base::Contains(instrument_method_names, methods::kGooglePay) ||
+      base::Contains(instrument_method_names, methods::kAndroidPay)) {
     journey_logger_->SetEventOccurred(
         JourneyLogger::EVENT_AVAILABLE_METHOD_GOOGLE);
   } else {
@@ -301,7 +302,8 @@
   // used for canMakePayment().
   bool supported = are_requested_methods_supported_;
   if (supported && is_show_user_gesture_ &&
-      base::Contains(spec_->payment_method_identifiers_set(), "basic-card") &&
+      base::Contains(spec_->payment_method_identifiers_set(),
+                     methods::kBasicCard) &&
       !has_non_autofill_instrument_ && !has_enrolled_instrument_ &&
       PaymentsExperimentalFeatures::IsEnabled(
           features::kStrictHasEnrolledAutofillInstrument)) {
diff --git a/components/payments/content/payment_response_helper.cc b/components/payments/content/payment_response_helper.cc
index 99ae92c..8691a032 100644
--- a/components/payments/content/payment_response_helper.cc
+++ b/components/payments/content/payment_response_helper.cc
@@ -16,6 +16,7 @@
 #include "components/autofill/core/browser/geo/autofill_country.h"
 #include "components/autofill/core/browser/geo/phone_number_i18n.h"
 #include "components/payments/content/payment_request_spec.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_request_data_util.h"
 #include "components/payments/core/payment_request_delegate.h"
 
@@ -167,7 +168,7 @@
   // "visa") or through basic-card's supportedNetworks.
   payment_response->method_name =
       spec_->IsMethodSupportedThroughBasicCard(method_name_)
-          ? kBasicCardMethodName
+          ? methods::kBasicCard
           : method_name_;
   payment_response->stringified_details = stringified_details_;
 
diff --git a/components/payments/content/service_worker_payment_app_factory.cc b/components/payments/content/service_worker_payment_app_factory.cc
index e7cdf36..b358554 100644
--- a/components/payments/content/service_worker_payment_app_factory.cc
+++ b/components/payments/content/service_worker_payment_app_factory.cc
@@ -20,6 +20,7 @@
 #include "components/payments/content/payment_manifest_web_data_service.h"
 #include "components/payments/content/utility/payment_manifest_parser.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_manifest_downloader.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/browser_thread.h"
@@ -70,7 +71,7 @@
   for (const auto& enabled_method : app.enabled_methods) {
     for (const auto& request : requests) {
       if (enabled_method == request->supported_method) {
-        if (enabled_method != "basic-card" ||
+        if (enabled_method != methods::kBasicCard ||
             BasicCardCapabilitiesMatch(app.capabilities, request)) {
           return true;
         }
diff --git a/components/payments/content/service_worker_payment_instrument.cc b/components/payments/content/service_worker_payment_instrument.cc
index 16b783c..0c6afae 100644
--- a/components/payments/content/service_worker_payment_instrument.cc
+++ b/components/payments/content/service_worker_payment_instrument.cc
@@ -14,6 +14,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "components/payments/content/payment_event_response_util.h"
 #include "components/payments/content/payment_request_converter.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_request_delegate.h"
 #include "content/public/browser/browser_context.h"
 #include "content/public/browser/payment_app_provider.h"
@@ -452,7 +453,7 @@
 
   // Return true if 'basic-card' is not the only matched payment method. This
   // assumes that there is no duplicated payment methods.
-  if (method != "basic-card")
+  if (method != methods::kBasicCard)
     return true;
 
   // Checking the capabilities of this instrument against the modifier.
diff --git a/components/payments/core/BUILD.gn b/components/payments/core/BUILD.gn
index d63ab7b..beff207 100644
--- a/components/payments/core/BUILD.gn
+++ b/components/payments/core/BUILD.gn
@@ -76,6 +76,7 @@
 
   deps = [
     ":error_strings",
+    ":method_strings",
     "//base",
     "//components/autofill/core/browser",
     "//components/keyed_service/core",
@@ -108,6 +109,13 @@
   ]
 }
 
+jumbo_static_library("method_strings") {
+  sources = [
+    "method_strings.cc",
+    "method_strings.h",
+  ]
+}
+
 jumbo_static_library("test_support") {
   testonly = true
   sources = [
diff --git a/components/payments/core/autofill_payment_instrument.cc b/components/payments/core/autofill_payment_instrument.cc
index 29b531b6..4210463 100644
--- a/components/payments/core/autofill_payment_instrument.cc
+++ b/components/payments/core/autofill_payment_instrument.cc
@@ -23,6 +23,7 @@
 #include "components/payments/core/autofill_card_validation.h"
 #include "components/payments/core/basic_card_response.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_request_base_delegate.h"
 #include "components/payments/core/payment_request_data_util.h"
 #include "components/payments/core/payments_experimental_features.h"
@@ -195,7 +196,7 @@
     const std::string& payment_method_identifier,
     bool* is_valid) const {
   // This instrument only matches basic-card.
-  *is_valid = payment_method_identifier == "basic-card";
+  *is_valid = payment_method_identifier == methods::kBasicCard;
 }
 
 base::WeakPtr<PaymentInstrument> AutofillPaymentInstrument::AsWeakPtr() {
diff --git a/components/payments/core/method_strings.cc b/components/payments/core/method_strings.cc
new file mode 100644
index 0000000..38d0b9e1
--- /dev/null
+++ b/components/payments/core/method_strings.cc
@@ -0,0 +1,23 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/payments/core/method_strings.h"
+
+namespace payments {
+namespace methods {
+
+// Please keep the list alphabetized.
+// Each string must be on a single line to correctly generate
+// MethodStrings.java.
+
+const char kAndroidPay[] = "https://android.com/pay";
+const char kBasicCard[] = "basic-card";
+const char kGooglePay[] = "https://google.com/pay";
+const char kInterledger[] = "interledger";
+const char kPayeeCreditTransfer[] = "payee-credit-transfer";
+const char kPayerCreditTransfer[] = "payer-credit-transfer";
+const char kTokenizedCard[] = "tokenized-card";
+
+}  // namespace methods
+}  // namespace payments
diff --git a/components/payments/core/method_strings.h b/components/payments/core/method_strings.h
new file mode 100644
index 0000000..a1617980
--- /dev/null
+++ b/components/payments/core/method_strings.h
@@ -0,0 +1,47 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_PAYMENTS_CORE_METHOD_STRINGS_H_
+#define COMPONENTS_PAYMENTS_CORE_METHOD_STRINGS_H_
+
+namespace payments {
+namespace methods {
+
+// Non-translatable payment method identifier strings.
+
+// These strings are referenced from both C++ and Java (through the
+// auto-generated file MethodStrings.java).
+
+// Please keep the list alphabetized.
+
+// Android Pay method name.
+extern const char kAndroidPay[];
+
+// Basic Card method name. https://w3c.github.io/payment-method-basic-card/
+extern const char kBasicCard[];
+
+// Google Pay method name.
+// https://developers.google.com/pay/api/web/guides/tutorial
+extern const char kGooglePay[];
+
+// Interledger method name.
+// https://w3c.github.io/webpayments/proposals/interledger/
+extern const char kInterledger[];
+
+// Credit Transfer method name.
+// https://w3c.github.io/payment-method-credit-transfer/
+extern const char kPayeeCreditTransfer[];
+
+// Credit Transfer method name.
+// https://w3c.github.io/payment-method-credit-transfer/
+extern const char kPayerCreditTransfer[];
+
+// Tokenized Card method name.
+// https://w3c.github.io/webpayments-methods-tokenization/
+extern const char kTokenizedCard[];
+
+}  // namespace methods
+}  // namespace payments
+
+#endif  // COMPONENTS_PAYMENTS_CORE_METHOD_STRINGS_H_
diff --git a/components/payments/core/payment_request_data_util.cc b/components/payments/core/payment_request_data_util.cc
index fbf73851..f61dc5d8 100644
--- a/components/payments/core/payment_request_data_util.cc
+++ b/components/payments/core/payment_request_data_util.cc
@@ -17,6 +17,7 @@
 #include "components/autofill/core/browser/personal_data_manager.h"
 #include "components/autofill/core/browser/validation.h"
 #include "components/payments/core/basic_card_response.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_method_data.h"
 #include "components/payments/core/payments_validators.h"
 #include "components/payments/core/url_util.h"
@@ -96,7 +97,6 @@
   DCHECK(out_url_payment_method_identifiers->empty());
   DCHECK(out_payment_method_identifiers->empty());
 
-  const char kBasicCardMethodName[] = "basic-card";
   const std::set<std::string> kBasicCardNetworks{
       "amex",       "diners", "discover", "jcb",
       "mastercard", "mir",    "unionpay", "visa"};
@@ -109,7 +109,7 @@
 
     out_payment_method_identifiers->insert(method_data_entry.supported_method);
 
-    if (method_data_entry.supported_method == kBasicCardMethodName) {
+    if (method_data_entry.supported_method == methods::kBasicCard) {
       if (method_data_entry.supported_networks.empty()) {
         // Empty |supported_networks| means all networks are supported.
         out_supported_networks->insert(out_supported_networks->end(),
@@ -153,7 +153,7 @@
 
   for (const PaymentMethodData& method_data_entry : method_data) {
     // Ignore |supported_types| if |supported_method| is not "basic-card".
-    if (method_data_entry.supported_method != "basic-card")
+    if (method_data_entry.supported_method != methods::kBasicCard)
       continue;
 
     for (const autofill::CreditCard::CardType& card_type :
diff --git a/components/performance_manager/performance_manager_impl.h b/components/performance_manager/performance_manager_impl.h
index 053e4733..da7f2f9 100644
--- a/components/performance_manager/performance_manager_impl.h
+++ b/components/performance_manager/performance_manager_impl.h
@@ -30,8 +30,6 @@
 
 // The performance manager is a rendezvous point for binding to performance
 // manager interfaces.
-// TODO(https://crbug.com/910288): Refactor this along with the
-// {Frame|Page|Process|System}ResourceCoordinator classes.
 class PerformanceManagerImpl : public PerformanceManager {
  public:
   using FrameNodeCreationCallback = base::OnceCallback<void(FrameNodeImpl*)>;
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json
index 8338f8a..ba6a2577 100644
--- a/components/policy/resources/policy_templates.json
+++ b/components/policy/resources/policy_templates.json
@@ -123,6 +123,8 @@
 #     chrome.* -> Chrome policy definition list
 #     chrome_os -> Chrome policy definition list, when building OS_CHROMEOS
 #
+#   Note: chrome_frame is deprecated.
+#
 # Annotations:
 #   Additional information is specified under keys 'features' and
 #   'example_value'. These are used in the generated documentation and example
@@ -18963,6 +18965,28 @@
         |TIME_LIMITS| applies daily usage limit and makes app unavailable after the limit is reached on the given day. Usage limit is specified in |daily_limit_mins|. Usage limit is reset daily at the UTC time passed in |reset_at|.
         This policy is only used for child users.
         This policy is complementary to 'UsageTimeLimit'. Restrictions specified in 'UsageTimeLimit' like screen time and bedtime will be enforced regardless of 'PerAppTimeLimits'.'''
+    },
+    {
+      'name': 'WebComponentsV0Enabled',
+      'owners': ['masonfreed@chromium.org', 'chrishtr@chromium.org'],
+      'type': 'main',
+      'schema': { 'type': 'boolean' },
+      'example_value': True,
+      'id': 644,
+      'supported_on': ['chrome.*:80-84', 'chrome_os:80-84', 'android:80-84', 'webview_android:80-84'],
+      'features': {
+        'dynamic_refresh': False,
+        'per_profile': True,
+      },
+      'caption': '''Re-enable Web Components v0 API until M84.''',
+      'tags': [],
+      'desc': ''' The Web Components v0 APIs (Shadow DOM v0, Custom Elements v0, and HTML Imports) were deprecated in 2018, and have been disabled by default starting in M80. This policy allows these features to be selectively re-enabled until M84.
+
+      If this policy is set to True, the Web Components v0 features will be enabled for all sites.
+
+      If this policy is set to False or not set, the Web Components v0 features will be disabled by default, starting in M80.
+
+      This policy will be removed after Chrome 84.'''
     }
   ],
 
@@ -19787,6 +19811,6 @@
   ],
   'placeholders': [],
   'deleted_policy_ids': [412, 546, 562, 569],
-  'highest_id_currently_used': 643,
+  'highest_id_currently_used': 644,
   'highest_atomic_group_id_currently_used': 38
 }
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb
index af9746c..f5672b2 100644
--- a/components/policy/resources/policy_templates_es-419.xtb
+++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -443,7 +443,7 @@
 
           Si la estableces, los usuarios no podrán cambiarla ni anularla.
 
-          Si no la estableces, el dictado estará inicialmente inhabilitado en la pantalla de acceso, pero el usuario podrá habilitarlo en cualquier momento.</translation>
+          Si no la estableces, la lupa estará inicialmente inhabilitada en la pantalla de acceso, pero el usuario podrá habilitarla en cualquier momento.</translation>
 <translation id="1675002386741412210">Compatible con:</translation>
 <translation id="1695708467571967752">Esta política controla si los usuarios pueden reproducir contenido multimedia cuando está bloqueado el dispositivo.
 
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb
index 8ef6a7c..cfca06a 100644
--- a/components/policy/resources/policy_templates_es.xtb
+++ b/components/policy/resources/policy_templates_es.xtb
@@ -371,6 +371,7 @@
 
       Si esta configuración se inhabilita o no se configura, los usuarios de empresas no
       podrán utilizar ARC.</translation>
+<translation id="1553956579506604198">Bloquea las extensiones externas para que no puedan instalarse</translation>
 <translation id="1559980755219453326">Esta política controla si se recogen datos sobre extensiones y complementos.
 
       Si no se asigna ningún valor a esta política o se le asigna el valor "True", se recogen datos de extensiones y complementos.
@@ -498,6 +499,19 @@
       Si se le asigna una URL válida, <ph name="PRODUCT_NAME" /> descarga la lista de sitios web de esa URL y aplica las reglas como si se hubieran configurado con la política <ph name="SITELIST_POLICY_NAME" />.
 
       Para obtener más información sobre la política <ph name="IEEM_SITELIST_POLICY" /> de Internet Explorer, visita la página https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
+<translation id="1839278886947586809">
+      Esta política se eliminó en M80. No es necesaria porque ahora
+      WebDriver es compatible con todas las políticas.
+
+      La política permite que los usuarios de la función WebDriver anulen
+      las políticas que puedan interferir en su funcionamiento.
+
+      Actualmente, esta política inhabilita las políticas SitePerProcess y IsolateOrigins.
+
+      Si la política está habilitada, WebDriver puede anular las políticas
+      incompatibles.
+      Si la política está inhabilitada o no está configurada, WebDriver no puede
+      anular las políticas incompatibles.</translation>
 <translation id="1843117931376765605">Frecuencia con la que se actualiza la política de usuario</translation>
 <translation id="1844620919405873871">Configura las políticas relacionadas con el desbloqueo rápido.</translation>
 <translation id="1845405905602899692">Configuración de kiosco</translation>
@@ -656,6 +670,7 @@
           Si no se establece esta política, se utilizarán los cuatro esquemas.</translation>
 <translation id="2067011586099792101">Bloquear acceso a sitios no incluidos en paquetes de contenido</translation>
 <translation id="2073552873076775140">Permitir inicio de sesión en <ph name="PRODUCT_NAME" /></translation>
+<translation id="2075732129949889165">Playbook de Ansible Crostini</translation>
 <translation id="2077129598763517140">Utilizar aceleración por hardware cuando esté disponible</translation>
 <translation id="2077273864382355561">Retraso de desconexión de pantalla cuando el dispositivo funciona con la batería</translation>
 <translation id="2082205219176343977">Configurar la versión mínima permitida de Chrome en el dispositivo.</translation>
@@ -666,6 +681,17 @@
 <translation id="2107601598727098402">
         Esta política está obsoleta en M72. Sustitúyela por la política CloudManagementEnrollmentToken.
         </translation>
+<translation id="2108169571875569435">Esta política determina qué comando se debe usar para abrir direcciones URL en un navegador alternativo.
+
+      Si no se asigna ningún valor a esta política, se usa el navegador predeterminado según el sistema operativo: Internet Explorer en Windows o Safari en Mac OS X. En Linux, si la política se inhabilita, el navegador alternativo no se podrá abrir.
+
+      Si se le asigna un valor de <ph name="INTERNET_EXPLORER_VALUE_PLACEHOLDER" />, <ph name="FIREFOX_VALUE_PLACEHOLDER" />, <ph name="SAFARI_VALUE_PLACEHOLDER" /> o
+      <ph name="OPERA_VALUE_PLACEHOLDER" />, se abrirá ese navegador siempre que esté instalado. <ph name="INTERNET_EXPLORER_VALUE_PLACEHOLDER" /> solo está
+      disponible en Windows, y <ph name="SAFARI_VALUE_PLACEHOLDER" /> solo está disponible en Windows y
+      Mac OS X.
+
+      Si se asigna una ruta de archivo a esta política, el archivo se usa como
+      ejecutable.</translation>
 <translation id="2111016292707172233">Permite que Tocar para buscar esté disponible en la vista de contenido de <ph name="PRODUCT_NAME" />.
 
       Si habilitas esta opción, Tocar para buscar estará disponible para los usuarios y podrán decidir cuándo activarla o desactivarla.
@@ -761,6 +787,9 @@
       de vídeo solo estará disponible para las URL configuradas en VideoCaptureAllowedUrls.
 
       Esta política afecta a todos los tipos de entradas de vídeo y no solo a la cámara integrada.</translation>
+<translation id="2197625019569762163">Si se asigna el valor "true" a esta política, se mostrará un teclado numérico por defecto para introducir la contraseña en la pantalla de inicio de sesión. Si quieren, los usuarios pueden cambiar al teclado normal.
+
+      Si se configura la política, los usuarios no podrán cambiarla. Si no se le asigna ningún valor o se le asigna el valor "false", no tiene ningún efecto.</translation>
 <translation id="2201555246697292490">Configurar la lista blanca de mensajes nativos</translation>
 <translation id="220280840901385239">Permite que los usuarios añadan excepciones para permitir el contenido mixto bloqueable.</translation>
 <translation id="2204753382813641270">Controlar opción para ocultar archivos automáticamente</translation>
@@ -947,6 +976,17 @@
 
       Si se utiliza el valor False, aparecerá un mensaje de error en lugar del mensaje de configuración de red.</translation>
 <translation id="2498238926436517902">Ocultar siempre automáticamente los archivos</translation>
+<translation id="2505805702054675476">Esta política controla los parámetros de línea de comandos que inician el navegador alternativo.
+
+      Si no se asigna ningún valor a esta política, solo se pasa la URL como parámetro de línea de comandos.
+
+      Si se le asigna una lista de cadenas, cada cadena se pasa al navegador alternativo como parámetros de línea de comandos separados. En Windows, los parámetros se unen con espacios. En Mac OS X y Linux, un parámetro puede contener espacios y procesarse como un solo parámetro.
+
+      Si un elemento contiene la variable <ph name="URL_PLACEHOLDER" />, se sustituye por la URL de la página que se vaya a abrir.
+
+      Si ningún elemento contiene la variable <ph name="URL_PLACEHOLDER" />, la URL se añade al final de la línea de comandos.
+
+      Las variables de entorno se expanden. En Windows, <ph name="ENV_VARIABLE_WIN_EXAMPLE" /> se sustituye por el valor de la variable de entorno <ph name="ENV_VARIABLE_VALUE" />. En Mac OS X y Linux, <ph name="ENV_VARIABLE_UNIX_EXAMPLE" /> se sustituye por el valor de la variable de entorno <ph name="ENV_VARIABLE" />.</translation>
 <translation id="250670737672448119">Habilita la función de accesibilidad de resaltado del símbolo de intercalación de texto.
 
           Esta función resalta la zona que rodea al cursor de texto mientras se está editando texto.
@@ -971,6 +1011,11 @@
 <translation id="2517466659416174529">Permite inmovilizar las pestañas que están en segundo plano</translation>
 <translation id="2518231489509538392">Permitir reproducción de audio</translation>
 <translation id="2521581787935130926">Mostrar el acceso directo de aplicaciones en la barra de marcadores</translation>
+<translation id="2526082146909867346">Permite definir una lista de patrones de URL que especifica los sitios web en los que <ph name="PRODUCT_NAME" /> debe seleccionar automáticamente un certificado de cliente si el sitio web lo solicita.
+
+          El valor debe ser una matriz de diccionarios JSON de tipo string. Todos los diccionarios deben tener el formato <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" /> (<ph name="URL_PATTERN_PLACEHOLDER" /> es un patrón de configuración de contenido). <ph name="FILTER_PLACEHOLDER" /> restringe los certificados de cliente que puede seleccionar automáticamente el navegador. Independientemente del filtro, solo se seleccionarán los certificados que coincidan con la solicitud de certificado del servidor. Por ejemplo, si <ph name="FILTER_PLACEHOLDER" /> tiene el formato <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_FILTER_EXAMPLE" />, solo se seleccionarán certificados de cliente emitidos por un certificado en el que CommonName tenga el valor <ph name="ISSUER_CN_PLACEHOLDER" />. Si <ph name="FILTER_PLACEHOLDER" /> contiene las secciones <ph name="ISSUER_STRING_VALUE" /> y <ph name="SUBJECT_STRING_VALUE" />, el certificado de cliente debe cumplir las dos condiciones para poder seleccionarlo. Si <ph name="FILTER_PLACEHOLDER" /> define una organización ("O"), para poder seleccionar el certificado, este debe tener al menos una organización que coincida con el valor especificado. SI <ph name="FILTER_PLACEHOLDER" /> define una unidad organizativa ("OU"), para poder seleccionar el certificado, este debe tener al menos una unidad organizativa que coincida con el valor especificado. Si <ph name="FILTER_PLACEHOLDER" /> es el diccionario vacío <ph name="EMPTY_DICTIONARY" />, no se aplicarán más restricciones a la selección de certificados de cliente.
+
+          Si no se asigna ningún valor a esta política, la selección automática no se realizará en ningún sitio web.</translation>
 <translation id="2529659024053332711">Permite especificar el comportamiento del navegador al iniciarlo.
 
           Si seleccionas Abrir página Nueva pestaña, la página Nueva pestaña se abrirá cada vez que inicies <ph name="PRODUCT_NAME" />.
@@ -1406,6 +1451,13 @@
 <translation id="3236046242843493070">Patrones de URL desde los que se puede instalar secuencias de comandos de usuario, aplicaciones y extensiones</translation>
 <translation id="3240609035816615922">Política de acceso a la configuración de impresoras.</translation>
 <translation id="3240655340884151271">Dirección NIC MAC integrada en la base</translation>
+<translation id="3242756958360374888">Contiene una lista de patrones que se utilizan para controlar la visibilidad de las cuentas en <ph name="PRODUCT_NAME" />.
+
+      Cada cuenta de Google del dispositivo se comparará con los patrones almacenados en esta política para determinar la visibilidad de la cuenta en <ph name="PRODUCT_NAME" />. La cuenta será visible si su nombre coincide con algún patrón de la lista. Si no, se ocultará.
+
+      El carácter comodín "*" se puede utilizar para buscar coincidencias con cero o más caracteres arbitrarios. Como el carácter de escape es "\", para que coincida con los caracteres "*", "?" o "\", debes colocar el carácter "\" delante de ellos.
+
+      Si esta política no se configura, todas las cuentas de Google del dispositivo serán visibles en <ph name="PRODUCT_NAME" />.</translation>
 <translation id="3251500716404598358">Configura las políticas para cambiar de navegador.
 
       Los sitios web configurados se abrirán automáticamente en un navegador diferente a <ph name="PRODUCT_NAME" />.</translation>
@@ -1456,6 +1508,19 @@
 
       Esta política solo se puede establecer según los ajustes recomendados. Puedes utilizarla para mover un conjunto de configuraciones regionales recomendadas al principio de la lista, pero los usuarios siempre pueden elegir cualquier configuración regional admitida por <ph name="PRODUCT_OS_NAME" /> para su sesión.
       </translation>
+<translation id="3378482432905539452">Esta política está obsoleta. Utiliza <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> para controlar la disponibilidad del complemento Flash y <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> para controlar si el visor de PDF integrado se debe usar para abrir archivos PDF.
+
+      Especifica una lista de complementos que el usuario puede habilitar o inhabilitar en <ph name="PRODUCT_NAME" />.
+
+      Los caracteres comodín "*" y "?" se pueden utilizar para buscar coincidencias con secuencias de caracteres arbitrarios. El comodín "*" coincide con cualquier número de caracteres, mientras que "?" especifica un único carácter opcional (es decir, coincide con un carácter o no coincide con ninguno). Como el carácter de escape es "\", para que coincida con los caracteres "*", "?" o "\", debes colocar el carácter "\" delante de ellos.
+
+      Si habilitas esta opción, la lista de complementos especificada se podrá utilizar en <ph name="PRODUCT_NAME" />. Los usuarios pueden habilitar o inhabilitar los complementos en "about:plugins", aunque el complemento coincida con un patrón de DisabledPlugins. Además, los usuarios pueden habilitar e inhabilitar los complementos que no coincidan con ningún patrón de DisabledPlugins, DisabledPluginsExceptions o EnabledPlugins.
+
+      La política debería permitir que los complementos se incluyan en una lista negra de forma estricta cuando la lista "DisabledPlugins" contenga entradas con caracteres comodín (como inhabilitar todos los complementos "*" o inhabilitar todos los complementos Java "*Java*"), pero el administrador quiera habilitar una versión específica, por ejemplo, "IcedTea Java 2.3". En esta política, es posible especificar las versiones concretas.
+
+      Ten en cuenta que se deben excluir tanto el nombre del complemento como el nombre del grupo de complementos. Cada grupo de complementos se muestra en una sección independiente de "about:plugins", y cada sección puede incluir uno o varios complementos. Por ejemplo, el complemento "Shockwave Flash" pertenece al grupo "Adobe Flash Player", y ambos nombres deben coincidir con un elemento de la lista de excepciones si ese complemento se quiere excluir de la lista negra.
+
+      Si no se asigna ningún valor a esta política, cualquier complemento que coincida con los patrones de "DisabledPlugins" se bloqueará y se inhabilitará, y el usuario no podrá habilitarlos.</translation>
 <translation id="3381968327636295719">Utilizar el navegador del host de forma predeterminada</translation>
 <translation id="3388153794103186066">Permite configurar una lista con las URL de los sitios web a los que se concederá permiso automáticamente para acceder a un dispositivo USB con los ID de proveedor y producto facilitados. Cada elemento de la lista debe contener tanto el dispositivo como la URL para que la política sea válida. Cada elemento de los dispositivos puede incluir un campo de ID de proveedor e ID de producto. Los ID que se omitan se considerarán comodines, con una excepción: no se puede especificar un ID de producto sin que se especifique también un ID de proveedor. De lo contrario, la política no será válida y se ignorará.
 
@@ -2184,6 +2249,15 @@
 <translation id="445270821089253489">Controla el tipo de información del usuario y del dispositivo que se proporciona.</translation>
 <translation id="4453913621209182880">Permitir imprimir solo con gráficos de fondo</translation>
 <translation id="4454820008017317557">Mostrar el icono de la barra de herramientas de <ph name="PRODUCT_NAME" /></translation>
+<translation id="4458977366860064210">Permite usar la implementación antigua de <ph name="CORS" /> en vez de la nueva implementación de <ph name="CORS" />.
+
+      Si se asigna el valor "True" a esta política, se usa la implementación antigua, la cual debería ser compatible con las versiones anteriores.
+
+      Si se le asigna el valor "False", o no se establece, se usa la nueva implementación, lo que podría causar distintos problemas de compatibilidad según la empresa.
+
+      Esta política se eliminará después de dos hitos.
+
+      Para consultar más información sobre <ph name="CORS" />, visita <ph name="CORS_HELP_URL" />.</translation>
 <translation id="4467952432486360968">Bloquear cookies de terceros</translation>
 <translation id="4474167089968829729">Habilitar el almacenamiento de contraseñas en el administrador de contraseñas</translation>
 <translation id="4476769083125004742">Si se asigna el valor <ph name="BLOCK_GEOLOCATION_SETTING" /> a esta política, las aplicaciones para Android no tendrán acceso a la información sobre la ubicación. Si se le asigna cualquier otro valor o no se configura, el usuario tendrá que dar su consentimiento cuando una aplicación para Android quiera acceder a los datos de ubicación.</translation>
@@ -2229,6 +2303,17 @@
 <translation id="4534500438517478692">Nombre de restricción de Android:</translation>
 <translation id="4541530620466526913">Cuentas locales del dispositivo</translation>
 <translation id="4543502256674577024">Configuración de actualización de dispositivos</translation>
+<translation id="4548555985107150628">Esta política está obsoleta. Utiliza <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> para controlar la disponibilidad del complemento Flash y <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> para controlar si el visor de PDF integrado se debe usar para abrir archivos PDF.
+
+      Define una lista de complementos que están habilitados en <ph name="PRODUCT_NAME" /> y evita que los usuarios cambien esta configuración.
+
+      Los caracteres comodín "*" y "?" se pueden utilizar para buscar coincidencias con secuencias de caracteres arbitrarios. El comodín "*" coincide con cualquier número de caracteres, mientras que "?" especifica un único carácter opcional (es decir, coincide con un carácter o no coincide con ninguno). Como el carácter de escape es "\", para que coincida con los caracteres "*", "?" o "\", debes colocar el carácter "\" delante de ellos.
+
+      En <ph name="PRODUCT_NAME" />, siempre se utiliza la lista definida de complementos si están instalados. Los complementos están marcados como habilitados en "about:plugins" y los usuarios no pueden inhabilitarlos.
+
+      Ten en cuenta que esta política anula tanto DisabledPlugins como DisabledPluginsExceptions.
+
+      Si no se asigna ningún valor a esta política, el usuario puede inhabilitar cualquier complemento instalado en el sistema.</translation>
 <translation id="4554651132977135445">Modo de procesamiento loopback de políticas del usuario</translation>
 <translation id="4554841826517980623">Esta política controla si la función Uso compartido de archivos de <ph name="PRODUCT_NAME" /> debe usar <ph name="NETBIOS_PROTOCOL" /> para buscar elementos compartidos en la red.
       Si se le asigna el valor "True" a esta política, la búsqueda usará el protocolo <ph name="NETBIOS_PROTOCOL" /> para encontrar elementos compartidos en la red.
@@ -3021,6 +3106,19 @@
 
       Las URL (como https://example.com/una/ruta) solo se identifican como appIDs U2F, mientras que los dominios (como example.com) se identifican únicamente como IDs RP de WebAuthn. Por ello, para incluir tanto las API WebAuthn como U2F de un determinado sitio web, se deben indican la URL appID y el dominio.</translation>
 <translation id="5836064773277134605">Restringe el intervalo de puertos UDP utilizado por el host de acceso remoto</translation>
+<translation id="5855010364142818361">Esta política controla parámetros de línea de comandos para Chrome en Internet Explorer.
+
+      La política no tendrá ningún efecto si no está instalada la extensión "Compatibilidad con navegadores antiguos" para Internet Explorer.
+
+      Si no se asigna ningún valor a esta política, Internet Explorer solo pasa la URL a Chrome como parámetro de línea de comandos.
+
+      Si se le asigna una lista de cadenas, todas las cadenas se unen con espacios y se pasan a Chrome como parámetros de línea de comandos.
+
+      Si un elemento contiene la variable <ph name="URL_PLACEHOLDER" />, se sustituye por la URL de la página que se vaya a abrir.
+
+      Si ningún elemento contiene la variable <ph name="URL_PLACEHOLDER" />, la URL se añade al final de la línea de comandos.
+
+      Las variables de entorno se expanden. En Windows, <ph name="ENV_VARIABLE_WIN_EXAMPLE" /> se sustituye por el valor de la variable de entorno ABC.</translation>
 <translation id="5861856285460256766">Configuración del código de acceso parental</translation>
 <translation id="5868414965372171132">Configuración de red de usuarios</translation>
 <translation id="5879014913445067283">Controla la búsqueda de archivos compartidos en la red mediante <ph name="NETBIOS_NAME" /></translation>
@@ -3345,6 +3443,15 @@
 
       Si esta opción está inhabilitada o no se le asigna ningún valor, es posible que se bloquee el contenido poco importante o el contenido Flash de otros orígenes.</translation>
 <translation id="6532769014584932288">Permitir wake locks</translation>
+<translation id="653645667373317432">Esta política controla el comando que se utilizará para abrir las URL al cambiar de Internet Explorer a <ph name="PRODUCT_NAME" />.
+
+      La política no tendrá ningún efecto si no está instalada la extensión "Compatibilidad con navegadores antiguos" para Internet Explorer.
+
+      Si no se asigna ningún valor a esta política, Internet Explorer detectará automáticamente la ruta ejecutable de <ph name="PRODUCT_NAME" /> al iniciar <ph name="PRODUCT_NAME" /> desde Internet Explorer.
+
+      Si se asigna un valor a esta política, se utilizará para abrir <ph name="PRODUCT_NAME" /> al iniciar <ph name="PRODUCT_NAME" /> desde Internet Explorer.
+
+      A esta política se le puede asignar la ruta de un archivo ejecutable. También se le puede asignar <ph name="PRODUCT_NAME_PLACEHOLDER" /> para detectar automáticamente la ruta de instalación de Chrome.</translation>
 <translation id="6536600139108165863">Reinicio automático al cerrar el dispositivo</translation>
 <translation id="6539246272469751178">Esta política no afecta a las aplicaciones para Android. Siempre utilizan el directorio de descargas predeterminado y no pueden acceder a ningún archivo que <ph name="PRODUCT_OS_NAME" /> haya descargado en un directorio de descargas que no sea el predeterminado.</translation>
 <translation id="654303922206238013">Estrategia de migración para eCryptfs</translation>
@@ -3358,6 +3465,17 @@
 <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara y al micrófono</translation>
 <translation id="6561396069801924653">Mostrar opciones de accesibilidad en el menú de la bandeja del sistema</translation>
 <translation id="6563458316362153786">Habilitar la transición rápida 802.11r</translation>
+<translation id="6568977718979857253">Esta política está obsoleta. Utiliza <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> para controlar la disponibilidad del complemento Flash y <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> para controlar si el visor de PDF integrado se debe usar para abrir archivos PDF.
+
+      Define una lista de complementos que están habilitados en <ph name="PRODUCT_NAME" /> y evita que los usuarios cambien esta configuración.
+
+      Los caracteres comodín "*" y "?" se pueden utilizar para buscar coincidencias con secuencias de caracteres arbitrarios. El comodín "*" coincide con cualquier número de caracteres, mientras que "?" especifica un único carácter opcional (es decir, coincide con un carácter o no coincide con ninguno). Como el carácter de escape es "\", para que coincida con los caracteres "*", "?" o "\", debes colocar el carácter "\" delante de ellos.
+
+      Si habilitas esta opción, la lista de complementos especificada nunca se utilizará en <ph name="PRODUCT_NAME" />. Los complementos están marcados como inhabilitados en "about:plugins" y los usuarios no pueden habilitarlos.
+
+      Ten en cuenta que EnabledPlugins y DisabledPluginsExceptions pueden anular esta política.
+
+      Si no se asigna ningún valor a esta política, el usuario puede utilizar cualquier complemento que esté instalado en el sistema, excepto complementos incompatibles preprogramados, obsoletos o peligrosos.</translation>
 <translation id="6573305661369899995">Establecer una fuente externa de restricciones de URL</translation>
 <translation id="6583851521569686409">Configura una lista de impresoras.
 
@@ -3440,6 +3558,11 @@
       Esta opción controla la presentación de páginas de bienvenida que ayudan a los usuarios a iniciar sesión en <ph name="PRODUCT_NAME" />, les permiten elegirlo como navegador predeterminado o les informan de funciones del producto.</translation>
 <translation id="6766216162565713893">Permitir que los sitios web le pidan permiso al usuario para acceder a dispositivos Bluetooth cercanos</translation>
 <translation id="6770454900105963262">Informar sobre sesiones del kiosco activas</translation>
+<translation id="6780908086869332493">Permite definir una lista de patrones de URL que especifica los sitios web para los que se selecciona automáticamente un certificado de cliente en la pantalla de inicio de sesión, en el marco en el que se aloja el flujo SAML (si el sitio web solicita un certificado). Por ejemplo, se puede configurar un certificado que abarque todos los dispositivos para presentarlo al proveedor de identidad SAML.
+
+      El valor debe ser una matriz de diccionarios JSON de tipo string. Cada diccionario debe tener el formato <ph name="DEVICE_LOGIN_SCREEN_AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" /> (<ph name="URL_PATTERN_PLACEHOLDER" /> es un patrón de configuración de contenido). <ph name="FILTER_PLACEHOLDER" /> restringe los certificados de cliente que puede seleccionar automáticamente el navegador. Independientemente del filtro, solo se seleccionarán los certificados que coincidan con la solicitud de certificado del servidor. Si <ph name="FILTER_PLACEHOLDER" /> tiene el formato <ph name="JSON_DICTIONARY_EXAMPLE" />, solo se seleccionarán certificados de cliente emitidos por un certificado en el que CommonName tenga el valor <ph name="ISSUER_CN_PLACEHOLDER" />. Si <ph name="FILTER_PLACEHOLDER" /> es el diccionario vacío {}, no se aplicarán más restricciones a la selección de certificados de cliente.
+
+      Si no se asigna ningún valor a esta política, la selección automática no se realizará en ningún sitio web.</translation>
 <translation id="6786747875388722282">Extensiones</translation>
 <translation id="6786967369487349613">Especificar el directorio de perfiles de itinerancia</translation>
 <translation id="6795485990775913659">Permitir imprimir solo sin PIN</translation>
@@ -3661,6 +3784,15 @@
       Si no se configura esta política, no se aplicarán restricciones sobre los usuarios que pueden iniciar sesión. Ten en cuenta que sigue siendo necesario configurar adecuadamente la política <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> para crear nuevos usuarios.</translation>
 <translation id="7126716959063786004">Habilitar la finalización de procesos en el administrador de tareas</translation>
 <translation id="7127892035367404455">Vuelve a instalar la versión de destino</translation>
+<translation id="712963038874313213">Proporciona un playbook de Ansible que debe ejecutarse en el contenedor de Crostini predeterminado.
+
+      Esta política permite proporcionar un playbook de Ansible para que se aplique al contenedor de Crostini predeterminado (si está disponible en el dispositivo y las políticas lo permiten).
+
+      El tamaño de los datos no debe ser superior a 1 MB (1.000.000 bytes), y los datos tienen que estar codificados en YAML. Se usa el hash criptográfico para comprobar la integridad de la descarga.
+
+      La configuración se descarga y se almacena en caché. Se volverá a descargar cada vez que se cambie la URL o el hash.
+
+      Si se configura la política, los usuarios no podrán cambiarla. Si no se le asigna ningún valor, los usuarios pueden seguir utilizando en su configuración el contenedor de Crostini predeterminado (siempre que las políticas permitan el uso de Crostini).</translation>
 <translation id="713121532817834879">Esta política es una URL que señala a un archivo XML con el mismo formato que la política <ph name="IEEM_SITELIST_POLICY" /> de Internet Explorer. Con esta política se cargan las reglas de un archivo XML, pero sin compartirlas con Internet Explorer.
 
       Las reglas de este archivo XML se aplican de la misma forma que <ph name="GREYLIST_POLICY_NAME" />. Es decir, estas reglas evitan que <ph name="PRODUCT_NAME" /> se abra en un navegador alternativo y también que un navegador alternativo abra <ph name="PRODUCT_NAME" />.
@@ -3867,8 +3999,16 @@
       Si se le asigna el valor "Delay both uploads and downloads", <ph name="PRODUCT_NAME" /> seguirá las reglas descritas en los valores "Delay downloads" y "Delay uploads".
       </translation>
 <translation id="7372831798009983116">Habilita la función de accesibilidad de clic automático</translation>
+<translation id="7373200034079131670">Reinicia cuando el usuario cierra sesión si se ha iniciado Android o una máquina virtual.</translation>
 <translation id="737655323154569539">Restringe el tamaño de impresión de la página. Si esta política no se configura o tiene ningún valor, no se aplica ninguna restricción.</translation>
 <translation id="7382191643394429934">Permitir imprimir con gráficos de fondo y sin ellos</translation>
+<translation id="7383445181072113521">Determina el nombre de host del dispositivo utilizado en las solicitudes DHCP.
+
+      Si a esta política se le asigna una cadena que no esté vacía, la cadena se utilizará como nombre de host del dispositivo en la solicitud DHCP.
+
+      La cadena puede incluir las variables <ph name="ASSET_ID_PLACEHOLDER" />, <ph name="SERIAL_NUM_PLACEHOLDER" />, <ph name="MAC_ADDR_PLACEHOLDER" /> y <ph name="MACHINE_NAME_PLACEHOLDER" />, las cuales se sustituirían por valores del dispositivo antes de que se utilice como nombre de host. El valor que se obtenga de la sustitución debe ser un nombre de host válido (según la sección 3.1 de la RFC 1035).
+
+      Si no se asigna ningún valor a esta política o el valor que se obtenga de la sustitución no es un nombre de host válido, no se establecerá ningún nombre de host en la solicitud DHCP. </translation>
 <translation id="7389872682701720082">Si se habilita esta opción, se ejecutarán siempre los complementos que no estén desactualizados.
 
       Si se inhabilita esta opción o no se configura, se le pedirá permiso a los usuarios para ejecutar complementos que requieran autorización. Algunos complementos pueden comprometer la seguridad.</translation>
@@ -3955,6 +4095,14 @@
           Para las cookies de dominios que no coincidan con los patrones indicados, o para todas las cookies si no se define esta política, se usará el valor global predeterminado de la política <ph name="LEGACY_SAMESITE_COOKIE_BEHAVIOR_ENABLED_POLICY_NAME" />, si se ha definido, y si no, la configuración personal del usuario.
 
           Nota: Los patrones que indiques aquí se tratarán como dominios, no como URLs, así que no especifiques esquemas ni puertos.</translation>
+<translation id="7590188804371204512">Controla la instalación de extensiones externas.
+
+      Si se habilita esta opción, las extensiones externas se bloquearán para que no puedan instalarse.
+
+      Si se inhabilita o no se configura, las extensiones externas podrán instalarse.
+
+      La documentación sobre las extensiones externas y sobre cómo instalarlas está disponible en https://developer.chrome.com/apps/external_extensions
+      </translation>
 <translation id="7593523670408385997">Permite configurar el tamaño de memoria caché que utilizará <ph name="PRODUCT_NAME" /> para guardar archivos almacenados en caché en el disco.
 
       Si se define esta política, <ph name="PRODUCT_NAME" /> utilizará el tamaño de caché proporcionado independientemente de que el usuario haya especificado o no un tamaño de caché de disco con el indicador "--disk-cache-size". El valor especificado en esta política no es un límite estricto sino más bien una sugerencia para el sistema de almacenamiento en caché (un valor inferior a unos pocos megabytes sería demasiado pequeño y se redondearía a un valor mínimo viable).
@@ -4019,6 +4167,13 @@
           Consulta también las políticas "CookiesAllowedForUrls" y "CookiesBlockedForUrls". Recuerda que no puede haber conflicto entre los patrones de URL de estas tres políticas, ya que no se especifica cuál de ellas prevalece.
 
           Si se ha configurado la política "RestoreOnStartup" para restaurar las URL de las sesiones anteriores, esta política no se respetará y las cookies de esos sitios web se almacenarán de forma permanente.</translation>
+<translation id="7677220829878081413">
+      Si se asigna el valor "ArcSession" a esta política, fuerza al dispositivo a reiniciarse cuando el usuario cierre sesión (si Android se ha iniciado).
+      Si se asigna el valor "ArcSessionOrVMStart" a esta política, fuerza al dispositivo a reiniciarse cuando el usuario cierre sesión (si se ha iniciado Android o una máquina virtual).
+      Si se le asigna el valor "Always", fuerza al dispositivo a reiniciarse cada vez que el usuario cierre sesión.
+      Si no se le asigna ningún valor, no tiene ningún efecto y no se fuerza al dispositivo a reiniciarse cuando el usuario cierre sesión. Lo mismo sucede si se le asigna el valor "Never".
+      Esta política solo tendrá validez en el caso de los usuarios no afiliados.
+      </translation>
 <translation id="7683777542468165012">Actualización dinámica de política</translation>
 <translation id="7687943045976362719">Si se asigna un valor a esta política, <ph name="PRODUCT_FRAME_NAME" /> gestiona los tipos de contenido especificados.
 
@@ -4127,6 +4282,7 @@
 
           Si se inhabilita esta política, los usuarios no podrán añadir cuentas de Kerberos. Solo pueden añadirse cuentas a través de la política "Configurar cuentas de Kerberos". Esta es una forma eficaz de bloquear cuentas.</translation>
 <translation id="7895553628261067384">Acceso remoto</translation>
+<translation id="7902040092815978832">Muestra el teclado numérico para introducir la contraseña</translation>
 <translation id="7902255855035461275">Los patrones de esta lista se compararán con el origen de seguridad de la URL solicitante. Si se encuentra alguna coincidencia, se concederá acceso a dispositivos de captura de vídeo sin solicitarlo.
 
 NOTA: Hasta la versión 45, esta política solo se admitía en modo kiosco.</translation>
@@ -4206,6 +4362,11 @@
       Estos marcadores se incluyen en una capeta que el usuario no puede modificar, pero que puede ocultar de la barra de marcadores. El nombre predeterminado de la carpeta es Marcadores administrados, pero se puede personalizar añadiendo a la lista de marcadores un diccionario que contenga la clave "<ph name="TOPLEVEL_NAME" />" y tenga asignado el nombre elegido para la carpeta como valor.
 
       Los marcadores administrados no se sincronizan con la cuenta del usuario, y las extensiones no pueden modificarlos.</translation>
+<translation id="8077245272412229388">Añade cuentas de Kerberos rellenadas previamente. Si las credenciales de Kerberos coinciden con las credenciales de inicio de sesión, se puede configurar una cuenta que reutilice las credenciales de inicio de sesión estableciendo "<ph name="LOGIN_EMAIL_PLACEHOLDER" />" y "<ph name="PASSWORD_PLACEHOLDER" />" como nombre de usuario y contraseña, respectivamente. Así, el ticket de Kerberos podrá obtenerse automáticamente, a menos que esté configurada la autenticación de dos factores. Los usuarios no podrán modificar las cuentas que se añadan a través de esta política.
+
+          Si se habilita la política, la lista de cuentas que defina la política se añade a la configuración de las cuentas de Kerberos.
+
+          Si no se asigna ningún valor a esta política o se inhabilita, no se añadirá ninguna cuenta a la configuración de las cuentas de Kerberos y se eliminarán todas las cuentas que se hayan añadido con esta política. Si la política "Los usuarios pueden añadir cuentas de Kerberos" está habilitada, los usuarios podrán añadir cuentas manualmente.</translation>
 <translation id="8078366200175825572">Permite definir una lista de patrones de URL para especificar los sitios web que no pueden establecer cookies.
 
           Si no se establece esta política, se usará para todos los sitios web el valor general predeterminado que se indique en la política "DefaultCookiesSetting" (si se ha establecido) o el valor personalizado que haya definido el usuario (en caso contrario).
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb
index 0dee54c..2aed505a 100644
--- a/components/policy/resources/policy_templates_ko.xtb
+++ b/components/policy/resources/policy_templates_ko.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="ko">
-<translation id="1001649754854402482">새로운 <ph name="CORS" /> 구현에서 <ph name="CORS" /> 확인 완화를 사용 설정하여 확장 프로그램이 호환되는 행동을 유지하도록 허용하고 <ph name="PRODUCT_NAME" />에서 <ph name="CORS" /> 확인 없이 지정된 헤더를 전송하도록 허용합니다.
+<translation id="1001649754854402482">새로운 <ph name="CORS" /> 구현에서 <ph name="CORS" /> 확인 완화를 사용 설정하여 확장 프로그램이 호환되는 동작을 유지하도록 허용하고 <ph name="PRODUCT_NAME" />에서 <ph name="CORS" /> 확인 없이 지정된 헤더를 전송하도록 허용합니다.
 
       이 목록이 Empty로 설정되어 있으면 <ph name="PRODUCT_NAME" />은(는) 호환되는 방식으로 확장 프로그램을 실행하도록 시도하고 <ph name="WEB_REQUEST_API_MANUAL" />에 설명된 것처럼 <ph name="PRODUCT_NAME" /> 79의 <ph name="API" /> 변경사항을 적용하지 않습니다.
 
@@ -239,11 +239,11 @@
       이 설정을 true로 설정하거나 설정하지 않으면 사용자가 기기에서 지원하는 모든 오디오 출력을 사용할 수 있습니다.</translation>
 <translation id="1358050607773151553">이 정책은 지원이 중단되었으며 <ph name="PRODUCT_OS_NAME" /> 버전 82에서 삭제될 예정입니다. 대신 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" /> 정책을 사용하세요.
 
-          이 정책이 설정되어 있으면 사용자가 유휴 지연 시간으로 지정된 시간 동안 유휴 상태에 있을 때 <ph name="PRODUCT_OS_NAME" />에서 실행할 작업을 지정하며, 별도로 설정할 수 있습니다.
+          이 정책이 설정되어 있으면 사용자가 유휴 지연 시간으로 지정된 시간 동안 유휴 상태에 있을 때 <ph name="PRODUCT_OS_NAME" />에서 실행할 작업을 지정하며, 유휴 지연 시간은 별도로 설정할 수 있습니다.
 
-          이 정책이 설정되어 있지 않으면 기본 작업이 실행되며 일시중지됩니다.
+          이 정책이 설정되어 있지 않으면 기본 작업인 일시중지가 실행됩니다.
 
-          작업이 일시중지되면 일시중지되기 전에 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그거나 잠그지 않도록 별도로 설정할 수 있습니다.</translation>
+          작업이 일시중지면 일시중지되기 전에 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그거나 잠그지 않도록 별도로 설정할 수 있습니다.</translation>
 <translation id="1359553908012294236">이 정책이 'true'로 설정되거나 설정되지 않으면 <ph name="PRODUCT_NAME" />에서 게스트 로그인을 사용합니다. 게스트 로그인은 모든 창이 시크릿 모드로 실행되는 <ph name="PRODUCT_NAME" /> 프로필입니다.
 
       이 정책이 'false'로 설정되면 <ph name="PRODUCT_NAME" />에서 게스트 프로필을 사용할 수 없습니다.</translation>
@@ -257,7 +257,7 @@
 
           이 정책은 <ph name="IDLE_ACTION_AC_POLICY_NAME" /> 및 <ph name="IDLE_ACTION_BATTERY_POLICY_NAME" /> 정책과 같이 더 구체적인 정책의 대체 값을 제공합니다. 더 구체적인 정책이 설정되지 않은 경우 이 정책에 설정된 대체 값이 사용됩니다.
 
-          정책이 설정되지 않아도 더 구체적인 정책 사용에 영향을 주지 않습니다.</translation>
+          이 정책이 설정되지 않아도 더 구체적인 정책 사용에 영향을 주지 않습니다.</translation>
 <translation id="1383493480903114193">이 정책은 네트워킹 코드가 브라우저 프로세스에서 실행되도록 강제합니다.
 
       이 정책은 기본적으로 사용 안함으로 설정되어 있으며 사용 설정할 경우 네트워킹 프로세스가 샌드박스 처리되었을 때 사용자가 보안 문제에 노출될 수 있습니다.
@@ -886,7 +886,7 @@
 
           AC 전원으로 실행할 때 사용자의 입력 없이 어느 정도의 시간이 지나면 화면이 잠길지 지정합니다.
 
-          정책이 0보다 큰 값으로 설정되어 있으면 사용자가 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정합니다.
+          정책이 0보다 큰 값으로 설정되어 있으면 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정합니다.
 
           0으로 설정되어 있으면 사용자가 유휴 상태가 되어도 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그지 않습니다.
 
@@ -1665,7 +1665,7 @@
 
           배터리 전원으로 실행할 때 사용자 입력이 없어서 화면이 잠기기까지 걸리는 시간을 지정합니다.
 
-          정책이 0보다 큰 값으로 설정되어 있으면 사용자가 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정합니다.
+          정책이 0보다 큰 값으로 설정되어 있으면 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정합니다.
 
           0으로 설정되어 있으면 사용자가 유휴 상태가 되어도 <ph name="PRODUCT_OS_NAME" />에서 화면을 잠그지 않습니다.
 
@@ -3166,9 +3166,9 @@
 <translation id="5961137303188584693">기기의 내장 NIC MAC 주소</translation>
 <translation id="5966615072639944554">원격 인증 API를 사용하도록 허용된 확장 프로그램입니다.</translation>
 <translation id="5983708779415553259">사이트에 대한 기본 동작이 콘텐츠 팩에 없음</translation>
-<translation id="5997107377032983906">차단 가능한 혼합 콘텐츠(예: HTTPS 사이트의 HTTP 콘텐츠) 표시가 허용되는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다.
+<translation id="5997107377032983906">차단 가능한(즉, 활성) 혼합 콘텐츠(예: HTTPS 사이트의 HTTP 콘텐츠) 표시가 허용되는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다.
 
-          이 정책을 설정하지 않으면 차단 가능한 혼합 콘텐츠가 차단되지만 사용자는 특정 사이트에 허용 가능한 예외를 설정할 수 있습니다.</translation>
+          이 정책을 설정하지 않으면 차단 가능한 혼합 콘텐츠가 차단되지만 사용자는 특정 사이트를 허용하도록 예외를 설정할 수 있습니다.</translation>
 <translation id="5997543603646547632">기본적으로 24시간 표기법 사용</translation>
 <translation id="5997846976342452720">플러그인 Finder 사용 중지 여부 지정(지원 중단됨)</translation>
 <translation id="5998198091336830580">이 정책은 다음 그룹의 일부입니다. 그룹에서 우선순위가 가장 높은 출처의 정책만 적용됩니다.</translation>
@@ -3564,9 +3564,9 @@
 <translation id="6786747875388722282">확장 프로그램</translation>
 <translation id="6786967369487349613">로밍 프로필 디렉터리를 설정합니다.</translation>
 <translation id="6795485990775913659">PIN이 없으면 인쇄만 허용</translation>
-<translation id="6800064234889290465">차단 가능한 혼합 콘텐츠(예: HTTPS 사이트의 HTTP 콘텐츠) 표시가 허용되지 않는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다.
+<translation id="6800064234889290465">차단 가능한(즉, 활성) 혼합 콘텐츠(예: HTTPS 사이트의 HTTP 콘텐츠) 표시가 허용되지 않는 사이트를 지정하는 URL 패턴 목록을 설정할 수 있습니다.
 
-          이 정책을 설정하지 않으면 차단 가능한 혼합 콘텐츠가 차단되지만 사용자는 특정 사이트에 허용 가능한 예외를 설정할 수 있습니다.</translation>
+          이 정책을 설정하지 않으면 차단 가능한 혼합 콘텐츠가 차단되지만 사용자는 특정 사이트를 허용하도록 예외를 설정할 수 있습니다.</translation>
 <translation id="6810445994095397827">이 사이트에서 자바스크립트 차단</translation>
 <translation id="6813263547126514821">전원 및 종료</translation>
 <translation id="681446116407619279">지원되는 인증 스키마</translation>
@@ -4296,11 +4296,11 @@
 <translation id="7937491150792971922">여러 출처의 확장 프로그램 설치 목록 정책 병합</translation>
 <translation id="7937766917976512374">동영상 캡처 허용 또는 거부</translation>
 <translation id="7941975817681987555">모든 네트워크 연결의 네트워크 활동 예측 안함</translation>
-<translation id="7944213656414105292">이 정책은 로그인 화면의 SAML 절차가 진행되는 동안 기기 ID의 원격 인증을 사용할 수 있는 액세스가 부여되는 URL을 지정합니다.
+<translation id="7944213656414105292">이 정책은 로그인 화면의 SAML 절차가 진행되는 동안 기기 ID의 원격 증명을 사용할 수 있는 액세스가 부여되는 URL을 지정합니다.
 
-      특히 URL이 이 정책을 통해 제공되는 패턴 중 하나와 일치하는 경우 원격 인증 챌린지의 반응을 포함하는 HTTP 헤더를 받을 수 있도록 허용하여 기기 ID 및 기기 상태를 인증합니다.
+      특히 URL이 이 정책을 통해 제공되는 패턴 중 하나와 일치하는 경우 원격 증명 챌린지의 반응을 포함하는 HTTP 헤더를 받을 수 있도록 허용하여 기기 ID 및 기기 상태를 증명합니다.
 
-      정책이 설정되지 않거나 빈 목록으로 설정되어 있는 경우 어떠한 URL도 로그인 화면에서 원격 인증을 사용할 수 있도록 허용되지 않습니다.</translation>
+      정책이 설정되지 않거나 빈 목록으로 설정되어 있는 경우 어떠한 URL도 로그인 화면에서 원격 증명을 사용할 수 있도록 허용되지 않습니다.</translation>
 <translation id="7952007677054834789"><ph name="PRODUCT_NAME" />에서 시작 시 로드될 페이지, 기본 홈페이지, 기본 새 탭 페이지를 구성하고 사용자가 변경하지 못하게 합니다.
 
       사용자의 홈페이지 설정은 홈페이지를 새 탭 페이지로 지정하거나 URL로 설정하여 홈페이지 URL을 지정하는 경우에만 완전히 잠깁니다. 홈페이지 URL을 지정하지 않으면 사용자는 'chrome://newtab'을 지정하여 홈페이지를 새 탭 페이지로 계속해서 설정할 수 있습니다.
@@ -4454,7 +4454,7 @@
 
       이 정책을 설정하지 않는 경우 'URLBlacklist' 정책의 차단 목록에 예외가 적용되지 않습니다.</translation>
 <translation id="8176035528522326671">기업 사용자에게 기본 멀티 프로필 사용자만 허용(기업에서 관리하는 사용자에 대한 기본 동작임)</translation>
-<translation id="8176620453475617465">이 정책은 관리자가 페이지를 닫는 중에 페이지에서 동기 XHR 요청을 전송하도록 허용할 수 있습니다.
+<translation id="8176620453475617465">이 정책은 페이지를 닫는 중에 페이지에서 동기 XHR 요청을 전송하도록 관리자가 지정할 수 있게 합니다.
 
       정책이 사용 설정되어 있으면 페이지를 닫는 중에 페이지에서 동기 XHR 요청을 전송할 수 있습니다.
 
@@ -4868,7 +4868,7 @@
 
           배터리 전원으로 실행할 때 사용자 입력이 없어서 유휴 작업이 수행되기까지 걸리는 시간을 지정합니다.
 
-          이 정책이 설정되어 있으면 이는 <ph name="PRODUCT_OS_NAME" />에서 유휴 작업을 수행하기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정하며, 별도로 설정할 수 있습니다.
+          이 정책이 설정되어 있으면 이는 <ph name="PRODUCT_OS_NAME" />에서 유휴 작업을 수행하기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정하며, 유휴 작업은 별도로 설정할 수 있습니다.
 
           설정되어 있지 않으면 기본 설정된 시간이 적용됩니다.
 
@@ -4877,7 +4877,7 @@
 
           AC 전원으로 실행할 때 사용자 입력이 없어서 유휴 작업이 수행되기까지 걸리는 시간을 지정합니다.
 
-          이 정책이 설정되어 있으면 이는 <ph name="PRODUCT_OS_NAME" />에서 유휴 작업을 수행하기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정하며, 별도로 설정할 수 있습니다.
+          이 정책이 설정되어 있으면 이는 <ph name="PRODUCT_OS_NAME" />에서 유휴 작업을 수행하기 전에 사용자가 유휴 상태를 유지해야 하는 시간을 지정하며, 유휴 작업은 별도로 설정할 수 있습니다.
 
           설정되어 있지 않으면 기본 설정된 시간이 적용됩니다.
 
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb
index d43e1e8..ab54172 100644
--- a/components/policy/resources/policy_templates_nl.xtb
+++ b/components/policy/resources/policy_templates_nl.xtb
@@ -505,7 +505,7 @@
 
       Ga naar https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode voor meer informatie over het <ph name="IEEM_SITELIST_POLICY" />-beleid van Internet Explorer</translation>
 <translation id="1839278886947586809">
-      Dit beleid is verwijderd in M80, omdat het niet meer nodig is omdat WebDriver nu werkt met alle bestaande beleidsregels.
+      Dit beleid is verwijderd in M80 omdat WebDriver nu werkt met alle bestaande beleidsregels, en het dus niet langer nodig is.
 
       Met dit beleid kunnen gebruikers van de WebDriver-functie beleidsregels overschrijven die problemen met de werking kunnen veroorzaken.
 
@@ -977,7 +977,7 @@
 
       Als dit beleid niet wordt ingesteld, wordt alleen de URL doorgegeven als opdrachtregelparameter.
 
-      Als dit beleid is ingesteld op een lijst met tekenreeksen, wordt elke tekenreeks doorgegeven aan de alternatieve browser als afzonderlijke opdrachtregelparameter. In Windows worden de parameters samengevoegd met spaties. In Mac OS X en Linux mag een parameter spaties bevatten en wordt dan nog gewoon verwerkt als één parameter.
+      Als dit beleid is ingesteld op een lijst met tekenreeksen, wordt elke tekenreeks doorgegeven aan de alternatieve browser als afzonderlijke opdrachtregelparameter. In Windows worden de parameters samengevoegd met spaties. In Mac OS X en Linux mag een parameter spaties bevatten en wordt dan nog steeds verwerkt als één parameter.
 
       Als een element <ph name="URL_PLACEHOLDER" /> bevat, wordt dit vervangen door de URL van de pagina die moet worden geopend.
 
@@ -1507,7 +1507,7 @@
 
       Als je deze instelling inschakelt, kan de gespecificeerde lijst met plug-ins in <ph name="PRODUCT_NAME" /> worden gebruikt. Gebruikers kunnen plug-ins in- of uitschakelen in 'about:plugins', zelfs als de plug-in ook overeenkomt met een patroon in DisabledPlugins. Gebruikers kunnen ook plug-ins in- en uitschakelen die niet overeenkomen met een patroon in DisabledPlugins, DisabledPluginsExceptions of EnabledPlugins.
 
-      Dit beleid is bedoeld om een streng beleid voor een blacklist met plug-ins mogelijk te maken, waarbij de lijst 'DisabledPlugins' items met jokertekens bevat. Bijvoorbeeld 'schakel alle plug-ins met '*' uit' of 'schakel alle Java-plug-ins met '*Java*' uit', terwijl de beheerder een bepaalde versie wil inschakelen, zoals 'IcedTea Java 2.3'. Deze specifieke versies kunnen worden gespecificeerd in dit beleid.
+      Dit beleid is bedoeld om een streng beleid voor een blacklist met plug-ins mogelijk te maken, waarbij de lijst 'DisabledPlugins' items met jokertekens bevat. Bijvoorbeeld, 'schakel alle plug-ins met '*' uit' of 'schakel alle Java-plug-ins met '*Java*' uit', terwijl de beheerder een bepaalde versie wil inschakelen, zoals 'IcedTea Java 2.3'. Deze specifieke versies kunnen worden aangeduid in dit beleid.
 
       Zowel de naam van de plug-in als de groepsnaam van de plug-in moeten worden uitgesloten. Elke groep plug-ins wordt in een afzonderlijk gedeelte in 'about:plugins' weergegeven. Elk gedeelte kan een of meer plug-ins bevatten. De plug-in 'Shockwave Flash' hoort bijvoorbeeld bij de groep 'Adobe Flash Player' en beide namen moeten een overeenkomst hebben in de lijst met uitzonderingen als die plug-in moet worden uitgesloten van de blacklist.
 
@@ -3410,7 +3410,7 @@
 
       Als deze instelling is uitgeschakeld of niet is ingesteld, kan Flash-content van andere bronnen of minder belangrijke content worden geblokkeerd.</translation>
 <translation id="6532769014584932288">Wake locks toestaan</translation>
-<translation id="653645667373317432">Met dit beleid wordt bepaald welke opdracht wordt gebruik om URL's te openen in <ph name="PRODUCT_NAME" /> bij overschakeling vanuit Internet Explorer.
+<translation id="653645667373317432">Met dit beleid wordt bepaald welke opdracht wordt gebruikt om URL's te openen in <ph name="PRODUCT_NAME" /> bij overschakeling vanuit Internet Explorer.
 
       Als de oude add-in 'Ondersteuning voor oudere browsers' voor Internet Explorer niet is geïnstalleerd, heeft dit beleid geen effect.
 
@@ -3524,7 +3524,7 @@
       Deze instelling beheert de presentatie van de welkomstpagina's waar gebruikers kunnen inloggen bij <ph name="PRODUCT_NAME" />, de browser kunnen instellen als hun standaardbrowser of anderszins informatie krijgen over productfuncties.</translation>
 <translation id="6766216162565713893">Toestaan dat sites de gebruiker vragen om toegang te verlenen tot een Bluetooth-apparaat in de buurt</translation>
 <translation id="6770454900105963262">Informatie over actieve kiosk-sessies melden</translation>
-<translation id="6780908086869332493">Hiermee kun je een lijst met URL-patronen opgeven om sites te specificeren waarvoor automatisch een clientcertificaat wordt geselecteerd op het inlogscherm in het frame waarin het SAML-proces wordt gehost als de site vraagt om een certificaat. Een voorbeeldgebruik is een certificaat voor het hele apparaat configureren dat wordt gepresenteerd aan de SAML IdP.
+<translation id="6780908086869332493">Hiermee kun je een lijst met URL-patronen opgeven om sites te specificeren. Hiervoor wordt automatisch een clientcertificaat geselecteerd op het inlogscherm in het frame waarin het SAML-proces wordt gehost als de site vraagt om een certificaat. Een voorbeeldgebruik is een certificaat voor het hele apparaat configureren dat wordt gepresenteerd aan de SAML IdP.
 
       De waarde moet een matrix van json-woordenboeken met tekenreeksen zijn. Elk woordenboek moet de indeling <ph name="DEVICE_LOGIN_SCREEN_AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" /> hebben, waarbij <ph name="URL_PATTERN_PLACEHOLDER" /> een patroon voor het instellen van content is. <ph name="FILTER_PLACEHOLDER" /> beperkt de clientcertificaten die de browser automatisch kan selecteren. Onafhankelijk van het filter worden alleen certificaten geselecteerd die overeenkomen met het certificaatverzoek van de server. Als <ph name="FILTER_PLACEHOLDER" /> de indeling <ph name="JSON_DICTIONARY_EXAMPLE" /> heeft, worden daarnaast alleen clientcertificaten geselecteerd die zijn uitgegeven door een certificaat met de CommonName <ph name="ISSUER_CN_PLACEHOLDER" />. Als <ph name="FILTER_PLACEHOLDER" /> het lege woordenboek {} is, wordt de selectie van clientcertificaten niet verder beperkt.
 
@@ -3750,7 +3750,7 @@
 <translation id="7127892035367404455">Doelversie herstellen</translation>
 <translation id="712963038874313213">Hiermee wordt een Ansible-playbook geboden dat moet worden uitgevoerd in de standaard Crostini-container.
 
-      Dit beleid staat het bieden van een Ansible-playbook toe die mag worden toegepast op de standaard Crostini-container als deze beschikbaar is op het opgegeven apparaat en is toegestaan door het beleid.
+      Dit beleid staat het bieden van een Ansible-playbook toe die mag worden toegepast op de standaard Crostini-container, als deze beschikbaar is op het opgegeven apparaat en is toegestaan door het beleid.
 
       Het bestand mag niet groter zijn dan 1 MB (1.000.000 bytes) en moet zijn gecodeerd in YAML. De cryptografische hash wordt gebruikt om de integriteit van de download te verifiëren.
 
@@ -4325,7 +4325,7 @@
       Deze bladwijzers worden in een map geplaatst die niet kan worden aangepast door de gebruiker. De gebruiker kan er wel voor kiezen de map te verbergen op de bladwijzerbalk. De mapnaam is standaard 'Beheerde bladwijzers'. De naam kan worden aangepast door een woordenboek met de sleutel '<ph name="TOPLEVEL_NAME" />' en de gewenste mapnaam als waarde toe te voegen aan de lijst met bladwijzers.
 
       Beheerde bladwijzers worden niet gesynchroniseerd met het gebruikersaccount en kunnen niet worden aangepast via extensies.</translation>
-<translation id="8077245272412229388">Hiermee worden vooraf ingevulde Kerberos-accounts toegevoegd. Als de Kerberos-gegevens overeenkomen met de inloggegevens, kan een account worden geconfigureerd om de inloggegevens opnieuw te gebruiken door '<ph name="LOGIN_EMAIL_PLACEHOLDER" />' en '<ph name="PASSWORD_PLACEHOLDER" />' te specificeren voor respectievelijk het hoofdaccount en wachtwoord, zodat het Kerberos-ticket automatisch kan worden opgehaald, tenzij verificatie in twee stappen is geconfigureerd. Gebruikers kunnen accounts die zijn toegevoegd via dit beleid niet aanpassen.
+<translation id="8077245272412229388">Hiermee worden vooraf ingevulde Kerberos-accounts toegevoegd. Als de Kerberos-gegevens overeenkomen met de inloggegevens, kan een account worden geconfigureerd om de inloggegevens opnieuw te gebruiken door '<ph name="LOGIN_EMAIL_PLACEHOLDER" />' en '<ph name="PASSWORD_PLACEHOLDER" />' te specificeren voor respectievelijk het hoofdaccount en wachtwoord. Hierdoor kan het Kerberos-ticket automatisch kan worden opgehaald, tenzij verificatie in twee stappen is geconfigureerd. Gebruikers kunnen accounts die zijn toegevoegd via dit beleid niet aanpassen.
 
           Als dit beleid is ingeschakeld, wordt de lijst met accounts die is gespecificeerd door het beleid, toegevoegd aan de instellingen voor Kerberos-accounts.
 
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb
index dd48457..ff63f31 100644
--- a/components/policy/resources/policy_templates_vi.xtb
+++ b/components/policy/resources/policy_templates_vi.xtb
@@ -3,9 +3,9 @@
 <translationbundle lang="vi">
 <translation id="1001649754854402482">Bật tùy chọn giảm thiểu kiểm tra <ph name="CORS" /> trong quy trình triển khai <ph name="CORS" /> mới, cho phép Tiện ích duy trì hành vi tương thích và cho phép <ph name="PRODUCT_NAME" /> gửi tiêu đề đã chỉ định mà không cần kiểm tra <ph name="CORS" />.
 
-      Nếu bạn đặt danh sách này thành trống, thì <ph name="PRODUCT_NAME" /> sẽ cố chạy Tiện ích theo cách thức tương thích và không đưa ra những thay đổi về <ph name="API" /> đối với <ph name="PRODUCT_NAME" /> 79 như giải thích tại <ph name="WEB_REQUEST_API_MANUAL" />.
+      Nếu bạn đặt danh sách này thành trống, thì <ph name="PRODUCT_NAME" /> sẽ cố chạy Tiện ích theo cách thức tương thích và không làm thay đổi <ph name="API" /> đối với <ph name="PRODUCT_NAME" /> 79 như giải thích tại <ph name="WEB_REQUEST_API_MANUAL" />.
 
-      Nếu bạn đặt danh sách này thành có tên tiêu đề yêu cầu <ph name="HTTP" />, thì quá trình kiểm tra <ph name="CORS" /> sẽ bỏ qua các tiêu đề có trong danh sách và bật tùy chọn giảm thiểu cho Tiện ích.
+      Nếu bạn đặt danh sách này thành có tên tiêu đề yêu cầu <ph name="HTTP" />, thì quá trình kiểm tra <ph name="CORS" /> sẽ bật tùy chọn giảm thiểu cho Tiện ích và bỏ qua các tiêu đề có trong danh sách.
 
       Nếu bạn không đặt danh sách này, thì cả hai tùy chọn giảm thiểu giải thích ở trên đều không áp dụng.
 
@@ -76,13 +76,13 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình bị tắt khi chạy trên nguồn AC.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> tắt màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> tắt màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không tắt màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không tắt màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="1079801999187584280">Không cho phép sử dụng Công cụ dành cho nhà phát triển</translation>
 <translation id="1087437665304381368">Chính sách này chỉ kiểm soát chế độ nhà phát triển của <ph name="PRODUCT_OS_NAME" />. Nếu muốn ngăn khả năng truy cập vào Tùy chọn của nhà phát triển Android, bạn cần đặt chính sách <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" />.</translation>
 <translation id="1087707496788636333">Danh sách chính sách của Chrome Enterprise sẽ chuyển sang vị trí mới! Vui lòng cập nhật dấu trang của bạn thành <ph name="POLICY_DOCUMENTATION_URL" />.</translation>
@@ -240,7 +240,7 @@
       Nếu bạn không định cấu hình hoặc nếu bạn đặt tùy chọn cài đặt này thành true, thì người dùng có thể sử dụng tất cả các đầu ra âm thanh được hỗ trợ trên thiết bị của họ.</translation>
 <translation id="1358050607773151553">Xin lưu ý rằng chính sách này không được dùng nữa và sẽ bị xóa trong <ph name="PRODUCT_OS_NAME" /> phiên bản 82. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
-          Khi bạn đặt, chính sách này sẽ chỉ định hành động mà <ph name="PRODUCT_OS_NAME" /> thực hiện khi người dùng không sử dụng trong khoảng thời gian cho trước theo thời gian chờ khi không sử dụng. Bạn có thể định cấu hình riêng biệt khoảng thời gian này.
+          Khi bạn đặt, chính sách này sẽ chỉ định hành động mà <ph name="PRODUCT_OS_NAME" /> thực hiện khi người dùng tạm vắng trong khoảng thời gian cho trước theo thời gian chờ khi tạm vắng. Bạn có thể định cấu hình riêng biệt khoảng thời gian này.
 
           Khi bạn không đặt chính sách này, hành động mặc định là tạm ngưng sẽ được thực hiện.
 
@@ -256,9 +256,9 @@
 <translation id="1376119291123231789">Bật chế độ sạc pin nâng cao</translation>
 <translation id="1377134027840513298">Xin lưu ý rằng chính sách này không được dùng nữa và sẽ bị xóa trong <ph name="PRODUCT_OS_NAME" /> phiên bản 82. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
-          Chính sách này cung cấp giá trị dự phòng cho các chính sách <ph name="IDLE_ACTION_AC_POLICY_NAME" /> và <ph name="IDLE_ACTION_BATTERY_POLICY_NAME" /> cụ thể hơn. Nếu bạn đặt chính sách này, giá trị của chính sách sẽ được sử dụng trong trường hợp bạn không đặt chính sách cụ thể hơn tương ứng.
+          Chính sách này cung cấp giá trị dự phòng cho các chính sách <ph name="IDLE_ACTION_AC_POLICY_NAME" /> và <ph name="IDLE_ACTION_BATTERY_POLICY_NAME" /> cụ thể hơn. Nếu bạn đặt chính sách này, thì giá trị của chính sách sẽ được sử dụng trong trường hợp bạn không đặt chính sách cụ thể hơn tương ứng.
 
-          Khi bạn không đặt chính sách này, hoạt động của các chính sách cụ thể hơn sẽ không bị ảnh hưởng.</translation>
+          Khi bạn không đặt chính sách này, thì hoạt động của các chính sách cụ thể hơn sẽ không bị ảnh hưởng.</translation>
 <translation id="1383493480903114193">Chính sách này buộc mã nối mạng chạy trong quá trình chạy trình duyệt.
 
       Chính sách này được tắt theo mặc định. Nếu bạn bật chính sách này, người dùng sẽ dễ gặp phải các sự cố bảo mật sau khi quá trình nối mạng được chạy trong hộp cát.
@@ -618,13 +618,13 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình bị tắt khi chạy trên nguồn pin.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> tắt màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> tắt màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không tắt màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không tắt màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="1962273523772270623">Cho phép thu thập nhật ký sự kiện WebRTC từ các dịch vụ của Google</translation>
 <translation id="1964634611280150550">Đã tắt chế độ ẩn danh</translation>
 <translation id="1964802606569741174">Chính sách này không ảnh hưởng đến ứng dụng YouTube trên Android. Nếu bị buộc phải sử dụng Chế độ an toàn trên YouTube thì việc cài đặt ứng dụng YouTube trên Android sẽ không được cho phép.</translation>
@@ -740,7 +740,7 @@
 <translation id="214901426630414675">Hạn chế chế độ in hai mặt</translation>
 <translation id="2149330464730004005">Bật chế độ in màu</translation>
 <translation id="2156132677421487971">Định cấu hình các chính sách cho <ph name="PRODUCT_NAME" />, một tính năng cho phép người dùng gửi nội dung của các tab, trang web hoặc màn hình từ trình duyệt đến màn hình và hệ thống âm thanh từ xa.</translation>
-<translation id="2156755242840687300">Đã bật máy chủ máy in bên ngoài</translation>
+<translation id="2156755242840687300">Máy chủ máy in bên ngoài được bật</translation>
 <translation id="2166472654199325139">Không lọc các trang web có nội dung người lớn</translation>
 <translation id="2168397434410358693">Độ trễ lúc không sử dụng khi chạy trên nguồn AC</translation>
 <translation id="217013996107840632">Các tham số dòng lệnh để chuyển từ trình duyệt thay thế.</translation>
@@ -888,15 +888,15 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình bị khóa khi chạy trên nguồn AC.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> khóa màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> khóa màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không khóa màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không khóa màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Để khóa màn hình khi ở chế độ không sử dụng, bạn nên bật phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ không sử dụng. Bạn chỉ nên sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi không muốn tạm ngưng ở chế độ không sử dụng.
+          Để khóa màn hình khi ở chế độ tạm vắng, bạn nên bật phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ tạm vắng. Bạn chỉ nên sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi không muốn tạm ngưng ở chế độ tạm vắng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="2433412232489478893">Chính sách này kiểm soát việc có cho phép người dùng sử dụng tính năng Chia sẻ tệp trong mạng cho <ph name="PRODUCT_NAME" /> hay không.
 
       Khi chưa định cấu hình chính sách này hoặc khi đặt chính sách thành True, người dùng sẽ có thể sử dụng tính năng Chia sẻ tệp trong mạng.
@@ -1010,7 +1010,7 @@
       Nếu cài đặt này được bật hoặc không được định cấu hình, người dùng có thể in.
 
       Nếu cài đặt này bị tắt, người dùng không thể in từ <ph name="PRODUCT_NAME" />. In bị tắt trong menu cờ lê, tiện ích, ứng dụng JavaScript, v.v.  <ph name="PRODUCT_NAME" /> trong khi in. Để biết ví dụ, ứng dụng Flash nhất định có tùy chọn in trong menu ngữ cảnh, không chịu sự điều chỉnh của chính sách này.</translation>
-<translation id="2517466659416174529">Cho phép đóng băng các tab chạy ngầm</translation>
+<translation id="2517466659416174529">Cho phép đóng băng các tab chạy trong nền</translation>
 <translation id="2518231489509538392">Cho phép phát âm thanh</translation>
 <translation id="2521581787935130926">Hiển thị lối tắt ứng dụng trong thanh dấu trang</translation>
 <translation id="2526082146909867346">Cho phép bạn chỉ định danh sách các mẫu url. Những mẫu url này chỉ định các trang web mà <ph name="PRODUCT_NAME" /> sẽ tự động chọn một chứng chỉ ứng dụng khách, nếu trang web yêu cầu chứng chỉ.
@@ -1274,7 +1274,7 @@
 <translation id="2872961005593481000">Tắt</translation>
 <translation id="2873651257716068683">Ghi đè kích thước trang in mặc định. Nếu không có kích thước trang in này thì chính sách sẽ bị bỏ qua.</translation>
 <translation id="2874209944580848064">Lưu ý dành cho thiết bị <ph name="PRODUCT_OS_NAME" /> hỗ trợ ứng dụng Android:</translation>
-<translation id="2875192972412983412">Chỉ định tập hợp con các máy chủ máy in sẽ truy vấn cho máy chủ máy in.
+<translation id="2875192972412983412">Chỉ định tập hợp con các máy chủ máy in sẽ được truy vấn khi hệ thống tìm máy chủ máy in.
 
       Nếu bạn sử dụng chính sách này, thì chỉ những máy chủ máy in có mã nhận dạng khớp với các giá trị trong chính sách này mới được cung cấp cho người dùng.
 
@@ -1666,15 +1666,15 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình bị khóa khi chạy trên nguồn pin.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> khóa màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> khóa màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không khóa màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không khóa màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Để khóa màn hình khi ở chế độ không sử dụng, bạn nên bật phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ không sử dụng. Bạn chỉ nên sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi không muốn tạm ngưng ở chế độ không sử dụng.
+          Để khóa màn hình khi ở chế độ tạm vắng, bạn nên bật phương thức khóa màn hình khi tạm ngưng và đặt <ph name="PRODUCT_OS_NAME" /> tạm ngưng sau thời gian chờ khi ở chế độ tạm vắng. Bạn chỉ nên sử dụng chính sách này khi muốn khóa màn hình sớm hơn đáng kể so với thời gian tạm ngưng hoặc khi không muốn tạm ngưng ở chế độ tạm vắng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="3624515566460517364">Kiểm tra tệp đã tải lên và tệp đã tải xuống để xem có vi phạm quy tắc bảo vệ dữ liệu nhạy cảm hay không</translation>
 <translation id="3627678165642179114">Bật hoặc tắt dịch vụ web kiểm tra lỗi chính tả</translation>
 <translation id="3628480121685794414">Bật chế độ in một mặt</translation>
@@ -2326,7 +2326,7 @@
 
       Nếu bạn chọn 'Bật' hoặc không đặt chính sách này, thì người dùng có thể mở trang ở chế độ ẩn danh.
 
-      Nếu bạn chọn 'Tắt', người dùng sẽ không thể mở trang ở chế độ ẩn danh.
+      Nếu bạn chọn 'Tắt', thì người dùng sẽ không thể mở trang ở chế độ ẩn danh.
 
       Nếu bạn chọn 'Bắt buộc', người dùng CHỈ có thể mở trang ở chế độ ẩn danh. Xin lưu ý rằng tùy chọn 'Bắt buộc' không hoạt động trên Android-on-Chrome</translation>
 <translation id="4600786265870346112">Bật con trỏ lớn</translation>
@@ -2693,13 +2693,13 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình giảm độ sáng khi chạy trên nguồn pin.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> giảm độ sáng màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> giảm độ sáng màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không giảm độ sáng màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không giảm độ sáng màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ tắt màn hình (nếu có đặt thời gian này) và thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ tắt màn hình (nếu có đặt thời gian này) và thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="527237119693897329">Cho phép bạn chỉ định máy chủ nhắn tin gốc nào không được tải.
 
           Giá trị danh sách cấm '*' nghĩa là tất cả máy chủ nhắn tin gốc được đưa vào danh sách cấm trừ khi chúng được liệt kê rõ ràng trong danh sách cho phép.
@@ -3316,12 +3316,12 @@
 <translation id="6224304369267200483">URL/miền đã tự động cho phép chứng thực Khóa bảo mật trực tiếp</translation>
 <translation id="6233173491898450179">Đặt thư mục tải xuống</translation>
 <translation id="6244210204546589761">Các URL sẽ mở khi khởi động</translation>
-<translation id="6247316685259031374">Chính sách này kiểm soát môi trường hộp cát của quy trình âm thanh.
-      Nếu bạn bật chính sách này, quy trình âm thanh sẽ chạy trong môi trường hộp cát.
-      Nếu bạn tắt chính sách này, quy trình âm thanh sẽ chạy mà không có môi trường hộp cát và mô-đun xử lý âm thanh WebRTC sẽ chạy trong quy trình kết xuất.
-      Điều này sẽ khiến người dùng có nguy cơ gặp phải các rủi ro bảo mật liên quan đến việc chạy hệ thống phụ âm thanh không ở trong môi trường hộp cát.
+<translation id="6247316685259031374">Chính sách này kiểm soát môi trường hộp cát của tiến trình âm thanh.
+      Nếu bạn bật chính sách này, tiến trình âm thanh sẽ chạy trong môi trường hộp cát.
+      Nếu bạn tắt chính sách này, tiến trình âm thanh sẽ chạy mà không có môi trường hộp cát và mô-đun xử lý âm thanh WebRTC sẽ chạy trong tiến trình kết xuất.
+      Điều này sẽ khiến người dùng có nguy cơ gặp phải các rủi ro bảo mật liên quan đến việc chạy hệ thống con âm thanh không ở trong môi trường hộp cát.
       Nếu bạn không đặt chính sách này, thì cấu hình mặc định cho hộp cát âm thanh sẽ được sử dụng. Cấu hình này có thể khác nhau tùy theo nền tảng.
-      Chính sách này nhằm giúp doanh nghiệp có thể tắt hộp cát âm thanh một cách linh hoạt nếu họ sử dụng các tùy chọn thiết lập phần mềm bảo mật gây cản trở hộp cát.</translation>
+      Chính sách này nhằm cho phép doanh nghiệp có thể tắt hộp cát âm thanh một cách linh hoạt nếu họ sử dụng các tùy chọn thiết lập phần mềm bảo mật gây cản trở hộp cát.</translation>
 <translation id="6255387031094435995">Cho phép hợp nhất các chính sách đã chọn khi các chính sách đó thuộc nhiều nguồn khác nhau, có cùng phạm vi và cấp độ.
 
         Nếu một chính sách có trong danh sách, trong trường hợp xảy ra xung đột giữa 2 nguồn có cùng phạm vi và cấp độ, thì các giá trị sẽ được hợp nhất thành một danh sách chính sách mới.
@@ -3342,13 +3342,13 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm hộp thoại cảnh báo hiển thị khi chạy trên nguồn AC.
 
-          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ không sử dụng đó sắp được thực hiện.
+          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện.
 
           Khi bạn không đặt chính sách này, sẽ không có hộp thoại cảnh báo nào hiển thị.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ không sử dụng.
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.
 
-          Thông báo cảnh báo chỉ hiển thị nếu hành động ở chế độ không sử dụng là hành động đăng xuất hoặc tắt nguồn.</translation>
+          Thông báo cảnh báo chỉ hiển thị nếu hành động ở chế độ tạm vắng là hành động đăng xuất hoặc tắt nguồn.</translation>
 <translation id="6310223829319187614">Bật tự động hoàn tất tên miền trong khi người dùng đăng nhập</translation>
 <translation id="6315673513957120120">Chrome hiển thị trang cảnh báo khi người dùng truy cập các trang web gặp lỗi SSL. Theo mặc định hoặc khi chính sách này được đặt thành true, người dùng được phép nhấp qua các trang cảnh báo này.
       Đặt chính sách này thành false sẽ không cho phép người dùng nhấp qua bất kỳ trang cảnh báo nào.</translation>
@@ -4664,9 +4664,9 @@
       Nếu bạn không đặt hoặc đặt chính sách thành true thì tất cả người dùng sẽ được phép sử dụng ARC (trừ khi ARC bị tắt bởi các phương tiện khác).
 
       Các thay đổi đối với chính sách sẽ chỉ được áp dụng trong khi ARC không chạy, ví dụ như khi Chrome OS đang khởi động.</translation>
-<translation id="8606263947930257189">Kiểm soát việc <ph name="PRODUCT_NAME" /> có thể đóng băng các tab chạy ngầm trong tối thiểu 5 phút hay không.
+<translation id="8606263947930257189">Kiểm soát việc <ph name="PRODUCT_NAME" /> có thể đóng băng các tab chạy trong nền trong tối thiểu 5 phút hay không.
 
-      Nếu bạn đặt chính sách này thành true, thì các tab chạy ngầm trong tối thiểu 5 phút có thể bị đóng băng. Việc đóng băng tab sẽ giúp giảm mức sử dụng CPU, pin và bộ nhớ. <ph name="PRODUCT_NAME" /> sử dụng kỹ thuật phỏng đoán để tránh đóng băng các tab chạy ngầm hữu ích (ví dụ: hiển thị thông báo, phát âm thanh, phát trực tuyến video). Các nhà phát triển web cũng có thể chọn không đóng băng trang web của mình (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
+      Nếu bạn đặt chính sách này thành true, thì các tab chạy trong nền trong tối thiểu 5 phút có thể bị đóng băng. Việc đóng băng tab sẽ giúp giảm mức sử dụng CPU, pin và bộ nhớ. <ph name="PRODUCT_NAME" /> sử dụng kỹ thuật "tự nghiệm học" để tránh đóng băng các tab hữu ích chạy trong nền (ví dụ: hiển thị thông báo, phát âm thanh, phát video trực tuyến). Các nhà phát triển web cũng có thể chọn không đóng băng trang web của mình (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md).
 
       Nếu bạn đặt chính sách thành false thì sẽ không có tab nào bị đóng băng.</translation>
 <translation id="8615400197788843468">Bật tính năng hạn chế đăng nhập của <ph name="PRODUCT_NAME" /> trong G Suite và ngăn người dùng thay đổi tùy chọn cài đặt này.
@@ -4692,13 +4692,13 @@
 
           Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm màn hình giảm độ sáng khi chạy trên nguồn AC.
 
-          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> giảm độ sáng màn hình.
+          Khi bạn đặt chính sách này thành một giá trị lớn hơn 0, chính sách sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> giảm độ sáng màn hình.
 
-          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không giảm độ sáng màn hình khi người dùng ở chế độ không sử dụng.
+          Khi bạn đặt chính sách này thành 0, <ph name="PRODUCT_OS_NAME" /> sẽ không giảm độ sáng màn hình khi người dùng ở chế độ tạm vắng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ tắt màn hình (nếu có đặt thời gian này) và thời gian chờ khi ở chế độ không sử dụng.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ tắt màn hình (nếu có đặt thời gian này) và thời gian chờ khi ở chế độ tạm vắng.</translation>
 <translation id="8625234016727663537">Cho phép bạn đặt danh sách các URL chỉ định những trang web sẽ tự động được cấp quyền truy cập vào thiết bị USB bằng mã sản phẩm và mã nhà cung cấp trên màn hình đăng nhập. Mỗi mục trong danh sách phải chứa cả thiết bị và URL để chính sách có hiệu lực. Mỗi mục trong các thiết bị có thể chứa trường mã sản phẩm và mã nhà cung cấp. Bất kỳ mã nào bị bỏ qua đều được coi là ký tự đại diện có ngoại lệ. Ngoại lệ đó là khi hệ thống không thể chỉ định mã sản phẩm nếu không có mã nhà cung cấp. Nếu không thuộc trường hợp ngoại lệ này thì chính sách sẽ không có hiệu lực và bị bỏ qua.
 
         Mô hình cấp phép của USB sử dụng URL của trang web yêu cầu ("URL yêu cầu") và URL của trang web khung cấp cao nhất ("URL nhúng") để cấp cho URL yêu cầu quyền truy cập vào thiết bị USB. URL yêu cầu có thể khác với URL nhúng khi bạn tải trang web yêu cầu trong khung nội tuyến. Do đó, trường "urls" có thể chứa tối đa 2 chuỗi URL phân tách bằng dấu phẩy để chỉ định URL yêu cầu và URL nhúng tương ứng. Nếu chỉ có một URL được chỉ định, thì quyền truy cập vào các thiết bị USB tương ứng sẽ được cấp khi URL của trang web yêu cầu khớp với URL này bất kể trạng thái nhúng. Các URL trong "urls" phải là các URL hợp lệ, nếu không, chính sách này sẽ bị bỏ qua.
@@ -4753,15 +4753,15 @@
       Nếu cài đặt này bị tắt, không thể xóa lịch sử duyệt web và lịch sử tải xuống.</translation>
 <translation id="8752541111574086388">Xin lưu ý rằng chính sách này không được dùng nữa và sẽ bị xóa trong <ph name="PRODUCT_OS_NAME" /> phiên bản 82. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
-          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm hiển thị hộp thoại cảnh báo khi chạy trên nguồn pin.
+          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm hệ thống hiển thị hộp thoại cảnh báo khi chạy trên nguồn pin.
 
-          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ không sử dụng đó sắp được thực hiện.
+          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> hiển thị hộp thoại cảnh báo cho người dùng biết rằng hành động ở chế độ tạm vắng đó sắp được thực hiện.
 
           Khi bạn không đặt chính sách này, sẽ không có hộp thoại cảnh báo nào hiển thị.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ không sử dụng.
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây. Các giá trị được giới hạn ở mức nhỏ hơn hoặc bằng thời gian chờ khi ở chế độ tạm vắng.
 
-          Thông báo cảnh báo chỉ hiển thị nếu hành động ở chế độ không sử dụng là hành động đăng xuất hoặc tắt nguồn.</translation>
+          Thông báo cảnh báo chỉ hiển thị nếu hành động ở chế độ tạm vắng là hành động đăng xuất hoặc tắt nguồn.</translation>
 <translation id="8757552286070680084">Cấu hình bộ điều khiển chẩn đoán và đo từ xa (DTC) wilco</translation>
 <translation id="8758831693895931466">Bật đăng ký quản lý đám mây bắt buộc</translation>
 <translation id="8759829385824155666">Các loại mã hóa Kerberos được cho phép</translation>
@@ -4852,22 +4852,22 @@
 <translation id="8917070657147922192">Cho phép người dùng quản lý các chứng chỉ CA đã cài đặt.</translation>
 <translation id="8926275581598789324">Xin lưu ý rằng chính sách này không được dùng nữa và sẽ bị xóa trong <ph name="PRODUCT_OS_NAME" /> phiên bản 82. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
-          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm thực hiện hành động ở chế độ không sử dụng đó khi chạy trên nguồn pin.
+          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm hệ thống thực hiện hành động ở chế độ tạm vắng khi chạy trên nguồn pin.
 
-          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> thực hiện hành động ở chế độ không sử dụng đó. Bạn có thể định cấu hình riêng biệt khoảng thời gian này.
+          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> thực hiện hành động ở chế độ tạm vắng mà bạn có thể định cấu hình riêng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây.</translation>
 <translation id="8929997566627164343">Xin lưu ý rằng chính sách này không được dùng nữa và sẽ bị xóa trong <ph name="PRODUCT_OS_NAME" /> phiên bản 82. Thay vào đó, vui lòng sử dụng <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />.
 
-          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm thực hiện hành động ở chế độ không sử dụng đó khi chạy trên nguồn AC.
+          Chỉ định khoảng thời gian kể từ khi người dùng không có thao tác nhập cho đến thời điểm thực hiện hành động ở chế độ tạm vắng đó khi chạy trên nguồn AC.
 
-          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ không sử dụng trước khi <ph name="PRODUCT_OS_NAME" /> thực hiện hành động ở chế độ không sử dụng đó. Bạn có thể định cấu hình riêng biệt khoảng thời gian này.
+          Khi bạn đặt, chính sách này sẽ chỉ định khoảng thời gian người dùng phải duy trì chế độ tạm vắng trước khi <ph name="PRODUCT_OS_NAME" /> thực hiện hành động ở chế độ tạm vắng mà bạn có thể định cấu hình riêng.
 
           Khi bạn không đặt chính sách này, khoảng thời gian mặc định sẽ được sử dụng.
 
-          Phải chỉ định giá trị của chính sách bằng mili giây.</translation>
+          Bạn phải chỉ định giá trị của chính sách bằng mili giây.</translation>
 <translation id="8934944553121392674">Kiểm soát máy in người dùng được phép sử dụng từ <ph name="DEVICE_PRINTERS_POLICY" />.
 
       Chỉ định chính sách truy cập dùng cho cấu hình máy in số lượng lớn. Nếu bạn chọn <ph name="PRINTERS_ALLOW_ALL" />, thì tất cả máy in sẽ hiển thị. Nếu bạn chọn <ph name="PRINTERS_BLACKLIST" />, thì <ph name="DEVICE_PRINTERS_BLACKLIST" /> sẽ dùng để hạn chế truy cập vào các máy in đã chỉ định. Nếu bạn chọn <ph name="PRINTERS_WHITELIST" />, thì <ph name="DEVICE_PRINTERS_WHITELIST" /> sẽ chỉ chỉ định những máy in có thể chọn được.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb
index 477f11d2..72e0fc1 100644
--- a/components/policy/resources/policy_templates_zh-CN.xtb
+++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -1,6 +1,15 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-CN">
+<translation id="1001649754854402482">在新版 <ph name="CORS" /> 实现方案中启用 <ph name="CORS" /> 检查缓解功能,从而允许扩展程序保持兼容的行为,并允许 <ph name="PRODUCT_NAME" /> 无需进行 <ph name="CORS" /> 检查便可发送指定标头。
+
+      如果此列表设为空,<ph name="PRODUCT_NAME" /> 会尝试以兼容的方式运行扩展程序,而不会为 <ph name="PRODUCT_NAME" /> 79 引入 <ph name="WEB_REQUEST_API_MANUAL" /> 中所述的 <ph name="API" /> 更改。
+
+      如果此列表设为包含 <ph name="HTTP" /> 请求标头名称,则 <ph name="CORS" /> 检查将会忽略所列的标头,并会为扩展程序启用缓解功能。
+
+      如果此列表未设置,系统将不会应用上文介绍的两项缓解功能。
+
+      如需详细了解 <ph name="CORS" />,请访问 <ph name="CORS_HELP_URL" />。</translation>
 <translation id="1002439864875515590">如果此政策设为一个空字符串或未配置,<ph name="PRODUCT_OS_NAME" />将不会在用户登录期间显示自动填充选项。
       如果此政策设为一个表示域名的字符串,<ph name="PRODUCT_OS_NAME" />将在用户登录期间显示自动填充选项,让用户可以只输入自己的用户名,而不必输入域名扩展名。用户可以覆盖此域名扩展名。
       如果此政策的值不是一个有效的域名,系统便不会应用此政策。</translation>
@@ -60,6 +69,17 @@
       如果设置了此政策,用户将无法更改或覆盖它。</translation>
 <translation id="1062011392452772310">为设备启用远程认证</translation>
 <translation id="1062407476771304334">替换</translation>
+<translation id="1078643757670228170">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用交流电源供电时系统应在设备闲置多久后关闭屏幕。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会关闭屏幕。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会关闭屏幕。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。</translation>
 <translation id="1079801999187584280">禁止使用开发者工具</translation>
 <translation id="1087437665304381368">此政策仅用于控制 <ph name="PRODUCT_OS_NAME" />开发者模式。如果您想阻止对 Android 开发者选项的访问,则需设置 <ph name="DEVELOPER_TOOLS_DISABLED_POLICY_NAME" /> 政策。</translation>
 <translation id="1087707496788636333">Chrome 企业版政策列表迁址了!请更新您的书签以改用 <ph name="POLICY_DOCUMENTATION_URL" />。</translation>
@@ -202,6 +222,13 @@
       此政策会影响所有类型的音频输出(而不仅仅是内置扬声器)。音频辅助功能也受此政策约束。如果用户需要使用屏幕阅读器,请勿启用此政策。
 
       如果不设置此政策或将其设为 true,用户将可以在其设备上使用所有支持的音频输出。</translation>
+<translation id="1358050607773151553">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          如果设置了此政策,即是指定了当设备闲置时长超过所设的闲置延迟时间后 <ph name="PRODUCT_OS_NAME" />会执行的操作;闲置延迟时间可另行配置。
+
+          如果未设置此政策,系统会执行默认操作,即暂停。
+
+          如果需要执行的操作是暂停,您还可另行配置 <ph name="PRODUCT_OS_NAME" />在暂停前是否锁定屏幕。</translation>
 <translation id="1359553908012294236">如果此政策设为 true 或未配置,<ph name="PRODUCT_NAME" /> 将允许使用访客身份登录。访客身份是指 <ph name="PRODUCT_NAME" /> 个人资料,使用此类个人资料登录后,所有窗口均处于隐身模式。
 
       如果此政策设为 false,<ph name="PRODUCT_NAME" /> 将禁止使用访客个人资料登录。</translation>
@@ -211,6 +238,11 @@
       如果此政策处于停用状态,Google 助理将无法访问屏幕上的上下文内容。
       如果此政策未设置,用户可以决定是否允许 Google 助理访问屏幕上的上下文内容</translation>
 <translation id="1376119291123231789">启用高级电池充电模式</translation>
+<translation id="1377134027840513298">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          此政策可为更具体的 <ph name="IDLE_ACTION_AC_POLICY_NAME" /> 和 <ph name="IDLE_ACTION_BATTERY_POLICY_NAME" /> 政策提供后备值。如果设置了此政策,但未分别设置更具体的政策,系统就会使用此值。
+
+          如果未设置此政策,更具体政策的行为不会受到影响。</translation>
 <translation id="1383493480903114193">此政策会强制网络代码在浏览器进程中运行。
 
       此政策默认处于停用状态;若被启用,则会在网络进程被沙盒化后使用户面临安全问题的威胁。
@@ -306,6 +338,7 @@
           如果“EnableMediaRouter”政策设为 false,那么此政策的值将不会发挥任何作用。</translation>
 <translation id="1509692106376861764">此政策从 <ph name="PRODUCT_NAME" /> 版本 29 起开始弃用。</translation>
 <translation id="1514888685242892912">启用 <ph name="PRODUCT_NAME" /></translation>
+<translation id="1515824657887788963">允许页面在关闭过程中执行同步 XHR 请求。</translation>
 <translation id="1522425503138261032">允许网站跟踪用户的地理位置</translation>
 <translation id="1523774894176285446">对于配置的网站要启动的替代浏览器。</translation>
 <translation id="152657506688053119">默认搜索服务提供商的备选网址列表</translation>
@@ -314,6 +347,7 @@
 <translation id="1553684822621013552">如果将这项政策设为 true,系统会为用户启用 ARC(需要经过额外的政策设置检查;如果目前的用户会话中已启用暂存模式或多帐号登录功能,则用户仍然无法使用 ARC)。
 
 如果停用或未配置此设置,那么企业用户将无法使用 ARC。</translation>
+<translation id="1553956579506604198">禁止安装外部扩展程序</translation>
 <translation id="1559980755219453326">此政策可控制是否报告扩展程序和插件信息。
 
       如果此政策设为 True 或未设置,系统会收集扩展程序和插件数据。
@@ -438,6 +472,15 @@
       如果此政策设为一个有效网址,<ph name="PRODUCT_NAME" /> 就会从该网址下载网站列表,并会应用相应规则,就好像这些规则是使用 <ph name="SITELIST_POLICY_NAME" /> 政策配置的一样。
 
       要详细了解 Internet Explorer 的 <ph name="IEEM_SITELIST_POLICY" /> 政策,请访问 https://docs.microsoft.com/internet-explorer/ie11-deploy-guide/what-is-enterprise-mode</translation>
+<translation id="1839278886947586809">
+      此政策已在 M80 中移除,因为 WebDriver 现已与所有现有政策兼容,因而不再需要此政策。
+
+      此政策允许 WebDriver 功能的用户覆盖那些可能会干扰该功能运行的政策。
+
+      目前,此政策可停用 SitePerProcess 和 IsolateOrigins 政策。
+
+      如果此政策已启用,WebDriver 将能够覆盖与之冲突的政策。
+      如果此政策已停用或未配置,WebDriver 将无法覆盖与之冲突的政策。</translation>
 <translation id="1843117931376765605">用户策略的更新频率</translation>
 <translation id="1844620919405873871">配置快速解锁相关政策。</translation>
 <translation id="1845405905602899692">自助服务终端设置</translation>
@@ -531,6 +574,17 @@
       如果停用了此设置,“自动填充”功能便绝不会提供相关建议或填充地址信息,也不会保存用户可能会在浏览网页时提交的其他地址信息。
 
       如果启用了此设置或未设定任何值,用户将能够控制是否要在界面中自动填充地址信息。</translation>
+<translation id="1959613237819575097">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用电池供电时系统应在设备闲置多久后关闭屏幕。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会关闭屏幕。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会关闭屏幕。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。</translation>
 <translation id="1962273523772270623">允许从 Google 服务收集 WebRTC 事件日志</translation>
 <translation id="1964634611280150550">隐身模式已停用</translation>
 <translation id="1964802606569741174">此政策对 Android 版 YouTube 应用没有任何影响。如果应在 YouTube 中强制启用安全模式,则应禁止安装 Android 版 YouTube 应用。</translation>
@@ -573,6 +627,7 @@
           如果此政策未设置,系统将使用所有这四种方案。</translation>
 <translation id="2067011586099792101">禁止访问非内容包内的网站</translation>
 <translation id="2073552873076775140">允许登录 <ph name="PRODUCT_NAME" /></translation>
+<translation id="2075732129949889165">Crostini Ansible Playbook</translation>
 <translation id="2077129598763517140">使用硬件加速模式(如果可用)</translation>
 <translation id="2077273864382355561">使用电源供电时的屏幕关闭延迟时间</translation>
 <translation id="2082205219176343977">为设备配置允许使用的最低 Chrome 版本。</translation>
@@ -583,6 +638,13 @@
 <translation id="2107601598727098402">
         此政策在 M72 中已弃用。请改用 CloudManagementEnrollmentToken。
         </translation>
+<translation id="2108169571875569435">此政策用于控制使用哪个命令在备用浏览器中打开网址。
+
+      如果此政策未设置,系统会使用平台设定的默认浏览器:在 Windows 上使用 Internet Explorer,在 Mac OS X 上使用 Safari。在 Linux 上,如果此政策未设置,系统将无法启动备用浏览器。
+
+      如果此政策设为 <ph name="INTERNET_EXPLORER_VALUE_PLACEHOLDER" />、<ph name="FIREFOX_VALUE_PLACEHOLDER" />、<ph name="SAFARI_VALUE_PLACEHOLDER" /> 或 <ph name="OPERA_VALUE_PLACEHOLDER" />,系统会启动对应的浏览器(前提是已安装)。<ph name="INTERNET_EXPLORER_VALUE_PLACEHOLDER" /> 仅在 Windows 上可用,<ph name="SAFARI_VALUE_PLACEHOLDER" /> 仅在 Windows 和 Mac OS X 上可用。
+
+      如果此政策设为文件路径,系统会将相应文件用作可执行文件。</translation>
 <translation id="2111016292707172233">在 <ph name="PRODUCT_NAME" /> 的内容视图中启用“点按搜索”功能。
 
       如果您启用了此设置,用户将能够使用“点按搜索”功能,并可选择开启或关闭该功能。
@@ -622,6 +684,7 @@
 <translation id="214901426630414675">限制双面打印模式</translation>
 <translation id="2149330464730004005">启用彩色打印</translation>
 <translation id="2156132677421487971">为 <ph name="PRODUCT_NAME" /> 配置相关政策。借助这项功能,用户可从浏览器将标签页、网站或桌面中的内容发送到远程显示器和音响系统。</translation>
+<translation id="2156755242840687300">已启用外部打印服务器</translation>
 <translation id="2166472654199325139">不滤除提供成人内容的网站</translation>
 <translation id="2168397434410358693">使用交流电源供电时的闲置延迟时间</translation>
 <translation id="217013996107840632">用于从替代浏览器切换至 Chrome 的命令行参数。</translation>
@@ -668,7 +731,11 @@
       如果此政策已停用,则系统一律不提示用户,只有 VideoCaptureAllowedUrls 中配置的网址可以使用视频捕获设备。
 
       此政策会影响所有类型的视频输入(而不仅仅是内置摄像头)。</translation>
+<translation id="2197625019569762163">如果此政策设为 true,登录屏幕上会默认显示数字键盘以用于输入密码。用户仍能切换到常规键盘。
+
+      如果您设置了此政策,用户便无法更改它。如果此政策未设置或设为 false,它将不会产生任何效力。</translation>
 <translation id="2201555246697292490">配置本地消息传递主机白名单</translation>
+<translation id="220280840901385239">让用户能够添加例外情况以允许显示可屏蔽的混合内容</translation>
 <translation id="2204753382813641270">控制任务栏是否自动隐藏</translation>
 <translation id="2208976000652006649">在使用 POST 的搜索网址中所需的参数</translation>
 <translation id="2214880135980649323">如果启用了此政策,由企业政策安装的扩展程序将可以使用 Enterprise Hardware Platform API。
@@ -722,6 +789,11 @@
 <translation id="2345547870894930157">启用 DNS-over-HTTPS,且禁止改用不安全的查询</translation>
 <translation id="237494535617297575">可让您设置网址格式的列表,这些网址格式用于指定允许显示通知的网站。在未设置此政策的情况下,如果设置了“DefaultNotificationsSetting”政策,那么将对该政策中的所有网站使用全局默认值,否则将对用户个人配置中的所有网站使用全局默认值。</translation>
 <translation id="2386362615870139244">允许使用屏幕唤醒锁定</translation>
+<translation id="2398554235599593694"> 此政策用于控制在出现外部协议启动确认提示时是否显示“始终打开”复选框。
+
+      如果此政策设为 True,当系统显示外部协议确认提示时,用户可选择“始终打开”该协议,以使系统不再显示此类提示。
+
+      如果此政策设为 False 或未设置,系统将不会显示“始终打开”复选框,但每次调用外部协议时都会提示用户。</translation>
 <translation id="2411817661175306360">密码保护服务警告功能处于关闭状态</translation>
 <translation id="2411919772666155530">阻止在这些网站上显示通知</translation>
 <translation id="2418507228189425036">停用 <ph name="PRODUCT_NAME" /> 中的浏览记录保存功能,并禁止用户更改此设置。
@@ -750,6 +822,19 @@
       如果此设置未指定,那么用户可以决定是否使用此功能。
 
       29 版及更高版本的 <ph name="PRODUCT_NAME" /> 中已取消此设置。</translation>
+<translation id="2430828513262055658">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="SCREEN_LOCK_DELAYS_POLICY_NAME" />。
+
+          指定当使用交流电源供电时系统应在设备闲置多久后锁定屏幕。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会锁定屏幕。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会锁定屏幕。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          要在设备闲置时锁定屏幕,您最好采用以下方式:允许在系统处于暂停状态时锁定屏幕,并指示 <ph name="PRODUCT_OS_NAME" />在闲置延迟时间过后进入暂停状态。只有在以下情况下才应使用此政策:屏幕锁定时间应远远早于系统进入暂停状态的时间,或者完全不需要在设备闲置时暂停系统。
+
+          指定的政策值应以毫秒为单位,且必须小于闲置延迟时间。</translation>
 <translation id="2433412232489478893">此政策可控制是否允许用户在 <ph name="PRODUCT_NAME" />上使用网络文件共享功能。
 
       如果未配置此政策或将其设为“True”,用户将能够使用网络文件共享功能。
@@ -831,6 +916,17 @@
 
       如果该政策设置为False,那么系统将显示错误消息,而不是网络配置提示。</translation>
 <translation id="2498238926436517902">始终自动隐藏任务栏</translation>
+<translation id="2505805702054675476">此政策用于控制启动备用浏览器时传递的命令行参数。
+
+      如果此政策未设置,则系统只会将网址作为命令行参数进行传递。
+
+      如果此政策设为一系列字符串,则系统会将每个字符串作为单独的命令行参数传递给备用浏览器。在 Windows 上,这些参数会被使用空格连接起来。在 Mac OS X 和 Linux 上,参数可以包含空格,但仍会被视为单个参数。
+
+      如果有元素包含 <ph name="URL_PLACEHOLDER" />,系统会将其替换为要打开的网页对应的网址。
+
+      如果没有元素包含 <ph name="URL_PLACEHOLDER" />,系统会将网址附加到命令行的末尾。
+
+      系统会扩展环境变量。在 Windows 上,<ph name="ENV_VARIABLE_WIN_EXAMPLE" /> 会被替换为 <ph name="ENV_VARIABLE_VALUE" /> 环境变量的值。在 Mac OS X 和 Linux 上,<ph name="ENV_VARIABLE_UNIX_EXAMPLE" /> 会被替换为 <ph name="ENV_VARIABLE" /> 环境变量的值。</translation>
 <translation id="250670737672448119">启用“插入符号突出显示”无障碍功能。
 
           此功能负责在修改内容时突出显示插入符号周围的区域。
@@ -848,8 +944,14 @@
       如果已启用或未配置此设置,用户就可以进行打印。
 
       如果已停用此设置,用户就无法通过 <ph name="PRODUCT_NAME" /> 进行打印。扳手菜单、扩展程序、JavaScript 应用等中的打印功能已停用。但如果有插件在打印时绕过 <ph name="PRODUCT_NAME" />,那么仍有可能使用该插件打印。例如某些 Flash 应用在自身的右键菜单中提供了打印选项,此策略中没有涉及这一点。</translation>
+<translation id="2517466659416174529">允许系统冻结后台标签页</translation>
 <translation id="2518231489509538392">允许播放视频</translation>
 <translation id="2521581787935130926">在书签栏中显示应用快捷方式</translation>
+<translation id="2526082146909867346">可让您指定一系列网址格式,从而指定 <ph name="PRODUCT_NAME" /> 应为哪些网站自动选择客户端证书(如果相应网站要求提供证书)。
+
+          此值必须是一个字符串化的 JSON 字典数组。每个字典都必须采用 <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" /> 格式,其中 <ph name="URL_PATTERN_PLACEHOLDER" /> 是内容设置格式,<ph name="FILTER_PLACEHOLDER" /> 会限制浏览器可自动从哪些客户端证书中进行选择。无论是否设置了过滤器,系统都只会选择与服务器的证书请求相匹配的证书。例如,如果 <ph name="FILTER_PLACEHOLDER" /> 采用 <ph name="AUTO_SELECT_CERTIFICATE_FOR_URLS_FILTER_EXAMPLE" /> 格式,系统便只会选择由 CommonName 为 <ph name="ISSUER_CN_PLACEHOLDER" /> 的证书颁发机构颁发的客户端证书。如果 <ph name="FILTER_PLACEHOLDER" /> 既包含 <ph name="ISSUER_STRING_VALUE" /> 部分也包含 <ph name="SUBJECT_STRING_VALUE" /> 部分,则只有同时满足了这两项条件的客户端证书才会被选中。如果 <ph name="FILTER_PLACEHOLDER" /> 指定了组织(“O”),则只有包含至少 1 个与指定值匹配的组织的证书才会被选中。如果 <ph name="FILTER_PLACEHOLDER" /> 指定了组织单元(“OU”),则只有包含至少 1 个与指定值匹配的组织单元的证书才会被选中。如果 <ph name="FILTER_PLACEHOLDER" /> 是空字典 <ph name="EMPTY_DICTIONARY" />,那么系统在选择客户端证书时便不会受到额外限制。
+
+          如果未设置此政策,系统将不会为任何网站自动选择证书。</translation>
 <translation id="2529659024053332711">让您能够指定启动时的行为。
 如果您选择“打开新的标签页”,当您启动 <ph name="PRODUCT_NAME" /> 时,系统将会始终打开“新标签页”页面。
 
@@ -943,6 +1045,7 @@
           您可以按以下格式指定 Google 的搜索网址:<ph name="GOOGLE_SEARCH_URL" />。
 
           “DefaultSearchProviderEnabled”政策处于启用状态时,必须设置此选项,并且只有在这种情况下此选项才能发挥作用。</translation>
+<translation id="2658653824183107970">使用旧版 <ph name="CORS" /> 实现方案(而非新版 <ph name="CORS" />)</translation>
 <translation id="2659019163577049044">如果此设置处于启用状态,用户将能够设置他们的设备,以便在手机和 Chromebook 之间同步短信。请注意:此政策处于启用状态时,如果用户想要使用短信同步功能,必须完成一个设置流程,以便明确选择启用这项功能。设置流程完成后,用户将能够在 Chromebook 上收发短信。
 
       如果此设置处于停用状态,用户将不能设置短信同步功能。
@@ -1097,6 +1200,13 @@
 <translation id="2872961005593481000">关机</translation>
 <translation id="2873651257716068683">替换默认打印页面大小。如果这种页面大小不适用,则忽略此政策。</translation>
 <translation id="2874209944580848064">针对支持 Android 应用的 <ph name="PRODUCT_OS_NAME" />设备的注意事项:</translation>
+<translation id="2875192972412983412">指定要让系统为确认是否有可用的服务器打印机而查询的部分打印服务器。
+
+      如果使用此政策,则只有那些具有与此政策中所列值匹配的 ID 的服务器打印机才可供用户使用。
+
+      ID 必须与 <ph name="EXTERNAL_PRINT_SERVERS_POLICY" /> 中指定的文件内的“id”字段相符。
+
+      如果此政策未设置,系统便不会执行过滤,所有打印服务器都会被纳入考虑范围内。</translation>
 <translation id="2877225735001246144">在协商 Kerberos 身份验证时停用 CNAME 查找</translation>
 <translation id="2890645751406497668">自动授权这些网站通过给定的供应商 ID 和产品 ID 连接到 USB 设备。</translation>
 <translation id="2892414556511568464">限制双面打印模式。如果未设置此政策或将其留空,则会被视为无限制。</translation>
@@ -1234,6 +1344,7 @@
 
       此政策仅适用于已加入 <ph name="MS_AD_NAME" /> 网域的 Windows 实例,或者已注册设备管理服务的 Windows 10 Pro 或 Enterprise 实例。</translation>
 <translation id="3119125876909100625">允许上传受密码保护的文件</translation>
+<translation id="3122082892722698079">控制对不安全内容例外情况的使用</translation>
 <translation id="3152425128389603870">使“统一桌面”功能可供用户使用,并使其在默认情况下处于启用状态</translation>
 <translation id="3159375329008977062">允许用户通过界面导出/导入 Crostini 容器</translation>
 <translation id="3165808775394012744">将这些政策列于此处是为了方便您移除它们。</translation>
@@ -1258,6 +1369,13 @@
 <translation id="3236046242843493070">允许的扩展程序、应用和用户脚本安装源的网址格式</translation>
 <translation id="3240609035816615922">打印机配置访问政策。</translation>
 <translation id="3240655340884151271">基座的内置 NIC MAC 地址</translation>
+<translation id="3242756958360374888">包含一系列用于控制在 <ph name="PRODUCT_NAME" /> 中显示哪些帐号的格式。
+
+      系统会将设备上的每个 Google 帐号与此政策中存储的格式进行比对,以确定是否在 <ph name="PRODUCT_NAME" /> 中显示各个帐号。只要帐号名称与该列表内的任一格式匹配,系统即会显示相应帐号。如果帐号名称与该列表内的任一格式均不匹配,系统便会隐藏相应帐号。
+
+      可使用通配符“*”匹配 0 个或更多个任意字符。转义字符是“\”,因此要匹配实际的“*”或“\”字符,请在这些字符前面添加“\”。
+
+      如果此政策未设置,则设备上的所有 Google 帐号都会显示在 <ph name="PRODUCT_NAME" /> 中。</translation>
 <translation id="3251500716404598358">配置政策以在浏览器之间切换。
 
       配置的网站将自动在其他浏览器(而非 <ph name="PRODUCT_NAME" />)中打开。</translation>
@@ -1308,6 +1426,19 @@
 
       此政策只能设置为建议性质。您可以使用此政策将一些建议的语言区域移至顶部,但用户始终可为其自助服务终端选择 <ph name="PRODUCT_OS_NAME" />支持的任何语言区域。
       </translation>
+<translation id="3378482432905539452">此政策已被弃用。请使用 <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> 控制 Flash 插件的可用性,并使用 <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> 控制是否应使用集成式 PDF 查看器打开 PDF 文件。
+
+      指定可由用户在 <ph name="PRODUCT_NAME" /> 中启用或停用的一系列插件。
+
+      可使用通配符“*”和“?”匹配任意字符序列。“*”可匹配任意数量的字符,而“?”可指定单个可选的字符,即匹配 0 个或 1 个字符。转义字符为“\”,因此要匹配实际的“*”、“?”或“\”字符,您可以在这些字符前面加上“\”。
+
+      如果您启用了此设置,则可在 <ph name="PRODUCT_NAME" /> 中使用指定列表内的插件。用户可在“about:plugins”页面中启用或停用该列表内的任何插件,即使相应插件亦匹配 DisabledPlugins 中的格式也无妨。用户还可启用和停用与 DisabledPlugins、DisabledPluginsExceptions 和 EnabledPlugins 中的任何格式均不匹配的插件。
+
+      此政策用于在以下情况下实现严格的插件黑名单设置:“DisabledPlugins”列表包含带通配符的条目,例如停用所有插件 (*) 或停用所有 Java 插件 (*Java*),但管理员又想启用某个特定版本,例如“IcedTea Java 2.3”。这个特定版本可在此政策中指定。
+
+      请注意,相应插件的名称和组名称都必须被排除。在“about:plugins”页面中,每个插件组都会显示在一个单独的部分内;每个部分可包含一个或多个插件。例如,“Shockwave Flash”插件属于“Adobe Flash Player”组;如果要从黑名单中排除该插件,例外情况列表就必须含有与这两个名称分别对应的匹配项。
+
+      如果未设置此政策,那么与“DisabledPlugins”中的格式匹配的所有插件都会被锁定为停用状态,而且用户将无法启用这些插件。</translation>
 <translation id="3381968327636295719">默认情况下托管主机浏览器</translation>
 <translation id="3388153794103186066">让您能够以列表的形式设置一系列网址,以指定自动授权哪些网站访问具有给定供应商 ID 和产品 ID 的 USB 设备。列表中的每项内容都必须包含设备和网址这两个部分,此政策才会有效。设备部分中的每项都可包含供应商 ID 和产品 ID 字段。被省略的任何 ID 都会被视为通配符,但例外情况是:如果未指定供应商 ID,便无法指定产品 ID。否则,此政策将会无效并会被忽略。
 
@@ -1447,6 +1578,19 @@
           如果未设置此政策,则“随选朗读”最初会处于停用状态,但用户可以随时启用该功能。</translation>
 <translation id="3591527072193107424">启用“旧版浏览器支持”功能。</translation>
 <translation id="3591584750136265240">配置登录身份验证行为</translation>
+<translation id="3602332793276340697">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="SCREEN_LOCK_DELAYS_POLICY_NAME" />。
+
+          指定当使用电池供电时系统应在设备闲置多久后锁定屏幕。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会锁定屏幕。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会锁定屏幕。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          要在设备闲置时锁定屏幕,您最好采用以下方式:允许在系统处于暂停状态时锁定屏幕,并指示 <ph name="PRODUCT_OS_NAME" />在闲置延迟时间过后进入暂停状态。只有在以下情况下才应使用此政策:屏幕锁定时间应远远早于系统进入暂停状态的时间,或者完全不需要在设备闲置时暂停系统。
+
+          指定的政策值应以毫秒为单位,且必须小于闲置延迟时间。</translation>
 <translation id="3624515566460517364">检查上传内容和下载内容是否违反敏感数据保护规则</translation>
 <translation id="3627678165642179114">启用或停用拼写检查网络服务</translation>
 <translation id="3628480121685794414">启用单面打印</translation>
@@ -1677,12 +1821,14 @@
       设置设备壁纸政策后,如果还没有任何用户登录设备,Chrome 操作系统设备将下载并在登录屏幕上使用壁纸图片。一旦用户登录设备,用户的壁纸政策就会生效。
 
       如果设备壁纸政策未设置,则由用户的壁纸政策(如果已设置用户的壁纸政策)来决定要显示的图片。</translation>
+<translation id="3964298692570794635">允许在这些网站上显示不安全内容</translation>
 <translation id="3964606652985594895">报告存储设备的硬件统计信息和标识符。
 
       如果此政策设为 false 或未设置,系统将不会报告这些统计信息。
       如果此政策设为 true,系统将会报告这些统计信息。</translation>
 <translation id="3965339130942650562">对待机用户执行退出操作前的超时时间</translation>
 <translation id="3973371701361892765">一律不自动隐藏任务栏</translation>
+<translation id="3979738908158213640">有权在 SAML 身份验证过程中执行设备认证的网址</translation>
 <translation id="3984028218719007910">确定 <ph name="PRODUCT_OS_NAME" />是否要在退出后保留本地帐号数据。如果将此政策设置为 true,<ph name="PRODUCT_OS_NAME" />就不会持续保留帐号,且会在退出后舍弃用户会话中的所有数据。如果未配置此政策或将其设置为 false,设备就会保留(经过加密的)本地用户数据。</translation>
 <translation id="398475542699441679">此政策用于控制是否启用旧版浏览器支持。
 
@@ -1999,6 +2145,15 @@
 <translation id="445270821089253489">控制要报告的用户和设备信息种类。</translation>
 <translation id="4453913621209182880">仅允许在有背景图片的情况下打印</translation>
 <translation id="4454820008017317557">显示 <ph name="PRODUCT_NAME" /> 工具栏图标</translation>
+<translation id="4458977366860064210">使用旧版 <ph name="CORS" /> 实现方案,而非新版 <ph name="CORS" />。
+
+      如果此设置设为 True,系统会使用旧版实现方案(此版实现方案应该会与以往的版本兼容)。
+
+      如果此设置设为 False 或未设置,系统会使用新版实现方案(此版实现方案可能会导致出现特定于企业的兼容性问题)。
+
+      在几个里程碑后,此政策将被移除。
+
+      如需详细了解 <ph name="CORS" />,请访问 <ph name="CORS_HELP_URL" />。</translation>
 <translation id="4467952432486360968">阻止第三方 Cookie</translation>
 <translation id="4474167089968829729">允许将密码保存到密码管理器</translation>
 <translation id="4476769083125004742">如果此政策设为 <ph name="BLOCK_GEOLOCATION_SETTING" />,Android 应用将无法使用位置信息。如果此政策设为任何其他值或未设置,那么当 Android 应用想使用位置信息时,它会询问用户是否同意。</translation>
@@ -2036,6 +2191,17 @@
 <translation id="4534500438517478692">Android 限制名称:</translation>
 <translation id="4541530620466526913">设备本地帐号</translation>
 <translation id="4543502256674577024">设备更新设置</translation>
+<translation id="4548555985107150628">此政策已被弃用。请使用 <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> 控制 Flash 插件的可用性,并使用 <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> 控制是否应使用集成式 PDF 查看器打开 PDF 文件。
+
+      指定一系列要在 <ph name="PRODUCT_NAME" /> 中启用的插件,并禁止用户更改此设置。
+
+      可使用通配符“*”和“?”匹配任意字符序列。“*”可匹配任意数量的字符,而“?”可指定单个可选的字符,即匹配 0 个或 1 个字符。转义字符为“\”,因此要匹配实际的“*”、“?”或“\”字符,您可以在这些字符前面加上“\”。
+
+      <ph name="PRODUCT_NAME" /> 中始终会使用该列表内指定的插件(若已安装)。这些插件在“about:plugins”页面中被标记为已启用,而且用户无法停用它们。
+
+      请注意,此政策会覆盖 DisabledPlugins 和 DisabledPluginsExceptions。
+
+      如果未设置此政策,则用户可以停用系统中安装的任何插件。</translation>
 <translation id="4554651132977135445">用户政策环回处理模式</translation>
 <translation id="4554841826517980623">此政策用于控制适用于 <ph name="PRODUCT_NAME" />的网络文件共享功能是否应使用“<ph name="NETBIOS_PROTOCOL" />”来搜索网络上的共享文件。
       如果此政策设为 true,共享文件发现功能将使用“<ph name="NETBIOS_PROTOCOL" />”协议搜索网络上的共享文件。
@@ -2049,6 +2215,13 @@
 
           如果停用或不指定此设置,远程访问主机可以与任何本地用户关联。</translation>
 <translation id="4591366717022345234">为用户提供 Quick Fix Build</translation>
+<translation id="4592246263545654202">指定用户可否在 <ph name="PRODUCT_NAME" /> 中以无痕模式打开网页。
+
+      如果选择“已启用”或未设置此政策,则允许以无痕模式打开网页。
+
+      如果选择“已停用”,则不能以无痕模式打开网页。
+
+      如果选择“强制”,则只能以无痕模式打开网页。请注意,“强制”不适用于 Chrome 上的 Android 应用</translation>
 <translation id="4600786265870346112">启用大号光标</translation>
 <translation id="4604931264910482931">配置本地消息传递主机黑名单</translation>
 <translation id="4617338332148204752">跳过“<ph name="PRODUCT_FRAME_NAME" />”中的元标记检查</translation>
@@ -2388,6 +2561,17 @@
       另请访问 https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types。</translation>
 <translation id="5249453807420671499">用户可以添加 Kerberos 帐号</translation>
 <translation id="5255162913209987122">可推荐</translation>
+<translation id="5261766238868915624">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用电池供电时系统应在设备闲置多久后降低屏幕亮度。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会降低屏幕亮度。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会降低屏幕亮度。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位,且不得大于屏幕关闭延迟时间(若已设置)和闲置延迟时间。</translation>
 <translation id="527237119693897329">允许您指定不应加载哪些本地消息传递主机。
 
           如果黑名单的值为“*”,则意味着所有本地消息传递主机均将列入黑名单(除非这些主机已明确列入白名单)。
@@ -2644,6 +2828,20 @@
           只有在停用 <ph name="POWER_SMART_DIM_ENABLED_POLICY_NAME" /> 之后,此政策才会生效。否则,系统会忽略此政策,因为屏幕变暗延迟时间是由机器学习模型确定的。
 
           调整因子不得小于 100%。所用值不得导致演示模式下的屏幕变暗延迟时间短于常规模式。</translation>
+<translation id="5590988845778885692">提供可用打印服务器的配置。
+
+      此政策让您能够以 JSON 文件的形式向 <ph name="PRODUCT_OS_NAME" />设备提供外部打印服务器的配置。
+
+      该文件的大小不得超过 1MB,且必须包含记录(JSON 对象)数组。每条记录都必须包含“id”、“url”和“display_name”字段以及字符串形式的值。“id”字段的值必须是独一无二的。
+
+      系统会下载并缓存该文件。相应的加密哈希值用于验证下载内容是否完整。只要网址或哈希值有任何变化,系统就会重新下载该文件。
+
+      如果此政策设为正确的值,设备将尝试使用 IPP 协议查询指定的打印服务器,以确认是否有可用的打印机。
+
+      如果此政策设为不正确的值或未设置,用户将看不到任何服务器打印机。
+
+      目前,打印服务器的数量上限为 16 台。系统仅会查询列表中显示的前 16 台打印服务器。
+      </translation>
 <translation id="5592242031005200087">
       如果此政策处于启用状态,则以英文逗号分隔的列表中指定的每个来源都将在自己的进程中运行。这还会隔离以子网域指定的来源;例如,指定 https://example.com/ 还会导致 https://foo.example.com/ 被隔离(作为 https://example.com/ 网站的一部分)。
       如果此政策处于停用状态,则不会发生明确的网站隔离,IsolateOriginsAndroid 和 SitePerProcessAndroid 的现场试验也将停用。用户仍能够通过命令行标记手动启用 IsolateOrigins。
@@ -2756,6 +2954,19 @@
 
       网址(如 https://example.com/some/path)将仅匹配为 U2F appID。网域(如 example.com)将仅匹配为 webauthn RP ID。因此,要同时涵盖指定网址的 U2F 和 webauthn API,必须同时列出 appID 网址和网域。</translation>
 <translation id="5836064773277134605">限制远程访问主机使用的UDP端口范围</translation>
+<translation id="5855010364142818361">此政策旨在控制用于从 Internet Explorer 切换至 Chrome 的命令行参数。
+
+      如果未安装适用于 Internet Explorer 的“旧版浏览器支持”插件,则此政策不会生效。
+
+      如果此政策未设置,则 Internet Explorer 只会将网址作为命令行参数传递给 Chrome。
+
+      如果此政策设为一系列字符串,则这些字符串会被使用空格连接起来,并会被作为命令行参数传递给 Chrome。
+
+      如果有元素包含 <ph name="URL_PLACEHOLDER" />,系统会将其替换为要打开的网页对应的网址。
+
+      如果没有元素包含 <ph name="URL_PLACEHOLDER" />,系统会将网址附加到命令行的末尾。
+
+      系统会扩展环境变量。在 Windows 上,<ph name="ENV_VARIABLE_WIN_EXAMPLE" /> 会被替换为 ABC 环境变量的值。</translation>
 <translation id="5861856285460256766">家长访问码配置</translation>
 <translation id="5868414965372171132">用户级网络配置</translation>
 <translation id="5879014913445067283">控制网络文件共享功能是否通过“<ph name="NETBIOS_NAME" />”来搜索共享文件</translation>
@@ -2805,6 +3016,9 @@
 <translation id="5961137303188584693">设备的内置 NIC MAC 地址</translation>
 <translation id="5966615072639944554">允许扩展程序使用 Remote Attestation API</translation>
 <translation id="5983708779415553259">非任何内容包内的网站的默认行为</translation>
+<translation id="5997107377032983906">让您能够设置一系列网址格式,以指定允许哪些网站显示可屏蔽的(例如主动型)混合内容(例如 HTTPS 网站上的 HTTP 内容)。
+
+          如果未设置此政策,可屏蔽的混合内容将遭到屏蔽,但用户将能设置例外情况以允许在特定网站上显示此类内容。</translation>
 <translation id="5997543603646547632">默认情况下,使用24小时制</translation>
 <translation id="5997846976342452720">指定是否应停用插件查找器(已弃用)</translation>
 <translation id="5998198091336830580">此政策是下面这个原子政策组的一部分(系统仅会应用该组中来源优先级最高的政策):</translation>
@@ -2939,6 +3153,12 @@
 <translation id="6224304369267200483">自动允许直接安全密钥认证的网址/网域</translation>
 <translation id="6233173491898450179">设置下载目录</translation>
 <translation id="6244210204546589761">启动时打开的网址</translation>
+<translation id="6247316685259031374">此政策用于控制音频进程是否会采用沙盒机制。
+      如果启用了此政策,音频进程在运行时将会采用沙盒机制。
+      如果停用了此政策,音频进程在运行时将不会采用沙盒机制,WebRTC 音频处理模块将在渲染器进程中运行。
+      运行未采用沙盒机制的音频子系统会致使用户面临安全风险。
+      如果此政策未设置,系统将使用音频沙盒的默认配置(此配置可能会因平台而异)。
+      借助此政策,当企业使用的安全软件设置会干扰音频沙盒时,他们就能够灵活地停用沙盒。</translation>
 <translation id="6255387031094435995">允许合并具有多个不同来源和相同范围及级别的所选政策。
 
         如果所选政策是一个列表,而且其来源之间存在冲突但范围和级别相同,其值将会被合并到一个新的政策列表中。
@@ -2951,6 +3171,17 @@
 <translation id="6281043242780654992">配置本地消息传递政策。不允许黑名单中列出的本地消息传递主机(除非相应主机已列入白名单)。</translation>
 <translation id="6282799760374509080">是否允许音频捕获</translation>
 <translation id="6284362063448764300">TLS 1.1</translation>
+<translation id="6293957650182823856">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用交流电源供电时系统应在设备闲置多久后显示警告对话框。
+
+          如果设置了此政策,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会显示警告对话框,让用户知道系统将会采取的闲置操作。
+
+          如果未设置此政策,系统便不会显示警告对话框。
+
+          指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。
+
+          仅当闲置操作为注销或关机时,系统才会显示警告消息。</translation>
 <translation id="6310223829319187614">允许在用户登录期间自动填充域名</translation>
 <translation id="6315673513957120120">当用户访问存在 SSL 错误的网站时,Chrome 将显示警告页面。默认情况下,或当此政策设为 true 时,用户可以在点击这些警告页面后继续操作。
       如果将此政策设为 false,用户将无法通过点击任何警告页面继续操作。</translation>
@@ -3000,6 +3231,7 @@
 <translation id="6440051664870270040">允许网站在导航的同时打开弹出式窗口</translation>
 <translation id="6447948611083700881">已停用备份和恢复服务</translation>
 <translation id="6449476513004303784">禁止用户管理证书</translation>
+<translation id="6453641799812499182">在新的 <ph name="CORS" /> 实现方案中启用 <ph name="CORS" /> 检查缓解功能</translation>
 <translation id="645425387487868471">为 <ph name="PRODUCT_NAME" /> 启用强制登录功能</translation>
 <translation id="6464074037294098618">自动填充地址信息</translation>
 <translation id="6467613372414922590">允许使用用户级本地消息传递主机(安装时没有管理员权限)</translation>
@@ -3040,6 +3272,15 @@
 
       如果停用或未设定此设置,来自其他来源的 Flash 内容或不重要的内容可能会被屏蔽。</translation>
 <translation id="6532769014584932288">允许使用唤醒锁定</translation>
+<translation id="653645667373317432">此政策旨在控制用于从 Internet Explorer 切换至在 <ph name="PRODUCT_NAME" /> 中打开网址的命令。
+
+      如果未安装适用于 Internet Explorer 的“旧版浏览器支持”插件,则此政策不会生效。
+
+      如果未设置此政策,那么当从 Internet Explorer 中启动 <ph name="PRODUCT_NAME" /> 时,Internet Explorer 将会自动检测 <ph name="PRODUCT_NAME" /> 自身的可执行文件路径。
+
+      如果设置了此政策,它将用于在从 Internet Explorer 中启动 <ph name="PRODUCT_NAME" /> 时启动 <ph name="PRODUCT_NAME" />。
+
+      此政策可设为一个可执行文件路径,也可设为 <ph name="PRODUCT_NAME_PLACEHOLDER" /> 以自动检测 Chrome 的安装位置。</translation>
 <translation id="6536600139108165863">设备关机后自动重新启动</translation>
 <translation id="6539246272469751178">此政策对 Android 应用没有任何影响。Android 应用始终都会使用默认下载目录,并且无法访问由 <ph name="PRODUCT_OS_NAME" />下载到非默认下载目录中的任何文件。</translation>
 <translation id="654303922206238013">ecryptfs 迁移策略</translation>
@@ -3053,6 +3294,17 @@
 <translation id="6559057113164934677">不允许任何网站使用摄像头和麦克风</translation>
 <translation id="6561396069801924653">在系统任务栏菜单中显示无障碍选项</translation>
 <translation id="6563458316362153786">启用 802.11r 快速切换</translation>
+<translation id="6568977718979857253">此政策已被弃用。请使用 <ph name="DEFAULT_PLUGINS_SETTING_POLICY_NAME" /> 控制 Flash 插件的可用性,并使用 <ph name="ALWAYS_OPEN_PDF_EXTERNALLY_POLICY_NAME" /> 控制是否应使用集成式 PDF 查看器打开 PDF 文件。
+
+      指定一系列要在 <ph name="PRODUCT_NAME" /> 中停用的插件,并禁止用户更改此设置。
+
+      可使用通配符“*”和“?”匹配任意字符序列。“*”可匹配任意数量的字符,而“?”可指定单个可选的字符,即匹配 0 个或 1 个字符。转义字符为“\”,因此要匹配实际的“*”、“?”或“\”字符,您可以在这些字符前面加上“\”。
+
+      如果您启用了此设置,则 <ph name="PRODUCT_NAME" /> 中绝不会使用该列表内指定的插件。这些插件在“about:plugins”页面中被标记为已停用,而且用户无法启用它们。
+
+      请注意,此政策可被 EnabledPlugins 和 DisabledPluginsExceptions 覆盖。
+
+      如果未设置此政策,则用户可以使用系统中安装的任何插件(经过硬编码且不兼容、已过期或危险的插件除外)。</translation>
 <translation id="6573305661369899995">设置网址限制条件的外部来源</translation>
 <translation id="6583851521569686409">配置打印机列表。
 
@@ -3135,9 +3387,17 @@
       此设置旨在控制是否允许系统显示具有下列功用的欢迎页面:帮助用户登录 <ph name="PRODUCT_NAME" />、将它选为用户的默认浏览器,或以其方式将产品功能告知用户。</translation>
 <translation id="6766216162565713893">允许网站请求用户授予对附近蓝牙设备的访问权限</translation>
 <translation id="6770454900105963262">报告自助服务终端的相关信息</translation>
+<translation id="6780908086869332493">可让您指定一系列网址格式,从而指定要在 SAML 流程托管框架的登录屏幕上自动为哪些网站选择客户端证书(如果相应网站要求提供证书)。例如,配置一个要向 SAML IdP 出示的设备级证书。
+
+      此值必须是一个字符串化的 JSON 字典数组。每个字典都必须采用 <ph name="DEVICE_LOGIN_SCREEN_AUTO_SELECT_CERTIFICATE_FOR_URLS_EXAMPLE" /> 格式,其中 <ph name="URL_PATTERN_PLACEHOLDER" /> 是内容设置格式,<ph name="FILTER_PLACEHOLDER" /> 会限制浏览器可自动从哪些客户端证书中进行选择。无论是否设置了过滤器,系统都只会选择与服务器的证书请求相匹配的证书。如果 <ph name="FILTER_PLACEHOLDER" /> 采用 <ph name="JSON_DICTIONARY_EXAMPLE" /> 格式,系统便只会选择由 CommonName 为 <ph name="ISSUER_CN_PLACEHOLDER" /> 的证书颁发机构颁发的客户端证书。如果 <ph name="FILTER_PLACEHOLDER" /> 是空字典 {},那么系统在选择客户端证书时便不会受到额外限制。
+
+      如果未设置此政策,系统将不会为任何网站自动选择证书。</translation>
 <translation id="6786747875388722282">扩展程序</translation>
 <translation id="6786967369487349613">设置漫游个人资料目录</translation>
 <translation id="6795485990775913659">仅允许在没有 PIN 码的情况下打印</translation>
+<translation id="6800064234889290465">让您能够设置一系列网址格式,以指定不允许哪些网站显示可屏蔽的(例如主动型)混合内容(例如 HTTPS 网站上的 HTTP 内容)。
+
+          如果未设置此政策,可屏蔽的混合内容将遭到屏蔽,但用户将能设置例外情况以允许在特定网站上显示此类内容。</translation>
 <translation id="6810445994095397827">在这些网站上阻止 JavaScript</translation>
 <translation id="6813263547126514821">电源和关机</translation>
 <translation id="681446116407619279">支持的身份验证方案</translation>
@@ -3183,6 +3443,7 @@
 <translation id="6903814433019432303">此政策仅在零售模式下有效。
 
       确定在演示会话启动时要加载的网址集。此政策将替换其他任何用于设置初始网址的机制,因此仅适用于与特定用户无关的会话。</translation>
+<translation id="6907778402784621686">禁止在这些网站上显示不安全内容</translation>
 <translation id="6908640907898649429">配置默认搜索服务提供商。您可以指定用户会使用的默认搜索服务提供商,或选择停用默认搜索。</translation>
 <translation id="6913068954484253496">允许 <ph name="PRODUCT_NAME" /> 连接到位于所有 IP 地址的 Cast 设备。</translation>
 <translation id="6915442654606973733">启用语音反馈辅助功能。
@@ -3336,6 +3597,15 @@
       如果未配置此政策,则不限制哪些用户可以登录此设备。请注意,创建新用户时仍需适当配置 <ph name="DEVICE_ALLOW_NEW_USERS_POLICY_NAME" /> 政策。</translation>
 <translation id="7126716959063786004">允许在任务管理器中结束进程</translation>
 <translation id="7127892035367404455">回滚到目标版本</translation>
+<translation id="712963038874313213">提供应在默认 Crostini 容器中执行的 Ansible Playbook。
+
+      此政策允许提供 Ansible Playbook 以应用到默认 Crostini 容器,如果该容器在给定设备上可用且相关政策允许的话。
+
+      数据大小不得超过 1MB(1000000 个字节),且必须用 YAML 编码。相应的加密哈希值用于验证下载内容是否完整。
+
+      系统会下载并缓存相应配置。只要网址或哈希值有任何变化,系统就会重新下载相应配置。
+
+      如果您设置了此政策,用户便无法更改它。如果未设置此政策,用户可以继续在后续配置中使用默认 Crostini 容器(前提是相关政策允许使用 Crostini)。</translation>
 <translation id="713121532817834879">此政策是一个网址,它指向一个与 Internet Explorer 的 <ph name="IEEM_SITELIST_POLICY" /> 政策采用相同格式的 XML 文件。此政策会加载 XML 文件中的规则,但不会与 Internet Explorer 共享这些规则。
 
       此 XML 文件中规则的应用方式与 <ph name="GREYLIST_POLICY_NAME" /> 相同。也就是说,这些规则会阻止 <ph name="PRODUCT_NAME" /> 打开备用浏览器,同时还会阻止备用浏览器打开 <ph name="PRODUCT_NAME" />。
@@ -3539,8 +3809,16 @@
       如果此政策设为“延迟交付上传内容和下载内容”,则 <ph name="PRODUCT_NAME" /> 将根据“延迟交付下载内容”和“延迟交付上传内容”所述的规则操作。
       </translation>
 <translation id="7372831798009983116">启用“自动点击”无障碍功能</translation>
+<translation id="7373200034079131670">在用户退出后重新启动(如果 Android 或虚拟机已启动)。</translation>
 <translation id="737655323154569539">限制打印页面大小。如果未设置此政策或将其留空,则会被视为无限制。</translation>
 <translation id="7382191643394429934">始终允许打印(无论是否有背景图片)</translation>
+<translation id="7383445181072113521">确定要在 DHCP 请求中使用的设备主机名。
+
+      如果此政策设为一个非空字符串,该字符串将会用作 DHCP 请求中的设备主机名。
+
+      该字符串可以包含变量 <ph name="ASSET_ID_PLACEHOLDER" />、<ph name="SERIAL_NUM_PLACEHOLDER" />、<ph name="MAC_ADDR_PLACEHOLDER" />、<ph name="MACHINE_NAME_PLACEHOLDER" />。系统会先将这些变量替换为设备上的相应值,然后再将该字符串用作主机名。替换后的字符串应是有效的主机名(符合 RFC 1035 第 3.1 节中的规定)。
+
+      如果此政策未设置,或替换后的值不是有效的主机名,系统将不会在 DHCP 请求中设置任何主机名。 </translation>
 <translation id="7389872682701720082">如果启用了此设置,则未过期的插件会一直运行。
 
       如果停用或未配置此设置,系统会用户提供权限才能运行需要授权的插件。这些插件可能会危及安全性。</translation>
@@ -3625,6 +3903,14 @@
           对于与此处所列格式不匹配的网域上的 Cookie 以及未设置此政策时的所有 Cookie:倘若已设置 <ph name="LEGACY_SAMESITE_COOKIE_BEHAVIOR_ENABLED_POLICY_NAME" /> 政策,系统便会采用该政策中的全局默认值;否则,就会采用用户个人配置中的全局默认值。
 
           请注意,您在此处列出的格式会被系统视为网域(而非网址),因此您不应指定架构或端口。</translation>
+<translation id="7590188804371204512">控制外部扩展程序的安装。
+
+      启用此设置会禁止安装外部扩展程序。
+
+      停用或不设定此设置则会允许安装外部扩展程序。
+
+      要查看外部扩展程序及其安装方法,请参阅 https://developer.chrome.com/apps/external_extensions 上的文档。
+      </translation>
 <translation id="7593523670408385997">配置<ph name="PRODUCT_NAME" />将用于在磁盘上存储缓存文件的缓存大小。
 
       如果您设置了此政策,那么无论用户是否已指定“--disk-cache-size”标记,<ph name="PRODUCT_NAME" />都会使用此政策中设定的缓存大小。此政策中所指定的值并非硬性限值,而是针对缓存系统提出的建议值。任何低于几兆字节的值都会因为太小而被向上舍入到一个合理的最小值。
@@ -3684,6 +3970,13 @@
           另请参阅“CookiesAllowedForUrls”和“CookiesBlockedForUrls”政策。请注意,这三项政策中的网址格式不得存在冲突,因为无从指定应以哪项政策为准。
 
           如果将“RestoreOnStartup”政策设为恢复先前会话中的网址,系统就不会遵循这项政策,并且会为这些网站永久存储 Cookie。</translation>
+<translation id="7677220829878081413">
+      如果此政策设为 ArcSession,且 Android 已启动,那么每当用户退出后,系统都会强制相应设备重新启动。
+      如果此政策设为 ArcSessionOrVMStart,且 Android 或虚拟机已启动,那么每当用户退出后,系统都会强制相应设备重新启动。
+      如果此政策设为 Always,系统会在任何用户退出后强制相应设备重新启动。
+      如果此政策未设置,它将不会产生任何效力,系统也不会在用户退出后强制相应设备重新启动。如果设为 Never,效果与未设置时一样。
+      此政策仅对独立用户有效。
+      </translation>
 <translation id="7683777542468165012">动态政策刷新</translation>
 <translation id="7687943045976362719">如果设置了此政策,则指定的内容类型由 <ph name="PRODUCT_FRAME_NAME" />处理。
 
@@ -3725,6 +4018,7 @@
 <translation id="7774768074957326919">使用系统代理设置</translation>
 <translation id="7777535871204167559">以只读模式处理外部存储设备</translation>
 <translation id="7788511847830146438">根据个人资料</translation>
+<translation id="7792973482799545782">不允许任何网站加载可屏蔽的混合内容</translation>
 <translation id="780603170519840350">对于指定的一系列 subjectPublicKeyInfo 哈希,不强制执行证书透明化要求。
 
       如果证书链中的证书含有某个指定的 subjectPublicKeyInfo 哈希,则此政策允许针对此类证书链停用证书透明化披露要求。这样一来,本应不受信任的证书(因为并未适当地公开披露)将可以继续用于企业主机。
@@ -3791,6 +4085,7 @@
 
           如果停用了此政策,则用户无法添加 Kerberos 帐号。只能通过“配置 Kerberos 帐号”政策添加帐号。这是锁定帐号的有效方式。</translation>
 <translation id="7895553628261067384">远程访问</translation>
+<translation id="7902040092815978832">在用户输入密码时显示数字键盘</translation>
 <translation id="7902255855035461275">系统会将此列表中的网址格式与请求网址的安全来源进行比对。如果找到了匹配项,系统将允许相应网址使用视频捕获设备,并且不会进行提示。
 
       请注意:在 45 版之前,只有在自助服务终端模式下此政策才受支持。</translation>
@@ -3802,6 +4097,11 @@
 <translation id="7937491150792971922">合并来自多个来源的扩展程序安装列表政策</translation>
 <translation id="7937766917976512374">是否允许视频捕获</translation>
 <translation id="7941975817681987555">采用任何网络连接时,均不预测网络操作</translation>
+<translation id="7944213656414105292">此政策用于配置有权在登录屏幕上的 SAML 流程中对设备标识执行远程认证的网址。
+
+      具体而言,如果某个网址与通过此政策提供的格式之一匹配,该网址就能接收 HTTP 标头(包含对远程认证质询的响应),以认证设备标识和设备状态。
+
+      如果此政策未设置或设为一个空列表,系统将不允许任何网址在登录屏幕上使用远程认证。</translation>
 <translation id="7952007677054834789">在 <ph name="PRODUCT_NAME" /> 中配置启动时加载的页面、默认主页和默认新标签页,并禁止用户更改它们。
 
       只有将主页设为新标签页或某个特定的主页网址,才能完全锁定用户的主页设置。如果您不指定主页网址,则用户仍可通过指定“chrome://newtab”将主页设为新标签页。
@@ -3860,6 +4160,11 @@
       这些书签均被放置在某个文件夹中。用户虽然无法修改该文件夹,但可以选择在书签栏中隐藏它。默认情况下,文件夹名称为“受管理的书签”,不过,您可以对该文件夹名称进行自定义,方法是将包含“<ph name="TOPLEVEL_NAME" />”键的字典条目添加到书签列表中并将所需的文件夹名称作为该键的值。
 
       受管理的书签既不会同步到用户帐号中,也无法由扩展程序修改。</translation>
+<translation id="8077245272412229388">添加预先填充的 Kerberos 帐号。如果 Kerberos 凭据与登录凭据相匹配,则可以将帐号配置为重复使用登录凭据,方法是针对主帐号和密码分别指定“<ph name="LOGIN_EMAIL_PLACEHOLDER" />”和“<ph name="PASSWORD_PLACEHOLDER" />”;这样一来,除非配置了双重身份验证,否则系统便可以自动检索 Kerberos 票据。用户无法修改通过此政策添加的帐号。
+
+          如果启用了此政策,则系统会将此政策定义的一系列帐号添加到 Kerberos 帐号设置。
+
+          如果停用了或未设置此政策,则系统不但不会将任何帐号添加到 Kerberos 帐号设置,还会移除先前通过此政策添加的所有帐号。如果启用了“用户可以添加 Kerberos 帐号”政策,则用户仍可手动添加帐号。</translation>
 <translation id="8078366200175825572">让您能够设置一系列网址格式,以用于指定允许哪些网站设置 Cookie。
 
           如果未设置此政策,系统将会对所有网站使用“DefaultCookiesSetting”政策中的全局默认值(倘若已设置“DefaultCookiesSetting”政策),或使用用户个人配置中的全局默认值(倘若未设置“DefaultCookiesSetting”政策)。
@@ -3944,6 +4249,15 @@
 
       如果未设置此策略,来自“URLBlacklist”策略的黑名单就不存在任何例外情况。</translation>
 <translation id="8176035528522326671">只允许企业用户以主用户的身份登录多个人资料会话(企业托管用户的默认行为)</translation>
+<translation id="8176620453475617465">借助此政策,管理员可以指定页面能否在关闭过程中发送同步 XHR 请求。
+
+      如果启用了此政策,页面便能够在关闭过程中发送同步 XHR 请求。
+
+      如果停用了或未设置此政策,页面将无法在关闭过程中发送同步 XHR 请求。
+
+      在 Chrome 82 中,此政策将被移除。
+
+      请参阅 https://www.chromestatus.com/feature/4664843055398912。</translation>
 <translation id="8183108371184777472">禁止启动浏览器窗口</translation>
 <translation id="8186911565834244165">允许用户提供反馈</translation>
 <translation id="8214600119442850823">配置密码管理器。</translation>
@@ -4151,6 +4465,11 @@
       如果此政策设为 true 或未设置,所有用户都将能够使用 ARC(除非通过其他方式停用了 ARC)。
 
       系统只会在未运行 ARC 时(例如启动 Chrome 操作系统时)应用对此政策做出的更改。</translation>
+<translation id="8606263947930257189">控制 <ph name="PRODUCT_NAME" /> 可否冻结已在后台运行至少 5 分钟的标签页。
+
+      如果此政策设为 true,系统可能会冻结已在后台运行至少 5 分钟的标签页。冻结标签页可以降低 CPU、电池和内存使用量。<ph name="PRODUCT_NAME" /> 会使用试探法来避免冻结在后台执行有用工作(例如显示通知、播放声音、流式传输视频)的标签页。网络开发者也可选择停用用于冻结网站标签页的功能 (https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/performance_manager/docs/freezing_opt_out_opt_in.md)。
+
+      如果此政策设为 false,系统将不会冻结任何标签页。</translation>
 <translation id="8615400197788843468">启用 <ph name="PRODUCT_NAME" /> 的 G Suite 受限登录功能,并禁止用户更改此设置。
 
       如果您定义了此设置,用户将只能使用指定网域中的帐号访问 Google Apps(请注意,要允许使用 gmail.com/googlemail.com 帐号,您应该将“consumer_accounts”(不含引号)添加到网域列表中)。
@@ -4162,6 +4481,17 @@
       此政策会致使系统将 X-GoogApps-Allowed-Domains 标头附加到向所有 google.com 网域发送的所有 HTTP 和 HTTPS 请求中,如 https://support.google.com/a/answer/1668854 中所述。
 
       用户无法更改或替换此设置。</translation>
+<translation id="8618139576368821933">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用交流电源供电时系统应在设备闲置多久后降低屏幕亮度。
+
+          如果将此政策设为大于 0 的值,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会降低屏幕亮度。
+
+          如果将此政策设为 0,那么在设备闲置时,<ph name="PRODUCT_OS_NAME" />不会降低屏幕亮度。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位,且不得大于屏幕关闭延迟时间(若已设置)和闲置延迟时间。</translation>
 <translation id="8625234016727663537">让您能够以列表的形式设置一系列网址,以指定自动授权哪些网站在登录屏幕上访问具有给定供应商 ID 和产品 ID 的 USB 设备。列表中的每项内容都必须包含设备和网址这两个部分,此政策才会有效。设备部分中的每项都可包含供应商 ID 和产品 ID 字段。被省略的任何 ID 都会被视为通配符,但例外情况是:如果未指定供应商 ID,便无法指定产品 ID。否则,此政策将会无效并会被忽略。
 
         USB 权限模型会使用发出相应请求的网站的网址(“请求网址”)和顶级框架网站的网址(“嵌入网址”)来授权请求网址访问 USB 设备。如果发出请求的网站是在 iframe 中加载的,则请求网址可能会与嵌入网址不同。因此,“urls”字段最多可包含 2 个以英文逗号分隔的网址字符串,以分别指定请求网址和嵌入网址。如果仅指定了 1 个网址,系统将会在请求网址与这个网址相符(无论嵌入网址的状态为何)时向该网站授予对相应 USB 设备的访问权限。“urls”字段中的网址必须是有效网址,否则系统会忽略此政策。
@@ -4210,11 +4540,23 @@
       如果已启用此设置或将此设置留空,则可以删除浏览和下载记录。
 
       如果停用了此设置,则不能删除浏览和下载记录。</translation>
+<translation id="8752541111574086388">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用电池供电时系统应在设备闲置多久后显示警告对话框。
+
+          如果设置了此政策,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会显示警告对话框,让用户知道系统将会采取的闲置操作。
+
+          如果未设置此政策,系统便不会显示警告对话框。
+
+          指定的政策值应以毫秒为单位,且不得大于闲置延迟时间。
+
+          仅当闲置操作为注销或关机时,系统才会显示警告消息。</translation>
 <translation id="8757552286070680084">Wilco DTC 配置</translation>
 <translation id="8758831693895931466">启用强制性云管理注册</translation>
 <translation id="8759829385824155666">允许的 Kerberos 加密类型</translation>
 <translation id="8764119899999036911">指定 Kerberos SPN 是基于规范 DNS 名称还是基于输入的原始名称。如果您启用了此设置,系统将跳过 CNAME 查找步骤,并使用输入的服务器名称。如果您停用或未配置此设置,系统将通过 CNAME 查找来确定服务器的规范名称。</translation>
 <translation id="8764477907716150749">此政策仅供 <ph name="PRODUCT_NAME" /> 在内部使用。</translation>
+<translation id="8777369558049831576">在外部协议对话框中显示“始终打开”复选框。</translation>
 <translation id="877773134585155834">列出会在 <ph name="PRODUCT_OS_NAME" />启动器栏中显示为固定应用的应用标识符。
 
       Chrome 应用由其 ID(例如“pjkljhegncpnkpknbcohdijeoejaedia”)指定,Android 应用由其应用包名称(例如“com.google.android.gm”)指定,Web 应用由 WebAppInstallForceList 中使用的网址(例如“https://google.com/maps”)指定。
@@ -4291,6 +4633,24 @@
 <translation id="8911348623012274122">设置 Chrome 实例可以占用的内存上限</translation>
 <translation id="891435090623616439">已编码为 JSON 字符串。有关详情,请访问 <ph name="COMPLEX_POLICIES_URL" /></translation>
 <translation id="8917070657147922192">允许用户管理已安装的 CA 证书。</translation>
+<translation id="8926275581598789324">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用电池供电时系统应在设备闲置多久后采取闲置操作。
+
+          如果设置了此政策,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会采取闲置操作(可另行配置)。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位。</translation>
+<translation id="8929997566627164343">请注意,此政策已被弃用,并将在 <ph name="PRODUCT_OS_NAME" />版本 82 中移除。请改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
+
+          指定当使用交流电源供电时系统应在设备闲置多久后采取闲置操作。
+
+          如果设置了此政策,那么只要设备闲置时长达到了此处指定的时长,<ph name="PRODUCT_OS_NAME" />就会采取闲置操作(可另行配置)。
+
+          如果未设置此政策,那么系统将使用默认时间长度。
+
+          指定的政策值应以毫秒为单位。</translation>
 <translation id="8934944553121392674">控制用户可以使用 <ph name="DEVICE_PRINTERS_POLICY" /> 中的哪些打印机。
 
       指定对批量打印机配置使用哪项访问政策。如果选择 <ph name="PRINTERS_ALLOW_ALL" />,则系统会显示所有打印机。如果选择 <ph name="PRINTERS_BLACKLIST" />,则系统会使用 <ph name="DEVICE_PRINTERS_BLACKLIST" /> 来限制用户使用指定的打印机。如果选择 <ph name="PRINTERS_WHITELIST" />,则 <ph name="DEVICE_PRINTERS_WHITELIST" /> 只会指定可供用户选择的打印机。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb
index a326f92..77f1898 100644
--- a/components/policy/resources/policy_templates_zh-TW.xtb
+++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -1,7 +1,7 @@
 <?xml version="1.0" ?>
 <!DOCTYPE translationbundle>
 <translationbundle lang="zh-TW">
-<translation id="1001649754854402482">在新版 <ph name="CORS" /> 導入作業中啟用 <ph name="CORS" /> 檢查安全防護措施,讓擴充功能保持相容行為,並允許 <ph name="PRODUCT_NAME" /> 不需經過 <ph name="CORS" /> 檢查即可傳送指定標頭。
+<translation id="1001649754854402482">在新版 <ph name="CORS" /> 模式中啟用 <ph name="CORS" /> 檢查安全防護措施,讓擴充功能保持相容行為,並允許 <ph name="PRODUCT_NAME" /> 不需經過 <ph name="CORS" /> 檢查即可傳送指定標頭。
 
       如果將這份清單設為空白,<ph name="PRODUCT_NAME" /> 會嘗試以相容方式執行擴充功能,且不會採用 <ph name="PRODUCT_NAME" /> 第 79 版的 <ph name="API" /> 變更,詳情請參閱 <ph name="WEB_REQUEST_API_MANUAL" />。
 
@@ -1082,7 +1082,7 @@
           您可以使用以下格式指定 Google 的搜尋網址:<ph name="GOOGLE_SEARCH_URL" />。
 
           啟用「DefaultSearchProviderEnabled」政策時必須設定這個選項,系統也只會在這種情況下遵循這項政策。</translation>
-<translation id="2658653824183107970">使用舊版 <ph name="CORS" /> 導入作業,而不使用新版 <ph name="CORS" /></translation>
+<translation id="2658653824183107970">使用舊版 <ph name="CORS" /> 模式,而不使用新版 <ph name="CORS" /></translation>
 <translation id="2659019163577049044">如果你啟用這項設定,使用者就可以自行設定裝置,讓簡訊在手機和 Chromebook 上保持同步。請注意,如果你允許這項政策,使用者必須完成設定流程來明確選擇啟用這項功能。設定流程完成後,使用者就可以在自己的 Chromebook 上收發簡訊。
 
       如果你停用這項設定,使用者將無法設置簡訊同步功能。
@@ -2245,9 +2245,9 @@
 
       如果將這項政策設為「啟用」或不予設定,使用者能夠以無痕模式開啟網頁。
 
-      如果設為「停用」,使用者可能無法以無痕模式開啟網頁。
+      如果設為「停用」,使用者將無法以無痕模式開啟網頁。
 
-      如果設為「強制」,使用者可能只能以無痕模式開啟網頁。請注意,[強制] 選項不適用於 Chrome Android 版。</translation>
+      如果設為「強制」,使用者只能以無痕模式開啟網頁。請注意,「強制」選項不適用於 Chrome Android 版。</translation>
 <translation id="4600786265870346112">啟用大型游標</translation>
 <translation id="4604931264910482931">設定內建訊息傳遞黑名單</translation>
 <translation id="4617338332148204752">在 <ph name="PRODUCT_FRAME_NAME" /> 內略過中繼標記檢查</translation>
@@ -3268,7 +3268,7 @@
 <translation id="6440051664870270040">允許同時在多個網站中進行瀏覽及開啟彈出式視窗</translation>
 <translation id="6447948611083700881">備份與還原功能已停用</translation>
 <translation id="6449476513004303784">不允許使用者管理憑證</translation>
-<translation id="6453641799812499182">在新版 <ph name="CORS" /> 導入作業中啟用 <ph name="CORS" /> 檢查安全防護措施</translation>
+<translation id="6453641799812499182">在新版 <ph name="CORS" /> 模式中啟用 <ph name="CORS" /> 檢查安全防護措施</translation>
 <translation id="645425387487868471">啟用 <ph name="PRODUCT_NAME" /> 的強制登入功能</translation>
 <translation id="6464074037294098618">啟用地址的自動填入功能</translation>
 <translation id="6467613372414922590">允許使用者層級的內建訊息傳遞主機 (在無管理員權限的情況下安裝)。</translation>
@@ -4673,7 +4673,7 @@
 <translation id="8917070657147922192">允許使用者管理已安裝的 CA 憑證。</translation>
 <translation id="8926275581598789324">請注意,這項政策已遭淘汰,並將在 <ph name="PRODUCT_OS_NAME" />第 82 版中移除。請改用 <ph name="POWER_MANAGEMENT_IDLE_SETTINGS_POLICY_NAME" />。
 
-          指定電池供電時的閒置時間長度。如果使用者在這段時間內一直都沒有任何動作,系統就會執行閒置動作。
+          指定電池供電時的閒置時間長度。如果使用者在這段時間內沒有任何動作,系統就會執行閒置動作。
 
           設定這項政策後,只要使用者處於閒置狀態的時間達到這項政策指定的長度,<ph name="PRODUCT_OS_NAME" />就會採取閒置動作 (可另行設定)。
 
diff --git a/components/search_engines/BUILD.gn b/components/search_engines/BUILD.gn
index d1af2f8c..3d3f33d 100644
--- a/components/search_engines/BUILD.gn
+++ b/components/search_engines/BUILD.gn
@@ -70,9 +70,9 @@
     "//components/variations",
     "//google_apis",
     "//net",
+    "//services/data_decoder/public/cpp",
     "//services/network/public/cpp",
     "//sql",
-    "//third_party/libxml",  # https://crbug.com/699342
     "//third_party/metrics_proto",
     "//ui/base",
     "//ui/gfx",
diff --git a/components/search_engines/DEPS b/components/search_engines/DEPS
index abe4ea3..653ea4e 100644
--- a/components/search_engines/DEPS
+++ b/components/search_engines/DEPS
@@ -15,8 +15,8 @@
   "+components/variations",
   "+components/webdata",
   "+google_apis",
-  "+libxml",
   "+net",
+  "+services/data_decoder/public",
   "+services/network/public/cpp",
   "+services/network/test",
   "+sql",
diff --git a/components/search_engines/template_url_fetcher.cc b/components/search_engines/template_url_fetcher.cc
index 79fe7dd..60176e2f 100644
--- a/components/search_engines/template_url_fetcher.cc
+++ b/components/search_engines/template_url_fetcher.cc
@@ -80,6 +80,7 @@
   base::string16 keyword() const { return keyword_; }
 
  private:
+  void OnTemplateURLParsed(std::unique_ptr<TemplateURL> template_url);
   void OnLoaded();
   void AddSearchProvider();
 
@@ -140,6 +141,25 @@
       50000 /* max_body_size */);
 }
 
+void TemplateURLFetcher::RequestDelegate::OnTemplateURLParsed(
+    std::unique_ptr<TemplateURL> template_url) {
+  template_url_ = std::move(template_url);
+
+  if (!template_url_ ||
+      !template_url_->url_ref().SupportsReplacement(
+          fetcher_->template_url_service_->search_terms_data())) {
+    fetcher_->RequestCompleted(this);
+    // WARNING: RequestCompleted deletes us.
+    return;
+  }
+
+  // Wait for the model to be loaded before adding the provider.
+  if (!fetcher_->template_url_service_->loaded())
+    return;
+  AddSearchProvider();
+  // WARNING: AddSearchProvider deletes us.
+}
+
 void TemplateURLFetcher::RequestDelegate::OnLoaded() {
   template_url_subscription_.reset();
   if (!template_url_)
@@ -158,23 +178,11 @@
     return;
   }
 
-  template_url_ = TemplateURLParser::Parse(
-      fetcher_->template_url_service_->search_terms_data(),
-      response_body->data(), response_body->length(),
-      TemplateURLParser::ParameterFilter());
-  if (!template_url_ ||
-      !template_url_->url_ref().SupportsReplacement(
-          fetcher_->template_url_service_->search_terms_data())) {
-    fetcher_->RequestCompleted(this);
-    // WARNING: RequestCompleted deletes us.
-    return;
-  }
-
-  // Wait for the model to be loaded before adding the provider.
-  if (!fetcher_->template_url_service_->loaded())
-    return;
-  AddSearchProvider();
-  // WARNING: AddSearchProvider deletes us.
+  TemplateURLParser::Parse(
+      &fetcher_->template_url_service_->search_terms_data(),
+      *response_body.get(), TemplateURLParser::ParameterFilter(),
+      base::BindOnce(&RequestDelegate::OnTemplateURLParsed,
+                     base::Unretained(this)));
 }
 
 void TemplateURLFetcher::RequestDelegate::AddSearchProvider() {
diff --git a/components/search_engines/template_url_parser.cc b/components/search_engines/template_url_parser.cc
index 96977a7..dbf40a5 100644
--- a/components/search_engines/template_url_parser.cc
+++ b/components/search_engines/template_url_parser.cc
@@ -7,29 +7,26 @@
 #include <string.h>
 
 #include <algorithm>
-#include <map>
-#include <memory>
 #include <vector>
 
+#include "base/bind.h"
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
 #include "components/search_engines/search_terms_data.h"
 #include "components/search_engines/template_url.h"
-#include "libxml/parser.h"
-#include "libxml/xmlwriter.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
+#include "services/data_decoder/public/cpp/safe_xml_parser.h"
+#include "services/data_decoder/public/mojom/xml_parser.mojom.h"
 #include "ui/gfx/favicon_size.h"
 #include "url/gurl.h"
 #include "url/url_constants.h"
 
 namespace {
 
-// NOTE: libxml uses the UTF-8 encoding. As 0-127 of UTF-8 corresponds
-// to that of char, the following names are all in terms of char. This avoids
-// having to convert to wide, then do comparisons.
-
 // Defines for element names of the OSD document:
 const char kURLElement[] = "Url";
 const char kParamElement[] = "Param";
@@ -56,10 +53,6 @@
 // Mime type for as you type suggestions.
 const char kSuggestionType[] = "application/x-suggestions+json";
 
-std::string XMLCharToString(const xmlChar* value) {
-  return std::string(reinterpret_cast<const char*>(value));
-}
-
 // Returns true if input_encoding contains a valid input encoding string. This
 // doesn't verify that we have a valid encoding for the string, just that the
 // string contains characters that constitute a valid input encoding.
@@ -101,217 +94,292 @@
                              gurl.SchemeIs(url::kHttpsScheme));
 }
 
-}  // namespace
-
-
-// TemplateURLParsingContext --------------------------------------------------
-
-// To minimize memory overhead while parsing, a SAX style parser is used.
-// TemplateURLParsingContext is used to maintain the state we're in the document
-// while parsing.
-class TemplateURLParsingContext {
+// SafeTemplateURLParser takes the output of the data_decoder service's
+// XmlParser and extracts the data from the search description into a
+// TemplateURL.
+class SafeTemplateURLParser {
  public:
-  // Enum of the known element types.
-  enum ElementType {
-    UNKNOWN,
-    OPEN_SEARCH_DESCRIPTION,
-    URL,
-    PARAM,
-    SHORT_NAME,
-    IMAGE,
-    INPUT_ENCODING,
-    ALIAS,
-  };
-
   enum Method {
     GET,
     POST
   };
 
   // Key/value of a Param node.
-  typedef std::pair<std::string, std::string> Param;
+  using Param = std::pair<std::string, std::string>;
 
-  explicit TemplateURLParsingContext(
-      const TemplateURLParser::ParameterFilter& parameter_filter);
+  SafeTemplateURLParser(
+      const SearchTermsData* search_terms_data,
+      const TemplateURLParser::ParameterFilter& parameter_filter,
+      TemplateURLParser::ParseCallback callback)
+      : search_terms_data_(search_terms_data),
+        parameter_filter_(parameter_filter),
+        callback_(std::move(callback)) {}
 
-  static void StartElementImpl(void* ctx,
-                               const xmlChar* name,
-                               const xmlChar** atts);
-  static void EndElementImpl(void* ctx, const xmlChar* name);
-  static void CharactersImpl(void* ctx, const xmlChar* ch, int len);
+  SafeTemplateURLParser(const SafeTemplateURLParser&) = delete;
+  SafeTemplateURLParser& operator=(const SafeTemplateURLParser&) = delete;
 
-  // Returns a TemplateURL representing the result of parsing.  This will be
-  // null if parsing failed or if the results were invalid for some reason (e.g.
-  // the resulting URL was not HTTP[S], a name wasn't supplied, a resulting
-  // TemplateURLRef was invalid, etc.).
-  std::unique_ptr<TemplateURL> GetTemplateURL(
-      const SearchTermsData& search_terms_data);
+  // Parse callback for DataDecoder::ParseXml(). This calls the callback
+  // passed to the constructor upon completion.
+  void OnXmlParseComplete(
+      data_decoder::DataDecoder::ValueOrError value_or_error);
 
  private:
-  // Key is UTF8 encoded.
-  typedef std::map<std::string, ElementType> ElementNameToElementTypeMap;
+  void ParseURLs(const std::vector<const base::Value*>& urls);
+  void ParseImages(const std::vector<const base::Value*>& images);
+  void ParseEncodings(const std::vector<const base::Value*>& encodings);
+  void ParseAliases(const std::vector<const base::Value*>& aliases);
 
-  static void InitMapping();
+  std::unique_ptr<TemplateURL> FinalizeTemplateURL();
 
-  void ParseURL(const xmlChar** atts);
-  void ParseImage(const xmlChar** atts);
-  void ParseParam(const xmlChar** atts);
-  void ProcessURLParams();
-
-  // Returns the current ElementType.
-  ElementType GetKnownType();
-
-  static ElementNameToElementTypeMap* kElementNameToElementTypeMap;
+  // Returns all child elements of |elem| named |tag|, which are searched
+  // for using the XML qualified namespaces in |namespaces_|.
+  bool GetChildElementsByTag(const base::Value& elem,
+                             const std::string& tag,
+                             std::vector<const base::Value*>* children);
 
   // Data that gets updated as we parse, and is converted to a TemplateURL by
-  // GetTemplateURL().
+  // FinalizeTemplateURL().
   TemplateURLData data_;
 
-  std::vector<ElementType> elements_;
-  bool image_is_valid_for_favicon_;
-
-  // Character content for the current element.
-  base::string16 string_;
-
-  const TemplateURLParser::ParameterFilter& parameter_filter_;
-
-  // The list of parameters parsed in the Param nodes of a Url node.
-  std::vector<Param> extra_params_;
-
   // The HTTP methods used.
-  Method method_;
-  Method suggestion_method_;
-
-  // If true, we are currently parsing a suggest URL, otherwise it is an HTML
-  // search.  Note that we don't need a stack as URL nodes cannot be nested.
-  bool is_suggest_url_;
+  Method method_ = GET;
+  Method suggestion_method_ = GET;
 
   // If true, the user has set a keyword and we should use it. Otherwise,
   // we generate a keyword based on the URL.
-  bool has_custom_keyword_;
+  bool has_custom_keyword_ = false;
 
   // Whether we should derive the image from the URL (when images are data
   // URLs).
-  bool derive_image_from_url_;
+  bool derive_image_from_url_ = false;
 
-  DISALLOW_COPY_AND_ASSIGN(TemplateURLParsingContext);
+  // The XML namespaces that were declared on the root element. These are used
+  // to search for tags by name in GetChildElementsByTag(). Will always contain
+  // at least one element, if only the empty string.
+  std::vector<std::string> namespaces_;
+
+  const SearchTermsData* search_terms_data_;
+  TemplateURLParser::ParameterFilter parameter_filter_;
+  TemplateURLParser::ParseCallback callback_;
 };
 
-// static
-TemplateURLParsingContext::ElementNameToElementTypeMap*
-    TemplateURLParsingContext::kElementNameToElementTypeMap = nullptr;
-
-TemplateURLParsingContext::TemplateURLParsingContext(
-    const TemplateURLParser::ParameterFilter& parameter_filter)
-    : image_is_valid_for_favicon_(false),
-      parameter_filter_(parameter_filter),
-      method_(GET),
-      suggestion_method_(GET),
-      is_suggest_url_(false),
-      has_custom_keyword_(false),
-      derive_image_from_url_(false) {
-  if (kElementNameToElementTypeMap == nullptr)
-    InitMapping();
-}
-
-// static
-void TemplateURLParsingContext::StartElementImpl(void* ctx,
-                                                 const xmlChar* name,
-                                                 const xmlChar** atts) {
-  // Remove the namespace from |name|, ex: os:Url -> Url.
-  std::string node_name(XMLCharToString(name));
-  size_t index = node_name.find_first_of(":");
-  if (index != std::string::npos)
-    node_name.erase(0, index + 1);
-
-  TemplateURLParsingContext* context =
-      reinterpret_cast<TemplateURLParsingContext*>(ctx);
-  context->elements_.push_back(
-    context->kElementNameToElementTypeMap->count(node_name) ?
-        (*context->kElementNameToElementTypeMap)[node_name] : UNKNOWN);
-  switch (context->GetKnownType()) {
-    case TemplateURLParsingContext::URL:
-      context->extra_params_.clear();
-      context->ParseURL(atts);
-      break;
-    case TemplateURLParsingContext::IMAGE:
-      context->ParseImage(atts);
-      break;
-    case TemplateURLParsingContext::PARAM:
-      context->ParseParam(atts);
-      break;
-    default:
-      break;
+void SafeTemplateURLParser::OnXmlParseComplete(
+    data_decoder::DataDecoder::ValueOrError value_or_error) {
+  if (value_or_error.error) {
+    DLOG(ERROR) << "Failed to parse XML: " << *value_or_error.error;
+    std::move(callback_).Run(nullptr);
+    return;
   }
-  context->string_.clear();
-}
 
-// static
-void TemplateURLParsingContext::EndElementImpl(void* ctx, const xmlChar* name) {
-  TemplateURLParsingContext* context =
-      reinterpret_cast<TemplateURLParsingContext*>(ctx);
-  switch (context->GetKnownType()) {
-    case TemplateURLParsingContext::URL:
-      context->ProcessURLParams();
-      break;
-    case TemplateURLParsingContext::SHORT_NAME:
-      context->data_.SetShortName(context->string_);
-      break;
-    case TemplateURLParsingContext::IMAGE: {
-      GURL image_url(base::UTF16ToUTF8(context->string_));
-      if (image_url.SchemeIs(url::kDataScheme)) {
-        // TODO (jcampan): bug 1169256: when dealing with data URL, we need to
-        // decode the data URL in the renderer. For now, we'll just point to the
-        // favicon from the URL.
-        context->derive_image_from_url_ = true;
-      } else if (context->image_is_valid_for_favicon_ && image_url.is_valid() &&
-                 (image_url.SchemeIs(url::kHttpScheme) ||
-                  image_url.SchemeIs(url::kHttpsScheme))) {
-        context->data_.favicon_url = image_url;
-      }
-      context->image_is_valid_for_favicon_ = false;
-      break;
+  const base::Value& root = *value_or_error.value;
+
+  // Get the namespaces used in the XML document, which will be used
+  // to access nodes by tag name in GetChildElementsByTag().
+  if (const base::Value* namespaces =
+          root.FindDictKey(data_decoder::mojom::XmlParser::kNamespacesKey)) {
+    for (const auto& item : namespaces->DictItems()) {
+      namespaces_.push_back(item.first);
     }
-    case TemplateURLParsingContext::INPUT_ENCODING: {
-      std::string input_encoding = base::UTF16ToASCII(context->string_);
-      if (IsValidEncodingString(input_encoding))
-        context->data_.input_encodings.push_back(input_encoding);
-      break;
-    }
-    case TemplateURLParsingContext::ALIAS: {
-      if (!context->string_.empty()) {
-        context->data_.SetKeyword(context->string_);
-        context->has_custom_keyword_ = true;
-      }
-      break;
-    }
-    default:
-      break;
   }
-  context->string_.clear();
-  context->elements_.pop_back();
+  if (namespaces_.empty())
+    namespaces_.push_back(std::string());
+
+  std::string root_tag;
+  if (!data_decoder::GetXmlElementTagName(root, &root_tag) ||
+      (root_tag != kOpenSearchDescriptionElement &&
+       root_tag != kFirefoxSearchDescriptionElement)) {
+    DLOG(ERROR) << "Unexpected root tag: " << root_tag;
+    std::move(callback_).Run(nullptr);
+    return;
+  }
+
+  // The only required element is the URL.
+  std::vector<const base::Value*> urls;
+  if (!GetChildElementsByTag(root, kURLElement, &urls)) {
+    std::move(callback_).Run(nullptr);
+    return;
+  }
+  ParseURLs(urls);
+
+  std::vector<const base::Value*> images;
+  if (GetChildElementsByTag(root, kImageElement, &images))
+    ParseImages(images);
+
+  std::vector<const base::Value*> encodings;
+  if (GetChildElementsByTag(root, kInputEncodingElement, &encodings))
+    ParseEncodings(encodings);
+
+  std::vector<const base::Value*> aliases;
+  if (GetChildElementsByTag(root, kAliasElement, &aliases))
+    ParseAliases(aliases);
+
+  std::vector<const base::Value*> short_names;
+  if (GetChildElementsByTag(root, kShortNameElement, &short_names)) {
+    std::string name;
+    if (data_decoder::GetXmlElementText(*short_names.back(), &name))
+      data_.SetShortName(base::UTF8ToUTF16(name));
+  }
+
+  std::move(callback_).Run(FinalizeTemplateURL());
 }
 
-// static
-void TemplateURLParsingContext::CharactersImpl(void* ctx,
-                                               const xmlChar* ch,
-                                               int len) {
-  reinterpret_cast<TemplateURLParsingContext*>(ctx)->string_ +=
-      base::UTF8ToUTF16(
-          base::StringPiece(reinterpret_cast<const char*>(ch), len));
+void SafeTemplateURLParser::ParseURLs(
+    const std::vector<const base::Value*>& urls) {
+  for (auto* url : urls) {
+    std::string template_url =
+        data_decoder::GetXmlElementAttribute(*url, kURLTemplateAttribute);
+    std::string type =
+        data_decoder::GetXmlElementAttribute(*url, kURLTypeAttribute);
+    bool is_post = base::LowerCaseEqualsASCII(
+        data_decoder::GetXmlElementAttribute(*url, kParamMethodAttribute),
+        "post");
+    bool is_html_url = (type == kHTMLType);
+    bool is_suggest_url = (type == kSuggestionType);
+
+    if (is_html_url && !template_url.empty()) {
+      data_.SetURL(template_url);
+      is_suggest_url = false;
+      if (is_post)
+        method_ = POST;
+    } else if (is_suggest_url) {
+      data_.suggestions_url = template_url;
+      if (is_post)
+        suggestion_method_ = POST;
+    }
+
+    std::vector<Param> extra_params;
+
+    std::vector<const base::Value*> params;
+    GetChildElementsByTag(*url, kParamElement, &params);
+    for (auto* param : params) {
+      std::string key =
+          data_decoder::GetXmlElementAttribute(*param, kParamNameAttribute);
+      std::string value =
+          data_decoder::GetXmlElementAttribute(*param, kParamValueAttribute);
+      if (!key.empty() &&
+          (parameter_filter_.is_null() || parameter_filter_.Run(key, value))) {
+        extra_params.push_back(Param(key, value));
+      }
+    }
+
+    if (!parameter_filter_.is_null() || !extra_params.empty()) {
+      GURL url(is_suggest_url ? data_.suggestions_url : data_.url());
+      if (!url.is_valid())
+        return;
+
+      // If there is a parameter filter, parse the existing URL and remove any
+      // unwanted parameter.
+      std::string new_query;
+      bool modified = false;
+      if (!parameter_filter_.is_null()) {
+        url::Component query = url.parsed_for_possibly_invalid_spec().query;
+        url::Component key, value;
+        const char* url_spec = url.spec().c_str();
+        while (url::ExtractQueryKeyValue(url_spec, &query, &key, &value)) {
+          std::string key_str(url_spec, key.begin, key.len);
+          std::string value_str(url_spec, value.begin, value.len);
+          if (parameter_filter_.Run(key_str, value_str)) {
+            AppendParamToQuery(key_str, value_str, &new_query);
+          } else {
+            modified = true;
+          }
+        }
+      }
+      if (!modified)
+        new_query = url.query();
+
+      // Add the extra parameters if any.
+      if (!extra_params.empty()) {
+        modified = true;
+        for (const auto& iter : extra_params)
+          AppendParamToQuery(iter.first, iter.second, &new_query);
+      }
+
+      if (modified) {
+        GURL::Replacements repl;
+        repl.SetQueryStr(new_query);
+        url = url.ReplaceComponents(repl);
+        if (is_suggest_url)
+          data_.suggestions_url = url.spec();
+        else if (url.is_valid())
+          data_.SetURL(url.spec());
+      }
+    }
+  }
 }
 
-std::unique_ptr<TemplateURL> TemplateURLParsingContext::GetTemplateURL(
-    const SearchTermsData& search_terms_data) {
-  // TODO(jcampan): Support engines that use POST; see http://crbug.com/18107
-  if (method_ == TemplateURLParsingContext::POST || !IsHTTPRef(data_.url()) ||
-      !IsHTTPRef(data_.suggestions_url))
+void SafeTemplateURLParser::ParseImages(
+    const std::vector<const base::Value*>& images) {
+  for (auto* image : images) {
+    std::string url_string;
+    if (!data_decoder::GetXmlElementText(*image, &url_string))
+      continue;
+
+    std::string type =
+        data_decoder::GetXmlElementAttribute(*image, kImageTypeAttribute);
+    int width = 0;
+    int height = 0;
+    base::StringToInt(
+        data_decoder::GetXmlElementAttribute(*image, kImageWidthAttribute),
+        &width);
+    base::StringToInt(
+        data_decoder::GetXmlElementAttribute(*image, kImageHeightAttribute),
+        &height);
+
+    bool image_is_valid_for_favicon =
+        (width == gfx::kFaviconSize) && (height == gfx::kFaviconSize) &&
+        ((type == "image/x-icon") || (type == "image/vnd.microsoft.icon"));
+
+    GURL image_url(url_string);
+
+    if (image_url.SchemeIs(url::kDataScheme)) {
+      // TODO(jcampan): bug 1169256: when dealing with data URL, we need to
+      // decode the data URL in the renderer. For now, we'll just point to the
+      // favicon from the URL.
+      derive_image_from_url_ = true;
+    } else if (image_is_valid_for_favicon && image_url.is_valid() &&
+               (image_url.SchemeIs(url::kHttpScheme) ||
+                image_url.SchemeIs(url::kHttpsScheme))) {
+      data_.favicon_url = image_url;
+    }
+    image_is_valid_for_favicon = false;
+  }
+}
+
+void SafeTemplateURLParser::ParseEncodings(
+    const std::vector<const base::Value*>& encodings) {
+  for (auto* encoding : encodings) {
+    std::string encoding_value;
+    if (data_decoder::GetXmlElementText(*encoding, &encoding_value)) {
+      if (IsValidEncodingString(encoding_value))
+        data_.input_encodings.push_back(encoding_value);
+    }
+  }
+}
+
+void SafeTemplateURLParser::ParseAliases(
+    const std::vector<const base::Value*>& aliases) {
+  for (auto* alias : aliases) {
+    std::string alias_value;
+    if (data_decoder::GetXmlElementText(*alias, &alias_value)) {
+      data_.SetKeyword(base::UTF8ToUTF16(alias_value));
+      has_custom_keyword_ = true;
+    }
+  }
+}
+
+std::unique_ptr<TemplateURL> SafeTemplateURLParser::FinalizeTemplateURL() {
+  // TODO(https://crbug.com/18107): Support engines that use POST.
+  if (method_ == POST || !IsHTTPRef(data_.url()) ||
+      !IsHTTPRef(data_.suggestions_url)) {
+    DLOG(ERROR) << "POST URLs are not supported";
     return nullptr;
-  if (suggestion_method_ == TemplateURLParsingContext::POST)
+  }
+  if (suggestion_method_ == POST)
     data_.suggestions_url.clear();
 
   // If the image was a data URL, use the favicon from the search URL instead.
-  // (see the TODO in EndElementImpl()).
+  // (see the TODO in ParseImages()).
   GURL search_url(data_.url());
   if (derive_image_from_url_ && data_.favicon_url.is_empty())
     data_.favicon_url = TemplateURL::GenerateFaviconURL(search_url);
@@ -329,189 +397,55 @@
   std::unique_ptr<TemplateURL> template_url =
       std::make_unique<TemplateURL>(data_);
   if (template_url->url().empty() ||
-      !template_url->url_ref().IsValid(search_terms_data) ||
+      !template_url->url_ref().IsValid(*search_terms_data_) ||
       (!template_url->suggestions_url().empty() &&
-       !template_url->suggestions_url_ref().IsValid(search_terms_data))) {
+       !template_url->suggestions_url_ref().IsValid(*search_terms_data_))) {
+    DLOG(ERROR) << "Template URL is not valid";
     return nullptr;
   }
 
   return template_url;
 }
 
-// static
-void TemplateURLParsingContext::InitMapping() {
-  kElementNameToElementTypeMap = new std::map<std::string, ElementType>;
-  (*kElementNameToElementTypeMap)[kURLElement] = URL;
-  (*kElementNameToElementTypeMap)[kParamElement] = PARAM;
-  (*kElementNameToElementTypeMap)[kShortNameElement] = SHORT_NAME;
-  (*kElementNameToElementTypeMap)[kImageElement] = IMAGE;
-  (*kElementNameToElementTypeMap)[kOpenSearchDescriptionElement] =
-      OPEN_SEARCH_DESCRIPTION;
-  (*kElementNameToElementTypeMap)[kFirefoxSearchDescriptionElement] =
-      OPEN_SEARCH_DESCRIPTION;
-  (*kElementNameToElementTypeMap)[kInputEncodingElement] = INPUT_ENCODING;
-  (*kElementNameToElementTypeMap)[kAliasElement] = ALIAS;
+bool SafeTemplateURLParser::GetChildElementsByTag(
+    const base::Value& elem,
+    const std::string& tag,
+    std::vector<const base::Value*>* children) {
+  bool result = false;
+  for (const auto& ns : namespaces_) {
+    std::string name = data_decoder::GetXmlQualifiedName(ns, tag);
+    result |=
+        data_decoder::GetAllXmlElementChildrenWithTag(elem, name, children);
+  }
+  return result;
 }
 
-void TemplateURLParsingContext::ParseURL(const xmlChar** atts) {
-  if (!atts)
-    return;
-
-  std::string template_url;
-  bool is_post = false;
-  bool is_html_url = false;
-  bool is_suggest_url = false;
-  for (; *atts; atts += 2) {
-    std::string name(XMLCharToString(*atts));
-    const xmlChar* value = atts[1];
-    if (name == kURLTypeAttribute) {
-      std::string type = XMLCharToString(value);
-      is_html_url = (type == kHTMLType);
-      is_suggest_url = (type == kSuggestionType);
-    } else if (name == kURLTemplateAttribute) {
-      template_url = XMLCharToString(value);
-    } else if (name == kParamMethodAttribute) {
-      is_post = base::LowerCaseEqualsASCII(XMLCharToString(value), "post");
-    }
-  }
-
-  if (is_html_url && !template_url.empty()) {
-    data_.SetURL(template_url);
-    is_suggest_url_ = false;
-    if (is_post)
-      method_ = POST;
-  } else if (is_suggest_url) {
-    data_.suggestions_url = template_url;
-    is_suggest_url_ = true;
-    if (is_post)
-      suggestion_method_ = POST;
-  }
-}
-
-void TemplateURLParsingContext::ParseImage(const xmlChar** atts) {
-  if (!atts)
-    return;
-
-  int width = 0;
-  int height = 0;
-  std::string type;
-  for (; *atts; atts += 2) {
-    std::string name(XMLCharToString(*atts));
-    const xmlChar* value = atts[1];
-    if (name == kImageTypeAttribute) {
-      type = XMLCharToString(value);
-    } else if (name == kImageWidthAttribute) {
-      base::StringToInt(XMLCharToString(value), &width);
-    } else if (name == kImageHeightAttribute) {
-      base::StringToInt(XMLCharToString(value), &height);
-    }
-  }
-
-  image_is_valid_for_favicon_ = (width == gfx::kFaviconSize) &&
-      (height == gfx::kFaviconSize) &&
-      ((type == "image/x-icon") || (type == "image/vnd.microsoft.icon"));
-}
-
-void TemplateURLParsingContext::ParseParam(const xmlChar** atts) {
-  if (!atts)
-    return;
-
-  std::string key, value;
-  for (; *atts; atts += 2) {
-    std::string name(XMLCharToString(*atts));
-    const xmlChar* val = atts[1];
-    if (name == kParamNameAttribute) {
-      key = XMLCharToString(val);
-    } else if (name == kParamValueAttribute) {
-      value = XMLCharToString(val);
-    }
-  }
-
-  if (!key.empty() &&
-      (parameter_filter_.is_null() || parameter_filter_.Run(key, value)))
-    extra_params_.push_back(Param(key, value));
-}
-
-void TemplateURLParsingContext::ProcessURLParams() {
-  if (parameter_filter_.is_null() && extra_params_.empty())
-    return;
-
-  GURL url(is_suggest_url_ ? data_.suggestions_url : data_.url());
-  if (!url.is_valid())
-    return;
-
-  // If there is a parameter filter, parse the existing URL and remove any
-  // unwanted parameter.
-  std::string new_query;
-  bool modified = false;
-  if (!parameter_filter_.is_null()) {
-    url::Component query = url.parsed_for_possibly_invalid_spec().query;
-    url::Component key, value;
-    const char* url_spec = url.spec().c_str();
-    while (url::ExtractQueryKeyValue(url_spec, &query, &key, &value)) {
-      std::string key_str(url_spec, key.begin, key.len);
-      std::string value_str(url_spec, value.begin, value.len);
-      if (parameter_filter_.Run(key_str, value_str)) {
-        AppendParamToQuery(key_str, value_str, &new_query);
-      } else {
-        modified = true;
-      }
-    }
-  }
-  if (!modified)
-    new_query = url.query();
-
-  // Add the extra parameters if any.
-  if (!extra_params_.empty()) {
-    modified = true;
-    for (std::vector<Param>::const_iterator iter(extra_params_.begin());
-         iter != extra_params_.end(); ++iter)
-      AppendParamToQuery(iter->first, iter->second, &new_query);
-  }
-
-  if (modified) {
-    GURL::Replacements repl;
-    repl.SetQueryStr(new_query);
-    url = url.ReplaceComponents(repl);
-    if (is_suggest_url_)
-      data_.suggestions_url = url.spec();
-    else if (url.is_valid())
-      data_.SetURL(url.spec());
-  }
-}
-
-TemplateURLParsingContext::ElementType
-    TemplateURLParsingContext::GetKnownType() {
-  if (elements_.size() == 2 && elements_[0] == OPEN_SEARCH_DESCRIPTION)
-    return elements_[1];
-  // We only expect PARAM nodes under the URL node.
-  return (elements_.size() == 3 && elements_[0] == OPEN_SEARCH_DESCRIPTION &&
-      elements_[1] == URL && elements_[2] == PARAM) ? PARAM : UNKNOWN;
-}
-
+}  // namespace
 
 // TemplateURLParser ----------------------------------------------------------
 
 // static
-std::unique_ptr<TemplateURL> TemplateURLParser::Parse(
-    const SearchTermsData& search_terms_data,
-    const char* data,
-    size_t length,
-    const TemplateURLParser::ParameterFilter& param_filter) {
-  // xmlSubstituteEntitiesDefault(1) makes it so that &amp; isn't mapped to
-  // &#38; . Unfortunately xmlSubstituteEntitiesDefault affects global state.
-  // If this becomes problematic we'll need to provide our own entity
-  // type for &amp;, or strip out &#38; by hand after parsing.
-  int last_sub_entities_value = xmlSubstituteEntitiesDefault(1);
-  TemplateURLParsingContext context(param_filter);
-  xmlSAXHandler sax_handler;
-  memset(&sax_handler, 0, sizeof(sax_handler));
-  sax_handler.startElement = &TemplateURLParsingContext::StartElementImpl;
-  sax_handler.endElement = &TemplateURLParsingContext::EndElementImpl;
-  sax_handler.characters = &TemplateURLParsingContext::CharactersImpl;
-  int error = xmlSAXUserParseMemory(&sax_handler, &context, data,
-                                    static_cast<int>(length));
-  xmlSubstituteEntitiesDefault(last_sub_entities_value);
+void TemplateURLParser::Parse(const SearchTermsData* search_terms_data,
+                              const std::string& data,
+                              const ParameterFilter& parameter_filter,
+                              ParseCallback completion_callback) {
+  auto safe_parser = std::make_unique<SafeTemplateURLParser>(
+      search_terms_data, parameter_filter, std::move(completion_callback));
+  data_decoder::DataDecoder::ParseXmlIsolated(
+      data, base::BindOnce(&SafeTemplateURLParser::OnXmlParseComplete,
+                           std::move(safe_parser)));
+}
 
-  return error ? nullptr : context.GetTemplateURL(search_terms_data);
+// static
+void TemplateURLParser::ParseWithDataDecoder(
+    data_decoder::DataDecoder* data_decoder,
+    const SearchTermsData* search_terms_data,
+    const std::string& data,
+    const ParameterFilter& parameter_filter,
+    ParseCallback completion_callback) {
+  auto safe_parser = std::make_unique<SafeTemplateURLParser>(
+      search_terms_data, parameter_filter, std::move(completion_callback));
+  data_decoder->ParseXml(
+      data, base::BindOnce(&SafeTemplateURLParser::OnXmlParseComplete,
+                           std::move(safe_parser)));
 }
diff --git a/components/search_engines/template_url_parser.h b/components/search_engines/template_url_parser.h
index 789b0ad..45bf68f 100644
--- a/components/search_engines/template_url_parser.h
+++ b/components/search_engines/template_url_parser.h
@@ -16,6 +16,10 @@
 class SearchTermsData;
 class TemplateURL;
 
+namespace data_decoder {
+class DataDecoder;
+}
+
 // TemplateURLParser, as the name implies, handling reading of TemplateURLs
 // from OpenSearch description documents.
 class TemplateURLParser {
@@ -27,19 +31,30 @@
   using ParameterFilter =
       base::RepeatingCallback<bool(const std::string&, const std::string&)>;
 
+  using ParseCallback = base::OnceCallback<void(std::unique_ptr<TemplateURL>)>;
+
   // Decodes the chunk of data representing a TemplateURL, creates the
-  // TemplateURL, and returns it.  Returns null if the data does not describe a
-  // valid TemplateURL, the URLs referenced do not point to valid http/https
-  // resources, or for some other reason we do not support the described
-  // TemplateURL.  |parameter_filter| can be used if you want to filter some
-  // parameters out of the URL.  For example, when importing from another
-  // browser, we remove any parameter identifying that browser.  If set to null,
-  // the URL is not modified.
-  static std::unique_ptr<TemplateURL> Parse(
-      const SearchTermsData& search_terms_data,
-      const char* data,
-      size_t length,
-      const ParameterFilter& parameter_filter);
+  // TemplateURL, and calls the |completion_callback| with the result. A null
+  // value is provided if the data does not describe a valid TemplateURL, the
+  // URLs referenced do not point to valid http/https resources, or for some
+  // other reason we do not support the described TemplateURL.
+  // |parameter_filter| can be used if you want to filter some parameters out
+  // of the URL. For example, when importing from another browser, we remove
+  // any parameter identifying that browser. If set to null, the URL is not
+  // modified.
+  static void Parse(const SearchTermsData* search_terms_data,
+                    const std::string& data,
+                    const ParameterFilter& parameter_filter,
+                    ParseCallback completion_callback);
+
+  // The same as Parse(), but it allows the caller to manage the lifetime of
+  // the DataDecoder service. The |data_decoder| must be kept alive until the
+  // |completion_callback| is called.
+  static void ParseWithDataDecoder(data_decoder::DataDecoder* data_decoder,
+                                   const SearchTermsData* search_terms_data,
+                                   const std::string& data,
+                                   const ParameterFilter& parameter_filter,
+                                   ParseCallback completion_callback);
 
  private:
   // No one should create one of these.
diff --git a/components/strings/components_chromium_strings_mr.xtb b/components/strings/components_chromium_strings_mr.xtb
index 0cf41722..98078ff 100644
--- a/components/strings/components_chromium_strings_mr.xtb
+++ b/components/strings/components_chromium_strings_mr.xtb
@@ -16,7 +16,7 @@
           &gt;
           LAN सेटिंग्ज
           वर जा आणि "तुमच्या LAN साठी एक प्रॉक्सी सर्व्हर वापरा" चेकबॉक्स ची निवड रद्द करा.</translation>
-<translation id="48558539577516920">तुमच्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्क अॅक्सेस करण्यास
+<translation id="48558539577516920">तुमच्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्क ॲक्सेस करण्यास
         Chromium ला परवानगी  द्या.</translation>
 <translation id="580822234363523061">Chromium मेनू &gt;
           <ph name="SETTINGS_TITLE" />
diff --git a/components/strings/components_google_chrome_strings_mr.xtb b/components/strings/components_google_chrome_strings_mr.xtb
index 5ef11e3..5a578ec 100644
--- a/components/strings/components_google_chrome_strings_mr.xtb
+++ b/components/strings/components_google_chrome_strings_mr.xtb
@@ -7,7 +7,7 @@
 <translation id="2874156562296220396"><ph name="BEGIN_LINK_CHROMIUM" />Chromium<ph name="END_LINK_CHROMIUM" /> मुक्त-स्रोत प्रोजेक्ट आणि अन्य <ph name="BEGIN_LINK_OSS" />मुक्त स्रोत सॉफ्टवेअर<ph name="END_LINK_OSS" /> द्वारे Google Chrome ची निर्मिती करणे शक्य झाले.</translation>
 <translation id="3140883423282498090">पुढील वेळी तुम्ही Google Chrome पुन्हा लाँच केल्यानंतर तुमचे बदल प्रभावी होतील.</translation>
 <translation id="3444832043240812445">हे पेज तुम्ही <ph name="BEGIN_LINK" />कॅश अहवाल सुरू<ph name="END_LINK" /> केल्यास केवळ तुम्हाला अलीकडील क्रॅशची माहिती दाखवते.</translation>
-<translation id="3875312571075912821">तुमच्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्क अॅक्सेस करण्यास
+<translation id="3875312571075912821">तुमच्या फायरवॉल किंवा अँटीव्हायरस सेटिंग्जमधील नेटवर्क ॲक्सेस करण्यास
         Chrome ला परवानगी  द्या.</translation>
 <translation id="4010643444566880169">Chrome OS ने त्याचे प्रारंभीचे सेटअप पूर्ण केले नाही.</translation>
 <translation id="4853578032408195113">तुम्ही एक सुरक्षित Google Chrome पृष्ठ पाहत आहात</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb
index ca258f9..8d8d735 100644
--- a/components/strings/components_strings_cs.xtb
+++ b/components/strings/components_strings_cs.xtb
@@ -590,7 +590,7 @@
 <translation id="3949601375789751990">Zde se zobrazuje vaše historie prohlížení</translation>
 <translation id="3949870428812919180">Žádné uložené platební metody</translation>
 <translation id="3950820424414687140">Přihlaste se</translation>
-<translation id="3961148744525529027">List obslužného nástroje pro platby je otevřený s poloviční výškou</translation>
+<translation id="3961148744525529027">List obslužného nástroje pro platby je otevřený na půlce</translation>
 <translation id="3962859241508114581">Předchozí skladba</translation>
 <translation id="3963837677003247395">Pokračovat ručně?</translation>
 <translation id="3964661563329879394">{COUNT,plural, =0{Žádné}=1{Z 1 webu }few{Z # webů }many{Z # webu }other{Z # webů }}</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb
index 1e6ab14..4f00f76 100644
--- a/components/strings/components_strings_gu.xtb
+++ b/components/strings/components_strings_gu.xtb
@@ -172,6 +172,7 @@
 <translation id="173080396488393970">આ પ્રકારનું કાર્ડ સમર્થિત નથી</translation>
 <translation id="1734864079702812349">Amex</translation>
 <translation id="1734878702283171397">સિસ્ટમ વ્યવસ્થાપકનો સંપર્ક કરવાનો પ્રયાસ કરો.</translation>
+<translation id="1739107442478692187">તમે જે સાઇટ અથવા ઍપનો ઉપયોગ કરો છો તેના પર ડેટાનું ઉલ્લંઘન થયું છે. Chrome તમને તરત જ તમારા સાચવેલા પાસવર્ડ ચેક કરવાનો અને <ph name="ORIGIN" /> પરનો તમારો પાસવર્ડ બદલવાનો સુઝાવ આપે છે.</translation>
 <translation id="1740951997222943430">એક માન્ય સમાપ્તિ મહિનો દાખલ કરો</translation>
 <translation id="1743520634839655729">આગલી વખતે વધુ ઝડપથી ચુકવણી કરવા માટે, તમારા કાર્ડ, નામ અને બિલિંગ સરનામાને તમારા Google એકાઉન્ટ અને આ ઉપકરણ પર સાચવો.</translation>
 <translation id="1743570585616704562">ઓળખાયેલ નથી</translation>
@@ -234,6 +235,7 @@
 <translation id="2094505752054353250">ડોમેન મેળ ખાતું નથી</translation>
 <translation id="2096368010154057602">વિભાગ</translation>
 <translation id="2099652385553570808">ડાબી બાજુએ ત્રણ સ્ટેપલ લગાવો</translation>
+<translation id="2100280972184758440">તમારા પાસવર્ડમાં ચેડાં થયાં હતા</translation>
 <translation id="2102134110707549001">સશક્ત પાસવર્ડ સૂચવો…</translation>
 <translation id="2108755909498034140">તમારું કમ્પ્યુટર પુનઃપ્રારંભ કરો</translation>
 <translation id="2111256659903765347">સુપર-A</translation>
@@ -241,6 +243,7 @@
 <translation id="2114841414352855701">અવગણ્યું કારણ કે તે <ph name="POLICY_NAME" /> દ્વારા ઓવરરાઇડ થયું હતું.</translation>
 <translation id="2119505898009119320">આપવામાં આવ્યું છે: <ph name="ORGANIZATION" /> [<ph name="JURISDICTION" />]ને</translation>
 <translation id="2119867082804433120">નીચે જમણી બાજુએ કાણું પાડો</translation>
+<translation id="2124528555835617522">તમે જે સાઇટ અથવા ઍપનો ઉપયોગ કરો છો તેના પર ડેટાનું ઉલ્લંઘન થયું છે. Chrome તમને તરત જ તમારા સાચવેલા પાસવર્ડ ચેક કરવાનો સુઝાવ આપે છે.</translation>
 <translation id="2129079103035905234">મોશન સેન્સર</translation>
 <translation id="213826338245044447">મોબાઇલ બુકમાર્ક્સ</translation>
 <translation id="214556005048008348">ચુકવણી રદ કરો</translation>
@@ -478,11 +481,13 @@
 <translation id="3282497668470633863">કાર્ડ પર નામ ઉમેરો</translation>
 <translation id="3287510313208355388">ઑનલાઇન હોય ત્યારે ડાઉનલોડ કરો</translation>
 <translation id="3293642807462928945"><ph name="POLICY_NAME" /> નીતિ વિશે વધુ જાણો</translation>
+<translation id="3295439534709115864">તમે જે સાઇટ અથવા ઍપનો ઉપયોગ કરો છો તેના પર ડેટાનું ઉલ્લંઘન થયું છે. Chrome તરત જ <ph name="ORIGIN" /> પરનો તમારો પાસવર્ડ બદલવાનો સુઝાવ આપે છે.</translation>
 <translation id="3303855915957856445">કોઈ શોધ પરિણામો મળ્યાં નથી</translation>
 <translation id="3320021301628644560">બિલિંગ સરનામું ઉમેરો</translation>
 <translation id="3324983252691184275">કિરમજી</translation>
 <translation id="3338095232262050444">સુરક્ષિત</translation>
 <translation id="3355823806454867987">પ્રૉક્સી સેટિંગ બદલો...</translation>
+<translation id="3360103848165129075">ચુકવણી માટેની હૅન્ડલર શીટ</translation>
 <translation id="3362968246557010467">આ પૉલિસી, ટાળેલી <ph name="OLD_POLICY" /> પૉલિસીમાંથી ઑટોમૅટિક રીતે કૉપિ કરી હતી. તેના બદલે તમારે આ પૉલિસીનો ઉપયોગ કરવો જોઈએ.</translation>
 <translation id="3366477098757335611">કાર્ડ જુઓ</translation>
 <translation id="3369192424181595722">ઘડિયાળ ભૂલ</translation>
@@ -601,6 +606,7 @@
 <translation id="3949601375789751990">તમારો બ્રાઉઝિંગ ઇતિહાસ અહીં દેખાય છે</translation>
 <translation id="3949870428812919180">કોઈ ચુકવણી પદ્ધતિ સાચવેલી નથી</translation>
 <translation id="3950820424414687140">સાઇન ઇન</translation>
+<translation id="3961148744525529027">ચુકવણી માટેની હૅન્ડલર શીટ અડધી ખુલ્લી છે</translation>
 <translation id="3962859241508114581">પાછલું ટ્રૅક</translation>
 <translation id="3963837677003247395">મેન્યુઅલી ચાલુ રાખીએ?</translation>
 <translation id="3964661563329879394">{COUNT,plural, =0{કોઈ નહીં}=1{1 સાઇટમાંથી }one{# સાઇટમાંથી }other{# સાઇટમાંથી }}</translation>
@@ -1332,6 +1338,7 @@
 <translation id="7637571805876720304">Chromium માંથી ક્રેડિટ કાર્ડ દૂર કરીએ?</translation>
 <translation id="7638605456503525968">સીરિયલ પોર્ટ</translation>
 <translation id="7639968568612851608">ઘાટો ગ્રે</translation>
+<translation id="7653957176542370971">ચુકવણી માટેની હૅન્ડલર શીટ બંધ છે</translation>
 <translation id="765676359832457558">વિગતવાર સેટિંગ્સ છુપાવો...</translation>
 <translation id="7658239707568436148">રદ કરો</translation>
 <translation id="7662298039739062396">એક્સટેન્શન દ્વારા સેટિંગ નિયંત્રિત કરેલ છે</translation>
@@ -1461,6 +1468,7 @@
 <translation id="8261506727792406068">ડિલીટ કરો</translation>
 <translation id="8262952874573525464">નીચે કિનારી જોડવી</translation>
 <translation id="8267698848189296333"><ph name="USERNAME" /> તરીકે સાઇન ઇન કરી રહ્યાં છે</translation>
+<translation id="8277900682056760511">ચુકવણી માટેની હૅન્ડલર શીટ ખુલ્લી છે</translation>
 <translation id="8281084378435768645">મોટો-ફોટો</translation>
 <translation id="8286036467436129157">સાઇન ઇન કરો</translation>
 <translation id="8288807391153049143">પ્રમાણપત્ર બતાવો</translation>
diff --git a/components/strings/components_strings_hi.xtb b/components/strings/components_strings_hi.xtb
index 1fcb8f0..05459d9 100644
--- a/components/strings/components_strings_hi.xtb
+++ b/components/strings/components_strings_hi.xtb
@@ -1501,7 +1501,7 @@
 <translation id="8498891568109133222"><ph name="HOST_NAME" /> को लोड होने में बहुत ज़्यादा समय लगा.</translation>
 <translation id="8503559462189395349">Chrome पासवर्ड</translation>
 <translation id="8503813439785031346">उपयोगकर्ता नाम</translation>
-<translation id="8508648098325802031">सर्च अाइकॉन</translation>
+<translation id="8508648098325802031">सर्च आइकॉन</translation>
 <translation id="8522552481199248698">Chrome से आप अपने Google खाते की सुरक्षा कर सकते हैं और अपना पासवर्ड बदल सकते हैं.</translation>
 <translation id="8542014550340843547">नीचे की ओर ट्रिपल स्टेपल</translation>
 <translation id="8543181531796978784">आप <ph name="BEGIN_ERROR_LINK" />पहचान संबंधी समस्‍या की रिपोर्ट<ph name="END_ERROR_LINK" /> कर सकते हैं या अगर आप अपनी सुरक्षा संबंधी जोखिमों को समझते हैं तो, <ph name="BEGIN_LINK" />इस असुरक्षित साइट पर जा<ph name="END_LINK" /> सकते हैं.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb
index 492b80a..30b2815 100644
--- a/components/strings/components_strings_iw.xtb
+++ b/components/strings/components_strings_iw.xtb
@@ -200,7 +200,7 @@
 <translation id="187918866476621466">פתח דפי פתיחה</translation>
 <translation id="1883255238294161206">כווץ רשימה</translation>
 <translation id="1898423065542865115">סינון</translation>
-<translation id="1901443836186977402">{1,plural, =1{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. התוקף של אישור האבטחה שלו פג ביום האחרון. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. שעון המחשב שלך מוגדר כעת כ-<ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}two{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני יומיים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. שעון המחשב שלך מוגדר כעת כ-<ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}many{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. שעון המחשב שלך מוגדר כעת כ-<ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}other{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. שעון המחשב שלך מוגדר כעת כ-<ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}}</translation>
+<translation id="1901443836186977402">{1,plural, =1{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. התוקף של אישור האבטחה שלו פג במהלך היממה האחרונה. ייתכן שהסיבה לכך היא הגדרה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}two{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני יומיים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}many{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. שעל פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}other{השרת הזה לא הצליח להוכיח שהוא <ph name="DOMAIN" />. תוקף אישור האבטחה שלו פג לפני # ימים. ייתכן שהסיבה לכך היא תצורה שגויה או שתוקף מיירט את החיבור שלך. על פי השעון במחשב שלך, עכשיו <ph name="CURRENT_DATE" />. האם זה נכון? אם לא, עליך לכוון את שעון המערכת ולאחר מכן לרענן את הדף הזה.}}</translation>
 <translation id="1914326953223720820">שירות לפתיחת קבצים דחוסים</translation>
 <translation id="1915697529809968049">‏האם להשתמש ב-Touch ID במקום ב-CVC?</translation>
 <translation id="1916770123977586577">כדי להחיל על האתר את ההגדרות המעודכנות, טען מחדש את הדף</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb
index 798a8af..76cdd60 100644
--- a/components/strings/components_strings_mr.xtb
+++ b/components/strings/components_strings_mr.xtb
@@ -34,7 +34,7 @@
 <translation id="1131264053432022307">तुम्ही कॉपी केलेली इमेज</translation>
 <translation id="1150979032973867961">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता प्रमाणपत्र तुमच्या कॉंप्युटरच्या ऑपरेटिंग प्रणालीद्वारे विश्वसनीय नाही. हे कदाचित एका चुकीच्या कॉन्फिगरेशनमुळे किंवा आक्रमणकर्त्याने तुमचे कनेक्शन आंतरखंडित केल्यामुळे झाले असू शकते.</translation>
 <translation id="1151972924205500581">पासवर्ड आवश्यक</translation>
-<translation id="1152921474424827756"><ph name="URL" /> च्या <ph name="BEGIN_LINK" />कॅशे केलेली कॉपी<ph name="END_LINK" /> अॅक्सेस करा</translation>
+<translation id="1152921474424827756"><ph name="URL" /> च्या <ph name="BEGIN_LINK" />कॅशे केलेली कॉपी<ph name="END_LINK" /> ॲक्सेस करा</translation>
 <translation id="1156303062776767266">तुम्ही स्थानिक किंवा शेअर केलेली फाइल पाहत आहात</translation>
 <translation id="1158211211994409885"><ph name="HOST_NAME" /> नी कनेक्शन अनपेक्षितरित्या बंद केले.</translation>
 <translation id="115926840831309955">तुमचे CVC तपासा आणि पुन्हा प्रयत्न करा किंवा एक्स्पायरीची तारीख अपडेट करा</translation>
@@ -60,7 +60,7 @@
 <translation id="1253921432148366685"><ph name="TYPE_1" />, <ph name="TYPE_2" /> (सिंक केलेले)</translation>
 <translation id="1256368399071562588">&lt;p&gt;जर तुम्ही एखाद्या वेबसाइटला भेट देण्याचा प्रयत्न केला आणि ती उघडली नाही, तर सगळ्यात आधी ट्रबलशूटिंग स्टेप्सद्धारे या एररवर उपाय काढण्याचा प्रयत्न करा:&lt;/p&gt;
     &lt;ol&gt;
-    &lt;li&gt;अक्षरातील चुकांसाठी वेब अॅड्रेस तपासा.&lt;/li&gt;
+    &lt;li&gt;अक्षरातील चुकांसाठी वेब ॲड्रेस तपासा.&lt;/li&gt;
     &lt;li&gt;तुमचे इंटरनेट कनेक्शन नेहमीप्रमाणे चालत असल्याची खात्री करा.&lt;/li&gt;
     &lt;li&gt;वेबसाइटच्या मालकाशी संपर्क साधा.&lt;/li&gt;
     &lt;/ol&gt;</translation>
@@ -81,7 +81,7 @@
 <translation id="1323433172918577554">अधिक दाखवा</translation>
 <translation id="132390688737681464">पत्ते भरा आणि सेव्ह करा</translation>
 <translation id="1330449323196174374">लेफ्ट गेट फोल्ड</translation>
-<translation id="1333989956347591814">तुमच्या पुढील अॅक्टिव्हिटी <ph name="BEGIN_EMPHASIS" />अद्याप दिसतील<ph name="END_EMPHASIS" />:
+<translation id="1333989956347591814">तुमच्या पुढील ॲक्टिव्हिटी <ph name="BEGIN_EMPHASIS" />अद्याप दिसतील<ph name="END_EMPHASIS" />:
         <ph name="BEGIN_LIST" />
           <ph name="LIST_ITEM" />तुम्ही पाहत असलेल्या वेबसाइट
           <ph name="LIST_ITEM" />तुमचा एम्पलॉयर किंवा शाळा
@@ -142,7 +142,7 @@
 <translation id="1581080074034554886">CVC</translation>
 <translation id="1583429793053364125">हे वेबपेज प्रदर्शित करताना काहीतरी चूक झाली.</translation>
 <translation id="1588438908519853928">सामान्य</translation>
-<translation id="1592005682883173041">स्थानिक डेटा अॅक्सेस</translation>
+<translation id="1592005682883173041">स्थानिक डेटा ॲक्सेस</translation>
 <translation id="1594030484168838125">निवडा</translation>
 <translation id="161042844686301425">निळसर</translation>
 <translation id="1620510694547887537">कॅमेरा</translation>
@@ -209,7 +209,7 @@
 <translation id="192020519938775529">{COUNT,plural, =0{काहीही नाही}=1{1 साइट}other{# साइट}}</translation>
 <translation id="1927235823738766038">स्वीकारली जाणारी क्रेडिट आणि डेबिट कार्डे</translation>
 <translation id="194030505837763158"><ph name="LINK" /> दुव्याकडे जा</translation>
-<translation id="1945968466830820669">तुम्ही तुमच्या संस्थेच्या खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chromium तुमचा पासवर्ड लगेच बदलण्याची शिफारस करत आहे.</translation>
+<translation id="1945968466830820669">तुम्ही तुमच्या संस्थेच्या खात्याचा ॲक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chromium तुमचा पासवर्ड लगेच बदलण्याची शिफारस करत आहे.</translation>
 <translation id="1947454675006758438">स्टेपल टॉप राइट</translation>
 <translation id="1948773908305951926">स्वीकारली जाणारी प्रीपेड कार्डे</translation>
 <translation id="1962204205936693436"><ph name="DOMAIN" /> बुकमार्क</translation>
@@ -251,7 +251,7 @@
 <translation id="2148613324460538318">कार्ड जोडा</translation>
 <translation id="2154054054215849342">आपल्या डोमेनसाठी संकालन उपलब्ध नाही</translation>
 <translation id="2154484045852737596">कार्ड संपादित करा</translation>
-<translation id="2166049586286450108">पूर्ण अॅडमिन अॅक्सेस</translation>
+<translation id="2166049586286450108">पूर्ण ॲडमिन ॲक्सेस</translation>
 <translation id="2166378884831602661">ही साइट सुरक्षित कनेक्शन प्रदान करू शकत नाही</translation>
 <translation id="2169984857010174799">Kaku2 (Envelope)</translation>
 <translation id="2181821976797666341">धोरणे</translation>
@@ -278,7 +278,7 @@
 <translation id="2277103315734023688">पुढे जा</translation>
 <translation id="2283340219607151381">पत्ते भरा आणि सेव्ह करा</translation>
 <translation id="2289385804009217824">ट्रिम करा</translation>
-<translation id="2292556288342944218">तुमचा इंटरनेट अॅक्सेस ब्लॉक केला आहे</translation>
+<translation id="2292556288342944218">तुमचा इंटरनेट ॲक्सेस ब्लॉक केला आहे</translation>
 <translation id="2297722699537546652">B5 (Envelope)</translation>
 <translation id="2310021320168182093">Chou2 (Envelope)</translation>
 <translation id="2315864634253056100">या साइटचे नाव <ph name="LOOKALIKE_DOMAIN" /> सारखे दिसत आहे. हल्लेखोर कधीकधी वेब पत्त्यामध्ये दिसण्यास कठीण असे बदल करून साइटची नक्कल करतात.</translation>
@@ -286,7 +286,7 @@
 <translation id="2317259163369394535"><ph name="DOMAIN" /> साठी वापरकर्तानाव आणि पासवर्ड आवश्यक आहेत.</translation>
 <translation id="2317583587496011522">डेबिट कार्डे स्वीकारली जातात.</translation>
 <translation id="2330137317877982892"><ph name="CREDIT_CARD" />, <ph name="EXPIRATION_DATE_ABBR" /> रोजी एक्स्पायर होईल</translation>
-<translation id="2337852623177822836">सेटिंग तुमच्या अॅडमिनिस्ट्रेटरने नियंत्रित केलेले आहे</translation>
+<translation id="2337852623177822836">सेटिंग तुमच्या ॲडमिनिस्ट्रेटरने नियंत्रित केलेले आहे</translation>
 <translation id="2346319942568447007">तुम्ही कॉपी केलेली इमेज</translation>
 <translation id="2354001756790975382">इतर बुकमार्क</translation>
 <translation id="2354430244986887761">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" />मध्ये <ph name="BEGIN_LINK" />हानिकारक ॲप्स सापडले<ph name="END_LINK" />.</translation>
@@ -345,7 +345,7 @@
 <translation id="2609632851001447353">तफावत</translation>
 <translation id="2618023639789766142">C10 (Envelope)</translation>
 <translation id="2625385379895617796">तुमचे घड्याळ पुढे आहे</translation>
-<translation id="2634124572758952069"><ph name="HOST_NAME" /> चा सर्व्हर आयपी अॅड्रेस सापडला नाही.</translation>
+<translation id="2634124572758952069"><ph name="HOST_NAME" /> चा सर्व्हर आयपी ॲड्रेस सापडला नाही.</translation>
 <translation id="2638745661847473633">तुम्ही भेट देत असलेला सर्व्हर <ph name="ORIGIN" /> ने विनंती केली आहे की,
      त्याला केलेल्या सर्व विनंत्यांवर मूळ धोरण लागू केले जाईल. पण आता त्याने
     चुकीचे धोरण वितरित केले आहे ज्यामुळे ब्राउझर तुमची <ph name="SITE" /> ची
@@ -353,7 +353,7 @@
     साइट ऑपरेटरकडून मूळ धोरणे वापरली जाऊ शकतात.</translation>
 <translation id="2639739919103226564">स्थिती:</translation>
 <translation id="2649204054376361687"><ph name="CITY" />, <ph name="COUNTRY" /></translation>
-<translation id="2650446666397867134">फाइलवरील अॅक्सेस नाकारण्यात आला</translation>
+<translation id="2650446666397867134">फाइलवरील ॲक्सेस नाकारण्यात आला</translation>
 <translation id="2653659639078652383">सबमिट करा</translation>
 <translation id="2660650542324841986">तुम्ही भेट देत असलेला सर्व्हर <ph name="ORIGIN" /> ने विनंती केली आहे की,
      त्याला केलेल्या सर्व विनंत्यांवर मूळ धोरण लागू केले जाईल. पण त्याला आता
@@ -394,7 +394,7 @@
 <translation id="2799223571221894425">पुन्हा लाँच करा</translation>
 <translation id="2803306138276472711">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" /> वर <ph name="BEGIN_LINK" />मालवेअर आढळले आहे<ph name="END_LINK" />. सामान्यतः सुरक्षित असलेल्या वेबसाइट काहीवेळा मालवेअरमुळे संक्रमित झालेल्या असतात.</translation>
 <translation id="2824775600643448204">पत्ता आणि शोध बार</translation>
-<translation id="2826760142808435982">कनेक्शन <ph name="CIPHER" /> वापरून आणि महत्त्वाचे एक्स्चेंज तंत्र म्हणून <ph name="KX" /> वापर एंक्रिप्ट आणि अॉथेंटिकेट केले आहे.</translation>
+<translation id="2826760142808435982">कनेक्शन <ph name="CIPHER" /> वापरून आणि महत्त्वाचे एक्स्चेंज तंत्र म्हणून <ph name="KX" /> वापर एंक्रिप्ट आणि ऑथेंटिकेट केले आहे.</translation>
 <translation id="2835170189407361413">फॉर्म क्लिअर करा</translation>
 <translation id="2847118875340931228">गुप्त विंडो उघडा</translation>
 <translation id="2850739647070081192">Invite (Envelope)</translation>
@@ -459,7 +459,7 @@
 <translation id="3169472444629675720">Discover</translation>
 <translation id="3174168572213147020">बेट</translation>
 <translation id="3176929007561373547">प्रॉक्सी सर्व्हर कार्य करत आहे हे निश्चित करण्यासाठी तुमच्या प्रॉक्सी सेटिंग्ज तपासा
-          किंवा तुमच्या नेटवर्क अॅडमिनिस्ट्रेटरशी संपर्क साधा. तुम्ही प्रॉक्सी सर्व्हर वापरत
+          किंवा तुमच्या नेटवर्क ॲडमिनिस्ट्रेटरशी संपर्क साधा. तुम्ही प्रॉक्सी सर्व्हर वापरत
          आहात यावर तुमचा विश्वास नसल्यास:
           <ph name="PLATFORM_TEXT" /></translation>
 <translation id="3188393374551744535">खाते शिल्लक</translation>
@@ -540,7 +540,7 @@
 <translation id="3615877443314183785">वैध समाप्ती दिनांक एंटर करा</translation>
 <translation id="36224234498066874">ब्राउझिंग डेटा साफ करा...</translation>
 <translation id="362276910939193118">पूर्ण इतिहास दर्शवा</translation>
-<translation id="3630155396527302611">नेटवर्क अॅक्सेस करण्यासाठी परवानगी  दिलेला प्रोग्राम म्हणून तो आधीपासून सूचीबद्ध केला असल्यास
+<translation id="3630155396527302611">नेटवर्क ॲक्सेस करण्यासाठी परवानगी  दिलेला प्रोग्राम म्हणून तो आधीपासून सूचीबद्ध केला असल्यास
         तो सूचीमधून काढा आणि पुन्हा जोडून पहा.</translation>
 <translation id="3631244953324577188">बायोमेट्रिक</translation>
 <translation id="3640766068866876100">Index-4x6-Ext</translation>
@@ -569,7 +569,7 @@
 <translation id="3714780639079136834">मोबाइल डेटा किंवा वाय-फाय सुरू करणे</translation>
 <translation id="3715597595485130451">वाय-फाय वर कनेक्ट करा</translation>
 <translation id="3717027428350673159"><ph name="BEGIN_LINK" />प्रॉक्सी, फायरवॉल आणि DNS कॉन्फिगरेशन तपासणे<ph name="END_LINK" /></translation>
-<translation id="372429172604983730">या एररला कारणीभूत असू शकणार्‍या अॅप्लिकेशनमध्ये अँटिव्हायरस, फायरवॉल आणि वेब फिल्टरिंग किंवा प्रॉक्सी सॉफ्टवेअरचा समावेश होतो.</translation>
+<translation id="372429172604983730">या एररला कारणीभूत असू शकणार्‍या ॲप्लिकेशनमध्ये अँटिव्हायरस, फायरवॉल आणि वेब फिल्टरिंग किंवा प्रॉक्सी सॉफ्टवेअरचा समावेश होतो.</translation>
 <translation id="373042150751172459">B4 (Envelope)</translation>
 <translation id="3736520371357197498">तुम्ही तुमच्या सुरक्षिततेच्या जोखमी समजत असल्यास, धोकादायक प्रोग्राम काढण्यापूर्वी तुम्ही <ph name="BEGIN_LINK" />या असुरक्षित साइटला भेट देऊ शकता<ph name="END_LINK" />.</translation>
 <translation id="3744899669254331632">Chromium प्रक्रिया करू शकत नसलेले सरमिसळ केलेले क्रेडेन्‍शियल वेबसाइटने पाठविल्‍याने तुम्ही आत्ता <ph name="SITE" /> ला भेट देऊ शकत नाही. नेटवर्क एरर आणि आक्रमण सहसा तात्पुरते आहेत त्यामुळे संभवत: हे पेज नंतर कार्य करेल.</translation>
@@ -614,7 +614,7 @@
 <translation id="3964661563329879394">{COUNT,plural, =0{काहीही नाही}=1{1 साइटकडून }other{# साइटकडून }}</translation>
 <translation id="397105322502079400">गणना करत आहे...</translation>
 <translation id="3973234410852337861"><ph name="HOST_NAME" /> अवरोधित केले आहे</translation>
-<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ने तुमच्या ब्राउझरवर Chrome एंटरप्राइझ जोखीम सुरक्षितता सुरू केली आहे. Chrome एंटरप्राइझ जोखीम सुरक्षितते ला तुमच्या काही डेटाचा अॅक्सेस आहे.</translation>
+<translation id="3981540111851280311"><ph name="ENROLLMENT_DOMAIN" /> ने तुमच्या ब्राउझरवर Chrome एंटरप्राइझ जोखीम सुरक्षितता सुरू केली आहे. Chrome एंटरप्राइझ जोखीम सुरक्षितते ला तुमच्या काही डेटाचा ॲक्सेस आहे.</translation>
 <translation id="3987405730340719549">ही साइट बनावटी किंवा कपटपूर्ण असू शकते असे Chrome ने निर्धारित केले आहे.
 
     हे चुकून दाखवले गेले आहे असे तुम्हाला वाटत असल्यास, कृपया https://bugs.chromium.org/p/chromium/issues/entry?template=Safety+Tips+Appeals ला भेट द्या.</translation>
@@ -634,7 +634,7 @@
 <translation id="4098354747657067197">भ्रामक साइट पुढे आहे</translation>
 <translation id="4103249731201008433">डिव्हाइस सिरीयल क्रमांक चुकीचा आहे</translation>
 <translation id="410351446219883937">ऑटोप्ले</translation>
-<translation id="4103763322291513355">तुमच्या सिस्टम अॅडमिनिस्ट्रेटरद्वारे प्रवर्तित ब्लॅकलिस्टीतील URLs आणि अन्य धोरणांची सूची पाहण्यासाठी &lt;strong&gt;chrome://policy&lt;/strong&gt; ला भेट द्या.</translation>
+<translation id="4103763322291513355">तुमच्या सिस्टम ॲडमिनिस्ट्रेटरद्वारे प्रवर्तित ब्लॅकलिस्टीतील URLs आणि अन्य धोरणांची सूची पाहण्यासाठी &lt;strong&gt;chrome://policy&lt;/strong&gt; ला भेट द्या.</translation>
 <translation id="4108231218301530806">या कार्डची पुढच्या वेळी पडताळणी करण्यासाठी फिंगरप्रिंट वापरा.</translation>
 <translation id="4110652170750985508">तुमचे पेमेंट पुन्हा एकदा तपासा</translation>
 <translation id="4112140312785995938">मागे शोधा</translation>
@@ -684,7 +684,7 @@
 <translation id="425582637250725228">तुम्ही केलेले बदल कदाचित सेव्ह केले जाणार नाहीत.</translation>
 <translation id="4258748452823770588">खराब स्वाक्षरी</translation>
 <translation id="4261046003697461417">संरक्षित दस्तऐवजमध्ये भाष्य केले जाऊ शकत नाही</translation>
-<translation id="4265872034478892965">तुमच्या अॅडमिनिस्ट्रेटरकडून परवानगी असलेले</translation>
+<translation id="4265872034478892965">तुमच्या ॲडमिनिस्ट्रेटरकडून परवानगी असलेले</translation>
 <translation id="4275830172053184480">तुमचा डिव्हाइस रीस्टार्ट करा</translation>
 <translation id="4277028893293644418">पासवर्ड रीसेट करा</translation>
 <translation id="4279811152705618813">तुमचा <ph name="DEVICE_TYPE" /> <ph name="ENROLLMENT_DOMAIN" /> द्वारे व्यवस्थापित केला आहे</translation>
@@ -731,7 +731,7 @@
 <translation id="4503882053543859973">Architecture-D</translation>
 <translation id="4506176782989081258">ऑथेंटिकेशन एरर: <ph name="VALIDATION_ERROR" /></translation>
 <translation id="4506599922270137252">सिस्टम प्रशासकाशी संपर्क साधणे</translation>
-<translation id="450710068430902550">अॅडमिनिस्ट्रेटर शेअर करत आहे</translation>
+<translation id="450710068430902550">ॲडमिनिस्ट्रेटर शेअर करत आहे</translation>
 <translation id="4508814173490746936">टच आयडी वापरता आला नाही</translation>
 <translation id="4510487217173779431">Chou4 (Envelope)</translation>
 <translation id="4515275063822566619">कार्ड आणि पत्ते Chrome आणि आपल्या Google खात्याकडील (<ph name="ACCOUNT_EMAIL" />) आहेत. तुम्ही त्यांना <ph name="BEGIN_LINK" />सेटिंग्‍ज<ph name="END_LINK" /> मधून व्यवस्थापित करू शकता.</translation>
@@ -823,7 +823,7 @@
 <translation id="5017554619425969104">तुम्ही कॉपी केलेला मजकूर</translation>
 <translation id="5018422839182700155">हे पृष्‍ठ उघडू शकत नाही</translation>
 <translation id="5019198164206649151">समर्थन संचयन खराब स्थितीत</translation>
-<translation id="5023310440958281426">तुमच्या अॅडमिनिस्ट्रेटरची धोरणे तपासा</translation>
+<translation id="5023310440958281426">तुमच्या ॲडमिनिस्ट्रेटरची धोरणे तपासा</translation>
 <translation id="5029568752722684782">कॉपी साफ करा</translation>
 <translation id="503069730517007720">"<ph name="SOFTWARE_NAME" />" साठी मूळ सर्टिफिकेट आवश्यक आहे परंतु ते इंस्टॉल केलेले नाही. तुमच्या IT अ‍ॅडमिनिस्ट्रेटरने ही समस्या सोडण्यासाठी "<ph name="SOFTWARE_NAME" />" साठीच्या कॉन्फिगरेशन सूचना पहाव्यात. <ph name="FURTHER_EXPLANATION" /></translation>
 <translation id="5031870354684148875">Google भाषांतर बद्दल</translation>
@@ -858,7 +858,7 @@
 <translation id="5158275234811857234">कव्हर</translation>
 <translation id="5159010409087891077">नवीन गुप्त विंडोमध्ये पेज उघडा (⇧⌘N)</translation>
 <translation id="516920405563544094"><ph name="CREDIT_CARD" /> चा CVC टाका. तुम्ही निश्चित केल्यानंतर तुमच्या Google खात्यामधील कार्डाचा तपशील या साइटसोबत शेअर केला जाईल.</translation>
-<translation id="5169827969064885044">तुम्ही तुमच्या संस्थेच्या खात्याचा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
+<translation id="5169827969064885044">तुम्ही तुमच्या संस्थेच्या खात्याचा ॲक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="5171045022955879922">URL शोधा किंवा टाइप करा</translation>
 <translation id="5171689220826475070">Fanfold-European</translation>
 <translation id="5172758083709347301">मशीन</translation>
@@ -926,7 +926,7 @@
 <translation id="5490432419156082418">पत्ते आणि बरेच काही</translation>
 <translation id="5492298309214877701">कंपनी, संस्था किंवा शाळा इंट्रानेट वरील या साइटची URL बाह्य वेबसाइटसारखीच आहे.
     <ph name="LINE_BREAK" />
-    सिस्टम अॅडमिनिस्ट्रेटरशी संपर्क साधण्याचा प्रयत्न करा.</translation>
+    सिस्टम ॲडमिनिस्ट्रेटरशी संपर्क साधण्याचा प्रयत्न करा.</translation>
 <translation id="549333378215107354">आकार ३</translation>
 <translation id="5509762909502811065">B0</translation>
 <translation id="5509780412636533143">व्यवस्थापित केलेले बुकमार्क</translation>
@@ -988,7 +988,7 @@
 <translation id="5798683403665926540">Chrome सेटिंग्जमध्ये होम पेज बदला</translation>
 <translation id="5803412860119678065">तुम्ही तुमचे <ph name="CARD_DETAIL" /> भरू इच्छित आहात?</translation>
 <translation id="5804241973901381774">परवानग्या</translation>
-<translation id="5810442152076338065">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन अॉब्सोलीट सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation>
+<translation id="5810442152076338065">तुमचे <ph name="DOMAIN" /> वरील कनेक्शन ऑब्सोलीट सायफर सूट वापरून एंक्रिप्ट केलेले आहे.</translation>
 <translation id="5813119285467412249">&amp;जोडा पुन्हा करा</translation>
 <translation id="583281660410589416">अज्ञात</translation>
 <translation id="5838278095973806738">या साइटवर कोणतीही संवेदनशील माहिती (उदाहरणार्थ, पासवर्ड किंवा क्रेडिट कार्ड) एंटर करू नका, कारण आक्रमणकर्ते ती चोरू शकतात.</translation>
@@ -1037,7 +1037,7 @@
 <translation id="6032955021262906325">बाइंड लेफ्ट</translation>
 <translation id="6034000775414344507">फिकट राखाडी</translation>
 <translation id="6034283069659657473">10x14 (Envelope)</translation>
-<translation id="6034514109191629503">अॅकॉर्डियन फोल्ड</translation>
+<translation id="6034514109191629503">ॲकॉर्डियन फोल्ड</translation>
 <translation id="6039846035001940113">समस्या कायम राहिल्यास साइटच्या मालकाशी संपर्क साधा.</translation>
 <translation id="6040143037577758943">बंद करा</translation>
 <translation id="6044573915096792553">आकार १२</translation>
@@ -1049,7 +1049,7 @@
 <translation id="6059925163896151826">USB डिव्हाइसेस</translation>
 <translation id="6060009363608157444">चुकीचा DnsOverHttps मोड.</translation>
 <translation id="6064217302520318294">स्क्रीन लॉक</translation>
-<translation id="6080696365213338172">तुम्ही अॅडमिनिस्ट्रेटरने-दिलेले प्रमाणपत्र वापरून आशय अॅक्सेस केला. तुम्ही <ph name="DOMAIN" /> वर प्रदान करता तो डेटा तुमच्या अॅडमिनिस्ट्रेटरद्वारे अंतःखंडित केला जाऊ शकतो.</translation>
+<translation id="6080696365213338172">तुम्ही ॲडमिनिस्ट्रेटरने-दिलेले प्रमाणपत्र वापरून आशय ॲक्सेस केला. तुम्ही <ph name="DOMAIN" /> वर प्रदान करता तो डेटा तुमच्या ॲडमिनिस्ट्रेटरद्वारे अंतःखंडित केला जाऊ शकतो.</translation>
 <translation id="6094273045989040137">भाष्य करा</translation>
 <translation id="610911394827799129">तुमच्या Google खात्यामध्ये <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर ब्राउझिंग इतिहासाची अन्य स्वरूपे असू शकतात.</translation>
 <translation id="6132597952260690497">इंस्टॉल केलेल्या एक्स्टेंशन आणि प्लग-इनविषयी माहिती</translation>
@@ -1254,7 +1254,7 @@
 अतिरिक्त तपशील:
 <ph name="DEBUG_INFO" /></translation>
 <translation id="725866823122871198">तुमच्या कॉंप्युटरची तारीख आणि वेळ <ph name="BEGIN_BOLD" /><ph name="DOMAIN" /><ph name="END_BOLD" /> चुकीची असल्यामुळे (<ph name="DATE_AND_TIME" />)सह खाजगी कनेक्शन इंस्टॉल केले जाऊ शकत नाही.</translation>
-<translation id="7260504762447901703">अॅक्सेस रद्द करा</translation>
+<translation id="7260504762447901703">ॲक्सेस रद्द करा</translation>
 <translation id="7271803869921933038">स्वीकारली जाणारी प्रीपेड कार्डे</translation>
 <translation id="7275334191706090484">व्यवस्थापित केलेले बुकमार्क</translation>
 <translation id="7298195798382681320">शिफारस केलेले</translation>
@@ -1282,7 +1282,7 @@
 <translation id="7400418766976504921">URL</translation>
 <translation id="7403591733719184120">तुमचे <ph name="DEVICE_NAME" /> व्यवस्थापित केले आहे</translation>
 <translation id="7407424307057130981">&lt;p&gt;जर तुमच्या Windows कॉंप्युटरवर Superfish सॉफ्टवेअर असेल, तर तुम्हाला हा एरर दिसेल.&lt;/p&gt;
-    &lt;p&gt;सॉफ्टवेअरला तात्पुरत्या स्वरुपात बंद करण्यासाठी या पायऱ्यांनुसार कृती करा, जेणेकरून तुम्‍ही ते वेबवर मिळवू शकाल. तुमच्याकडे अॅडमिनिस्ट्रेटरचे अधिकार असणे आवश्यक आहे.&lt;/p&gt;
+    &lt;p&gt;सॉफ्टवेअरला तात्पुरत्या स्वरुपात बंद करण्यासाठी या पायऱ्यांनुसार कृती करा, जेणेकरून तुम्‍ही ते वेबवर मिळवू शकाल. तुमच्याकडे ॲडमिनिस्ट्रेटरचे अधिकार असणे आवश्यक आहे.&lt;/p&gt;
     &lt;ol&gt;
     &lt;li&gt;&lt;strong&gt;सुरू&lt;/strong&gt; वर क्लिक करा, मग स्थानिक सेवा शोधा आणि&lt;strong&gt;"स्थानिक सेवा पाहा"&lt;/strong&gt; निवडा
     &lt;li&gt;&lt;strong&gt;व्हिज्युअल डिस्कव्हरी&lt;/strong&gt; निवडा
@@ -1325,7 +1325,7 @@
 <translation id="7550637293666041147">तुमच्या डिव्हाइसचे वापरकर्ता नाव आणि Chrome चे वापरकर्ता नाव</translation>
 <translation id="7552846755917812628">खालील टिपा वापरून पहा:</translation>
 <translation id="7554791636758816595">नवीन टॅब</translation>
-<translation id="7564049878696755256">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
+<translation id="7564049878696755256">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा ॲक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chrome लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="7567204685887185387">हा सर्व्हर हे <ph name="DOMAIN" /> असल्याचे सिद्ध करू शकला नाही; त्याचे सुरक्षितता सर्टिफिकेट कदाचित लबाडीने जारी केले असावे. हे कदाचित एका चुकीच्या कॉंफिगरेशनमुळे किंवा हल्लेखोराने तुमचे कनेक्शन इंटरसेप्ट केल्यामुळे झाले असू शकते.</translation>
 <translation id="7569952961197462199">Chrome मधून क्रेडिट कार्ड काढून टाकायचे?</translation>
 <translation id="7569983096843329377">काळा</translation>
@@ -1360,7 +1360,7 @@
 <translation id="7701040980221191251">काहीही नाही</translation>
 <translation id="7704050614460855821"><ph name="BEGIN_LINK" /> <ph name="SITE" /> (असुरक्षित) वर सुरु ठेवा<ph name="END_LINK" /></translation>
 <translation id="7714464543167945231">सर्टिफिकेट</translation>
-<translation id="7716147886133743102">तुमच्या अॅडमिनिस्ट्रेटरने ब्लॉक केलेले</translation>
+<translation id="7716147886133743102">तुमच्या ॲडमिनिस्ट्रेटरने ब्लॉक केलेले</translation>
 <translation id="7716424297397655342">ही साइट कॅशे मधून लोड करणे शक्य नाही</translation>
 <translation id="7723047071702270851">कार्ड संपादित करा</translation>
 <translation id="774634243536837715">धोकादायक आशय ब्लॉक केला.</translation>
@@ -1375,7 +1375,7 @@
 <translation id="777702478322588152">परफेक्चुअर</translation>
 <translation id="7791196057686275387">बेल</translation>
 <translation id="7791543448312431591">जोडा</translation>
-<translation id="7800304661137206267">मेसेज अॉथेंटिकेशनसाठी <ph name="MAC" />  आणि की विनिमय तंत्र महणून <ph name="KX" /> सह <ph name="CIPHER" /> वापरून कनेक्शन कूटबद्ध केले आहे.</translation>
+<translation id="7800304661137206267">मेसेज ऑथेंटिकेशनसाठी <ph name="MAC" />  आणि की विनिमय तंत्र महणून <ph name="KX" /> सह <ph name="CIPHER" /> वापरून कनेक्शन कूटबद्ध केले आहे.</translation>
 <translation id="7802523362929240268">साइट कायदेशीर आहे</translation>
 <translation id="780301667611848630">नाही, नको</translation>
 <translation id="7805768142964895445">स्थिती</translation>
@@ -1445,7 +1445,7 @@
 <translation id="8127301229239896662">"<ph name="SOFTWARE_NAME" />" तुमच्या काँप्युटरवर किंवा नेटवर्कवर योग्य रीतीने इंस्टॉल केले नव्हते. तुमच्या अ‍ॅडमिनिस्ट्रेटरला ही समस्या सोडवण्यास सांगा.</translation>
 <translation id="8131740175452115882">पुष्टी करा</translation>
 <translation id="8149426793427495338">तुमचा कॉंप्युटर निष्क्रीय झाला.</translation>
-<translation id="8150722005171944719"><ph name="URL" /> येथील फाइल वाचनीय नाही. ती काढून टाकलेली, हलविलेली असू शकते किंवा फाइल परवानग्या अॅक्सेस प्रतिबंधित करत असू शकतात.</translation>
+<translation id="8150722005171944719"><ph name="URL" /> येथील फाइल वाचनीय नाही. ती काढून टाकलेली, हलविलेली असू शकते किंवा फाइल परवानग्या ॲक्सेस प्रतिबंधित करत असू शकतात.</translation>
 <translation id="8157295877370077682">साइट सोडा</translation>
 <translation id="8163866351304776260">क्वाड पंच लेफ्ट</translation>
 <translation id="8175796834047840627">तुम्ही साइन इन केले असल्यामुळे Chrome तुमच्या Google खात्यामध्ये तुमची कार्डे सेव्ह करत आहे. तुम्‍ही हे वर्तन सेटिंग्‍जमध्‍ये बदलू शकता.</translation>
@@ -1476,7 +1476,7 @@
 <translation id="8281084378435768645">Large-Photo</translation>
 <translation id="8286036467436129157">साइन इन</translation>
 <translation id="8288807391153049143">सर्टिफिकेट दाखवा</translation>
-<translation id="8289355894181816810">याचा निश्चित अर्थ तुम्हाला माहिती नसल्यास तुमच्या नेटवर्क अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="8289355894181816810">याचा निश्चित अर्थ तुम्हाला माहिती नसल्यास तुमच्या नेटवर्क ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="8293206222192510085">बुकमार्क जोडा</translation>
 <translation id="8294431847097064396">स्रोत</translation>
 <translation id="8298115750975731693">तुम्ही वापरत असलेल्या (<ph name="WIFI_NAME" />) वाय-फाय ला तुम्ही <ph name="BEGIN_BOLD" /><ph name="LOGIN_URL" /><ph name="END_BOLD" /> ला भेट देण्याची आवश्यकता असू शकते.</translation>
@@ -1484,7 +1484,7 @@
 <translation id="8307358339886459768">Small-Photo</translation>
 <translation id="8308427013383895095">नेटवर्क कनेक्शनसह समस्या असल्यामुळे भाषांतर अयशस्वी झाला.</translation>
 <translation id="831207732689920588">हे पेज संशयास्पद आहे (Chrome ने फ्लॅग केलेले).</translation>
-<translation id="8332188693563227489"><ph name="HOST_NAME" /> चा अॅक्सेस नाकारला</translation>
+<translation id="8332188693563227489"><ph name="HOST_NAME" /> चा ॲक्सेस नाकारला</translation>
 <translation id="8340095855084055290"><ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation>
 <translation id="834457929814110454">तुमच्या सुरक्षिततेच्या जोखमी समजत असल्यास, धोकादायक प्रोग्राम काढले जाण्यापूर्वी तुम्ही <ph name="BEGIN_LINK" />या असुरक्षित साइटला भेट देऊ शकता<ph name="END_LINK" />.</translation>
 <translation id="8349305172487531364">बुकमार्क बार</translation>
@@ -1552,7 +1552,7 @@
 <translation id="8768895707659403558">तुमच्या सर्व डिव्हाइसवर तुमची कार्डे वापरण्यासाठी, <ph name="SIGN_IN_LINK" />.</translation>
 <translation id="877985182522063539">A4</translation>
 <translation id="8790007591277257123">&amp;पुन्हा करा हटवा</translation>
-<translation id="8792621596287649091">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा अॅक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chromium लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
+<translation id="8792621596287649091">तुम्ही तुमच्या Google <ph name="ORG_NAME" /> चा ॲक्सेस गमावू शकता किंवा तुमची संवेदनशील माहिती चोरीला जाऊ शकते. Chromium लगेच तुमचा पासवर्ड बदलण्याची शिफारस करत आहे.</translation>
 <translation id="8800988563907321413">आपल्या जवळपासच्या सूचना येथे दिसतात</translation>
 <translation id="8805819170075074995">सूची एंट्री "<ph name="LANGUAGE_ID" />": एंट्री SpellcheckLanguage धोरणामध्येदेखील समाविष्ट असल्यामुळे तिच्याकडे दुर्लक्ष केले गेले आहे.</translation>
 <translation id="8807160976559152894">प्रत्येक पेजनंतर ट्रिम करा</translation>
@@ -1615,7 +1615,7 @@
 <translation id="9080712759204168376">मागणी सारांश</translation>
 <translation id="9089260154716455634">कामाच्या तासानंतरचे धोरण:</translation>
 <translation id="9095388113577226029">आणखी भाषा...</translation>
-<translation id="9098981495403789647">तुमच्या अ‍ॅडमिनिस्ट्रेटरने तुमच्या ब्राउझरवर Chrome एंटरप्राइझ जोखीम सुरक्षितता सुरू केली आहे. Chrome एंटरप्राइझ जोखीम सुरक्षितते ला तुमच्या काही डेटाचा अॅक्सेस आहे.</translation>
+<translation id="9098981495403789647">तुमच्या अ‍ॅडमिनिस्ट्रेटरने तुमच्या ब्राउझरवर Chrome एंटरप्राइझ जोखीम सुरक्षितता सुरू केली आहे. Chrome एंटरप्राइझ जोखीम सुरक्षितते ला तुमच्या काही डेटाचा ॲक्सेस आहे.</translation>
 <translation id="9103872766612412690"><ph name="SITE" /> तुमची माहिती संरक्षित करण्यासाठी सामान्यतः एंक्रिप्शन वापरते. Chromium ने यावेळी <ph name="SITE" /> शी कनेक्‍ट करण्‍याचा प्रयत्न केला तेव्‍हा, वेबसाइटने असामान्य आणि अयोग्य क्रेडेंशियल परत पाठवले. एकतर आक्रमणकर्ता <ph name="SITE" /> असल्याची बतावणी करण्याचा प्रयत्न करतो तेव्‍हा किंवा वाय-फाय साइन इन स्क्रीनने कनेक्शनमध्ये व्यत्यय आणले तेव्‍हा हे घडू शकते. कोणत्याही डेटाची अदलाबदल करण्यापूर्वी Chromium ने कनेक्शन थांबविल्यामुळे तुमची माहिती अद्याप सुरक्षित आहे.</translation>
 <translation id="9106062320799175032">बिलिंग पत्ता जोडा</translation>
 <translation id="9114524666733003316">कार्डची निश्चिती करत आहे...</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb
index f12776a..1f4d0b9 100644
--- a/components/strings/components_strings_sk.xtb
+++ b/components/strings/components_strings_sk.xtb
@@ -235,7 +235,7 @@
 <translation id="2094505752054353250">Domény sa nezhodujú</translation>
 <translation id="2096368010154057602">Department</translation>
 <translation id="2099652385553570808">Tri spinky vľavo</translation>
-<translation id="2100280972184758440">Vaše heslo bolo napadnuté</translation>
+<translation id="2100280972184758440">Vaše heslo bolo odhalené</translation>
 <translation id="2102134110707549001">Navrhnúť silné heslo…</translation>
 <translation id="2108755909498034140">Reštartujte počítač</translation>
 <translation id="2111256659903765347">Super-A</translation>
diff --git a/components/update_client/net/network_impl.cc b/components/update_client/net/network_impl.cc
index a08d9f1..7ad3fdb5 100644
--- a/components/update_client/net/network_impl.cc
+++ b/components/update_client/net/network_impl.cc
@@ -170,7 +170,7 @@
              DownloadToFileCompleteCallback download_to_file_complete_callback,
              base::FilePath file_path) {
             std::move(download_to_file_complete_callback)
-                .Run(file_path, simple_url_loader->NetError(),
+                .Run(simple_url_loader->NetError(),
                      simple_url_loader->GetContentSize());
           },
           simple_url_loader_.get(),
@@ -183,8 +183,7 @@
     const GURL& final_url,
     const network::mojom::URLResponseHead& response_head) {
   std::move(response_started_callback)
-      .Run(final_url,
-           response_head.headers ? response_head.headers->response_code() : -1,
+      .Run(response_head.headers ? response_head.headers->response_code() : -1,
            response_head.content_length);
 }
 
diff --git a/components/update_client/network.h b/components/update_client/network.h
index daed162..8f92d3f 100644
--- a/components/update_client/network.h
+++ b/components/update_client/network.h
@@ -25,15 +25,17 @@
 
 class NetworkFetcher {
  public:
+  // If the request does not have an X-Retry-After header, implementations
+  // should pass -1 for |xheader_retry_after_sec|.
   using PostRequestCompleteCallback =
       base::OnceCallback<void(std::unique_ptr<std::string> response_body,
                               int net_error,
                               const std::string& header_etag,
                               int64_t xheader_retry_after_sec)>;
-  using DownloadToFileCompleteCallback = base::OnceCallback<
-      void(base::FilePath path, int net_error, int64_t content_size)>;
-  using ResponseStartedCallback = base::OnceCallback<
-      void(const GURL& final_url, int response_code, int64_t content_length)>;
+  using DownloadToFileCompleteCallback =
+      base::OnceCallback<void(int net_error, int64_t content_size)>;
+  using ResponseStartedCallback =
+      base::OnceCallback<void(int response_code, int64_t content_length)>;
   using ProgressCallback = base::RepeatingCallback<void(int64_t current)>;
 
   // The ETag header carries the ECSDA signature of the POST response, if
diff --git a/components/update_client/request_sender.cc b/components/update_client/request_sender.cc
index a68df986..f01cff7 100644
--- a/components/update_client/request_sender.cc
+++ b/components/update_client/request_sender.cc
@@ -139,8 +139,7 @@
   HandleSendError(error, retry_after_sec);
 }
 
-void RequestSender::OnResponseStarted(const GURL& final_url,
-                                      int response_code,
+void RequestSender::OnResponseStarted(int response_code,
                                       int64_t content_length) {
   response_code_ = response_code;
 }
diff --git a/components/update_client/request_sender.h b/components/update_client/request_sender.h
index 7b9e21b..cc568fd 100644
--- a/components/update_client/request_sender.h
+++ b/components/update_client/request_sender.h
@@ -65,9 +65,7 @@
   // Decodes and returns the public key used by CUP.
   static std::string GetKey(const char* key_bytes_base64);
 
-  void OnResponseStarted(const GURL& final_url,
-                         int response_code,
-                         int64_t content_length);
+  void OnResponseStarted(int response_code, int64_t content_length);
 
   void OnNetworkFetcherComplete(const GURL& original_url,
                                 std::unique_ptr<std::string> response_body,
diff --git a/components/update_client/url_fetcher_downloader.cc b/components/update_client/url_fetcher_downloader.cc
index 5563bac..d120cab 100644
--- a/components/update_client/url_fetcher_downloader.cc
+++ b/components/update_client/url_fetcher_downloader.cc
@@ -84,7 +84,7 @@
       base::BindRepeating(&UrlFetcherDownloader::OnDownloadProgress,
                           base::Unretained(this)),
       base::BindOnce(&UrlFetcherDownloader::OnNetworkFetcherComplete,
-                     base::Unretained(this)));
+                     base::Unretained(this), file_path));
 
   download_start_time_ = base::TimeTicks::Now();
 }
@@ -131,7 +131,7 @@
   download_metrics.download_time_ms = download_time.InMilliseconds();
 
   VLOG(1) << "Downloaded " << content_size << " bytes in "
-          << download_time.InMilliseconds() << "ms from " << final_url_.spec()
+          << download_time.InMilliseconds() << "ms from " << url().spec()
           << " to " << result.response.value();
 
   // Delete the download directory in the error cases.
@@ -148,14 +148,12 @@
 }
 
 // This callback is used to indicate that a download has been started.
-void UrlFetcherDownloader::OnResponseStarted(const GURL& final_url,
-                                             int response_code,
+void UrlFetcherDownloader::OnResponseStarted(int response_code,
                                              int64_t content_length) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
-  VLOG(1) << "url fetcher response started for: " << final_url.spec();
+  VLOG(1) << "url fetcher response started for: " << url().spec();
 
-  final_url_ = final_url;
   response_code_ = response_code;
   total_bytes_ = content_length;
 }
diff --git a/components/update_client/url_fetcher_downloader.h b/components/update_client/url_fetcher_downloader.h
index a9330b87..0788351 100644
--- a/components/update_client/url_fetcher_downloader.h
+++ b/components/update_client/url_fetcher_downloader.h
@@ -38,9 +38,7 @@
   void OnNetworkFetcherComplete(base::FilePath file_path,
                                 int net_error,
                                 int64_t content_size);
-  void OnResponseStarted(const GURL& final_url,
-                         int response_code,
-                         int64_t content_length);
+  void OnResponseStarted(int response_code, int64_t content_length);
   void OnDownloadProgress(int64_t content_length);
 
   THREAD_CHECKER(thread_checker_);
@@ -53,7 +51,6 @@
 
   base::TimeTicks download_start_time_;
 
-  GURL final_url_;
   int response_code_ = -1;
   int64_t total_bytes_ = -1;
 
diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker.cc b/components/url_formatter/spoof_checks/idn_spoof_checker.cc
index a7f7543e..bc26d591 100644
--- a/components/url_formatter/spoof_checks/idn_spoof_checker.cc
+++ b/components/url_formatter/spoof_checks/idn_spoof_checker.cc
@@ -265,7 +265,8 @@
 
 bool IDNSpoofChecker::SafeToDisplayAsUnicode(
     base::StringPiece16 label,
-    base::StringPiece top_level_domain) {
+    base::StringPiece top_level_domain,
+    base::StringPiece16 top_level_domain_unicode) {
   UErrorCode status = U_ZERO_ERROR;
   int32_t result =
       uspoof_check(checker_, label.data(),
@@ -275,7 +276,7 @@
   if (U_FAILURE(status) || (result & USPOOF_ALL_CHECKS))
     return false;
 
-  icu::UnicodeString label_string(FALSE, label.data(),
+  icu::UnicodeString label_string(FALSE /* isTerminated */, label.data(),
                                   base::checked_cast<int32_t>(label.size()));
 
   // A punycode label with 'xn--' prefix is not subject to the URL
@@ -293,7 +294,7 @@
     return false;
 
   // Disallow Icelandic confusables for domains outside Iceland's ccTLD (.is).
-  if (label_string.length() > 1 && top_level_domain != ".is" &&
+  if (label_string.length() > 1 && top_level_domain != "is" &&
       icelandic_characters_.containsSome(label_string))
     return false;
 
@@ -314,9 +315,11 @@
   if (result == USPOOF_SINGLE_SCRIPT_RESTRICTIVE &&
       kana_letters_exceptions_.containsNone(label_string) &&
       combining_diacritics_exceptions_.containsNone(label_string)) {
-    bool is_tld_ascii = !top_level_domain.starts_with(".xn--");
-    // Check Cyrillic confusable only for ASCII TLDs.
-    return !is_tld_ascii || !IsMadeOfLatinAlikeCyrillic(label_string);
+    // Check Cyrillic confusable only for TLDs where Cyrillic characters are
+    // uncommon.
+    return IsCyrillicTopLevelDomain(top_level_domain,
+                                    top_level_domain_unicode) ||
+           !IsMadeOfLatinAlikeCyrillic(label_string);
   }
 
   // Additional checks for |label| with multiple scripts, one of which is Latin.
@@ -598,6 +601,21 @@
          cyrillic_letters_latin_alike_.containsAll(cyrillic_in_label);
 }
 
+bool IDNSpoofChecker::IsCyrillicTopLevelDomain(
+    base::StringPiece tld,
+    base::StringPiece16 tld_unicode) const {
+  icu::UnicodeString tld_string(
+      FALSE /* isTerminated */, tld_unicode.data(),
+      base::checked_cast<int32_t>(tld_unicode.size()));
+  if (cyrillic_letters_.containsSome(tld_string)) {
+    return true;
+  }
+  // These ASCII TLDs contain a large number of domains with Cyrillic
+  // characters.
+  return tld == "bg" || tld == "by" || tld == "kz" || tld == "pyc" ||
+         tld == "ru" || tld == "su" || tld == "ua" || tld == "uz";
+}
+
 // static
 void IDNSpoofChecker::SetTrieParamsForTesting(
     const HuffmanTrieParams& trie_params) {
diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker.h b/components/url_formatter/spoof_checks/idn_spoof_checker.h
index d4f5bd9..ffe763b 100644
--- a/components/url_formatter/spoof_checks/idn_spoof_checker.h
+++ b/components/url_formatter/spoof_checks/idn_spoof_checker.h
@@ -61,8 +61,11 @@
   // Returns true if |label| is safe to display as Unicode. In the event of
   // library failure, all IDN inputs will be treated as unsafe.
   // See the function body for details on the specific safety checks performed.
+  // top_level_domain_unicode can be empty if top_level_domain is not well
+  // formed punycode.
   bool SafeToDisplayAsUnicode(base::StringPiece16 label,
-                              base::StringPiece top_level_domain);
+                              base::StringPiece top_level_domain,
+                              base::StringPiece16 top_level_domain_unicode);
 
   // Returns the matching top domain if |hostname| or the last few components of
   // |hostname| looks similar to one of top domains listed i
@@ -93,6 +96,11 @@
   // Returns true if all the Cyrillic letters in |label| belong to a set of
   // Cyrillic letters that look like ASCII Latin letters.
   bool IsMadeOfLatinAlikeCyrillic(const icu::UnicodeString& label);
+  // Returns true if |tld| is a top level domain most likely to contain a large
+  // number of Cyrillic domains. |tld_unicode| can be empty if |tld| is not well
+  // formed punycode.
+  bool IsCyrillicTopLevelDomain(base::StringPiece tld,
+                                base::StringPiece16 tld_unicode) const;
 
   USpoofChecker* checker_;
   icu::UnicodeSet deviation_characters_;
diff --git a/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc b/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
index 146d48e..981a4c0 100644
--- a/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
+++ b/components/url_formatter/spoof_checks/idn_spoof_checker_unittest.cc
@@ -356,34 +356,56 @@
     {"xn--a1-eo4a.jp", L"a1\x30fe.jp", false},
 
     // Cyrillic labels made of Latin-look-alike Cyrillic letters.
-    // ѕсоре.com with ѕсоре in Cyrillic
+    // 1) ѕсоре.com with ѕсоре in Cyrillic.
     {"xn--e1argc3h.com", L"\x0455\x0441\x043e\x0440\x0435.com", false},
-    // ѕсоре123.com with ѕсоре in Cyrillic.
+    // 2) ѕсоре123.com with ѕсоре in Cyrillic.
     {"xn--123-qdd8bmf3n.com",
      L"\x0455\x0441\x043e\x0440\x0435"
      L"123.com",
      false},
-    // ѕсоре-рау.com with ѕсоре and рау in Cyrillic.
+    // 3) ѕсоре-рау.com with ѕсоре and рау in Cyrillic.
     {"xn----8sbn9akccw8m.com",
      L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.com", false},
-    // ѕсоре·рау.com with scope and pay in Cyrillic and U+00B7 between them.
+    // 4) ѕсоре·рау.com with scope and pay in Cyrillic and U+00B7 between them.
     {"xn--uba29ona9akccw8m.com",
      L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.com", false},
 
-    // The same as above three, but in IDN TLD.
+    // The same as above three, but in IDN TLD (рф).
+    // 1) ѕсоре.рф  with ѕсоре in Cyrillic.
     {"xn--e1argc3h.xn--p1ai", L"\x0455\x0441\x043e\x0440\x0435.\x0440\x0444",
      true},
+    // 2) ѕсоре123.рф with ѕсоре in Cyrillic.
     {"xn--123-qdd8bmf3n.xn--p1ai",
      L"\x0455\x0441\x043e\x0440\x0435"
      L"123.\x0440\x0444",
      true},
+    // 3) ѕсоре-рау.рф with ѕсоре and рау in Cyrillic.
+    {"xn----8sbn9akccw8m.xn--p1ai",
+     L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.\x0440\x0444", true},
+    // 4) ѕсоре·рау.com with scope and pay in Cyrillic and U+00B7 between them.
     {"xn--uba29ona9akccw8m.xn--p1ai",
      L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.\x0440\x0444",
      true},
 
-    // ѕсоре-рау.한국 with ѕсоре and рау in Cyrillic.
-    {"xn----8sbn9akccw8m.xn--3e0b707e",
-     L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.\xd55c\xad6d", true},
+    // Same as above three, but in .ru TLD.
+    // 1) ѕсоре.ru  with ѕсоре in Cyrillic.
+    {"xn--e1argc3h.ru", L"\x0455\x0441\x043e\x0440\x0435.ru", true},
+    // 2) ѕсоре123.ru with ѕсоре in Cyrillic.
+    {"xn--123-qdd8bmf3n.ru",
+     L"\x0455\x0441\x043e\x0440\x0435"
+     L"123.ru",
+     true},
+    // 3) ѕсоре-рау.ru with ѕсоре and рау in Cyrillic.
+    {"xn----8sbn9akccw8m.ru",
+     L"\x0455\x0441\x043e\x0440\x0435-\x0440\x0430\x0443.ru", true},
+    // 4) ѕсоре·рау.ru with scope and pay in Cyrillic and U+00B7 between them.
+    {"xn--uba29ona9akccw8m.ru",
+     L"\x0455\x0441\x043e\x0440\x0435\u00b7\x0440\x0430\x0443.ru", true},
+
+    // ѕсоре-рау.한국 with ѕсоре and рау in Cyrillic. The label will remain
+    // punycode while the TLD will be decoded.
+    {"xn----8sbn9akccw8m.xn--3e0b707e", L"xn----8sbn9akccw8m.\xd55c\xad6d",
+     true},
 
     // музей (museum in Russian) has characters without a Latin-look-alike.
     {"xn--e1adhj9a.com", L"\x043c\x0443\x0437\x0435\x0439.com", true},
@@ -397,6 +419,11 @@
     // сю.com is Cyrillic with Latin lookalikes.
     {"xn--q1a0a.com", L"\x0441\x044e.com", false},
 
+    // googlе.한국 where е is Cyrillic. This tests the generic case when one
+    // label is not allowed but  other labels in the domain name are still
+    // decoded. Here, googlе is left in punycode but the TLD is decoded.
+    {"xn--googl-3we.xn--3e0b707e", L"xn--googl-3we.\xd55c\xad6d", true},
+
     // Combining Diacritic marks after a script other than Latin-Greek-Cyrillic
     {"xn--rsa2568fvxya.com", L"\xd55c\x0301\xae00.com", false},  // 한́글.com
     {"xn--rsa0336bjom.com", L"\x6f22\x0307\x5b57.com", false},   // 漢̇字.com
diff --git a/components/url_formatter/url_formatter.cc b/components/url_formatter/url_formatter.cc
index f02434c..58cadb9 100644
--- a/components/url_formatter/url_formatter.cc
+++ b/components/url_formatter/url_formatter.cc
@@ -34,6 +34,7 @@
 bool IDNToUnicodeOneComponent(const base::char16* comp,
                               size_t comp_len,
                               base::StringPiece top_level_domain,
+                              base::StringPiece16 top_level_domain_unicode,
                               bool enable_spoof_checks,
                               base::string16* out,
                               bool* has_idn_component);
@@ -233,6 +234,28 @@
 base::LazyInstance<IDNSpoofChecker>::Leaky g_idn_spoof_checker =
     LAZY_INSTANCE_INITIALIZER;
 
+// Computes the top level domain from |host|. top_level_domain_unicode will
+// contain the unicode version of top_level_domain. top_level_domain_unicode can
+// remain empty if the TLD is not well formed punycode.
+void GetTopLevelDomain(base::StringPiece host,
+                       base::StringPiece* top_level_domain,
+                       base::string16* top_level_domain_unicode) {
+  size_t last_dot = host.rfind('.');
+  if (last_dot == base::StringPiece::npos)
+    return;
+
+  *top_level_domain = host.substr(last_dot + 1);
+  base::string16 tld16;
+  tld16.reserve(top_level_domain->length());
+  tld16.insert(tld16.end(), top_level_domain->begin(), top_level_domain->end());
+
+  // Convert the TLD to unicode with the spoof checks disabled.
+  bool tld_has_idn_component = false;
+  IDNToUnicodeOneComponent(tld16.data(), tld16.size(), std::string(),
+                           base::string16(), false /* enable_spoof_checks */,
+                           top_level_domain_unicode, &tld_has_idn_component);
+}
+
 IDNConversionResult IDNToUnicodeWithAdjustmentsImpl(
     base::StringPiece host,
     base::OffsetAdjuster::Adjustments* adjustments,
@@ -240,27 +263,25 @@
   if (adjustments)
     adjustments->clear();
   // Convert the ASCII input to a base::string16 for ICU.
-  base::string16 input16;
-  input16.reserve(host.length());
-  input16.insert(input16.end(), host.begin(), host.end());
+  base::string16 host16;
+  host16.reserve(host.length());
+  host16.insert(host16.end(), host.begin(), host.end());
 
+  // Compute the top level domain to be used in spoof checks later.
   base::StringPiece top_level_domain;
-  size_t last_dot = host.rfind('.');
-  if (last_dot != base::StringPiece::npos) {
-    top_level_domain = host.substr(last_dot);
-  }
+  base::string16 top_level_domain_unicode;
+  GetTopLevelDomain(host, &top_level_domain, &top_level_domain_unicode);
 
   IDNConversionResult result;
   // Do each component of the host separately, since we enforce script matching
   // on a per-component basis.
   base::string16 out16;
   for (size_t component_start = 0, component_end;
-       component_start < input16.length();
-       component_start = component_end + 1) {
+       component_start < host16.length(); component_start = component_end + 1) {
     // Find the end of the component.
-    component_end = input16.find('.', component_start);
+    component_end = host16.find('.', component_start);
     if (component_end == base::string16::npos)
-      component_end = input16.length();  // For getting the last component.
+      component_end = host16.length();  // For getting the last component.
     size_t component_length = component_end - component_start;
     size_t new_component_start = out16.length();
     bool converted_idn = false;
@@ -268,8 +289,9 @@
       // Add the substring that we just found.
       bool has_idn_component = false;
       converted_idn = IDNToUnicodeOneComponent(
-          input16.data() + component_start, component_length, top_level_domain,
-          enable_spoof_checks, &out16, &has_idn_component);
+          host16.data() + component_start, component_length, top_level_domain,
+          top_level_domain_unicode, enable_spoof_checks, &out16,
+          &has_idn_component);
       result.has_idn_component |= has_idn_component;
     }
     size_t new_component_length = out16.length() - new_component_start;
@@ -280,7 +302,7 @@
     }
 
     // Need to add the dot we just found (if we found one).
-    if (component_end < input16.length())
+    if (component_end < host16.length())
       out16.push_back('.');
   }
 
@@ -293,7 +315,7 @@
     if (enable_spoof_checks && !result.matching_top_domain.domain.empty()) {
       if (adjustments)
         adjustments->clear();
-      result.result = input16;
+      result.result = host16;
     }
   }
 
@@ -319,9 +341,10 @@
 // all even though it's possible to make up look-alike labels with ASCII
 // characters alone.
 bool IsIDNComponentSafe(base::StringPiece16 label,
-                        base::StringPiece top_level_domain) {
-  return g_idn_spoof_checker.Get().SafeToDisplayAsUnicode(label,
-                                                          top_level_domain);
+                        base::StringPiece top_level_domain,
+                        base::StringPiece16 top_level_domain_unicode) {
+  return g_idn_spoof_checker.Get().SafeToDisplayAsUnicode(
+      label, top_level_domain, top_level_domain_unicode);
 }
 
 // A wrapper to use LazyInstance<>::Leaky with ICU's UIDNA, a C pointer to
@@ -374,6 +397,7 @@
 bool IDNToUnicodeOneComponent(const base::char16* comp,
                               size_t comp_len,
                               base::StringPiece top_level_domain,
+                              base::StringPiece16 top_level_domain_unicode,
                               bool enable_spoof_checks,
                               base::string16* out,
                               bool* has_idn_component) {
@@ -410,8 +434,10 @@
 
   if (U_SUCCESS(status) && info.errors == 0) {
     *has_idn_component = true;
-    // Converted successfully. Ensure that the converted component
-    // can be safely displayed to the user.
+    // Converted successfully. At this point the length of the output string
+    // is original_length + output_length which may be shorter than the current
+    // length of |out|. Trim |out| and ensure that the converted component can
+    // be safely displayed to the user.
     out->resize(original_length + output_length);
     if (!enable_spoof_checks) {
       return true;
@@ -419,7 +445,7 @@
     if (IsIDNComponentSafe(
             base::StringPiece16(out->data() + original_length,
                                 base::checked_cast<size_t>(output_length)),
-            top_level_domain)) {
+            top_level_domain, top_level_domain_unicode)) {
       return true;
     }
   }
diff --git a/components/viz/service/display_embedder/software_output_device_x11.cc b/components/viz/service/display_embedder/software_output_device_x11.cc
index 77aeae1..58be4eb 100644
--- a/components/viz/service/display_embedder/software_output_device_x11.cc
+++ b/components/viz/service/display_embedder/software_output_device_x11.cc
@@ -39,38 +39,25 @@
 void SoftwareOutputDeviceX11::Resize(const gfx::Size& pixel_size,
                                      float scale_factor) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
-  // See comment in X11SoftwareBitmapPresenter::Resize
-  if (x11_software_bitmap_presenter_.Resize(pixel_size)) {
-    viewport_pixel_size_ = pixel_size;
-    surface_ = nullptr;
-  } else {
-    SoftwareOutputDevice::Resize(pixel_size, scale_factor);
-  }
+  viewport_pixel_size_ = pixel_size;
+  x11_software_bitmap_presenter_.Resize(pixel_size);
 }
 
 SkCanvas* SoftwareOutputDeviceX11::BeginPaint(const gfx::Rect& damage_rect) {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   damage_rect_ = damage_rect;
-
-  auto* sk_canvas = x11_software_bitmap_presenter_.GetSkCanvas();
-
-  if (!sk_canvas)
-    sk_canvas = SoftwareOutputDevice::BeginPaint(damage_rect);
-  return sk_canvas;
+  return x11_software_bitmap_presenter_.GetSkCanvas();
 }
 
 void SoftwareOutputDeviceX11::EndPaint() {
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
   SoftwareOutputDevice::EndPaint();
-  x11_software_bitmap_presenter_.EndPaint(surface_, damage_rect_);
+  x11_software_bitmap_presenter_.EndPaint(damage_rect_);
 }
 
 void SoftwareOutputDeviceX11::OnSwapBuffers(
     SwapBuffersCallback swap_ack_callback) {
-  if (x11_software_bitmap_presenter_.ShmPoolReady())
-    x11_software_bitmap_presenter_.OnSwapBuffers(std::move(swap_ack_callback));
-  else
-    SoftwareOutputDevice::OnSwapBuffers(std::move(swap_ack_callback));
+  x11_software_bitmap_presenter_.OnSwapBuffers(std::move(swap_ack_callback));
 }
 
 int SoftwareOutputDeviceX11::MaxFramesPending() const {
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index 342808a9..71bb83e 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -148,7 +148,6 @@
     "//services/content/public/cpp",
     "//services/content/public/mojom",
     "//services/data_decoder/public/cpp",
-    "//services/data_decoder/public/cpp:manifest",
     "//services/data_decoder/public/mojom",
     "//services/device:lib",
     "//services/device/public/cpp:device_features",
@@ -681,7 +680,6 @@
     "cookie_store/cookie_store_host.h",
     "cookie_store/cookie_store_manager.cc",
     "cookie_store/cookie_store_manager.h",
-    "data_decoder/data_decoder_service.cc",
     "data_url_loader_factory.cc",
     "data_url_loader_factory.h",
     "devtools/browser_devtools_agent_host.cc",
diff --git a/content/browser/accessibility/accessibility_win_browsertest.cc b/content/browser/accessibility/accessibility_win_browsertest.cc
index ecea63e..06afe720 100644
--- a/content/browser/accessibility/accessibility_win_browsertest.cc
+++ b/content/browser/accessibility/accessibility_win_browsertest.cc
@@ -868,6 +868,42 @@
   base::RunLoop run_loop_;
 };
 
+// Helper class that reproduces a specific crash when UIA parent navigation
+// is performed during the destruction of its WebContents.
+class WebContentsUIAParentNavigationInDestroyedWatcher
+    : public WebContentsObserver {
+ public:
+  explicit WebContentsUIAParentNavigationInDestroyedWatcher(
+      WebContents* web_contents,
+      IUIAutomationElement* root,
+      IUIAutomationTreeWalker* tree_walker)
+      : WebContentsObserver(web_contents),
+        root_(root),
+        tree_walker_(tree_walker) {
+    CHECK(web_contents);
+  }
+
+  ~WebContentsUIAParentNavigationInDestroyedWatcher() override {}
+
+  // Waits until the WebContents is destroyed.
+  void Wait() { run_loop_.Run(); }
+
+ private:
+  // Overridden WebContentsObserver methods.
+  void WebContentsDestroyed() override {
+    // Test navigating to the parent node via UIA
+    Microsoft::WRL::ComPtr<IUIAutomationElement> parent;
+    tree_walker_->GetParentElement(root_.Get(), &parent);
+    CHECK(parent.Get());
+
+    run_loop_.Quit();
+  }
+
+  Microsoft::WRL::ComPtr<IUIAutomationElement> root_;
+  Microsoft::WRL::ComPtr<IUIAutomationTreeWalker> tree_walker_;
+  base::RunLoop run_loop_;
+};
+
 }  // namespace
 
 // Tests ----------------------------------------------------------------------
@@ -4031,4 +4067,49 @@
   EXPECT_EQ(FALSE, result);
 }
 
+IN_PROC_BROWSER_TEST_F(AccessibilityWinUIABrowserTest,
+                       UIAParentNavigationDuringWebContentsClose) {
+  LoadInitialAccessibilityTreeFromHtml(
+      R"HTML(<!DOCTYPE html>
+        <html>
+        </html>)HTML");
+
+  // Request an automation element for UIA tree traversal.
+  Microsoft::WRL::ComPtr<IUIAutomation> uia;
+  ASSERT_HRESULT_SUCCEEDED(CoCreateInstance(CLSID_CUIAutomation, nullptr,
+                                            CLSCTX_INPROC_SERVER,
+                                            IID_IUIAutomation, &uia));
+
+  RenderWidgetHostViewAura* view = static_cast<RenderWidgetHostViewAura*>(
+      shell()->web_contents()->GetRenderWidgetHostView());
+  ASSERT_NE(nullptr, view);
+
+  // Start by getting the root element for the HWND hosting the web content.
+  HWND hwnd = view->host()
+                  ->GetRootBrowserAccessibilityManager()
+                  ->GetRoot()
+                  ->GetTargetForNativeAccessibilityEvent();
+  ASSERT_NE(gfx::kNullAcceleratedWidget, hwnd);
+  Microsoft::WRL::ComPtr<IUIAutomationElement> root;
+  uia->ElementFromHandle(hwnd, &root);
+  ASSERT_NE(nullptr, root.Get());
+
+  Microsoft::WRL::ComPtr<IUIAutomationTreeWalker> tree_walker;
+  uia->get_RawViewWalker(&tree_walker);
+  ASSERT_NE(nullptr, tree_walker.Get());
+
+  // Navigate to the root's first child before closing the WebContents.
+  Microsoft::WRL::ComPtr<IUIAutomationElement> first_child;
+  tree_walker->GetFirstChildElement(root.Get(), &first_child);
+  ASSERT_NE(nullptr, first_child.Get());
+
+  // The bug only reproduces during the WebContentsDestroyed event, so create
+  // an observer that will do UIA parent navigation (on the first child that
+  // was just obtained) while the WebContents is being destroyed.
+  content::WebContentsUIAParentNavigationInDestroyedWatcher destroyed_watcher(
+      shell()->web_contents(), first_child.Get(), tree_walker.Get());
+  shell()->CloseContents(shell()->web_contents());
+  destroyed_watcher.Wait();
+}
+
 }  // namespace content
diff --git a/content/browser/accessibility/dump_accessibility_browsertest_base.cc b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
index 6d01281..d7078fd9 100644
--- a/content/browser/accessibility/dump_accessibility_browsertest_base.cc
+++ b/content/browser/accessibility/dump_accessibility_browsertest_base.cc
@@ -309,8 +309,19 @@
     AccessibilityNotificationWaiter waiter(shell()->web_contents(),
                                            ui::kAXModeComplete,
                                            ax::mojom::Event::kClicked);
+    BrowserAccessibility* action_element;
 
-    BrowserAccessibility* action_element = FindNode(str);
+    size_t parent_node_delimiter_index = str.find(",");
+    if (parent_node_delimiter_index != std::string::npos) {
+      auto node_name = str.substr(0, parent_node_delimiter_index);
+      auto parent_node_name = str.substr(parent_node_delimiter_index + 1);
+
+      BrowserAccessibility* parent_node = FindNode(parent_node_name);
+      DCHECK(parent_node) << "Parent node name provided but not found";
+      action_element = FindNode(node_name, parent_node);
+    } else {
+      action_element = FindNode(str);
+    }
 
     ui::AXActionData action_data;
     action_data.action = ax::mojom::Action::kDoDefault;
@@ -430,10 +441,14 @@
 }
 
 BrowserAccessibility* DumpAccessibilityTestBase::FindNode(
-    const std::string& name) {
-  BrowserAccessibility* root = GetManager()->GetRoot();
-  CHECK(root);
-  return FindNodeInSubtree(*root, name);
+    const std::string& name,
+    BrowserAccessibility* search_root) {
+  if (!search_root)
+    search_root = GetManager()->GetRoot();
+
+  CHECK(search_root);
+  BrowserAccessibility* node = FindNodeInSubtree(*search_root, name);
+  return node;
 }
 
 BrowserAccessibilityManager* DumpAccessibilityTestBase::GetManager() {
@@ -445,9 +460,8 @@
 BrowserAccessibility* DumpAccessibilityTestBase::FindNodeInSubtree(
     BrowserAccessibility& node,
     const std::string& name) {
-  if (node.GetStringAttribute(ax::mojom::StringAttribute::kName) == name) {
+  if (node.GetStringAttribute(ax::mojom::StringAttribute::kName) == name)
     return &node;
-  }
 
   for (unsigned int i = 0; i < node.PlatformChildCount(); ++i) {
     BrowserAccessibility* result =
diff --git a/content/browser/accessibility/dump_accessibility_browsertest_base.h b/content/browser/accessibility/dump_accessibility_browsertest_base.h
index 45da92b..cbea701b 100644
--- a/content/browser/accessibility/dump_accessibility_browsertest_base.h
+++ b/content/browser/accessibility/dump_accessibility_browsertest_base.h
@@ -96,9 +96,11 @@
 
   void RunTestForPlatform(const base::FilePath file_path, const char* file_dir);
 
-  // Retrieve the accessibility node, starting from the root node, that matches
-  // the accessibility name.
-  BrowserAccessibility* FindNode(const std::string& name);
+  // Retrieve the accessibility node that matches the accessibility name. There
+  // is an optional search_root parameter that defaults to the document root if
+  // not provided.
+  BrowserAccessibility* FindNode(const std::string& name,
+                                 BrowserAccessibility* search_root = nullptr);
 
   // Retrieve the browser accessibility manager object for the current web
   // contents.
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index 30c465f..67df9dc 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -1555,6 +1555,11 @@
   RunHtmlTest(FILE_PATH_LITERAL("input-date-with-popup-open.html"));
 }
 
+IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest,
+                       AccessibilityInputDateWithPopupOpenMultiple) {
+  RunHtmlTest(FILE_PATH_LITERAL("input-date-with-popup-open-multiple.html"));
+}
+
 IN_PROC_BROWSER_TEST_P(DumpAccessibilityTreeTest, AccessibilityInputDateTime) {
   RunHtmlTest(FILE_PATH_LITERAL("input-datetime.html"));
 }
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.cc b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
index 467b2793..41b49ab 100644
--- a/content/browser/accessibility/one_shot_accessibility_tree_search.cc
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search.cc
@@ -414,6 +414,11 @@
   return tag == "audio" || tag == "video";
 }
 
+bool AccessibilityPopupButtonPredicate(BrowserAccessibility* start,
+                                       BrowserAccessibility* node) {
+  return (node->GetRole() == ax::mojom::Role::kPopUpButton);
+}
+
 bool AccessibilityRadioButtonPredicate(BrowserAccessibility* start,
                                        BrowserAccessibility* node) {
   return (node->GetRole() == ax::mojom::Role::kRadioButton ||
diff --git a/content/browser/accessibility/one_shot_accessibility_tree_search.h b/content/browser/accessibility/one_shot_accessibility_tree_search.h
index 27128a0..fe0864c 100644
--- a/content/browser/accessibility/one_shot_accessibility_tree_search.h
+++ b/content/browser/accessibility/one_shot_accessibility_tree_search.h
@@ -51,6 +51,7 @@
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityLiveRegionPredicate);
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityMainPredicate);
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityMediaPredicate);
+DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityPopupButtonPredicate);
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityRadioButtonPredicate);
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityRadioGroupPredicate);
 DECLARE_ACCESSIBILITY_PREDICATE(AccessibilityTablePredicate);
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc
index 3af6a64b..fcfdc02 100644
--- a/content/browser/browser_main_loop.cc
+++ b/content/browser/browser_main_loop.cc
@@ -26,6 +26,7 @@
 #include "base/metrics/field_trial.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/metrics/user_metrics.h"
+#include "base/no_destructor.h"
 #include "base/path_service.h"
 #include "base/pending_task.h"
 #include "base/power_monitor/power_monitor.h"
@@ -194,7 +195,7 @@
 #if defined(OS_CHROMEOS)
 #include "chromeos/constants/chromeos_switches.h"
 #include "device/bluetooth/bluetooth_adapter_factory.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #endif
 
 #if defined(USE_GLIB)
@@ -388,9 +389,9 @@
 
 #if defined(OS_CHROMEOS)
 mojo::PendingRemote<data_decoder::mojom::BleScanParser> GetBleScanParser() {
+  static base::NoDestructor<data_decoder::DataDecoder> decoder;
   mojo::PendingRemote<data_decoder::mojom::BleScanParser> ble_scan_parser;
-  GetSystemConnector()->Connect(
-      data_decoder::mojom::kServiceName,
+  decoder->GetService()->BindBleScanParser(
       ble_scan_parser.InitWithNewPipeAndPassReceiver());
   return ble_scan_parser;
 }
diff --git a/content/browser/builtin_service_manifests.cc b/content/browser/builtin_service_manifests.cc
index 805496d..52d918b 100644
--- a/content/browser/builtin_service_manifests.cc
+++ b/content/browser/builtin_service_manifests.cc
@@ -20,7 +20,6 @@
 #include "media/mojo/services/cdm_manifest.h"
 #include "media/mojo/services/media_manifest.h"
 #include "services/audio/public/cpp/manifest.h"
-#include "services/data_decoder/public/cpp/manifest.h"
 #include "services/device/public/cpp/manifest.h"
 #include "services/media_session/public/cpp/manifest.h"
 #include "services/metrics/public/cpp/manifest.h"
@@ -63,7 +62,6 @@
 #endif
           media::GetMediaManifest(),
           media::GetMediaRendererManifest(),
-          data_decoder::GetManifest(),
           device::GetManifest(),
           media_session::GetManifest(),
           metrics::GetManifest(),
diff --git a/content/browser/data_decoder/OWNERS b/content/browser/data_decoder/OWNERS
deleted file mode 100644
index cfe29b4..0000000
--- a/content/browser/data_decoder/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-file://services/data_decoder/OWNERS
diff --git a/content/browser/data_decoder/data_decoder_service.cc b/content/browser/data_decoder/data_decoder_service.cc
deleted file mode 100644
index a716608f..0000000
--- a/content/browser/data_decoder/data_decoder_service.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/public/browser/data_decoder_service.h"
-
-#include "content/public/browser/service_process_host.h"
-
-namespace content {
-
-mojo::Remote<data_decoder::mojom::DataDecoderService> LaunchDataDecoder() {
-  return ServiceProcessHost::Launch<data_decoder::mojom::DataDecoderService>(
-      ServiceProcessHost::Options()
-          .WithSandboxType(service_manager::SANDBOX_TYPE_UTILITY)
-          .WithDisplayName("Data Decoder Service")
-          .Pass());
-}
-
-}  // namespace content
diff --git a/content/browser/data_decoder/data_decoder_service_browsertest.cc b/content/browser/data_decoder/data_decoder_service_browsertest.cc
deleted file mode 100644
index 1b97f94..0000000
--- a/content/browser/data_decoder/data_decoder_service_browsertest.cc
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "content/public/browser/data_decoder_service.h"
-
-#include "base/test/bind_test_util.h"
-#include "base/values.h"
-#include "content/public/test/content_browser_test.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
-#include "services/data_decoder/public/mojom/json_parser.mojom.h"
-
-namespace content {
-
-using DataDecoderServiceBrowserTest = ContentBrowserTest;
-
-IN_PROC_BROWSER_TEST_F(DataDecoderServiceBrowserTest, Launch) {
-  // Simple smoke test to verify that we can launch an instance of the Data
-  // Decoder service and communicate end-to-end.
-
-  mojo::Remote<data_decoder::mojom::DataDecoderService> service =
-      LaunchDataDecoder();
-  mojo::Remote<data_decoder::mojom::JsonParser> parser;
-  service->BindJsonParser(parser.BindNewPipeAndPassReceiver());
-
-  base::RunLoop loop;
-  parser->Parse(
-      R"({"a": 5, "b": 42})",
-      base::BindLambdaForTesting([&](base::Optional<base::Value> result,
-                                     const base::Optional<std::string>& error) {
-        EXPECT_FALSE(error);
-        ASSERT_TRUE(result);
-        EXPECT_EQ(base::Value::Type::DICTIONARY, result->type());
-        auto* a = result->FindKey("a");
-        EXPECT_TRUE(a);
-        EXPECT_EQ(5, a->GetInt());
-        auto* b = result->FindKey("b");
-        EXPECT_TRUE(b);
-        EXPECT_EQ(42, b->GetInt());
-        loop.Quit();
-      }));
-  loop.Run();
-}
-
-}  // namespace content
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index eb3add8..c82a1702 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -245,11 +245,9 @@
 // The next value to use for the accessibility reset token.
 int g_next_accessibility_reset_token = 1;
 
-#if defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(IS_CHROMECAST)
 // Whether to allow injecting javascript into any kind of frame, for Android
-// WebView, Fuchsia web.ContextProvider and CastOS content shell.
+// WebView, WebLayer, Fuchsia web.ContextProvider and CastOS content shell.
 bool g_allow_injecting_javascript = false;
-#endif
 
 typedef std::unordered_map<GlobalFrameRoutingId,
                            RenderFrameHostImpl*,
@@ -818,12 +816,10 @@
       GlobalFrameRoutingId(render_process_id, render_frame_id));
 }
 
-#if defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(IS_CHROMECAST)
 // static
 void RenderFrameHost::AllowInjectingJavaScript() {
   g_allow_injecting_javascript = true;
 }
-#endif  // defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(IS_CHROMECAST)
 
 // static
 RenderFrameHostImpl* RenderFrameHostImpl::FromID(int render_process_id,
@@ -932,6 +928,8 @@
       commit_callback_interceptor_(nullptr),
       media_device_id_salt_base_(
           BrowserContext::CreateRandomMediaDeviceIDSalt()) {
+  DCHECK(delegate_);
+
   GetProcess()->AddRoute(routing_id_, this);
   g_routing_id_frame_map.Get().emplace(
       GlobalFrameRoutingId(GetProcess()->GetID(), routing_id_), this);
@@ -1050,7 +1048,7 @@
 
   const bool was_created = render_frame_created_;
   render_frame_created_ = false;
-  if (delegate_ && was_created)
+  if (was_created)
     delegate_->RenderFrameDeleted(this);
 
   // Ensure that the render process host has been notified that all audio
@@ -2113,7 +2111,7 @@
   // We should not create new RenderFrames while our delegate is being destroyed
   // (e.g., via a WebContentsObserver during WebContents shutdown).  This seems
   // to have caused crashes in https://crbug.com/717650.
-  if (created && delegate_)
+  if (created)
     CHECK(!delegate_->IsBeingDestroyed());
 
   bool was_created = render_frame_created_;
@@ -2121,7 +2119,7 @@
 
   // If the current status is different than the new status, the delegate
   // needs to be notified.
-  if (delegate_ && (created != was_created)) {
+  if (created != was_created) {
     if (created) {
       SetUpMojoIfNeeded();
       delegate_->RenderFrameCreated(this);
@@ -2465,7 +2463,7 @@
 
 void RenderFrameHostImpl::UpdateRenderProcessHostFramePriorities() {
   const auto new_committed_document_priority =
-      (delegate_ && delegate_->IsFrameLowPriority(this))
+      delegate_->IsFrameLowPriority(this)
           ? RenderProcessHostImpl::FramePriority::kLow
           : RenderProcessHostImpl::FramePriority::kNormal;
   if (last_committed_document_priority_ != new_committed_document_priority) {
@@ -4617,19 +4615,17 @@
   PermissionControllerImpl* permission_controller =
       PermissionControllerImpl::FromBrowserContext(
           GetProcess()->GetBrowserContext());
-  if (delegate_) {
-    auto* geolocation_context = delegate_->GetGeolocationContext();
-    if (geolocation_context) {
-      geolocation_service_.reset(new GeolocationServiceImpl(
-          geolocation_context, permission_controller, this));
-      // NOTE: Both the |interface_registry_| and |geolocation_service_| are
-      // owned by |this|, so their destruction will be triggered together.
-      // |interface_registry_| is declared after |geolocation_service_|, so it
-      // will be destroyed prior to |geolocation_service_|.
-      registry_->AddInterface(
-          base::BindRepeating(&GeolocationServiceImpl::Bind,
-                              base::Unretained(geolocation_service_.get())));
-    }
+  auto* geolocation_context = delegate_->GetGeolocationContext();
+  if (geolocation_context) {
+    geolocation_service_.reset(new GeolocationServiceImpl(
+        geolocation_context, permission_controller, this));
+    // NOTE: Both the |interface_registry_| and |geolocation_service_| are
+    // owned by |this|, so their destruction will be triggered together.
+    // |interface_registry_| is declared after |geolocation_service_|, so it
+    // will be destroyed prior to |geolocation_service_|.
+    registry_->AddInterface(
+        base::BindRepeating(&GeolocationServiceImpl::Bind,
+                            base::Unretained(geolocation_service_.get())));
   }
 
   registry_->AddInterface<media::mojom::InterfaceFactory>(base::BindRepeating(
@@ -6253,10 +6249,8 @@
 }
 
 bool RenderFrameHostImpl::CanExecuteJavaScript() {
-#if defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(IS_CHROMECAST)
   if (g_allow_injecting_javascript)
     return true;
-#endif
   return !frame_tree_node_->current_url().is_valid() ||
          frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) ||
          ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings(
@@ -6530,8 +6524,7 @@
         "WebNFC is only allowed in a top-level browsing context.");
     return;
   }
-  if (delegate_)
-    delegate_->GetNFC(std::move(receiver));
+  delegate_->GetNFC(std::move(receiver));
 }
 #endif
 
diff --git a/content/browser/media/encrypted_media_browsertest.cc b/content/browser/media/encrypted_media_browsertest.cc
index c4356ec..088f45e 100644
--- a/content/browser/media/encrypted_media_browsertest.cc
+++ b/content/browser/media/encrypted_media_browsertest.cc
@@ -383,26 +383,20 @@
 }
 
 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest, Playback_Encryption_CBCS) {
-  std::string expected_result =
-      BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME) ? media::kEnded : media::kError;
   RunMultipleFileTest("bear-640x360-v_frag-cbcs.mp4",
-                      "bear-640x360-a_frag-cbcs.mp4", expected_result);
+                      "bear-640x360-a_frag-cbcs.mp4", media::kEnded);
 }
 
 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest,
                        Playback_Encryption_CBCS_Video_CENC_Audio) {
-  std::string expected_result =
-      BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME) ? media::kEnded : media::kError;
   RunMultipleFileTest("bear-640x360-v_frag-cbcs.mp4",
-                      "bear-640x360-a_frag-cenc.mp4", expected_result);
+                      "bear-640x360-a_frag-cenc.mp4", media::kEnded);
 }
 
 IN_PROC_BROWSER_TEST_P(EncryptedMediaTest,
                        Playback_Encryption_CENC_Video_CBCS_Audio) {
-  std::string expected_result =
-      BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME) ? media::kEnded : media::kError;
   RunMultipleFileTest("bear-640x360-v_frag-cenc.mp4",
-                      "bear-640x360-a_frag-cbcs.mp4", expected_result);
+                      "bear-640x360-a_frag-cbcs.mp4", media::kEnded);
 }
 #endif  // BUILDFLAG(USE_PROPRIETARY_CODECS)
 
diff --git a/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc b/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
index aec4470..06230f2 100644
--- a/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
+++ b/content/browser/renderer_host/accessibility_tree_linkage_win_browsertest.cc
@@ -103,15 +103,8 @@
     EXPECT_EQ(accessibility_native_view_accessible,
               dummy_ax_platform_node_->GetNativeViewAccessible());
   } else {
-    if (GetParam().is_uia_enabled) {
-      EXPECT_EQ(accessibility_native_view_accessible,
-                ui::AXFragmentRootWin::GetForAcceleratedWidget(
-                    GetView()->AccessibilityGetAcceleratedWidget())
-                    ->GetNativeViewAccessible());
-    } else {
-      EXPECT_EQ(accessibility_native_view_accessible,
-                GetLegacyRenderWidgetHostHWND()->window_accessible());
-    }
+    EXPECT_EQ(accessibility_native_view_accessible,
+              GetLegacyRenderWidgetHostHWND()->window_accessible());
   }
 }
 
diff --git a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
index cd4c22b..55bacfb 100644
--- a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
+++ b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.cc
@@ -58,6 +58,16 @@
 // timeout should be usually hit during indexing the second font.
 constexpr float kIndexingSlowDownForTestingPercentage = 0.75;
 
+// Additional local custom interface specific HRESULT codes (also added to
+// enums.xml) to mark font scanning implementation specific error situations, as
+// part of reporting them in a UMA metric.
+constexpr HRESULT kErrorFontScanningTimedOut =
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xD101);
+constexpr HRESULT kErrorExtractingLocalizedStringsFailed =
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xD102);
+constexpr HRESULT kErrorNoFullNameOrPostScriptName =
+    MAKE_HRESULT(SEVERITY_ERROR, FACILITY_ITF, 0xD103);
+
 bool ExtractCaseFoldedLocalizedStrings(
     IDWriteLocalizedStrings* dwrite_localized_strings,
     std::vector<std::string>* localized_strings) {
@@ -112,6 +122,11 @@
 DWriteFontLookupTableBuilder::FontFileWithUniqueNames::FontFileWithUniqueNames(
     DWriteFontLookupTableBuilder::FontFileWithUniqueNames&& other) = default;
 
+DWriteFontLookupTableBuilder::FamilyResult::FamilyResult() = default;
+DWriteFontLookupTableBuilder::FamilyResult::FamilyResult(FamilyResult&& other) =
+    default;
+DWriteFontLookupTableBuilder::FamilyResult::~FamilyResult() = default;
+
 DWriteFontLookupTableBuilder::DWriteFontLookupTableBuilder()
     : font_indexing_timeout_(kFontIndexingTimeoutDefault) {
   InitializeCacheDirectoryFromProfile();
@@ -330,6 +345,7 @@
     return;
 
   start_time_table_ready_ = base::TimeTicks::Now();
+  scanning_error_reasons_.clear();
 
   scoped_refptr<base::SequencedTaskRunner> results_collection_task_runner =
       base::CreateSequencedTaskRunner(
@@ -436,19 +452,23 @@
   DWriteFontLookupTableBuilder::FamilyResult family_result;
 
   if (base::TimeTicks::Now() - start_time > indexing_timeout) {
+    family_result.exit_hresult = kErrorFontScanningTimedOut;
     return family_result;
   }
 
   Microsoft::WRL::ComPtr<IDWriteFontFamily> family;
   HRESULT hr = collection->GetFontFamily(family_index, &family);
   if (FAILED(hr)) {
+    family_result.exit_hresult = hr;
     return family_result;
   }
   UINT32 font_count = family->GetFontCount();
 
+  HRESULT last_hresult_continue_reason = S_OK;
   for (UINT32 font_index = 0; font_index < font_count; ++font_index) {
     if (base::TimeTicks::Now() - start_time > indexing_timeout) {
-      return DWriteFontLookupTableBuilder::FamilyResult();
+      family_result.exit_hresult = kErrorFontScanningTimedOut;
+      return family_result;
     }
 
     Microsoft::WRL::ComPtr<IDWriteFont> font;
@@ -457,8 +477,10 @@
           FROM_HERE, base::BlockingType::MAY_BLOCK);
       hr = family->GetFont(font_index, &font);
     }
-    if (FAILED(hr))
+    if (FAILED(hr)) {
+      family_result.exit_hresult = hr;
       return family_result;
+    }
 
     if (font->GetSimulations() != DWRITE_FONT_SIMULATIONS_NONE)
       continue;
@@ -476,6 +498,7 @@
         // is in the system font collection, see https://crbug.com/922183. If we
         // were not able to retrieve a file for a registered font, we do not
         // need to add it to the map.
+        last_hresult_continue_reason = hr;
         continue;
       }
     }
@@ -501,26 +524,30 @@
 
     std::vector<std::string> extracted_names;
     auto extract_names =
-        [&extracted_names, &hr,
-         &font](DWRITE_INFORMATIONAL_STRING_ID font_info_string_id) {
-          // Now get names, and make them point to the added font.
-          Microsoft::WRL::ComPtr<IDWriteLocalizedStrings> font_id_keyed_names;
-          BOOL has_id_keyed_names;
-          {
-            base::ScopedBlockingCall scoped_blocking_call(
-                FROM_HERE, base::BlockingType::MAY_BLOCK);
-            hr = font->GetInformationalStrings(
-                font_info_string_id, &font_id_keyed_names, &has_id_keyed_names);
-            if (FAILED(hr) || !has_id_keyed_names)
-              return;
-          }
+        [&extracted_names,
+         &font](DWRITE_INFORMATIONAL_STRING_ID font_info_string_id) -> HRESULT {
+      // Now get names, and make them point to the added font.
+      Microsoft::WRL::ComPtr<IDWriteLocalizedStrings> font_id_keyed_names;
+      BOOL has_id_keyed_names;
+      {
+        base::ScopedBlockingCall scoped_blocking_call(
+            FROM_HERE, base::BlockingType::MAY_BLOCK);
+        HRESULT hr = font->GetInformationalStrings(
+            font_info_string_id, &font_id_keyed_names, &has_id_keyed_names);
+        if (FAILED(hr))
+          return hr;
+        if (!has_id_keyed_names)
+          return kErrorNoFullNameOrPostScriptName;
+      }
 
-          ExtractCaseFoldedLocalizedStrings(font_id_keyed_names.Get(),
-                                            &extracted_names);
-        };
+      return ExtractCaseFoldedLocalizedStrings(font_id_keyed_names.Get(),
+                                               &extracted_names)
+                 ? S_OK
+                 : kErrorExtractingLocalizedStringsFailed;
+    };
 
-    extract_names(DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME);
-    extract_names(DWRITE_INFORMATIONAL_STRING_FULL_NAME);
+    hr = extract_names(DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME);
+    hr = FAILED(hr) ? hr : extract_names(DWRITE_INFORMATIONAL_STRING_FULL_NAME);
 
     if (UNLIKELY(slow_down_mode_for_testing == SlowDownMode::kDelayEachTask)) {
       base::PlatformThread::Sleep(indexing_timeout *
@@ -533,14 +560,21 @@
       hang_event_for_testing->Wait();
     }
 
-    if (!extracted_names.size())
+    if (extracted_names.empty()) {
+      last_hresult_continue_reason = hr;
       continue;
+    }
 
-    family_result.push_back(
+    family_result.exit_hresult = S_OK;
+    family_result.font_files_with_names.push_back(
         DWriteFontLookupTableBuilder::FontFileWithUniqueNames(
             std::move(unique_font), std::move(extracted_names)));
   }
 
+  if (family_result.font_files_with_names.empty()) {
+    family_result.exit_hresult = last_hresult_continue_reason;
+  }
+
   return family_result;
 }
 
@@ -557,12 +591,16 @@
   if (font_table_built_.IsSignaled())
     return;
 
-  if (!family_result.size())
+  if (!family_result.font_files_with_names.size())
     family_results_empty_++;
   else
     family_results_non_empty_++;
 
-  for (const FontFileWithUniqueNames& font_of_family : family_result) {
+  if (FAILED(family_result.exit_hresult))
+    scanning_error_reasons_[family_result.exit_hresult]++;
+
+  for (const FontFileWithUniqueNames& font_of_family :
+       family_result.font_files_with_names) {
     blink::FontUniqueNameTable_UniqueFont* added_unique_font =
         font_unique_name_table_->add_fonts();
 
@@ -612,6 +650,18 @@
   UMA_HISTOGRAM_PERCENTAGE("DirectWrite.Fonts.Proxy.EmptyFamilyResultsRatio",
                            empty_family_results_percentage);
 
+  if (empty_family_results_percentage > 0) {
+    auto most_frequent_hresult_element = std::max_element(
+        std::begin(scanning_error_reasons_), std::end(scanning_error_reasons_),
+        [](const decltype(scanning_error_reasons_)::value_type& a,
+           decltype(scanning_error_reasons_)::value_type& b) {
+          return a.second < b.second;
+        });
+    base::UmaHistogramSparse(
+        "DirectWrite.Fonts.Proxy.MostFrequentScanningFailure",
+        most_frequent_hresult_element->first);
+  }
+
   unsigned num_font_files = font_unique_name_table->fonts_size();
 
   blink::FontTableMatcher::SortUniqueNameTableForSearch(
diff --git a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.h b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.h
index 3597b811..80c75e0 100644
--- a/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.h
+++ b/content/browser/renderer_host/dwrite_font_lookup_table_builder_win.h
@@ -128,7 +128,15 @@
     std::vector<std::string> extracted_names;
   };
 
-  using FamilyResult = std::vector<FontFileWithUniqueNames>;
+  struct FamilyResult {
+    FamilyResult();
+    FamilyResult(FamilyResult&& other);
+    ~FamilyResult();
+    std::vector<FontFileWithUniqueNames> font_files_with_names;
+    HRESULT exit_hresult{S_OK};
+
+    DISALLOW_COPY_AND_ASSIGN(FamilyResult);
+  };
 
   // Try to find a serialized lookup table from the cache directory specified at
   // construction and load it into memory.
@@ -223,6 +231,7 @@
   };
 
   std::vector<CallbackOnTaskRunner> pending_callbacks_;
+  std::map<HRESULT, unsigned> scanning_error_reasons_;
 
   DISALLOW_COPY_AND_ASSIGN(DWriteFontLookupTableBuilder);
 };
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 14709196..6b4f5fd 100644
--- a/content/browser/renderer_host/legacy_render_widget_host_win.cc
+++ b/content/browser/renderer_host/legacy_render_widget_host_win.cc
@@ -14,6 +14,7 @@
 #include "content/browser/accessibility/browser_accessibility_manager_win.h"
 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
 #include "content/browser/accessibility/browser_accessibility_win.h"
+#include "content/browser/accessibility/one_shot_accessibility_tree_search.h"
 #include "content/browser/renderer_host/direct_manipulation_helper_win.h"
 #include "content/browser/renderer_host/render_widget_host_impl.h"
 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
@@ -151,8 +152,7 @@
     // element B, then ask element B for its fragment root, without having sent
     // WM_GETOBJECT to element B's window. So we create the fragment root now to
     // ensure it's ready if asked for.
-    ax_fragment_root_ =
-        std::make_unique<ui::AXFragmentRootWin>(hwnd(), this, true);
+    ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(hwnd(), this);
     hr = S_OK;
   }
 
@@ -550,7 +550,41 @@
   if (!manager || !manager->GetRoot())
     return nullptr;
 
-  return manager->GetRoot()->GetNativeViewAccessible();
+  BrowserAccessibility* root_node = manager->GetRoot();
+
+  // A datetime popup will have a second window with its own kRootWebArea.
+  // However, the BrowserAccessibilityManager is shared with the main window,
+  // and the popup window's kRootWebArea will be inserted as a sibling of the
+  // popup button. When this is called on a popup, we must return the popup
+  // window's kRootWebArea instead of the root document's kRootWebArea. This
+  // will ensure that we're not placing duplicate document roots in the
+  // accessibility tree.
+  if (host_->GetWidgetType() == WidgetType::kPopup) {
+    OneShotAccessibilityTreeSearch tree_search(root_node);
+    tree_search.SetStartNode(root_node);
+    tree_search.SetDirection(OneShotAccessibilityTreeSearch::FORWARDS);
+    tree_search.SetImmediateDescendantsOnly(false);
+    tree_search.SetCanWrapToLastElement(false);
+    tree_search.AddPredicate(AccessibilityPopupButtonPredicate);
+
+    size_t matches = tree_search.CountMatches();
+    for (size_t i = 0; i < matches; ++i) {
+      BrowserAccessibility* match = tree_search.GetMatchAtIndex(i);
+      DCHECK(match);
+
+      // The web root should be the next sibling of the popup node, however it
+      // is not created instantly, so sometimes the popup window exists before
+      // the popup's kRootWebArea has been added to the tree. In this case we
+      // will fall back to the main document's root.
+      BrowserAccessibility* popup_web_root = match->PlatformGetNextSibling();
+      if (popup_web_root &&
+          popup_web_root->GetRole() == ax::mojom::Role::kRootWebArea) {
+        return popup_web_root->GetNativeViewAccessible();
+      }
+    }
+  }
+
+  return root_node->GetNativeViewAccessible();
 }
 
 }  // namespace content
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index e346d20..ab15f69 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -882,6 +882,13 @@
 
 gfx::NativeViewAccessible
 RenderWidgetHostViewAura::GetParentNativeViewAccessible() {
+  // If a popup_parent_host_view_ exists, that means we are in a popup (such as
+  // datetime) and our accessible parent window is popup_parent_host_view_
+  if (popup_parent_host_view_) {
+    DCHECK_EQ(widget_type_, WidgetType::kPopup);
+    return popup_parent_host_view_->GetParentNativeViewAccessible();
+  }
+
   if (window_->parent()) {
     return window_->parent()->GetProperty(
         aura::client::kParentNativeViewAccessibleKey);
@@ -1171,15 +1178,7 @@
 RenderWidgetHostViewAura::AccessibilityGetNativeViewAccessible() {
 #if defined(OS_WIN)
   if (legacy_render_widget_host_HWND_) {
-    if (switches::IsExperimentalAccessibilityPlatformUIAEnabled()) {
-      ui::AXFragmentRootWin* fragment_root =
-          ui::AXFragmentRootWin::GetForAcceleratedWidget(
-              legacy_render_widget_host_HWND_->hwnd());
-      if (fragment_root)
-        return fragment_root->GetNativeViewAccessible();
-    } else {
-      return legacy_render_widget_host_HWND_->window_accessible();
-    }
+    return legacy_render_widget_host_HWND_->window_accessible();
   }
 #endif
 
diff --git a/content/browser/service_manager/service_manager_context.cc b/content/browser/service_manager/service_manager_context.cc
index 78af90c6..8bc25e7 100644
--- a/content/browser/service_manager/service_manager_context.cc
+++ b/content/browser/service_manager/service_manager_context.cc
@@ -57,7 +57,6 @@
 #include "services/audio/public/mojom/constants.mojom.h"
 #include "services/audio/service.h"
 #include "services/audio/service_factory.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
 #include "services/device/device_service.h"
 #include "services/device/public/mojom/constants.mojom.h"
 #include "services/media_session/media_session_service.h"
diff --git a/content/browser/service_manager/service_manager_context_browsertest.cc b/content/browser/service_manager/service_manager_context_browsertest.cc
deleted file mode 100644
index 15dd1ef..0000000
--- a/content/browser/service_manager/service_manager_context_browsertest.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 <string>
-
-#include "base/bind.h"
-#include "base/macros.h"
-#include "base/run_loop.h"
-#include "build/build_config.h"
-#include "content/public/browser/system_connector.h"
-#include "content/public/test/content_browser_test.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/mojom/service_manager.mojom.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace content {
-namespace {
-
-class ServiceInstanceListener
-    : public service_manager::mojom::ServiceManagerListener {
- public:
-  explicit ServiceInstanceListener(
-      service_manager::mojom::ServiceManagerListenerRequest request)
-      : receiver_(this, std::move(request)) {}
-  ~ServiceInstanceListener() override = default;
-
-  void WaitForInit() {
-    base::RunLoop loop;
-    init_wait_loop_ = &loop;
-    loop.Run();
-    init_wait_loop_ = nullptr;
-  }
-
-  uint32_t WaitForServicePID(const std::string& service_name) {
-    base::RunLoop loop;
-    pid_wait_loop_ = &loop;
-    service_expecting_pid_ = service_name;
-    loop.Run();
-    pid_wait_loop_ = nullptr;
-    return pid_received_;
-  }
-
- private:
-  // service_manager::mojom::ServiceManagerListener:
-  void OnInit(std::vector<service_manager::mojom::RunningServiceInfoPtr>
-                  instances) override {
-    if (init_wait_loop_)
-      init_wait_loop_->Quit();
-  }
-
-  void OnServiceCreated(
-      service_manager::mojom::RunningServiceInfoPtr instance) override {}
-  void OnServiceStarted(const service_manager::Identity&,
-                        uint32_t pid) override {}
-  void OnServiceFailedToStart(const service_manager::Identity&) override {}
-  void OnServiceStopped(const service_manager::Identity&) override {}
-
-  void OnServicePIDReceived(const service_manager::Identity& identity,
-                            uint32_t pid) override {
-    if (identity.name() == service_expecting_pid_ && pid_wait_loop_) {
-      pid_received_ = pid;
-      pid_wait_loop_->Quit();
-    }
-  }
-
-  base::RunLoop* init_wait_loop_ = nullptr;
-  base::RunLoop* pid_wait_loop_ = nullptr;
-  std::string service_expecting_pid_;
-  uint32_t pid_received_ = 0;
-  mojo::Receiver<service_manager::mojom::ServiceManagerListener> receiver_;
-
-  DISALLOW_COPY_AND_ASSIGN(ServiceInstanceListener);
-};
-
-}  // namespace
-
-using ServiceManagerContextBrowserTest = ContentBrowserTest;
-
-IN_PROC_BROWSER_TEST_F(ServiceManagerContextBrowserTest,
-                       ServiceProcessReportsPID) {
-  mojo::Remote<service_manager::mojom::ServiceManager> service_manager;
-  GetSystemConnector()->Connect(service_manager::mojom::kServiceName,
-                                service_manager.BindNewPipeAndPassReceiver());
-
-  mojo::PendingRemote<service_manager::mojom::ServiceManagerListener>
-      listener_proxy;
-  ServiceInstanceListener listener(
-      listener_proxy.InitWithNewPipeAndPassReceiver());
-
-  service_manager->AddListener(std::move(listener_proxy));
-  listener.WaitForInit();
-
-  GetSystemConnector()->WarmService(service_manager::ServiceFilter::ByName(
-      data_decoder::mojom::kServiceName));
-
-  // PID should be non-zero, confirming that it was indeed properly reported to
-  // the Service Manager. If not reported at all, this will hang.
-  EXPECT_GT(listener.WaitForServicePID(data_decoder::mojom::kServiceName), 0u);
-}
-
-}  // namespace content
diff --git a/content/browser/web_package/bundled_exchanges_handle.cc b/content/browser/web_package/bundled_exchanges_handle.cc
index 5761205..e1abec5 100644
--- a/content/browser/web_package/bundled_exchanges_handle.cc
+++ b/content/browser/web_package/bundled_exchanges_handle.cc
@@ -19,7 +19,6 @@
 #include "content/browser/web_package/bundled_exchanges_utils.h"
 #include "content/public/browser/browser_task_traits.h"
 #include "content/public/browser/browser_thread.h"
-#include "content/public/browser/data_decoder_service.h"
 #include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/web_contents.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
@@ -194,8 +193,7 @@
         BundledExchangesSource::MaybeCreateFromFileUrl(request.url);
     if (!source)
       return false;
-    reader_ = base::MakeRefCounted<BundledExchangesReader>(std::move(source),
-                                                           LaunchDataDecoder());
+    reader_ = base::MakeRefCounted<BundledExchangesReader>(std::move(source));
     reader_->ReadMetadata(base::BindOnce(&InterceptorForFile::OnMetadataReady,
                                          weak_factory_.GetWeakPtr(), request));
     *client_receiver = forwarding_client_.BindNewPipeAndPassReceiver();
@@ -278,9 +276,7 @@
                               DoneCallback done_callback,
                               int frame_tree_node_id)
       : source_(std::move(source)),
-        reader_(
-            base::MakeRefCounted<BundledExchangesReader>(source_->Clone(),
-                                                         LaunchDataDecoder())),
+        reader_(base::MakeRefCounted<BundledExchangesReader>(source_->Clone())),
         done_callback_(std::move(done_callback)),
         frame_tree_node_id_(frame_tree_node_id) {
     reader_->ReadMetadata(
@@ -556,8 +552,7 @@
       DoneCallback done_callback,
       int frame_tree_node_id)
       : reader_(base::MakeRefCounted<BundledExchangesReader>(
-            navigation_info->source().Clone(),
-            LaunchDataDecoder())),
+            navigation_info->source().Clone())),
         target_inner_url_(navigation_info->target_inner_url()),
         done_callback_(std::move(done_callback)),
         frame_tree_node_id_(frame_tree_node_id) {
diff --git a/content/browser/web_package/bundled_exchanges_reader.cc b/content/browser/web_package/bundled_exchanges_reader.cc
index 8626c5bf..6929dc9 100644
--- a/content/browser/web_package/bundled_exchanges_reader.cc
+++ b/content/browser/web_package/bundled_exchanges_reader.cc
@@ -133,10 +133,8 @@
 };
 
 BundledExchangesReader::BundledExchangesReader(
-    std::unique_ptr<BundledExchangesSource> source,
-    mojo::Remote<data_decoder::mojom::DataDecoderService> service)
+    std::unique_ptr<BundledExchangesSource> source)
     : source_(std::move(source)),
-      parser_(std::move(service)),
       file_(base::MakeRefCounted<SharedFile>(source_->Clone())) {}
 
 BundledExchangesReader::~BundledExchangesReader() {
diff --git a/content/browser/web_package/bundled_exchanges_reader.h b/content/browser/web_package/bundled_exchanges_reader.h
index 3f580f30..85e1f433 100644
--- a/content/browser/web_package/bundled_exchanges_reader.h
+++ b/content/browser/web_package/bundled_exchanges_reader.h
@@ -37,9 +37,8 @@
 class CONTENT_EXPORT BundledExchangesReader final
     : public base::RefCounted<BundledExchangesReader> {
  public:
-  BundledExchangesReader(
-      std::unique_ptr<BundledExchangesSource> source,
-      mojo::Remote<data_decoder::mojom::DataDecoderService> service);
+  explicit BundledExchangesReader(
+      std::unique_ptr<BundledExchangesSource> source);
 
   // Starts parsing, and runs |callback| when meta data gets to be available.
   // |error| is set only on failures.
diff --git a/content/browser/web_package/mock_bundled_exchanges_reader_factory.cc b/content/browser/web_package/mock_bundled_exchanges_reader_factory.cc
index 4a3ab80..a1b0527 100644
--- a/content/browser/web_package/mock_bundled_exchanges_reader_factory.cc
+++ b/content/browser/web_package/mock_bundled_exchanges_reader_factory.cc
@@ -161,8 +161,7 @@
 
     auto reader = base::MakeRefCounted<BundledExchangesReader>(
         BundledExchangesSource::MaybeCreateFromTrustedFileUrl(
-            net::FilePathToFileURL(temp_file_path_)),
-        mojo::Remote<data_decoder::mojom::DataDecoderService>());
+            net::FilePathToFileURL(temp_file_path_)));
 
     std::unique_ptr<MockParserFactory> factory =
         std::make_unique<MockParserFactory>();
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 8b5ac08..195bc29 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -307,8 +307,13 @@
            kEnableOnly},
           {wf::EnableDocumentPolicy, features::kDocumentPolicy,
            kUseFeatureState},
-          {wf::EnableNeverSlowMode, features::kNeverSlowMode,
-           kUseFeatureState},
+          {wf::EnableNeverSlowMode, features::kNeverSlowMode, kUseFeatureState},
+          {wf::EnableShadowDOMV0, blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
+          {wf::EnableCustomElementsV0, blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
+          {wf::EnableHTMLImports, blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
       };
   for (const auto& mapping : blinkFeatureToBaseFeatureMapping) {
     const bool featureEnabled =
@@ -355,6 +360,13 @@
            blink::features::kIgnoreCrossOriginWindowWhenNamedAccessOnWindow,
            kEnableOnly},
           {"StorageAccessAPI", blink::features::kStorageAccessAPI, kEnableOnly},
+          {"ShadowDOMV0", blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
+          {"CustomElementsV0", blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
+          {"HTMLImports", blink::features::kWebComponentsV0Enabled,
+           kEnableOnly},
+
       };
   for (const auto& mapping : runtimeFeatureNameToChromiumFeatureMapping) {
     const bool featureEnabled =
@@ -437,6 +449,9 @@
        switches::kEnableAccessibilityObjectModel, true},
       {wrf::EnableAllowSyncXHRInPageDismissal,
        switches::kAllowSyncXHRInPageDismissal, true},
+      {wrf::EnableShadowDOMV0, switches::kWebComponentsV0Enabled, true},
+      {wrf::EnableCustomElementsV0, switches::kWebComponentsV0Enabled, true},
+      {wrf::EnableHTMLImports, switches::kWebComponentsV0Enabled, true},
   };
   for (const auto& mapping : switchToFeatureMapping) {
     if (command_line.HasSwitch(mapping.switch_name))
diff --git a/content/common/frame.mojom b/content/common/frame.mojom
index 7228b46..a4699d3 100644
--- a/content/common/frame.mojom
+++ b/content/common/frame.mojom
@@ -471,10 +471,6 @@
   // status.
   VisibilityChanged(blink.mojom.FrameVisibility visibility);
 
-  // Notifies the browser that the current frame has changed its lifecycle
-  // state.
-  LifecycleStateChanged(blink.mojom.FrameLifecycleState state);
-
   // Updates information to determine whether a user gesture should carryover to
   // future navigations. This is needed so navigations within a certain
   // timeframe of a request initiated by a gesture will be treated as if they
@@ -523,10 +519,6 @@
   // Sent by the renderer when the frame becomes focused.
   FrameFocused();
 
-  // Evicts the page from the back/forward cache due to e.g., JavaScript
-  // execution.
-  EvictFromBackForwardCache();
-
   // Notifies the browser that the current frame has changed theme color.
   DidChangeThemeColor(skia.mojom.SkColor? theme_color);
 };
diff --git a/content/public/android/BUILD.gn b/content/public/android/BUILD.gn
index 8561c1b..b058995 100644
--- a/content/public/android/BUILD.gn
+++ b/content/public/android/BUILD.gn
@@ -453,11 +453,6 @@
 android_library("content_javatests") {
   testonly = true
 
-  srcjar_deps = [
-    "//content/shell/android:content_javatests_aidl",
-    "//ui/base:ui_base_cursor_type_java_enums_srcjar",
-  ]
-
   deps = [
     ":content_java",
     "//base:base_java",
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
index 08908c4c..c5507bc 100644
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionClient.java
@@ -74,8 +74,10 @@
         assert Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
         mProvider = new SmartSelectionProvider(callback, windowAndroid);
         mCallback = callback;
-        mSmartSelectionMetricLogger =
-                SmartSelectionMetricsLogger.create(windowAndroid.getContext().get());
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+            mSmartSelectionMetricLogger =
+                    SmartSelectionMetricsLogger.create(windowAndroid.getContext().get());
+        }
         mNativeSmartSelectionClient =
                 SmartSelectionClientJni.get().init(SmartSelectionClient.this, webContents);
     }
diff --git a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionMetricsLogger.java b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionMetricsLogger.java
index 30053cc..480b3c1 100644
--- a/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionMetricsLogger.java
+++ b/content/public/android/java/src/org/chromium/content/browser/selection/SmartSelectionMetricsLogger.java
@@ -13,6 +13,7 @@
 import android.view.textclassifier.TextClassifier;
 
 import org.chromium.base.Log;
+import org.chromium.base.annotations.VerifiesOnP;
 import org.chromium.content_public.browser.SelectionClient;
 import org.chromium.content_public.browser.SelectionMetricsLogger;
 
@@ -26,6 +27,7 @@
  * that, we single tap on "City", Smart Selection reset get triggered, we need to log [1, 2). Spaces
  * are ignored but we count each punctuation mark as a word.
  */
+@VerifiesOnP
 @TargetApi(Build.VERSION_CODES.P)
 public class SmartSelectionMetricsLogger implements SelectionMetricsLogger {
     private static final String TAG = "SmartSelectionLogger";
@@ -38,7 +40,7 @@
     private SelectionIndicesConverter mConverter;
 
     public static SmartSelectionMetricsLogger create(Context context) {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P || context == null) {
+        if (context == null) {
             return null;
         }
         return new SmartSelectionMetricsLogger(context);
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
index a24950a..c200a61f 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/ChildProcessLauncherTest.java
@@ -38,7 +38,7 @@
 public class ChildProcessLauncherTest {
     private static final long CONDITION_WAIT_TIMEOUT_MS = 5000;
 
-    private static final String SERVICE_PACKAGE_NAME = "org.chromium.content_shell_apk";
+    private static final String SERVICE_PACKAGE_NAME = "org.chromium.content_shell_apk.tests";
     private static final String SERVICE_NAME =
             "org.chromium.content_shell_apk.TestChildProcessService";
     private static final String SERVICE_COUNT_META_DATA_KEY =
diff --git a/content/public/app/content_browser_manifest.cc b/content/public/app/content_browser_manifest.cc
index cb95117..6797486 100644
--- a/content/public/app/content_browser_manifest.cc
+++ b/content/public/app/content_browser_manifest.cc
@@ -206,7 +206,6 @@
                   "blink.mojom.PrefetchURLLoaderService",
                   "blink.mojom.QuotaDispatcherHost",
                   "blink.mojom.SharedWorkerConnector",
-                  "blink.mojom.UnhandledTapNotifier",
                   "content.mojom.BrowserTarget",
                   "content.mojom.InputInjector",
                   "content.mojom.RendererAudioInputStreamFactory",
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn
index 106d5ab..e69d932c 100644
--- a/content/public/browser/BUILD.gn
+++ b/content/public/browser/BUILD.gn
@@ -129,7 +129,6 @@
     "cors_exempt_headers.h",
     "cors_origin_pattern_setter.cc",
     "cors_origin_pattern_setter.h",
-    "data_decoder_service.h",
     "desktop_capture.cc",
     "desktop_capture.h",
     "desktop_media_id.cc",
diff --git a/content/public/browser/data_decoder_service.h b/content/public/browser/data_decoder_service.h
deleted file mode 100644
index d59d202..0000000
--- a/content/public/browser/data_decoder_service.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef CONTENT_PUBLIC_BROWSER_DATA_DECODER_SERVICE_H_
-#define CONTENT_PUBLIC_BROWSER_DATA_DECODER_SERVICE_H_
-
-#include "content/common/content_export.h"
-
-#include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
-
-namespace content {
-
-// Launches a new isolated instance of the Data Decoder service. This instance
-// will live as long as the returned Remote is kept alive and bound. Instances
-// can be used to batch multiple decoding operations, but callers should be wary
-// of sending data from multiple untrusted sources to the same instance.
-CONTENT_EXPORT mojo::Remote<data_decoder::mojom::DataDecoderService>
-LaunchDataDecoder();
-
-}  // namespace content
-
-#endif  // CONTENT_PUBLIC_BROWSER_DATA_DECODER_SERVICE_H_
diff --git a/content/public/browser/render_frame_host.h b/content/public/browser/render_frame_host.h
index fe79e2db..d506e19 100644
--- a/content/public/browser/render_frame_host.h
+++ b/content/public/browser/render_frame_host.h
@@ -79,12 +79,10 @@
   // Returns nullptr if the IDs do not correspond to a live RenderFrameHost.
   static RenderFrameHost* FromID(int render_process_id, int render_frame_id);
 
-#if defined(OS_ANDROID) || defined(OS_FUCHSIA) || defined(IS_CHROMECAST)
   // Globally allows for injecting JavaScript into the main world. This feature
-  // is present only to support Android WebView, Fuchsia web.Contexts, and
-  // CastOS content shell. It must not be used in other configurations.
+  // is present only to support Android WebView, WebLayer, Fuchsia web.Contexts,
+  // and CastOS content shell. It must not be used in other configurations.
   static void AllowInjectingJavaScript();
-#endif
 
   // Returns a RenderFrameHost given its accessibility tree ID.
   static RenderFrameHost* FromAXTreeID(ui::AXTreeID ax_tree_id);
diff --git a/content/public/common/content_switches.cc b/content/public/common/content_switches.cc
index 8d450a4..7c9ba987 100644
--- a/content/public/common/content_switches.cc
+++ b/content/public/common/content_switches.cc
@@ -915,6 +915,11 @@
 // without restarting the browser and relaunching without this flag.
 const char kWebRtcLocalEventLogging[] = "webrtc-event-logging";
 
+// This switch allows the Web Components v0 APIs to be re-enabled temporarily
+// from M80 through M84.
+// TODO(937746): Remove this after M84.
+const char kWebComponentsV0Enabled[] = "web-components-v0-enabled";
+
 #if defined(OS_ANDROID)
 // Disable Media Session API
 const char kDisableMediaSessionAPI[] = "disable-media-session-api";
diff --git a/content/public/common/content_switches.h b/content/public/common/content_switches.h
index aec2c514..025924f 100644
--- a/content/public/common/content_switches.h
+++ b/content/public/common/content_switches.h
@@ -253,6 +253,7 @@
 extern const char kWebRtcMaxCpuConsumptionPercentage[];
 CONTENT_EXPORT extern const char kWebRtcStunProbeTrialParameter[];
 CONTENT_EXPORT extern const char kWebRtcLocalEventLogging[];
+CONTENT_EXPORT extern const char kWebComponentsV0Enabled[];
 
 #if defined(OS_ANDROID)
 CONTENT_EXPORT extern const char kDisableMediaSessionAPI[];
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 4359cc9a..00def03 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -3912,10 +3912,6 @@
   GetLoaderFactoryBundle()->Update(std::move(child_info));
 }
 
-void RenderFrameImpl::EvictFromBackForwardCache() {
-  GetFrameHost()->EvictFromBackForwardCache();
-}
-
 void RenderFrameImpl::BindToFrame(blink::WebNavigationControl* frame) {
   DCHECK(!frame_);
 
@@ -4439,11 +4435,6 @@
   GetLocalRootRenderWidget()->SetMouseCapture(capture);
 }
 
-void RenderFrameImpl::LifecycleStateChanged(
-    blink::mojom::FrameLifecycleState state) {
-  GetFrameHost()->LifecycleStateChanged(state);
-}
-
 bool RenderFrameImpl::ShouldReportDetailedMessageForSource(
     const blink::WebString& source) {
   return GetContentClient()->renderer()->ShouldReportDetailedMessageForSource(
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 7af3cd30..77744ae5 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -710,7 +710,6 @@
   void UpdateUserActivationState(
       blink::UserActivationUpdateType update_type) override;
   void SetHasReceivedUserGestureBeforeNavigation(bool value) override;
-  void LifecycleStateChanged(blink::mojom::FrameLifecycleState state) override;
   void SetMouseCapture(bool capture) override;
   bool ShouldReportDetailedMessageForSource(
       const blink::WebString& source) override;
@@ -835,7 +834,6 @@
       ui::input_types::ScrollGranularity granularity) override;
   void VisibilityChanged(blink::mojom::FrameVisibility visibility) override;
   blink::BrowserInterfaceBrokerProxy* GetBrowserInterfaceBroker() override;
-  void EvictFromBackForwardCache() override;
 
   // WebFrameSerializerClient implementation:
   void DidSerializeDataForFrame(
diff --git a/content/shell/android/BUILD.gn b/content/shell/android/BUILD.gn
index 0eca478..e7cd216 100644
--- a/content/shell/android/BUILD.gn
+++ b/content/shell/android/BUILD.gn
@@ -10,6 +10,8 @@
 
 content_shell_manifest =
     "$target_gen_dir/content_shell_manifest/AndroidManifest.xml"
+content_shell_test_manifest =
+    "$target_gen_dir/content_shell_test_manifest/AndroidManifest.xml"
 
 generate_jni("content_shell_jni_headers") {
   sources = [
@@ -97,6 +99,15 @@
   testonly = true
   input = "shell_apk/AndroidManifest.xml.jinja2"
   output = content_shell_manifest
+  variables = [ "manifest_package=org.chromium.content_shell_apk" ]
+}
+
+jinja_template("content_shell_test_manifest") {
+  testonly = true
+  input = "javatests/AndroidManifest.xml"
+  includes = [ "shell_apk/AndroidManifest.xml.jinja2" ]
+  output = content_shell_test_manifest
+  variables = [ "manifest_package=org.chromium.content_shell_apk.tests" ]
 }
 
 android_resources("content_shell_apk_resources") {
@@ -105,8 +116,7 @@
   deps = [
     ":content_shell_java_resources",
   ]
-  android_manifest = content_shell_manifest
-  android_manifest_dep = ":content_shell_manifest"
+  custom_package = "org.chromium.content_shell_apk"
 }
 
 android_library("content_shell_apk_java") {
@@ -127,8 +137,6 @@
     "//ui/android:ui_java",
   ]
 
-  android_manifest_for_lint = content_shell_manifest
-
   java_files = [
     "shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestHelperService.java",
     "shell_apk/src/org/chromium/content_shell_apk/ChildProcessLauncherTestUtils.java",
@@ -164,32 +172,64 @@
   }
 }
 
-android_apk("content_shell_apk") {
-  testonly = true
-  deps = [
-    ":content_shell_apk_java",
-    ":content_shell_assets",
-    ":content_shell_java",
-    "//base:base_java",
-    "//base:base_java_test_support",
-    "//components/crash/android:java",
-    "//components/crash/content/app:chrome_crashpad_handler_named_as_so",
-    "//content/public/android:content_java",
-    "//content/public/test/android:android_test_message_pump_support_java",
-    "//media/capture/video/android:capture_java",
-    "//net/android:net_java",
-    "//services/shape_detection:shape_detection_java",
-    "//third_party/mesa_headers",
-    "//ui/android:ui_java",
-  ]
+template("content_shell_apk_tmpl") {
+  _target_type = invoker.target_type
+  target(_target_type, target_name) {
+    forward_variables_from(invoker, "*")
+    testonly = true
+    if (!defined(deps)) {
+      deps = []
+    }
+    deps += [
+      ":content_shell_apk_java",
+      ":content_shell_assets",
+      ":content_shell_java",
+      "//base:base_java",
+      "//base:base_java_test_support",
+      "//components/crash/android:java",
+      "//components/crash/content/app:chrome_crashpad_handler_named_as_so",
+      "//content/public/android:content_java",
+      "//content/public/test/android:android_test_message_pump_support_java",
+      "//media/capture/video/android:capture_java",
+      "//net/android:net_java",
+      "//services/shape_detection:shape_detection_java",
+      "//third_party/mesa_headers",
+      "//ui/android:ui_java",
+    ]
+    loadable_modules = [ "$root_out_dir/libchrome_crashpad_handler.so" ]
+  }
+}
+
+content_shell_apk_tmpl("content_shell_apk") {
+  target_type = "android_apk"
   apk_name = "ContentShell"
   android_manifest = content_shell_manifest
   android_manifest_dep = ":content_shell_manifest"
   shared_libraries = [ ":libcontent_shell_content_view" ]
-  loadable_modules = [ "$root_out_dir/libchrome_crashpad_handler.so" ]
   command_line_flags_file = "content-shell-command-line"
 }
 
+content_shell_apk_tmpl("content_shell_test_apk") {
+  target_type = "instrumentation_test_apk"
+  apk_name = "ContentShellTest"
+  android_manifest = content_shell_test_manifest
+  android_manifest_dep = ":content_shell_test_manifest"
+  shared_libraries = [ ":libcontent_native_test" ]
+  deps = [
+    "//base:base_java_test_support",
+    "//base:base_javatests",
+    "//content/public/android:content_javatests",
+    "//net/android:net_javatests",
+    "//third_party/android_support_test_runner:runner_java",
+  ]
+  data_deps = [
+    "//testing/buildbot/filters:content_shell_test_apk_filters",
+  ]
+  if (enable_chrome_android_internal) {
+    data_deps += [ "//clank/build/bot/filters:content_shell_test_apk_filters" ]
+  }
+}
+
 android_library("content_shell_test_java") {
   testonly = true
   deps = [
@@ -214,32 +254,6 @@
   ]
 }
 
-instrumentation_test_apk("content_shell_test_apk") {
-  deps = [
-    "//base:base_java_test_support",
-    "//base:base_javatests",
-    "//content/public/android:content_javatests",
-    "//net/android:net_javatests",
-    "//third_party/android_support_test_runner:runner_java",
-  ]
-  apk_under_test = ":content_shell_apk"
-  apk_name = "ContentShellTest"
-
-  # Explicitly disabling multidex since there are build errors with this
-  # apk_under_test providing the same classes as the instrumentation_test_apk.
-  enable_multidex = false
-  shared_libraries = [ ":libcontent_native_test" ]
-  android_manifest = "javatests/AndroidManifest.xml"
-
-  data_deps = [
-    "//testing/buildbot/filters:content_shell_test_apk_filters",
-  ]
-
-  if (enable_chrome_android_internal) {
-    data_deps += [ "//clank/build/bot/filters:content_shell_test_apk_filters" ]
-  }
-}
-
 if (current_cpu != "x64") {
   chromium_linker_test_manifest =
       "$target_gen_dir/linker_test_apk/AndroidManifest.xml"
diff --git a/content/shell/android/javatests/AndroidManifest.xml b/content/shell/android/javatests/AndroidManifest.xml
index 8c1326f..e7f8a88 100644
--- a/content/shell/android/javatests/AndroidManifest.xml
+++ b/content/shell/android/javatests/AndroidManifest.xml
@@ -1,22 +1,23 @@
-<?xml version="1.0" encoding="utf-8"?>
-  <!-- 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. -->
-  <!-- package name must be unique so suffix with "tests" so package loader
-       doesn't ignore this. -->
-  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="org.chromium.content_shell_apk.tests">
+{% extends "content/shell/android/shell_apk/AndroidManifest.xml.jinja2" %}
+
+# Copyright 2019 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+{% block application_label %}Content Shell Test{% endblock %}
+
+{% block extra_uses_permissions %}
     <uses-permission android:name="android.permission.RUN_INSTRUMENTATION" />
-    <!-- We add an application tag here just so that we can indicate that this
-         package needs to link against the android.test library, which is
-         needed when building test cases. -->
-    <application>
+{% endblock %}
+
+{% block extra_application_definitions_for_test %}
         <uses-library android:name="android.test.runner" />
         <activity android:name="org.chromium.test.broker.OnDeviceInstrumentationBroker"
             android:exported="true"/>
-    </application>
+{% endblock %}
 
+{% block extra_root_definitions %}
     <instrumentation android:name="org.chromium.base.test.BaseChromiumAndroidJUnitRunner"
-        android:targetPackage="org.chromium.content_shell_apk"
-        android:label="JUnit4-based tests for org.chromium.content_shell_apk" />
-</manifest>
+        android:targetPackage="{{manifest_package}}"
+        android:label="JUnit4-based tests for content shell" />
+{% endblock %}
diff --git a/content/shell/android/shell_apk/AndroidManifest.xml.jinja2 b/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
index 588468a..ad266f5e 100644
--- a/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
+++ b/content/shell/android/shell_apk/AndroidManifest.xml.jinja2
@@ -7,7 +7,7 @@
  -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="org.chromium.content_shell_apk">
+    package="{{ manifest_package }}">
 
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
@@ -19,10 +19,13 @@
     <uses-permission android:name="android.permission.WAKE_LOCK"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
-    <application android:name="ContentShellApplication"
+    {% block extra_uses_permissions %}
+    {% endblock %}
+
+    <application android:name="org.chromium.content_shell_apk.ContentShellApplication"
             android:icon="@mipmap/app_icon"
-            android:label="Content Shell">
-        <activity android:name="ContentShellActivity"
+            android:label="{% block application_label %}Content Shell{% endblock %}">
+        <activity android:name="org.chromium.content_shell_apk.ContentShellActivity"
                   android:launchMode="singleTask"
                   android:theme="@android:style/Theme.Holo.Light.NoActionBar"
                   android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
@@ -81,6 +84,10 @@
                  android:isolatedProcess="true"
                  android:exported="false" />
         {% endfor %}
+        {% block extra_application_definitions_for_test %}
+        {% endblock %}
 
     </application>
+    {% block extra_root_definitions %}
+    {% endblock %}
 </manifest>
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn
index 46493ca..5c0a963 100644
--- a/content/test/BUILD.gn
+++ b/content/test/BUILD.gn
@@ -855,7 +855,6 @@
     "../browser/content_index/content_index_browsertest.cc",
     "../browser/content_service_browsertest.cc",
     "../browser/cross_site_transfer_browsertest.cc",
-    "../browser/data_decoder/data_decoder_service_browsertest.cc",
     "../browser/data_decoder_browsertest.cc",
     "../browser/database_browsertest.cc",
     "../browser/device_sensors/device_sensor_browsertest.cc",
@@ -982,7 +981,6 @@
     "../browser/scheduler/responsiveness/native_event_observer_browsertest_win.cc",
     "../browser/screen_orientation/screen_orientation_browsertest.cc",
     "../browser/security_exploit_browsertest.cc",
-    "../browser/service_manager/service_manager_context_browsertest.cc",
     "../browser/service_process_host_browsertest.cc",
     "../browser/service_worker/service_worker_auth_browsertest.cc",
     "../browser/service_worker/service_worker_browsertest.cc",
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-android.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-android.txt
new file mode 100644
index 0000000..4bb3794
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-android.txt
@@ -0,0 +1 @@
+#<skip - date and time controls drop their children, including the popup button, on Android>
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-auralinux.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-auralinux.txt
new file mode 100644
index 0000000..4ccf024
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-auralinux.txt
@@ -0,0 +1,69 @@
+[document web]
+++[section]
+++++[dateeditor]
+++++++[section]
+++++++++[section]
+++++++++++[spin button] name='Month' current=9.000000 minimum=1.000000 maximum=12.000000
+++++++++++++[text] name='09'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Day' current=1.000000 minimum=1.000000 maximum=31.000000
+++++++++++++[text] name='01'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Year' current=2008.000000 minimum=1.000000 maximum=275760.000000
+++++++++++++[text] name='2008'
+++++++[push button] name='Show date picker'
+++++[dateeditor]
+++++++[section]
+++++++++[section]
+++++++++++[spin button] name='Month' current=9.000000 minimum=1.000000 maximum=12.000000
+++++++++++++[text] name='09'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Day' current=1.000000 minimum=1.000000 maximum=31.000000
+++++++++++++[text] name='01'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Year' current=2008.000000 minimum=1.000000 maximum=275760.000000
+++++++++++++[text] name='2008'
+++++++[push button] name='Show date picker'
+++++[dateeditor] name='Third date picker' controller-for
+++++++[section]
+++++++++[section]
+++++++++++[spin button] name='Month Third date picker' current=9.000000 minimum=1.000000 maximum=12.000000
+++++++++++++[text] name='09'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Day Third date picker' current=1.000000 minimum=1.000000 maximum=31.000000
+++++++++++++[text] name='01'
+++++++++++[text] name='/'
+++++++++++[spin button] name='Year Third date picker' current=2008.000000 minimum=1.000000 maximum=275760.000000
+++++++++++++[text] name='2008'
+++++++[push button] name='Show date picker'
+++++++[document web] controlled-by
+++++++++[section]
+++++++++++[section]
+++++++++++++[section]
+++++++++++++++[push button] name='Show month selection panel'
+++++++++++++++++[text] name='September 2008'
+++++++++++++++++[document frame]
+++++++++++++[push button] name='Show previous month'
+++++++++++++++[document frame]
+++++++++++++[push button] name='Today'
+++++++++++++++[section]
+++++++++++++[push button] name='Show next month'
+++++++++++++++[document frame]
+++++++++++++[table] cols=0 headers=(NONE); rows=0 headers=(NONE); caption=false; spans=(all: 1x1)
+++++++++++++++[section]
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Sun'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Mon'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Tue'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Wed'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Thu'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Fri'
+++++++++++++++++[section]
+++++++++++++++++++[text] name='Sat'
+++++++++++++++[section]
+++++++++++++++++[section]
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-blink.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-blink.txt
new file mode 100644
index 0000000..55abb5f
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-blink.txt
@@ -0,0 +1,86 @@
+rootWebArea
+++genericContainer
+++++date inputType='date' value='2008-09-01'
+++++++genericContainer
+++++++++genericContainer
+++++++++++spinButton name='Month' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++staticText name='09'
+++++++++++++++inlineTextBox name='09'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Day' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++staticText name='01'
+++++++++++++++inlineTextBox name='01'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Year' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++staticText name='2008'
+++++++++++++++inlineTextBox name='2008'
+++++++popUpButton name='Show date picker'
+++++date inputType='date' value='2008-09-01'
+++++++genericContainer
+++++++++genericContainer
+++++++++++spinButton name='Month' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++staticText name='09'
+++++++++++++++inlineTextBox name='09'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Day' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++staticText name='01'
+++++++++++++++inlineTextBox name='01'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Year' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++staticText name='2008'
+++++++++++++++inlineTextBox name='2008'
+++++++popUpButton name='Show date picker'
+++++date inputType='date' name='Third date picker' value='2008-09-01' controlsIds=rootWebArea
+++++++genericContainer
+++++++++genericContainer
+++++++++++spinButton name='Month Third date picker' value='09' valueForRange=9.00 minValueForRange=1.00 maxValueForRange=12.00
+++++++++++++staticText name='09'
+++++++++++++++inlineTextBox name='09'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Day Third date picker' value='01' valueForRange=1.00 minValueForRange=1.00 maxValueForRange=31.00
+++++++++++++staticText name='01'
+++++++++++++++inlineTextBox name='01'
+++++++++++staticText name='/'
+++++++++++++inlineTextBox name='/'
+++++++++++spinButton name='Year Third date picker' value='2008' valueForRange=2008.00 minValueForRange=1.00 maxValueForRange=275760.00
+++++++++++++staticText name='2008'
+++++++++++++++inlineTextBox name='2008'
+++++++popUpButton name='Show date picker'
+++++++rootWebArea
+++++++++genericContainer ignored
+++++++++++genericContainer
+++++++++++++genericContainer
+++++++++++++++genericContainer ignored
+++++++++++++++++genericContainer
+++++++++++++++++++button name='Show month selection panel'
+++++++++++++++++++++staticText name='September 2008'
+++++++++++++++++++++svgRoot
+++++++++++++++++button name='Show previous month'
+++++++++++++++++++svgRoot
+++++++++++++++++button name='Today'
+++++++++++++++++++genericContainer
+++++++++++++++++button name='Show next month'
+++++++++++++++++++svgRoot
+++++++++++++++grid
+++++++++++++++++genericContainer
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Sun'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Mon'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Tue'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Wed'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Thu'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Fri'
+++++++++++++++++++genericContainer
+++++++++++++++++++++staticText name='Sat'
+++++++++++++++++genericContainer
+++++++++++++++++++genericContainer
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-mac.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-mac.txt
new file mode 100644
index 0000000..146e097
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-mac.txt
@@ -0,0 +1,70 @@
+AXWebArea AXRoleDescription='HTML content'
+++AXGroup AXRoleDescription='group'
+++++AXDateField AXRoleDescription='date field' AXValue='2008-09-01'
+++++++AXGroup AXRoleDescription='group'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='9' AXDescription='Month'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='1' AXDescription='Day'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='2008' AXDescription='Year'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='2008'
+++++++AXPopUpButton AXRoleDescription='pop up button' AXDescription='Show date picker'
+++++AXDateField AXRoleDescription='date field' AXValue='2008-09-01'
+++++++AXGroup AXRoleDescription='group'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='9' AXDescription='Month'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='1' AXDescription='Day'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='2008' AXDescription='Year'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='2008'
+++++++AXPopUpButton AXRoleDescription='pop up button' AXDescription='Show date picker'
+++++AXDateField AXRoleDescription='date field' AXValue='2008-09-01' AXDescription='Third date picker'
+++++++AXGroup AXRoleDescription='group'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='9' AXDescription='Month Third date picker'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='09'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='1' AXDescription='Day Third date picker'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='01'
+++++++++++AXStaticText AXRoleDescription='text' AXValue='/'
+++++++++++AXIncrementor AXRoleDescription='stepper' AXValue='2008' AXDescription='Year Third date picker'
+++++++++++++AXStaticText AXRoleDescription='text' AXValue='2008'
+++++++AXPopUpButton AXRoleDescription='pop up button' AXDescription='Show date picker'
+++++++AXWebArea AXRoleDescription='HTML content'
+++++++++AXGroup AXRoleDescription='group'
+++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++AXButton AXRoleDescription='button' AXDescription='Show month selection panel'
+++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='September 2008'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXButton AXRoleDescription='button' AXDescription='Show previous month'
+++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXButton AXRoleDescription='button' AXDescription='Today'
+++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXButton AXRoleDescription='button' AXDescription='Show next month'
+++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++AXTable AXRoleDescription='table' AXDescription='Sun Mon Tue Wed Thu Fri Sat'
+++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Sun'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Mon'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Tue'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Wed'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Thu'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Fri'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++++AXStaticText AXRoleDescription='text' AXValue='Sat'
+++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++++AXGroup AXRoleDescription='group'
+++++++++++++++AXGroup AXRoleDescription='group'
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-uia-win.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-uia-win.txt
new file mode 100644
index 0000000..a785c433
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-uia-win.txt
@@ -0,0 +1,68 @@
+document
+++group
+++++textbox LocalizedControlType='date picker'
+++++++group
+++++++++group
+++++++++++spinbutton Name='Month' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=12.00 RangeValue.Minimum=1.00 RangeValue.Value=9.00 Value.Value='09'
+++++++++++++description Name='09'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Day' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=31.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='01'
+++++++++++++description Name='01'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
+++++++++++++description Name='2008'
+++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
+++++textbox LocalizedControlType='date picker'
+++++++group
+++++++++group
+++++++++++spinbutton Name='Month' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=12.00 RangeValue.Minimum=1.00 RangeValue.Value=9.00 Value.Value='09'
+++++++++++++description Name='09'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Day' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=31.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='01'
+++++++++++++description Name='01'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Year' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
+++++++++++++description Name='2008'
+++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
+++++textbox LocalizedControlType='date picker' Name='Third date picker' ControllerFor='{document}'
+++++++group
+++++++++group
+++++++++++spinbutton Name='Month Third date picker' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=12.00 RangeValue.Minimum=1.00 RangeValue.Value=9.00 Value.Value='09'
+++++++++++++description Name='09'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Day Third date picker' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=31.00 RangeValue.Minimum=1.00 RangeValue.Value=1.00 Value.Value='01'
+++++++++++++description Name='01'
+++++++++++description Name='/'
+++++++++++spinbutton Name='Year Third date picker' RangeValue.IsReadOnly=false RangeValue.LargeChange=0.00 RangeValue.SmallChange=0.00 RangeValue.Maximum=275760.00 RangeValue.Minimum=1.00 RangeValue.Value=2008.00 Value.Value='2008'
+++++++++++++description Name='2008'
+++++++menu Name='Show date picker' ExpandCollapse.ExpandCollapseState='Collapsed'
+++++++document
+++++++++group
+++++++++++group
+++++++++++++group
+++++++++++++++button Name='Show month selection panel'
+++++++++++++++++img
+++++++++++++button Name='Show previous month'
+++++++++++++++img
+++++++++++++button Name='Today'
+++++++++++++++group
+++++++++++++button Name='Show next month'
+++++++++++++++img
+++++++++++++grid Grid.ColumnCount=0 Grid.RowCount=0 Selection.CanSelectMultiple=false Selection.IsSelectionRequired=false Table.RowOrColumnMajor='RowMajor'
+++++++++++++++group
+++++++++++++++++group
+++++++++++++++++++description Name='Sun'
+++++++++++++++++group
+++++++++++++++++++description Name='Mon'
+++++++++++++++++group
+++++++++++++++++++description Name='Tue'
+++++++++++++++++group
+++++++++++++++++++description Name='Wed'
+++++++++++++++++group
+++++++++++++++++++description Name='Thu'
+++++++++++++++++group
+++++++++++++++++++description Name='Fri'
+++++++++++++++++group
+++++++++++++++++++description Name='Sat'
+++++++++++++++group
+++++++++++++++++group
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-win.txt b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-win.txt
new file mode 100644
index 0000000..b975fcf
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple-expected-win.txt
@@ -0,0 +1,69 @@
+ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
+++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1><obj2>'
+++++IA2_ROLE_DATE_EDITOR value='2008-09-01' FOCUSABLE ia2_hypertext='<obj0><obj1>'
+++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>/<obj2>/<obj4>'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Month' value='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='09' ia2_hypertext='09'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Day' value='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='01' ia2_hypertext='01'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Year' value='2008' FOCUSABLE ia2_hypertext='2008'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='2008' ia2_hypertext='2008'
+++++++ROLE_SYSTEM_BUTTONMENU name='Show date picker' FOCUSABLE HASPOPUP ia2_hypertext='Show date picker'
+++++IA2_ROLE_DATE_EDITOR value='2008-09-01' FOCUSABLE ia2_hypertext='<obj0><obj1>'
+++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>/<obj2>/<obj4>'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Month' value='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='09' ia2_hypertext='09'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Day' value='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='01' ia2_hypertext='01'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Year' value='2008' FOCUSABLE ia2_hypertext='2008'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='2008' ia2_hypertext='2008'
+++++++ROLE_SYSTEM_BUTTONMENU name='Show date picker' FOCUSABLE HASPOPUP ia2_hypertext='Show date picker'
+++++IA2_ROLE_DATE_EDITOR name='Third date picker' value='2008-09-01' FOCUSABLE ia2_hypertext='<obj0><obj1><obj2>'
+++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>/<obj2>/<obj4>'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Month Third date picker' value='09' FOCUSABLE ia2_hypertext='09'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='09' ia2_hypertext='09'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Day Third date picker' value='01' FOCUSABLE ia2_hypertext='01'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='01' ia2_hypertext='01'
+++++++++++ROLE_SYSTEM_STATICTEXT name='/' ia2_hypertext='/'
+++++++++++ROLE_SYSTEM_SPINBUTTON name='Year Third date picker' value='2008' FOCUSABLE ia2_hypertext='2008'
+++++++++++++ROLE_SYSTEM_STATICTEXT name='2008' ia2_hypertext='2008'
+++++++ROLE_SYSTEM_BUTTONMENU name='Show date picker' FOCUSABLE HASPOPUP ia2_hypertext='Show date picker'
+++++++ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE ia2_hypertext='<obj0>'
+++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1><obj2><obj3><obj4>'
+++++++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++++++++ROLE_SYSTEM_PUSHBUTTON name='Show month selection panel' FOCUSABLE ia2_hypertext='September 2008<obj1>'
+++++++++++++++++ROLE_SYSTEM_STATICTEXT name='September 2008' ia2_hypertext='September 2008'
+++++++++++++++++ROLE_SYSTEM_GRAPHIC
+++++++++++++ROLE_SYSTEM_PUSHBUTTON name='Show previous month' FOCUSABLE ia2_hypertext='<obj0>'
+++++++++++++++ROLE_SYSTEM_GRAPHIC
+++++++++++++ROLE_SYSTEM_PUSHBUTTON name='Today' FOCUSABLE ia2_hypertext='<obj0>'
+++++++++++++++IA2_ROLE_SECTION
+++++++++++++ROLE_SYSTEM_PUSHBUTTON name='Show next month' FOCUSABLE ia2_hypertext='<obj0>'
+++++++++++++++ROLE_SYSTEM_GRAPHIC
+++++++++++++ROLE_SYSTEM_TABLE FOCUSABLE ia2_hypertext='<obj0><obj1>'
+++++++++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0><obj1><obj2><obj3><obj4><obj5><obj6>'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Sun'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Sun' ia2_hypertext='Sun'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Mon'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Mon' ia2_hypertext='Mon'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Tue'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Tue' ia2_hypertext='Tue'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Wed'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Wed' ia2_hypertext='Wed'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Thu'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Thu' ia2_hypertext='Thu'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Fri'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Fri' ia2_hypertext='Fri'
+++++++++++++++++IA2_ROLE_SECTION ia2_hypertext='Sat'
+++++++++++++++++++ROLE_SYSTEM_STATICTEXT name='Sat' ia2_hypertext='Sat'
+++++++++++++++IA2_ROLE_SECTION ia2_hypertext='<obj0>'
+++++++++++++++++IA2_ROLE_SECTION
diff --git a/content/test/data/accessibility/html/input-date-with-popup-open-multiple.html b/content/test/data/accessibility/html/input-date-with-popup-open-multiple.html
new file mode 100644
index 0000000..d26eab72
--- /dev/null
+++ b/content/test/data/accessibility/html/input-date-with-popup-open-multiple.html
@@ -0,0 +1,18 @@
+<!--
+@BLINK-ALLOW:inputType=*
+@MAC-ALLOW:AXRole*
+@WIN-ALLOW:ia2_hypertext=*
+@UIA-WIN-ALLOW:ControllerFor=*
+@UIA-WIN-ALLOW:LocalizedControlType='date picker'
+@DEFAULT-ACTION-ON:Show date picker,Third date picker
+@WAIT-FOR:Today
+@WIN-ALLOW:localized_extended_role='date picker'
+-->
+<!DOCTYPE html>
+<html>
+<body>
+  <input type="date" value="2008-09-01">
+  <input type="date" value="2008-09-01">
+  <input type="date" value="2008-09-01" aria-label="Third date picker">
+</body>
+</html>
diff --git a/content/test/test_render_frame.cc b/content/test/test_render_frame.cc
index 0e47ec6..19475ef 100644
--- a/content/test/test_render_frame.cc
+++ b/content/test/test_render_frame.cc
@@ -195,9 +195,6 @@
 
   void FrameSizeChanged(const gfx::Size& frame_size) override {}
 
-  void LifecycleStateChanged(blink::mojom::FrameLifecycleState state) override {
-  }
-
   void VisibilityChanged(blink::mojom::FrameVisibility visibility) override {}
 
   void UpdateActiveSchedulerTrackedFeatures(uint64_t features_mask) override {}
@@ -219,8 +216,6 @@
   void UpdateUserGestureCarryoverInfo() override {}
 #endif
 
-  void EvictFromBackForwardCache() override {}
-
   void DidChangeThemeColor(
       const base::Optional<::SkColor>& theme_color) override {}
 
diff --git a/content/utility/utility_service_factory.cc b/content/utility/utility_service_factory.cc
index 2c1c7f9..987be38 100644
--- a/content/utility/utility_service_factory.cc
+++ b/content/utility/utility_service_factory.cc
@@ -24,8 +24,6 @@
 #include "media/media_buildflags.h"
 #include "services/audio/public/mojom/constants.mojom.h"
 #include "services/audio/service_factory.h"
-#include "services/data_decoder/data_decoder_service.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
 #include "services/network/network_service.h"
 #include "services/service_manager/public/mojom/service.mojom.h"
 #include "services/tracing/public/cpp/tracing_features.h"
@@ -122,10 +120,6 @@
   std::unique_ptr<service_manager::Service> service;
   if (service_name == audio::mojom::kServiceName) {
     service = CreateAudioService(std::move(request));
-  } else if (service_name == data_decoder::mojom::kServiceName) {
-    content::UtilityThread::Get()->EnsureBlinkInitialized();
-    service =
-        std::make_unique<data_decoder::DataDecoderService>(std::move(request));
   } else if (service_name == tracing::mojom::kServiceName &&
              !base::FeatureList::IsEnabled(
                  features::kTracingServiceInProcess)) {
diff --git a/extensions/browser/content_verifier.cc b/extensions/browser/content_verifier.cc
index 7ad0affe..f674dac 100644
--- a/extensions/browser/content_verifier.cc
+++ b/extensions/browser/content_verifier.cc
@@ -82,6 +82,11 @@
 std::unique_ptr<ContentVerifierIOData::ExtensionData> CreateIOData(
     const Extension* extension,
     ContentVerifierDelegate* delegate) {
+  ContentVerifierDelegate::VerifierSourceType source_type =
+      delegate->GetVerifierSourceType(*extension);
+  if (source_type == ContentVerifierDelegate::VerifierSourceType::NONE)
+    return nullptr;
+
   // The browser image paths from the extension may not be relative (eg
   // they might have leading '/' or './'), so we strip those to make
   // comparing to actual relative paths work later on.
@@ -115,7 +120,7 @@
 
   return std::make_unique<ContentVerifierIOData::ExtensionData>(
       std::move(image_paths), std::move(background_or_content_paths),
-      extension->version());
+      extension->version(), source_type);
 }
 
 }  // namespace
@@ -180,6 +185,7 @@
   // Must be called on IO thread. The method responds through |callback| on IO
   // thread.
   void GetContentHash(ContentHash::FetchKey fetch_key,
+                      ContentVerifierDelegate::VerifierSourceType source_type,
                       bool force_missing_computed_hashes_creation,
                       ContentHashCallback callback) {
     DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
@@ -204,6 +210,7 @@
         FROM_HERE,
         base::BindOnce(
             &HashHelper::ReadHashOnFileTaskRunner, std::move(fetch_key),
+            source_type,
             base::BindRepeating(&IsCancelledChecker::IsCancelled, checker),
             base::BindOnce(&HashHelper::DidReadHash, weak_factory_.GetWeakPtr(),
                            callback_key, checker)));
@@ -286,12 +293,11 @@
 
   static void ReadHashOnFileTaskRunner(
       ContentHash::FetchKey fetch_key,
+      ContentVerifierDelegate::VerifierSourceType source_type,
       const IsCancelledCallback& is_cancelled,
       ContentHash::CreatedCallback created_callback) {
     ContentHash::Create(
-        std::move(fetch_key),
-        ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES,
-        is_cancelled,
+        std::move(fetch_key), source_type, is_cancelled,
         base::BindOnce(&HashHelper::ForwardToIO, std::move(created_callback)));
   }
 
@@ -483,12 +489,16 @@
     return;
   }
 
+  const ContentVerifierIOData::ExtensionData* data =
+      io_data_.GetData(extension_id);
+  DCHECK(data);
   ContentHash::FetchKey fetch_key =
       GetFetchKey(extension_id, extension_root, extension_version);
   // Since |shutdown_on_io_| = false, GetOrCreateHashHelper() must return
   // non-nullptr instance of HashHelper.
   GetOrCreateHashHelper()->GetContentHash(
-      std::move(fetch_key), force_missing_computed_hashes_creation,
+      std::move(fetch_key), data->source_type,
+      force_missing_computed_hashes_creation,
       base::BindOnce(&ContentVerifier::DidGetContentHash, this, cache_key,
                      std::move(callback)));
 }
@@ -516,13 +526,13 @@
   if (shutdown_on_ui_)
     return;
 
-  if (delegate_->GetVerifierSourceType(*extension) ==
-      ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES) {
-    base::PostTask(
-        FROM_HERE, {content::BrowserThread::IO},
-        base::BindOnce(&ContentVerifier::OnExtensionLoadedOnIO, this,
-                       extension->id(), extension->path(), extension->version(),
-                       CreateIOData(extension, delegate_.get())));
+  std::unique_ptr<ContentVerifierIOData::ExtensionData> io_data =
+      CreateIOData(extension, delegate_.get());
+  if (io_data) {
+    base::PostTask(FROM_HERE, {content::BrowserThread::IO},
+                   base::BindOnce(&ContentVerifier::OnExtensionLoadedOnIO, this,
+                                  extension->id(), extension->path(),
+                                  extension->version(), std::move(io_data)));
   }
 }
 
@@ -612,6 +622,16 @@
     const base::Version& extension_version) {
   DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
 
+  const ContentVerifierIOData::ExtensionData* data =
+      io_data_.GetData(extension_id);
+  DCHECK(data);
+  if (data->source_type ==
+      ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES) {
+    return ContentHash::FetchKey(extension_id, extension_root,
+                                 extension_version, mojo::NullRemote(),
+                                 GURL::EmptyGURL(), ContentVerifierKey());
+  }
+
   // Create a new mojo pipe. It's safe to pass this around and use immediately,
   // even though it needs to finish initialization on the UI thread.
   mojo::PendingRemote<network::mojom::URLLoaderFactory>
diff --git a/extensions/browser/content_verifier/content_hash.cc b/extensions/browser/content_verifier/content_hash.cc
index 475e8a5..8e22aaf 100644
--- a/extensions/browser/content_verifier/content_hash.cc
+++ b/extensions/browser/content_verifier/content_hash.cc
@@ -41,7 +41,7 @@
          base::checked_cast<size_t>(write_result) == content.size();
 }
 
-std::unique_ptr<VerifiedContents> GetVerifiedContents(
+std::unique_ptr<VerifiedContents> ReadVerifiedContents(
     const ContentHash::FetchKey& key,
     bool delete_invalid_file) {
   DCHECK(GetExtensionFileTaskRunner()->RunsTasksInCurrentSequence());
@@ -89,31 +89,22 @@
     ContentVerifierDelegate::VerifierSourceType source_type,
     const IsCancelledCallback& is_cancelled,
     CreatedCallback created_callback) {
-  // TODO(https://crbug.com/958794): Add support for unsigned hashes.
-  DCHECK_EQ(ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES,
-            source_type);
-  // Step 1/2: verified_contents.json:
-  std::unique_ptr<VerifiedContents> verified_contents = GetVerifiedContents(
-      key,
-      // If verified_contents.json exists on disk but is invalid, we want to
-      // delete it so we can fetch and write the file later if required.
-      true /* delete_invalid_file */);
+  if (source_type ==
+      ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES) {
+    // In case of signed hashes, we should read or fetch verified_contents.json
+    // before moving on to work with computed_hashes.json.
+    GetVerifiedContents(
+        std::move(key), source_type, is_cancelled,
+        base::BindOnce(&ContentHash::GetComputedHashes, source_type,
+                       is_cancelled, std::move(created_callback)));
+  } else {
+    DCHECK_EQ(source_type,
+              ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES);
 
-  if (!verified_contents) {
-    // Fetch verified_contents.json and then respond.
-    FetchVerifiedContents(std::move(key), is_cancelled,
-                          std::move(created_callback));
-    return;
+    GetComputedHashes(source_type, is_cancelled, std::move(created_callback),
+                      std::move(key), /*verified_contents=*/nullptr,
+                      /*did_attempt_fetch=*/false);
   }
-
-  // Step 2/2: computed_hashes.json:
-  scoped_refptr<ContentHash> hash =
-      new ContentHash(key.extension_id, key.extension_root,
-                      std::move(verified_contents), nullptr);
-  const bool did_fetch_verified_contents = false;
-  hash->BuildComputedHashes(did_fetch_verified_contents,
-                            false /* force_build */, is_cancelled);
-  std::move(created_callback).Run(hash, is_cancelled && is_cancelled.Run());
 }
 
 void ContentHash::ForceBuildComputedHashes(
@@ -127,7 +118,17 @@
 ContentHash::TreeHashVerificationResult ContentHash::VerifyTreeHashRoot(
     const base::FilePath& relative_path,
     const std::string* root) const {
-  DCHECK(verified_contents_);
+  DCHECK(verified_contents_ ||
+         source_type_ ==
+             ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES);
+
+  // If verified_contents.json is acceptably missing, provided data from
+  // computed_hashes.json is the source of truth for hashes.
+  if (!verified_contents_) {
+    return root ? TreeHashVerificationResult::SUCCESS
+                : TreeHashVerificationResult::NO_ENTRY;
+  }
+
   if (!verified_contents_->HasTreeHashRoot(relative_path))
     return TreeHashVerificationResult::NO_ENTRY;
 
@@ -153,10 +154,12 @@
 ContentHash::ContentHash(
     const ExtensionId& id,
     const base::FilePath& root,
+    ContentVerifierDelegate::VerifierSourceType source_type,
     std::unique_ptr<VerifiedContents> verified_contents,
     std::unique_ptr<ComputedHashes::Reader> computed_hashes)
     : extension_id_(id),
       extension_root_(root),
+      source_type_(source_type),
       verified_contents_(std::move(verified_contents)),
       computed_hashes_(std::move(computed_hashes)) {
   succeeded_ = verified_contents_ != nullptr && computed_hashes_ != nullptr;
@@ -165,28 +168,49 @@
 ContentHash::~ContentHash() = default;
 
 // static
+void ContentHash::GetVerifiedContents(
+    FetchKey key,
+    ContentVerifierDelegate::VerifierSourceType source_type,
+    const IsCancelledCallback& is_cancelled,
+    GetVerifiedContentsCallback verified_contents_callback) {
+  DCHECK(source_type ==
+         ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES);
+  std::unique_ptr<VerifiedContents> verified_contents = ReadVerifiedContents(
+      key,
+      // If verified_contents.json exists on disk but is invalid, we want to
+      // delete it so we can fetch and write the file later if required.
+      /*delete_invalid_file=*/true);
+
+  if (verified_contents) {
+    std::move(verified_contents_callback)
+        .Run(std::move(key), std::move(verified_contents),
+             /*did_attempt_fetch=*/false);
+    return;
+  }
+
+  // Fetch verified_contents.json and then respond.
+  FetchVerifiedContents(std::move(key), is_cancelled,
+                        std::move(verified_contents_callback));
+}
+
+// static
 void ContentHash::FetchVerifiedContents(
     ContentHash::FetchKey key,
     const ContentHash::IsCancelledCallback& is_cancelled,
-    ContentHash::CreatedCallback created_callback) {
+    GetVerifiedContentsCallback callback) {
   // |fetcher| deletes itself when it's done.
   internals::ContentHashFetcher* fetcher =
       new internals::ContentHashFetcher(std::move(key));
   fetcher->Start(base::BindOnce(&ContentHash::DidFetchVerifiedContents,
-                                std::move(created_callback), is_cancelled));
+                                std::move(callback)));
 }
 
 // static
-void ContentHash::DidFetchVerifiedContents(
-    ContentHash::CreatedCallback created_callback,
-    const ContentHash::IsCancelledCallback& is_cancelled,
-    ContentHash::FetchKey key,
-    std::unique_ptr<std::string> fetched_contents) {
-  if (!fetched_contents) {
-    ContentHash::DispatchFetchFailure(
-        std::move(key), std::move(created_callback), is_cancelled);
-    return;
-  }
+std::unique_ptr<VerifiedContents> ContentHash::StoreAndRetrieveVerifiedContents(
+    std::unique_ptr<std::string> fetched_contents,
+    const FetchKey& key) {
+  if (!fetched_contents)
+    return nullptr;
 
   // Write file and continue reading hash.
   // Write:
@@ -196,11 +220,8 @@
   // move to parsing this in a sandboxed helper (https://crbug.com/372878).
   base::Optional<base::Value> parsed =
       base::JSONReader::Read(*fetched_contents);
-  if (!parsed) {
-    ContentHash::DispatchFetchFailure(
-        std::move(key), std::move(created_callback), is_cancelled);
-    return;
-  }
+  if (!parsed)
+    return nullptr;
 
   VLOG(1) << "JSON parsed ok for " << key.extension_id;
   parsed.reset();  // no longer needed
@@ -209,44 +230,77 @@
       file_util::GetVerifiedContentsPath(key.extension_root);
   if (!CreateDirAndWriteFile(destination, *fetched_contents)) {
     LOG(ERROR) << "Error writing computed_hashes.json at " << destination;
-    ContentHash::DispatchFetchFailure(
-        std::move(key), std::move(created_callback), is_cancelled);
-    return;
+    return nullptr;
   }
 
   // Continue reading hash.
-  std::unique_ptr<VerifiedContents> verified_contents = GetVerifiedContents(
+  return ReadVerifiedContents(
       key,
       // We've just fetched verified_contents.json, so treat it as a read-only
       // file from now on and do not delete the file even if it turns out to be
       // invalid.
       false /* delete_invalid_file */);
+}
+
+// static
+void ContentHash::DidFetchVerifiedContents(
+    GetVerifiedContentsCallback verified_contents_callback,
+    FetchKey key,
+    std::unique_ptr<std::string> fetched_contents) {
+  std::unique_ptr<VerifiedContents> verified_contents =
+      StoreAndRetrieveVerifiedContents(std::move(fetched_contents), key);
 
   if (!verified_contents) {
-    ContentHash::DispatchFetchFailure(
-        std::move(key), std::move(created_callback), is_cancelled);
+    std::move(verified_contents_callback)
+        .Run(std::move(key), nullptr, /*did_attempt_fetch=*/true);
     return;
   }
 
   RecordFetchResult(true);
+  std::move(verified_contents_callback)
+      .Run(std::move(key), std::move(verified_contents),
+           /*did_attempt_fetch=*/true);
+}
+
+// static
+void ContentHash::GetComputedHashes(
+    ContentVerifierDelegate::VerifierSourceType source_type,
+    const IsCancelledCallback& is_cancelled,
+    CreatedCallback created_callback,
+    FetchKey key,
+    std::unique_ptr<VerifiedContents> verified_contents,
+    bool did_attempt_fetch) {
+  if (source_type ==
+          ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES &&
+      !verified_contents) {
+    DCHECK(did_attempt_fetch);
+    ContentHash::DispatchFetchFailure(key.extension_id, key.extension_root,
+                                      source_type, std::move(created_callback),
+                                      is_cancelled);
+    return;
+  }
   scoped_refptr<ContentHash> hash =
-      new ContentHash(key.extension_id, key.extension_root,
+      new ContentHash(key.extension_id, key.extension_root, source_type,
                       std::move(verified_contents), nullptr);
-  const bool did_fetch_verified_contents = true;
-  hash->BuildComputedHashes(did_fetch_verified_contents,
-                            false /* force_build */, is_cancelled);
+  hash->BuildComputedHashes(did_attempt_fetch, /*force_build=*/false,
+                            is_cancelled);
   std::move(created_callback).Run(hash, is_cancelled && is_cancelled.Run());
 }
 
 // static
 void ContentHash::DispatchFetchFailure(
-    FetchKey key,
+    const ExtensionId& extension_id,
+    const base::FilePath& extension_root,
+    ContentVerifierDelegate::VerifierSourceType source_type,
     CreatedCallback created_callback,
     const IsCancelledCallback& is_cancelled) {
+  DCHECK_EQ(ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES,
+            source_type)
+      << "Only signed hashes should attempt fetching verified_contents.json";
   RecordFetchResult(false);
   // NOTE: bare new because ContentHash constructor is private.
-  scoped_refptr<ContentHash> content_hash =
-      new ContentHash(key.extension_id, key.extension_root, nullptr, nullptr);
+  scoped_refptr<ContentHash> content_hash = new ContentHash(
+      extension_id, extension_root, source_type, nullptr, nullptr);
   std::move(created_callback)
       .Run(content_hash, is_cancelled && is_cancelled.Run());
 }
@@ -256,6 +310,46 @@
   UMA_HISTOGRAM_BOOLEAN("Extensions.ContentVerification.FetchResult", success);
 }
 
+base::Optional<std::vector<std::string>>
+ContentHash::ComputeAndCheckResourceHash(
+    const base::FilePath& full_path,
+    const base::FilePath& relative_unix_path) {
+  DCHECK(source_type_ !=
+             ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES ||
+         verified_contents_);
+
+  if (source_type_ ==
+          ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES &&
+      !verified_contents_->HasTreeHashRoot(relative_unix_path)) {
+    return base::nullopt;
+  }
+
+  std::string contents;
+  if (!base::ReadFileToString(full_path, &contents)) {
+    LOG(ERROR) << "Could not read " << full_path.MaybeAsASCII();
+    return base::nullopt;
+  }
+
+  // Iterate through taking the hash of each block of size (block_size_) of
+  // the file.
+  std::vector<std::string> hashes =
+      ComputedHashes::GetHashesForContent(contents, block_size_);
+  if (source_type_ !=
+      ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES) {
+    return base::make_optional(std::move(hashes));
+  }
+
+  std::string root =
+      ComputeTreeHashRoot(hashes, block_size_ / crypto::kSHA256Length);
+  if (!verified_contents_->TreeHashRootEquals(relative_unix_path, root)) {
+    VLOG(1) << "content mismatch for " << relative_unix_path.AsUTF8Unsafe();
+    hash_mismatch_unix_paths_.insert(relative_unix_path);
+    return base::nullopt;
+  }
+
+  return base::make_optional(std::move(hashes));
+}
+
 bool ContentHash::CreateHashes(const base::FilePath& hashes_file,
                                const IsCancelledCallback& is_cancelled) {
   base::ElapsedTimer timer;
@@ -290,28 +384,10 @@
     extension_root_.AppendRelativePath(full_path, &relative_unix_path);
     relative_unix_path = relative_unix_path.NormalizePathSeparatorsTo('/');
 
-    if (!verified_contents_->HasTreeHashRoot(relative_unix_path))
-      continue;
-
-    std::string contents;
-    if (!base::ReadFileToString(full_path, &contents)) {
-      LOG(ERROR) << "Could not read " << full_path.MaybeAsASCII();
-      continue;
-    }
-
-    // Iterate through taking the hash of each block of size (block_size_) of
-    // the file.
-    std::vector<std::string> hashes =
-        ComputedHashes::GetHashesForContent(contents, block_size_);
-    std::string root =
-        ComputeTreeHashRoot(hashes, block_size_ / crypto::kSHA256Length);
-    if (!verified_contents_->TreeHashRootEquals(relative_unix_path, root)) {
-      VLOG(1) << "content mismatch for " << relative_unix_path.AsUTF8Unsafe();
-      hash_mismatch_unix_paths_.insert(relative_unix_path);
-      continue;
-    }
-
-    writer.AddHashes(relative_unix_path, block_size_, hashes);
+    base::Optional<std::vector<std::string>> hashes =
+        ComputeAndCheckResourceHash(full_path, relative_unix_path);
+    if (hashes)
+      writer.AddHashes(relative_unix_path, block_size_, *hashes);
   }
   bool result = writer.WriteToFile(hashes_file);
   UMA_HISTOGRAM_TIMES("ExtensionContentHashFetcher.CreateHashesTime",
@@ -342,7 +418,13 @@
   // ContentVerifyJob's request to computed_hashes.json fails.
   // TODO(lazyboy): Fix this and use |will_create| condition from the comment
   // above, see https://crbug.com/819832 for details.
-  bool will_create = force_build || !base::PathExists(computed_hashes_path);
+  bool will_create =
+      (force_build || !base::PathExists(computed_hashes_path)) &&
+      // Note that we are not allowed to create computed_hashes.json file
+      // without hashes signature (verified_contents.json) because files could
+      // already be corrupted.
+      source_type_ ==
+          ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES;
   if (!will_create) {
     // Note: Tolerate for existing implementation.
     // Try to read and initialize the file first. On failure, continue creating.
diff --git a/extensions/browser/content_verifier/content_hash.h b/extensions/browser/content_verifier/content_hash.h
index a0831ff5f..ab46de0 100644
--- a/extensions/browser/content_verifier/content_hash.h
+++ b/extensions/browser/content_verifier/content_hash.h
@@ -150,24 +150,50 @@
  private:
   friend class base::RefCountedThreadSafe<ContentHash>;
 
+  using GetVerifiedContentsCallback = base::OnceCallback<void(
+      FetchKey key,
+      std::unique_ptr<VerifiedContents> verified_contents,
+      bool did_attempt_fetch)>;
+
   ContentHash(const ExtensionId& id,
               const base::FilePath& root,
+              ContentVerifierDelegate::VerifierSourceType source_type,
               std::unique_ptr<VerifiedContents> verified_contents,
               std::unique_ptr<ComputedHashes::Reader> computed_hashes);
   ~ContentHash();
 
+  // Step 1/2: verified_contents.json.
+  static void GetVerifiedContents(
+      FetchKey key,
+      ContentVerifierDelegate::VerifierSourceType source_type,
+      const IsCancelledCallback& is_cancelled,
+      GetVerifiedContentsCallback);
   static void FetchVerifiedContents(FetchKey key,
                                     const IsCancelledCallback& is_cancelled,
-                                    CreatedCallback created_callback);
+                                    GetVerifiedContentsCallback callback);
+  static std::unique_ptr<VerifiedContents> StoreAndRetrieveVerifiedContents(
+      std::unique_ptr<std::string> fetched_contents,
+      const FetchKey& key);
   static void DidFetchVerifiedContents(
-      CreatedCallback created_callback,
-      const IsCancelledCallback& is_cancelled,
+      GetVerifiedContentsCallback callback,
       FetchKey key,
       std::unique_ptr<std::string> fetched_contents);
 
-  static void DispatchFetchFailure(FetchKey key,
-                                   CreatedCallback created_callback,
-                                   const IsCancelledCallback& is_cancelled);
+  // Step 2/2: computed_hashes.json.
+  static void GetComputedHashes(
+      ContentVerifierDelegate::VerifierSourceType source_type,
+      const IsCancelledCallback& is_cancelled,
+      CreatedCallback created_callback,
+      FetchKey key,
+      std::unique_ptr<VerifiedContents> verified_contents,
+      bool did_attempt_fetch);
+
+  static void DispatchFetchFailure(
+      const ExtensionId& extension_id,
+      const base::FilePath& extension_root,
+      ContentVerifierDelegate::VerifierSourceType source_type,
+      CreatedCallback created_callback,
+      const IsCancelledCallback& is_cancelled);
 
   static void RecordFetchResult(bool success);
 
@@ -183,14 +209,24 @@
   bool CreateHashes(const base::FilePath& hashes_file,
                     const IsCancelledCallback& is_cancelled);
 
+  // Builds hashes for one resource and checks them against
+  // verified_contents.json if needed. Returns nullopt if nothing should be
+  // added to computed_hashes.json for this resource.
+  base::Optional<std::vector<std::string>> ComputeAndCheckResourceHash(
+      const base::FilePath& full_path,
+      const base::FilePath& relative_unix_path);
+
   // Builds computed_hashes. Possibly after creating computed_hashes.json file
   // if necessary.
-  void BuildComputedHashes(bool attempted_fetching_verified_contents,
+  void BuildComputedHashes(bool did_fetch_verified_contents,
                            bool force_build,
                            const IsCancelledCallback& is_cancelled);
 
+  bool has_verified_contents() const { return verified_contents_ != nullptr; }
+
   const ExtensionId extension_id_;
   const base::FilePath extension_root_;
+  ContentVerifierDelegate::VerifierSourceType source_type_;
 
   bool succeeded_ = false;
 
diff --git a/extensions/browser/content_verifier/content_hash_unittest.cc b/extensions/browser/content_verifier/content_hash_unittest.cc
index 6a61f834..64aa8d0 100644
--- a/extensions/browser/content_verifier/content_hash_unittest.cc
+++ b/extensions/browser/content_verifier/content_hash_unittest.cc
@@ -231,4 +231,41 @@
   EXPECT_TRUE(result->success);
 }
 
+TEST_F(ContentHashUnittest, ExtensionWithUnsignedHashes) {
+  TestExtensionBuilder builder;
+  builder.WriteManifest();
+  builder.WriteResource(FILE_PATH_LITERAL("background.js"),
+                        "console.log('Nothing special');");
+  builder.WriteComputedHashes();
+
+  scoped_refptr<Extension> extension = LoadExtension(builder);
+  ASSERT_NE(nullptr, extension);
+
+  std::unique_ptr<ContentHashResult> result = CreateContentHash(
+      extension.get(),
+      ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES,
+      builder.GetTestContentVerifierPublicKey());
+  DCHECK(result);
+
+  EXPECT_TRUE(result->success);
+}
+
+TEST_F(ContentHashUnittest, ExtensionWithoutHashes) {
+  TestExtensionBuilder builder;
+  builder.WriteManifest();
+  builder.WriteResource(FILE_PATH_LITERAL("background.js"),
+                        "console.log('Nothing special');");
+
+  scoped_refptr<Extension> extension = LoadExtension(builder);
+  ASSERT_NE(nullptr, extension);
+
+  std::unique_ptr<ContentHashResult> result = CreateContentHash(
+      extension.get(),
+      ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES,
+      builder.GetTestContentVerifierPublicKey());
+  DCHECK(result);
+
+  EXPECT_FALSE(result->success);
+}
+
 }  // namespace extensions
diff --git a/extensions/browser/content_verifier/test_utils.cc b/extensions/browser/content_verifier/test_utils.cc
index da2c492..fc0ed81 100644
--- a/extensions/browser/content_verifier/test_utils.cc
+++ b/extensions/browser/content_verifier/test_utils.cc
@@ -136,10 +136,11 @@
 
 ContentVerifierDelegate::VerifierSourceType
 MockContentVerifierDelegate::GetVerifierSourceType(const Extension& extension) {
-  return VerifierSourceType::SIGNED_HASHES;
+  return verifier_source_type_;
 }
 
 ContentVerifierKey MockContentVerifierDelegate::GetPublicKey() {
+  DCHECK_EQ(VerifierSourceType::SIGNED_HASHES, verifier_source_type_);
   return ContentVerifierKey(kWebstoreSignaturesPublicKey,
                             kWebstoreSignaturesPublicKeySize);
 }
@@ -147,6 +148,7 @@
 GURL MockContentVerifierDelegate::GetSignatureFetchUrl(
     const ExtensionId& extension_id,
     const base::Version& version) {
+  DCHECK_EQ(VerifierSourceType::SIGNED_HASHES, verifier_source_type_);
   std::string url =
       base::StringPrintf("http://localhost/getsignature?id=%s&version=%s",
                          extension_id.c_str(), version.GetString().c_str());
@@ -155,7 +157,6 @@
 
 std::set<base::FilePath> MockContentVerifierDelegate::GetBrowserImagePaths(
     const extensions::Extension* extension) {
-  ADD_FAILURE() << "Unexpected call for this test";
   return std::set<base::FilePath>();
 }
 
@@ -167,6 +168,11 @@
 
 void MockContentVerifierDelegate::Shutdown() {}
 
+void MockContentVerifierDelegate::SetVerifierSourceType(
+    VerifierSourceType type) {
+  verifier_source_type_ = type;
+}
+
 // VerifierObserver -----------------------------------------------------------
 VerifierObserver::VerifierObserver() {
   EXPECT_TRUE(
diff --git a/extensions/browser/content_verifier/test_utils.h b/extensions/browser/content_verifier/test_utils.h
index 1b2bda0..e300fa2 100644
--- a/extensions/browser/content_verifier/test_utils.h
+++ b/extensions/browser/content_verifier/test_utils.h
@@ -123,7 +123,12 @@
                     ContentVerifyJob::FailureReason reason) override;
   void Shutdown() override;
 
+  // Modifier.
+  void SetVerifierSourceType(VerifierSourceType type);
+
  private:
+  VerifierSourceType verifier_source_type_ = VerifierSourceType::SIGNED_HASHES;
+
   DISALLOW_COPY_AND_ASSIGN(MockContentVerifierDelegate);
 };
 
diff --git a/extensions/browser/content_verifier_io_data.cc b/extensions/browser/content_verifier_io_data.cc
index f616fd3..9b84c21 100644
--- a/extensions/browser/content_verifier_io_data.cc
+++ b/extensions/browser/content_verifier_io_data.cc
@@ -13,10 +13,12 @@
 ContentVerifierIOData::ExtensionData::ExtensionData(
     std::unique_ptr<std::set<base::FilePath>> browser_image_paths,
     std::unique_ptr<std::set<base::FilePath>> background_or_content_paths,
-    const base::Version& version)
+    const base::Version& version,
+    ContentVerifierDelegate::VerifierSourceType source_type)
     : browser_image_paths(std::move(browser_image_paths)),
       background_or_content_paths(std::move(background_or_content_paths)),
-      version(version) {}
+      version(version),
+      source_type(source_type) {}
 
 ContentVerifierIOData::ContentVerifierIOData() {
 }
diff --git a/extensions/browser/content_verifier_io_data.h b/extensions/browser/content_verifier_io_data.h
index 4937394c..2a49c04 100644
--- a/extensions/browser/content_verifier_io_data.h
+++ b/extensions/browser/content_verifier_io_data.h
@@ -13,6 +13,7 @@
 #include "base/files/file_path.h"
 #include "base/memory/ref_counted.h"
 #include "base/version.h"
+#include "extensions/browser/content_verifier_delegate.h"
 
 namespace extensions {
 
@@ -26,11 +27,13 @@
     // Set of file paths used as background scripts, pages or content scripts.
     std::unique_ptr<std::set<base::FilePath>> background_or_content_paths;
     base::Version version;
+    ContentVerifierDelegate::VerifierSourceType source_type;
 
     ExtensionData(
         std::unique_ptr<std::set<base::FilePath>> browser_image_paths,
         std::unique_ptr<std::set<base::FilePath>> background_or_content_paths,
-        const base::Version& version);
+        const base::Version& version,
+        ContentVerifierDelegate::VerifierSourceType source_type);
     ~ExtensionData();
   };
 
diff --git a/extensions/browser/content_verify_job_unittest.cc b/extensions/browser/content_verify_job_unittest.cc
index feb8fd25..1f1a0b2 100644
--- a/extensions/browser/content_verify_job_unittest.cc
+++ b/extensions/browser/content_verify_job_unittest.cc
@@ -23,6 +23,7 @@
 #include "extensions/common/constants.h"
 #include "extensions/common/extension_paths.h"
 #include "extensions/common/file_util.h"
+#include "extensions/common/value_builder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/zlib/google/zip.h"
 
@@ -52,6 +53,36 @@
   return verified_contents;
 }
 
+void WriteManifest(const base::FilePath& extension_root) {
+  std::string json = DictionaryBuilder()
+                         .Set("manifest_version", 2)
+                         .Set("name", "Test extension")
+                         .Set("version", "1.0")
+                         .ToJSON();
+
+  base::FilePath manifest_path =
+      extension_root.Append(base::FilePath(FILE_PATH_LITERAL("manifest.json")));
+  ASSERT_EQ(static_cast<int>(json.size()),
+            base::WriteFile(manifest_path, json.data(), json.size()));
+}
+
+void WriteComputedHashes(
+    const base::FilePath& extension_root,
+    const std::map<base::FilePath, std::string>& contents) {
+  int block_size = extension_misc::kContentVerificationDefaultBlockSize;
+  ComputedHashes::Writer computed_hashes_writer;
+
+  for (const auto& resource : contents) {
+    std::vector<std::string> hashes =
+        ComputedHashes::GetHashesForContent(resource.second, block_size);
+    computed_hashes_writer.AddHashes(resource.first, block_size, hashes);
+  }
+
+  base::CreateDirectory(extension_root.Append(kMetadataFolder));
+  ASSERT_TRUE(computed_hashes_writer.WriteToFile(
+      file_util::GetComputedHashesPath(extension_root)));
+}
+
 }  // namespace
 
 class ContentVerifyJobUnittest : public ExtensionsTest {
@@ -71,14 +102,17 @@
   void SetUp() override {
     ExtensionsTest::SetUp();
 
-    extension_info_map_ = new InfoMap();
-    content_verifier_ = new ContentVerifier(
-        &testing_context_, std::make_unique<MockContentVerifierDelegate>());
+    extension_info_map_ = base::MakeRefCounted<InfoMap>();
+    auto delegate = std::make_unique<MockContentVerifierDelegate>();
+    content_verifier_delegate_ = delegate.get();
+    content_verifier_ = base::MakeRefCounted<ContentVerifier>(
+        &testing_context_, std::move(delegate));
     extension_info_map_->SetContentVerifier(content_verifier_.get());
   }
 
   void TearDown() override {
     content_verifier_->Shutdown();
+    content_verifier_delegate_ = nullptr;
 
     ExtensionsTest::TearDown();
   }
@@ -134,7 +168,7 @@
   }
 
   // Returns an extension after extracting and loading it from a .zip file.
-  // The extension is expected to have verified_contents.json in it.
+  // The extension may be expected to have verified_contents.json in it.
   scoped_refptr<Extension> LoadTestExtensionFromZipPathToTempDir(
       base::ScopedTempDir* temp_dir,
       const std::string& zip_directory_name,
@@ -148,16 +182,53 @@
     scoped_refptr<Extension> extension =
         content_verifier_test_utils::UnzipToDirAndLoadExtension(
             test_dir_base.AppendASCII(zip_filename), unzipped_path);
-    // Make sure there is a verified_contents.json file there as this test
-    // cannot fetch it.
-    if (extension && !base::PathExists(file_util::GetVerifiedContentsPath(
-                         extension->path()))) {
+    // If needed, make sure there is a verified_contents.json file there as this
+    // test cannot fetch it.
+    if (extension &&
+        content_verifier_delegate()->GetVerifierSourceType(*extension) ==
+            ContentVerifierDelegate::VerifierSourceType::SIGNED_HASHES &&
+        !base::PathExists(
+            file_util::GetVerifiedContentsPath(extension->path()))) {
       ADD_FAILURE() << "verified_contents.json not found.";
       return nullptr;
     }
+    content_verifier_->OnExtensionLoaded(&testing_context_, extension.get());
     return extension;
   }
 
+  // Returns an extension after creating it from scratch with help of
+  // |create_callback|. This callback is expected to create all required
+  // extension resources in |extension_path|, including manifest.json.
+  scoped_refptr<Extension> CreateAndLoadTestExtensionToTempDir(
+      base::ScopedTempDir* temp_dir,
+      base::Optional<std::map<base::FilePath, std::string>>
+          resources_for_hashes) {
+    if (!temp_dir->CreateUniqueTempDir()) {
+      ADD_FAILURE() << "Failed to create temp dir.";
+      return nullptr;
+    }
+    base::FilePath extension_root = temp_dir->GetPath();
+
+    WriteManifest(extension_root);
+
+    if (resources_for_hashes)
+      WriteComputedHashes(extension_root, resources_for_hashes.value());
+
+    std::string error;
+    scoped_refptr<Extension> extension = file_util::LoadExtension(
+        extension_root, Manifest::INTERNAL, /*flags=*/0, &error);
+    EXPECT_NE(nullptr, extension.get()) << " error:'" << error << "'";
+
+    content_verifier_->OnExtensionLoaded(&testing_context_, extension.get());
+    return extension;
+  }
+
+  MockContentVerifierDelegate* content_verifier_delegate() {
+    DCHECK(content_verifier_);
+    DCHECK(content_verifier_delegate_);
+    return content_verifier_delegate_;
+  }
+
  private:
   void StartJob(scoped_refptr<ContentVerifyJob> job) {
     base::PostTask(FROM_HERE, {content::BrowserThread::IO},
@@ -167,6 +238,8 @@
 
   scoped_refptr<InfoMap> extension_info_map_;
   scoped_refptr<ContentVerifier> content_verifier_;
+  MockContentVerifierDelegate* content_verifier_delegate_ =
+      nullptr;  // Owned by |content_verifier_|.
   content::TestBrowserContext testing_context_;
 
   DISALLOW_COPY_AND_ASSIGN(ContentVerifyJobUnittest);
@@ -188,8 +261,8 @@
   {
     // Make sure background.js passes verification correctly.
     std::string contents;
-    base::ReadFileToString(
-        unzipped_path.Append(base::FilePath(kExistentResource)), &contents);
+    base::ReadFileToString(unzipped_path.Append(existent_resource_path),
+                           &contents);
     EXPECT_EQ(ContentVerifyJob::NONE,
               RunContentVerifyJob(*extension.get(), existent_resource_path,
                                   contents));
@@ -198,8 +271,8 @@
   {
     // Once background.js is deleted, verification will result in HASH_MISMATCH.
     // Delete the existent file first.
-    EXPECT_TRUE(base::DeleteFile(
-        unzipped_path.Append(base::FilePath(kExistentResource)), false));
+    EXPECT_TRUE(
+        base::DeleteFile(unzipped_path.Append(existent_resource_path), false));
 
     // Deleted file will serve empty contents.
     std::string empty_contents;
@@ -230,8 +303,7 @@
         FILE_PATH_LITERAL("foo.js");
     base::FilePath unexpected_resource_path(kUnexpectedResource);
 
-    base::FilePath full_path =
-        unzipped_path.Append(base::FilePath(unexpected_resource_path));
+    base::FilePath full_path = unzipped_path.Append(unexpected_resource_path);
     const std::string kContent("42");
     EXPECT_EQ(static_cast<int>(kContent.size()),
               base::WriteFile(full_path, kContent.data(), kContent.size()));
@@ -396,8 +468,7 @@
   {
     // Make sure 0 byte background.js passes content verification.
     std::string contents;
-    base::ReadFileToString(unzipped_path.Append(base::FilePath(kResource)),
-                           &contents);
+    base::ReadFileToString(unzipped_path.Append(resource_path), &contents);
     EXPECT_EQ(ContentVerifyJob::NONE,
               RunContentVerifyJob(*extension.get(), resource_path, contents));
   }
@@ -440,6 +511,141 @@
   }
 }
 
+// Tests that if both file contents and hash are modified, corruption will still
+// be detected.
+TEST_F(ContentVerifyJobUnittest, ModifiedComputedHashes) {
+  base::ScopedTempDir temp_dir;
+  scoped_refptr<Extension> extension = LoadTestExtensionFromZipPathToTempDir(
+      &temp_dir, "with_verified_contents_corrupted", "source_all.zip");
+  ASSERT_TRUE(extension.get());
+  base::FilePath unzipped_path = temp_dir.GetPath();
+
+  const base::FilePath::CharType kExistentResource[] =
+      FILE_PATH_LITERAL("background.js");
+  base::FilePath existent_resource_path(kExistentResource);
+  {
+    // Make sure background.js passes verification correctly.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(existent_resource_path),
+                           &contents);
+    EXPECT_EQ(ContentVerifyJob::NO_HASHES_FOR_FILE,
+              RunContentVerifyJob(*extension.get(), existent_resource_path,
+                                  contents));
+  }
+}
+
+using ContentVerifyJobWithoutSignedHashesUnittest = ContentVerifyJobUnittest;
+// Mark tests with extensions which intentionally don't contain
+// verified_contents.json. Typically these are self-hosted extension, since
+// there is no possibility for them to use private Chrome Web Store key to sign
+// hashes.
+
+// Tests that extension without verified_contents.json is checked properly.
+TEST_F(ContentVerifyJobWithoutSignedHashesUnittest, UnverifiedExtension) {
+  base::ScopedTempDir temp_dir;
+  content_verifier_delegate()->SetVerifierSourceType(
+      ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES);
+
+  const base::FilePath kResourceOkPath(FILE_PATH_LITERAL("script-ok.js"));
+  const base::FilePath kResourceCorruptedPath(
+      FILE_PATH_LITERAL("script-corrupted.js"));
+  const base::FilePath kResourceMissingPath(
+      FILE_PATH_LITERAL("script-missing.js"));
+  const base::FilePath kResourceUnexpectedPath(
+      FILE_PATH_LITERAL("script-unexpected.js"));
+
+  const std::string kOkContents = "console.log('Nothing special');";
+  const std::string kCorruptedContents = "alert('Evil corrupted script');";
+
+  std::map<base::FilePath, std::string> resource_map = {
+      {kResourceOkPath, kOkContents}, {kResourceCorruptedPath, kOkContents}};
+  scoped_refptr<Extension> extension =
+      CreateAndLoadTestExtensionToTempDir(&temp_dir, std::move(resource_map));
+  ASSERT_TRUE(extension);
+  base::FilePath unzipped_path = temp_dir.GetPath();
+
+  ASSERT_EQ(static_cast<int>(kOkContents.size()),
+            base::WriteFile(unzipped_path.Append(kResourceOkPath),
+                            kOkContents.data(), kOkContents.size()));
+  ASSERT_EQ(
+      static_cast<int>(kCorruptedContents.size()),
+      base::WriteFile(unzipped_path.Append(kResourceCorruptedPath),
+                      kCorruptedContents.data(), kCorruptedContents.size()));
+  ASSERT_EQ(static_cast<int>(kOkContents.size()),
+            base::WriteFile(unzipped_path.Append(kResourceUnexpectedPath),
+                            kOkContents.data(), kOkContents.size()));
+
+  {
+    // Sanity check that an unmodified file passes content verification.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(kResourceOkPath), &contents);
+    EXPECT_EQ(ContentVerifyJob::NONE,
+              RunContentVerifyJob(*extension.get(), kResourceOkPath, contents));
+  }
+  {
+    // Make sure a file with incorrect content (eg. corrupted one) fails content
+    // verification.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(kResourceCorruptedPath),
+                           &contents);
+    EXPECT_EQ(ContentVerifyJob::HASH_MISMATCH,
+              RunContentVerifyJob(*extension.get(), kResourceCorruptedPath,
+                                  contents));
+  }
+  {
+    // Make sure non-existing file doesn't fail content verification.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(kResourceMissingPath),
+                           &contents);
+    EXPECT_EQ(
+        ContentVerifyJob::NONE,
+        RunContentVerifyJob(*extension.get(), kResourceMissingPath, contents));
+  }
+  {
+    // Make sure existing file fail content verification if there is no entry
+    // for it in computed_hashes.json.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(kResourceUnexpectedPath),
+                           &contents);
+    EXPECT_EQ(ContentVerifyJob::NO_HASHES_FOR_FILE,
+              RunContentVerifyJob(*extension.get(), kResourceUnexpectedPath,
+                                  contents));
+  }
+}
+
+// Tests that extension without any hashes (both verified_contents.json and
+// computed_hashes.json are missing) is checked properly.
+TEST_F(ContentVerifyJobWithoutSignedHashesUnittest, ExtensionWithoutHashes) {
+  base::ScopedTempDir temp_dir;
+  content_verifier_delegate()->SetVerifierSourceType(
+      ContentVerifierDelegate::VerifierSourceType::UNSIGNED_HASHES);
+
+  const base::FilePath kResourcePath(FILE_PATH_LITERAL("script-ok.js"));
+
+  scoped_refptr<Extension> extension =
+      CreateAndLoadTestExtensionToTempDir(&temp_dir, base::nullopt);
+  ASSERT_TRUE(extension);
+  base::FilePath unzipped_path = temp_dir.GetPath();
+  const std::string kContents = "console.log('Nothing special');";
+  ASSERT_EQ(static_cast<int>(kContents.size()),
+            base::WriteFile(unzipped_path.Append(kResourcePath),
+                            kContents.data(), kContents.size()));
+
+  {
+    // Make sure good file passes content verification.
+    std::string contents;
+    base::ReadFileToString(unzipped_path.Append(kResourcePath), &contents);
+    EXPECT_EQ(ContentVerifyJob::MISSING_ALL_HASHES,
+              RunContentVerifyJob(*extension.get(), kResourcePath, contents));
+    // Make sure that computed_hashes.json was not created. If we create
+    // computed_hashes.json at this stage, we may get there hashes of
+    // already-corrupted files. We can only computed hashes upon installation,
+    // if these hashes are not signed.
+    EXPECT_FALSE(
+        base::PathExists(file_util::GetComputedHashesPath(extension->path())));
+  }
+}
+
 class ContentMismatchUnittest
     : public ContentVerifyJobUnittest,
       public testing::WithParamInterface<ContentVerifyJobAsyncRunMode> {
@@ -466,7 +672,7 @@
     {
       // Make sure modified background.js fails content verification.
       std::string modified_contents;
-      base::ReadFileToString(unzipped_path.Append(base::FilePath(kResource)),
+      base::ReadFileToString(unzipped_path.Append(existent_resource_path),
                              &modified_contents);
       modified_contents.append(content_to_append_for_mismatch);
       EXPECT_EQ(ContentVerifyJob::HASH_MISMATCH,
diff --git a/extensions/strings/extensions_strings_mr.xtb b/extensions/strings/extensions_strings_mr.xtb
index 39dad16..2d9c040 100644
--- a/extensions/strings/extensions_strings_mr.xtb
+++ b/extensions/strings/extensions_strings_mr.xtb
@@ -13,7 +13,7 @@
 <translation id="2350172092385603347">भाषांतर वापरले, परंतु मॅनिफेस्टमध्ये डीफॉल्ट_लोकॅल नमूद नाही.</translation>
 <translation id="2576842806987913196">या नावाने आधीपासूनच CRX फाइल उपस्थित आहे.</translation>
 <translation id="2785530881066938471">आशय स्क्रिप्टसाठी '<ph name="RELATIVE_PATH" />' फाइल लोड करणे शक्य नाही. ही UTF-8 द्वारे एन्कोड केलेली नाही.</translation>
-<translation id="2903070246402204397"><ph name="EXTENSION_NAME" /> एक्स्टेंशन आयडी "<ph name="EXTENSION_ID" />") अॅडमिनिस्ट्रेटरने ब्लॉक केलेला आहे. <ph name="ADMIN_INFO" /></translation>
+<translation id="2903070246402204397"><ph name="EXTENSION_NAME" /> एक्स्टेंशन आयडी "<ph name="EXTENSION_ID" />") ॲडमिनिस्ट्रेटरने ब्लॉक केलेला आहे. <ph name="ADMIN_INFO" /></translation>
 <translation id="2988488679308982380">हे पॅकेज इंस्टॉल करणे शक्य नाही: '<ph name="ERROR_CODE" />'</translation>
 <translation id="3115238746683532089"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन (सिरीअल नंबर <ph name="SERIAL_NUMBER" />)</translation>
 <translation id="3144135466825225871">crx फाइल पुनर्स्थित करण्यात अयशस्वी. फाइल वापरात आहे किंवा नाही हे पाहण्यासाठी तपासा.</translation>
@@ -26,7 +26,7 @@
 <translation id="388442998277590542">पर्याय पृष्ठ '<ph name="OPTIONS_PAGE" />' लोड करणे शक्य नाही.</translation>
 <translation id="3984413272403535372">एक्स्टेंशनमध्ये साइन करताना एरर.</translation>
 <translation id="39964277676607559">आशय स्क्रिप्टसाठी javascript '<ph name="RELATIVE_PATH" />' लोड करणे शक्य नाही.</translation>
-<translation id="4115165561519362854">या मशीनच्या अॅडमिनिस्ट्रेटरला <ph name="EXTENSION_NAME" /> कडे <ph name="EXTENSION_VERSION" /> ची किमान आवृत्ती असणे आवश्यक आहे. ही त्या आवृत्तीवर (किंवा उच्च) अपडेट करेपर्यंत हे सक्षम होऊ शकत नाही.</translation>
+<translation id="4115165561519362854">या मशीनच्या ॲडमिनिस्ट्रेटरला <ph name="EXTENSION_NAME" /> कडे <ph name="EXTENSION_VERSION" /> ची किमान आवृत्ती असणे आवश्यक आहे. ही त्या आवृत्तीवर (किंवा उच्च) अपडेट करेपर्यंत हे सक्षम होऊ शकत नाही.</translation>
 <translation id="4233778200880751280">'<ph name="ABOUT_PAGE" />' पृष्ठाविषयी लोड करू शकलो नाही.</translation>
 <translation id="471800408830181311">खासगी की आउटपुट करण्यात अयशस्वी.</translation>
 <translation id="4811956658694082538">उपयुक्तता प्रक्रिया क्रॅश झाल्यामुळे पॅकेज इंस्टॉल करू शकलो नाही. Chrome रीस्टार्ट करून पहा आणि पुन्हा प्रयत्न करून पहा.</translation>
@@ -37,7 +37,7 @@
 <translation id="5436430103864390185">आकार असलेल्या विंडो समर्थित नाहीत.</translation>
 <translation id="5456409301717116725">हे एक्स्टेंशन की फाइल '<ph name="KEY_PATH" />' चा समावेश करतात. तुम्हाला कदाचित ते करणे आवश्यक नाही.</translation>
 <translation id="5486326529110362464">खासगी की साठी इनपुट मूल्य विद्यमान असणे आवश्यक आहे.</translation>
-<translation id="5972529113578162692">या मशीनच्या अॅडमिनिस्ट्रेटरलााठी <ph name="EXTENSION_NAME" /> इंस्टॉल करणे आवश्यक आहे. हे अनइंस्टॉल केले जाऊ शकत नाही.</translation>
+<translation id="5972529113578162692">या मशीनच्या ॲडमिनिस्ट्रेटरलााठी <ph name="EXTENSION_NAME" /> इंस्टॉल करणे आवश्यक आहे. हे अनइंस्टॉल केले जाऊ शकत नाही.</translation>
 <translation id="6027032947578871493"><ph name="VENDOR_NAME" /> कडील <ph name="PRODUCT_ID" /> अज्ञात उत्पादन (सिरीअल नंबर <ph name="SERIAL_NUMBER" />)</translation>
 <translation id="6068932090455285721"><ph name="VENDOR_ID" /> विक्रेत्याकडील <ph name="PRODUCT_NAME" /></translation>
 <translation id="6143635259298204954">एक्स्टेंशन अनपॅक करू नका. एक्स्टेंशन सुरक्षितपणे अनपॅक करण्यासाठी, तुमच्या प्रोफाइल निदेशिकेत सिमलिंक नसलेला पाथ असणे आवश्यक आहे. तुमच्या प्रोफाइलसाठी असा कोणताही पाथ सद्य नाही.</translation>
@@ -45,14 +45,14 @@
 <translation id="6391538222494443604">इनपुट डिरेक्टरी अस्तित्वात असणे आवश्यक आहे.</translation>
 <translation id="641087317769093025">एक्स्टेंशन अनझिप करणे शक्य झाले नाही</translation>
 <translation id="6413453408918378296">आयकन पुरेसा दृश्यमान नाही '<ph name="ICON" />'.</translation>
-<translation id="6542618148162044354"><ph name="APP_NAME" /> तुमच्या एका किंवा अधिक डिव्हाइस अॅक्सेसची विनंती करत आहे:</translation>
+<translation id="6542618148162044354"><ph name="APP_NAME" /> तुमच्या एका किंवा अधिक डिव्हाइस ॲक्सेसची विनंती करत आहे:</translation>
 <translation id="657064425229075395">पार्श्वभूमी स्क्रिप्‍ट '<ph name="BACKGROUND_SCRIPT" />' लोड करू शकले नाही.</translation>
 <translation id="6580950983454333167"><ph name="VENDOR_NAME" /> (सिरीअल नंबर <ph name="SERIAL_NUMBER" />) कडील <ph name="PRODUCT_NAME" /></translation>
 <translation id="677806580227005219">Mimehandler: <ph name="MIMEHANDLERVIEW_TAG_NAME" /></translation>
 <translation id="6840444547062817500">या एक्स्टेंशनने स्वतःस वारंवार रीलोड केले आहे.</translation>
 <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="7217838517480956708">या मशीनच्या ॲडमिनिस्ट्रेटरला <ph name="EXTENSION_NAME" /> इंस्टॉल करणे आवश्यक आहे. हे काढले किंवा सुधारित केले जाऊ शकत नाही.</translation>
 <translation id="7612608473764576263">खाजगी की साठीचे इनपुट मूल्य योग्य फॉरमॅटमध्ये असावे (PKCS#8-फॉरमॅट PEM-एंकोड केलेली RSA की).</translation>
 <translation id="7939686037314084444">एक्सटेंशन योग्यरित्या लोड होऊ शकले नाही. हे कदाचित नेटवर्क विनंत्या व्यत्यय आणू शकत नाही.</translation>
 <translation id="7972881773422714442">पर्याय: <ph name="EXTENSIONOPTIONS_TAG_NAME" /></translation>
@@ -61,7 +61,7 @@
 <translation id="8284835137979141223"><ph name="VENDOR_NAME" /> कडील <ph name="PRODUCT_NAME" /></translation>
 <translation id="8517576857589387417">मॅनिफेस्ट फाइल गहाळ किंवा वाचता न येण्यासारखी आहे</translation>
 <translation id="8636666366616799973">पॅकेज चुकीचे आहे. तपशील: '<ph name="ERROR_MESSAGE" />'.</translation>
-<translation id="8761756413268424715"><ph name="APP_NAME" /> तुमच्या एका डिव्हाइस अॅक्सेसची विनंती करत आहे:</translation>
+<translation id="8761756413268424715"><ph name="APP_NAME" /> तुमच्या एका डिव्हाइस ॲक्सेसची विनंती करत आहे:</translation>
 <translation id="8885905466771744233">नमूद एक्स्टेंशनसाठी खासगी की यापूर्वीच विद्यमान आहे. ती की पुन्हा वापरा किंवा प्रथम ती हटवा.</translation>
 <translation id="907841381057066561">पॅकेजिंग दरम्यान तात्पुरती zip फाइल तयार करण्यात अयशस्वी.</translation>
 <translation id="941543339607623937">चुकीची खासगी की.</translation>
diff --git a/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/README.txt b/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/README.txt
new file mode 100644
index 0000000..f74ddb1
--- /dev/null
+++ b/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/README.txt
@@ -0,0 +1,10 @@
+This archive contains:
+  _metadata/verified_contents.json with a valid signature (see notes about
+with_verified_contents archive, it's the same) and hash of one file,
+background.js.
+  background.js, which contents differs from the original one
+  _metadata/computed_hashes.json, which contains hash of modified background.js
+(so this hash effectively differs from one stored in verified_contents.json).
+
+The purpose of this archive is to check that content verifier will catch such
+type of corruption too.
diff --git a/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/source_all.zip b/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/source_all.zip
new file mode 100644
index 0000000..2c59b388
--- /dev/null
+++ b/extensions/test/data/content_hash_fetcher/with_verified_contents_corrupted/source_all.zip
Binary files differ
diff --git a/gpu/ipc/service/gpu_init.cc b/gpu/ipc/service/gpu_init.cc
index c86571c..9ba7856 100644
--- a/gpu/ipc/service/gpu_init.cc
+++ b/gpu/ipc/service/gpu_init.cc
@@ -359,41 +359,7 @@
     }
   }
 
-#if BUILDFLAG(ENABLE_VULKAN)
-  if (gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] ==
-      gpu::kGpuFeatureStatusEnabled) {
-    DCHECK_NE(gpu_preferences_.use_vulkan,
-              gpu::VulkanImplementationName::kNone);
-    bool vulkan_use_swiftshader = gpu_preferences_.use_vulkan ==
-                                  gpu::VulkanImplementationName::kSwiftshader;
-    const bool enforce_protected_memory =
-        gpu_preferences_.enforce_vulkan_protected_memory;
-    vulkan_implementation_ = gpu::CreateVulkanImplementation(
-        vulkan_use_swiftshader,
-        enforce_protected_memory ? true : false /* allow_protected_memory */,
-        enforce_protected_memory);
-    if (!vulkan_implementation_ ||
-        !vulkan_implementation_->InitializeVulkanInstance(
-            !gpu_preferences_.disable_vulkan_surface)) {
-      DLOG(ERROR) << "Failed to create and initialize Vulkan implementation.";
-      vulkan_implementation_ = nullptr;
-      CHECK(!gpu_preferences_.disable_vulkan_fallback_to_gl_for_testing);
-    }
-  }
-  if (!vulkan_implementation_) {
-    if (gpu_preferences_.gr_context_type == gpu::GrContextType::kVulkan) {
-      gpu_preferences_.gr_context_type = gpu::GrContextType::kGL;
-    }
-    gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
-    gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
-        gpu::kGpuFeatureStatusDisabled;
-  }
-
-#else
-  gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
-  gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
-      gpu::kGpuFeatureStatusDisabled;
-#endif
+  InitializeVulkan();
 
   // Collect GPU process info
   if (!gl_disabled) {
@@ -526,6 +492,7 @@
 
   InitializeGLThreadSafe(command_line, gpu_preferences_, &gpu_info_,
                          &gpu_feature_info_);
+  InitializeVulkan();
 
   default_offscreen_surface_ = gl::init::CreateOffscreenGLSurface(gfx::Size());
 
@@ -663,4 +630,41 @@
   return std::move(default_offscreen_surface_);
 }
 
+void GpuInit::InitializeVulkan() {
+#if BUILDFLAG(ENABLE_VULKAN)
+  if (gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] ==
+      gpu::kGpuFeatureStatusEnabled) {
+    DCHECK_NE(gpu_preferences_.use_vulkan,
+              gpu::VulkanImplementationName::kNone);
+    bool vulkan_use_swiftshader = gpu_preferences_.use_vulkan ==
+                                  gpu::VulkanImplementationName::kSwiftshader;
+    const bool enforce_protected_memory =
+        gpu_preferences_.enforce_vulkan_protected_memory;
+    vulkan_implementation_ = gpu::CreateVulkanImplementation(
+        vulkan_use_swiftshader,
+        enforce_protected_memory ? true : false /* allow_protected_memory */,
+        enforce_protected_memory);
+    if (!vulkan_implementation_ ||
+        !vulkan_implementation_->InitializeVulkanInstance(
+            !gpu_preferences_.disable_vulkan_surface)) {
+      DLOG(ERROR) << "Failed to create and initialize Vulkan implementation.";
+      vulkan_implementation_ = nullptr;
+      CHECK(!gpu_preferences_.disable_vulkan_fallback_to_gl_for_testing);
+    }
+  }
+  if (!vulkan_implementation_) {
+    if (gpu_preferences_.gr_context_type == gpu::GrContextType::kVulkan) {
+      gpu_preferences_.gr_context_type = gpu::GrContextType::kGL;
+    }
+    gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
+    gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+        gpu::kGpuFeatureStatusDisabled;
+  }
+#else
+  gpu_preferences_.use_vulkan = gpu::VulkanImplementationName::kNone;
+  gpu_feature_info_.status_values[gpu::GPU_FEATURE_TYPE_VULKAN] =
+      gpu::kGpuFeatureStatusDisabled;
+#endif  // BUILDFLAG(ENABLE_VULKAN)
+}
+
 }  // namespace gpu
diff --git a/gpu/ipc/service/gpu_init.h b/gpu/ipc/service/gpu_init.h
index 0545b9d..5263436 100644
--- a/gpu/ipc/service/gpu_init.h
+++ b/gpu/ipc/service/gpu_init.h
@@ -79,6 +79,8 @@
 #endif
 
  private:
+  void InitializeVulkan();
+
   GpuSandboxHelper* sandbox_helper_ = nullptr;
   std::unique_ptr<GpuWatchdogThread> watchdog_thread_;
   GPUInfo gpu_info_;
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
index 71ccc82..c646e948 100644
--- a/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_chromium_strings_mr.xtb
@@ -4,29 +4,29 @@
 <translation id="102360288709523007">वापर आकडेवारी आणि क्रॅश अहवाल Google कडे पाठवून Chromium ला अधिक चांगले करण्यास मदत करा.</translation>
 <translation id="1185134272377778587">Chromium बद्दल</translation>
 <translation id="1289966288285062467">Chromium गोपनीयता सूचना</translation>
-<translation id="1472013873724362412">तुमचे खाते Chromium वर कार्य करत नाही. कृपया तुमच्या डोमेन अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा साइन इन करण्यासाठी एक नियमित Google खाते वापरा.</translation>
+<translation id="1472013873724362412">तुमचे खाते Chromium वर कार्य करत नाही. कृपया तुमच्या डोमेन ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा साइन इन करण्यासाठी एक नियमित Google खाते वापरा.</translation>
 <translation id="1507010443238049608">Chromium च्या वैशिष्ट्ये आणि परफॉर्मन्समध्ये सुधारणा करण्यात मदत करा</translation>
 <translation id="1617663976202781617">Chromium सिंकवरील डेटा</translation>
 <translation id="1736662517232558588">Chromium डेटा साफ करण्यात आला</translation>
 <translation id="1838412507805038478"><ph name="ISSUER" /> ने या वेबसाइटचे सर्टिफिकेट जारी केले हे Chromium ने पडताळले.</translation>
 <translation id="1843424232666537147">Chromium कडे अशी वैशिष्ट्ये आहेत जी तुम्हाला तुमचा इंटरनेट डेटा आणि तुम्ही किती द्रुतपणे वेबपृष्ठे लोड करण्यात सक्षम आहात हे व्यवस्थापित करण्यास मदत करतात.
 <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
-<translation id="2075400798887076382">तुम्ही तुमच्या कॉंप्युटरवर उघडलेल्‍या टॅबमध्‍ये, थेट येथून अॅक्सेस करा. तुमच्या कॉंप्युटरवर फक्त Chromium उघडा, मेनूवर जा आणि "Chromium वर साइन इन करा…" निवडा</translation>
-<translation id="2168108852149185974">Chromium क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation>
+<translation id="2075400798887076382">तुम्ही तुमच्या कॉंप्युटरवर उघडलेल्‍या टॅबमध्‍ये, थेट येथून ॲक्सेस करा. तुमच्या कॉंप्युटरवर फक्त Chromium उघडा, मेनूवर जा आणि "Chromium वर साइन इन करा…" निवडा</translation>
+<translation id="2168108852149185974">Chromium क्रॅश होण्याचे कारण काही ॲड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation>
 <translation id="2178608107313874732">Chromium आत्ता तुमचा कॅमेरा वापरू शकत नाही</translation>
 <translation id="2195025571279539885">Chromium ने या साइटवरून पुढील वेळी <ph name="LANGUAGE_NAME" /> पेज भाषांतरित करण्याची ऑफर द्यावी असे तुम्हाला वाटते?</translation>
 <translation id="2590893390871230428">तुमचा Chromium डेटा सिंक करा</translation>
 <translation id="2730884209570016437">Chromium तुमचा कॅमेरा वापरू शकत नाही कारण दुसरा ॲप्स तो वापरत आहे</translation>
 <translation id="2915596697727466327">तुमच्या पासवर्डच्या परवानगी दिलेल्या ॲक्सेसची खात्री करण्यासाठी Chromium फेस आयडी वापरते.</translation>
 <translation id="3256316712990552818">Chromium वर कॉपी केले</translation>
-<translation id="3805899903892079518">Chromium ला तुमच्या फोटो किंवा व्हिडिओ अॅक्सेस नाही. iOS सेटिंग्ज&gt; गोपनीयता&gt; फोटो  अॅक्सेस सक्षम करा.</translation>
+<translation id="3805899903892079518">Chromium ला तुमच्या फोटो किंवा व्हिडिओ ॲक्सेस नाही. iOS सेटिंग्ज&gt; गोपनीयता&gt; फोटो  ॲक्सेस सक्षम करा.</translation>
 <translation id="4555020257205549924">हे वैशिष्ट्य चालू केल्यावर, Chromium Google भाषांतर वापरून अन्य भाषामध्ये लिहिलेल्या पृष्ठांचा भाषांतर ऑफर करेल. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="4681781466797808448">Chromium स्कॅनर सुरू करा</translation>
 <translation id="4787850887676698916">आपल्या अन्य डिव्हाइसवर तुम्ही Chromium मध्ये उघडलेले टॅब येथे दिसतील.</translation>
 <translation id="4999538639245140991">तुम्ही <ph name="SIGNOUT_MANAGED_DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यातून साइन आउट केले आहे, तुमचा Chromium डेटा या डिव्हाइसवरून हटवला जाईल. तुमचा डेटा तुमच्या Google खाते मध्ये असेल.</translation>
 <translation id="5573014823074921752">Chromium टीप. आणखी टॅब पर्यायांसाठी, तुमच्या स्क्रीनच्या तळाशी किंवा सर्वात वर असलेल्या टूलबारवरील टॅब दाखवा बटणाला स्पर्श करा आणि धरून ठेवा.</translation>
 <translation id="5862307444128926510">Chromium वर तुमचे स्‍वागत आहे</translation>
-<translation id="5945387852661427312"><ph name="DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यासह तुम्ही साइन इन करत आहात आणि त्याच्या अॅडमिनिस्ट्रेटरला तुमच्या Chromium डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chromium मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
+<translation id="5945387852661427312"><ph name="DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यासह तुम्ही साइन इन करत आहात आणि त्याच्या ॲडमिनिस्ट्रेटरला तुमच्या Chromium डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chromium मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
 <translation id="6068866989048414399">Chromium सेवा अटी</translation>
 <translation id="6268381023930128611">Chromium मधून साइन आउट करायचे?</translation>
 <translation id="6424492062988593837">Chrome आता सर्वोत्तम झाले आहे! नवीन आवृत्ती उपलब्ध आहे.</translation>
@@ -36,7 +36,7 @@
 <translation id="7208566199746267865">तुमची खाती वेबवर आणून Chromium तुमचा वेळ वाचविते. तुम्ही सेटिंग्जमध्ये खाती जोडू किंवा काढू शकता.</translation>
 <translation id="7269362888766543920">काही ॲड-ऑनमुळे Chromium क्रॅश होते. कृपया ते अनइंस्टॉल करून पहा.</translation>
 <translation id="7337881442233988129">Chromium</translation>
-<translation id="7357211569052832586">निवडलेला डेटा Chromium आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि अॅक्टिव्हिटी यासारख्या ब्राउझिंग इतिहासाची इतर रूपे असू शकतात.</translation>
+<translation id="7357211569052832586">निवडलेला डेटा Chromium आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्या Google खात्यामध्ये history.google.com येथे Google च्या इतर सेवांमधील शोध आणि ॲक्टिव्हिटी यासारख्या ब्राउझिंग इतिहासाची इतर रूपे असू शकतात.</translation>
 <translation id="7400689562045506105">Chromium सर्वत्र वापरा</translation>
 <translation id="7674213385180944843">सेटिंग्ज &gt; गोपनीयता &gt; कॅमेरा &gt; Chromium उघडा आणि कॅमेरा चालू करा.</translation>
 <translation id="7746854981345936341">Chromium टीप. काही बटणे आता तुमच्या स्क्रीनच्या तळाशी आहेत, जसे की मागे, पुढे आणि शोध.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
index 64994e9..3a76355 100644
--- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_mr.xtb
@@ -14,18 +14,18 @@
 <translation id="257708665678654955">पुढील वेळी Google Chrome ने या साइटवरील <ph name="LANGUAGE_NAME" /> पेजचे भाषांतर करण्याची ऑफर द्यावी असे तुम्हाला वाटते?</translation>
 <translation id="3030414234702425231">तुम्ही <ph name="SIGNOUT_MANAGED_DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यातून साइन आउट केले आहे, तुमचा Chrom डेटा या डिव्हाइसवरून हटवला जाईल. तुमचा डेटा तुमच्या Google खाते मध्ये असेल</translation>
 <translation id="3148688391461398285">आपल्या स्थानाच्या आधारावर Chrome मध्ये उत्कृष्ट अनुभव मिळवा.</translation>
-<translation id="3167189358072330585">तुमचे खाते Google Chrome वर काम करत नाही. कृपया तुमच्या डोमेन अॅडमिनिस्ट्रेटरशी संपर्क साधा किंवा साइन इन करण्यासाठी एक नियमित Google खाते वापरा.</translation>
+<translation id="3167189358072330585">तुमचे खाते Google Chrome वर काम करत नाही. कृपया तुमच्या डोमेन ॲडमिनिस्ट्रेटरशी संपर्क साधा किंवा साइन इन करण्यासाठी एक नियमित Google खाते वापरा.</translation>
 <translation id="3196546062792660320">तुमची खाती वेबवर आणून Chrome तुमचा वेळ वाचविते. तुम्ही सेटिंग्जमध्ये खाती जोडू किंवा काढू शकता.</translation>
 <translation id="3282568296779691940">Chrome वर साइन इन करा</translation>
 <translation id="3345341804167540816">Chrome सर्वत्र वापरा</translation>
 <translation id="384394811301901750">Google Chrome आत्ता तुमचा कॅमेरा वापरू शकत नाही</translation>
 <translation id="3980220367029651214">तुम्ही संकालित केलेली खाती <ph name="USER_EMAIL1" /> वरून <ph name="USER_EMAIL2" /> वर स्विच करीत आहात. तुमचा विद्यमान Chrome डेटा <ph name="DOMAIN" /> द्वारे व्यवस्थापित केला आहे. हे तुमचा डेटा या डिव्हाइस वरून हटवेल परंतु तुमचा डेटा <ph name="USER_EMAIL1" /> मध्ये असेल.</translation>
-<translation id="3988789688219830639">Google Chrome ला तुमच्या फोटो आणि व्हिडिओ अॅक्सेस नाही. iOS सेटिंग्ज &gt; गोपनीयता &gt; फोटो  अॅक्सेस सक्षम करा.</translation>
+<translation id="3988789688219830639">Google Chrome ला तुमच्या फोटो आणि व्हिडिओ ॲक्सेस नाही. iOS सेटिंग्ज &gt; गोपनीयता &gt; फोटो  ॲक्सेस सक्षम करा.</translation>
 <translation id="4099578267706723511">वापर आकडेवारी आणि क्रॅश अहवाल Google कडे पाठवून Chrome अधिक चांगले करण्यास मदत करा.</translation>
 <translation id="415767770115540173">आपल्या स्थानावर आधारित Chrome मध्ये उत्कृष्ट Google अनुभव मिळवा.</translation>
 <translation id="424864128008805179">Chrome मधून साइन आउट करायचे?</translation>
 <translation id="4249068189593983585">Chrome टीप. आणखी टॅब पर्यायांसाठी, तुमच्या स्क्रीनच्या तळाशी किंवा सर्वात वर असलेल्या टूलबारवरील टॅब दाखवा बटणाला स्पर्श करा आणि धरून ठेवा.</translation>
-<translation id="4523886039239821078">Chrome क्रॅश होण्याचे कारण काही अॅड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation>
+<translation id="4523886039239821078">Chrome क्रॅश होण्याचे कारण काही ॲड-ऑन आहेत. कृपया ती अनइंस्टॉल करा:</translation>
 <translation id="5389212809648216794">Google Chrome तुमचा कॅमेरा वापरू शकत नाही कारण दुसरे ॲप्स सध्या तो वापरत आहे.</translation>
 <translation id="5621912349729388018"><ph name="BEGIN_LINK" />अपडेट केलेल्या Chrome सेवा अटींचे पुनरावलोकन करा.<ph name="END_LINK" /></translation>
 <translation id="5639704535586432836">सेटिंग्ज &gt; गोपनीयता &gt; कॅमेरा &gt; Google Chrome उघडा आणि कॅमेरा चालू करा.</translation>
@@ -36,20 +36,20 @@
 <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="6573431926118603307">आपल्या अन्य डिव्हाइसेसवर तुम्ही Chrome मध्ये उघडलेले टॅब येथे दिसतील.</translation>
 <translation id="6600954340915313787">Chrome वर कॉपी केले</translation>
-<translation id="6648150602980899529"><ph name="DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यासह तुम्ही साइन इन करत आहात आणि त्याच्या अॅडमिनिस्ट्रेटरला तुमच्या Chrome डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chrome मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
+<translation id="6648150602980899529"><ph name="DOMAIN" /> द्वारे व्यवस्थापित केलेल्या खात्यासह तुम्ही साइन इन करत आहात आणि त्याच्या ॲडमिनिस्ट्रेटरला तुमच्या Chrome डेटाचे नियंत्रण देत आहात. तुमचा डेटा कायमचा या खात्यामध्ये असेल. Chrome मधून साइन आउट केल्याने तुमचा डेटा या डिव्हाइस वरून हटवला जाईल परंतु तो तुमच्या Google खात्यामध्ये स्टोअर केलेला असेल.</translation>
 <translation id="6676840375528380067">या डिव्हाइसवरून तुमचा Chrom डेटा साफ करायचा?</translation>
 <translation id="690638524486313356">Google Chrome सेवा अटी</translation>
 <translation id="7165736900384873061">Google Chrome QR स्कॅनर वापरणे आरंभ करा</translation>
 <translation id="7172660552945675509">टीप: <ph name="BEGIN_LINK" />Chrome तुमच्या डॉकमध्ये हलवा<ph name="END_LINK" /></translation>
 <translation id="7173660919484573146">तुमच्या पासवर्डच्या परवानगी दिलेल्या ॲक्सेसची खात्री करण्यासाठी Chrome फेस आयडी वापरते.</translation>
-<translation id="7265369419224458312">तुम्ही तुमच्या कॉंप्युटरवर उघडलेल्‍या टॅबमध्‍ये, थेट येथून अॅक्सेस करा.
+<translation id="7265369419224458312">तुम्ही तुमच्या कॉंप्युटरवर उघडलेल्‍या टॅबमध्‍ये, थेट येथून ॲक्सेस करा.
 तुमच्या कॉंप्युटरवर फक्त Chrome उघडा, मेनूवर जा आणि "Chrome वर साइन इन करा…" निवडा</translation>
 <translation id="7400722733683201933">Google Chrome बद्दल</translation>
 <translation id="756809126120519699">Chrome डेटा साफ केला</translation>
 <translation id="7626032353295482388">Chrome मध्ये स्वागत आहे</translation>
-<translation id="7698568245838009292">Chrome ला कॅमेरा अॅक्सेस करायचा आहे</translation>
+<translation id="7698568245838009292">Chrome ला कॅमेरा ॲक्सेस करायचा आहे</translation>
 <translation id="8370517070665726704">कॉपीराइट <ph name="YEAR" /> Google LLC. सर्व हक्क राखीव.</translation>
 <translation id="840168496893712993">काही ॲड-ऑनमुळे Chrome क्रॅश होऊ शकते. कृपया ते अनइंस्टॉल करून पहा.</translation>
-<translation id="8459495907675268833">निवडलेला डेटा Chrome आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्या Google खात्यामध्ये history.google.com येथे ब्राउझिंग इतिहासाची Google च्या इतर सेवांमधील शोध आणि अॅक्टिव्हिटी यासारखी इतर स्वरूपे असू शकतात.</translation>
+<translation id="8459495907675268833">निवडलेला डेटा Chrome आणि सिंक केलेल्या डिव्हाइसमधून काढला गेला आहे. तुमच्या Google खात्यामध्ये history.google.com येथे ब्राउझिंग इतिहासाची Google च्या इतर सेवांमधील शोध आणि ॲक्टिव्हिटी यासारखी इतर स्वरूपे असू शकतात.</translation>
 <translation id="8540666473246803645">Google Chrome</translation>
 </translationbundle>
\ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb
index 9d4782b..d1d545c 100644
--- a/ios/chrome/app/strings/resources/ios_strings_da.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -235,7 +235,7 @@
 <translation id="430793432425771671">Synkroniser alt</translation>
 <translation id="430967081421617822">Altid</translation>
 <translation id="4334428914252001502">1 ulæst artikel.</translation>
-<translation id="4338650699862464074">Sender webadresser for de sider, du besøger, til Google.</translation>
+<translation id="4338650699862464074">Sender webadresser på de sider, du besøger, til Google.</translation>
 <translation id="4359125752503270327">Denne side åbner i en anden app.</translation>
 <translation id="4375040482473363939">Søgning efter QR-kode</translation>
 <translation id="4378154925671717803">Telefon</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
index 77c213e2..9a87f65 100644
--- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -99,6 +99,7 @@
 <translation id="2273327106802955778">વધુ મેનૂ</translation>
 <translation id="2316709634732130529">સૂચવેલ પાસવર્ડનો ઉપયોગ કરો</translation>
 <translation id="2320166752086256636">કીબોર્ડ છુપાવો</translation>
+<translation id="2330129964253841015">જો પાસવર્ડમાં ચેડાં થાય તો તમને ચેતવણી આપવામાં આવશે</translation>
 <translation id="2339560363438331454">સિંક અને Google સેવાઓ</translation>
 <translation id="2351097562818989364">તમારી અનુવાદ સેટિંગ્સ ફરીથી સેટ કરવામાં આવી છે.</translation>
 <translation id="2359043044084662842">અનુવાદ કરો</translation>
@@ -252,6 +253,7 @@
 <translation id="4620246317052452550">તમે વાંચેલા પૃષ્ઠો</translation>
 <translation id="4630540211544979320">પેજનો અનુવાદ કરો</translation>
 <translation id="4636930964841734540">માહિતી</translation>
+<translation id="4659126640776004816">જ્યારે તમે તમારા Google એકાઉન્ટમાં સાઇન ઇન કરો છો, ત્યારે આ સુવિધા ચાલુ કરવામાં આવે છે.</translation>
 <translation id="4659667755519643272">ટેબ સ્વિચરમાં દાખલ થાઓ</translation>
 <translation id="4666531726415300315"><ph name="EMAIL" /> તરીકે સાઇન ઇન થયાં.
 
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
index 3adb58c..a8e7f24f 100644
--- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -110,13 +110,13 @@
 <translation id="2421044535038393232">संपादन करणे सुरू ठेवा</translation>
 <translation id="2435457462613246316">पासवर्ड दर्शवा</translation>
 <translation id="2481538920734869610">खाते जोडा</translation>
-<translation id="2497852260688568942">तुमच्या अॅडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
+<translation id="2497852260688568942">तुमच्या ॲडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation>
 <translation id="2500374554657206846">पासवर्ड सेव्ह करण्यासाठी पर्याय</translation>
 <translation id="2523363575747517183">ही वेबसाइट वारंवार दुसरे अ‍ॅप्लिकेशन उघडण्याचा प्रयत्न करत आहे.</translation>
 <translation id="2529021024822217800">सर्व उघडा</translation>
 <translation id="2562041823070056534"><ph name="DEVICE_NAME" /> ला पाठवत आहे…</translation>
 <translation id="2570206273416014374">ॲड्रेस बार आणि सर्च बॉक्समधून तुमच्या डीफॉल्ट शोध इंजिनला काही कुकी आणि शोध पाठवते.</translation>
-<translation id="2572712655377361602">डिव्हाइस धोरणाने तुमच्या फोटोंंचा अॅक्सेस ब्लॉक केला</translation>
+<translation id="2572712655377361602">डिव्हाइस धोरणाने तुमच्या फोटोंंचा ॲक्सेस ब्लॉक केला</translation>
 <translation id="2578571896248130439">वेबपेज पाठवा</translation>
 <translation id="2584132361465095047">खाते जोडा...</translation>
 <translation id="2625189173221582860">पासवर्ड कॉपी केला</translation>
@@ -192,7 +192,7 @@
 <translation id="3581564640715911333">पेजचे अन्य भाषांमध्ये भाषांतर उपलब्ध करा</translation>
 <translation id="3588820906588687999">नवीन टॅबमध्ये इमेज उघडा</translation>
 <translation id="3603009562372709545">लिंक URL कॉपी करा</translation>
-<translation id="3607167657931203000">अॉटोफिल डेटा</translation>
+<translation id="3607167657931203000">ऑटोफिल डेटा</translation>
 <translation id="3609785682760573515">संकालन करत आहे...</translation>
 <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation>
 <translation id="3670030362669914947">नंबर</translation>
@@ -481,7 +481,7 @@
 <translation id="7840771868269352570">तुम्ही निवडलेले आयटम काढून टाकले जातील.</translation>
 <translation id="7856733331829174190">डाउनलोड करता आले नाही</translation>
 <translation id="7859704718976024901">ब्राउझिंग इतिहास</translation>
-<translation id="7887198238286927132">तुमच्या गोपनीयतेचे संरक्षण करण्‍यासाठी, Chrome हा भाग अॉटोफिल करणार नाही.</translation>
+<translation id="7887198238286927132">तुमच्या गोपनीयतेचे संरक्षण करण्‍यासाठी, Chrome हा भाग ऑटोफिल करणार नाही.</translation>
 <translation id="7918293828610777738">तुमची वाचन सूची ऑफलाइन उपलब्ध आहे. तुमच्या वाचन सूचीमध्‍ये पेज जोडण्‍यासाठी, <ph name="SHARE_OPENING_ICON" /> त्यानंतर <ph name="READ_LATER_TEXT" /> वर टॅप करा.</translation>
 <translation id="7938254975914653459">फेसटाइम</translation>
 <translation id="7939128259257418052">पासवर्ड एक्सपोर्ट करा...</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
index 6d9baa2..594f961 100644
--- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -99,7 +99,7 @@
 <translation id="2273327106802955778">Ponuka Viac</translation>
 <translation id="2316709634732130529">Použiť navrhnuté heslo</translation>
 <translation id="2320166752086256636">Skryť klávesnicu</translation>
-<translation id="2330129964253841015">Upozorniť v prípade napadnutia hesiel</translation>
+<translation id="2330129964253841015">Upozorňovať pri odhalení hesiel</translation>
 <translation id="2339560363438331454">Synchronizácia a služby Googlu</translation>
 <translation id="2351097562818989364">Nastavenia prekladov boli resetované.</translation>
 <translation id="2359043044084662842">Preložiť</translation>
@@ -496,7 +496,7 @@
 <translation id="8059533439631660104">Zbalí sekciu.</translation>
 <translation id="806745655614357130">Ponechať moje dáta oddelené</translation>
 <translation id="8073670137947914548">Sťahovanie bolo dokončené</translation>
-<translation id="8073872304774253879">Zlepšovanie vyhľadávaní a prehliadania</translation>
+<translation id="8073872304774253879">Zlepšovať vyhľadávanie a prehliadanie</translation>
 <translation id="8076014560081431679">Uložené nastavenia webov sa neodstránia a môžu odrážať vaše návyky prehliadania. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></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="8131740175452115882">Potvrdiť</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_tr.xtb b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
index 8ccc720..4430ddd 100644
--- a/ios/chrome/app/strings/resources/ios_strings_tr.xtb
+++ b/ios/chrome/app/strings/resources/ios_strings_tr.xtb
@@ -496,7 +496,7 @@
 <translation id="8059533439631660104">Bölümü daraltır.</translation>
 <translation id="806745655614357130">Verilerimi ayrı tut</translation>
 <translation id="8073670137947914548">İndirme tamamlandı</translation>
-<translation id="8073872304774253879">Aramaları ve Göz Atmayı İyileştir</translation>
+<translation id="8073872304774253879">Aramaları ve Göz Atmayı Daha İyi Yap</translation>
 <translation id="8076014560081431679">Kayıtlı site ayarları silinmez ve web'e göz atma alışkanlıklarınızı yansıtabilir. <ph name="BEGIN_LINK" />Daha fazla bilgi edinin<ph name="END_LINK" /></translation>
 <translation id="8114753159095730575">Dosya indirme işlevi kullanılabilir. Seçenekler ekranın alt tarafındadır.</translation>
 <translation id="8131740175452115882">Onayla</translation>
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
index 393f35d..70650b3 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.h
@@ -34,6 +34,9 @@
   // Updates Infobar badge for the case where Infobar of |infobar_type| was
   // accepted.
   void UpdateBadgeForInfobarAccepted(InfobarType infobar_type);
+  // Updates Infobar badge for the case where Infobar action of |infobar_type|
+  // was reverted. This will negate the accepted state of the badge.
+  void UpdateBadgeForInfobarReverted(InfobarType infobar_type);
   // Updates Infobar badge for the case where an Infobar banner of
   // |infobar_type| was presented.
   void UpdateBadgeForInfobarBannerPresented(InfobarType infobar_type);
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
index 7ab5cb2a..d1b5f77 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper.mm
@@ -38,6 +38,12 @@
   [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]];
 }
 
+void InfobarBadgeTabHelper::UpdateBadgeForInfobarReverted(
+    InfobarType infobar_type) {
+  infobar_badge_models_[infobar_type].badgeState &= ~BadgeStateAccepted;
+  [delegate_ updateInfobarBadge:infobar_badge_models_[infobar_type]];
+}
+
 void InfobarBadgeTabHelper::UpdateBadgeForInfobarBannerPresented(
     InfobarType infobar_type) {
   infobar_badge_models_[infobar_type].badgeState |= BadgeStatePresented;
diff --git a/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm b/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
index 09d9488..fa53e81 100644
--- a/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
+++ b/ios/chrome/browser/infobars/infobar_badge_tab_helper_unittest.mm
@@ -76,6 +76,11 @@
                forWebState:(web::WebState*)webState {
   self.infobarBadgeTabHelper->UpdateBadgeForInfobarAccepted(infobarType);
 }
+
+- (void)infobarWasReverted:(InfobarType)infobarType
+               forWebState:(web::WebState*)webState {
+  self.infobarBadgeTabHelper->UpdateBadgeForInfobarReverted(infobarType);
+}
 @end
 
 // Fake Infobar Container.
@@ -241,6 +246,11 @@
             infobar_badge_tab_delegate_.badgeState & BadgeStateAccepted);
   EXPECT_EQ(BadgeStateRead,
             infobar_badge_tab_delegate_.badgeState & BadgeStateRead);
+
+  tab_helper()->UpdateBadgeForInfobarReverted(
+      InfobarType::kInfobarTypePasswordSave);
+  EXPECT_NE(BadgeStateAccepted,
+            infobar_badge_tab_delegate_.badgeState & BadgeStateAccepted);
 }
 
 // Test the badge state after doesn't change after adding an Infobar with no
diff --git a/ios/chrome/browser/payments/BUILD.gn b/ios/chrome/browser/payments/BUILD.gn
index e5fa2cc..f695168 100644
--- a/ios/chrome/browser/payments/BUILD.gn
+++ b/ios/chrome/browser/payments/BUILD.gn
@@ -37,6 +37,7 @@
     "//components/keyed_service/ios",
     "//components/payments/core",
     "//components/payments/core:error_strings",
+    "//components/payments/core:method_strings",
     "//components/payments/mojom",
     "//components/prefs",
     "//components/security_state/core",
diff --git a/ios/chrome/browser/payments/payment_request.mm b/ios/chrome/browser/payments/payment_request.mm
index 2ad16d95..c37e1e72 100644
--- a/ios/chrome/browser/payments/payment_request.mm
+++ b/ios/chrome/browser/payments/payment_request.mm
@@ -21,6 +21,7 @@
 #include "components/payments/core/autofill_payment_instrument.h"
 #include "components/payments/core/currency_formatter.h"
 #include "components/payments/core/features.h"
+#include "components/payments/core/method_strings.h"
 #include "components/payments/core/payment_details.h"
 #include "components/payments/core/payment_item.h"
 #include "components/payments/core/payment_request_data_util.h"
@@ -386,7 +387,7 @@
   // the name of the network directly.
   std::string method_name = basic_card_issuer_network;
   if (basic_card_specified_networks_.count(basic_card_issuer_network)) {
-    method_name = "basic-card";
+    method_name = methods::kBasicCard;
   }
 
   // The total number of card types: credit, debit, prepaid, unknown.
@@ -632,8 +633,8 @@
       request_payer_name());
 
   // Log metrics around which payment methods are requested by the merchant.
-  const GURL kGooglePayUrl("https://google.com/pay");
-  const GURL kAndroidPayUrl("https://android.com/pay");
+  const GURL kGooglePayUrl(methods::kGooglePay);
+  const GURL kAndroidPayUrl(methods::kAndroidPay);
 
   // Looking for payment methods that are NOT Google-related as well as the
   // Google-related ones.
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm
index 5852eb61..3d9e556 100644
--- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_egtest.mm
@@ -175,6 +175,11 @@
 // Tests that when the page is reloaded using the tools menu, the suggestions
 // are updated.
 - (void)testReloadPage {
+// TODO(crbug.com/1021649): Enable this test.
+#if defined(CHROME_EARL_GREY_2)
+  EARL_GREY_TEST_DISABLED(@"Fails with EG2");
+#endif
+
   // Add 2 suggestions, persisted accross page loads.
   [ContentSuggestionsAppInterface addNumberOfSuggestions:2
                                 additionalSuggestionsURL:nil];
@@ -200,6 +205,11 @@
 // disposition of the collection takes into account the previous scroll, even
 // when more is tapped.
 - (void)testOpenPageAndGoBackWithMoreContent {
+// TODO(crbug.com/786960): re-enable when fixed. Tests may pass on EG2
+#if defined(CHROME_EARL_GREY_1)
+  EARL_GREY_TEST_DISABLED(@"Fails on iOS 11.0.");
+#endif
+
   // Set server up.
   self.testServer->RegisterRequestHandler(base::Bind(&StandardResponse));
   GREYAssertTrue(self.testServer->Start(), @"Test server failed to start.");
diff --git a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
index 89e82e5..c418d3d 100644
--- a/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
+++ b/ios/chrome/browser/ui/infobars/coordinators/infobar_coordinator.mm
@@ -186,10 +186,14 @@
 #pragma mark InfobarUIDelegate
 
 - (void)removeView {
-  [self dismissInfobarBanner:self animated:YES completion:nil];
+  // Do not animate the dismissal since the Coordinator might have been stopped
+  // and the animation can cause undefined behavior.
+  [self dismissInfobarBanner:self animated:NO completion:nil];
 }
 
 - (void)detachView {
+  // Do not animate the dismissals since the Coordinator might have been stopped
+  // and the animation can cause undefined behavior.
   if (self.bannerViewController)
     [self dismissInfobarBanner:self animated:NO completion:nil];
   if (self.modalViewController)
diff --git a/ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h b/ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h
index df6f9d4..00412fc 100644
--- a/ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h
+++ b/ios/chrome/browser/ui/infobars/infobar_badge_ui_delegate.h
@@ -22,6 +22,12 @@
 - (void)infobarWasAccepted:(InfobarType)infobarType
                forWebState:(web::WebState*)webState;
 
+// Called whenever the revert action button of an Infobar of type |infobarType|
+// in |webState| was tapped (e.g. the Translate "Show Original" action). It is
+// triggered by the banner button. |webState| cannot be nil.
+- (void)infobarWasReverted:(InfobarType)infobarType
+               forWebState:(web::WebState*)webState;
+
 // Called whenever an InfobarBanner of type |infobarType| in |webState| was
 // presented. |webState| cannot be nil.
 - (void)infobarBannerWasPresented:(InfobarType)infobarType
diff --git a/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm b/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
index f1ceb4a..3b0d2e14 100644
--- a/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
+++ b/ios/chrome/browser/ui/infobars/infobar_container_mediator.mm
@@ -107,6 +107,16 @@
     infobarBadgeTabHelper->UpdateBadgeForInfobarAccepted(infobarType);
 }
 
+- (void)infobarWasReverted:(InfobarType)infobarType
+               forWebState:(web::WebState*)webState {
+  DCHECK(webState);
+  DCHECK_EQ(webState, self.webStateList->GetActiveWebState());
+  InfobarBadgeTabHelper* infobarBadgeTabHelper =
+      InfobarBadgeTabHelper::FromWebState(webState);
+  DCHECK(infobarBadgeTabHelper);
+  infobarBadgeTabHelper->UpdateBadgeForInfobarReverted(infobarType);
+}
+
 - (void)infobarBannerWasPresented:(InfobarType)infobarType
                       forWebState:(web::WebState*)webState {
   DCHECK(webState);
diff --git a/media/BUILD.gn b/media/BUILD.gn
index 5483e0d..05adced 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -21,7 +21,6 @@
     "ALTERNATE_CDM_STORAGE_ID_KEY=\"$alternate_cdm_storage_id_key\"",
     "CDM_PLATFORM_SPECIFIC_PATH=\"$cdm_platform_specific_path\"",
     "ENABLE_PLATFORM_AC3_EAC3_AUDIO=$enable_platform_ac3_eac3_audio",
-    "ENABLE_CBCS_ENCRYPTION_SCHEME=$enable_cbcs_encryption_scheme",
     "ENABLE_CDM_HOST_VERIFICATION=$enable_cdm_host_verification",
     "ENABLE_CDM_PROXY=$enable_cdm_proxy",
     "ENABLE_CDM_STORAGE_ID=$enable_cdm_storage_id",
diff --git a/media/base/mock_filters.cc b/media/base/mock_filters.cc
index fe8d3cf8..85f9ed7a 100644
--- a/media/base/mock_filters.cc
+++ b/media/base/mock_filters.cc
@@ -23,26 +23,10 @@
 MockPipeline::MockPipeline() = default;
 MockPipeline::~MockPipeline() = default;
 
-void MockPipeline::Start(StartType start_type,
-                         Demuxer* demuxer,
-                         std::unique_ptr<Renderer> renderer,
-                         Client* client,
-                         const PipelineStatusCB& seek_cb) {
-  Start(start_type, demuxer, &renderer, client, seek_cb);
-}
-
-void MockPipeline::Resume(std::unique_ptr<Renderer> renderer,
-                          base::TimeDelta timestamp,
-                          const PipelineStatusCB& seek_cb) {
-  Resume(&renderer, timestamp, seek_cb);
-}
-
 MockMediaResource::MockMediaResource() = default;
-
 MockMediaResource::~MockMediaResource() = default;
 
 MockDemuxer::MockDemuxer() = default;
-
 MockDemuxer::~MockDemuxer() = default;
 
 std::string MockDemuxer::GetDisplayName() const {
@@ -124,6 +108,10 @@
 
 MockRenderer::~MockRenderer() = default;
 
+MockRendererFactory::MockRendererFactory() = default;
+
+MockRendererFactory::~MockRendererFactory() = default;
+
 MockTimeSource::MockTimeSource() = default;
 
 MockTimeSource::~MockTimeSource() = default;
diff --git a/media/base/mock_filters.h b/media/base/mock_filters.h
index d645f4b5..3a9a1c8 100644
--- a/media/base/mock_filters.h
+++ b/media/base/mock_filters.h
@@ -33,6 +33,7 @@
 #include "media/base/pipeline_status.h"
 #include "media/base/renderer.h"
 #include "media/base/renderer_client.h"
+#include "media/base/renderer_factory.h"
 #include "media/base/stream_parser.h"
 #include "media/base/text_track.h"
 #include "media/base/text_track_config.h"
@@ -75,23 +76,12 @@
   MockPipeline();
   ~MockPipeline() override;
 
-  // Note: Start() and Resume() declarations are not actually overrides; they
-  // take unique_ptr* instead of unique_ptr so that they can be mock methods.
-  // Private stubs for Start() and Resume() implement the actual Pipeline
-  // interface by forwarding to these mock methods.
-  MOCK_METHOD5(Start,
-               void(StartType start_type,
-                    Demuxer*,
-                    std::unique_ptr<Renderer>*,
-                    Client*,
-                    const PipelineStatusCB&));
+  MOCK_METHOD4(Start,
+               void(StartType, Demuxer*, Client*, const PipelineStatusCB&));
   MOCK_METHOD0(Stop, void());
   MOCK_METHOD2(Seek, void(base::TimeDelta, const PipelineStatusCB&));
   MOCK_METHOD1(Suspend, void(const PipelineStatusCB&));
-  MOCK_METHOD3(Resume,
-               void(std::unique_ptr<Renderer>*,
-                    base::TimeDelta,
-                    const PipelineStatusCB&));
+  MOCK_METHOD2(Resume, void(base::TimeDelta, const PipelineStatusCB&));
   MOCK_METHOD2(OnEnabledAudioTracksChanged,
                void(const std::vector<MediaTrack::Id>&, base::OnceClosure));
   MOCK_METHOD2(OnSelectedVideoTrackChanged,
@@ -123,16 +113,6 @@
                void(CdmContext* cdm_context, CdmAttachedCB& cdm_attached_cb));
 
  private:
-  // Forwarding stubs (see comment above).
-  void Start(StartType start_type,
-             Demuxer* demuxer,
-             std::unique_ptr<Renderer> renderer,
-             Client* client,
-             const PipelineStatusCB& seek_cb) override;
-  void Resume(std::unique_ptr<Renderer> renderer,
-              base::TimeDelta timestamp,
-              const PipelineStatusCB& seek_cb) override;
-
   DISALLOW_COPY_AND_ASSIGN(MockPipeline);
 };
 
@@ -383,6 +363,25 @@
   DISALLOW_COPY_AND_ASSIGN(MockRenderer);
 };
 
+class MockRendererFactory : public RendererFactory {
+ public:
+  MockRendererFactory();
+  ~MockRendererFactory() override;
+
+  // Renderer implementation.
+  MOCK_METHOD6(CreateRenderer,
+               std::unique_ptr<Renderer>(
+                   const scoped_refptr<base::SingleThreadTaskRunner>&,
+                   const scoped_refptr<base::TaskRunner>&,
+                   AudioRendererSink*,
+                   VideoRendererSink*,
+                   const RequestOverlayInfoCB&,
+                   const gfx::ColorSpace&));
+
+ private:
+  DISALLOW_COPY_AND_ASSIGN(MockRendererFactory);
+};
+
 class MockTimeSource : public TimeSource {
  public:
   MockTimeSource();
diff --git a/media/base/pipeline.h b/media/base/pipeline.h
index 3ceb0e48..cbeef34 100644
--- a/media/base/pipeline.h
+++ b/media/base/pipeline.h
@@ -27,7 +27,6 @@
 namespace media {
 
 class Demuxer;
-class Renderer;
 
 class MEDIA_EXPORT Pipeline {
  public:
@@ -95,17 +94,16 @@
     kSuspendAfterMetadata,              // Always suspend after metadata.
   };
 
-  // Build a pipeline to using the given |demuxer| and |renderer| to construct
-  // a filter chain, executing |seek_cb| when the initial seek has completed.
-  // Methods on PipelineClient may be called up until Stop() has completed.
-  // It is an error to call this method after the pipeline has already started.
+  // Build a pipeline to using the given |demuxer| to construct a filter chain,
+  // executing |seek_cb| when the initial seek has completed. Methods on
+  // PipelineClient may be called up until Stop() has completed. It is an error
+  // to call this method after the pipeline has already started.
   //
   // If a |start_type| is specified which allows suspension, pipeline startup
   // will halt after metadata has been retrieved and the pipeline will be in a
   // suspended state.
   virtual void Start(StartType start_type,
                      Demuxer* demuxer,
-                     std::unique_ptr<Renderer> renderer,
                      Client* client,
                      const PipelineStatusCB& seek_cb) = 0;
 
@@ -175,12 +173,11 @@
   // seeking.
   virtual void Suspend(const PipelineStatusCB& suspend_cb) = 0;
 
-  // Resume the pipeline with a new renderer, and initialize it with a seek.
+  // Resume the pipeline and seek to |timestamp|.
   //
   // It is an error to call this method if the pipeline has not finished
   // suspending.
-  virtual void Resume(std::unique_ptr<Renderer> renderer,
-                      base::TimeDelta timestamp,
+  virtual void Resume(base::TimeDelta timestamp,
                       const PipelineStatusCB& seek_cb) = 0;
 
   // Returns true if the pipeline has been started via Start().  If IsRunning()
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index a237b850..c126e5d 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -49,17 +49,17 @@
  public:
   RendererWrapper(scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
                   scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+                  CreateRendererCB create_renderer_cb,
                   MediaLog* media_log);
   ~RendererWrapper() final;
 
   void Start(StartType start_type,
              Demuxer* demuxer,
-             std::unique_ptr<Renderer> renderer,
              base::WeakPtr<PipelineImpl> weak_pipeline);
   void Stop();
   void Seek(base::TimeDelta time);
   void Suspend();
-  void Resume(std::unique_ptr<Renderer> renderer, base::TimeDelta time);
+  void Resume(base::TimeDelta time);
   void SetPlaybackRate(double playback_rate);
   void SetVolume(float volume);
   base::TimeDelta GetMediaTime() const;
@@ -151,12 +151,16 @@
   void CompleteSeek(base::TimeDelta seek_time, PipelineStatus status);
   void CompleteSuspend(PipelineStatus status);
   void InitializeDemuxer(PipelineStatusCallback done_cb);
+  void CreateRenderer(PipelineStatusCallback done_cb);
+  void OnRendererCreated(PipelineStatusCallback done_cb,
+                         std::unique_ptr<Renderer> renderer);
   void InitializeRenderer(PipelineStatusCallback done_cb);
   void DestroyRenderer();
   void ReportMetadata(StartType start_type);
 
   const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
   const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
+  CreateRendererCB create_renderer_cb_;
   MediaLog* const media_log_;
 
   base::WeakPtr<PipelineImpl> weak_pipeline_;
@@ -198,9 +202,11 @@
 PipelineImpl::RendererWrapper::RendererWrapper(
     scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+    CreateRendererCB create_renderer_cb,
     MediaLog* media_log)
     : media_task_runner_(std::move(media_task_runner)),
       main_task_runner_(std::move(main_task_runner)),
+      create_renderer_cb_(create_renderer_cb),
       media_log_(media_log),
       demuxer_(nullptr),
       playback_rate_(kDefaultPlaybackRate),
@@ -225,26 +231,16 @@
 void PipelineImpl::RendererWrapper::Start(
     StartType start_type,
     Demuxer* demuxer,
-    std::unique_ptr<Renderer> renderer,
     base::WeakPtr<PipelineImpl> weak_pipeline) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
   DCHECK(state_ == kCreated || state_ == kStopped)
       << "Received start in unexpected state: " << state_;
-
-  // Tracking down http://crbug.com/827990
-  CHECK(renderer);
-
-  SetState(kStarting);
-
   DCHECK(!demuxer_);
   DCHECK(!renderer_ended_);
   DCHECK(!text_renderer_ended_);
+
+  SetState(kStarting);
   demuxer_ = demuxer;
-  {
-    base::AutoLock auto_lock(shared_state_lock_);
-    DCHECK(!shared_state_.renderer);
-    shared_state_.renderer = std::move(renderer);
-  }
   weak_pipeline_ = weak_pipeline;
 
   // Setup |error_cb_| on the media thread.
@@ -265,6 +261,10 @@
   fns.Push(base::BindOnce(&RendererWrapper::ReportMetadata,
                           weak_factory_.GetWeakPtr(), start_type));
 
+  // Create renderer.
+  fns.Push(base::BindOnce(&RendererWrapper::CreateRenderer,
+                          weak_factory_.GetWeakPtr()));
+
   // Initialize renderer.
   fns.Push(base::BindOnce(&RendererWrapper::InitializeRenderer,
                           weak_factory_.GetWeakPtr()));
@@ -381,13 +381,9 @@
                                           weak_factory_.GetWeakPtr()));
 }
 
-void PipelineImpl::RendererWrapper::Resume(std::unique_ptr<Renderer> renderer,
-                                           base::TimeDelta timestamp) {
+void PipelineImpl::RendererWrapper::Resume(base::TimeDelta timestamp) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
 
-  // Tracking down http://crbug.com/827990
-  CHECK(renderer);
-
   // Suppress resuming if we're not suspended.
   if (state_ != kSuspended) {
     DCHECK(state_ == kStopping || state_ == kStopped)
@@ -402,7 +398,6 @@
   {
     base::AutoLock auto_lock(shared_state_lock_);
     DCHECK(!shared_state_.renderer);
-    shared_state_.renderer = std::move(renderer);
   }
 
   renderer_ended_ = false;
@@ -416,6 +411,9 @@
   fns.Push(base::BindRepeating(&Demuxer::Seek, base::Unretained(demuxer_),
                                start_timestamp));
 
+  fns.Push(base::BindOnce(&RendererWrapper::CreateRenderer,
+                          weak_factory_.GetWeakPtr()));
+
   fns.Push(base::BindOnce(&RendererWrapper::InitializeRenderer,
                           weak_factory_.GetWeakPtr()));
 
@@ -887,6 +885,37 @@
   demuxer_->Initialize(this, std::move(done_cb));
 }
 
+void PipelineImpl::RendererWrapper::CreateRenderer(
+    PipelineStatusCallback done_cb) {
+  DVLOG(1) << __func__;
+  DCHECK(media_task_runner_->BelongsToCurrentThread());
+
+  // Use BindToCurrentLoop to make sure OnRendererCreated() is called on the
+  // media task runner.
+  create_renderer_cb_.Run(BindToCurrentLoop(
+      base::BindOnce(&RendererWrapper::OnRendererCreated,
+                     weak_factory_.GetWeakPtr(), std::move(done_cb))));
+}
+
+void PipelineImpl::RendererWrapper::OnRendererCreated(
+    PipelineStatusCallback done_cb,
+    std::unique_ptr<Renderer> renderer) {
+  DVLOG(1) << __func__ << ": renderer=" << renderer.get();
+  DCHECK(media_task_runner_->BelongsToCurrentThread());
+
+  if (!renderer) {
+    std::move(done_cb).Run(PIPELINE_ERROR_INITIALIZATION_FAILED);
+    return;
+  }
+
+  {
+    base::AutoLock auto_lock(shared_state_lock_);
+    DCHECK(!shared_state_.renderer);
+    shared_state_.renderer = std::move(renderer);
+  }
+  std::move(done_cb).Run(PIPELINE_OK);
+}
+
 void PipelineImpl::RendererWrapper::InitializeRenderer(
     PipelineStatusCallback done_cb) {
   DCHECK(media_task_runner_->BelongsToCurrentThread());
@@ -990,6 +1019,7 @@
 PipelineImpl::PipelineImpl(
     scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
     scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+    CreateRendererCB create_renderer_cb,
     MediaLog* media_log)
     : media_task_runner_(media_task_runner),
       media_log_(media_log),
@@ -998,8 +1028,9 @@
       volume_(kDefaultVolume),
       is_suspended_(false) {
   DVLOG(2) << __func__;
-  renderer_wrapper_.reset(new RendererWrapper(
-      media_task_runner_, std::move(main_task_runner), media_log_));
+  renderer_wrapper_.reset(
+      new RendererWrapper(media_task_runner_, std::move(main_task_runner),
+                          std::move(create_renderer_cb), media_log_));
 }
 
 PipelineImpl::~PipelineImpl() {
@@ -1016,13 +1047,11 @@
 
 void PipelineImpl::Start(StartType start_type,
                          Demuxer* demuxer,
-                         std::unique_ptr<Renderer> renderer,
                          Client* client,
                          const PipelineStatusCB& seek_cb) {
   DVLOG(2) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(demuxer);
-  DCHECK(renderer);
   DCHECK(client);
   DCHECK(seek_cb);
 
@@ -1034,10 +1063,10 @@
   seek_time_ = kNoTimestamp;
 
   media_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&RendererWrapper::Start,
-                                base::Unretained(renderer_wrapper_.get()),
-                                start_type, demuxer, base::Passed(&renderer),
-                                weak_factory_.GetWeakPtr()));
+      FROM_HERE,
+      base::BindOnce(&RendererWrapper::Start,
+                     base::Unretained(renderer_wrapper_.get()), start_type,
+                     demuxer, weak_factory_.GetWeakPtr()));
 }
 
 void PipelineImpl::Stop() {
@@ -1104,12 +1133,10 @@
                                 base::Unretained(renderer_wrapper_.get())));
 }
 
-void PipelineImpl::Resume(std::unique_ptr<Renderer> renderer,
-                          base::TimeDelta time,
+void PipelineImpl::Resume(base::TimeDelta time,
                           const PipelineStatusCB& seek_cb) {
   DVLOG(2) << __func__;
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(renderer);
   DCHECK(seek_cb);
 
   DCHECK(IsRunning());
@@ -1119,9 +1146,9 @@
   last_media_time_ = base::TimeDelta();
 
   media_task_runner_->PostTask(
-      FROM_HERE, base::BindOnce(&RendererWrapper::Resume,
-                                base::Unretained(renderer_wrapper_.get()),
-                                base::Passed(&renderer), time));
+      FROM_HERE,
+      base::BindOnce(&RendererWrapper::Resume,
+                     base::Unretained(renderer_wrapper_.get()), time));
 }
 
 bool PipelineImpl::IsRunning() const {
diff --git a/media/base/pipeline_impl.h b/media/base/pipeline_impl.h
index 7800afc..15c9a67d 100644
--- a/media/base/pipeline_impl.h
+++ b/media/base/pipeline_impl.h
@@ -13,6 +13,7 @@
 #include "base/threading/thread_checker.h"
 #include "media/base/media_export.h"
 #include "media/base/pipeline.h"
+#include "media/base/renderer.h"
 
 namespace base {
 class SingleThreadTaskRunner;
@@ -22,6 +23,10 @@
 
 class MediaLog;
 
+// Callbacks used for Renderer creation.
+using RendererCreatedCB = base::OnceCallback<void(std::unique_ptr<Renderer>)>;
+using CreateRendererCB = base::RepeatingCallback<void(RendererCreatedCB)>;
+
 // Pipeline runs the media pipeline.  Filters are created and called on the
 // task runner injected into this object. Pipeline works like a state
 // machine to perform asynchronous initialization, pausing, seeking and playing.
@@ -70,23 +75,22 @@
  public:
   // Constructs a media pipeline that will execute media tasks on
   // |media_task_runner|.
+  // |create_renderer_cb|: to create renderers when starting and resuming.
   PipelineImpl(scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
                scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
+               CreateRendererCB create_renderer_cb,
                MediaLog* media_log);
   ~PipelineImpl() override;
 
   // Pipeline implementation.
   void Start(StartType start_type,
              Demuxer* demuxer,
-             std::unique_ptr<Renderer> renderer,
              Client* client,
              const PipelineStatusCB& seek_cb) override;
   void Stop() override;
   void Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) override;
   void Suspend(const PipelineStatusCB& suspend_cb) override;
-  void Resume(std::unique_ptr<Renderer> renderer,
-              base::TimeDelta time,
-              const PipelineStatusCB& seek_cb) override;
+  void Resume(base::TimeDelta time, const PipelineStatusCB& seek_cb) override;
   bool IsRunning() const override;
   bool IsSuspended() const override;
   double GetPlaybackRate() const override;
diff --git a/media/base/pipeline_impl_unittest.cc b/media/base/pipeline_impl_unittest.cc
index dcb09b6..8a99a09 100644
--- a/media/base/pipeline_impl_unittest.cc
+++ b/media/base/pipeline_impl_unittest.cc
@@ -103,14 +103,18 @@
   };
 
   PipelineImplTest()
-      : pipeline_(new PipelineImpl(task_environment_.GetMainThreadTaskRunner(),
-                                   task_environment_.GetMainThreadTaskRunner(),
-                                   &media_log_)),
-        demuxer_(new StrictMock<MockDemuxer>()),
+      : demuxer_(new StrictMock<MockDemuxer>()),
         demuxer_host_(nullptr),
         scoped_renderer_(new StrictMock<MockRenderer>()),
         renderer_(scoped_renderer_.get()),
         renderer_client_(nullptr) {
+    pipeline_ = std::make_unique<PipelineImpl>(
+        task_environment_.GetMainThreadTaskRunner(),
+        task_environment_.GetMainThreadTaskRunner(),
+        base::BindRepeating(&PipelineImplTest::CreateRenderer,
+                            base::Unretained(this)),
+        &media_log_);
+
     // SetDemuxerExpectations() adds overriding expectations for expected
     // non-NULL streams.
     std::vector<DemuxerStream*> empty;
@@ -182,7 +186,7 @@
       Pipeline::StartType start_type = Pipeline::StartType::kNormal) {
     EXPECT_CALL(callbacks_, OnWaiting(_)).Times(0);
     pipeline_->Start(
-        start_type, demuxer_.get(), std::move(scoped_renderer_), &callbacks_,
+        start_type, demuxer_.get(), &callbacks_,
         base::Bind(&CallbackHelper::OnStart, base::Unretained(&callbacks_)));
   }
 
@@ -273,10 +277,14 @@
     pipeline_->Suspend(
         base::Bind(&CallbackHelper::OnSuspend, base::Unretained(&callbacks_)));
     base::RunLoop().RunUntilIdle();
-    CreateRenderer();
+    ResetRenderer();
   }
 
-  void CreateRenderer() {
+  void CreateRenderer(RendererCreatedCB renderer_created_cb) {
+    std::move(renderer_created_cb).Run(std::move(scoped_renderer_));
+  }
+
+  void ResetRenderer() {
     // |renderer_| has been deleted, replace it.
     scoped_renderer_.reset(new StrictMock<MockRenderer>());
     renderer_ = scoped_renderer_.get();
@@ -298,9 +306,8 @@
   }
 
   void DoResume(const base::TimeDelta& seek_time) {
-    pipeline_->Resume(
-        std::move(scoped_renderer_), seek_time,
-        base::Bind(&CallbackHelper::OnResume, base::Unretained(&callbacks_)));
+    pipeline_->Resume(seek_time, base::Bind(&CallbackHelper::OnResume,
+                                            base::Unretained(&callbacks_)));
     base::RunLoop().RunUntilIdle();
   }
 
@@ -418,7 +425,7 @@
                          PostStartStatus::kSuspended);
   ASSERT_TRUE(pipeline_->IsSuspended());
 
-  CreateRenderer();
+  ResetRenderer();
   base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
   ExpectResume(expected);
   DoResume(expected);
@@ -437,7 +444,7 @@
                          PostStartStatus::kSuspended);
   ASSERT_TRUE(pipeline_->IsSuspended());
 
-  CreateRenderer();
+  ResetRenderer();
   base::TimeDelta expected = base::TimeDelta::FromSeconds(2000);
   ExpectResume(expected);
   DoResume(expected);
@@ -900,7 +907,7 @@
 
   base::RunLoop().RunUntilIdle();
 
-  CreateRenderer();
+  ResetRenderer();
   SetDemuxerExpectations(&streams);
   SetRendererExpectations();
   StartPipelineAndExpect(PIPELINE_OK);
diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
index 72cc3560..11e2df6 100644
--- a/media/blink/webmediaplayer_impl.cc
+++ b/media/blink/webmediaplayer_impl.cc
@@ -338,10 +338,11 @@
   weak_this_ = weak_factory_.GetWeakPtr();
 
   pipeline_controller_ = std::make_unique<PipelineController>(
-      std::make_unique<PipelineImpl>(media_task_runner_, main_task_runner_,
-                                     media_log_.get()),
-      base::BindRepeating(&WebMediaPlayerImpl::CreateRenderer,
-                          base::Unretained(this)),
+      std::make_unique<PipelineImpl>(
+          media_task_runner_, main_task_runner_,
+          BindToCurrentLoop(base::BindRepeating(
+              &WebMediaPlayerImpl::CreateRenderer, weak_this_)),
+          media_log_.get()),
       base::BindRepeating(&WebMediaPlayerImpl::OnPipelineSeeked, weak_this_),
       base::BindRepeating(&WebMediaPlayerImpl::OnPipelineSuspended, weak_this_),
       base::BindRepeating(&WebMediaPlayerImpl::OnBeforePipelineResume,
@@ -1720,7 +1721,7 @@
 }
 
 void WebMediaPlayerImpl::OnError(PipelineStatus status) {
-  DVLOG(1) << __func__;
+  DVLOG(1) << __func__ << ": status=" << status;
   DCHECK(main_task_runner_->BelongsToCurrentThread());
   DCHECK_NE(status, PIPELINE_OK);
 
@@ -2614,7 +2615,7 @@
   }
 }
 
-std::unique_ptr<Renderer> WebMediaPlayerImpl::CreateRenderer() {
+void WebMediaPlayerImpl::CreateRenderer(RendererCreatedCB renderer_created_cb) {
   DCHECK(main_task_runner_->BelongsToCurrentThread());
 
   // Make sure that overlays are enabled if they're always allowed.
@@ -2627,9 +2628,14 @@
       base::Bind(&WebMediaPlayerImpl::OnOverlayInfoRequested, weak_this_));
 #endif
   reported_renderer_type_ = renderer_factory_selector_->GetCurrentFactoryType();
-  return renderer_factory_selector_->GetCurrentFactory()->CreateRenderer(
-      media_task_runner_, worker_task_runner_, audio_source_provider_.get(),
-      compositor_.get(), request_overlay_info_cb, client_->TargetColorSpace());
+
+  auto renderer =
+      renderer_factory_selector_->GetCurrentFactory()->CreateRenderer(
+          media_task_runner_, worker_task_runner_, audio_source_provider_.get(),
+          compositor_.get(), request_overlay_info_cb,
+          client_->TargetColorSpace());
+
+  std::move(renderer_created_cb).Run(std::move(renderer));
 }
 
 void WebMediaPlayerImpl::StartPipeline() {
diff --git a/media/blink/webmediaplayer_impl.h b/media/blink/webmediaplayer_impl.h
index e82a9b6..6e347ea 100644
--- a/media/blink/webmediaplayer_impl.h
+++ b/media/blink/webmediaplayer_impl.h
@@ -377,7 +377,7 @@
       const ProvideOverlayInfoCB& provide_overlay_info_cb);
 
   // Creates a Renderer via the |renderer_factory_selector_|.
-  std::unique_ptr<Renderer> CreateRenderer();
+  void CreateRenderer(RendererCreatedCB renderer_created_cb);
 
   // Finishes starting the pipeline due to a call to load().
   void StartPipeline();
diff --git a/media/filters/pipeline_controller.cc b/media/filters/pipeline_controller.cc
index 6df6e416e..87401c6 100644
--- a/media/filters/pipeline_controller.cc
+++ b/media/filters/pipeline_controller.cc
@@ -11,21 +11,18 @@
 
 PipelineController::PipelineController(
     std::unique_ptr<Pipeline> pipeline,
-    const RendererFactoryCB& renderer_factory_cb,
     const SeekedCB& seeked_cb,
     const SuspendedCB& suspended_cb,
     const BeforeResumeCB& before_resume_cb,
     const ResumedCB& resumed_cb,
     const PipelineStatusCB& error_cb)
     : pipeline_(std::move(pipeline)),
-      renderer_factory_cb_(renderer_factory_cb),
       seeked_cb_(seeked_cb),
       suspended_cb_(suspended_cb),
       before_resume_cb_(before_resume_cb),
       resumed_cb_(resumed_cb),
       error_cb_(error_cb) {
   DCHECK(pipeline_);
-  DCHECK(renderer_factory_cb_);
   DCHECK(seeked_cb_);
   DCHECK(suspended_cb_);
   DCHECK(before_resume_cb_);
@@ -55,7 +52,7 @@
   demuxer_ = demuxer;
   is_streaming_ = is_streaming;
   is_static_ = is_static;
-  pipeline_->Start(start_type, demuxer, renderer_factory_cb_.Run(), client,
+  pipeline_->Start(start_type, demuxer, client,
                    base::Bind(&PipelineController::OnPipelineStatus,
                               weak_factory_.GetWeakPtr(),
                               start_type == Pipeline::StartType::kNormal
@@ -257,7 +254,7 @@
     pending_resume_ = false;
     state_ = State::RESUMING;
     before_resume_cb_.Run();
-    pipeline_->Resume(renderer_factory_cb_.Run(), seek_time_,
+    pipeline_->Resume(seek_time_,
                       base::Bind(&PipelineController::OnPipelineStatus,
                                  weak_factory_.GetWeakPtr(), State::PLAYING));
     return;
diff --git a/media/filters/pipeline_controller.h b/media/filters/pipeline_controller.h
index 6aad7e3..ff4fbd1 100644
--- a/media/filters/pipeline_controller.h
+++ b/media/filters/pipeline_controller.h
@@ -41,7 +41,6 @@
     RESUMING,
   };
 
-  using RendererFactoryCB = base::Callback<std::unique_ptr<Renderer>(void)>;
   using SeekedCB = base::Callback<void(bool time_updated)>;
   using SuspendedCB = base::Callback<void()>;
   using BeforeResumeCB = base::Callback<void()>;
@@ -49,16 +48,13 @@
 
   // Construct a PipelineController wrapping |pipeline_|.
   // The callbacks are:
-  //   - |renderer_factory_cb| is called by PipelineController to create new
-  //     renderers when starting and resuming.
-  //   - |seeked_cb| is called upon reaching a stable state if a seek occured.
+  //   - |seeked_cb| is called upon reaching a stable state if a seek occurred.
   //   - |suspended_cb| is called immediately after suspending.
   //   - |before_resume_cb| is called immediately before resuming.
   //   - |resumed_cb| is called immediately after resuming.
   //   - |error_cb| is called if any operation on |pipeline_| does not result
   //     in PIPELINE_OK or its error callback is called.
   PipelineController(std::unique_ptr<Pipeline> pipeline,
-                     const RendererFactoryCB& renderer_factory_cb,
                      const SeekedCB& seeked_cb,
                      const SuspendedCB& suspended_cb,
                      const BeforeResumeCB& before_resume_cb,
@@ -159,9 +155,6 @@
   // The Pipeline we are managing state for.
   std::unique_ptr<Pipeline> pipeline_;
 
-  // Factory for Renderers, used for Start() and Resume().
-  RendererFactoryCB renderer_factory_cb_;
-
   // Called after seeks (which includes Start()) upon reaching a stable state.
   // Multiple seeks result in only one callback if no stable state occurs
   // between them.
diff --git a/media/filters/pipeline_controller_unittest.cc b/media/filters/pipeline_controller_unittest.cc
index a0137a8..d30b0fa 100644
--- a/media/filters/pipeline_controller_unittest.cc
+++ b/media/filters/pipeline_controller_unittest.cc
@@ -37,8 +37,6 @@
   PipelineControllerTest()
       : pipeline_(new StrictMock<MockPipeline>()),
         pipeline_controller_(std::unique_ptr<Pipeline>(pipeline_),
-                             base::Bind(&PipelineControllerTest::CreateRenderer,
-                                        base::Unretained(this)),
                              base::Bind(&PipelineControllerTest::OnSeeked,
                                         base::Unretained(this)),
                              base::Bind(&PipelineControllerTest::OnSuspended,
@@ -55,8 +53,7 @@
   PipelineStatusCB StartPipeline(bool is_streaming, bool is_static) {
     EXPECT_FALSE(pipeline_controller_.IsStable());
     PipelineStatusCB start_cb;
-    EXPECT_CALL(*pipeline_, Start(_, _, _, _, _))
-        .WillOnce(SaveArg<4>(&start_cb));
+    EXPECT_CALL(*pipeline_, Start(_, _, _, _)).WillOnce(SaveArg<3>(&start_cb));
     pipeline_controller_.Start(Pipeline::StartType::kNormal, &demuxer_, this,
                                is_streaming, is_static);
     Mock::VerifyAndClear(pipeline_);
@@ -105,9 +102,9 @@
   PipelineStatusCB ResumePipeline() {
     EXPECT_TRUE(pipeline_controller_.IsPipelineSuspended());
     PipelineStatusCB resume_cb;
-    EXPECT_CALL(*pipeline_, Resume(_, _, _))
+    EXPECT_CALL(*pipeline_, Resume(_, _))
         .WillOnce(
-            DoAll(SaveArg<1>(&last_resume_time_), SaveArg<2>(&resume_cb)));
+            DoAll(SaveArg<0>(&last_resume_time_), SaveArg<1>(&resume_cb)));
     EXPECT_CALL(*pipeline_, GetMediaTime())
         .WillRepeatedly(Return(base::TimeDelta()));
     pipeline_controller_.Resume();
@@ -127,10 +124,6 @@
   }
 
  protected:
-  std::unique_ptr<Renderer> CreateRenderer() {
-    return std::unique_ptr<Renderer>();
-  }
-
   void OnSeeked(bool time_updated) {
     was_seeked_ = true;
     last_seeked_time_updated_ = time_updated;
@@ -188,7 +181,7 @@
 TEST_F(PipelineControllerTest, StartSuspendedSeekAndResume) {
   EXPECT_FALSE(pipeline_controller_.IsStable());
   PipelineStatusCB start_cb;
-  EXPECT_CALL(*pipeline_, Start(_, _, _, _, _)).WillOnce(SaveArg<4>(&start_cb));
+  EXPECT_CALL(*pipeline_, Start(_, _, _, _)).WillOnce(SaveArg<3>(&start_cb));
   pipeline_controller_.Start(Pipeline::StartType::kSuspendAfterMetadata,
                              &demuxer_, this, false, true);
   Mock::VerifyAndClear(pipeline_);
@@ -201,8 +194,7 @@
   EXPECT_FALSE(was_seeked_);
 
   PipelineStatusCB resume_cb;
-  EXPECT_CALL(*pipeline_, Resume(_, _, _))
-      .WillOnce(DoAll(SaveArg<2>(&resume_cb)));
+  EXPECT_CALL(*pipeline_, Resume(_, _)).WillOnce(DoAll(SaveArg<1>(&resume_cb)));
   EXPECT_CALL(*pipeline_, GetMediaTime())
       .WillRepeatedly(Return(base::TimeDelta()));
 
@@ -229,7 +221,7 @@
 TEST_F(PipelineControllerTest, StartSuspendedAndResume) {
   EXPECT_FALSE(pipeline_controller_.IsStable());
   PipelineStatusCB start_cb;
-  EXPECT_CALL(*pipeline_, Start(_, _, _, _, _)).WillOnce(SaveArg<4>(&start_cb));
+  EXPECT_CALL(*pipeline_, Start(_, _, _, _)).WillOnce(SaveArg<3>(&start_cb));
   pipeline_controller_.Start(Pipeline::StartType::kSuspendAfterMetadata,
                              &demuxer_, this, false, true);
   Mock::VerifyAndClear(pipeline_);
diff --git a/media/formats/mp4/box_definitions.cc b/media/formats/mp4/box_definitions.cc
index 84e5c36..7352d9c 100644
--- a/media/formats/mp4/box_definitions.cc
+++ b/media/formats/mp4/box_definitions.cc
@@ -297,15 +297,10 @@
 
 TrackEncryption::TrackEncryption()
     : is_encrypted(false),
-      default_iv_size(0)
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
-      ,
+      default_iv_size(0),
       default_crypt_byte_block(0),
       default_skip_byte_block(0),
-      default_constant_iv_size(0)
-#endif
-{
-}
+      default_constant_iv_size(0) {}
 TrackEncryption::TrackEncryption(const TrackEncryption& other) = default;
 TrackEncryption::~TrackEncryption() = default;
 FourCC TrackEncryption::BoxType() const { return FOURCC_TENC; }
@@ -320,7 +315,6 @@
          reader->ReadVec(&default_kid, kKeyIdSize));
   is_encrypted = (flag != 0);
   if (is_encrypted) {
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
     if (reader->version() > 0) {
       default_crypt_byte_block = (possible_pattern_info >> 4) & 0x0f;
       default_skip_byte_block = possible_pattern_info & 0x0f;
@@ -334,9 +328,6 @@
     } else {
       RCHECK(default_iv_size == 8 || default_iv_size == 16);
     }
-#else
-    RCHECK(default_iv_size == 8 || default_iv_size == 16);
-#endif
   } else {
     RCHECK(default_iv_size == 0);
   }
@@ -373,22 +364,12 @@
 
 bool ProtectionSchemeInfo::HasSupportedScheme() const {
   FourCC four_cc = type.type;
-  if (four_cc == FOURCC_CENC)
-    return true;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
-  if (four_cc == FOURCC_CBCS)
-    return true;
-#endif
-  return false;
+  return (four_cc == FOURCC_CENC || four_cc == FOURCC_CBCS);
 }
 
 bool ProtectionSchemeInfo::IsCbcsEncryptionScheme() const {
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   FourCC four_cc = type.type;
   return (four_cc == FOURCC_CBCS);
-#else
-  return false;
-#endif
 }
 
 MovieHeader::MovieHeader()
@@ -1614,15 +1595,10 @@
 
 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry()
     : is_encrypted(false),
-      iv_size(0)
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
-      ,
+      iv_size(0),
       crypt_byte_block(0),
       skip_byte_block(0),
-      constant_iv_size(0)
-#endif
-{
-}
+      constant_iv_size(0) {}
 CencSampleEncryptionInfoEntry::CencSampleEncryptionInfoEntry(
     const CencSampleEncryptionInfoEntry& other) = default;
 CencSampleEncryptionInfoEntry::~CencSampleEncryptionInfoEntry() = default;
@@ -1636,7 +1612,6 @@
 
   is_encrypted = (flag != 0);
   if (is_encrypted) {
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
     crypt_byte_block = (possible_pattern_info >> 4) & 0x0f;
     skip_byte_block = possible_pattern_info & 0x0f;
     if (iv_size == 0) {
@@ -1648,9 +1623,6 @@
     } else {
       RCHECK(iv_size == 8 || iv_size == 16);
     }
-#else
-    RCHECK(iv_size == 8 || iv_size == 16);
-#endif
   } else {
     RCHECK(iv_size == 0);
   }
diff --git a/media/formats/mp4/box_definitions.h b/media/formats/mp4/box_definitions.h
index c981b50..11ea10a 100644
--- a/media/formats/mp4/box_definitions.h
+++ b/media/formats/mp4/box_definitions.h
@@ -133,12 +133,10 @@
   bool is_encrypted;
   uint8_t default_iv_size;
   std::vector<uint8_t> default_kid;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   uint8_t default_crypt_byte_block;
   uint8_t default_skip_byte_block;
   uint8_t default_constant_iv_size;
   uint8_t default_constant_iv[kInitializationVectorSize];
-#endif
 };
 
 struct MEDIA_EXPORT SchemeInfo : Box {
@@ -357,12 +355,10 @@
   bool is_encrypted;
   uint8_t iv_size;
   std::vector<uint8_t> key_id;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   uint8_t crypt_byte_block;
   uint8_t skip_byte_block;
   uint8_t constant_iv_size;
   uint8_t constant_iv[kInitializationVectorSize];
-#endif
 };
 
 struct MEDIA_EXPORT SampleGroupDescription : Box {  // 'sgpd'.
diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
index 675c564..60fc9932 100644
--- a/media/formats/mp4/mp4_stream_parser.cc
+++ b/media/formats/mp4/mp4_stream_parser.cc
@@ -51,29 +51,23 @@
   FourCC fourcc = sinf.type.type;
   EncryptionScheme::CipherMode mode = EncryptionScheme::CIPHER_MODE_UNENCRYPTED;
   EncryptionPattern pattern;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   bool uses_pattern_encryption = false;
-#endif
   switch (fourcc) {
     case FOURCC_CENC:
       mode = EncryptionScheme::CIPHER_MODE_AES_CTR;
       break;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
     case FOURCC_CBCS:
       mode = EncryptionScheme::CIPHER_MODE_AES_CBC;
       uses_pattern_encryption = true;
       break;
-#endif
     default:
       NOTREACHED();
       break;
   }
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   if (uses_pattern_encryption) {
     pattern = {sinf.info.track_encryption.default_crypt_byte_block,
                sinf.info.track_encryption.default_skip_byte_block};
   }
-#endif
   return EncryptionScheme(mode, pattern);
 }
 }  // namespace
diff --git a/media/formats/mp4/track_run_iterator.cc b/media/formats/mp4/track_run_iterator.cc
index ba8a417..91e0f822d 100644
--- a/media/formats/mp4/track_run_iterator.cc
+++ b/media/formats/mp4/track_run_iterator.cc
@@ -57,9 +57,7 @@
   int aux_info_total_size;
 
   EncryptionMode encryption_mode;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   EncryptionPattern encryption_pattern;
-#endif  // BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
 
   std::vector<CencSampleEncryptionInfoEntry> fragment_sample_encryption_info;
 
@@ -376,17 +374,12 @@
       if (!sinf->HasSupportedScheme()) {
         tri.encryption_mode = EncryptionMode::kUnencrypted;
       } else {
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
         tri.encryption_mode = sinf->IsCbcsEncryptionScheme()
                                   ? EncryptionMode::kCbcs
                                   : EncryptionMode::kCenc;
         tri.encryption_pattern =
             EncryptionPattern(track_encryption->default_crypt_byte_block,
                               track_encryption->default_skip_byte_block);
-#else
-        DCHECK(!sinf->IsCbcsEncryptionScheme());
-        tri.encryption_mode = EncryptionMode::kCenc;
-#endif
       }
 
       // Initialize aux_info variables only if no sample encryption entries.
@@ -500,7 +493,6 @@
           SampleEncryptionEntry& entry = tri.sample_encryption_entries[k];
           RCHECK(entry.Parse(sample_encryption_reader.get(), iv_size,
                              traf.sample_encryption.use_subsample_encryption));
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
           // If we don't have a per-sample IV, get the constant IV.
           bool is_encrypted = index == 0 ? track_encryption->is_encrypted
                                          : info_entry->is_encrypted;
@@ -534,7 +526,6 @@
                            : info_entry->constant_iv;
             memcpy(entry.initialization_vector, constant_iv, constant_iv_size);
           }
-#endif  // BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
         }
       }
       runs_.push_back(tri);
@@ -620,12 +611,10 @@
       RCHECK_MEDIA_LOGGED(
           entry.Parse(&reader, iv_size, has_subsamples), media_log_,
           "SampleEncryptionEntry parse failed when caching aux info");
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
       // if we don't have a per-sample IV, get the constant IV.
       if (!iv_size) {
         RCHECK(ApplyConstantIv(i, &entry));
       }
-#endif
     }
     pos += info_size;
   }
@@ -751,7 +740,6 @@
 
   if (run_itr_->sample_encryption_entries.empty()) {
     DCHECK_EQ(0, aux_info_size());
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
     // The 'cbcs' scheme allows empty aux info when a constant IV is in use
     // with full sample encryption. That case will fall through to here.
     SampleEncryptionEntry sample_encryption_entry;
@@ -771,7 +759,6 @@
               run_itr_->encryption_pattern);
       }
     }
-#endif
     MEDIA_LOG(ERROR, media_log_) << "Sample encryption info is not available.";
     return nullptr;
   }
@@ -791,7 +778,6 @@
     return nullptr;
   }
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   if (protection_scheme_info().IsCbcsEncryptionScheme()) {
     uint32_t index = GetGroupDescriptionIndex(sample_idx);
     uint32_t encrypt_blocks =
@@ -806,7 +792,6 @@
         key_id, iv, sample_encryption_entry.subsamples,
         EncryptionPattern(encrypt_blocks, skip_blocks));
   }
-#endif
 
   return DecryptConfig::CreateCencConfig(key_id, iv,
                                          sample_encryption_entry.subsamples);
@@ -839,7 +824,6 @@
                       : GetSampleEncryptionInfoEntry(*run_itr_, index)->iv_size;
 }
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
 bool TrackRunIterator::ApplyConstantIv(size_t sample_index,
                                        SampleEncryptionEntry* entry) const {
   DCHECK(IsSampleEncrypted(sample_index));
@@ -856,7 +840,6 @@
   memcpy(entry->initialization_vector, constant_iv, kInitializationVectorSize);
   return true;
 }
-#endif
 
 }  // namespace mp4
 }  // namespace media
diff --git a/media/formats/mp4/track_run_iterator.h b/media/formats/mp4/track_run_iterator.h
index 213acd1f..7ed9f7d 100644
--- a/media/formats/mp4/track_run_iterator.h
+++ b/media/formats/mp4/track_run_iterator.h
@@ -104,9 +104,7 @@
   bool IsSampleEncrypted(size_t sample_index) const;
   uint8_t GetIvSize(size_t sample_index) const;
   const std::vector<uint8_t>& GetKeyId(size_t sample_index) const;
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   bool ApplyConstantIv(size_t sample_index, SampleEncryptionEntry* entry) const;
-#endif
 
   const Movie* moov_;
   MediaLog* media_log_;
diff --git a/media/formats/mp4/track_run_iterator_unittest.cc b/media/formats/mp4/track_run_iterator_unittest.cc
index c06c1f47..223c1781 100644
--- a/media/formats/mp4/track_run_iterator_unittest.cc
+++ b/media/formats/mp4/track_run_iterator_unittest.cc
@@ -97,7 +97,6 @@
     0x74, 0x43, 0x65, 0x6e, 0x63, 0x53, 0x61, 0x6d,
 };
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
 // Sample encryption data for two samples, using constant IV (defined by 'tenc'
 // or sample group entry).
 const uint8_t kSampleEncryptionDataWithSubsamplesAndConstantIv[] = {
@@ -137,7 +136,6 @@
     0x41, 0x54, 0x65, 0x73, 0x74, 0x49, 0x76, 0x35,
     0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
 };
-#endif
 
 }  // namespace
 
@@ -425,7 +423,6 @@
     }
   }
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
   // Update the first sample description of a Track to indicate CBCS encryption
   // with a constant IV and pattern.
   void AddEncryptionCbcs(Track* track) {
@@ -487,7 +484,6 @@
     frag->auxiliary_size.sample_info_sizes.push_back(16);
     frag->auxiliary_size.sample_info_sizes.push_back(16);
   }
-#endif
 
   bool InitMoofWithArbitraryAuxInfo(MovieFragment* moof) {
     // Add aux info header (equal sized aux info for every sample).
@@ -1017,7 +1013,6 @@
   EXPECT_EQ("2 K P P P K P", KeyframeAndRAPInfo(iter_.get()));
 }
 
-#if BUILDFLAG(ENABLE_CBCS_ENCRYPTION_SCHEME)
 TEST_F(TrackRunIteratorTest, DecryptConfigTestWithConstantIvNoAuxInfo) {
   AddEncryptionCbcs(&moov_.tracks[1]);
   iter_.reset(new TrackRunIterator(&moov_, &media_log_));
@@ -1107,7 +1102,5 @@
   EXPECT_EQ(track_encryption_iv, iter_->GetDecryptConfig()->iv());
 }
 
-#endif
-
 }  // namespace mp4
 }  // namespace media
diff --git a/media/fuchsia/common/sysmem_buffer_writer_queue.cc b/media/fuchsia/common/sysmem_buffer_writer_queue.cc
index 79a75eff6..34fedaae 100644
--- a/media/fuchsia/common/sysmem_buffer_writer_queue.cc
+++ b/media/fuchsia/common/sysmem_buffer_writer_queue.cc
@@ -126,6 +126,10 @@
   writer_.reset();
   send_packet_cb_ = SendPacketCB();
   end_of_stream_cb_ = EndOfStreamCB();
+
+  // Invalidate weak pointers, so ReleaseBuffer() is not called for the old
+  // buffers.
+  weak_factory_.InvalidateWeakPtrs();
 }
 
 void SysmemBufferWriterQueue::ResetPositionAndPause() {
diff --git a/media/media_options.gni b/media/media_options.gni
index 53c0edf..08fe4b1 100644
--- a/media/media_options.gni
+++ b/media/media_options.gni
@@ -70,11 +70,6 @@
   enable_mse_mpeg2ts_stream_parser =
       proprietary_codecs && (is_chromecast || is_fuchsia || use_fuzzing_engine)
 
-  # Enable parsing for the 'cbcs' encryption scheme added by MPEG Common
-  # Encryption 3rd Edition (ISO/IEC 23001-7), published 02/15/2016.
-  enable_cbcs_encryption_scheme =
-      is_chromecast || is_mac || is_win || is_linux || is_android
-
   # Enable HEVC/H265 demuxing. Actual decoding must be provided by the
   # platform. Enabled by default for Chromecast.
   enable_platform_hevc = proprietary_codecs && is_chromecast
diff --git a/media/remoting/integration_test.cc b/media/remoting/integration_test.cc
index 6086d81..c24e9e8 100644
--- a/media/remoting/integration_test.cc
+++ b/media/remoting/integration_test.cc
@@ -24,13 +24,9 @@
   ~TestRendererFactory() override = default;
 
   // PipelineTestRendererFactory implementation.
-  std::unique_ptr<Renderer> CreateRenderer(
-      CreateVideoDecodersCB prepend_video_decoders_cb,
-      CreateAudioDecodersCB prepend_audio_decoders_cb) override {
-    std::unique_ptr<Renderer> renderer_impl =
-        default_renderer_factory_->CreateRenderer(prepend_video_decoders_cb,
-                                                  prepend_audio_decoders_cb);
-    return std::make_unique<End2EndTestRenderer>(std::move(renderer_impl));
+  std::unique_ptr<Renderer> CreateRenderer() override {
+    return std::make_unique<End2EndTestRenderer>(
+        default_renderer_factory_->CreateRenderer());
   }
 
  private:
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 39b7349..6c3d214 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -19,6 +19,7 @@
 #include "base/power_monitor/power_monitor.h"
 #include "base/single_thread_task_runner.h"
 #include "base/time/default_tick_clock.h"
+#include "base/time/time.h"
 #include "base/trace_event/trace_event.h"
 #include "build/build_config.h"
 #include "media/audio/null_audio_sink.h"
@@ -969,6 +970,11 @@
            << " prior_frames_skipped:" << prior_frames_skipped
            << " frames_requested:" << frames_requested;
 
+  // Since this information is coming from the OS or potentially a fake stream,
+  // it may end up with spurious values.
+  if (delay < base::TimeDelta())
+    delay = base::TimeDelta();
+
   int frames_written = 0;
   {
     base::AutoLock auto_lock(lock_);
diff --git a/media/test/pipeline_integration_test_base.cc b/media/test/pipeline_integration_test_base.cc
index 1392657..f68852bb 100644
--- a/media/test/pipeline_integration_test_base.cc
+++ b/media/test/pipeline_integration_test_base.cc
@@ -114,11 +114,8 @@
   ~RendererFactoryImpl() override = default;
 
   // PipelineTestRendererFactory implementation.
-  std::unique_ptr<Renderer> CreateRenderer(
-      CreateVideoDecodersCB prepend_video_decoders_cb,
-      CreateAudioDecodersCB prepend_audio_decoders_cb) override {
-    return integration_test_->CreateRenderer(prepend_video_decoders_cb,
-                                             prepend_audio_decoders_cb);
+  std::unique_ptr<Renderer> CreateRenderer() override {
+    return integration_test_->CreateRenderer();
   }
 
  private:
@@ -133,14 +130,18 @@
       webaudio_attached_(false),
       mono_output_(false),
       fuzzing_(false),
-      pipeline_(new PipelineImpl(task_environment_.GetMainThreadTaskRunner(),
-                                 task_environment_.GetMainThreadTaskRunner(),
-                                 &media_log_)),
       ended_(false),
       pipeline_status_(PIPELINE_OK),
       last_video_frame_format_(PIXEL_FORMAT_UNKNOWN),
       current_duration_(kInfiniteDuration),
       renderer_factory_(new RendererFactoryImpl(this)) {
+  pipeline_ = std::make_unique<PipelineImpl>(
+      task_environment_.GetMainThreadTaskRunner(),
+      task_environment_.GetMainThreadTaskRunner(),
+      base::BindRepeating(&PipelineIntegrationTestBase::CreateRendererAsync,
+                          base::Unretained(this)),
+      &media_log_);
+
   ResetVideoHash();
   EXPECT_CALL(*this, OnVideoAverageKeyframeDistanceUpdate()).Times(AnyNumber());
 }
@@ -247,6 +248,9 @@
     uint8_t test_type,
     CreateVideoDecodersCB prepend_video_decoders_cb,
     CreateAudioDecodersCB prepend_audio_decoders_cb) {
+  prepend_video_decoders_cb_ = std::move(prepend_video_decoders_cb);
+  prepend_audio_decoders_cb_ = std::move(prepend_audio_decoders_cb);
+
   ParseTestTypeFlags(test_type);
 
   EXPECT_CALL(*this, OnMetadata(_))
@@ -293,10 +297,7 @@
   EXPECT_CALL(*this, OnVideoConfigChange(_)).Times(AnyNumber());
 
   base::RunLoop run_loop;
-  pipeline_->Start(Pipeline::StartType::kNormal, demuxer_.get(),
-                   renderer_factory_->CreateRenderer(prepend_video_decoders_cb,
-                                                     prepend_audio_decoders_cb),
-                   this,
+  pipeline_->Start(Pipeline::StartType::kNormal, demuxer_.get(), this,
                    base::Bind(&PipelineIntegrationTestBase::OnStatusCallback,
                               base::Unretained(this), run_loop.QuitClosure()));
   RunUntilQuitOrEndedOrError(&run_loop);
@@ -386,9 +387,7 @@
   base::RunLoop run_loop;
   EXPECT_CALL(*this, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH, _))
       .WillOnce(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
-  pipeline_->Resume(renderer_factory_->CreateRenderer(CreateVideoDecodersCB(),
-                                                      CreateAudioDecodersCB()),
-                    seek_time,
+  pipeline_->Resume(seek_time,
                     base::Bind(&PipelineIntegrationTestBase::OnSeeked,
                                base::Unretained(this), seek_time));
   RunUntilQuitOrError(&run_loop);
@@ -457,9 +456,7 @@
 #endif
 }
 
-std::unique_ptr<Renderer> PipelineIntegrationTestBase::CreateRenderer(
-    CreateVideoDecodersCB prepend_video_decoders_cb,
-    CreateAudioDecodersCB prepend_audio_decoders_cb) {
+std::unique_ptr<Renderer> PipelineIntegrationTestBase::CreateRenderer() {
   // Simulate a 60Hz rendering sink.
   video_sink_.reset(new NullVideoSink(
       clockless_playback_, base::TimeDelta::FromSecondsD(1.0 / 60),
@@ -471,7 +468,7 @@
   std::unique_ptr<VideoRenderer> video_renderer(new VideoRendererImpl(
       task_environment_.GetMainThreadTaskRunner(), video_sink_.get(),
       base::Bind(&CreateVideoDecodersForTest, &media_log_,
-                 prepend_video_decoders_cb),
+                 prepend_video_decoders_cb_),
       false, &media_log_, nullptr));
 
   if (!clockless_playback_) {
@@ -504,7 +501,7 @@
           : audio_sink_.get(),
       base::Bind(&CreateAudioDecodersForTest, &media_log_,
                  task_environment_.GetMainThreadTaskRunner(),
-                 prepend_audio_decoders_cb),
+                 prepend_audio_decoders_cb_),
       &media_log_));
   if (hashing_enabled_) {
     if (clockless_playback_)
@@ -530,6 +527,11 @@
   return std::move(renderer_impl);
 }
 
+void PipelineIntegrationTestBase::CreateRendererAsync(
+    RendererCreatedCB renderer_created_cb) {
+  std::move(renderer_created_cb).Run(CreateRenderer());
+}
+
 void PipelineIntegrationTestBase::OnVideoFramePaint(
     scoped_refptr<VideoFrame> frame) {
   last_video_frame_format_ = frame->format();
@@ -640,10 +642,7 @@
     EXPECT_CALL(*this, OnWaiting(WaitingReason::kNoDecryptionKey)).Times(0);
   }
 
-  pipeline_->Start(Pipeline::StartType::kNormal, demuxer_.get(),
-                   renderer_factory_->CreateRenderer(CreateVideoDecodersCB(),
-                                                     CreateAudioDecodersCB()),
-                   this,
+  pipeline_->Start(Pipeline::StartType::kNormal, demuxer_.get(), this,
                    base::Bind(&PipelineIntegrationTestBase::OnStatusCallback,
                               base::Unretained(this), run_loop.QuitClosure()));
 
diff --git a/media/test/pipeline_integration_test_base.h b/media/test/pipeline_integration_test_base.h
index f517a0b..5f1c6089 100644
--- a/media/test/pipeline_integration_test_base.h
+++ b/media/test/pipeline_integration_test_base.h
@@ -45,11 +45,10 @@
 
 class PipelineTestRendererFactory {
  public:
-  virtual ~PipelineTestRendererFactory() {}
+  virtual ~PipelineTestRendererFactory() = default;
+
   // Creates and returns a Renderer.
-  virtual std::unique_ptr<Renderer> CreateRenderer(
-      CreateVideoDecodersCB prepend_video_decoders_cb,
-      CreateAudioDecodersCB prepend_audio_decoders_cb) = 0;
+  virtual std::unique_ptr<Renderer> CreateRenderer() = 0;
 };
 
 // Integration tests for Pipeline. Real demuxers, real decoders, and
@@ -145,9 +144,8 @@
     audio_play_delay_cb_ = std::move(cb);
   }
 
-  std::unique_ptr<Renderer> CreateRenderer(
-      CreateVideoDecodersCB prepend_video_decoders_cb,
-      CreateAudioDecodersCB prepend_audio_decoders_cb);
+  std::unique_ptr<Renderer> CreateRenderer();
+  void CreateRendererAsync(RendererCreatedCB renderer_created_cb);
 
  protected:
   NiceMock<MockMediaLog> media_log_;
@@ -257,6 +255,9 @@
   // RunUntilQuitOrError() on it.
   void RunUntilQuitOrEndedOrError(base::RunLoop* run_loop);
 
+  CreateVideoDecodersCB prepend_video_decoders_cb_;
+  CreateAudioDecodersCB prepend_audio_decoders_cb_;
+
   base::OnceClosure on_ended_closure_;
   base::OnceClosure on_error_closure_;
 
diff --git a/net/dns/context_host_resolver_unittest.cc b/net/dns/context_host_resolver_unittest.cc
index 1ab117b..0e5ff30 100644
--- a/net/dns/context_host_resolver_unittest.cc
+++ b/net/dns/context_host_resolver_unittest.cc
@@ -11,6 +11,7 @@
 #include "base/run_loop.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/test/simple_test_tick_clock.h"
+#include "base/test/task_environment.h"
 #include "base/time/time.h"
 #include "net/base/features.h"
 #include "net/base/host_port_pair.h"
@@ -41,12 +42,22 @@
 const IPEndPoint kEndpoint(IPAddress(1, 2, 3, 4), 100);
 }
 
-class ContextHostResolverTest : public TestWithTaskEnvironment {
+class ContextHostResolverTest : public ::testing::Test,
+                                public WithTaskEnvironment {
  protected:
+  // Use mock time to prevent the HostResolverManager's injected IPv6 probe
+  // result from timing out.
+  ContextHostResolverTest()
+      : WithTaskEnvironment(
+            base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
+
+  ~ContextHostResolverTest() override = default;
+
   void SetUp() override {
     manager_ = std::make_unique<HostResolverManager>(
         HostResolver::ManagerOptions(),
         nullptr /* system_dns_config_notifier */, nullptr /* net_log */);
+    manager_->SetLastIPv6ProbeResultForTesting(true);
   }
 
   void SetMockDnsRules(MockDnsClientRuleList rules) {
@@ -511,31 +522,30 @@
                      MockDnsClientRule::Result(BuildTestDnsResponse(
                          "example.com", kEndpoint.address())),
                      false /* delay */);
+  rules.emplace_back("example.com", dns_protocol::kTypeAAAA, false /* secure */,
+                     MockDnsClientRule::Result(MockDnsClientRule::EMPTY),
+                     false /* delay */);
   SetMockDnsRules(std::move(rules));
 
   auto resolver = std::make_unique<ContextHostResolver>(
       manager_.get(), HostCache::CreateDefaultCache());
 
-  // Use DnsQueryType::A to avoid running into issues with the IPv6
-  // availablility check, which affects the cache key used.
-  HostResolver::ResolveHostParameters parameters;
-  parameters.dns_query_type = DnsQueryType::A;
   std::unique_ptr<HostResolver::ResolveHostRequest> caching_request =
       resolver->CreateRequest(HostPortPair("example.com", 103),
                               kNetworkIsolationKey, NetLogWithSource(),
-                              parameters);
+                              base::nullopt);
   TestCompletionCallback caching_callback;
   int rv = caching_request->Start(caching_callback.callback());
   EXPECT_THAT(caching_callback.GetResult(rv), test::IsOk());
 
-  HostCache::Key cache_key("example.com", DnsQueryType::A,
+  HostCache::Key cache_key("example.com", DnsQueryType::UNSPECIFIED,
                            0 /* host_resolver_flags */, HostResolverSource::ANY,
                            kNetworkIsolationKey);
   EXPECT_TRUE(
       resolver->GetHostCache()->Lookup(cache_key, base::TimeTicks::Now()));
 
   HostCache::Key cache_key_with_empty_nik(
-      "example.com", DnsQueryType::A, 0 /* host_resolver_flags */,
+      "example.com", DnsQueryType::UNSPECIFIED, 0 /* host_resolver_flags */,
       HostResolverSource::ANY, NetworkIsolationKey());
   EXPECT_FALSE(resolver->GetHostCache()->Lookup(cache_key_with_empty_nik,
                                                 base::TimeTicks::Now()));
diff --git a/net/dns/host_resolver_manager.cc b/net/dns/host_resolver_manager.cc
index 3eb8ba9f..c08cea7 100644
--- a/net/dns/host_resolver_manager.cc
+++ b/net/dns/host_resolver_manager.cc
@@ -2823,6 +2823,11 @@
   dns_client_ = std::move(dns_client);
 }
 
+void HostResolverManager::SetLastIPv6ProbeResultForTesting(
+    bool last_ipv6_probe_result) {
+  SetLastIPv6ProbeResult(last_ipv6_probe_result);
+}
+
 void HostResolverManager::SetTaskRunnerForTesting(
     scoped_refptr<base::TaskRunner> task_runner) {
   proc_task_runner_ = std::move(task_runner);
@@ -3447,9 +3452,8 @@
   bool cached = true;
   if ((tick_clock_->NowTicks() - last_ipv6_probe_time_).InMilliseconds() >
       kIPv6ProbePeriodMs) {
-    last_ipv6_probe_result_ =
-        IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log);
-    last_ipv6_probe_time_ = tick_clock_->NowTicks();
+    SetLastIPv6ProbeResult(
+        IsGloballyReachable(IPAddress(kIPv6ProbeAddress), net_log));
     cached = false;
   }
   net_log.AddEvent(
@@ -3459,6 +3463,11 @@
   return last_ipv6_probe_result_;
 }
 
+void HostResolverManager::SetLastIPv6ProbeResult(bool last_ipv6_probe_result) {
+  last_ipv6_probe_result_ = last_ipv6_probe_result;
+  last_ipv6_probe_time_ = tick_clock_->NowTicks();
+}
+
 bool HostResolverManager::IsGloballyReachable(const IPAddress& dest,
                                               const NetLogWithSource& net_log) {
   std::unique_ptr<DatagramClientSocket> socket(
diff --git a/net/dns/host_resolver_manager.h b/net/dns/host_resolver_manager.h
index 0820151..62423e7b 100644
--- a/net/dns/host_resolver_manager.h
+++ b/net/dns/host_resolver_manager.h
@@ -203,6 +203,11 @@
   // setting DnsConfig.
   void SetDnsClientForTesting(std::unique_ptr<DnsClient> dns_client);
 
+  // Sets the last IPv6 probe result for testing. Uses the standard timeout
+  // duration, so it's up to the test fixture to ensure it doesn't expire by
+  // mocking time, if expiration would pose a problem.
+  void SetLastIPv6ProbeResultForTesting(bool last_ipv6_probe_result);
+
   // Allows the tests to catch slots leaking out of the dispatcher.  One
   // HostResolverManager::Job could occupy multiple PrioritizedDispatcher job
   // slots.
@@ -376,6 +381,9 @@
   // from the first probe for some time before probing again.
   bool IsIPv6Reachable(const NetLogWithSource& net_log);
 
+  // Sets |last_ipv6_probe_result_| and updates |last_ipv6_probe_time_|.
+  void SetLastIPv6ProbeResult(bool last_ipv6_probe_result);
+
   // Attempts to connect a UDP socket to |dest|:53. Virtual for testing.
   virtual bool IsGloballyReachable(const IPAddress& dest,
                                    const NetLogWithSource& net_log);
diff --git a/net/dns/mock_host_resolver.cc b/net/dns/mock_host_resolver.cc
index a2a6ca58..b7d47fd 100644
--- a/net/dns/mock_host_resolver.cc
+++ b/net/dns/mock_host_resolver.cc
@@ -493,6 +493,7 @@
   DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
 
   last_request_priority_ = request->parameters().initial_priority;
+  last_request_network_isolation_key_ = request->network_isolation_key();
   last_secure_dns_mode_override_ =
       request->parameters().secure_dns_mode_override;
   num_resolve_++;
diff --git a/net/dns/mock_host_resolver.h b/net/dns/mock_host_resolver.h
index 41c93e5..8f3b15c 100644
--- a/net/dns/mock_host_resolver.h
+++ b/net/dns/mock_host_resolver.h
@@ -188,10 +188,17 @@
     return last_request_priority_;
   }
 
+  // Returns the NetworkIsolationKey passed in to the last call to Resolve() (or
+  // base::nullopt if Resolve() hasn't been called yet).
+  const base::Optional<NetworkIsolationKey>&
+  last_request_network_isolation_key() {
+    return last_request_network_isolation_key_;
+  }
+
   // Returns the SecureDnsMode override of the last call to Resolve() (or
   // base::nullopt if Resolve() hasn't been called yet).
-  base::Optional<DnsConfig::SecureDnsMode> last_secure_dns_mode_override()
-      const {
+  const base::Optional<DnsConfig::SecureDnsMode>&
+  last_secure_dns_mode_override() const {
     return last_secure_dns_mode_override_;
   }
 
@@ -254,6 +261,7 @@
   void RemoveCancelledListener(MdnsListenerImpl* listener);
 
   RequestPriority last_request_priority_;
+  base::Optional<NetworkIsolationKey> last_request_network_isolation_key_;
   base::Optional<DnsConfig::SecureDnsMode> last_secure_dns_mode_override_;
   bool synchronous_mode_;
   bool ondemand_mode_;
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index b6933358..3828c43 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -830,8 +830,9 @@
   }
   if (key_.session_key().disable_secure_dns())
     parameters.secure_dns_mode_override = DnsConfig::SecureDnsMode::OFF;
-  resolve_host_request_ =
-      host_resolver_->CreateRequest(key_.destination(), net_log_, parameters);
+  resolve_host_request_ = host_resolver_->CreateRequest(
+      key_.destination(), key_.session_key().network_isolation_key(), net_log_,
+      parameters);
   // Unretained is safe because |this| owns the request, ensuring cancellation
   // on destruction.
   // When race_stale_dns_on_connection_ is on, this request will query for stale
@@ -856,8 +857,9 @@
 
   parameters.cache_usage =
       HostResolver::ResolveHostParameters::CacheUsage::DISALLOWED;
-  fresh_resolve_host_request_ =
-      host_resolver_->CreateRequest(key_.destination(), net_log_, parameters);
+  fresh_resolve_host_request_ = host_resolver_->CreateRequest(
+      key_.destination(), key_.session_key().network_isolation_key(), net_log_,
+      parameters);
   // Unretained is safe because |this| owns the request, ensuring cancellation
   // on destruction.
   // This request will only query fresh host resolution.
diff --git a/net/quic/quic_stream_factory_fuzzer.cc b/net/quic/quic_stream_factory_fuzzer.cc
index 36829e9..e22acc6 100644
--- a/net/quic/quic_stream_factory_fuzzer.cc
+++ b/net/quic/quic_stream_factory_fuzzer.cc
@@ -143,6 +143,7 @@
           &env->clock, params);
 
   SetQuicReloadableFlag(quic_supports_tls_handshake, true);
+  SetQuicReloadableFlag(quic_coalesce_stream_frames, true);
   QuicStreamRequest request(factory.get());
   TestCompletionCallback callback;
   NetErrorDetails net_error_details;
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 4dad9f33..2f78757 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -11144,9 +11144,20 @@
   EXPECT_EQ(DEFAULT_PRIORITY, host_resolver_->request_priority(2));
 }
 
-// Verifies that the host resolver uses the disable secure DNS setting passed to
-// QuicStreamRequest::Request().
-TEST_P(QuicStreamFactoryTest, HostResolverUsesDisableSecureDns) {
+// Verifies that the host resolver uses the disable secure DNS setting and
+// NetworkIsolationKey passed to QuicStreamRequest::Request().
+TEST_P(QuicStreamFactoryTest, HostResolverUsesParams) {
+  const url::Origin kOrigin1 = url::Origin::Create(GURL("https://foo.test/"));
+  const url::Origin kOrigin2 = url::Origin::Create(GURL("https://bar.test/"));
+  const NetworkIsolationKey kNetworkIsolationKey(kOrigin1, kOrigin1);
+  base::test::ScopedFeatureList feature_list;
+  feature_list.InitWithFeatures(
+      // enabled_features
+      {features::kPartitionConnectionsByNetworkIsolationKey,
+       features::kSplitHostCacheByNetworkIsolationKey},
+      // disabled_features
+      {});
+
   Initialize();
   ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
@@ -11162,7 +11173,7 @@
       ERR_IO_PENDING,
       request.Request(
           host_port_pair_, version_, privacy_mode_, DEFAULT_PRIORITY,
-          SocketTag(), NetworkIsolationKey(), true /* disable_secure_dns */,
+          SocketTag(), kNetworkIsolationKey, true /* disable_secure_dns */,
           /*cert_verify_flags=*/0, url_, net_log_, &net_error_details_,
           failed_on_default_network_callback_, callback_.callback()));
 
@@ -11170,8 +11181,12 @@
   std::unique_ptr<HttpStream> stream = CreateStream(&request);
   EXPECT_TRUE(stream.get());
 
+  ASSERT_TRUE(host_resolver_->last_secure_dns_mode_override().has_value());
   EXPECT_EQ(net::DnsConfig::SecureDnsMode::OFF,
             host_resolver_->last_secure_dns_mode_override().value());
+  ASSERT_TRUE(host_resolver_->last_request_network_isolation_key().has_value());
+  EXPECT_EQ(kNetworkIsolationKey,
+            host_resolver_->last_request_network_isolation_key().value());
 
   EXPECT_TRUE(socket_data.AllReadDataConsumed());
   EXPECT_TRUE(socket_data.AllWriteDataConsumed());
diff --git a/remoting/DEPS b/remoting/DEPS
index 5a07465..5d9f4623 100644
--- a/remoting/DEPS
+++ b/remoting/DEPS
@@ -6,7 +6,6 @@
   "-remoting",
   "+remoting/base",
   "+remoting/proto",
-  "+third_party/google_toolbox_for_mac/src",
   "+third_party/libvpx",
   "+third_party/libyuv",
   "+third_party/webrtc/api",
diff --git a/remoting/resources/remoting_strings_mr.xtb b/remoting/resources/remoting_strings_mr.xtb
index 11656e0..8dfe5bf7 100644
--- a/remoting/resources/remoting_strings_mr.xtb
+++ b/remoting/resources/remoting_strings_mr.xtb
@@ -7,7 +7,7 @@
 <translation id="1152528166145813711">निवडा…</translation>
 <translation id="1199593201721843963">रिमोट कनेक्‍शन अक्षम करा</translation>
 <translation id="1201402288615127009">पुढील</translation>
-<translation id="1291443878853470558">तुम्ही या कॉंप्युटर अॅक्सेस करण्यासाठी Chromoting वापरू इच्छित असल्यास तुम्ही रिमोट कनेक्शन सक्षम करणे आवश्यक आहे.</translation>
+<translation id="1291443878853470558">तुम्ही या कॉंप्युटर ॲक्सेस करण्यासाठी Chromoting वापरू इच्छित असल्यास तुम्ही रिमोट कनेक्शन सक्षम करणे आवश्यक आहे.</translation>
 <translation id="1297009705180977556"><ph name="HOSTNAME" /> शी कनेक्ट करताना एरर आली</translation>
 <translation id="1324095856329524885">(हे वैशिष्ट्य अद्याप तुमच्या कॉंप्युटरचा उपलब्ध नाही)</translation>
 <translation id="1342297293546459414">शेअर केलेला कॉंप्युटर पहा आणि नियंत्रित करा.</translation>
@@ -15,7 +15,7 @@
 <translation id="1450760146488584666">विनंती केलेले ऑब्जेक्ट अस्तित्वात नाही.</translation>
 <translation id="1480046233931937785">क्रेडिट</translation>
 <translation id="1520828917794284345">फिट करण्यासाठी डेस्कटॉपचा आकार बदला</translation>
-<translation id="154040539590487450">दूरस्‍थ अॅक्सेस सेवा सुरुवात करण्‍यात अयशस्वी.</translation>
+<translation id="154040539590487450">दूरस्‍थ ॲक्सेस सेवा सुरुवात करण्‍यात अयशस्वी.</translation>
 <translation id="1546934824884762070">एक अनपेक्षित एरर आली. कृपया डेव्हलपरकडे या समस्येची तक्रार करा.</translation>
 <translation id="1624185583382384493">Chrome रिमोट डेस्कटॉप आता वेबवर आहे. आमचा <ph name="LINK_BEGIN" />वेब अ‍ॅप<ph name="LINK_END" /> वापरून बघा—अनेक मॉनिटरचा समावेश असलेल्या अधिक वैशिष्ट्यांसह, तो जलद आणि विनामूल्य आहे.</translation>
 <translation id="1643640058022401035">हे पेज सोडण्यामुळे तुमचे Chromoting सेशन समाप्त होईल.</translation>
@@ -44,24 +44,24 @@
 ही परवानगी देण्यासाठी 'स्क्रीन रेकॉर्डिंग' प्राधान्ये पेन उघडण्याकरिता खालील '<ph name="BUTTON_NAME" />' वर क्लिक करा आणि त्यानंतर '<ph name="SERVICE_SCRIPT_NAME" />' च्या शेजारील बॉक्समध्ये खूण करा.
 
 '<ph name="SERVICE_SCRIPT_NAME" />' वर आधीच खूण केली असल्यास, ती काढा आणि त्यावर पुन्हा खूण करा.</translation>
-<translation id="2208514473086078157">धोरण सेटिंग्ज हा कॉंप्युटर Chrome रिमोट डेस्कटॉप होस्टच्या रुपात शेअररणास परवानगी देत नाहीत. साहाय्यासाठी तुमच्या सिस्टम अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="2208514473086078157">धोरण सेटिंग्ज हा कॉंप्युटर Chrome रिमोट डेस्कटॉप होस्टच्या रुपात शेअररणास परवानगी देत नाहीत. साहाय्यासाठी तुमच्या सिस्टम ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="2220529011494928058">समस्येची तक्रार करा</translation>
 <translation id="2221097377466213233">Win की साठी (⌘ Mac वर) योग्य Ctrl वापरा</translation>
 <translation id="2235518894410572517">पाहण्यासाठी आणि नियंत्रणासाठी हा कॉंप्युटर दुसर्‍या वापरकर्त्याशी सामयिक करा.</translation>
 <translation id="2246783206985865117">हे सेटिंग आपल्‍या डोमेन धोरणाद्वारे व्यवस्थापित केले आहे.</translation>
 <translation id="2256115617011615191">आता रीस्टार्ट करा</translation>
 <translation id="225614027745146050">सुस्वागतम</translation>
-<translation id="228809120910082333">कृपया Chromoting द्वारे अॅक्सेस परवानगी असलेले करण्यासाठी तुमच्या खात्याची आणि पिन ची खाली निश्चित करा.</translation>
+<translation id="228809120910082333">कृपया Chromoting द्वारे ॲक्सेस परवानगी असलेले करण्यासाठी तुमच्या खात्याची आणि पिन ची खाली निश्चित करा.</translation>
 <translation id="2314101195544969792">तुमचे <ph name="APPLICATION_NAME" /> सेशन काही काळ निष्क्रिय होते आणि लवकरच डिस्कनेक्ट केले जाईल.</translation>
-<translation id="2317666076142640974"><ph name="LINK_BEGIN" />Chrome रिमोट डेस्कटॉप वेब अॅप<ph name="LINK_END" />मध्ये डोकावून पहा. आम्हाला तुमचा फीडबॅक जाणून घ्यायला आवडेल.</translation>
+<translation id="2317666076142640974"><ph name="LINK_BEGIN" />Chrome रिमोट डेस्कटॉप वेब ॲप<ph name="LINK_END" />मध्ये डोकावून पहा. आम्हाला तुमचा फीडबॅक जाणून घ्यायला आवडेल.</translation>
 <translation id="2320166752086256636">कीबोर्ड लपवा</translation>
-<translation id="2353140552984634198">Chromoting वापरून तुम्ही या कॉंप्युटरवर सुरक्षितरितीने अॅक्सेस करू शकता.</translation>
+<translation id="2353140552984634198">Chromoting वापरून तुम्ही या कॉंप्युटरवर सुरक्षितरितीने ॲक्सेस करू शकता.</translation>
 <translation id="2359808026110333948">सुरू ठेवा</translation>
 <translation id="2366718077645204424">होस्‍टवर पोहोचण्‍यात अक्षम. हे बहुदा तुम्ही वापरत असलेल्या नेटवर्कच्या कॉन्फिगरेशनमुळे झाले आहे.</translation>
-<translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> अंतिम अॉनलाइन पाहिले <ph name="RELATIVE_TIMESTAMP" />.</translation>
-<translation id="2405928220797050937">हे अॅप यापुढे सपोर्ट करत नाही. तुम्हाला नवीन वैशिष्ट्ये आणि सुरक्षा अपडेट मिळत असल्याचे निश्चित करण्यासाठी, कृपया <ph name="LINK_BEGIN" />Chrome रिमोट डेस्कटॉप वेब अॅप<ph name="LINK_END" /> वापरा.</translation>
+<translation id="2370754117186920852"><ph name="OPTIONAL_OFFLINE_REASON" /> अंतिम ऑनलाइन पाहिले <ph name="RELATIVE_TIMESTAMP" />.</translation>
+<translation id="2405928220797050937">हे ॲप यापुढे सपोर्ट करत नाही. तुम्हाला नवीन वैशिष्ट्ये आणि सुरक्षा अपडेट मिळत असल्याचे निश्चित करण्यासाठी, कृपया <ph name="LINK_BEGIN" />Chrome रिमोट डेस्कटॉप वेब ॲप<ph name="LINK_END" /> वापरा.</translation>
 <translation id="2499160551253595098">आम्हाला वापर आकडेवारी आणि क्रॅश अहवाल संकलित करण्‍यासाठी अनुमती देऊन आम्हाला Chrome रिमोट डेस्कटॉप सुधारण्यास मदत करा.</translation>
-<translation id="2504109125669302160">'<ph name="PRODUCT_NAME" />' ला अॅक्सेसिबिलिटी' ची परवानगी द्या</translation>
+<translation id="2504109125669302160">'<ph name="PRODUCT_NAME" />' ला ॲक्सेसिबिलिटी' ची परवानगी द्या</translation>
 <translation id="2509394361235492552"><ph name="HOSTNAME" /> शी कनेक्ट केले</translation>
 <translation id="2512228156274966424">टीप: सर्व कीबोर्ड शॉर्टकट उपलब्ध असल्याचे सुनिश्चित करण्यासाठी, तुम्ही ‘विंडो म्हणून उघडण्यासाठी’ Chrome रिमोट डेस्कटॉप कॉन्फिगर करू शकता.</translation>
 <translation id="2540992418118313681">तुम्ही हा कॉंप्युटर दुसर्‍या वापरकर्त्याकरिता पाहण्यासाठी आणि नियंत्रित करण्यासाठी शेअर करू इच्छिता?</translation>
@@ -70,17 +70,17 @@
 <translation id="2647232381348739934">Chromoting सेवा</translation>
 <translation id="2676780859508944670">कार्यरत आहे...</translation>
 <translation id="2699970397166997657">Chromoting</translation>
-<translation id="2747641796667576127">सॉफ्टवेअर अपडेट सामान्यतः अॉटोमॅटिकली होतात, परंतु काही क्वचित प्रकरणांमध्ये अयशस्वी होऊ शकतात. सॉफ्टवेअर अपडेट करण्यास काही मिनिटांपेक्षा जास्त वेळ लागत नाही आणि तुमच्या कॉंप्युटरला रिमोटपणे कनेक्ट केलेले असताना पूर्ण केली जाऊ शकतात.</translation>
+<translation id="2747641796667576127">सॉफ्टवेअर अपडेट सामान्यतः ऑटोमॅटिकली होतात, परंतु काही क्वचित प्रकरणांमध्ये अयशस्वी होऊ शकतात. सॉफ्टवेअर अपडेट करण्यास काही मिनिटांपेक्षा जास्त वेळ लागत नाही आणि तुमच्या कॉंप्युटरला रिमोटपणे कनेक्ट केलेले असताना पूर्ण केली जाऊ शकतात.</translation>
 <translation id="2758123043070977469">प्रमाणीकृत करताना समस्या आली, कृपया पुन्हा लॉगिन करा.</translation>
 <translation id="2803375539583399270">पिन एंटर करा</translation>
 <translation id="2841013758207633010">वेळ</translation>
-<translation id="2851754573186462851">Chromium अॅप फ्लो</translation>
+<translation id="2851754573186462851">Chromium ॲप फ्लो</translation>
 <translation id="2888969873284818612">एक नेटवर्क एरर आली. तुमचे डिव्‍हाइस पुन्हा ऑनलाइन असेल तेव्‍हा आम्‍ही अ‍ॅप रीस्टार्ट करू.</translation>
 <translation id="2891243864890517178">Mac साठी (OS X Yosemite 10.10 आणि त्यावरील)</translation>
 <translation id="2894654864775534701">हा कॉंप्युटर सध्या एका वेगळ्या खात्या अंतर्गत शेअर केला आहे.</translation>
 <translation id="2919669478609886916">तुम्ही दुसर्‍या वापरकर्त्याबरोबर सध्‍या या मशीनचे सामयिकरण करीत आहात. तुम्ही सामायिकरण सुरु ठेऊ इच्छिता?</translation>
-<translation id="2921543551052660690">तुम्ही यापूर्वी <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) म्हणून साइन इन केले होते.  त्या खात्यामध्ये तुमच्या कॉंप्युटरं अॅक्सेस करण्यासाठी, त्या खात्यासह <ph name="LINK_BEGIN" />Chromium वर साइन इन करा<ph name="LINK_END" /> आणि Chromoting पुन्हा इंस्टॉल करा.</translation>
-<translation id="2926340305933667314">या कॉंप्युटरवरील दूरस्‍थ अॅक्सेस अक्षम करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
+<translation id="2921543551052660690">तुम्ही यापूर्वी <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) म्हणून साइन इन केले होते.  त्या खात्यामध्ये तुमच्या कॉंप्युटरं ॲक्सेस करण्यासाठी, त्या खात्यासह <ph name="LINK_BEGIN" />Chromium वर साइन इन करा<ph name="LINK_END" /> आणि Chromoting पुन्हा इंस्टॉल करा.</translation>
+<translation id="2926340305933667314">या कॉंप्युटरवरील दूरस्‍थ ॲक्सेस अक्षम करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="2930135165929238380">काही आवश्यक घटक गहाळ आहेत. कृपया Chrome://pluginz येथे जा आणि मूळ क्लायंट सक्षम केलेला असल्याची खात्री करा.</translation>
 <translation id="2939145106548231838">होस्ट वर प्रमाणित करा</translation>
 <translation id="3020807351229499221">पिन अपडेट करण्‍यात अयशस्वी. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
@@ -92,16 +92,16 @@
 <translation id="3171922709365450819">या डिव्हाइसला या क्लायंटचा सपोर्ट नाही, कारण त्याला तृतीय पक्ष ऑथेंटिकेशनची गरज आहे.</translation>
 <translation id="3197730452537982411">रिमोट डेस्कटॉप</translation>
 <translation id="324272851072175193">या सूचना ईमेल करा</translation>
-<translation id="3258789396564295715">Chrome दूरस्‍थ डेस्कटॉप वापरुन तुम्ही या कॉंप्युटरवर सुरक्षितपणे अॅक्सेस करू शकता.</translation>
+<translation id="3258789396564295715">Chrome दूरस्‍थ डेस्कटॉप वापरुन तुम्ही या कॉंप्युटरवर सुरक्षितपणे ॲक्सेस करू शकता.</translation>
 <translation id="3286521253923406898">Chromoting होस्ट नियंत्रक</translation>
 <translation id="3305934114213025800"><ph name="PRODUCT_NAME" /> ला बदल करायचे आहेत.</translation>
 <translation id="332624996707057614">कॉंप्युटर नाव संपादित करा</translation>
-<translation id="3339299787263251426">इंटरनेटवरून तुमच्या कॉंप्युटरवर सुरक्षितपणे अॅक्सेस करा</translation>
+<translation id="3339299787263251426">इंटरनेटवरून तुमच्या कॉंप्युटरवर सुरक्षितपणे ॲक्सेस करा</translation>
 <translation id="3360306038446926262">विंडो</translation>
 <translation id="3362124771485993931">पिन पुन्हा-टाइप करा</translation>
 <translation id="337167041784729019">आकडेवारी दर्शवा</translation>
 <translation id="3385242214819933234">चुकीचे होस्ट मालक.</translation>
-<translation id="3403830762023901068">धोरण सेटिंग्ज हा कॉंप्युटर Chromoting होस्टच्या रुपात शेअररणास परवानगी देत नाही. सहाय्यसाठी तुमच्या सिस्टम अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
+<translation id="3403830762023901068">धोरण सेटिंग्ज हा कॉंप्युटर Chromoting होस्टच्या रुपात शेअररणास परवानगी देत नाही. सहाय्यसाठी तुमच्या सिस्टम ॲडमिनिस्ट्रेटरशी संपर्क साधा.</translation>
 <translation id="3423542133075182604">सुरक्षा की रिमोट करणे प्रक्रिया</translation>
 <translation id="3581045510967524389">नेटवर्कला कनेक्ट करू शकलो नाही. कृपया तुमचे डिव्हाइस ऑन-लाइन असल्याचे तपासा.</translation>
 <translation id="3596628256176442606">ही सेवा Chromoting क्लायंटकडील येणारी कनेक्शन सक्षम करते.</translation>
@@ -112,15 +112,15 @@
 <translation id="3718805989288361841">Chrome रिमोट डेस्कटॉपच्या धोरण सेटिंग्जमध्ये एरर आली आहे. साहाय्यासाठी तुमच्या सिस्टम प्रशसकाशी संपर्क साधा.</translation>
 <translation id="3776024066357219166">तुमचे Chrome रिमोट डेस्कटॉप सेशन समाप्त झाले आहे.</translation>
 <translation id="3870154837782082782">Google Inc.</translation>
-<translation id="3884839335308961732">कृपया Chrome रिमोट डेस्कटॉपद्वारे अॅक्सेस करण्यास परवानगी  देण्यासाठी तुमच्या खात्याची आणि पिन ची खाली निश्चित करा.</translation>
+<translation id="3884839335308961732">कृपया Chrome रिमोट डेस्कटॉपद्वारे ॲक्सेस करण्यास परवानगी  देण्यासाठी तुमच्या खात्याची आणि पिन ची खाली निश्चित करा.</translation>
 <translation id="3897092660631435901">मेनू</translation>
 <translation id="3905196214175737742">चुकीचे होस्ट मालक डोमेन.</translation>
 <translation id="3908017899227008678">फिट करण्‍यासाठी संकुचित करा</translation>
 <translation id="3931191050278863510">होस्ट थांबले.</translation>
 <translation id="3933246213702324812"><ph name="HOSTNAME" /> वरील Chromoting कालबाह्य आहे आणि अपडेट करण्याची आवश्यकता आहे.</translation>
 <translation id="3950820424414687140">साइन इन करा</translation>
-<translation id="3989511127559254552">सुरु ठेवण्यासाठी तुम्ही सर्वप्रथम तुमच्या कॉंप्युटरवर एक्स्टेंशनित अॅक्सेस परवानग्या मंजूर करणे आवश्यक आहे. तुम्हाला हे केवळ एकदाच करावे लागते.</translation>
-<translation id="4006787130661126000">या कॉंप्युटर अॅक्सेस करण्यासाठी तुम्ही Chrome रिमोट डेस्कटॉप वापरू इच्छित असल्यास तुम्ही रिमोट कनेक्शन सक्षम करणे आवश्यक आहे.</translation>
+<translation id="3989511127559254552">सुरु ठेवण्यासाठी तुम्ही सर्वप्रथम तुमच्या कॉंप्युटरवर एक्स्टेंशनित ॲक्सेस परवानग्या मंजूर करणे आवश्यक आहे. तुम्हाला हे केवळ एकदाच करावे लागते.</translation>
+<translation id="4006787130661126000">या कॉंप्युटर ॲक्सेस करण्यासाठी तुम्ही Chrome रिमोट डेस्कटॉप वापरू इच्छित असल्यास तुम्ही रिमोट कनेक्शन सक्षम करणे आवश्यक आहे.</translation>
 <translation id="405887016757208221">सत्र आरंभ करण्यात रिमोट कॉंप्युटर अयशस्वी झाले आहे. समस्या कायम राहिल्यास कृपया होस्ट पुन्हा कॉन्फिगर करण्‍याचा प्रयत्न करा.</translation>
 <translation id="4060747889721220580">फाइल डाउनलोड करा</translation>
 <translation id="4068946408131579958">सर्व कनेक्शन</translation>
@@ -128,20 +128,20 @@
 <translation id="4126409073460786861">सेटअप करणे पूर्ण झाल्यावर, पेज रिफ्रेश करा, त्यानंतर तुम्ही तुमचे डिव्हाइस निवडून आणि पिन एंटर करून कॉंप्युटर ॲक्सेस करू शकाल</translation>
 <translation id="4145029455188493639"><ph name="EMAIL_ADDRESS" /> म्हणून साइन इन केले.</translation>
 <translation id="4155497795971509630">काही आवश्यक घटक गहाळ आहेत. कृपया तुम्ही सॉफ्टवेअरची नवीनतम आवृत्ती इंस्टॉल केली असल्याचे सुनिश्चित करा आणि पुन्हा प्रयत्न करा.</translation>
-<translation id="4156740505453712750">या कॉंप्युटर अॅक्सेस संरक्षित करण्यासाठी, कृपया <ph name="BOLD_START" />कमीत कमी सहा अंकांचा<ph name="BOLD_END" /> एक पिन निवडा. दुसर्‍या स्थानावरून कनेक्ट करताना हा पिन आवश्यक असेल.</translation>
-<translation id="4169432154993690151">एक प्रोफाइल फोटो निवडण्यासाठी, Chrome रिमोट डेस्कटॉपला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी  द्या</translation>
-<translation id="4176825807642096119">अॅक्सेस कोड</translation>
+<translation id="4156740505453712750">या कॉंप्युटर ॲक्सेस संरक्षित करण्यासाठी, कृपया <ph name="BOLD_START" />कमीत कमी सहा अंकांचा<ph name="BOLD_END" /> एक पिन निवडा. दुसर्‍या स्थानावरून कनेक्ट करताना हा पिन आवश्यक असेल.</translation>
+<translation id="4169432154993690151">एक प्रोफाइल फोटो निवडण्यासाठी, Chrome रिमोट डेस्कटॉपला तुमचा कॅमेरा ॲक्सेस करण्याची परवानगी  द्या</translation>
+<translation id="4176825807642096119">ॲक्सेस कोड</translation>
 <translation id="4207623512727273241">कृपया सुरु ठेवण्‍यापूर्वी इंस्टॉलर रन करा.</translation>
 <translation id="4227991223508142681">होस्ट तरतूद उपयुक्तता</translation>
 <translation id="4240294130679914010">Chromoting होस्ट विस्थापनकर्ता</translation>
 <translation id="4277463233460010382">हा कॉंप्युटर पिन एंटर न करता एक किंवा अधिक क्लायंटना कनेक्ट करण्याची अनुमती देण्यासाठी कॉन्फिगर केला आहे.</translation>
-<translation id="4277736576214464567">अॅक्सेस कोड अवैध आहे. कृपया पुन्हा प्रयत्न करा.</translation>
+<translation id="4277736576214464567">ॲक्सेस कोड अवैध आहे. कृपया पुन्हा प्रयत्न करा.</translation>
 <translation id="4281844954008187215">सेवा अटी</translation>
 <translation id="4361728918881830843">एका वेगळ्या कॉंप्युटरवर रिमोट कनेक्शन सुरू करण्यासाठी, Chrome रिमोट डेस्कटॉप तेथे इंस्टॉल करा आणि “<ph name="BUTTON_NAME" />”वर क्लिक करा.</translation>
 <translation id="4394049700291259645">अक्षम करा</translation>
 <translation id="4405930547258349619">कोअर लायब्ररी</translation>
 <translation id="4430435636878359009">या कॉंप्युटरची रिमोट कनेक्‍शन अक्षम करा</translation>
-<translation id="4430915108080446161">अॅक्सेस कोड व्युत्पन्न करत आहे…</translation>
+<translation id="4430915108080446161">ॲक्सेस कोड व्युत्पन्न करत आहे…</translation>
 <translation id="443560535555262820">अ‍ॅक्सेसिबिलिटी प्राधान्ये उघडा</translation>
 <translation id="4450893287417543264">पुन्हा दाखवू नका</translation>
 <translation id="4472575034687746823">सुरुवात करा</translation>
@@ -149,7 +149,7 @@
 <translation id="4513946894732546136">अभिप्राय</translation>
 <translation id="4517233780764084060">टीप: सर्व कीबोर्ड शॉर्टकट उपलब्ध असल्याचे सुनिश्चित करण्‍यासाठी तुम्ही ‘विंडोच्या रूपात उघडण्यासाठी’ Chromoting कॉन्फिगर करू शकता.</translation>
 <translation id="4563926062592110512">डिस्कनेक्ट केलेला क्लायंट: <ph name="CLIENT_USERNAME" />.</translation>
-<translation id="4572065712096155137">अॅक्सेस</translation>
+<translation id="4572065712096155137">ॲक्सेस</translation>
 <translation id="4592037108270173918">मोबाइल नेटवर्कवरील डीव्हाइसशी कनेक्ट करताना डेटा शुल्क लागू होऊ शकते. तुम्हाला पुढे सुरू ठेवायचे आहे का?</translation>
 <translation id="4619978527973181021">स्वीकार करा आणि इंस्टॉल करा</translation>
 <translation id="4635770493235256822">रिमोट डिव्हाइस</translation>
@@ -157,7 +157,7 @@
 <translation id="4703302905453407178">एका आवश्यक घटकाने कार्य करणे थांबविले आहे. कृपया डेव्हलपरांकडे या समस्येची तक्रार करा.</translation>
 <translation id="4703799847237267011">तुमचे Chromoting सेशन समाप्त झाले.</translation>
 <translation id="4736223761657662401">कनेक्शन इतिहास</translation>
-<translation id="4741792197137897469">अॉथेंटिकेशन अयशस्वी. कृपया Chrome वर पुन्हा साइन इन करा.</translation>
+<translation id="4741792197137897469">ऑथेंटिकेशन अयशस्वी. कृपया Chrome वर पुन्हा साइन इन करा.</translation>
 <translation id="477305884757156764">ॲप्लिकेशन खूप धीमे झाले आहे.</translation>
 <translation id="4784508858340177375">X सर्व्हर क्रॅश झाला किंवा सुरू झाला नाही.</translation>
 <translation id="4795786176190567663">तुम्हाला ती क्रिया करण्याची परवानगी नाही.</translation>
@@ -171,9 +171,9 @@
 <translation id="492843737083352574">मला माझ्या कीबोर्ड किंवा माउसमध्ये समस्या येत आहेत.</translation>
 <translation id="4973800994433240357">Chromoting होस्ट इन्स्टॉलर डाउनलोड करून, तुम्ही Google <ph name="LINK_BEGIN" />सेवा अटीं<ph name="LINK_END" />ना सहमती देता.</translation>
 <translation id="4974476491460646149"><ph name="HOSTNAME" /> चे कनेक्शन बंद झाले</translation>
-<translation id="4985296110227979402">रिमोट अॅक्सेस करण्यासाठी तुम्हाला प्रथम तुमचा कॉंप्युटर सेट करणे आवश्यक आहे</translation>
+<translation id="4985296110227979402">रिमोट ॲक्सेस करण्यासाठी तुम्हाला प्रथम तुमचा कॉंप्युटर सेट करणे आवश्यक आहे</translation>
 <translation id="5064360042339518108"><ph name="HOSTNAME" /> (ऑफलाइन)</translation>
-<translation id="5070121137485264635">रिमोट होस्टसाठी तुम्ही एका तृतीय-पक्ष वेबसाइटवर प्रमाणीकृत करणे आवश्यक आहे. सुरू ठेवण्यासाठी, या पत्त्या अॅक्सेस करण्यासाठी तुम्ही Chrome रिमोट डेस्कटॉपला अतिरिक्त परवानग्या मंजूर करणे आवश्यक आहे:</translation>
+<translation id="5070121137485264635">रिमोट होस्टसाठी तुम्ही एका तृतीय-पक्ष वेबसाइटवर प्रमाणीकृत करणे आवश्यक आहे. सुरू ठेवण्यासाठी, या पत्त्या ॲक्सेस करण्यासाठी तुम्ही Chrome रिमोट डेस्कटॉपला अतिरिक्त परवानग्या मंजूर करणे आवश्यक आहे:</translation>
 <translation id="507204348399810022">तुम्हाला खात्री आहे की तुम्ही <ph name="HOSTNAME" /> शी असलेले रिमोट कनेक्शन अक्षम करू इच्छिता?</translation>
 <translation id="5081343395220691640">सर्व्हरशी संवाद साधता येत नाही: <ph name="ERROR" /></translation>
 <translation id="5156271271724754543">कृपया दोन्ही बॉक्सेसमध्‍ये सारखाच पिन प्रविष्‍ट करा.</translation>
@@ -186,24 +186,24 @@
 <translation id="5308380583665731573">कनेक्‍ट करा</translation>
 <translation id="5327248766486351172">नाव</translation>
 <translation id="533625276787323658">कनेक्ट करण्यासाठी काहीही नाही</translation>
-<translation id="5363265567587775042">तुम्ही ज्या वापरकर्त्याच्या कॉंप्युटरमध्‍ये अॅक्सेस करू इच्छिता त्यास “<ph name="SHARE" />” वर क्लिक करण्‍यास आणि तुमच्याला अॅक्सेस कोड देण्‍यास सांगा.</translation>
+<translation id="5363265567587775042">तुम्ही ज्या वापरकर्त्याच्या कॉंप्युटरमध्‍ये ॲक्सेस करू इच्छिता त्यास “<ph name="SHARE" />” वर क्लिक करण्‍यास आणि तुमच्याला ॲक्सेस कोड देण्‍यास सांगा.</translation>
 <translation id="5379087427956679853">Chrome रिमोट डेस्कटॉप तुम्हाला वेबवर तुमचा कॉंप्युटर सुरक्षितपणे शेअर करण्‍याची अनुमती देतो. दोन्ही वापरकर्त्यांनी Chrome रिमोट डेस्कटॉप अ‍ॅप चालवत असणे आवश्‍यक आहे, जो <ph name="URL" /> येथे सापडू शकतो.</translation>
 <translation id="5397086374758643919">Chrome रिमोट डेस्कटॉप होस्ट विस्थापनकर्ता</translation>
-<translation id="5419185025274123272">अॅप्लिकेशन रीसेट करणे शक्य झाले नाही. तुम्ही तरीही एक बग अहवाल पाठवू शकता.</translation>
+<translation id="5419185025274123272">ॲप्लिकेशन रीसेट करणे शक्य झाले नाही. तुम्ही तरीही एक बग अहवाल पाठवू शकता.</translation>
 <translation id="5419418238395129586">अखेरचे ऑनलाइन होते: <ph name="DATE" /></translation>
 <translation id="544077782045763683">होस्टने बंद केले आहे.</translation>
 <translation id="5510035215749041527">आता डिस्कनेक्ट करा</translation>
 <translation id="5593560073513909978">सेवा तात्पुरती अनुपलब्ध आहे. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="5601503069213153581">पिन</translation>
 <translation id="5619148062500147964">या कॉंप्युटरवर</translation>
-<translation id="5625493749705183369">इतर कॉंप्युटरं अॅक्सेस करा किंवा इंटरनेटवर तुमच्या कॉंप्युटरवर सुरक्षितपणे अॅक्सेस करण्यास दुसर्‍या वापरकर्त्यास परवानगी  द्या.</translation>
+<translation id="5625493749705183369">इतर कॉंप्युटरं ॲक्सेस करा किंवा इंटरनेटवर तुमच्या कॉंप्युटरवर सुरक्षितपणे ॲक्सेस करण्यास दुसर्‍या वापरकर्त्यास परवानगी  द्या.</translation>
 <translation id="5702987232842159181">कनेक्ट केले:</translation>
 <translation id="5708869785009007625">तुमचा डेस्कटॉप सध्या <ph name="USER" /> सह शेअर केला आहे.</translation>
 <translation id="5750083143895808682"><ph name="EMAIL_ADDRESS" /> म्हणून साइन इन केले.</translation>
 <translation id="5773590752998175013">जोडल्याची तारीख</translation>
 <translation id="579702532610384533">रीकनेक्ट करा</translation>
 <translation id="5810269635982033450">स्क्रीन ट्रॅकपॅडसारखी काम करत आहे</translation>
-<translation id="5823658491130719298">तुम्हाला दुरून अॅक्सेस करायच्या असलेल्या काँप्युटरवर, Chrome उघडा आणि <ph name="INSTALLATION_LINK" /> वर जा</translation>
+<translation id="5823658491130719298">तुम्हाला दुरून ॲक्सेस करायच्या असलेल्या काँप्युटरवर, Chrome उघडा आणि <ph name="INSTALLATION_LINK" /> वर जा</translation>
 <translation id="5841343754884244200">डिस्प्ले पर्याय</translation>
 <translation id="5843054235973879827">हे सुरक्षित का आहे?</translation>
 <translation id="5859141382851488196">नवीन विंडो…</translation>
@@ -214,7 +214,7 @@
 <translation id="6091564239975589852">की पाठवा</translation>
 <translation id="6099500228377758828">Chrome रिमोट डेस्कटॉप सेवा</translation>
 <translation id="6122191549521593678">ऑनलाइन</translation>
-<translation id="6167788864044230298">Chrome अॅप फ्लो</translation>
+<translation id="6167788864044230298">Chrome ॲप फ्लो</translation>
 <translation id="6173536234069435147">मी माझ्या Google ड्राइव्ह फायली उघडू शकत नाही.</translation>
 <translation id="6178645564515549384">दूरस्थ सहाय्यासाठी मूळ संदेशन होस्ट</translation>
 <translation id="618120821413932081">विंडोशी जुळवण्यासाठी रिमोट रिझोल्यूशन अपडेट करा</translation>
@@ -251,11 +251,11 @@
 <translation id="6748108480210050150">प्रेषक</translation>
 <translation id="677755392401385740">वापरकर्त्यासाठी प्रारंभ केलेला होस्ट: <ph name="HOST_USERNAME" />.</translation>
 <translation id="6865175692670882333">पहा/संपादित करा</translation>
-<translation id="6913710942997637770">एक प्रोफाइल फोटो निवडण्यासाठी, Chrome रिमोट डेस्कटॉपला तुमचे फोटो अॅक्सेस करण्याची परवानगी  द्या</translation>
+<translation id="6913710942997637770">एक प्रोफाइल फोटो निवडण्यासाठी, Chrome रिमोट डेस्कटॉपला तुमचे फोटो ॲक्सेस करण्याची परवानगी  द्या</translation>
 <translation id="6930242544192836755">कालावधी</translation>
 <translation id="6939719207673461467">कीबोर्ड दर्शवा/लपवा.</translation>
 <translation id="6944854424004126054">विंडो पुनर्संचयित करा</translation>
-<translation id="6948905685698011662">Chrome रिमोट डेस्कटॉप आता वेबवर आहे! आमचे <ph name="LINK_BEGIN" />विनामूल्य वेब अॅप<ph name="LINK_END" /> पहा.</translation>
+<translation id="6948905685698011662">Chrome रिमोट डेस्कटॉप आता वेबवर आहे! आमचे <ph name="LINK_BEGIN" />विनामूल्य वेब ॲप<ph name="LINK_END" /> पहा.</translation>
 <translation id="6963936880795878952">रिमोट कॉंप्युटरशी कनेक्शन तात्पुरते ब्लॉक केली आहेत, कारण कोणीतरी अवैध पिन सह त्यावर कनेक्ट करण्‍याचा प्रयत्न करत होते. कृपया नंतर पुन्हा प्रयत्न करा.</translation>
 <translation id="6965382102122355670">ठीक आहे</translation>
 <translation id="6985691951107243942">तुम्हाला खात्री आहे की तुम्हाला <ph name="HOSTNAME" /> चे रिमोट कनेक्शन अक्षम करायचे आहे? तुम्ही तुमचा विचार बदलल्यास, तुम्हाला कनेक्शन पुन्हा सक्षम करण्‍यासाठी त्या कॉंप्युटरला भेट देणे आवश्यक असेल.</translation>
@@ -272,7 +272,7 @@
 <translation id="7312846573060934304">होस्ट ऑफलाइन आहे.</translation>
 <translation id="7319983568955948908">सामायिकरण थांबवा</translation>
 <translation id="7401733114166276557">Chrome रिमोट डेस्कटॉप</translation>
-<translation id="7434397035092923453">क्लायंटसाठी अॅक्सेस नाकारला: <ph name="CLIENT_USERNAME" /></translation>
+<translation id="7434397035092923453">क्लायंटसाठी ॲक्सेस नाकारला: <ph name="CLIENT_USERNAME" /></translation>
 <translation id="7444276978508498879">कनेक्ट केलेला क्लायंट: <ph name="CLIENT_USERNAME" />.</translation>
 <translation id="7526139040829362392">खाते बदला</translation>
 <translation id="7606912958770842224">रिमोट कनेक्‍शन सुरू करा</translation>
@@ -292,7 +292,7 @@
 <translation id="7895403300744144251">रिमोट कॉंप्युटरवरील सुरक्षितता धोरणे तुमच्या खात्यामधील कनेक्शनना अनुमती देत नाहीत.</translation>
 <translation id="7936528439960309876">उजवीकडे डॉक करा</translation>
 <translation id="7948001860594368197">स्क्रीन पर्याय</translation>
-<translation id="7970576581263377361">अॉथेंटिकेशन अयशस्वी. कृपया Chromium वर पुन्हा साइन इन करा.</translation>
+<translation id="7970576581263377361">ऑथेंटिकेशन अयशस्वी. कृपया Chromium वर पुन्हा साइन इन करा.</translation>
 <translation id="7981525049612125370">रिमोट सेशन कालबाह्य झाले आहे.</translation>
 <translation id="8038111231936746805">(डीफॉल्ट)</translation>
 <translation id="8041089156583427627">अभिप्राय पाठवा</translation>
@@ -300,16 +300,16 @@
 <translation id="8060029310790625334">मदत केंद्र</translation>
 <translation id="806699900641041263"><ph name="HOSTNAME" /> शी कनेक्ट होत आहे</translation>
 <translation id="8073845705237259513">Chrome रिमोट डेस्कटॉप वापरण्यासाठी, तुम्हाला आपल्या डिव्हाइसमध्ये एक Google खाते जोडणे आवश्यक असेल.</translation>
-<translation id="80739703311984697">रिमोट होस्टसाठी तुम्ही एका तृतीय-पक्ष वेबसाइटवर प्रमाणीकृत करणे आवश्यक आहे. सुरू ठेवण्यासाठी, या पत्त्या अॅक्सेस करण्यासाठी तुम्ही Chromoting ला अतिरिक्त परवानग्या मंजूर करणे आवश्यक आहे:</translation>
+<translation id="80739703311984697">रिमोट होस्टसाठी तुम्ही एका तृतीय-पक्ष वेबसाइटवर प्रमाणीकृत करणे आवश्यक आहे. सुरू ठेवण्यासाठी, या पत्त्या ॲक्सेस करण्यासाठी तुम्ही Chromoting ला अतिरिक्त परवानग्या मंजूर करणे आवश्यक आहे:</translation>
 <translation id="809687642899217504">माझे कॉंप्युटर</translation>
-<translation id="811307782653349804">तुमच्या स्वत:च्या कॉंप्युटरवर कुठूनही अॅक्सेस करा.</translation>
+<translation id="811307782653349804">तुमच्या स्वत:च्या कॉंप्युटरवर कुठूनही ॲक्सेस करा.</translation>
 <translation id="8116630183974937060">नेटवर्क एरर आली. कृपया तुमचा डिव्हाइस ऑन लाइन असल्याचे पहा आणि पुन्हा प्रयत्न करा.</translation>
 <translation id="8178433417677596899">वापरकर्ता-ते-वापरकर्ता स्क्रीन शेअरिंग रिमोट तांत्रिक सपोर्टसाठी परिपूर्ण.</translation>
 <translation id="8187079423890319756">Copyright 2013 Chromium लेखक. सर्व हक्क राखीव.</translation>
 <translation id="8196755618196986400">अधिक माहितीसाठीतुमच्याशी संपर्क साधण्यास आम्हाला अनुमती देण्याकरिता, तुमचा ईमेल ॲड्रेस तुम्ही सबमिट करता त्या कोणत्याही अभिप्रायात समाविष्ट केला जाईल.</translation>
 <translation id="8244400547700556338">कसे ते जाणून घ्या.</translation>
 <translation id="8261506727792406068">हटवा</translation>
-<translation id="8355326866731426344">हा अॅक्सेस कोड <ph name="TIMEOUT" /> मध्ये कालबाह्य होईल.</translation>
+<translation id="8355326866731426344">हा ॲक्सेस कोड <ph name="TIMEOUT" /> मध्ये कालबाह्य होईल.</translation>
 <translation id="8355485110405946777">तुमच्या समस्येचे निराकरण करण्यात आम्हाला मदत करण्यासाठी ॲप्लिकेशन लॉग समाविष्ट करा (लॉगमध्ये खाजगी माहिती असू शकते).</translation>
 <translation id="837021510621780684">या कॉंप्युटरवरुन</translation>
 <translation id="8383794970363966105">Chromoting वापरण्यासाठी, तुम्हाला आपल्या डिव्हाइसमध्ये एक Google खाते जोडणे आवश्यक असेल.</translation>
@@ -321,7 +321,7 @@
 <translation id="8509907436388546015">डेस्कटॉप संकलन प्रक्रिया</translation>
 <translation id="8513093439376855948">दूरस्थ होस्ट व्यवस्थापनासाठी मूळ संदेशन होस्ट</translation>
 <translation id="8525306231823319788">फुल स्क्रीन</translation>
-<translation id="8548209692293300397">तुम्ही यापूर्वी <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) म्हणून साइन इन केले होते. त्या खात्यामध्ये तुमच्या कॉंप्युटर अॅक्सेस करण्यासाठी, त्या खात्यासह <ph name="LINK_BEGIN" />Google Chrome वर साइन इन करा<ph name="LINK_END" /> आणि Chrome रिमोट डेस्कटॉप पुन्हा इंस्टॉल करा.</translation>
+<translation id="8548209692293300397">तुम्ही यापूर्वी <ph name="USER_NAME" /> (<ph name="USER_EMAIL" />) म्हणून साइन इन केले होते. त्या खात्यामध्ये तुमच्या कॉंप्युटर ॲक्सेस करण्यासाठी, त्या खात्यासह <ph name="LINK_BEGIN" />Google Chrome वर साइन इन करा<ph name="LINK_END" /> आणि Chrome रिमोट डेस्कटॉप पुन्हा इंस्टॉल करा.</translation>
 <translation id="858006550102277544">टिप्पणी</translation>
 <translation id="8642984861538780905">मध्यम</translation>
 <translation id="8712909229180978490">मी Google ड्राइव्हमध्ये माझ्या सेव्ह केलेल्या फायली ऑनलाइन पाहू शकत नाही.</translation>
@@ -339,7 +339,7 @@
 <translation id="9111855907838866522">तुम्ही तुमच्या रिमोट डिव्हाइसशी कनेक्ट केले आहे. मेनू उघडण्यासाठी, कृपया चार बोटांनी स्क्रीनवर टॅप करा.</translation>
 <translation id="9126115402994542723">या डिव्हाइसवरून या होस्टशी कनेक्ट करताना पुन्हा पिन साठी विचारू नका.</translation>
 <translation id="9149580767411232853">संपूर्ण रिमोट डेस्कटॉप दृश्‍यमान ठेवा</translation>
-<translation id="9149992051684092333">तुमच्या डेस्कटॉपचे शेअररण सुरू करण्यासाठी, तुम्हाला सहाय्य करणार्‍या व्यक्तीला खालील अॅक्सेस कोड द्या.</translation>
+<translation id="9149992051684092333">तुमच्या डेस्कटॉपचे शेअररण सुरू करण्यासाठी, तुम्हाला सहाय्य करणार्‍या व्यक्तीला खालील ॲक्सेस कोड द्या.</translation>
 <translation id="916856682307586697">डीफॉल्ट XSession लाँच करा</translation>
 <translation id="9187628920394877737"><ph name="PRODUCT_NAME" /> ला 'स्क्रीन रेकॉर्डिंग' ची परवानगी द्या</translation>
 <translation id="9188433529406846933">अधिकृत करा</translation>
diff --git a/services/data_decoder/BUILD.gn b/services/data_decoder/BUILD.gn
index 7c5524df..1ecdd364 100644
--- a/services/data_decoder/BUILD.gn
+++ b/services/data_decoder/BUILD.gn
@@ -40,7 +40,6 @@
 
   public_deps = [
     "//services/data_decoder/public/mojom",
-    "//services/service_manager/public/cpp",
   ]
 
   if (!is_ios) {
@@ -87,6 +86,7 @@
     deps += [
       "//gin",
       "//gin:gin_test",
+      "//services/service_manager/public/cpp",
       "//third_party/blink/public:blink",
     ]
     data_deps = [
diff --git a/services/data_decoder/ble_scan_parser_impl.cc b/services/data_decoder/ble_scan_parser_impl.cc
index 9f56cc2..78104c8e 100644
--- a/services/data_decoder/ble_scan_parser_impl.cc
+++ b/services/data_decoder/ble_scan_parser_impl.cc
@@ -29,9 +29,7 @@
 const char kUuidPrefix[] = "0000";
 const char kUuidSuffix[] = "-0000-1000-8000-00805F9B34FB";
 
-BleScanParserImpl::BleScanParserImpl(
-    std::unique_ptr<service_manager::ServiceContextRef> service_ref)
-    : service_ref_(std::move(service_ref)) {}
+BleScanParserImpl::BleScanParserImpl() = default;
 
 BleScanParserImpl::~BleScanParserImpl() = default;
 
diff --git a/services/data_decoder/ble_scan_parser_impl.h b/services/data_decoder/ble_scan_parser_impl.h
index 3bc3362c..fa9ec78 100644
--- a/services/data_decoder/ble_scan_parser_impl.h
+++ b/services/data_decoder/ble_scan_parser_impl.h
@@ -13,7 +13,6 @@
 #include "base/macros.h"
 #include "device/bluetooth/public/mojom/uuid.mojom.h"
 #include "services/data_decoder/public/mojom/ble_scan_parser.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 
 namespace data_decoder {
 
@@ -31,8 +30,7 @@
 
 class BleScanParserImpl : public mojom::BleScanParser {
  public:
-  explicit BleScanParserImpl(
-      std::unique_ptr<service_manager::ServiceContextRef> service_ref);
+  BleScanParserImpl();
   ~BleScanParserImpl() override;
 
   // mojom::BleScanParser:
@@ -51,8 +49,6 @@
       std::vector<device::BluetoothUUID>* service_uuids);
 
  private:
-  const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
-
   DISALLOW_COPY_AND_ASSIGN(BleScanParserImpl);
 };
 
diff --git a/services/data_decoder/bundled_exchanges_parser.h b/services/data_decoder/bundled_exchanges_parser.h
index 3055849e..15c07a4 100644
--- a/services/data_decoder/bundled_exchanges_parser.h
+++ b/services/data_decoder/bundled_exchanges_parser.h
@@ -13,7 +13,6 @@
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/mojom/bundled_exchanges_parser.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 
 namespace data_decoder {
 
diff --git a/services/data_decoder/bundled_exchanges_parser_factory.cc b/services/data_decoder/bundled_exchanges_parser_factory.cc
index 8ec0f95..a89f1149 100644
--- a/services/data_decoder/bundled_exchanges_parser_factory.cc
+++ b/services/data_decoder/bundled_exchanges_parser_factory.cc
@@ -45,9 +45,7 @@
 
 }  // namespace
 
-BundledExchangesParserFactory::BundledExchangesParserFactory(
-    std::unique_ptr<service_manager::ServiceContextRef> service_ref)
-    : service_ref_(std::move(service_ref)) {}
+BundledExchangesParserFactory::BundledExchangesParserFactory() = default;
 
 BundledExchangesParserFactory::~BundledExchangesParserFactory() = default;
 
diff --git a/services/data_decoder/bundled_exchanges_parser_factory.h b/services/data_decoder/bundled_exchanges_parser_factory.h
index 90644db..cc910f83 100644
--- a/services/data_decoder/bundled_exchanges_parser_factory.h
+++ b/services/data_decoder/bundled_exchanges_parser_factory.h
@@ -12,15 +12,13 @@
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "mojo/public/cpp/bindings/remote.h"
 #include "services/data_decoder/public/mojom/bundled_exchanges_parser.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 
 namespace data_decoder {
 
 class BundledExchangesParserFactory
     : public mojom::BundledExchangesParserFactory {
  public:
-  explicit BundledExchangesParserFactory(
-      std::unique_ptr<service_manager::ServiceContextRef> service_ref);
+  BundledExchangesParserFactory();
   ~BundledExchangesParserFactory() override;
 
   std::unique_ptr<mojom::BundleDataSource> CreateFileDataSourceForTesting(
@@ -36,8 +34,6 @@
       mojo::PendingReceiver<mojom::BundledExchangesParser> receiver,
       mojo::PendingRemote<mojom::BundleDataSource> data_source) override;
 
-  const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
-
   DISALLOW_COPY_AND_ASSIGN(BundledExchangesParserFactory);
 };
 
diff --git a/services/data_decoder/bundled_exchanges_parser_factory_unittest.cc b/services/data_decoder/bundled_exchanges_parser_factory_unittest.cc
index 1197d07..a17972d 100644
--- a/services/data_decoder/bundled_exchanges_parser_factory_unittest.cc
+++ b/services/data_decoder/bundled_exchanges_parser_factory_unittest.cc
@@ -33,8 +33,7 @@
 class BundledExchangesParserFactoryTest : public testing::Test {
  public:
   BundledExchangesParserFactoryTest()
-      : factory_(std::make_unique<BundledExchangesParserFactory>(
-            /*service_ref=*/nullptr)) {}
+      : factory_(std::make_unique<BundledExchangesParserFactory>()) {}
 
   std::unique_ptr<mojom::BundleDataSource> CreateFileDataSource(
       mojo::PendingReceiver<mojom::BundleDataSource> receiver,
diff --git a/services/data_decoder/bundled_exchanges_parser_fuzzer.cc b/services/data_decoder/bundled_exchanges_parser_fuzzer.cc
index c6f4b38..3e8ad30d 100644
--- a/services/data_decoder/bundled_exchanges_parser_fuzzer.cc
+++ b/services/data_decoder/bundled_exchanges_parser_fuzzer.cc
@@ -58,8 +58,7 @@
     data_source_.AddReceiver(
         data_source_remote.InitWithNewPipeAndPassReceiver());
 
-    data_decoder::BundledExchangesParserFactory factory_impl(
-        /*service_ref=*/nullptr);
+    data_decoder::BundledExchangesParserFactory factory_impl;
     data_decoder::mojom::BundledExchangesParserFactory& factory = factory_impl;
     factory.GetParserForDataSource(parser_.BindNewPipeAndPassReceiver(),
                                    std::move(data_source_remote));
diff --git a/services/data_decoder/data_decoder_service.cc b/services/data_decoder/data_decoder_service.cc
index 63b6f63..375c074 100644
--- a/services/data_decoder/data_decoder_service.cc
+++ b/services/data_decoder/data_decoder_service.cc
@@ -28,24 +28,10 @@
 
 namespace data_decoder {
 
-namespace {
-
-constexpr auto kMaxServiceIdleTime = base::TimeDelta::FromSeconds(5);
-
-}  // namespace
-
-DataDecoderService::DataDecoderService()
-    : keepalive_(&binding_, kMaxServiceIdleTime) {}
+DataDecoderService::DataDecoderService() = default;
 
 DataDecoderService::DataDecoderService(
-    mojo::PendingReceiver<service_manager::mojom::Service> receiver)
-    : DataDecoderService() {
-  binding_.Bind(std::move(receiver));
-}
-
-DataDecoderService::DataDecoderService(
-    mojo::PendingReceiver<mojom::DataDecoderService> receiver)
-    : DataDecoderService() {
+    mojo::PendingReceiver<mojom::DataDecoderService> receiver) {
   receiver_.Bind(std::move(receiver));
 }
 
@@ -56,26 +42,6 @@
   receiver_.Bind(std::move(receiver));
 }
 
-void DataDecoderService::OnBindInterface(
-    const service_manager::BindSourceInfo& source_info,
-    const std::string& interface_name,
-    mojo::ScopedMessagePipeHandle interface_pipe) {
-  mojo::GenericPendingReceiver receiver(interface_name,
-                                        std::move(interface_pipe));
-  if (auto r = receiver.As<mojom::ImageDecoder>())
-    BindImageDecoder(std::move(r));
-  else if (auto r = receiver.As<mojom::JsonParser>())
-    BindJsonParser(std::move(r));
-  else if (auto r = receiver.As<mojom::XmlParser>())
-    BindXmlParser(std::move(r));
-  else if (auto r = receiver.As<mojom::BundledExchangesParserFactory>())
-    BindBundledExchangesParserFactory(std::move(r));
-#if defined(OS_CHROMEOS)
-  else if (auto r = receiver.As<mojom::BleScanParser>())
-    BindBleScanParser(std::move(r));
-#endif
-}
-
 void DataDecoderService::BindImageDecoder(
     mojo::PendingReceiver<mojom::ImageDecoder> receiver) {
 #if defined(OS_IOS)
@@ -83,9 +49,8 @@
 #else
   if (drop_image_decoders_)
     return;
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<ImageDecoderImpl>(keepalive_.CreateRef()),
-      std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<ImageDecoderImpl>(),
+                              std::move(receiver));
 #endif
 }
 
@@ -93,30 +58,27 @@
     mojo::PendingReceiver<mojom::JsonParser> receiver) {
   if (drop_json_parsers_)
     return;
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<JsonParserImpl>(keepalive_.CreateRef()),
-      std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<JsonParserImpl>(),
+                              std::move(receiver));
 }
 
 void DataDecoderService::BindXmlParser(
     mojo::PendingReceiver<mojom::XmlParser> receiver) {
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<XmlParser>(keepalive_.CreateRef()), std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<XmlParser>(),
+                              std::move(receiver));
 }
 
 void DataDecoderService::BindBundledExchangesParserFactory(
     mojo::PendingReceiver<mojom::BundledExchangesParserFactory> receiver) {
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<BundledExchangesParserFactory>(keepalive_.CreateRef()),
-      std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<BundledExchangesParserFactory>(),
+                              std::move(receiver));
 }
 
 #ifdef OS_CHROMEOS
 void DataDecoderService::BindBleScanParser(
     mojo::PendingReceiver<mojom::BleScanParser> receiver) {
-  mojo::MakeSelfOwnedReceiver(
-      std::make_unique<BleScanParserImpl>(keepalive_.CreateRef()),
-      std::move(receiver));
+  mojo::MakeSelfOwnedReceiver(std::make_unique<BleScanParserImpl>(),
+                              std::move(receiver));
 }
 #endif  // OS_CHROMEOS
 
diff --git a/services/data_decoder/data_decoder_service.h b/services/data_decoder/data_decoder_service.h
index 25506de..884bb7ebb 100644
--- a/services/data_decoder/data_decoder_service.h
+++ b/services/data_decoder/data_decoder_service.h
@@ -15,10 +15,6 @@
 #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
 #include "services/data_decoder/public/mojom/json_parser.mojom.h"
 #include "services/data_decoder/public/mojom/xml_parser.mojom.h"
-#include "services/service_manager/public/cpp/service.h"
-#include "services/service_manager/public/cpp/service_binding.h"
-#include "services/service_manager/public/cpp/service_keepalive.h"
-#include "services/service_manager/public/mojom/service.mojom.h"
 
 #ifdef OS_CHROMEOS
 #include "services/data_decoder/public/mojom/ble_scan_parser.mojom.h"
@@ -26,13 +22,10 @@
 
 namespace data_decoder {
 
-class DataDecoderService : public service_manager::Service,
-                           public mojom::DataDecoderService {
+class DataDecoderService : public mojom::DataDecoderService {
  public:
   DataDecoderService();
   explicit DataDecoderService(
-      mojo::PendingReceiver<service_manager::mojom::Service> receiver);
-  explicit DataDecoderService(
       mojo::PendingReceiver<mojom::DataDecoderService> receiver);
   ~DataDecoderService() override;
 
@@ -41,11 +34,6 @@
   // constructed.
   void BindReceiver(mojo::PendingReceiver<mojom::DataDecoderService> receiver);
 
-  // service_manager::Service implementation:
-  void OnBindInterface(const service_manager::BindSourceInfo& source_info,
-                       const std::string& interface_name,
-                       mojo::ScopedMessagePipeHandle interface_pipe) override;
-
   // Configures the service to drop ImageDecoder receivers instead of binding
   // them. Useful for tests simulating service failures.
   void SimulateImageDecoderCrashForTesting(bool drop) {
@@ -73,8 +61,6 @@
       mojo::PendingReceiver<mojom::BleScanParser> receiver) override;
 #endif  // OS_CHROMEOS
 
-  service_manager::ServiceBinding binding_{this};
-  service_manager::ServiceKeepalive keepalive_;
   mojo::Receiver<mojom::DataDecoderService> receiver_{this};
 
   bool drop_image_decoders_ = false;
diff --git a/services/data_decoder/image_decoder_impl.cc b/services/data_decoder/image_decoder_impl.cc
index a05ff389..6e03faf 100644
--- a/services/data_decoder/image_decoder_impl.cc
+++ b/services/data_decoder/image_decoder_impl.cc
@@ -65,9 +65,7 @@
 
 }  // namespace
 
-ImageDecoderImpl::ImageDecoderImpl(
-    std::unique_ptr<service_manager::ServiceContextRef> service_ref)
-    : service_ref_(std::move(service_ref)) {}
+ImageDecoderImpl::ImageDecoderImpl() = default;
 
 ImageDecoderImpl::~ImageDecoderImpl() = default;
 
diff --git a/services/data_decoder/image_decoder_impl.h b/services/data_decoder/image_decoder_impl.h
index 576977b..7c43c1707 100644
--- a/services/data_decoder/image_decoder_impl.h
+++ b/services/data_decoder/image_decoder_impl.h
@@ -9,15 +9,13 @@
 
 #include "base/macros.h"
 #include "services/data_decoder/public/mojom/image_decoder.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 #include "ui/gfx/geometry/size.h"
 
 namespace data_decoder {
 
 class ImageDecoderImpl : public mojom::ImageDecoder {
  public:
-  explicit ImageDecoderImpl(
-      std::unique_ptr<service_manager::ServiceContextRef> service_ref);
+  ImageDecoderImpl();
   ~ImageDecoderImpl() override;
 
   // Overridden from mojom::ImageDecoder:
@@ -33,8 +31,6 @@
                        DecodeAnimationCallback callback) override;
 
  private:
-  const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
-
   DISALLOW_COPY_AND_ASSIGN(ImageDecoderImpl);
 };
 
diff --git a/services/data_decoder/image_decoder_impl_unittest.cc b/services/data_decoder/image_decoder_impl_unittest.cc
index 16fff4f..a04ed4b 100644
--- a/services/data_decoder/image_decoder_impl_unittest.cc
+++ b/services/data_decoder/image_decoder_impl_unittest.cc
@@ -98,8 +98,8 @@
 
 class ImageDecoderImplTest : public testing::Test {
  public:
-  ImageDecoderImplTest() : decoder_(nullptr) {}
-  ~ImageDecoderImplTest() override {}
+  ImageDecoderImplTest() = default;
+  ~ImageDecoderImplTest() override = default;
 
   void SetUp() override { g_blink_initializer.Get(); }
 
diff --git a/services/data_decoder/json_parser_impl.cc b/services/data_decoder/json_parser_impl.cc
index 7118f9d6..9de2c61 100644
--- a/services/data_decoder/json_parser_impl.cc
+++ b/services/data_decoder/json_parser_impl.cc
@@ -12,9 +12,7 @@
 
 namespace data_decoder {
 
-JsonParserImpl::JsonParserImpl(
-    std::unique_ptr<service_manager::ServiceContextRef> service_ref)
-    : service_ref_(std::move(service_ref)) {}
+JsonParserImpl::JsonParserImpl() = default;
 
 JsonParserImpl::~JsonParserImpl() = default;
 
diff --git a/services/data_decoder/json_parser_impl.h b/services/data_decoder/json_parser_impl.h
index e965e6e..b70660d 100644
--- a/services/data_decoder/json_parser_impl.h
+++ b/services/data_decoder/json_parser_impl.h
@@ -9,19 +9,15 @@
 
 #include "base/macros.h"
 #include "services/data_decoder/public/mojom/json_parser.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 
 namespace data_decoder {
 
 class JsonParserImpl : public mojom::JsonParser {
  public:
-  explicit JsonParserImpl(
-      std::unique_ptr<service_manager::ServiceContextRef> service_ref);
+  JsonParserImpl();
   ~JsonParserImpl() override;
 
  private:
-  const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
-
   // mojom::JsonParser implementation.
   void Parse(const std::string& json, ParseCallback callback) override;
 
diff --git a/services/data_decoder/public/cpp/BUILD.gn b/services/data_decoder/public/cpp/BUILD.gn
index 6490dc2..bf738a7e 100644
--- a/services/data_decoder/public/cpp/BUILD.gn
+++ b/services/data_decoder/public/cpp/BUILD.gn
@@ -31,11 +31,13 @@
   public = [
     "data_decoder.h",
     "json_sanitizer.h",
+    "safe_xml_parser.h",
   ]
 
   sources = [
     "data_decoder.cc",
     "json_sanitizer.cc",
+    "safe_xml_parser.cc",
   ]
 
   configs += [ "//build/config/compiler:wexit_time_destructors" ]
@@ -44,7 +46,6 @@
     ":service_provider",
     "//base",
     "//services/data_decoder/public/mojom",
-    "//services/service_manager/public/cpp",
   ]
 
   if (is_android) {
@@ -68,12 +69,10 @@
     public += [
       "decode_image.h",
       "safe_bundled_exchanges_parser.h",
-      "safe_xml_parser.h",
     ]
     sources += [
       "decode_image.cc",
       "safe_bundled_exchanges_parser.cc",
-      "safe_xml_parser.cc",
     ]
   }
 
@@ -92,30 +91,4 @@
     "//base",
     "//services/data_decoder:lib",
   ]
-
-  if (!is_ios) {
-    sources += [
-      "test_data_decoder_service.cc",
-      "test_data_decoder_service.h",
-    ]
-
-    deps = [
-      "//services/service_manager/public/cpp/test:test_support",
-    ]
-  }
-}
-
-source_set("manifest") {
-  if (!is_ios) {
-    sources = [
-      "manifest.cc",
-      "manifest.h",
-    ]
-
-    deps = [
-      "//base",
-      "//services/data_decoder/public/mojom",
-      "//services/service_manager/public/cpp",
-    ]
-  }
 }
diff --git a/services/data_decoder/public/cpp/decode_image.cc b/services/data_decoder/public/cpp/decode_image.cc
index ccf49f37..5707600c8 100644
--- a/services/data_decoder/public/cpp/decode_image.cc
+++ b/services/data_decoder/public/cpp/decode_image.cc
@@ -9,8 +9,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "mojo/public/cpp/bindings/remote.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-#include "services/service_manager/public/cpp/connector.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 
 namespace data_decoder {
@@ -20,15 +19,13 @@
 // Helper callback which owns a mojo::Remote<ImageDecoder> until invoked. This
 // keeps the ImageDecoder pipe open just long enough to dispatch a reply, at
 // which point the reply is forwarded to the wrapped |callback|.
-void OnDecodeImage(mojo::Remote<mojom::DataDecoderService> service,
-                   mojo::Remote<mojom::ImageDecoder> decoder,
+void OnDecodeImage(mojo::Remote<mojom::ImageDecoder> decoder,
                    mojom::ImageDecoder::DecodeImageCallback callback,
                    const SkBitmap& bitmap) {
   std::move(callback).Run(bitmap);
 }
 
-void OnDecodeImages(mojo::Remote<mojom::DataDecoderService> service,
-                    mojo::Remote<mojom::ImageDecoder> decoder,
+void OnDecodeImages(mojo::Remote<mojom::ImageDecoder> decoder,
                     mojom::ImageDecoder::DecodeAnimationCallback callback,
                     std::vector<mojom::AnimationFramePtr> bitmaps) {
   std::move(callback).Run(std::move(bitmaps));
@@ -36,30 +33,35 @@
 
 }  // namespace
 
-void DecodeImage(service_manager::Connector* connector,
-                 const std::vector<uint8_t>& encoded_bytes,
-                 mojom::ImageCodec codec,
-                 bool shrink_to_fit,
-                 uint64_t max_size_in_bytes,
-                 const gfx::Size& desired_image_frame_size,
-                 mojom::ImageDecoder::DecodeImageCallback callback) {
-  mojo::PendingRemote<mojom::ImageDecoder> pending_decoder;
-  connector->Connect(mojom::kServiceName,
-                     pending_decoder.InitWithNewPipeAndPassReceiver());
-  return DecodeImage(std::move(pending_decoder), encoded_bytes, codec,
-                     shrink_to_fit, max_size_in_bytes, desired_image_frame_size,
-                     std::move(callback));
+void DecodeImageIsolated(const std::vector<uint8_t>& encoded_bytes,
+                         mojom::ImageCodec codec,
+                         bool shrink_to_fit,
+                         uint64_t max_size_in_bytes,
+                         const gfx::Size& desired_image_frame_size,
+                         mojom::ImageDecoder::DecodeImageCallback callback) {
+  // Create a new DataDecoder that we keep alive until |callback| is invoked.
+  auto data_decoder = std::make_unique<DataDecoder>();
+  auto* raw_decoder = data_decoder.get();
+  auto wrapped_callback = base::BindOnce(
+      [](std::unique_ptr<DataDecoder>,
+         mojom::ImageDecoder::DecodeImageCallback callback,
+         const SkBitmap& bitmap) { std::move(callback).Run(bitmap); },
+      std::move(data_decoder), std::move(callback));
+  DecodeImage(raw_decoder, encoded_bytes, codec, shrink_to_fit,
+              max_size_in_bytes, desired_image_frame_size,
+              std::move(wrapped_callback));
 }
 
-void DecodeImage(mojo::PendingRemote<mojom::ImageDecoder> pending_decoder,
+void DecodeImage(DataDecoder* data_decoder,
                  const std::vector<uint8_t>& encoded_bytes,
                  mojom::ImageCodec codec,
                  bool shrink_to_fit,
                  uint64_t max_size_in_bytes,
                  const gfx::Size& desired_image_frame_size,
                  mojom::ImageDecoder::DecodeImageCallback callback) {
-  mojo::Remote<mojom::DataDecoderService> null_service;
-  mojo::Remote<mojom::ImageDecoder> decoder(std::move(pending_decoder));
+  mojo::Remote<mojom::ImageDecoder> decoder;
+  data_decoder->GetService()->BindImageDecoder(
+      decoder.BindNewPipeAndPassReceiver());
 
   // |call_once| runs |callback| on its first invocation.
   auto call_once = base::AdaptCallbackForRepeating(std::move(callback));
@@ -69,39 +71,36 @@
   raw_decoder->DecodeImage(
       encoded_bytes, codec, shrink_to_fit, max_size_in_bytes,
       desired_image_frame_size,
-      base::BindOnce(&OnDecodeImage, std::move(null_service),
-                     std::move(decoder), std::move(call_once)));
+      base::BindOnce(&OnDecodeImage, std::move(decoder), std::move(call_once)));
 }
 
-void DecodeImage(mojo::Remote<mojom::DataDecoderService> service,
-                 const std::vector<uint8_t>& encoded_bytes,
-                 mojom::ImageCodec codec,
-                 bool shrink_to_fit,
-                 uint64_t max_size_in_bytes,
-                 const gfx::Size& desired_image_frame_size,
-                 mojom::ImageDecoder::DecodeImageCallback callback) {
-  mojo::Remote<mojom::ImageDecoder> decoder;
-  service->BindImageDecoder(decoder.BindNewPipeAndPassReceiver());
-
-  // |call_once| runs |callback| on its first invocation.
-  auto call_once = base::AdaptCallbackForRepeating(std::move(callback));
-  decoder.set_disconnect_handler(base::BindOnce(call_once, SkBitmap()));
-
-  mojom::ImageDecoder* raw_decoder = decoder.get();
-  raw_decoder->DecodeImage(
-      encoded_bytes, codec, shrink_to_fit, max_size_in_bytes,
-      desired_image_frame_size,
-      base::BindOnce(&OnDecodeImage, std::move(service), std::move(decoder),
-                     std::move(call_once)));
+void DecodeAnimationIsolated(
+    const std::vector<uint8_t>& encoded_bytes,
+    bool shrink_to_fit,
+    uint64_t max_size_in_bytes,
+    mojom::ImageDecoder::DecodeAnimationCallback callback) {
+  // Create a new DataDecoder that we keep alive until |callback| is invoked.
+  auto decoder = std::make_unique<DataDecoder>();
+  auto* raw_decoder = decoder.get();
+  auto wrapped_callback = base::BindOnce(
+      [](std::unique_ptr<DataDecoder>,
+         mojom::ImageDecoder::DecodeAnimationCallback callback,
+         std::vector<mojom::AnimationFramePtr> frames) {
+        std::move(callback).Run(std::move(frames));
+      },
+      std::move(decoder), std::move(callback));
+  DecodeAnimation(raw_decoder, encoded_bytes, shrink_to_fit, max_size_in_bytes,
+                  std::move(wrapped_callback));
 }
 
-void DecodeAnimation(mojo::PendingRemote<mojom::ImageDecoder> pending_decoder,
+void DecodeAnimation(DataDecoder* data_decoder,
                      const std::vector<uint8_t>& encoded_bytes,
                      bool shrink_to_fit,
                      uint64_t max_size_in_bytes,
                      mojom::ImageDecoder::DecodeAnimationCallback callback) {
-  mojo::Remote<mojom::DataDecoderService> null_service;
-  mojo::Remote<mojom::ImageDecoder> decoder(std::move(pending_decoder));
+  mojo::Remote<mojom::ImageDecoder> decoder;
+  data_decoder->GetService()->BindImageDecoder(
+      decoder.BindNewPipeAndPassReceiver());
 
   // |call_once| runs |callback| on its first invocation.
   auto call_once = base::AdaptCallbackForRepeating(std::move(callback));
@@ -111,27 +110,7 @@
   mojom::ImageDecoder* raw_decoder = decoder.get();
   raw_decoder->DecodeAnimation(
       encoded_bytes, shrink_to_fit, max_size_in_bytes,
-      base::BindOnce(&OnDecodeImages, std::move(null_service),
-                     std::move(decoder), std::move(call_once)));
-}
-
-void DecodeAnimation(mojo::Remote<mojom::DataDecoderService> service,
-                     const std::vector<uint8_t>& encoded_bytes,
-                     bool shrink_to_fit,
-                     uint64_t max_size_in_bytes,
-                     mojom::ImageDecoder::DecodeAnimationCallback callback) {
-  mojo::Remote<mojom::ImageDecoder> decoder;
-  service->BindImageDecoder(decoder.BindNewPipeAndPassReceiver());
-
-  // |call_once| runs |callback| on its first invocation.
-  auto call_once = base::AdaptCallbackForRepeating(std::move(callback));
-  decoder.set_disconnect_handler(base::BindOnce(
-      call_once, base::Passed(std::vector<mojom::AnimationFramePtr>())));
-
-  mojom::ImageDecoder* raw_decoder = decoder.get();
-  raw_decoder->DecodeAnimation(
-      encoded_bytes, shrink_to_fit, max_size_in_bytes,
-      base::BindOnce(&OnDecodeImages, std::move(service), std::move(decoder),
+      base::BindOnce(&OnDecodeImages, std::move(decoder),
                      std::move(call_once)));
 }
 
diff --git a/services/data_decoder/public/cpp/decode_image.h b/services/data_decoder/public/cpp/decode_image.h
index c220a2f..1c353a7e 100644
--- a/services/data_decoder/public/cpp/decode_image.h
+++ b/services/data_decoder/public/cpp/decode_image.h
@@ -18,12 +18,10 @@
 class Size;
 }
 
-namespace service_manager {
-class Connector;
-}
-
 namespace data_decoder {
 
+class DataDecoder;
+
 const uint64_t kDefaultMaxSizeInBytes = 128 * 1024 * 1024;
 
 // Helper function to decode an image via the data_decoder service. For images
@@ -35,27 +33,20 @@
 // Upon completion, |callback| is invoked on the calling thread TaskRunner with
 // an SkBitmap argument. The SkBitmap will be null on failure and non-null on
 // success.
-void DecodeImage(service_manager::Connector* connector,
-                 const std::vector<uint8_t>& encoded_bytes,
-                 mojom::ImageCodec codec,
-                 bool shrink_to_fit,
-                 uint64_t max_size_in_bytes,
-                 const gfx::Size& desired_image_frame_size,
-                 mojom::ImageDecoder::DecodeImageCallback callback);
+//
+// This always uses an isolated instance of the Data Decoder service. To use a
+// shared instance, call the signature below which takes a DataDecoder.
+void DecodeImageIsolated(const std::vector<uint8_t>& encoded_bytes,
+                         mojom::ImageCodec codec,
+                         bool shrink_to_fit,
+                         uint64_t max_size_in_bytes,
+                         const gfx::Size& desired_image_frame_size,
+                         mojom::ImageDecoder::DecodeImageCallback callback);
 
-// Same as above but uses an ImageDecoder interface directly instead of going
-// through the Service Manager.
-void DecodeImage(mojo::PendingRemote<mojom::ImageDecoder> pending_decoder,
-                 const std::vector<uint8_t>& encoded_bytes,
-                 mojom::ImageCodec codec,
-                 bool shrink_to_fit,
-                 uint64_t max_size_in_bytes,
-                 const gfx::Size& desired_image_frame_size,
-                 mojom::ImageDecoder::DecodeImageCallback callback);
-
-// Same as above but uses a dedicated DataDecoderService instance for the
-// operation.
-void DecodeImage(mojo::Remote<mojom::DataDecoderService> service,
+// Same as above but uses |data_decoder| to potentially share a service instance
+// with other operations. |callback| will only be invoked if |data_decoder| is
+// still alive by the time the decode operation is complete.
+void DecodeImage(DataDecoder* data_decoder,
                  const std::vector<uint8_t>& encoded_bytes,
                  mojom::ImageCodec codec,
                  bool shrink_to_fit,
@@ -66,15 +57,19 @@
 // Helper function to decode an animation via the data_decoder service. Any
 // image with multiple frames is considered an animation, so long as the frames
 // are all the same size.
-void DecodeAnimation(mojo::PendingRemote<mojom::ImageDecoder> pending_decoder,
-                     const std::vector<uint8_t>& encoded_bytes,
-                     bool shrink_to_fit,
-                     uint64_t max_size_in_bytes,
-                     mojom::ImageDecoder::DecodeAnimationCallback callback);
+//
+// This always uses an isolated instance of the Data Decoder service. To use a
+// shared instance, call the signature below which takes a DataDecoder.
+void DecodeAnimationIsolated(
+    const std::vector<uint8_t>& encoded_bytes,
+    bool shrink_to_fit,
+    uint64_t max_size_in_bytes,
+    mojom::ImageDecoder::DecodeAnimationCallback callback);
 
-// Same as above but uses a dedicated DataDecoderService instance for the
-// operation.
-void DecodeAnimation(mojo::Remote<mojom::DataDecoderService> service,
+// Same as above but uses |data_decoder| to potentially share a service instance
+// with other operations. |callback| will only be invoked if |data_decoder| is
+// still alive by the time the decode operation is complete.
+void DecodeAnimation(DataDecoder* data_decoder,
                      const std::vector<uint8_t>& encoded_bytes,
                      bool shrink_to_fit,
                      uint64_t max_size_in_bytes,
diff --git a/services/data_decoder/public/cpp/manifest.cc b/services/data_decoder/public/cpp/manifest.cc
deleted file mode 100644
index d2b85797..0000000
--- a/services/data_decoder/public/cpp/manifest.cc
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "services/data_decoder/public/cpp/manifest.h"
-
-#include "base/no_destructor.h"
-#include "services/data_decoder/public/mojom/bundled_exchanges_parser.mojom.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-#include "services/data_decoder/public/mojom/image_decoder.mojom.h"
-#include "services/data_decoder/public/mojom/json_parser.mojom.h"
-#include "services/data_decoder/public/mojom/xml_parser.mojom.h"
-#include "services/service_manager/public/cpp/manifest_builder.h"
-
-#ifdef OS_CHROMEOS
-#include "services/data_decoder/public/mojom/ble_scan_parser.mojom.h"
-#endif  // OS_CHROMEOS
-
-namespace data_decoder {
-
-const service_manager::Manifest& GetManifest() {
-  auto manifest_builder =
-      service_manager::ManifestBuilder()
-          .WithServiceName(mojom::kServiceName)
-          .WithDisplayName("Data Decoder Service")
-          .WithOptions(
-              service_manager::ManifestOptionsBuilder()
-                  .WithExecutionMode(service_manager::Manifest::ExecutionMode::
-                                         kOutOfProcessBuiltin)
-                  .WithInstanceSharingPolicy(
-                      service_manager::Manifest::InstanceSharingPolicy::
-                          kSharedAcrossGroups)
-                  .Build())
-          .ExposeCapability(
-              "image_decoder",
-              service_manager::Manifest::InterfaceList<mojom::ImageDecoder>())
-          .ExposeCapability(
-              "json_parser",
-              service_manager::Manifest::InterfaceList<mojom::JsonParser>())
-          .ExposeCapability(
-              "xml_parser",
-              service_manager::Manifest::InterfaceList<mojom::XmlParser>())
-          .ExposeCapability("bundled_exchanges_parser_factory",
-                            service_manager::Manifest::InterfaceList<
-                                mojom::BundledExchangesParserFactory>());
-
-#ifdef OS_CHROMEOS
-  manifest_builder.ExposeCapability(
-      "ble_scan_parser",
-      service_manager::Manifest::InterfaceList<mojom::BleScanParser>());
-#endif  // OS_CHROMEOS
-
-  static base::NoDestructor<service_manager::Manifest> manifest{
-      manifest_builder.Build()};
-  return *manifest;
-}
-
-}  // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/manifest.h b/services/data_decoder/public/cpp/manifest.h
deleted file mode 100644
index df82d1e1..0000000
--- a/services/data_decoder/public/cpp/manifest.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2019 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef SERVICES_DATA_DECODER_PUBLIC_CPP_MANIFEST_H_
-#define SERVICES_DATA_DECODER_PUBLIC_CPP_MANIFEST_H_
-
-#include "services/service_manager/public/cpp/manifest.h"
-
-namespace data_decoder {
-
-const service_manager::Manifest& GetManifest();
-
-}  // namespace data_decoder
-
-#endif  // SERVICES_DATA_DECODER_PUBLIC_CPP_MANIFEST_H_
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
index 26cbbafd..a3a131113 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.cc
@@ -5,7 +5,6 @@
 #include "services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h"
 
 #include "base/bind.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
 
 namespace data_decoder {
 
@@ -14,26 +13,18 @@
     "Cannot connect to the remote parser service";
 }  // namespace
 
-SafeBundledExchangesParser::SafeBundledExchangesParser(
-    mojo::Remote<data_decoder::mojom::DataDecoderService> service)
-    : service_(std::move(service)) {
-  if (service_.is_bound()) {
-    service_->BindBundledExchangesParserFactory(
-        factory_.BindNewPipeAndPassReceiver());
-  }
-}
+SafeBundledExchangesParser::SafeBundledExchangesParser() = default;
 
 SafeBundledExchangesParser::~SafeBundledExchangesParser() = default;
 
 base::File::Error SafeBundledExchangesParser::OpenFile(base::File file) {
   DCHECK(disconnected_);
-  DCHECK(factory_.is_connected());
 
   if (!file.IsValid())
     return file.error_details();
 
-  factory_->GetParserForFile(parser_.BindNewPipeAndPassReceiver(),
-                             std::move(file));
+  GetFactory()->GetParserForFile(parser_.BindNewPipeAndPassReceiver(),
+                                 std::move(file));
   parser_.set_disconnect_handler(base::BindOnce(
       &SafeBundledExchangesParser::OnDisconnect, base::Unretained(this)));
 
@@ -45,9 +36,8 @@
 void SafeBundledExchangesParser::OpenDataSource(
     mojo::PendingRemote<mojom::BundleDataSource> data_source) {
   DCHECK(disconnected_);
-  DCHECK(factory_.is_connected());
-  factory_->GetParserForDataSource(parser_.BindNewPipeAndPassReceiver(),
-                                   std::move(data_source));
+  GetFactory()->GetParserForDataSource(parser_.BindNewPipeAndPassReceiver(),
+                                       std::move(data_source));
   parser_.set_disconnect_handler(base::BindOnce(
       &SafeBundledExchangesParser::OnDisconnect, base::Unretained(this)));
 
@@ -93,6 +83,15 @@
                      base::Unretained(this), callback_id));
 }
 
+mojom::BundledExchangesParserFactory* SafeBundledExchangesParser::GetFactory() {
+  if (!factory_) {
+    data_decoder_.GetService()->BindBundledExchangesParserFactory(
+        factory_.BindNewPipeAndPassReceiver());
+    factory_.reset_on_disconnect();
+  }
+  return factory_.get();
+}
+
 void SafeBundledExchangesParser::OnDisconnect() {
   disconnected_ = true;
   if (!metadata_callback_.is_null())
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
index d706c66..e2021ac 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser.h
@@ -13,8 +13,8 @@
 #include "mojo/public/cpp/bindings/pending_receiver.h"
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/remote.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
 #include "services/data_decoder/public/mojom/bundled_exchanges_parser.mojom.h"
-#include "services/data_decoder/public/mojom/data_decoder_service.mojom.h"
 
 namespace data_decoder {
 
@@ -22,10 +22,7 @@
 // mojom::BundledExchangesParser service.
 class SafeBundledExchangesParser {
  public:
-  // |service| can be unbound if SetBundledExchangesParserForTesting() will be
-  // called before calling Open*().
-  explicit SafeBundledExchangesParser(
-      mojo::Remote<data_decoder::mojom::DataDecoderService> service);
+  SafeBundledExchangesParser();
   // Remaining callbacks on flight will be dropped.
   ~SafeBundledExchangesParser();
 
@@ -55,6 +52,7 @@
       mojo::Remote<mojom::BundledExchangesParserFactory> factory);
 
  private:
+  mojom::BundledExchangesParserFactory* GetFactory();
   void OnDisconnect();
   void OnMetadataParsed(mojom::BundleMetadataPtr metadata,
                         mojom::BundleMetadataParseErrorPtr error);
@@ -62,7 +60,7 @@
                         mojom::BundleResponsePtr response,
                         mojom::BundleResponseParseErrorPtr error);
 
-  mojo::Remote<data_decoder::mojom::DataDecoderService> service_;
+  DataDecoder data_decoder_;
   mojo::Remote<mojom::BundledExchangesParserFactory> factory_;
   mojo::Remote<mojom::BundledExchangesParser> parser_;
   mojom::BundledExchangesParser::ParseMetadataCallback metadata_callback_;
diff --git a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
index 4bc79fe..f4078e5 100644
--- a/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
+++ b/services/data_decoder/public/cpp/safe_bundled_exchanges_parser_unittest.cc
@@ -15,7 +15,7 @@
 #include "base/run_loop.h"
 #include "base/test/task_environment.h"
 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
-#include "services/data_decoder/data_decoder_service.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace data_decoder {
@@ -109,14 +109,6 @@
 
 class SafeBundledExchangesParserTest : public testing::Test {
  public:
-  mojo::Remote<mojom::DataDecoderService> GetService() {
-    DCHECK(!service_);
-    mojo::Remote<mojom::DataDecoderService> remote;
-    service_ = std::make_unique<DataDecoderService>(
-        remote.BindNewPipeAndPassReceiver());
-    return remote;
-  }
-
   MockFactory* InitializeMockFactory(SafeBundledExchangesParser* parser) {
     std::unique_ptr<MockFactory> factory = std::make_unique<MockFactory>();
     MockFactory* raw_factory = factory.get();
@@ -129,11 +121,11 @@
 
  private:
   base::test::TaskEnvironment task_environment_;
-  std::unique_ptr<DataDecoderService> service_;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder_;
 };
 
 TEST_F(SafeBundledExchangesParserTest, ParseGoldenFile) {
-  SafeBundledExchangesParser parser(GetService());
+  SafeBundledExchangesParser parser;
   base::File test_file =
       OpenTestFile(base::FilePath(FILE_PATH_LITERAL("hello.wbn")));
   ASSERT_EQ(base::File::FILE_OK, parser.OpenFile(std::move(test_file)));
@@ -191,12 +183,12 @@
 }
 
 TEST_F(SafeBundledExchangesParserTest, OpenInvalidFile) {
-  SafeBundledExchangesParser parser(GetService());
+  SafeBundledExchangesParser parser;
   EXPECT_EQ(base::File::FILE_ERROR_FAILED, parser.OpenFile(base::File()));
 }
 
 TEST_F(SafeBundledExchangesParserTest, CallWithoutOpen) {
-  SafeBundledExchangesParser parser(GetService());
+  SafeBundledExchangesParser parser;
   bool metadata_parsed = false;
   parser.ParseMetadata(base::BindOnce(
       [](bool* metadata_parsed, mojom::BundleMetadataPtr metadata,
@@ -227,7 +219,7 @@
 }
 
 TEST_F(SafeBundledExchangesParserTest, UseMockFactory) {
-  SafeBundledExchangesParser parser(GetService());
+  SafeBundledExchangesParser parser;
   MockFactory* raw_factory = InitializeMockFactory(&parser);
 
   EXPECT_FALSE(raw_factory->GetCreatedParser());
@@ -250,7 +242,7 @@
 }
 
 TEST_F(SafeBundledExchangesParserTest, ConnectionError) {
-  SafeBundledExchangesParser parser(GetService());
+  SafeBundledExchangesParser parser;
   MockFactory* raw_factory = InitializeMockFactory(&parser);
 
   mojo::PendingRemote<mojom::BundleDataSource> remote_data_source;
diff --git a/services/data_decoder/public/cpp/safe_xml_parser_unittest.cc b/services/data_decoder/public/cpp/safe_xml_parser_unittest.cc
index 834a3980..3e99289 100644
--- a/services/data_decoder/public/cpp/safe_xml_parser_unittest.cc
+++ b/services/data_decoder/public/cpp/safe_xml_parser_unittest.cc
@@ -18,7 +18,7 @@
 namespace {
 
 std::unique_ptr<base::Value> ParseXml(const std::string& xml) {
-  XmlParser parser_impl(/*service_ref=*/nullptr);
+  XmlParser parser_impl;
   mojom::XmlParser& parser = parser_impl;
   std::unique_ptr<base::Value> root_node;
 
diff --git a/services/data_decoder/public/cpp/test_data_decoder_service.cc b/services/data_decoder/public/cpp/test_data_decoder_service.cc
deleted file mode 100644
index 23b1c17..0000000
--- a/services/data_decoder/public/cpp/test_data_decoder_service.cc
+++ /dev/null
@@ -1,20 +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/data_decoder/public/cpp/test_data_decoder_service.h"
-
-#include "mojo/public/cpp/bindings/pending_receiver.h"
-#include "services/data_decoder/data_decoder_service.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
-
-namespace data_decoder {
-
-TestDataDecoderService::TestDataDecoderService()
-    : connector_(connector_factory_.CreateConnector()),
-      service_(connector_factory_.RegisterInstance(
-          data_decoder::mojom::kServiceName)) {}
-
-TestDataDecoderService::~TestDataDecoderService() = default;
-
-}  // namespace data_decoder
diff --git a/services/data_decoder/public/cpp/test_data_decoder_service.h b/services/data_decoder/public/cpp/test_data_decoder_service.h
deleted file mode 100644
index d0f619e..0000000
--- a/services/data_decoder/public/cpp/test_data_decoder_service.h
+++ /dev/null
@@ -1,46 +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_DATA_DECODER_PUBLIC_CPP_TEST_DATA_DECODER_SERVICE_H_
-#define SERVICES_DATA_DECODER_PUBLIC_CPP_TEST_DATA_DECODER_SERVICE_H_
-
-#include <memory>
-
-#include "base/macros.h"
-#include "mojo/public/cpp/bindings/receiver.h"
-#include "services/data_decoder/data_decoder_service.h"
-#include "services/data_decoder/public/mojom/image_decoder.mojom.h"
-#include "services/data_decoder/public/mojom/json_parser.mojom.h"
-#include "services/service_manager/public/cpp/service.h"
-#include "services/service_manager/public/cpp/service_binding.h"
-#include "services/service_manager/public/cpp/test/test_connector_factory.h"
-
-namespace service_manager {
-class Connector;
-}
-
-namespace data_decoder {
-
-// A class that can be used by tests that need access to a Connector that can
-// bind the DataDecoder's interfaces. Bypasses the Service Manager entirely.
-class TestDataDecoderService {
- public:
-  TestDataDecoderService();
-  ~TestDataDecoderService();
-
-  // Returns a connector that can be used to bind DataDecoder's interfaces.
-  // The returned connector is valid as long as |this| is valid.
-  service_manager::Connector* connector() const { return connector_.get(); }
-
- private:
-  service_manager::TestConnectorFactory connector_factory_;
-  std::unique_ptr<service_manager::Connector> connector_;
-  DataDecoderService service_;
-
-  DISALLOW_COPY_AND_ASSIGN(TestDataDecoderService);
-};
-
-}  // namespace data_decoder
-
-#endif  // SERVICES_DATA_DECODER_PUBLIC_CPP_TEST_DATA_DECODER_SERVICE_H_
diff --git a/services/data_decoder/xml_parser.cc b/services/data_decoder/xml_parser.cc
index 4280176..5a86642 100644
--- a/services/data_decoder/xml_parser.cc
+++ b/services/data_decoder/xml_parser.cc
@@ -103,9 +103,7 @@
 
 }  // namespace
 
-XmlParser::XmlParser(
-    std::unique_ptr<service_manager::ServiceContextRef> service_ref)
-    : service_ref_(std::move(service_ref)) {}
+XmlParser::XmlParser() = default;
 
 XmlParser::~XmlParser() = default;
 
diff --git a/services/data_decoder/xml_parser.h b/services/data_decoder/xml_parser.h
index 2ef4df4..53ee659c 100644
--- a/services/data_decoder/xml_parser.h
+++ b/services/data_decoder/xml_parser.h
@@ -10,19 +10,15 @@
 
 #include "base/macros.h"
 #include "services/data_decoder/public/mojom/xml_parser.mojom.h"
-#include "services/service_manager/public/cpp/service_context_ref.h"
 
 namespace data_decoder {
 
 class XmlParser : public mojom::XmlParser {
  public:
-  explicit XmlParser(
-      std::unique_ptr<service_manager::ServiceContextRef> service_ref);
+  XmlParser();
   ~XmlParser() override;
 
  private:
-  const std::unique_ptr<service_manager::ServiceContextRef> service_ref_;
-
   // mojom::XmlParser implementation.
   void Parse(const std::string& xml, ParseCallback callback) override;
 
diff --git a/services/data_decoder/xml_parser_fuzzer.cc b/services/data_decoder/xml_parser_fuzzer.cc
index 27c61e3..8cd6f62d 100644
--- a/services/data_decoder/xml_parser_fuzzer.cc
+++ b/services/data_decoder/xml_parser_fuzzer.cc
@@ -32,7 +32,7 @@
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   const char* data_ptr = reinterpret_cast<const char*>(data);
 
-  data_decoder::XmlParser xml_parser_impl(/*service_ref=*/nullptr);
+  data_decoder::XmlParser xml_parser_impl;
   data_decoder::mojom::XmlParser& xml_parser = xml_parser_impl;
 
   base::SingleThreadTaskExecutor main_thread_task_executor;
diff --git a/services/data_decoder/xml_parser_unittest.cc b/services/data_decoder/xml_parser_unittest.cc
index b544d57f..f0d7868 100644
--- a/services/data_decoder/xml_parser_unittest.cc
+++ b/services/data_decoder/xml_parser_unittest.cc
@@ -28,7 +28,7 @@
 // Parses the passed in |xml| and compares the result to |json|.
 // If |json| is empty, the parsing is expected to fail.
 void TestParseXml(const std::string& xml, const std::string& json) {
-  XmlParser parser_impl(/*service_ref=*/nullptr);
+  XmlParser parser_impl;
   // Use a reference to mojom::XmlParser as XmlParser implements the interface
   // privately.
   mojom::XmlParser& parser = parser_impl;
diff --git a/services/image_annotation/BUILD.gn b/services/image_annotation/BUILD.gn
index c9aa221bb..436d1f67 100644
--- a/services/image_annotation/BUILD.gn
+++ b/services/image_annotation/BUILD.gn
@@ -55,6 +55,7 @@
     "//base/test:test_support",
     "//mojo/public/cpp/bindings",
     "//net",
+    "//services/data_decoder/public/cpp",
     "//services/data_decoder/public/cpp:test_support",
     "//services/data_decoder/public/mojom",
     "//services/image_annotation/public/cpp",
diff --git a/services/image_annotation/annotator.cc b/services/image_annotation/annotator.cc
index cab23c2c..c7daaf2 100644
--- a/services/image_annotation/annotator.cc
+++ b/services/image_annotation/annotator.cc
@@ -20,7 +20,6 @@
 #include "net/base/load_flags.h"
 #include "net/base/net_errors.h"
 #include "net/traffic_annotation/network_traffic_annotation.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
 #include "services/image_annotation/image_annotation_metrics.h"
 #include "services/network/public/mojom/url_response_head.mojom.h"
 #include "url/gurl.h"
diff --git a/services/image_annotation/annotator_unittest.cc b/services/image_annotation/annotator_unittest.cc
index ed310c1..cef8569c 100644
--- a/services/image_annotation/annotator_unittest.cc
+++ b/services/image_annotation/annotator_unittest.cc
@@ -19,16 +19,14 @@
 #include "mojo/public/cpp/bindings/receiver_set.h"
 #include "net/base/net_errors.h"
 #include "net/http/http_status_code.h"
-#include "services/data_decoder/public/cpp/test_data_decoder_service.h"
-#include "services/data_decoder/public/mojom/constants.mojom.h"
+#include "services/data_decoder/public/cpp/data_decoder.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "services/data_decoder/public/mojom/json_parser.mojom.h"
 #include "services/image_annotation/image_annotation_metrics.h"
 #include "services/image_annotation/public/mojom/image_annotation.mojom.h"
 #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h"
 #include "services/network/public/mojom/url_loader.mojom-shared.h"
 #include "services/network/test/test_url_loader_factory.h"
-#include "services/service_manager/public/cpp/connector.h"
-#include "services/service_manager/public/mojom/service.mojom.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -383,18 +381,17 @@
 
 class TestAnnotatorClient : public Annotator::Client {
  public:
-  explicit TestAnnotatorClient(service_manager::Connector* connector)
-      : connector_(connector) {}
+  explicit TestAnnotatorClient() = default;
   ~TestAnnotatorClient() override = default;
 
   // Annotator::Client implementation:
   void BindJsonParser(mojo::PendingReceiver<data_decoder::mojom::JsonParser>
                           receiver) override {
-    connector_->Connect(data_decoder::mojom::kServiceName, std::move(receiver));
+    decoder_.GetService()->BindJsonParser(std::move(receiver));
   }
 
  private:
-  service_manager::Connector* const connector_;
+  data_decoder::DataDecoder decoder_;
 };
 
 }  // namespace
@@ -405,14 +402,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
   TestImageProcessor processor;
 
   // First call performs original image annotation.
@@ -512,14 +509,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
   TestImageProcessor processor;
 
   base::Optional<mojom::AnnotateImageError> error;
@@ -620,14 +617,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
   TestImageProcessor processor;
 
   base::Optional<mojom::AnnotateImageError> error;
@@ -736,14 +733,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -793,14 +790,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -877,14 +874,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -972,14 +969,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -1063,14 +1060,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -1122,14 +1119,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor;
   base::Optional<mojom::AnnotateImageError> error;
@@ -1198,14 +1195,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[3];
   base::Optional<mojom::AnnotateImageError> error[3];
@@ -1279,14 +1276,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[2];
   base::Optional<mojom::AnnotateImageError> error[2];
@@ -1349,14 +1346,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[3];
   base::Optional<mojom::AnnotateImageError> error[3];
@@ -1425,14 +1422,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      3 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 3 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[3];
   base::Optional<mojom::AnnotateImageError> error[3];
@@ -1513,14 +1510,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      3 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 3 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[2];
   base::Optional<mojom::AnnotateImageError> error[2];
@@ -1658,14 +1655,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 1 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[4];
   base::Optional<mojom::AnnotateImageError> error[4];
@@ -1767,14 +1764,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      3 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 3 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[3];
   base::Optional<mojom::AnnotateImageError> error[3];
@@ -1970,14 +1967,14 @@
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
   TestServerURLLoaderFactory test_url_factory(
       "https://ia-pa.googleapis.com/v1/");
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
   base::HistogramTester histogram_tester;
 
-  Annotator annotator(
-      GURL(kTestServerUrl), std::string() /* api_key */, kThrottle,
-      3 /* batch_size */, 1.0 /* min_ocr_confidence */,
-      test_url_factory.AsSharedURLLoaderFactory(),
-      std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+  Annotator annotator(GURL(kTestServerUrl), std::string() /* api_key */,
+                      kThrottle, 3 /* batch_size */,
+                      1.0 /* min_ocr_confidence */,
+                      test_url_factory.AsSharedURLLoaderFactory(),
+                      std::make_unique<TestAnnotatorClient>());
 
   TestImageProcessor processor[3];
   base::Optional<mojom::AnnotateImageError> error[3];
@@ -2163,7 +2160,7 @@
 TEST(AnnotatorTest, ApiKey) {
   base::test::TaskEnvironment test_task_env(
       base::test::TaskEnvironment::TimeSource::MOCK_TIME);
-  data_decoder::TestDataDecoderService test_dd_service;
+  data_decoder::test::InProcessDataDecoder in_process_data_decoder;
 
   // A call to a secure Google-owner server URL should include the specified API
   // key.
@@ -2171,11 +2168,10 @@
     TestServerURLLoaderFactory test_url_factory(
         "https://ia-pa.googleapis.com/v1/");
 
-    Annotator annotator(
-        GURL(kTestServerUrl), "my_api_key", kThrottle, 1 /* batch_size */,
-        1.0 /* min_ocr_confidence */,
-        test_url_factory.AsSharedURLLoaderFactory(),
-        std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+    Annotator annotator(GURL(kTestServerUrl), "my_api_key", kThrottle,
+                        1 /* batch_size */, 1.0 /* min_ocr_confidence */,
+                        test_url_factory.AsSharedURLLoaderFactory(),
+                        std::make_unique<TestAnnotatorClient>());
     TestImageProcessor processor;
 
     annotator.AnnotateImage(kImage1Url, kDescLang, processor.GetPendingRemote(),
@@ -2205,11 +2201,11 @@
     TestServerURLLoaderFactory test_url_factory(
         "http://ia-pa.googleapis.com/v1/");
 
-    Annotator annotator(
-        GURL("http://ia-pa.googleapis.com/v1/annotation"), "my_api_key",
-        kThrottle, 1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-        test_url_factory.AsSharedURLLoaderFactory(),
-        std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+    Annotator annotator(GURL("http://ia-pa.googleapis.com/v1/annotation"),
+                        "my_api_key", kThrottle, 1 /* batch_size */,
+                        1.0 /* min_ocr_confidence */,
+                        test_url_factory.AsSharedURLLoaderFactory(),
+                        std::make_unique<TestAnnotatorClient>());
     TestImageProcessor processor;
 
     annotator.AnnotateImage(kImage1Url, kDescLang, processor.GetPendingRemote(),
@@ -2236,11 +2232,11 @@
   {
     TestServerURLLoaderFactory test_url_factory("https://datascraper.com/");
 
-    Annotator annotator(
-        GURL("https://datascraper.com/annotation"), "my_api_key", kThrottle,
-        1 /* batch_size */, 1.0 /* min_ocr_confidence */,
-        test_url_factory.AsSharedURLLoaderFactory(),
-        std::make_unique<TestAnnotatorClient>(test_dd_service.connector()));
+    Annotator annotator(GURL("https://datascraper.com/annotation"),
+                        "my_api_key", kThrottle, 1 /* batch_size */,
+                        1.0 /* min_ocr_confidence */,
+                        test_url_factory.AsSharedURLLoaderFactory(),
+                        std::make_unique<TestAnnotatorClient>());
     TestImageProcessor processor;
 
     annotator.AnnotateImage(kImage1Url, kDescLang, processor.GetPendingRemote(),
diff --git a/services/tracing/BUILD.gn b/services/tracing/BUILD.gn
index 4379d66c..389a7cb 100644
--- a/services/tracing/BUILD.gn
+++ b/services/tracing/BUILD.gn
@@ -132,6 +132,8 @@
     "perfetto/json_trace_exporter_unittest.cc",
     "perfetto/perfetto_integration_unittest.cc",
     "perfetto/track_event_json_exporter_unittest.cc",
+    "public/cpp/perfetto/java_heap_profiler/hprof_buffer_android_unittest.cc",
+    "public/cpp/perfetto/java_heap_profiler/hprof_parser_android_unittest.cc",
     "public/cpp/perfetto/task_runner_unittest.cc",
     "public/cpp/perfetto/trace_event_data_source_unittest.cc",
     "public/cpp/perfetto/traced_value_proto_writer_unittest.cc",
diff --git a/services/tracing/public/cpp/BUILD.gn b/services/tracing/public/cpp/BUILD.gn
index 5876a6b..dd1ea9ee 100644
--- a/services/tracing/public/cpp/BUILD.gn
+++ b/services/tracing/public/cpp/BUILD.gn
@@ -34,6 +34,10 @@
       "perfetto/dummy_producer.cc",
       "perfetto/dummy_producer.h",
       "perfetto/interning_index.h",
+      "perfetto/java_heap_profiler/hprof_buffer_android.cc",
+      "perfetto/java_heap_profiler/hprof_buffer_android.h",
+      "perfetto/java_heap_profiler/hprof_parser_android.cc",
+      "perfetto/java_heap_profiler/hprof_parser_android.h",
       "perfetto/java_heap_profiler/java_heap_profiler_android.cc",
       "perfetto/java_heap_profiler/java_heap_profiler_android.h",
       "perfetto/perfetto_config.cc",
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.cc b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.cc
new file mode 100644
index 0000000..a681f47
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.cc
@@ -0,0 +1,73 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h"
+
+#include "base/logging.h"
+
+namespace tracing {
+
+HprofBuffer::HprofBuffer(const unsigned char* data, size_t size)
+    : data_(data), size_(size) {}
+
+uint32_t HprofBuffer::GetOneByte() {
+  return GetUInt32FromBytes(1);
+}
+
+uint32_t HprofBuffer::GetTwoBytes() {
+  return GetUInt32FromBytes(2);
+}
+
+uint32_t HprofBuffer::GetFourBytes() {
+  return GetUInt32FromBytes(4);
+}
+
+uint64_t HprofBuffer::GetId() {
+  return GetUInt64FromBytes(object_id_size_in_bytes_);
+}
+
+bool HprofBuffer::HasRemaining() {
+  return data_position_ < size_;
+}
+
+void HprofBuffer::set_id_size(unsigned id_size) {
+  DCHECK(id_size == 4 || id_size == 8);
+  object_id_size_in_bytes_ = id_size;
+}
+
+void HprofBuffer::set_position(size_t new_position) {
+  DCHECK(new_position <= size_ && new_position >= 0);
+  data_position_ = new_position;
+}
+
+// Skips |delta| bytes in the buffer.
+void HprofBuffer::Skip(uint32_t delta) {
+  set_position(data_position_ + delta);
+}
+
+unsigned char HprofBuffer::GetByte() {
+  DCHECK(HasRemaining());
+  unsigned char byte = data_[data_position_];
+  ++data_position_;
+  return byte;
+}
+
+// Read in the next |num_bytes| as an uint32_t.
+uint32_t HprofBuffer::GetUInt32FromBytes(size_t num_bytes) {
+  uint32_t val = 0;
+  for (size_t i = 0; i < num_bytes; ++i) {
+    val = (val << 8) + GetByte();
+  }
+  return val;
+}
+
+// Read in the next |num_bytes| as an uint64_t.
+uint64_t HprofBuffer::GetUInt64FromBytes(size_t num_bytes) {
+  uint64_t val = 0;
+  for (size_t i = 0; i < num_bytes; ++i) {
+    val = (val << 8) + GetByte();
+  }
+  return val;
+}
+}  // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h
new file mode 100644
index 0000000..16c79f4
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h
@@ -0,0 +1,54 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_BUFFER_ANDROID_H_
+#define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_BUFFER_ANDROID_H_
+
+#include <stddef.h>
+#include <cstdint>
+
+#include "base/component_export.h"
+#include "base/macros.h"
+
+namespace tracing {
+
+// Helper class that has methods to help parse the hprof file data passed in.
+// Works by accessing byte one at a time through data_[data_position_] while
+// also incrementing |data_position_| after reading a byte.
+class COMPONENT_EXPORT(TRACING_CPP) HprofBuffer {
+ public:
+  HprofBuffer(const unsigned char* data, size_t size);
+  HprofBuffer(const HprofBuffer&) = delete;
+  HprofBuffer& operator=(const HprofBuffer&) = delete;
+
+  uint32_t GetOneByte();
+  uint32_t GetTwoBytes();
+  uint32_t GetFourBytes();
+  uint64_t GetId();
+  bool HasRemaining();
+  void set_id_size(unsigned id_size);
+  void set_position(size_t new_position);
+
+  // Skips |delta| bytes in the buffer.
+  void Skip(uint32_t delta);
+
+ private:
+  unsigned char GetByte();
+
+  // Read in the next |num_bytes| as an uint32_t.
+  uint32_t GetUInt32FromBytes(size_t num_bytes);
+
+  // Read in the next |num_bytes| as an uint64_t.
+  uint64_t GetUInt64FromBytes(size_t num_bytes);
+
+  const unsigned char* const data_;
+  const size_t size_;
+  size_t data_position_ = 0;
+  // The ID size in bytes of the objects in the hprof, valid values are 4 and 8.
+  unsigned object_id_size_in_bytes_ = 4;
+};
+
+}  // namespace tracing
+
+#endif  // SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_BUFFER_ANDROID_H_
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android_unittest.cc b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android_unittest.cc
new file mode 100644
index 0000000..ac969be4
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android_unittest.cc
@@ -0,0 +1,42 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stddef.h>
+#include <cstdint>
+
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace tracing {
+
+TEST(HprofBufferTest, VerifyBasicGetBytes) {
+  unsigned char file_data[7]{1, 1, 1, 1, 1, 1, 1};
+  HprofBuffer hprof(file_data, 7);
+  EXPECT_EQ(hprof.GetOneByte(), (uint32_t)1);
+  EXPECT_EQ(hprof.GetTwoBytes(), (uint32_t)257);
+  EXPECT_EQ(hprof.GetFourBytes(), (uint32_t)16843009);
+  EXPECT_EQ(hprof.HasRemaining(), false);
+}
+
+TEST(HprofBufferTest, VerifyBasicGetId) {
+  unsigned char file_data[12]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
+  HprofBuffer hprof(file_data, 12);
+  EXPECT_EQ(hprof.GetId(), (uint64_t)16843009);
+  hprof.set_id_size(8);
+  EXPECT_EQ(hprof.GetId(), (uint64_t)72340172838076673);
+  EXPECT_EQ(hprof.HasRemaining(), false);
+}
+
+TEST(HprofBufferTest, VerifyBasicPositionalMethods) {
+  unsigned char file_data[4]{1, 2, 3, 4};
+  HprofBuffer hprof(file_data, 4);
+  EXPECT_EQ(hprof.GetOneByte(), (uint32_t)1);
+  hprof.Skip(2);
+  EXPECT_EQ(hprof.GetOneByte(), (uint32_t)4);
+  EXPECT_EQ(hprof.HasRemaining(), false);
+
+  hprof.set_position(1);
+  EXPECT_EQ(hprof.GetOneByte(), (uint32_t)2);
+}
+}  // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.cc b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.cc
new file mode 100644
index 0000000..c477234
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.cc
@@ -0,0 +1,84 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "hprof_parser_android.h"
+
+#include <fcntl.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <fstream>
+
+#include "base/android/java_heap_dump_generator.h"
+#include "base/files/file.h"
+#include "base/files/scoped_file.h"
+#include "base/files/scoped_temp_dir.h"
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h"
+#include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h"
+
+namespace tracing {
+
+HprofParser::HprofParser(const std::string& fp) : file_path_(fp) {}
+
+HprofParser::ParseStats::ParseStats() {}
+
+void HprofParser::ParseFileData(const unsigned char* file_data,
+                                size_t file_size) {
+  HprofBuffer hprof(file_data, file_size);
+
+  uint32_t id_size;
+  // Skip all leading 0s until we find the |id_size|.
+  while (hprof.GetOneByte() != 0 && hprof.HasRemaining()) {
+  }
+  id_size = hprof.GetFourBytes();
+  hprof.set_id_size(id_size);
+
+  hprof.Skip(4);  // hightime
+  hprof.Skip(4);  // lowtime
+  while (hprof.HasRemaining()) {
+    uint32_t tag = hprof.GetOneByte();
+    hprof.Skip(4);  // time
+    uint32_t record_length = hprof.GetFourBytes();
+
+    switch (tag) {
+      default:
+        // Ignore any other tags that we either don't know about or don't
+        // care about. For now, Skip everything.
+        // TODO(zhanggeorge): Add specific parsing per tag.
+        hprof.Skip(record_length);
+        break;
+    }
+  }
+  parse_stats_.result = HprofParser::ParseResult::PARSE_SUCCESS;
+}
+
+HprofParser::ParseResult HprofParser::Parse() {
+  base::ScopedFD fd(open(file_path_.c_str(), O_RDONLY));
+  if (!fd.is_valid()) {
+    parse_stats_.result = HprofParser::ParseResult::FAILED_TO_OPEN_FILE;
+    return parse_stats_.result;
+  }
+
+  struct stat file_stats;
+  if (stat(file_path_.c_str(), &file_stats) < 0) {
+    parse_stats_.result = HprofParser::ParseResult::FAILED_TO_OPEN_FILE;
+    return parse_stats_.result;
+  }
+
+  void* file_data =
+      mmap(0, file_stats.st_size, PROT_READ, MAP_PRIVATE, fd.get(), 0);
+  if (file_data == MAP_FAILED) {
+    parse_stats_.result = HprofParser::ParseResult::FAILED_TO_OPEN_FILE;
+    return parse_stats_.result;
+  }
+
+  ParseFileData(reinterpret_cast<const unsigned char*>(file_data),
+                file_stats.st_size);
+
+  int res = munmap(file_data, file_stats.st_size);
+  DCHECK_EQ(res, 0);
+
+  return parse_stats_.result;
+}
+}  // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.h b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.h
new file mode 100644
index 0000000..5218555
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.h
@@ -0,0 +1,62 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_PARSER_ANDROID_H_
+#define SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_PARSER_ANDROID_H_
+
+#include <string>
+
+#include "base/component_export.h"
+
+namespace tracing {
+
+// This class takes in a temporary file_path where Java API endpoint
+// Debug.dumpHprofData() dumps hprof data to. This file is then parsed for
+// references between different instances. The format is defined by said method.
+// Refer to:
+// https://docs.google.com/document/d/1frGMt8Ro7C6fjbDscImdxHVsFAbSH1mjdETWisZjzVE
+// for more information on the file format and
+// https://developer.android.com/reference/android/os/Debug#dumpHprofData(java.lang.String)
+// for more information on the endpoint.
+class COMPONENT_EXPORT(TRACING_CPP) HprofParser {
+ public:
+  enum ParseResult {
+    PARSE_SUCCESS,
+    PARSE_FAILED,
+    FAILED_TO_OPEN_FILE,
+  };
+
+  struct ParseStats {
+    ParseStats();
+    ParseStats(const ParseStats&) = delete;
+    ParseStats& operator=(const ParseStats&) = delete;
+
+    // Returns the result of the parser
+    ParseResult result = PARSE_FAILED;
+  };
+
+  HprofParser(const std::string& file_path);
+  HprofParser(const HprofParser&) = delete;
+  HprofParser& operator=(const HprofParser&) = delete;
+
+  // This method should only be called after Parse() has been called.
+  const ParseStats& parse_stats() { return parse_stats_; }
+
+  // First opens the file at |file_path_| then passes the data to ParseFileData
+  // to parse and record metrics. The hprof file is generated by
+  // Debug.dumpHprofData().
+  // This method should only ever be run once.
+  ParseResult Parse();
+
+ private:
+  // Parses hprof data file_data and records metrics in parse_stats_.
+  void ParseFileData(const unsigned char* file_data, size_t file_size);
+
+  const std::string file_path_;
+  ParseStats parse_stats_;
+};
+
+}  // namespace tracing
+
+#endif  // SERVICES_TRACING_PUBLIC_CPP_PERFETTO_JAVA_HEAP_PROFILER_HPROF_PARSER_ANDROID_H_
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android_unittest.cc b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android_unittest.cc
new file mode 100644
index 0000000..e4c4449
--- /dev/null
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android_unittest.cc
@@ -0,0 +1,37 @@
+// Copyright 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.h"
+#include "base/android/java_heap_dump_generator.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_buffer_android.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace tracing {
+
+TEST(HprofParserTest, ValidateEmptyParser) {
+  base::ScopedTempDir temp_dir;
+  if (!temp_dir.CreateUniqueTempDir()) {
+    VLOG(0) << "Failed to create unique temporary directory.";
+    return;
+  }
+  const std::string file_path_str =
+      temp_dir.GetPath().Append("temp_hprof.hprof").value();
+
+  base::android::WriteJavaHeapDumpToPath(file_path_str);
+  HprofParser parser(file_path_str);
+  parser.Parse();
+  EXPECT_EQ(parser.parse_stats().result,
+            HprofParser::ParseResult::PARSE_SUCCESS);
+}
+
+TEST(HprofParserTest, InvalidPathWithNoDump) {
+  HprofParser parser("invalid_file");
+  parser.Parse();
+  EXPECT_EQ(parser.parse_stats().result,
+            HprofParser::ParseResult::FAILED_TO_OPEN_FILE);
+}
+
+}  // namespace tracing
diff --git a/services/tracing/public/cpp/perfetto/java_heap_profiler/java_heap_profiler_android.cc b/services/tracing/public/cpp/perfetto/java_heap_profiler/java_heap_profiler_android.cc
index d6c311ae..7bfa009 100644
--- a/services/tracing/public/cpp/perfetto/java_heap_profiler/java_heap_profiler_android.cc
+++ b/services/tracing/public/cpp/perfetto/java_heap_profiler/java_heap_profiler_android.cc
@@ -6,6 +6,7 @@
 
 #include "base/android/java_heap_dump_generator.h"
 #include "base/files/scoped_temp_dir.h"
+#include "services/tracing/public/cpp/perfetto/java_heap_profiler/hprof_parser_android.h"
 #include "services/tracing/public/cpp/perfetto/perfetto_traced_process.h"
 
 namespace tracing {
@@ -32,6 +33,10 @@
   base::android::WriteJavaHeapDumpToPath(file_path);
 
   // TODO(zhanggeorge): Convert heap dump and write to trace.
+  HprofParser parser(file_path);
+  parser.Parse();
+  DCHECK_EQ(parser.parse_stats().result,
+            HprofParser::ParseResult::PARSE_SUCCESS);
 }
 
 void JavaHeapProfiler::StopTracing(base::OnceClosure stop_complete_callback) {
diff --git a/testing/libfuzzer/fuzzers/BUILD.gn b/testing/libfuzzer/fuzzers/BUILD.gn
index 3a2fe2be..f109571 100644
--- a/testing/libfuzzer/fuzzers/BUILD.gn
+++ b/testing/libfuzzer/fuzzers/BUILD.gn
@@ -67,6 +67,8 @@
     "//base",
     "//base:i18n",
     "//components/search_engines:search_engines",
+    "//services/data_decoder/public/cpp",
+    "//services/data_decoder/public/cpp:test_support",
     "//third_party/libxml:libxml",
   ]
   dict = "//third_party/libxml/fuzz/xml.dict"
diff --git a/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc b/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
index 06889bc..cd34d7d 100644
--- a/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
+++ b/testing/libfuzzer/fuzzers/template_url_parser_fuzzer.cc
@@ -14,9 +14,12 @@
 #include "base/bind.h"
 #include "base/command_line.h"
 #include "base/i18n/icu_util.h"
+#include "base/run_loop.h"
+#include "base/task/single_thread_task_executor.h"
 #include "components/search_engines/search_terms_data.h"
 #include "components/search_engines/template_url.h"
 #include "components/search_engines/template_url_parser.h"
+#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h"
 #include "testing/libfuzzer/libfuzzer_exports.h"
 
 bool PseudoRandomFilter(std::mt19937* generator,
@@ -45,7 +48,11 @@
 
 class Env {
  public:
-  Env() { xmlSetGenericErrorFunc(NULL, &ignore); }
+  Env() { xmlSetGenericErrorFunc(nullptr, &ignore); }
+
+ private:
+  base::SingleThreadTaskExecutor executor_;
+  data_decoder::test::InProcessDataDecoder data_decoder_;
 };
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
@@ -63,11 +70,22 @@
   // does not support 8 bit types on Windows.
   std::uniform_int_distribution<uint16_t> pool(0, 1);
 
+  base::RunLoop run_loop;
+
+  SearchTermsData search_terms_data;
+  std::string string_data(reinterpret_cast<const char*>(params + 1), size);
   TemplateURLParser::ParameterFilter filter =
       base::BindRepeating(&PseudoRandomFilter, base::Unretained(&generator),
                           base::Unretained(&pool));
+  TemplateURLParser::Parse(&search_terms_data, string_data, filter,
+                           base::BindOnce(
+                               [](base::OnceClosure quit_closure,
+                                  std::unique_ptr<TemplateURL> ignored) {
+                                 std::move(quit_closure).Run();
+                               },
+                               run_loop.QuitClosure()));
 
-  const char* char_data = reinterpret_cast<const char*>(params + 1);
-  TemplateURLParser::Parse(SearchTermsData(), char_data, size, filter);
+  run_loop.Run();
+
   return 0;
 }
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json
index 3461333..eababf1 100644
--- a/testing/variations/fieldtrial_testing_config.json
+++ b/testing/variations/fieldtrial_testing_config.json
@@ -5300,6 +5300,21 @@
             ]
         }
     ],
+    "SafeBrowsingPasswordProtectionPasswordReusePingAndroid": [
+        {
+            "platforms": [
+                "android"
+            ],
+            "experiments": [
+                {
+                    "name": "Enabled",
+                    "enable_features": [
+                        "SafeBrowsingSendPasswordReusePing"
+                    ]
+                }
+            ]
+        }
+    ],
     "SafeBrowsingRealTimeUrlLookupFetchAllowlist": [
         {
             "platforms": [
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc
index ccac95059..0501fc2b 100644
--- a/third_party/blink/common/features.cc
+++ b/third_party/blink/common/features.cc
@@ -237,6 +237,10 @@
 const base::Feature kAllowSyncXHRInPageDismissal{
     "AllowSyncXHRInPageDismissal", base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Allows Web Components v0 to be re-enabled.
+const base::Feature kWebComponentsV0Enabled{"WebComponentsV0Enabled",
+                                            base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Prefetch request properties are updated to be privacy-preserving. See
 // crbug.com/988956.
 const base::Feature kPrefetchPrivacyChanges{"PrefetchPrivacyChanges",
diff --git a/third_party/blink/public/BUILD.gn b/third_party/blink/public/BUILD.gn
index 0886c43..f66d2834 100644
--- a/third_party/blink/public/BUILD.gn
+++ b/third_party/blink/public/BUILD.gn
@@ -278,7 +278,6 @@
     "platform/web_rtc_rtp_source.h",
     "platform/web_rtc_rtp_transceiver.h",
     "platform/web_rtc_session_description.h",
-    "platform/web_rtc_session_description_request.h",
     "platform/web_rtc_stats.h",
     "platform/web_rtc_stats_request.h",
     "platform/web_rtc_stats_response.h",
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h
index 08640c5..e00af94 100644
--- a/third_party/blink/public/common/features.h
+++ b/third_party/blink/public/common/features.h
@@ -69,6 +69,8 @@
 BLINK_COMMON_EXPORT extern const base::Feature kAllowSyncXHRInPageDismissal;
 BLINK_COMMON_EXPORT extern const base::Feature kPrefetchPrivacyChanges;
 
+BLINK_COMMON_EXPORT extern const base::Feature kWebComponentsV0Enabled;
+
 BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeParamName[];
 BLINK_COMMON_EXPORT extern const char kMixedContentAutoupgradeModeBlockable[];
 BLINK_COMMON_EXPORT extern const char
diff --git a/third_party/blink/public/mojom/frame/frame.mojom b/third_party/blink/public/mojom/frame/frame.mojom
index 064e4368..016269b 100644
--- a/third_party/blink/public/mojom/frame/frame.mojom
+++ b/third_party/blink/public/mojom/frame/frame.mojom
@@ -8,6 +8,7 @@
 import "mojo/public/mojom/base/string16.mojom";
 import "third_party/blink/public/mojom/devtools/console_message.mojom";
 import "third_party/blink/public/mojom/frame/fullscreen.mojom";
+import "third_party/blink/public/mojom/frame/lifecycle.mojom";
 import "url/mojom/origin.mojom";
 import "url/mojom/url.mojom";
 
@@ -59,6 +60,14 @@
   // about whether it is occluded or has visual effects applied, in order to
   // service IntersectionObserver's that track visibility.
   SetNeedsOcclusionTracking(bool needs_tracking);
+
+  // Notifies the browser that the current frame has changed its lifecycle
+  // state.
+  LifecycleStateChanged(blink.mojom.FrameLifecycleState state);
+
+  // Evicts the page from the back/forward cache due to e.g., JavaScript
+  // execution.
+  EvictFromBackForwardCache();
 };
 
 // Implemented in Blink, this interface defines frame-specific methods that will
diff --git a/third_party/blink/public/platform/web_rtc_peer_connection_handler.h b/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
index 00194ee..65a3779 100644
--- a/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
+++ b/third_party/blink/public/platform/web_rtc_peer_connection_handler.h
@@ -51,13 +51,13 @@
 
 class RTCAnswerOptionsPlatform;
 class RTCOfferOptionsPlatform;
+class RTCSessionDescriptionRequest;
 class WebLocalFrame;
 class WebMediaConstraints;
 class WebMediaStream;
 class WebMediaStreamTrack;
 class WebRTCRtpSender;
 class WebRTCSessionDescription;
-class WebRTCSessionDescriptionRequest;
 class WebRTCStatsRequest;
 class WebRTCVoidRequest;
 class WebString;
@@ -89,14 +89,14 @@
   // https://w3c.github.io/webrtc-pc/#legacy-configuration-extensions
   // Plan B: Returns an empty list.
   virtual WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest&,
+      RTCSessionDescriptionRequest*,
       const WebMediaConstraints&) = 0;
   virtual WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest&,
+      RTCSessionDescriptionRequest*,
       RTCOfferOptionsPlatform*) = 0;
-  virtual void CreateAnswer(const WebRTCSessionDescriptionRequest&,
+  virtual void CreateAnswer(RTCSessionDescriptionRequest*,
                             const WebMediaConstraints&) = 0;
-  virtual void CreateAnswer(const WebRTCSessionDescriptionRequest&,
+  virtual void CreateAnswer(RTCSessionDescriptionRequest*,
                             RTCAnswerOptionsPlatform*) = 0;
   virtual void SetLocalDescription(const WebRTCVoidRequest&) = 0;
   virtual void SetLocalDescription(const WebRTCVoidRequest&,
diff --git a/third_party/blink/public/platform/web_rtc_session_description_request.h b/third_party/blink/public/platform/web_rtc_session_description_request.h
deleted file mode 100644
index eefc1e4..0000000
--- a/third_party/blink/public/platform/web_rtc_session_description_request.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * 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.
- *     * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
- * OWNER OR 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_PUBLIC_PLATFORM_WEB_RTC_SESSION_DESCRIPTION_REQUEST_H_
-#define THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_SESSION_DESCRIPTION_REQUEST_H_
-
-#include "third_party/blink/public/platform/web_common.h"
-#include "third_party/blink/public/platform/web_private_ptr.h"
-#include "third_party/blink/public/platform/web_string.h"
-
-namespace webrtc {
-class RTCError;
-}
-
-namespace blink {
-
-class RTCSessionDescriptionRequest;
-class WebRTCSessionDescription;
-
-class WebRTCSessionDescriptionRequest {
- public:
-  WebRTCSessionDescriptionRequest() = default;
-  WebRTCSessionDescriptionRequest(
-      const WebRTCSessionDescriptionRequest& other) {
-    Assign(other);
-  }
-  ~WebRTCSessionDescriptionRequest() { Reset(); }
-
-  WebRTCSessionDescriptionRequest& operator=(
-      const WebRTCSessionDescriptionRequest& other) {
-    Assign(other);
-    return *this;
-  }
-
-  BLINK_PLATFORM_EXPORT void Assign(const WebRTCSessionDescriptionRequest&);
-
-  BLINK_PLATFORM_EXPORT void Reset();
-  bool IsNull() const { return private_.IsNull(); }
-
-  BLINK_PLATFORM_EXPORT void RequestSucceeded(
-      const WebRTCSessionDescription&) const;
-  BLINK_PLATFORM_EXPORT void RequestFailed(const webrtc::RTCError& error) const;
-
-#if INSIDE_BLINK
-  BLINK_PLATFORM_EXPORT WebRTCSessionDescriptionRequest(
-      RTCSessionDescriptionRequest*);
-#endif
-
- private:
-  WebPrivatePtr<RTCSessionDescriptionRequest,
-                kWebPrivatePtrDestructionCrossThread>
-      private_;
-};
-
-}  // namespace blink
-
-#endif  // THIRD_PARTY_BLINK_PUBLIC_PLATFORM_WEB_RTC_SESSION_DESCRIPTION_REQUEST_H_
diff --git a/third_party/blink/public/strings/translations/blink_strings_gu.xtb b/third_party/blink/public/strings/translations/blink_strings_gu.xtb
index 514a4de..db45921 100644
--- a/third_party/blink/public/strings/translations/blink_strings_gu.xtb
+++ b/third_party/blink/public/strings/translations/blink_strings_gu.xtb
@@ -106,6 +106,7 @@
 <translation id="4661075872484491155">ટ્રી</translation>
 <translation id="4664250907885839816">'<ph name="ATSIGN" />' ને અનુસરી રહેલા ભાગમાં '<ph name="INVALIDCHARACTER" />' પ્રતીક શામેલ હોવું જોઈએ નહીં.</translation>
 <translation id="4668956016107839909">જોડાણ</translation>
+<translation id="4698212723196775569">કોડ</translation>
 <translation id="4718048029184481307">ચિત્રમાં ચિત્રમાંથી ચલાવી રહ્યાં છીએ</translation>
 <translation id="4742539557769756338">કવર</translation>
 <translation id="4748357248530471599">ડિસ્પ્લેમાં જ સામેલ પૂર્ણસ્ક્રીન ટૉગલ કરો</translation>
@@ -191,6 +192,7 @@
 <translation id="7118469954320184356">કોઈ વર્ણન ઉપલબ્ધ નથી.</translation>
 <translation id="7139483182332611405">પ્રસ્તાવના</translation>
 <translation id="7214187073215825913">કન્ટેન્ટ વિશેની માહિતી</translation>
+<translation id="7238347055216017155">મહત્ત્વપૂર્ણ</translation>
 <translation id="7263440858009898357">કૃપા કરીને સૂચિમાંથી એક આઇટમ પસંદ કરો.</translation>
 <translation id="727747134524199931">કૉલમ હેડર</translation>
 <translation id="7320576522385648310">બફર થઈ રહ્યું છે</translation>
@@ -217,6 +219,7 @@
 <translation id="7888071071722539607">કૃપા કરીને ઇમેઇલ સરનામાંમાં '<ph name="ATSIGN" />' શામેલ કરો. '<ph name="INVALIDADDRESS" />'માં '<ph name="ATSIGN" />' ખૂટે છે.</translation>
 <translation id="7891486169920085145">વિભાજનકર્તા</translation>
 <translation id="795667975304826397">કોઈ ફાઇલ પસંદ કરેલી નથી</translation>
+<translation id="8034303206267677282">અગત્યનું</translation>
 <translation id="8053789581856978548">ટેક્સ્ટ ફીલ્ડ શોધો</translation>
 <translation id="8057695513531652401">સૂચના</translation>
 <translation id="8105797009065549151">નોંધ સંદર્ભ</translation>
diff --git a/third_party/blink/public/web/web_local_frame_client.h b/third_party/blink/public/web/web_local_frame_client.h
index 2f4d680..f4566aa 100644
--- a/third_party/blink/public/web/web_local_frame_client.h
+++ b/third_party/blink/public/web/web_local_frame_client.h
@@ -321,9 +321,6 @@
   // is being dragged.
   virtual void SetMouseCapture(bool capture) {}
 
-  // Lifecycle of the frame has changed.
-  virtual void LifecycleStateChanged(mojom::FrameLifecycleState state) {}
-
   // Console messages ----------------------------------------------------
 
   // Whether or not we should report a detailed message for the given source.
@@ -838,10 +835,6 @@
 
   // Transfers user activation state from |source_frame| to the current frame.
   virtual void TransferUserActivationFrom(WebLocalFrame* source_frame) {}
-
-  // Evicts the page from the back forward cache due to e.g., JavaScript
-  // execution.
-  virtual void EvictFromBackForwardCache() {}
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
index e43dd66..3f3401ed 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.cc
@@ -1162,11 +1162,6 @@
   web_frame_->Client()->FrameRectsChanged(frame_rect);
 }
 
-void LocalFrameClientImpl::LifecycleStateChanged(
-    mojom::FrameLifecycleState state) {
-  web_frame_->Client()->LifecycleStateChanged(state);
-}
-
 bool LocalFrameClientImpl::IsPluginHandledExternally(
     HTMLPlugInElement& plugin_element,
     const KURL& resource_url,
@@ -1224,9 +1219,4 @@
   web_frame_->Client()->UpdateSubresourceFactory(std::move(info));
 }
 
-void LocalFrameClientImpl::EvictFromBackForwardCache() {
-  DCHECK(web_frame_->Client());
-  return web_frame_->Client()->EvictFromBackForwardCache();
-}
-
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/exported/local_frame_client_impl.h b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
index d537e7b..38f5e390 100644
--- a/third_party/blink/renderer/core/exported/local_frame_client_impl.h
+++ b/third_party/blink/renderer/core/exported/local_frame_client_impl.h
@@ -295,8 +295,6 @@
 
   void FrameRectsChanged(const IntRect&) override;
 
-  void LifecycleStateChanged(mojom::FrameLifecycleState state) override;
-
   bool IsPluginHandledExternally(HTMLPlugInElement&,
                                  const KURL&,
                                  const String&) override;
@@ -319,8 +317,6 @@
   void UpdateSubresourceFactory(
       std::unique_ptr<blink::URLLoaderFactoryBundleInfo> info) override;
 
-  void EvictFromBackForwardCache() override;
-
  private:
   struct DocumentInterfaceBrokerForwarderTraits {
     using Interface = mojom::blink::DocumentInterfaceBroker;
diff --git a/third_party/blink/renderer/core/exported/web_view_test.cc b/third_party/blink/renderer/core/exported/web_view_test.cc
index 873add65..7527738 100644
--- a/third_party/blink/renderer/core/exported/web_view_test.cc
+++ b/third_party/blink/renderer/core/exported/web_view_test.cc
@@ -46,6 +46,7 @@
 #include "mojo/public/cpp/bindings/pending_remote.h"
 #include "mojo/public/cpp/bindings/receiver.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/common/frame/frame_owner_element_type.h"
 #include "third_party/blink/public/common/page/page_zoom.h"
 #include "third_party/blink/public/mojom/frame/document_interface_broker.mojom-blink.h"
@@ -4372,16 +4373,6 @@
     web_view_helper_.Reset();  // Remove dependency on locally scoped client.
   }
 
-  // Bind the test API to a service with the given |name| and repeating Bind
-  // method given by |callback|.
-  void BindTestApi(
-      const String& name,
-      base::RepeatingCallback<void(mojo::ScopedMessagePipeHandle)> callback) {
-    // Set up our Mock Mojo API.
-    test_api_.reset(new service_manager::InterfaceProvider::TestApi(
-        web_frame_client_.GetInterfaceProvider()));
-    test_api_->SetBinderForName(name.Utf8(), callback);
-  }
   WebViewImpl* WebView() const { return web_view_; }
 
  private:
@@ -4450,10 +4441,22 @@
         WebWidget::LifecycleUpdateReason::kTest);
     RunPendingTasks();
 
-    mojo_test_helper_->BindTestApi(
-        mojom::blink::UnhandledTapNotifier::Name_,
-        WTF::BindRepeating(&MockUnhandledTapNotifierImpl::Bind,
-                           WTF::Unretained(&mock_notifier_)));
+    WebLocalFrameImpl* web_local_frame = web_view_->MainFrameImpl();
+    web_local_frame->GetFrame()
+        ->GetBrowserInterfaceBroker()
+        .SetBinderForTesting(
+            mojom::blink::UnhandledTapNotifier::Name_,
+            WTF::BindRepeating(&MockUnhandledTapNotifierImpl::Bind,
+                               WTF::Unretained(&mock_notifier_)));
+  }
+
+  void TearDown() override {
+    WebLocalFrameImpl* web_local_frame = web_view_->MainFrameImpl();
+    web_local_frame->GetFrame()
+        ->GetBrowserInterfaceBroker()
+        .SetBinderForTesting(mojom::blink::UnhandledTapNotifier::Name_, {});
+
+    WebViewTest::TearDown();
   }
 
  protected:
diff --git a/third_party/blink/renderer/core/frame/local_frame.cc b/third_party/blink/renderer/core/frame/local_frame.cc
index 37d66eb..92d86d4 100644
--- a/third_party/blink/renderer/core/frame/local_frame.cc
+++ b/third_party/blink/renderer/core/frame/local_frame.cc
@@ -1717,7 +1717,7 @@
         return;
     }
   }
-  Client()->LifecycleStateChanged(state);
+  GetLocalFrameHostRemote().LifecycleStateChanged(state);
 }
 
 void LocalFrame::MaybeLogAdClickNavigation() {
@@ -1773,7 +1773,7 @@
 }
 
 void LocalFrame::EvictFromBackForwardCache() {
-  Client()->EvictFromBackForwardCache();
+  GetLocalFrameHostRemote().EvictFromBackForwardCache();
 }
 
 void LocalFrame::DidChangeVisibleToHitTesting() {
diff --git a/third_party/blink/renderer/core/frame/local_frame_back_forward_cache_test.cc b/third_party/blink/renderer/core/frame/local_frame_back_forward_cache_test.cc
index 53e94ed..e2f19ca 100644
--- a/third_party/blink/renderer/core/frame/local_frame_back_forward_cache_test.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_back_forward_cache_test.cc
@@ -9,15 +9,17 @@
 #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h"
 #include "third_party/blink/renderer/bindings/core/v8/script_controller.h"
 #include "third_party/blink/renderer/bindings/core/v8/v8_binding_for_core.h"
+#include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
 #include "third_party/blink/renderer/core/frame/settings.h"
-#include "third_party/blink/renderer/core/loader/empty_clients.h"
+#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
 #include "third_party/blink/renderer/core/testing/dummy_page_holder.h"
+#include "third_party/blink/renderer/core/testing/fake_local_frame_host.h"
 #include "third_party/blink/renderer/platform/bindings/microtask.h"
 #include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h"
 
 namespace blink {
 
-class TestLocalFrameBackForwardCacheClient : public EmptyLocalFrameClient {
+class TestLocalFrameBackForwardCacheClient : public FakeLocalFrameHost {
  public:
   TestLocalFrameBackForwardCacheClient() {}
   ~TestLocalFrameBackForwardCacheClient() override = default;
@@ -45,14 +47,16 @@
 // frame state is immutable when the frame is in the bfcache.
 // (https://www.chromestatus.com/feature/5815270035685376).
 TEST_F(LocalFrameBackForwardCacheTest, EvictionOnV8ExecutionAtMicrotask) {
-  auto* frame_client =
-      MakeGarbageCollected<TestLocalFrameBackForwardCacheClient>();
-  auto page_holder = std::make_unique<DummyPageHolder>(
-      IntSize(800, 600), nullptr, frame_client,
-      base::BindOnce(
-          [](Settings& settings) { settings.SetScriptEnabled(true); }));
+  TestLocalFrameBackForwardCacheClient frame_host;
+  frame_test_helpers::TestWebFrameClient web_frame_client;
+  frame_test_helpers::WebViewHelper web_view_helper;
+  frame_host.Init(web_frame_client.GetRemoteNavigationAssociatedInterfaces());
+  web_view_helper.Initialize(
+      &web_frame_client, nullptr, nullptr,
+      [](WebSettings* settings) { settings->SetJavaScriptEnabled(true); });
+  web_view_helper.Resize(WebSize(640, 480));
 
-  LocalFrame* frame = &page_holder->GetFrame();
+  LocalFrame* frame = web_view_helper.GetWebView()->MainFrameImpl()->GetFrame();
 
   // Freeze the frame and hook eviction.
   frame->SetLifecycleState(mojom::FrameLifecycleState::kFrozen);
@@ -72,8 +76,7 @@
             "console.log('hi');");
       },
       frame));
-
-  frame_client->WaitUntilEvictedFromBackForwardCache();
+  frame_host.WaitUntilEvictedFromBackForwardCache();
 }
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/local_frame_client.h b/third_party/blink/renderer/core/frame/local_frame_client.h
index 4d7a3066..12937e8 100644
--- a/third_party/blink/renderer/core/frame/local_frame_client.h
+++ b/third_party/blink/renderer/core/frame/local_frame_client.h
@@ -447,8 +447,6 @@
 
   virtual void FrameRectsChanged(const IntRect&) {}
 
-  virtual void LifecycleStateChanged(mojom::FrameLifecycleState state) {}
-
   // Returns true when the contents of plugin are handled externally. This means
   // the plugin element will own a content frame but the frame is than used
   // externally to load the required handelrs.
@@ -493,8 +491,6 @@
   // AppCache ------------------------------------------------------------
   virtual void UpdateSubresourceFactory(
       std::unique_ptr<blink::URLLoaderFactoryBundleInfo> info) {}
-
-  virtual void EvictFromBackForwardCache() = 0;
 };
 
 }  // namespace blink
diff --git a/third_party/blink/renderer/core/frame/local_frame_view.cc b/third_party/blink/renderer/core/frame/local_frame_view.cc
index 06c9a996..181f4d3 100644
--- a/third_party/blink/renderer/core/frame/local_frame_view.cc
+++ b/third_party/blink/renderer/core/frame/local_frame_view.cc
@@ -2453,11 +2453,9 @@
     SCOPED_UMA_AND_UKM_TIMER(EnsureUkmAggregator(),
                              LocalFrameUkmAggregator::kPrePaint);
 
-    // This is before WalkTree because it may SetNeedsPaintPropertyUpdate() on
-    // layout objects.
-    GetPage()->GetLinkHighlight().UpdatePrePaint();
-
+    GetPage()->GetLinkHighlight().UpdateBeforePrePaint();
     PrePaintTreeWalk().WalkTree(*this);
+    GetPage()->GetLinkHighlight().UpdateAfterPrePaint();
   }
 
   UpdateCompositedSelectionIfNeeded();
@@ -4051,8 +4049,9 @@
 
 void LocalFrameView::SetForeignLayerListNeedsUpdate() {
   DCHECK(!RuntimeEnabledFeatures::CompositeAfterPaintEnabled());
-  LocalFrameView* root = GetFrame().LocalFrameRoot().View();
-  if (root) {
+  DCHECK_NE(Lifecycle().GetState(), DocumentLifecycle::kInPaint);
+
+  if (LocalFrameView* root = GetFrame().LocalFrameRoot().View()) {
     // We will re-collect foreign layers in PushPaintArtifactsToCompositor().
     root->paint_controller_ = nullptr;
     if (root->paint_artifact_compositor_)
diff --git a/third_party/blink/renderer/core/input/gesture_manager.cc b/third_party/blink/renderer/core/input/gesture_manager.cc
index 76b7d7b..c8d2b21 100644
--- a/third_party/blink/renderer/core/input/gesture_manager.cc
+++ b/third_party/blink/renderer/core/input/gesture_manager.cc
@@ -26,7 +26,7 @@
 #include "third_party/blink/renderer/core/scroll/scroll_animator_base.h"
 
 #if BUILDFLAG(ENABLE_UNHANDLED_TAP)
-#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/public/common/browser_interface_broker_proxy.h"
 #include "third_party/blink/public/mojom/unhandled_tap_notifier/unhandled_tap_notifier.mojom-blink.h"
 #include "third_party/blink/public/web/web_node.h"
 #include "third_party/blink/renderer/core/editing/frame_selection.h"
@@ -472,7 +472,7 @@
   if (should_trigger) {
     // Start setting up the Mojo interface connection.
     mojo::Remote<mojom::blink::UnhandledTapNotifier> provider;
-    frame_->Client()->GetInterfaceProvider()->GetInterface(
+    frame_->GetBrowserInterfaceBroker().GetInterface(
         provider.BindNewPipeAndPassReceiver());
 
     // Extract text run-length.
diff --git a/third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.cc b/third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.cc
index 856dba9..3dbbe77 100644
--- a/third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.cc
+++ b/third_party/blink/renderer/core/layout/layout_deprecated_flexible_box.cc
@@ -156,8 +156,6 @@
                                  int line_count,
                                  bool include_bottom,
                                  int& count) {
-  if (block_flow->StyleRef().Visibility() != EVisibility::kVisible)
-    return -1;
   if (block_flow->ChildrenInline()) {
     for (RootInlineBox* box = block_flow->FirstRootBox(); box;
          box = box->NextRootBox()) {
@@ -198,9 +196,6 @@
 static RootInlineBox* LineAtIndex(const LayoutBlockFlow* block_flow, int i) {
   DCHECK_GE(i, 0);
 
-  if (block_flow->StyleRef().Visibility() != EVisibility::kVisible)
-    return nullptr;
-
   if (block_flow->ChildrenInline()) {
     for (RootInlineBox* box = block_flow->FirstRootBox(); box;
          box = box->NextRootBox()) {
@@ -226,8 +221,6 @@
 static int LineCount(const LayoutBlockFlow* block_flow,
                      const RootInlineBox* stop_root_inline_box = nullptr,
                      bool* found = nullptr) {
-  if (block_flow->StyleRef().Visibility() != EVisibility::kVisible)
-    return 0;
   int count = 0;
   if (block_flow->ChildrenInline()) {
     for (RootInlineBox* box = block_flow->FirstRootBox(); box;
@@ -261,8 +254,6 @@
 }
 
 static void ClearTruncation(LayoutBlockFlow* block_flow) {
-  if (block_flow->StyleRef().Visibility() != EVisibility::kVisible)
-    return;
   if (block_flow->ChildrenInline() && block_flow->HasMarkupTruncation()) {
     block_flow->SetHasMarkupTruncation(false);
     for (RootInlineBox* box = block_flow->FirstRootBox(); box;
@@ -314,12 +305,6 @@
   return margin;
 }
 
-static bool ChildDoesNotAffectWidthOrFlexing(LayoutObject* child) {
-  // Positioned children and collapsed children don't affect the min/max width.
-  return child->IsOutOfFlowPositioned() ||
-         child->StyleRef().Visibility() == EVisibility::kCollapse;
-}
-
 static LayoutUnit WidthForChild(LayoutBox* child) {
   if (child->HasOverrideLogicalWidth())
     return child->OverrideLogicalWidth();
@@ -360,7 +345,7 @@
   if (IsVertical()) {
     for (LayoutBox* child = FirstChildBox(); child;
          child = child->NextSiblingBox()) {
-      if (ChildDoesNotAffectWidthOrFlexing(child))
+      if (child->IsOutOfFlowPositioned())
         continue;
 
       LayoutUnit margin = MarginWidthForChild(child);
@@ -373,7 +358,7 @@
   } else {
     for (LayoutBox* child = FirstChildBox(); child;
          child = child->NextSiblingBox()) {
-      if (ChildDoesNotAffectWidthOrFlexing(child))
+      if (child->IsOutOfFlowPositioned())
         continue;
 
       LayoutUnit margin = MarginWidthForChild(child);
@@ -483,8 +468,7 @@
     }
 
     // Check to see if this child flexes.
-    if (!ChildDoesNotAffectWidthOrFlexing(child) &&
-        child->StyleRef().BoxFlex() > 0.0f) {
+    if (!child->IsOutOfFlowPositioned() && child->StyleRef().BoxFlex() > 0.0f) {
       // We always have to lay out flexible objects again, since the flex
       // distribution
       // may have changed, and we need to reallocate space.
@@ -608,13 +592,6 @@
         continue;
       }
 
-      if (child->StyleRef().Visibility() == EVisibility::kCollapse) {
-        // visibility: collapsed children do not participate in our positioning.
-        // But we need to lay them down.
-        child->LayoutIfNeeded();
-        continue;
-      }
-
       SubtreeLayoutScope layout_scope(*child);
 
       // We need to see if this child's height will change, since we make block
@@ -720,9 +697,6 @@
         for (LayoutBox* child = iterator.First();
              child && space_available_this_pass && total_flex;
              child = iterator.Next()) {
-          if (child->StyleRef().Visibility() == EVisibility::kCollapse)
-            continue;
-
           if (AllowedChildFlex(child, expanding)) {
             LayoutUnit space_add =
                 LayoutUnit(space_available_this_pass *
@@ -772,7 +746,7 @@
       int total_children = 0;
       for (LayoutBox* child = iterator.First(); child;
            child = iterator.Next()) {
-        if (ChildDoesNotAffectWidthOrFlexing(child))
+        if (child->IsOutOfFlowPositioned())
           continue;
         ++total_children;
       }
@@ -784,7 +758,7 @@
         bool first_child = true;
         for (LayoutBox* child = iterator.First(); child;
              child = iterator.Next()) {
-          if (ChildDoesNotAffectWidthOrFlexing(child))
+          if (child->IsOutOfFlowPositioned())
             continue;
 
           if (first_child) {
@@ -807,7 +781,7 @@
         offset += remaining_space;
       for (LayoutBox* child = iterator.First(); child;
            child = iterator.Next()) {
-        if (ChildDoesNotAffectWidthOrFlexing(child))
+        if (child->IsOutOfFlowPositioned())
           continue;
 
         PlaceChild(child, child->Location() + LayoutSize(offset, LayoutUnit()));
@@ -874,13 +848,6 @@
              child->StyleRef().Height().IsPercentOrCalc()))))
         layout_scope.SetChildNeedsLayout(child);
 
-      if (child->StyleRef().Visibility() == EVisibility::kCollapse) {
-        // visibility: collapsed children do not participate in our positioning.
-        // But we need to lay them down.
-        child->LayoutIfNeeded();
-        continue;
-      }
-
       // Compute the child's vertical margins.
       child->ComputeAndSetBlockDirectionMargins(this);
 
@@ -1058,7 +1025,7 @@
       int total_children = 0;
       for (LayoutBox* child = iterator.First(); child;
            child = iterator.Next()) {
-        if (ChildDoesNotAffectWidthOrFlexing(child))
+        if (child->IsOutOfFlowPositioned())
           continue;
 
         ++total_children;
@@ -1071,7 +1038,7 @@
         bool first_child = true;
         for (LayoutBox* child = iterator.First(); child;
              child = iterator.Next()) {
-          if (ChildDoesNotAffectWidthOrFlexing(child))
+          if (child->IsOutOfFlowPositioned())
             continue;
 
           if (first_child) {
@@ -1093,7 +1060,7 @@
         offset += remaining_space;
       for (LayoutBox* child = iterator.First(); child;
            child = iterator.Next()) {
-        if (ChildDoesNotAffectWidthOrFlexing(child))
+        if (child->IsOutOfFlowPositioned())
           continue;
         PlaceChild(child, child->Location() + LayoutSize(LayoutUnit(), offset));
       }
@@ -1131,7 +1098,7 @@
 
   int max_line_count = 0;
   for (LayoutBox* child = iterator.First(); child; child = iterator.Next()) {
-    if (ChildDoesNotAffectWidthOrFlexing(child))
+    if (child->IsOutOfFlowPositioned())
       continue;
 
     child->ClearOverrideSize();
@@ -1167,7 +1134,7 @@
 
   for (LayoutBox* child = iterator.First(); child; child = iterator.Next()) {
     auto* block_child = DynamicTo<LayoutBlockFlow>(child);
-    if (ChildDoesNotAffectWidthOrFlexing(child) ||
+    if (child->IsOutOfFlowPositioned() ||
         !child->StyleRef().Height().IsAuto() || !block_child)
       continue;
 
@@ -1246,7 +1213,7 @@
 void LayoutDeprecatedFlexibleBox::ClearLineClamp() {
   FlexBoxIterator iterator(this);
   for (LayoutBox* child = iterator.First(); child; child = iterator.Next()) {
-    if (ChildDoesNotAffectWidthOrFlexing(child))
+    if (child->IsOutOfFlowPositioned())
       continue;
 
     child->ClearOverrideSize();
@@ -1277,8 +1244,7 @@
 
 LayoutUnit LayoutDeprecatedFlexibleBox::AllowedChildFlex(LayoutBox* child,
                                                          bool expanding) {
-  if (ChildDoesNotAffectWidthOrFlexing(child) ||
-      child->StyleRef().BoxFlex() == 0.0f)
+  if (child->IsOutOfFlowPositioned() || child->StyleRef().BoxFlex() == 0.0f)
     return LayoutUnit();
 
   if (expanding) {
diff --git a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
index ec88c25b..4fdd2a34 100644
--- a/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
+++ b/third_party/blink/renderer/core/layout/layout_shift_tracker_test.cc
@@ -41,57 +41,6 @@
   }
 };
 
-TEST_F(LayoutShiftTrackerTest, SimpleBlockMovement) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #j { position: relative; width: 300px; height: 100px; }
-    </style>
-    <div id='j'></div>
-  )HTML");
-
-  EXPECT_EQ(0.0, GetLayoutShiftTracker().Score());
-  EXPECT_EQ(0.0, GetLayoutShiftTracker().OverallMaxDistance());
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 60px"));
-  UpdateAllLifecyclePhases();
-  // 300 * (100 + 60) * (60 / 800) / (default viewport size 800 * 600)
-  EXPECT_FLOAT_EQ(0.1 * (60.0 / 800.0), GetLayoutShiftTracker().Score());
-  EXPECT_FLOAT_EQ(60.0, GetLayoutShiftTracker().OverallMaxDistance());
-}
-
-TEST_F(LayoutShiftTrackerTest, Transform) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      body { margin: 0; }
-      #c { transform: translateX(-300px) translateY(-40px); }
-      #j { position: relative; width: 600px; height: 140px; }
-    </style>
-    <div id='c'>
-      <div id='j'></div>
-    </div>
-  )HTML");
-
-  GetDocument().getElementById("j")->setAttribute(html_names::kStyleAttr,
-                                                  AtomicString("top: 60px"));
-  UpdateAllLifecyclePhases();
-  // (600 - 300) * (140 - 40 + 60) * (60 / 800) / (800 * 600)
-  EXPECT_FLOAT_EQ(0.1 * (60.0 / 800.0), GetLayoutShiftTracker().Score());
-}
-
-TEST_F(LayoutShiftTrackerTest, RtlDistance) {
-  SetBodyInnerHTML(R"HTML(
-    <style>
-      #j { position: relative; width: 100px; height: 100px; direction: rtl; }
-    </style>
-    <div id='j'></div>
-  )HTML");
-  GetDocument().getElementById("j")->setAttribute(
-      html_names::kStyleAttr, AtomicString("width: 70px; left: 10px"));
-  UpdateAllLifecyclePhases();
-  EXPECT_FLOAT_EQ(20.0, GetLayoutShiftTracker().OverallMaxDistance());
-}
-
 TEST_F(LayoutShiftTrackerTest, IgnoreAfterInput) {
   SetBodyInnerHTML(R"HTML(
     <style>
diff --git a/third_party/blink/renderer/core/loader/empty_clients.h b/third_party/blink/renderer/core/loader/empty_clients.h
index 9744a5c..683fb2ed 100644
--- a/third_party/blink/renderer/core/loader/empty_clients.h
+++ b/third_party/blink/renderer/core/loader/empty_clients.h
@@ -430,8 +430,6 @@
 
   Frame* FindFrame(const AtomicString& name) const override;
 
-  void EvictFromBackForwardCache() override {}
-
  protected:
   // Not owned
   WebTextCheckClient* text_check_client_;
diff --git a/third_party/blink/renderer/core/page/link_highlight.cc b/third_party/blink/renderer/core/page/link_highlight.cc
index 0dd8ae9..6c4945f 100644
--- a/third_party/blink/renderer/core/page/link_highlight.cc
+++ b/third_party/blink/renderer/core/page/link_highlight.cc
@@ -107,9 +107,14 @@
   return false;
 }
 
-void LinkHighlight::UpdatePrePaint() {
+void LinkHighlight::UpdateBeforePrePaint() {
   if (impl_)
-    impl_->UpdatePrePaint();
+    impl_->UpdateBeforePrePaint();
+}
+
+void LinkHighlight::UpdateAfterPrePaint() {
+  if (impl_)
+    impl_->UpdateAfterPrePaint();
 }
 
 void LinkHighlight::Paint(GraphicsContext& context) const {
diff --git a/third_party/blink/renderer/core/page/link_highlight.h b/third_party/blink/renderer/core/page/link_highlight.h
index 71cf8f1..b1df87c 100644
--- a/third_party/blink/renderer/core/page/link_highlight.h
+++ b/third_party/blink/renderer/core/page/link_highlight.h
@@ -43,7 +43,8 @@
     return impl_ && NeedsHighlightEffectInternal(object);
   }
 
-  void UpdatePrePaint();
+  void UpdateBeforePrePaint();
+  void UpdateAfterPrePaint();
   void Paint(GraphicsContext&) const;
 
  private:
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl.cc b/third_party/blink/renderer/core/paint/link_highlight_impl.cc
index 91a7a78..32d808a 100644
--- a/third_party/blink/renderer/core/paint/link_highlight_impl.cc
+++ b/third_party/blink/renderer/core/paint/link_highlight_impl.cc
@@ -232,12 +232,31 @@
   UpdateOpacity(kStartOpacity);
 }
 
-void LinkHighlightImpl::UpdatePrePaint() {
+void LinkHighlightImpl::UpdateBeforePrePaint() {
   if (!node_ || !node_->GetLayoutObject() ||
       node_->GetLayoutObject()->GetFrameView()->ShouldThrottleRendering())
     ReleaseResources();
 }
 
+void LinkHighlightImpl::UpdateAfterPrePaint() {
+  if (!node_)
+    return;
+
+  const auto* object = node_->GetLayoutObject();
+  DCHECK(object);
+  DCHECK(!object->GetFrameView()->ShouldThrottleRendering());
+
+  size_t fragment_count = 0;
+  for (const auto* fragment = &object->FirstFragment(); fragment;
+       fragment = fragment->NextFragment())
+    ++fragment_count;
+
+  if (fragment_count != fragments_.size()) {
+    fragments_.resize(fragment_count);
+    SetPaintArtifactCompositorNeedsUpdate();
+  }
+}
+
 CompositorAnimation* LinkHighlightImpl::GetCompositorAnimation() const {
   return compositor_animation_.get();
 }
@@ -279,9 +298,7 @@
         new_path.AddRect(snapped_rect);
     }
 
-    if (index == fragments_.size())
-      fragments_.emplace_back();
-
+    DCHECK_LT(index, fragments_.size());
     auto& link_highlight_fragment = fragments_[index];
     link_highlight_fragment.SetColor(color);
 
@@ -301,12 +318,7 @@
                        bounding_rect.Location(), property_tree_state);
   }
 
-  if (index < fragments_.size()) {
-    fragments_.Shrink(index);
-    // PaintArtifactCompositor needs update for the cc::PictureLayers we just
-    // removed for the extra fragments.
-    SetPaintArtifactCompositorNeedsUpdate();
-  }
+  DCHECK_EQ(index, fragments_.size());
 }
 
 void LinkHighlightImpl::SetPaintArtifactCompositorNeedsUpdate() {
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl.h b/third_party/blink/renderer/core/paint/link_highlight_impl.h
index c777a84..7d32cae 100644
--- a/third_party/blink/renderer/core/paint/link_highlight_impl.h
+++ b/third_party/blink/renderer/core/paint/link_highlight_impl.h
@@ -72,7 +72,8 @@
 
   const EffectPaintPropertyNode& Effect() const { return *effect_; }
 
-  void UpdatePrePaint();
+  void UpdateBeforePrePaint();
+  void UpdateAfterPrePaint();
   void Paint(GraphicsContext&);
 
   wtf_size_t FragmentCountForTesting() const { return fragments_.size(); }
diff --git a/third_party/blink/renderer/core/paint/link_highlight_impl_test.cc b/third_party/blink/renderer/core/paint/link_highlight_impl_test.cc
index e38a957..575b45f 100644
--- a/third_party/blink/renderer/core/paint/link_highlight_impl_test.cc
+++ b/third_party/blink/renderer/core/paint/link_highlight_impl_test.cc
@@ -354,6 +354,33 @@
   check_layer(highlight->LayerForTesting(0));
   check_layer(highlight->LayerForTesting(1));
 
+  Element* multicol = touch_node->parentElement();
+  EXPECT_EQ(50, multicol->OffsetHeight());
+  // Make multicol shorter to create 3 total columns for touch_node.
+  multicol->setAttribute(html_names::kStyleAttr, "height: 25px");
+  UpdateAllLifecyclePhases();
+  ASSERT_EQ(&first_fragment, &touch_node->GetLayoutObject()->FirstFragment());
+  ASSERT_EQ(second_fragment, first_fragment.NextFragment());
+  const auto* third_fragment = second_fragment->NextFragment();
+  ASSERT_TRUE(third_fragment);
+  EXPECT_FALSE(third_fragment->NextFragment());
+
+  EXPECT_EQ(layer_count_before_highlight + 3, ContentLayerCount());
+  EXPECT_EQ(3u, highlight->FragmentCountForTesting());
+  check_layer(highlight->LayerForTesting(0));
+  check_layer(highlight->LayerForTesting(1));
+  check_layer(highlight->LayerForTesting(2));
+
+  // Make multicol taller to create only 1 column for touch_node.
+  multicol->setAttribute(html_names::kStyleAttr, "height: 100px");
+  UpdateAllLifecyclePhases();
+  ASSERT_EQ(&first_fragment, &touch_node->GetLayoutObject()->FirstFragment());
+  EXPECT_FALSE(first_fragment.NextFragment());
+
+  EXPECT_EQ(layer_count_before_highlight + 1, ContentLayerCount());
+  EXPECT_EQ(1u, highlight->FragmentCountForTesting());
+  check_layer(highlight->LayerForTesting(0));
+
   touch_node->remove(IGNORE_EXCEPTION_FOR_TESTING);
   UpdateAllLifecyclePhases();
   // Removing the highlight layer should drop the cc layers for highlights.
diff --git a/third_party/blink/renderer/core/testing/data/test_touch_link_highlight.html b/third_party/blink/renderer/core/testing/data/test_touch_link_highlight.html
index 9254ca5b..b559dea7 100644
--- a/third_party/blink/renderer/core/testing/data/test_touch_link_highlight.html
+++ b/third_party/blink/renderer/core/testing/data/test_touch_link_highlight.html
@@ -29,10 +29,14 @@
     <div style="position: absolute; left: 20px; top: 260px; width: 200px;">
         <input type="text"> <!-- This will have an I-beam cursor. -->
     </div>
-    <div style="position: absolute; left: 20px; top: 300px; width: 400px; height: 50px; columns: 2">
+    <style>
+      #multicol { position: absolute; left: 20px; top: 300px; width: 400px; height: 50px; columns: 2; column-fill: auto; }
+    </style>
+    <div id="multicol">
       <a href="http://www.test.com">
-        <div style="display: inline-block; width: 200px; height: 50px">Link in column 1</div>
-        <div style="display: inline-block; width: 200px; height: 50px">Link in column 2</div>
+        <div style="display: inline-block; width: 200px; height: 25px">Link part 1</div>
+        <div style="display: inline-block; width: 200px; height: 25px">Link part 2</div>
+        <div style="display: inline-block; width: 200px; height: 25px">Link part 3</div>
       </a>
     </div>
   </body>
diff --git a/third_party/blink/renderer/core/testing/fake_local_frame_host.cc b/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
index 30789a07..f4937b54 100644
--- a/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
+++ b/third_party/blink/renderer/core/testing/fake_local_frame_host.cc
@@ -37,6 +37,11 @@
 
 void FakeLocalFrameHost::SetNeedsOcclusionTracking(bool needs_tracking) {}
 
+void FakeLocalFrameHost::LifecycleStateChanged(
+    mojom::blink::FrameLifecycleState state) {}
+
+void FakeLocalFrameHost::EvictFromBackForwardCache() {}
+
 void FakeLocalFrameHost::BindFrameHostReceiver(
     mojo::ScopedInterfaceEndpointHandle handle) {
   receiver_.Bind(mojo::PendingAssociatedReceiver<mojom::blink::LocalFrameHost>(
diff --git a/third_party/blink/renderer/core/testing/fake_local_frame_host.h b/third_party/blink/renderer/core/testing/fake_local_frame_host.h
index 755385d..0958660 100644
--- a/third_party/blink/renderer/core/testing/fake_local_frame_host.h
+++ b/third_party/blink/renderer/core/testing/fake_local_frame_host.h
@@ -34,6 +34,8 @@
   void DidDisplayInsecureContent() override;
   void DidContainInsecureFormAction() override;
   void SetNeedsOcclusionTracking(bool needs_tracking) override;
+  void LifecycleStateChanged(mojom::blink::FrameLifecycleState state) override;
+  void EvictFromBackForwardCache() override;
 
  private:
   void BindFrameHostReceiver(mojo::ScopedInterfaceEndpointHandle handle);
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
index 05175c6..a8f6450f 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.cc
@@ -251,25 +251,23 @@
 }
 
 WebVector<std::unique_ptr<WebRTCRtpTransceiver>>
-MockWebRTCPeerConnectionHandler::CreateOffer(
-    const WebRTCSessionDescriptionRequest&,
-    const WebMediaConstraints&) {
+MockWebRTCPeerConnectionHandler::CreateOffer(RTCSessionDescriptionRequest*,
+                                             const WebMediaConstraints&) {
   return {};
 }
 
 WebVector<std::unique_ptr<WebRTCRtpTransceiver>>
-MockWebRTCPeerConnectionHandler::CreateOffer(
-    const WebRTCSessionDescriptionRequest&,
-    RTCOfferOptionsPlatform*) {
+MockWebRTCPeerConnectionHandler::CreateOffer(RTCSessionDescriptionRequest*,
+                                             RTCOfferOptionsPlatform*) {
   return {};
 }
 
 void MockWebRTCPeerConnectionHandler::CreateAnswer(
-    const WebRTCSessionDescriptionRequest&,
+    RTCSessionDescriptionRequest*,
     const WebMediaConstraints&) {}
 
 void MockWebRTCPeerConnectionHandler::CreateAnswer(
-    const WebRTCSessionDescriptionRequest&,
+    RTCSessionDescriptionRequest*,
     RTCAnswerOptionsPlatform*) {}
 
 void MockWebRTCPeerConnectionHandler::SetLocalDescription(
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
index be9bac01..da36688 100644
--- a/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/mock_web_rtc_peer_connection_handler.h
@@ -29,14 +29,14 @@
                   const WebMediaConstraints&) override;
 
   WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest&,
+      RTCSessionDescriptionRequest*,
       const WebMediaConstraints&) override;
   WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest&,
+      RTCSessionDescriptionRequest*,
       RTCOfferOptionsPlatform*) override;
-  void CreateAnswer(const WebRTCSessionDescriptionRequest&,
+  void CreateAnswer(RTCSessionDescriptionRequest*,
                     const WebMediaConstraints&) override;
-  void CreateAnswer(const WebRTCSessionDescriptionRequest&,
+  void CreateAnswer(RTCSessionDescriptionRequest*,
                     RTCAnswerOptionsPlatform*) override;
   void SetLocalDescription(const WebRTCVoidRequest&) override;
   void SetLocalDescription(const WebRTCVoidRequest&,
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
index 137c2dea..ac13788 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -48,7 +48,6 @@
 #include "third_party/blink/public/platform/web_rtc_data_channel_init.h"
 #include "third_party/blink/public/platform/web_rtc_ice_candidate.h"
 #include "third_party/blink/public/platform/web_rtc_session_description.h"
-#include "third_party/blink/public/platform/web_rtc_session_description_request.h"
 #include "third_party/blink/public/platform/web_rtc_stats_request.h"
 #include "third_party/blink/public/platform/web_rtc_void_request.h"
 #include "third_party/blink/public/web/modules/peerconnection/peer_connection_dependency_factory.h"
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
index 58a49e5..c901ec3 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -33,7 +33,6 @@
 #include "third_party/blink/public/platform/web_rtc_rtp_sender.h"
 #include "third_party/blink/public/platform/web_rtc_rtp_transceiver.h"
 #include "third_party/blink/public/platform/web_rtc_session_description.h"
-#include "third_party/blink/public/platform/web_rtc_session_description_request.h"
 #include "third_party/blink/public/platform/web_rtc_stats.h"
 #include "third_party/blink/public/platform/web_rtc_void_request.h"
 #include "third_party/blink/public/platform/web_string.h"
@@ -49,6 +48,7 @@
 #include "third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_event_log_output_sink_proxy.h"
 #include "third_party/blink/renderer/platform/peerconnection/rtc_offer_options_platform.h"
+#include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h"
 #include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
 #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
 #include "third_party/webrtc/api/rtc_event_log_output.h"
@@ -214,13 +214,13 @@
 }
 
 // Class mapping responses from calls to libjingle CreateOffer/Answer and
-// the blink::WebRTCSessionDescriptionRequest.
+// the blink::RTCSessionDescriptionRequest.
 class CreateSessionDescriptionRequest
     : public webrtc::CreateSessionDescriptionObserver {
  public:
   explicit CreateSessionDescriptionRequest(
       const scoped_refptr<base::SingleThreadTaskRunner>& main_thread,
-      const blink::WebRTCSessionDescriptionRequest& request,
+      blink::RTCSessionDescriptionRequest* request,
       const base::WeakPtr<RTCPeerConnectionHandler>& handler,
       const base::WeakPtr<PeerConnectionTracker>& tracker,
       PeerConnectionTracker::Action action)
@@ -251,8 +251,8 @@
       tracker_->TrackSessionId(handler_.get(),
                                String::FromUTF8(desc->session_id()));
     }
-    webkit_request_.RequestSucceeded(CreateWebKitSessionDescription(desc));
-    webkit_request_.Reset();
+    webkit_request_->RequestSucceeded(CreateWebKitSessionDescription(desc));
+    webkit_request_ = nullptr;
     delete desc;
   }
   void OnFailure(webrtc::RTCError error) override {
@@ -272,8 +272,8 @@
           String::FromUTF8(error.message()));
     }
     // TODO(hta): Convert CreateSessionDescriptionRequest.OnFailure
-    webkit_request_.RequestFailed(error);
-    webkit_request_.Reset();
+    webkit_request_->RequestFailed(error);
+    webkit_request_ = nullptr;
   }
 
  protected:
@@ -283,12 +283,12 @@
     // the main thread. Since the main thread may complete before the signaling
     // thread has deferenced this object there is no guarantee that this object
     // is destructed on the main thread.
-    DLOG_IF(ERROR, !webkit_request_.IsNull())
+    DLOG_IF(ERROR, webkit_request_)
         << "CreateSessionDescriptionRequest not completed. Shutting down?";
   }
 
   const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
-  blink::WebRTCSessionDescriptionRequest webkit_request_;
+  Persistent<RTCSessionDescriptionRequest> webkit_request_;
   const base::WeakPtr<RTCPeerConnectionHandler> handler_;
   const base::WeakPtr<PeerConnectionTracker> tracker_;
   PeerConnectionTracker::Action action_;
@@ -1135,7 +1135,7 @@
 
 blink::WebVector<std::unique_ptr<blink::WebRTCRtpTransceiver>>
 RTCPeerConnectionHandler::CreateOffer(
-    const blink::WebRTCSessionDescriptionRequest& request,
+    blink::RTCSessionDescriptionRequest* request,
     const blink::WebMediaConstraints& options) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createOffer");
@@ -1150,7 +1150,7 @@
 
 blink::WebVector<std::unique_ptr<blink::WebRTCRtpTransceiver>>
 RTCPeerConnectionHandler::CreateOffer(
-    const blink::WebRTCSessionDescriptionRequest& request,
+    blink::RTCSessionDescriptionRequest* request,
     blink::RTCOfferOptionsPlatform* options) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createOffer");
@@ -1165,7 +1165,7 @@
 
 std::vector<std::unique_ptr<blink::WebRTCRtpTransceiver>>
 RTCPeerConnectionHandler::CreateOfferInternal(
-    const blink::WebRTCSessionDescriptionRequest& request,
+    blink::RTCSessionDescriptionRequest* request,
     webrtc::PeerConnectionInterface::RTCOfferAnswerOptions options) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   scoped_refptr<CreateSessionDescriptionRequest> description_request(
@@ -1210,7 +1210,7 @@
 }
 
 void RTCPeerConnectionHandler::CreateAnswer(
-    const blink::WebRTCSessionDescriptionRequest& request,
+    blink::RTCSessionDescriptionRequest* request,
     const blink::WebMediaConstraints& options) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createAnswer");
@@ -1230,7 +1230,7 @@
 }
 
 void RTCPeerConnectionHandler::CreateAnswer(
-    const blink::WebRTCSessionDescriptionRequest& request,
+    blink::RTCSessionDescriptionRequest* request,
     blink::RTCAnswerOptionsPlatform* options) {
   DCHECK(task_runner_->RunsTasksInCurrentSequence());
   TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::createAnswer");
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
index bb2880b..2de9139 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -108,15 +108,15 @@
                   const blink::WebMediaConstraints& options) override;
 
   blink::WebVector<std::unique_ptr<blink::WebRTCRtpTransceiver>> CreateOffer(
-      const blink::WebRTCSessionDescriptionRequest& request,
+      blink::RTCSessionDescriptionRequest* request,
       const blink::WebMediaConstraints& options) override;
   blink::WebVector<std::unique_ptr<blink::WebRTCRtpTransceiver>> CreateOffer(
-      const blink::WebRTCSessionDescriptionRequest& request,
+      blink::RTCSessionDescriptionRequest* request,
       blink::RTCOfferOptionsPlatform* options) override;
 
-  void CreateAnswer(const blink::WebRTCSessionDescriptionRequest& request,
+  void CreateAnswer(blink::RTCSessionDescriptionRequest* request,
                     const blink::WebMediaConstraints& options) override;
-  void CreateAnswer(const blink::WebRTCSessionDescriptionRequest& request,
+  void CreateAnswer(blink::RTCSessionDescriptionRequest* request,
                     blink::RTCAnswerOptionsPlatform* options) override;
 
   void SetLocalDescription(const blink::WebRTCVoidRequest& request) override;
@@ -307,7 +307,7 @@
       blink::TransceiverStateSurfacer* transceiver_state_surfacer,
       bool* result);
   std::vector<std::unique_ptr<blink::WebRTCRtpTransceiver>> CreateOfferInternal(
-      const blink::WebRTCSessionDescriptionRequest& request,
+      blink::RTCSessionDescriptionRequest* request,
       webrtc::PeerConnectionInterface::RTCOfferAnswerOptions options);
   void CreateOfferOnSignalingThread(
       webrtc::CreateSessionDescriptionObserver* observer,
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
index 90f885c..238a69c3 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -35,7 +35,6 @@
 #include "third_party/blink/public/platform/web_rtc_peer_connection_handler_client.h"
 #include "third_party/blink/public/platform/web_rtc_rtp_receiver.h"
 #include "third_party/blink/public/platform/web_rtc_session_description.h"
-#include "third_party/blink/public/platform/web_rtc_session_description_request.h"
 #include "third_party/blink/public/platform/web_rtc_stats.h"
 #include "third_party/blink/public/platform/web_rtc_stats_request.h"
 #include "third_party/blink/public/platform/web_rtc_void_request.h"
@@ -617,27 +616,25 @@
 }
 
 TEST_F(RTCPeerConnectionHandlerTest, CreateOffer) {
-  blink::WebRTCSessionDescriptionRequest request;
   blink::WebMediaConstraints options;
   EXPECT_CALL(*mock_tracker_.get(), TrackCreateOffer(pc_handler_.get(), _));
 
-  // TODO(perkj): Can blink::WebRTCSessionDescriptionRequest be changed so
-  // the |reqest| requestSucceeded can be tested? Currently the |request| object
-  // can not be initialized from a unit test.
+  // TODO(perkj): Can blink::RTCSessionDescriptionRequest be changed so
+  // the |request| requestSucceeded can be tested? Currently the |request|
+  // object can not be initialized from a unit test.
   EXPECT_FALSE(mock_peer_connection_->created_session_description());
-  pc_handler_->CreateOffer(request, options);
+  pc_handler_->CreateOffer(nullptr /*RTCSessionDescriptionRequest*/, options);
   EXPECT_TRUE(mock_peer_connection_->created_session_description());
 }
 
 TEST_F(RTCPeerConnectionHandlerTest, CreateAnswer) {
-  blink::WebRTCSessionDescriptionRequest request;
   blink::WebMediaConstraints options;
   EXPECT_CALL(*mock_tracker_.get(), TrackCreateAnswer(pc_handler_.get(), _));
-  // TODO(perkj): Can blink::WebRTCSessionDescriptionRequest be changed so
-  // the |reqest| requestSucceeded can be tested? Currently the |request| object
-  // can not be initialized from a unit test.
+  // TODO(perkj): Can blink::RTCSessionDescriptionRequest be changed so
+  // the |request| requestSucceeded can be tested? Currently the |request|
+  // object can not be initialized from a unit test.
   EXPECT_FALSE(mock_peer_connection_->created_session_description());
-  pc_handler_->CreateAnswer(request, options);
+  pc_handler_->CreateAnswer(nullptr /*RTCSessionDescriptionRequest*/, options);
   EXPECT_TRUE(mock_peer_connection_->created_session_description());
 }
 
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
index 384b875..9363403 100644
--- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
+++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_test.cc
@@ -14,7 +14,6 @@
 #include "third_party/blink/public/platform/web_rtc_rtp_receiver.h"
 #include "third_party/blink/public/platform/web_rtc_rtp_sender.h"
 #include "third_party/blink/public/platform/web_rtc_session_description.h"
-#include "third_party/blink/public/platform/web_rtc_session_description_request.h"
 #include "third_party/blink/public/platform/web_string.h"
 #include "third_party/blink/public/web/web_heap.h"
 #include "third_party/blink/public/web/web_script_source.h"
@@ -660,22 +659,10 @@
 };
 
 template <typename RequestType>
-void CompleteRequest(RequestType request, bool resolve);
+void CompleteRequestDeprecated(RequestType request, bool resolve);
 
 template <>
-void CompleteRequest(WebRTCSessionDescriptionRequest request, bool resolve) {
-  if (resolve) {
-    WebRTCSessionDescription description =
-        WebRTCSessionDescription(WebString(), WebString());
-    request.RequestSucceeded(description);
-  } else {
-    request.RequestFailed(
-        webrtc::RTCError(webrtc::RTCErrorType::INVALID_MODIFICATION));
-  }
-}
-
-template <>
-void CompleteRequest(WebRTCVoidRequest request, bool resolve) {
+void CompleteRequestDeprecated(WebRTCVoidRequest request, bool resolve) {
   if (resolve) {
     request.RequestSucceeded();
   } else {
@@ -685,8 +672,46 @@
 }
 
 template <typename RequestType>
-void PostToCompleteRequest(AsyncOperationAction action,
-                           const RequestType& request) {
+void PostToCompleteRequestDeprecated(AsyncOperationAction action,
+                                     const RequestType& request) {
+  switch (action) {
+    case AsyncOperationAction::kLeavePending:
+      return;
+    case AsyncOperationAction::kResolve:
+      scheduler::GetSequencedTaskRunnerForTesting()->PostTask(
+          FROM_HERE, base::BindOnce(&CompleteRequestDeprecated<RequestType>,
+                                    request, true));
+      return;
+    case AsyncOperationAction::kReject:
+      scheduler::GetSequencedTaskRunnerForTesting()->PostTask(
+          FROM_HERE, base::BindOnce(&CompleteRequestDeprecated<RequestType>,
+                                    request, false));
+      return;
+  }
+}
+
+// TODO(crbug.com/787254): The template definitions below temporarily
+// duplicate the variant above.
+// Use this one for both RTCSessionDescriptionRequest
+// and RTCVoidRequest when the later gets used everywhere instead of
+// WebRTCVoidRequest.
+template <typename RequestType>
+void CompleteRequest(RequestType* request, bool resolve);
+
+template <>
+void CompleteRequest(RTCSessionDescriptionRequest* request, bool resolve) {
+  if (resolve) {
+    WebRTCSessionDescription description =
+        WebRTCSessionDescription(WebString(), WebString());
+    request->RequestSucceeded(description);
+  } else {
+    request->RequestFailed(
+        webrtc::RTCError(webrtc::RTCErrorType::INVALID_MODIFICATION));
+  }
+}
+
+template <typename RequestType>
+void PostToCompleteRequest(AsyncOperationAction action, RequestType* request) {
   switch (action) {
     case AsyncOperationAction::kLeavePending:
       return;
@@ -706,41 +731,43 @@
 class FakeWebRTCPeerConnectionHandler : public MockWebRTCPeerConnectionHandler {
  public:
   WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest& request,
+      RTCSessionDescriptionRequest* request,
       const WebMediaConstraints&) override {
-    PostToCompleteRequest<WebRTCSessionDescriptionRequest>(
-        async_operation_action_, request);
+    PostToCompleteRequest<RTCSessionDescriptionRequest>(async_operation_action_,
+                                                        request);
     return {};
   }
 
   WebVector<std::unique_ptr<WebRTCRtpTransceiver>> CreateOffer(
-      const WebRTCSessionDescriptionRequest& request,
+      RTCSessionDescriptionRequest* request,
       RTCOfferOptionsPlatform*) override {
-    PostToCompleteRequest<WebRTCSessionDescriptionRequest>(
-        async_operation_action_, request);
+    PostToCompleteRequest<RTCSessionDescriptionRequest>(async_operation_action_,
+                                                        request);
     return {};
   }
 
-  void CreateAnswer(const WebRTCSessionDescriptionRequest& request,
+  void CreateAnswer(RTCSessionDescriptionRequest* request,
                     const WebMediaConstraints&) override {
-    PostToCompleteRequest<WebRTCSessionDescriptionRequest>(
-        async_operation_action_, request);
+    PostToCompleteRequest<RTCSessionDescriptionRequest>(async_operation_action_,
+                                                        request);
   }
 
-  void CreateAnswer(const WebRTCSessionDescriptionRequest& request,
+  void CreateAnswer(RTCSessionDescriptionRequest* request,
                     RTCAnswerOptionsPlatform*) override {
-    PostToCompleteRequest<WebRTCSessionDescriptionRequest>(
-        async_operation_action_, request);
+    PostToCompleteRequest<RTCSessionDescriptionRequest>(async_operation_action_,
+                                                        request);
   }
 
   void SetLocalDescription(const WebRTCVoidRequest& request,
                            const WebRTCSessionDescription&) override {
-    PostToCompleteRequest<WebRTCVoidRequest>(async_operation_action_, request);
+    PostToCompleteRequestDeprecated<WebRTCVoidRequest>(async_operation_action_,
+                                                       request);
   }
 
   void SetRemoteDescription(const WebRTCVoidRequest& request,
                             const WebRTCSessionDescription&) override {
-    PostToCompleteRequest<WebRTCVoidRequest>(async_operation_action_, request);
+    PostToCompleteRequestDeprecated<WebRTCVoidRequest>(async_operation_action_,
+                                                       request);
   }
 
   void set_async_operation_action(AsyncOperationAction action) {
diff --git a/third_party/blink/renderer/platform/BUILD.gn b/third_party/blink/renderer/platform/BUILD.gn
index b3327b6..9d32be3 100644
--- a/third_party/blink/renderer/platform/BUILD.gn
+++ b/third_party/blink/renderer/platform/BUILD.gn
@@ -537,7 +537,6 @@
     "exported/web_rtc_rtp_source.cc",
     "exported/web_rtc_rtp_transceiver.cc",
     "exported/web_rtc_session_description.cc",
-    "exported/web_rtc_session_description_request.cc",
     "exported/web_rtc_stats.cc",
     "exported/web_rtc_stats_request.cc",
     "exported/web_rtc_stats_response.cc",
diff --git a/third_party/blink/renderer/platform/exported/web_rtc_session_description_request.cc b/third_party/blink/renderer/platform/exported/web_rtc_session_description_request.cc
deleted file mode 100644
index ca17946..0000000
--- a/third_party/blink/renderer/platform/exported/web_rtc_session_description_request.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2012 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:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * 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.
- *     * Neither the name of Google Inc. 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 THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
- * OWNER OR 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.
- */
-
-#include "third_party/blink/public/platform/web_rtc_session_description_request.h"
-
-#include "third_party/blink/public/platform/web_rtc_session_description.h"
-#include "third_party/blink/renderer/platform/peerconnection/rtc_session_description_request.h"
-#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
-
-namespace blink {
-
-WebRTCSessionDescriptionRequest::WebRTCSessionDescriptionRequest(
-    RTCSessionDescriptionRequest* request)
-    : private_(request) {}
-
-void WebRTCSessionDescriptionRequest::Assign(
-    const WebRTCSessionDescriptionRequest& other) {
-  private_ = other.private_;
-}
-
-void WebRTCSessionDescriptionRequest::Reset() {
-  private_.Reset();
-}
-
-void WebRTCSessionDescriptionRequest::RequestSucceeded(
-    const WebRTCSessionDescription& session_description) const {
-  DCHECK(private_.Get());
-  private_->RequestSucceeded(session_description);
-}
-
-void WebRTCSessionDescriptionRequest::RequestFailed(
-    const webrtc::RTCError& error) const {
-  DCHECK(private_.Get());
-  private_->RequestFailed(error);
-}
-
-}  // namespace blink
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 7fd8df8..ad6da60 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -5206,7 +5206,7 @@
 crbug.com/919789 fast/autoresize/basic.html [ Pass Timeout ]
 crbug.com/919789 fast/dom/viewport/resize-event-fired-window-resized.html [ Pass Timeout ]
 crbug.com/919789 fast/dom/Window/window-resize-contents.html [ Pass Timeout ]
-crbug.com/919789 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Pass Timeout ]
+crbug.com/1021627 fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Pass Failure Timeout ]
 crbug.com/919789 fast/dynamic/window-resize-scrollbars-test.html [ Pass Timeout ]
 crbug.com/919789 fast/events/resize-events-count.html [ Pass Timeout ]
 crbug.com/919789 fast/css-grid-layout/flex-content-sized-columns-resize.html [ Pass Timeout ]
@@ -5757,3 +5757,11 @@
 crbug.com/1021407 [ Retina Release ] virtual/audio-service/media/video-controls-rendering.html [ Pass Failure ]
 crbug.com/1021407 [ Mac10.11 ] virtual/audio-service/media/controls/video-overlay-cast-dark-rendering.html [ Pass Failure ]
 crbug.com/1021407 [ Mac10.11 ] media/controls/video-overlay-cast-dark-rendering.html [ Pass Failure ]
+
+# Temporarily disabled to land accessibility changes in DevTools
+crbug.com/963183 http/tests/devtools/sources/debugger-ui/error-in-watch-expressions.js [ Pass Failure ]
+crbug.com/963183 http/tests/devtools/sources/debugger-ui/watch-expressions-preserve-expansion.js [ Pass Failure ]
+crbug.com/963183 http/tests/devtools/sources/debugger/debugger-proto-property.js [ Pass Failure ]
+
+# Temporarily disabled to land scope changes in DevTools
+crbug.com/963183 http/tests/devtools/sources/debugger-pause/set-return-value.js [ Pass Failure ]
diff --git a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
index d8fa4c98..3b2cbf8 100644
--- a/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
+++ b/third_party/blink/web_tests/external/WPT_BASE_MANIFEST_6.json
@@ -257108,6 +257108,14 @@
      }
     ]
    ],
+   "infrastructure/testdriver/actions/multiTouchPoints.html": [
+    [
+     "infrastructure/testdriver/actions/multiTouchPoints.html",
+     {
+      "testdriver": true
+     }
+    ]
+   ],
    "infrastructure/testdriver/actions/pause.html": [
     [
      "infrastructure/testdriver/actions/pause.html",
@@ -451598,7 +451606,7 @@
    "support"
   ],
   "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt": [
-   "00b6f4882c7327c23ba4fd5183f57570d9d56a78",
+   "49cfaffa99e610674e3b40f6b529b2d3e2a49b0c",
    "support"
   ],
   "html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js": [
@@ -464785,6 +464793,10 @@
    "5cab1206dbec8bc307fbdfed1bf3002cc02c299a",
    "testharness"
   ],
+  "infrastructure/testdriver/actions/multiTouchPoints.html": [
+   "c8169733306b4f348509145f2f04df2573cc6c3e",
+   "testharness"
+  ],
   "infrastructure/testdriver/actions/pause.html": [
    "72f34c1bde8cf54814cdf91b3fdeeaff90dd07e3",
    "testharness"
@@ -494538,7 +494550,7 @@
    "support"
   ],
   "resources/testharness.js": [
-   "a44185c1eaf97d89dd023d75354da588873905a4",
+   "bed2856685478f1ac43bd1c655cdc57d3a1081ba",
    "support"
   ],
   "resources/testharness.js.headers": [
diff --git a/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change-ref.html b/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change-ref.html
new file mode 100644
index 0000000..20ec3bf
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change-ref.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1015987">
+<style>
+  #wb {
+      display: -webkit-box;
+      -webkit-box-orient: vertical;
+      -webkit-line-clamp: 3;
+      overflow: hidden;
+  }
+</style>
+<p>Line-clamp should be respected after removing and changing visibility.
+<div id="root" style="border: solid; width: 200px;">
+  <div id="container">
+    <p id="wb">
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+    </p>
+  </div>
+</div>
diff --git a/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change.html b/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change.html
new file mode 100644
index 0000000..115fa43
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/compat/webkit-box-clamp-visibility-change.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<link rel="help" href="https://crbug.com/1015987">
+<link rel="match" href="webkit-box-clamp-visibility-change-ref.html">
+<style>
+  #wb {
+      display: -webkit-box;
+      -webkit-box-orient: vertical;
+      -webkit-line-clamp: 3;
+      overflow: hidden;
+  }
+</style>
+<p>Line-clamp should be respected after removing and changing visibility.
+<div id="root" style="border: solid; width: 200px;">
+  <div id="container">
+    <p id="wb">
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+      text text text text
+    </p>
+  </div>
+</div>
+<script>
+  const container = document.getElementById('container');
+  const root = document.getElementById('root');
+  container.remove();
+  container.style.visibility = 'hidden';
+  root.appendChild(container);
+  document.body.offsetTop;
+  container.style.visibility = '';
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt
index 00b6f48..49cfaff 100644
--- a/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt
+++ b/third_party/blink/web_tests/external/wpt/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window-expected.txt
@@ -7,7 +7,7 @@
 PASS JS-engine-created TypeError (cross-site iframe)
 PASS web API-created TypeError (worker)
 PASS web API-created TypeError (cross-site iframe)
-FAIL web API-created DOMException (worker) assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\n    at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:41:19)\n    at Test.step (http://web-platform.test:8001/resources/testharness.js:1908:25)\n    at async_test (http://web-platform.test:8001/resources/testharness.js:576:22)\n    at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:40:3)\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
-FAIL web API-created DOMException (cross-site iframe) assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\n    at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:60:19)\n    at Test.step (http://web-platform.test:8001/resources/testharness.js:1908:25)\n    at async_test (http://web-platform.test:8001/resources/testharness.js:576:22)\n    at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:57:3)\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
+FAIL web API-created DOMException (worker) assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\n    at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:41:19)\n    at Test.step (http://web-platform.test:8001/resources/testharness.js:1914:25)\n    at async_test (http://web-platform.test:8001/resources/testharness.js:576:22)\n    at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:40:3)\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
+FAIL web API-created DOMException (cross-site iframe) assert_equals: expected (string) "Error: Failed to execute 'createElement' on 'Document': The tag name provided ('') is not a valid name.\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:33:14\n    at Test.<anonymous> (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:60:19)\n    at Test.step (http://web-platform.test:8001/resources/testharness.js:1914:25)\n    at async_test (http://web-platform.test:8001/resources/testharness.js:576:22)\n    at stackTests (http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:57:3)\n    at http://web-platform.test:8001/html/infrastructure/safe-passing-of-structured-data/structured-cloning-error-stack-optional.sub.window.js:31:1" but got (undefined) undefined
 Harness: the test ran to completion.
 
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/resources/util.js b/third_party/blink/web_tests/external/wpt/layout-instability/resources/util.js
new file mode 100644
index 0000000..ca430d0
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/resources/util.js
@@ -0,0 +1,66 @@
+// Utilities for Layout Instability tests.
+
+// Returns a promise that is resolved when the specified number of animation
+// frames has occurred.
+waitForAnimationFrames = frameCount => {
+  return new Promise(resolve => {
+    const handleFrame = () => {
+      if (--frameCount <= 0)
+        resolve();
+      else
+        requestAnimationFrame(handleFrame);
+    };
+    requestAnimationFrame(handleFrame);
+  });
+};
+
+// Returns a promise that is resolved when the next animation frame occurs.
+waitForAnimationFrame = () => waitForAnimationFrames(1);
+
+// Helper to compute an expected layout shift score based on an expected impact
+// region and max move distance for a particular animation frame.
+computeExpectedScore = (impactRegionArea, moveDistance) => {
+  const docElement = document.documentElement;
+
+  const viewWidth = docElement.clientWidth;
+  const viewHeight = docElement.clientHeight;
+
+  const viewArea = viewWidth * viewHeight;
+  const viewMaxDim = Math.max(viewWidth, viewHeight);
+
+  const impactFraction = impactRegionArea / viewArea;
+  const distanceFraction = moveDistance / viewMaxDim;
+
+  return impactFraction * distanceFraction;
+};
+
+// An object that tracks the document cumulative layout shift score.
+// Usage:
+//
+//   const watcher = new ScoreWatcher;
+//   ...
+//   assert_equals(watcher.score, expectedScore);
+//
+// The score reflects only layout shifts that occur after the ScoreWatcher is
+// constructed.
+ScoreWatcher = function() {
+  if (PerformanceObserver.supportedEntryTypes.indexOf("layout-shift") == -1)
+    throw new Error("Layout Instability API not supported");
+  this.score = 0;
+  const resetPromise = () => {
+    this.promise = new Promise(resolve => {
+      this.resolve = () => {
+        resetPromise();
+        resolve();
+      }
+    });
+  };
+  resetPromise();
+  const observer = new PerformanceObserver(list => {
+    list.getEntries().forEach(entry => {
+      this.score += entry.value;
+      this.resolve();
+    });
+  });
+  observer.observe({entryTypes: ['layout-shift']});
+};
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/rtl-distance.html b/third_party/blink/web_tests/external/wpt/layout-instability/rtl-distance.html
new file mode 100644
index 0000000..a6f0040
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/rtl-distance.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<title>Layout Instability: movement distance uses starting corner</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shifter { position: relative; width: 100px; height: 100px; direction: rtl; }
+
+</style>
+<div id='shifter'></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Move the left edge rightward by 10px and the right edge leftward by 20px.
+  document.querySelector("#shifter").style = "width: 70px; left: 10px";
+
+  // The movement distance should use the displacement of the right edge.
+  const expectedScore = computeExpectedScore(100 * 100, 20);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, 'RTL element.');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/simple-block-movement.html b/third_party/blink/web_tests/external/wpt/layout-instability/simple-block-movement.html
new file mode 100644
index 0000000..0f9257e
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/simple-block-movement.html
@@ -0,0 +1,33 @@
+<!DOCTYPE html>
+<title>Layout Instability: simple block movement is detected</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+#shifter { position: relative; width: 300px; height: 100px; }
+
+</style>
+<div id="shifter"></div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Modify the position of the div.
+  document.querySelector("#shifter").style = "top: 60px";
+
+  // An element of size (300 x 100) has shifted by 60px.
+  const expectedScore = computeExpectedScore(300 * (100 + 60), 60);
+
+  // Observer fires after the frame is painted.
+  assert_equals(watcher.score, 0);
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, 'Simple block movement.');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/layout-instability/transform.html b/third_party/blink/web_tests/external/wpt/layout-instability/transform.html
new file mode 100644
index 0000000..7ac1c8ca
--- /dev/null
+++ b/third_party/blink/web_tests/external/wpt/layout-instability/transform.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<title>Layout Instability: shift inside a transformed container</title>
+<link rel="help" href="https://wicg.github.io/layout-instability/" />
+<style>
+
+body { margin: 0; }
+#container { transform: translateX(-300px) translateY(-40px); }
+#shifter { position: relative; width: 600px; height: 140px; }
+
+</style>
+<div id="container">
+  <div id="shifter"></div>
+</div>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/util.js"></script>
+<script>
+
+promise_test(async () => {
+  const watcher = new ScoreWatcher;
+
+  // Wait for the initial render to complete.
+  await waitForAnimationFrames(2);
+
+  // Modify the position of the div.
+  document.querySelector("#shifter").style = "top: 60px";
+
+  // The shifter has size 600 x 140, but the container's transform
+  // reduces its viewport overlap.
+  const expectedScore = computeExpectedScore(
+      (600 - 300) * (140 - 40 + 60), 60);
+
+  await watcher.promise;
+  assert_equals(watcher.score, expectedScore);
+}, 'Transformed container.');
+
+</script>
diff --git a/third_party/blink/web_tests/external/wpt/resources/testharness.js b/third_party/blink/web_tests/external/wpt/resources/testharness.js
index a44185c1e..bed28566 100644
--- a/third_party/blink/web_tests/external/wpt/resources/testharness.js
+++ b/third_party/blink/web_tests/external/wpt/resources/testharness.js
@@ -815,6 +815,12 @@
                 });
     }
 
+    /*
+     * Register a function as a DOM event listener to the given object for the
+     * event bubbling phase.
+     *
+     * This function was deprecated in November of 2019.
+     */
     function on_event(object, event, callback)
     {
         object.addEventListener(event, callback, false);
diff --git a/third_party/boringssl/roll_boringssl.py b/third_party/boringssl/roll_boringssl.py
index b2660eac..aac53485 100755
--- a/third_party/boringssl/roll_boringssl.py
+++ b/third_party/boringssl/roll_boringssl.py
@@ -87,6 +87,13 @@
   return commits
 
 
+def FormatCommit(commit):
+  """Returns a commit formatted into a single line."""
+  rev = commit['commit'][:9]
+  line, _ = commit['message'].split('\n', 1)
+  return '%s %s' % (rev, line)
+
+
 def main():
   if len(sys.argv) > 2:
     sys.stderr.write('Usage: %s [COMMIT]' % sys.argv[0])
@@ -115,9 +122,11 @@
   # Look for commits with associated Chromium bugs.
   crbugs = set()
   crbug_commits = []
+  update_note_commits = []
   log = Log(BORINGSSL_SRC_PATH, '%s..%s' % (old_head, new_head))
   for commit in log:
     has_bugs = False
+    has_update_note = False
     for line in commit['message'].split('\n'):
       lower = line.lower()
       if lower.startswith('bug:') or lower.startswith('bug='):
@@ -126,8 +135,12 @@
           if bug.startswith('chromium:'):
             crbugs.add(int(bug[len('chromium:'):]))
             has_bugs = True
+      if lower.startswith('update-note:'):
+        has_update_note = True
     if has_bugs:
       crbug_commits.append(commit)
+    if has_update_note:
+      update_note_commits.append(commit)
 
   UpdateDEPS(DEPS_PATH, old_head, new_head)
 
@@ -167,9 +180,12 @@
   if crbug_commits:
     message += 'The following commits have Chromium bugs associated:\n'
     for commit in crbug_commits:
-      rev = commit['commit'][:9]
-      line, _ = commit['message'].split('\n', 1)
-      message += '  %s %s\n' % (rev, line)
+      message += '  ' + FormatCommit(commit)
+    message += '\n'
+  if update_note_commits:
+    message += 'The following commits have update notes:\n'
+    for commit in update_note_commits:
+      message += '  ' + FormatCommit(commit)
     message += '\n'
   if crbugs:
     message += 'Bug: %s\n' % (', '.join(str(bug) for bug in sorted(crbugs)),)
diff --git a/third_party/libxml/BUILD.gn b/third_party/libxml/BUILD.gn
index 9d622895..28b7c9d 100644
--- a/third_party/libxml/BUILD.gn
+++ b/third_party/libxml/BUILD.gn
@@ -141,7 +141,6 @@
     ":xml_reader",
     ":xml_writer",
     ":libxml_utils",
-    "//components/search_engines",
     "//testing/libfuzzer/*",
     "//third_party/blink/renderer/*",
     "//third_party/fontconfig",
diff --git a/tools/clang/scripts/package.py b/tools/clang/scripts/package.py
index f5fde44d8..a7ddea7 100755
--- a/tools/clang/scripts/package.py
+++ b/tools/clang/scripts/package.py
@@ -104,7 +104,7 @@
     print('gsutil %s' % ' '.join(gsutil_args))
 
 
-def UploadPDBToSymbolServer():
+def UploadPDBsToSymbolServer(binaries):
   assert sys.platform == 'win32'
   # Upload PDB and binary to the symbol server on Windows.  Put them into the
   # chromium-browser-symsrv bucket, since chrome devs have that in their
@@ -117,7 +117,7 @@
   #    can compute this ABCDEFAB01234 string for us, so use that.
   #    The .ex_ instead of .exe at the end means that the file is compressed.
   # PDB:
-  # gs://chromium-browser-symsrv/clang-cl.exe.pdb/AABBCCDD/clang-cl.dll.pd_
+  # gs://chromium-browser-symsrv/clang-cl.exe.pdb/AABBCCDD/clang-cl.exe.pd_
   #   AABBCCDD here is computed from the output of
   #      dumpbin /all mybinary.exe | find "Format: RSDS"
   #   but tools/symsrc/pdb_fingerprint_from_img.py can compute it already, so
@@ -125,7 +125,6 @@
   sys.path.insert(0, os.path.join(CHROMIUM_DIR, 'tools', 'symsrc'))
   import img_fingerprint, pdb_fingerprint_from_img
 
-  binaries = [ 'bin/clang-cl.exe', 'bin/lld-link.exe' ]
   for binary_path in binaries:
     binary_path = os.path.join(LLVM_RELEASE_DIR, binary_path)
     binary_id = img_fingerprint.GetImgFingerprint(binary_path)
@@ -507,7 +506,10 @@
   MaybeUpload(args.upload, libclang_dir + '.tgz', platform)
 
   if sys.platform == 'win32' and args.upload:
-    UploadPDBToSymbolServer()
+    binaries = [f for f in want if f.endswith('.exe') or f.endswith('.dll')]
+    assert 'bin/clang-cl.exe' in binaries
+    assert 'bin/lld-link.exe' in binaries
+    UploadPDBsToSymbolServer(binaries)
 
   # FIXME: Warn if the file already exists on the server.
 
diff --git a/tools/determinism/deterministic_build_whitelist.pyl b/tools/determinism/deterministic_build_whitelist.pyl
index be8989c..82a3f44 100644
--- a/tools/determinism/deterministic_build_whitelist.pyl
+++ b/tools/determinism/deterministic_build_whitelist.pyl
@@ -57,10 +57,10 @@
     'ppapi_nacl_tests_pnacl_newlib_x64.nexe',
 
     # https://crbug.com/429358
-    'nacl_test_data/extension_vcache_test/glibc/extension_validation_cache_libs/lib32/libppapi_cpp_lib.dll',
-    'nacl_test_data/glibc/pm_exit_status_test_libs/lib32/libppapi_cpp_lib.dll',
-    'nacl_test_data/glibc/simple_libs/lib32/libppapi_cpp_lib.dll',
-    'nacl_test_data/glibc/sysconf_nprocessors_onln_test_libs/lib32/libppapi_cpp_lib.dll',
+    'nacl_test_data\\extension_vcache_test\\glibc\\extension_validation_cache_libs\\lib32\\libppapi_cpp_lib.dll',
+    'nacl_test_data\\glibc\\pm_exit_status_test_libs\\lib32\\libppapi_cpp_lib.dll',
+    'nacl_test_data\\glibc\\simple_libs\\lib32\\libppapi_cpp_lib.dll',
+    'nacl_test_data\\glibc\\sysconf_nprocessors_onln_test_libs\\lib32\\libppapi_cpp_lib.dll',
 
     # TODO(thakis): Figure out what's up with these three (and their isolate).
     'mini_installer.exe',
diff --git a/tools/grit/grit/format/html_inline.py b/tools/grit/grit/format/html_inline.py
index 9e7aff0..c428600 100755
--- a/tools/grit/grit/format/html_inline.py
+++ b/tools/grit/grit/format/html_inline.py
@@ -49,8 +49,8 @@
     r'<link rel="stylesheet"[^>]+?href="(?P<filename>[^"]*)".*?>(\s*</link>)?',
     re.DOTALL)
 _INCLUDE_RE = lazy_re.compile(
-    r'<include[^>]+?src=("(?P<file1>[^">]*)"|\'(?P<file2>[^\'>]*)\').*?>'
-    r'(\s*</include>)?',
+    r'(?P<comment>\/\/ )?<include[^>]+?'
+    r'src=("(?P<file1>[^">]*)"|\'(?P<file2>[^\'>]*)\').*?>(\s*</include>)?',
     re.DOTALL)
 _SRC_RE = lazy_re.compile(
     r'<(?!script)(?:[^>]+?\s)src="(?!\[\[|{{)(?P<filename>[^"\']*)"',
diff --git a/tools/grit/grit/format/html_inline_unittest.py b/tools/grit/grit/format/html_inline_unittest.py
index 89158623..f3a8d518 100755
--- a/tools/grit/grit/format/html_inline_unittest.py
+++ b/tools/grit/grit/format/html_inline_unittest.py
@@ -538,7 +538,7 @@
       'other.js': '// Copyright somebody\nalert(1);',
     }
 
-    expected_inlined = '// // Copyright somebody\nalert(1);'
+    expected_inlined = '// Copyright somebody\nalert(1);'
 
     source_resources = set()
     tmp_dir = util.TempDir(files)
diff --git a/tools/metrics/actions/actions.xml b/tools/metrics/actions/actions.xml
index c4252d93..45a7aa44 100644
--- a/tools/metrics/actions/actions.xml
+++ b/tools/metrics/actions/actions.xml
@@ -21789,6 +21789,7 @@
 <action name="TabContextMenu_AddToExistingGroup">
   <owner>bsep@google.com</owner>
   <owner>tbergquist@google.com</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected an entry in the Add to existing group submenu from the tab
     context menu.
@@ -21798,6 +21799,7 @@
 <action name="TabContextMenu_AddToNewGroup">
   <owner>bsep@google.com</owner>
   <owner>tbergquist@google.com</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected Add to new group from the tab context menu.
   </description>
@@ -21812,7 +21814,8 @@
 </action>
 
 <action name="TabContextMenu_CloseOtherTabs">
-  <owner>pbos@chromium.org</owner>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected Close Other Tabs from the tab context menu. Temporarily
     removed in M78.
@@ -21820,33 +21823,41 @@
 </action>
 
 <action name="TabContextMenu_CloseTab">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <description>Please enter the description of this user action.</description>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>User selected Close Tabs from tab context menu.</description>
 </action>
 
 <action name="TabContextMenu_CloseTabsOpenedBy">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_CloseTabsToRight">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <description>Please enter the description of this user action.</description>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>
+    User selected Close Tabs to the Right from tab context menu.
+  </description>
 </action>
 
 <action name="TabContextMenu_CompactNavigationBar">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_Duplicate">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <description>Please enter the description of this user action.</description>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>User selected Duplicate from tab context menu.</description>
 </action>
 
 <action name="TabContextMenu_FocusMode">
   <owner>dfried@chromium.org</owner>
   <owner>yiningwang@google.com</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected Focus This Tab from the tab context menu.
   </description>
@@ -21860,30 +21871,35 @@
 </action>
 
 <action name="TabContextMenu_NewTab">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected New Tab to the Right from the tabstrip context menu.
   </description>
 </action>
 
 <action name="TabContextMenu_OpenTabsLeftToRight">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_OpenTabsRightToLeft">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_Reload">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <description>Please enter the description of this user action.</description>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>User selected Reload from tab context menu.</description>
 </action>
 
 <action name="TabContextMenu_RemoveFromGroup">
   <owner>bsep@google.com</owner>
   <owner>tbergquist@google.com</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
   <description>
     User selected Remove from group from the tab context menu.
   </description>
@@ -21936,8 +21952,9 @@
 </action>
 
 <action name="TabContextMenu_TogglePinned">
-  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
-  <description>Please enter the description of this user action.</description>
+  <owner>tbergquist@chromium.org</owner>
+  <owner>chrome-desktop-ui-sea@google.com</owner>
+  <description>User selected Pin/Unpin from tab context menu.</description>
 </action>
 
 <action name="TabContextMenu_UnmuteTabs">
@@ -21948,16 +21965,19 @@
 </action>
 
 <action name="TabContextMenu_UseDestinationsTab_Off">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_UseDestinationsTab_On">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
 
 <action name="TabContextMenu_UseVerticalTabs">
+  <obsolete>Could not find traces of this used in code.</obsolete>
   <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
   <description>Please enter the description of this user action.</description>
 </action>
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 779d458c..f2a2c9c 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -18641,6 +18641,7 @@
   <int value="641" label="PerAppTimeLimits"/>
   <int value="642" label="DnsOverHttpsTemplates"/>
   <int value="643" label="GloballyScopeHTTPAuthCacheEnabled"/>
+  <int value="644" label="WebComponentsV0Enabled"/>
 </enum>
 
 <enum name="EnterprisePolicyInvalidations">
@@ -30923,6 +30924,12 @@
   <int value="-2147219455" label="GOOPDATE_E_NO_NETWORK"/>
   <int value="-2147219437" label="GOOPDATE_E_APP_UPDATE_DISABLED_BY_POLICY"/>
   <int value="-2147219198" label="GOOPDATEINSTALL_E_INSTALLER_FAILED"/>
+  <int value="-2147168255" label="ITF_E_FONTFILE_UTIL_TOO_MANY_FILES_PER_FACE"/>
+  <int value="-2147168254" label="ITF_E_FONTFILE_UTIL_EMPTY_FILE_PATH"/>
+  <int value="-2147167999" label="ITF_E_SCANNING_TIMEOUT"/>
+  <int value="-2147167998" label="ITF_E_EXTRACT_LOCALIZED_STRINGS_FAILED"/>
+  <int value="-2147167997"
+      label="ITF_E_EXTRACT_NO_FULL_NAME_OR_POSTSCRIPT_NAME"/>
   <int value="-2147024894" label="ERROR_FILE_NOT_FOUND"/>
   <int value="-2147024893" label="ERROR_PATH_NOT_FOUND"/>
   <int value="-2147024891" label="E_ACCESSDENIED"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index a319a6e..d2373660 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -31944,6 +31944,20 @@
   </summary>
 </histogram>
 
+<histogram name="DirectWrite.Fonts.Proxy.MostFrequentScanningFailure"
+    enum="Hresult" expires_after="M82">
+  <owner>drott@chromium.org</owner>
+  <owner>layout-dev@chromium.org</owner>
+  <summary>
+    When scanning fonts for meta data as part of local matching, record the most
+    frequent failure of why no meta data was gathered for a font family.
+    Recorded in DWriteFontTableBuilder at the time of finishing scanning the
+    font files for their name meta information. Values are Windows HRESULT error
+    codes, including custom values for implementation specific failure cases.
+    Used for diagnosing https://crbug.com/1009402.
+  </summary>
+</histogram>
+
 <histogram name="DirectWrite.Fonts.Proxy.NumFontFiles" units="font files"
     expires_after="M82">
   <owner>drott@chromium.org</owner>
@@ -108064,6 +108078,48 @@
   </summary>
 </histogram>
 
+<histogram name="Platform.SATA.AvailableReservedSpace" units="%"
+    expires_after="2020-10-25">
+  <owner>asavery@chromium.org</owner>
+  <owner>gwendal@chromium.org</owner>
+  <summary>
+    The remaining reserved space (SMART 232). The value counts down typically
+    from 100 to 0, sent at boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SATA.LogicalSectorsRead" units="512-byte sectors"
+    expires_after="2020-10-25">
+  <owner>asavery@chromium.org</owner>
+  <owner>gwendal@chromium.org</owner>
+  <summary>
+    The total number of 512-byte sectors written during the lifetime of the
+    device, sent at boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SATA.LogicalSectorsWritten" units="512-byte sectors"
+    expires_after="2020-10-25">
+  <owner>asavery@chromium.org</owner>
+  <owner>gwendal@chromium.org</owner>
+  <summary>
+    The total number of 512-byte sectors written during the lifetime of the
+    device, sent at boot.
+  </summary>
+</histogram>
+
+<histogram name="Platform.SATA.PercentageUsed" units="%"
+    expires_after="2020-10-25">
+  <owner>asavery@chromium.org</owner>
+  <owner>gwendal@chromium.org</owner>
+  <summary>
+    Percentage Used Endurance Indicator. A value of 0 indicates a new device, a
+    value of 100 indicates the device is at the end of its lifespan as projected
+    by the manufacturer. Values greater than 100 indicate the device is beyond
+    the projected lifespan. Maximum value is 255, sent at boot.
+  </summary>
+</histogram>
+
 <histogram name="Platform.ServiceFailureHashes" units="units"
     expires_after="M77">
   <obsolete>
@@ -146838,7 +146894,7 @@
 </histogram>
 
 <histogram name="Sync.ResolveConflict" enum="SyncConflictResolutions"
-    expires_after="M80">
+    expires_after="M82">
   <owner>treib@chromium.org</owner>
   <owner>mastiz@chromium.org</owner>
   <summary>
@@ -168619,13 +168675,39 @@
   <suffix name="SendBeginMainFrameToCommit"
       label="The time from when the BeginMainFrame is sent to the beginning
              of the commit."/>
+  <suffix name="SendBeginMainFrameToCommit.Animate"
+      label="The time portion of SendBeginMainFrameToCommit spent on
+             animations."/>
+  <suffix name="SendBeginMainFrameToCommit.Composite"
+      label="The time portion of SendBeginMainFrameToCommit spent on
+             compositing."/>
+  <suffix name="SendBeginMainFrameToCommit.CompositeCommit"
+      label="The time portion of SendBeginMainFrameToCommit spent on
+             composite commit."/>
+  <suffix name="SendBeginMainFrameToCommit.HandleInputEvents"
+      label="The time portion of SendBeginMainFrameToCommit spent on handling
+             imput events."/>
+  <suffix name="SendBeginMainFrameToCommit.LayoutUpdate"
+      label="The time portion of SendBeginMainFrameToCommit spent on layout
+             update."/>
+  <suffix name="SendBeginMainFrameToCommit.Paint"
+      label="The time portion of SendBeginMainFrameToCommit spent on paint."/>
+  <suffix name="SendBeginMainFrameToCommit.Prepaint"
+      label="The time portion of SendBeginMainFrameToCommit spent on
+             prepaint."/>
+  <suffix name="SendBeginMainFrameToCommit.ScrollingCoordinator"
+      label="The time portion of SendBeginMainFrameToCommit spent on
+             scrolling coordinator."/>
+  <suffix name="SendBeginMainFrameToCommit.UpdateLayers"
+      label="The time portion of SendBeginMainFrameToCommit spent on updating
+             layers."/>
   <suffix name="SubmitCompositorFrameToPresentationCompositorFrame"
       label="The time from when the a compositor frame is submitted to the
              display compositor to when it is presented."/>
   <suffix
       name="SubmitCompositorFrameToPresentationCompositorFrame.ReceivedCompositorFrameToStartDraw"
-      label="The time from when the a compositor frame is received to when it
-             is started to draw."/>
+      label="The time from when a compositor frame is received to when it
+             starts to draw."/>
   <suffix
       name="SubmitCompositorFrameToPresentationCompositorFrame.StartDrawToSwapEnd"
       label="The time from when the a compositor frame is started to draw to
@@ -168636,13 +168718,14 @@
              it is received."/>
   <suffix
       name="SubmitCompositorFrameToPresentationCompositorFrame.SwapEndToPresentationCompositorFrame"
-      label="The time from when the a compositor frame when it ends swap to
-             when it is presented."/>
+      label="The time from when the a compositor frame ends swap to when it
+             is presented."/>
   <suffix name="TotalLatency"
       label="The total time starting from BeginImplFrame to when
-             SubmitCompositorFrame is done with updates from the MainThread
-             (i.e. the time it takes for BeginImplFrame, BeginMainFrame,
-             Commit, Activate, and SubmitCompositorFrame)."/>
+             CompositorFramePresentation is done with updates from the
+             MainThread (i.e. the time it takes for BeginImplFrame,
+             BeginMainFrame, Commit, Activate, SubmitCompositorFrame and
+             PresentCompositorFrame)."/>
   <suffix name="Unknown" label="The unknown stage"/>
   <affected-histogram name="CompositorLatency"/>
   <affected-histogram name="CompositorLatency.CompositorAnimation"/>
diff --git a/tools/perf/core/minidump_unittest.py b/tools/perf/core/minidump_unittest.py
index 9913ec28..7c196d6 100644
--- a/tools/perf/core/minidump_unittest.py
+++ b/tools/perf/core/minidump_unittest.py
@@ -20,7 +20,8 @@
   # Android is currently hard coded to return None for minidump paths.
   # Minidump symbolization doesn't work in ChromeOS local mode if the rootfs is
   # still read-only, so skip the test in that case.
-  @decorators.Disabled('android', 'chromeos-local')
+  # Flakes on chromeos: crbug.com/1014754
+  @decorators.Disabled('android', 'chromeos', 'chromeos-local')
   def testSymbolizeMinidump(self):
     # Wait for the browser to restart fully before crashing
     self._LoadPageThenWait('var sam = "car";', 'sam')
@@ -101,7 +102,8 @@
   @decorators.Isolated
   # Minidump symbolization doesn't work in ChromeOS local mode if the rootfs is
   # still read-only, so skip the test in that case.
-  @decorators.Disabled('android', 'chromeos-local')
+  # Flakes on chromeos: crbug.com/1014754
+  @decorators.Disabled('android', 'chromeos', 'chromeos-local')
   def testMultipleCrashMinidumps(self):
     # Wait for the browser to restart fully before crashing
     self._LoadPageThenWait('var cat = "dog";', 'cat')
diff --git a/tools/perf/testdata/dummy_luci_test_result_template.json b/tools/perf/testdata/dummy_luci_test_result_template.json
index bf2bc798..2e631dd 100644
--- a/tools/perf/testdata/dummy_luci_test_result_template.json
+++ b/tools/perf/testdata/dummy_luci_test_result_template.json
@@ -4,7 +4,7 @@
     "status": "PASS",
     "expected": true,
     "outputArtifacts":{
-      "trace": {
+      "trace/1.json": {
         "contentType":"application/json",
         "filePath":"FULL_TRACE_FILE_PATH"
       }
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
index 35da66a..c840e549 100644
--- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
+++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_mr.xtb
@@ -6,7 +6,7 @@
 <translation id="145360476452865422">अ‍ॅनिमेशन धोरण:</translation>
 <translation id="1555130319947370107">निळा</translation>
 <translation id="1588438908519853928">सामान्य</translation>
-<translation id="1591070050619849194">सर्व इमेज अॅनिमेशन अक्षम करा</translation>
+<translation id="1591070050619849194">सर्व इमेज ॲनिमेशन अक्षम करा</translation>
 <translation id="1703735871906654364">कॅरेट ब्राउझिंग</translation>
 <translation id="1791496371305830581">सर्व अ‍ॅनिमेटेड प्रतिमांना अनुमती द्या.</translation>
 <translation id="1996252509865389616">सुरू करायचे?</translation>
@@ -24,7 +24,7 @@
 <translation id="3435896845095436175">सुरू करा</translation>
 <translation id="3622586652998721735">डीफॉल्‍ट योजना म्‍हणून सेट करा</translation>
 <translation id="3812541808639806898">इमेज Alt टेक्स्ट व्ह्यूअर</translation>
-<translation id="381767806621926835">त्याच्या मोठ्या वर्णना अॅक्सेस करण्यासाठी "longdesc" किंवा "aria-describedat" विशेषतेसह कशावरही उजवीकडे-क्लिक करा.</translation>
+<translation id="381767806621926835">त्याच्या मोठ्या वर्णना ॲक्सेस करण्यासाठी "longdesc" किंवा "aria-describedat" विशेषतेसह कशावरही उजवीकडे-क्लिक करा.</translation>
 <translation id="4023902424053835668">बाण की चा वापर करून वेबपृष्‍ठांचा मजकूर ब्राऊझ करा.</translation>
 <translation id="4388820049312272371">द्रुत फ्‍लॅशने कर्सर स्‍थिती हायलाइट करा.</translation>
 <translation id="4394049700291259645">अक्षम करा</translation>
@@ -35,8 +35,8 @@
 <translation id="4954450790315188152">कॅरेट ब्राउझिंग सक्षम केले असते तेव्‍हा:</translation>
 <translation id="5041932793799765940">रंग ॲडजस्टमेंट</translation>
 <translation id="5094574508723441140">वाढविलेली तीव्रता</translation>
-<translation id="5173942593318174089">अॅनिमेशनसह कर्सर स्‍थिती हायलाइट करा.</translation>
-<translation id="5287723860611749454">&lt;p&gt;संपूर्ण दस्‍तऐवजामधून हलवण्‍यासाठी अॅरो की चा वापर करा. &lt;/p&gt;&lt;p&gt;त्या स्‍थानावर कर्सर हलवण्‍यासाठी कुठेही क्लिक करा. &lt;/p&gt; &lt;p&gt; मजकूर निवडण्यासाठी &lt;span class='key'&gt;Shift&lt;/span&gt; + अॅरो दाबा.&lt;/p&gt;</translation>
+<translation id="5173942593318174089">ॲनिमेशनसह कर्सर स्‍थिती हायलाइट करा.</translation>
+<translation id="5287723860611749454">&lt;p&gt;संपूर्ण दस्‍तऐवजामधून हलवण्‍यासाठी ॲरो की चा वापर करा. &lt;/p&gt;&lt;p&gt;त्या स्‍थानावर कर्सर हलवण्‍यासाठी कुठेही क्लिक करा. &lt;/p&gt; &lt;p&gt; मजकूर निवडण्यासाठी &lt;span class='key'&gt;Shift&lt;/span&gt; + ॲरो दाबा.&lt;/p&gt;</translation>
 <translation id="5331422999063554397">उलट रंग</translation>
 <translation id="5555153510860501336">उच्च तीव्रता अक्षम केली आहे</translation>
 <translation id="5558600050691192317">कीबोर्ड आदेश</translation>
diff --git a/ui/accessibility/platform/ax_fragment_root_win.cc b/ui/accessibility/platform/ax_fragment_root_win.cc
index 945c653..3bd8819e 100644
--- a/ui/accessibility/platform/ax_fragment_root_win.cc
+++ b/ui/accessibility/platform/ax_fragment_root_win.cc
@@ -196,8 +196,8 @@
   ui::AXFragmentRootWin* GetFragmentRootParentOf(
       gfx::NativeViewAccessible accessible) const {
     for (const auto& entry : map_) {
-      if (entry.second->GetChildNodeDelegate()->GetNativeViewAccessible() ==
-          accessible)
+      AXPlatformNodeDelegate* child = entry.second->GetChildNodeDelegate();
+      if (child && (child->GetNativeViewAccessible() == accessible))
         return entry.second;
     }
     return nullptr;
@@ -208,11 +208,8 @@
 };
 
 AXFragmentRootWin::AXFragmentRootWin(gfx::AcceleratedWidget widget,
-                                     AXFragmentRootDelegateWin* delegate,
-                                     bool is_controller_for_root)
-    : widget_(widget),
-      delegate_(delegate),
-      is_controller_for_root_(is_controller_for_root) {
+                                     AXFragmentRootDelegateWin* delegate)
+    : widget_(widget), delegate_(delegate) {
   platform_node_ = ui::AXFragmentRootPlatformNodeWin::Create(this);
   AXFragmentRootMapWin::GetInstance().AddFragmentRoot(widget, this);
 }
@@ -345,10 +342,7 @@
         return child_index;
     }
   }
-
-  NOTREACHED();
-
-  return -1;
+  return 0;
 }
 
 }  // namespace ui
diff --git a/ui/accessibility/platform/ax_fragment_root_win.h b/ui/accessibility/platform/ax_fragment_root_win.h
index 3626e86..1b8b5f96 100644
--- a/ui/accessibility/platform/ax_fragment_root_win.h
+++ b/ui/accessibility/platform/ax_fragment_root_win.h
@@ -26,20 +26,10 @@
 // Since UIA derives some information from the underlying HWND hierarchy, we
 // expose one fragment root per HWND. The class that owns the HWND is expected
 // to own the corresponding AXFragmentRootWin.
-//
-// The usual way for UI Automation to obtain a fragment root is through
-// WM_GETOBJECT. However, if there's a relation such as "Controller For"
-// between element A in one window and element B in another window, UIA might
-// call element A to discover the relation, receive a pointer to element B,
-// then ask element B for its fragment root, without having sent WM_GETOBJECT
-// to element B's window.
-// The is_controller_for_root_ boolean member variable is used to determine
-// whether this is a fragment root witha  "Controller For" relation.
 class AX_EXPORT AXFragmentRootWin : public ui::AXPlatformNodeDelegateBase {
  public:
   AXFragmentRootWin(gfx::AcceleratedWidget widget,
-                    AXFragmentRootDelegateWin* delegate,
-                    bool is_controller_for_root = false);
+                    AXFragmentRootDelegateWin* delegate);
   ~AXFragmentRootWin() override;
 
   // Fragment roots register themselves in a map upon creation and unregister
@@ -65,8 +55,6 @@
   // If a child node is available, return its delegate.
   AXPlatformNodeDelegate* GetChildNodeDelegate() const;
 
-  bool IsControllerFor() const { return is_controller_for_root_; }
-
  private:
   // AXPlatformNodeDelegate overrides.
   gfx::NativeViewAccessible GetParent() override;
@@ -94,7 +82,6 @@
   AXFragmentRootDelegateWin* const delegate_;
   Microsoft::WRL::ComPtr<ui::AXFragmentRootPlatformNodeWin> platform_node_;
   ui::AXUniqueId unique_id_;
-  bool is_controller_for_root_;
 };
 
 }  // namespace ui
diff --git a/ui/accessibility/platform/ax_platform_node_win.cc b/ui/accessibility/platform/ax_platform_node_win.cc
index 17255c7..4c833ca 100644
--- a/ui/accessibility/platform/ax_platform_node_win.cc
+++ b/ui/accessibility/platform/ax_platform_node_win.cc
@@ -3680,7 +3680,7 @@
       // Otherwise, consult the platform-neutral tree.
       AXFragmentRootWin* fragment_root =
           AXFragmentRootWin::GetFragmentRootParentOf(GetNativeViewAccessible());
-      if (UNLIKELY(fragment_root) && !fragment_root->IsControllerFor()) {
+      if (UNLIKELY(fragment_root)) {
         neighbor = fragment_root->GetNativeViewAccessible();
       } else {
         neighbor = GetParent();
@@ -3728,8 +3728,7 @@
       // source node isn't Rx, return Rx.
       AXFragmentRootWin* fragment_root =
           AXFragmentRootWin::GetFragmentRootParentOf(neighbor);
-      if (UNLIKELY(fragment_root && fragment_root != GetDelegate() &&
-                   !fragment_root->IsControllerFor()))
+      if (UNLIKELY(fragment_root && fragment_root != GetDelegate()))
         neighbor = fragment_root->GetNativeViewAccessible();
     }
     neighbor->QueryInterface(IID_PPV_ARGS(element_provider));
diff --git a/ui/base/x/x11_shm_image_pool_base.cc b/ui/base/x/x11_shm_image_pool_base.cc
index 11d0c06..2f8b8f9 100644
--- a/ui/base/x/x11_shm_image_pool_base.cc
+++ b/ui/base/x/x11_shm_image_pool_base.cc
@@ -165,11 +165,9 @@
   for (std::size_t i = 0; i < frame_states_.size(); ++i) {
     FrameState& state = frame_states_[i];
     state.image->data = state.shminfo_.shmaddr;
-    SkImageInfo image_info = SkImageInfo::Make(
-        state.image->width, state.image->height,
-        state.image->byte_order == LSBFirst ? kBGRA_8888_SkColorType
-                                            : kRGBA_8888_SkColorType,
-        kPremul_SkAlphaType);
+    SkImageInfo image_info =
+        SkImageInfo::Make(state.image->width, state.image->height,
+                          ColorTypeForVisual(visual_), kPremul_SkAlphaType);
     state.bitmap = SkBitmap();
     if (!state.bitmap.installPixels(image_info, state.image->data,
                                     state.image->bytes_per_line)) {
diff --git a/ui/base/x/x11_software_bitmap_presenter.cc b/ui/base/x/x11_software_bitmap_presenter.cc
index 4f8587f..ea5072e 100644
--- a/ui/base/x/x11_software_bitmap_presenter.cc
+++ b/ui/base/x/x11_software_bitmap_presenter.cc
@@ -12,6 +12,7 @@
 #include <memory>
 #include <utility>
 
+#include "base/bind.h"
 #include "base/macros.h"
 #include "third_party/skia/include/core/SkCanvas.h"
 #include "third_party/skia/include/core/SkImageInfo.h"
@@ -125,7 +126,10 @@
     gfx::AcceleratedWidget widget,
     base::TaskRunner* host_task_runner,
     base::TaskRunner* event_task_runner)
-    : widget_(widget), display_(gfx::GetXDisplay()), gc_(nullptr) {
+    : widget_(widget),
+      display_(gfx::GetXDisplay()),
+      gc_(nullptr),
+      host_task_runner_(host_task_runner) {
   DCHECK_NE(widget_, gfx::kNullAcceleratedWidget);
   gc_ = XCreateGC(display_, widget_, 0, nullptr);
   memset(&attributes_, 0, sizeof(attributes_));
@@ -162,7 +166,9 @@
   return shm_pool_ && shm_pool_->Ready();
 }
 
-bool X11SoftwareBitmapPresenter::Resize(const gfx::Size& pixel_size) {
+void X11SoftwareBitmapPresenter::Resize(const gfx::Size& pixel_size) {
+  if (pixel_size == viewport_pixel_size_)
+    return;
   viewport_pixel_size_ = pixel_size;
   // Fallback to the non-shm codepath when |composite_| is true, which only
   // happens for status icon windows that are typically 16x16px.  It's possible
@@ -170,19 +176,24 @@
   // affect windows that are tiny and infrequently updated.
   if (!composite_ && shm_pool_ && shm_pool_->Resize(pixel_size)) {
     needs_swap_ = false;
-    return true;
+    surface_ = nullptr;
+  } else {
+    SkImageInfo info = SkImageInfo::Make(
+        viewport_pixel_size_.width(), viewport_pixel_size_.height(),
+        ColorTypeForVisual(attributes_.visual), kOpaque_SkAlphaType);
+    surface_ = SkSurface::MakeRaster(info);
   }
-  return false;
 }
 
 SkCanvas* X11SoftwareBitmapPresenter::GetSkCanvas() {
   if (ShmPoolReady())
     return shm_pool_->CurrentCanvas();
+  else if (surface_)
+    return surface_->getCanvas();
   return nullptr;
 }
 
-void X11SoftwareBitmapPresenter::EndPaint(sk_sp<SkSurface> sk_surface,
-                                          const gfx::Rect& damage_rect) {
+void X11SoftwareBitmapPresenter::EndPaint(const gfx::Rect& damage_rect) {
   gfx::Rect rect = damage_rect;
   rect.Intersect(gfx::Rect(viewport_pixel_size_));
   if (rect.IsEmpty())
@@ -191,7 +202,6 @@
   SkPixmap skia_pixmap;
 
   if (ShmPoolReady()) {
-    DCHECK(!sk_surface);
     // TODO(thomasanderson): Investigate direct rendering with DRI3 to avoid any
     // unnecessary X11 IPC or buffer copying.
     if (XShmPutImage(display_, widget_, gc_, shm_pool_->CurrentImage(),
@@ -203,8 +213,7 @@
     }
     skia_pixmap = shm_pool_->CurrentBitmap().pixmap();
   } else {
-    DCHECK(sk_surface);
-    sk_surface->peekPixels(&skia_pixmap);
+    surface_->peekPixels(&skia_pixmap);
   }
 
   if (composite_ &&
@@ -214,65 +223,26 @@
     return;
   }
 
-  int bpp = gfx::BitsPerPixelForPixmapDepth(display_, attributes_.depth);
+  XImage image = {};
+  image.width = viewport_pixel_size_.width();
+  image.height = viewport_pixel_size_.height();
+  image.format = ZPixmap;
+  image.byte_order = LSBFirst;
+  image.bitmap_unit = 8;
+  image.bitmap_bit_order = LSBFirst;
+  image.depth = attributes_.depth;
 
-  if (bpp != 32 && bpp != 16 && ui::QueryRenderSupport(display_)) {
-    // gfx::PutARGBImage only supports 16 and 32 bpp, but Xrender can do other
-    // conversions.
-    Pixmap pixmap =
-        XCreatePixmap(display_, widget_, rect.width(), rect.height(), 32);
-    GC gc = XCreateGC(display_, pixmap, 0, nullptr);
-    XImage image;
-    memset(&image, 0, sizeof(image));
+  image.bits_per_pixel = attributes_.visual->bits_per_rgb;
+  image.bits_per_pixel = skia_pixmap.info().bytesPerPixel() * 8;
 
-    image.width = viewport_pixel_size_.width();
-    image.height = viewport_pixel_size_.height();
-    image.depth = 32;
-    image.bits_per_pixel = 32;
-    image.format = ZPixmap;
-    image.byte_order = LSBFirst;
-    image.bitmap_unit = 8;
-    image.bitmap_bit_order = LSBFirst;
-    image.bytes_per_line = skia_pixmap.rowBytes();
-    image.red_mask = 0xff;
-    image.green_mask = 0xff00;
-    image.blue_mask = 0xff0000;
-    image.data =
-        const_cast<char*>(static_cast<const char*>(skia_pixmap.addr()));
+  image.bytes_per_line = skia_pixmap.rowBytes();
+  image.red_mask = attributes_.visual->red_mask;
+  image.green_mask = attributes_.visual->green_mask;
+  image.blue_mask = attributes_.visual->blue_mask;
 
-    XPutImage(display_, pixmap, gc, &image, rect.x(),
-              rect.y() /* source x, y */, 0, 0 /* dest x, y */, rect.width(),
-              rect.height());
-    XFreeGC(display_, gc);
-    Picture picture = XRenderCreatePicture(
-        display_, pixmap, ui::GetRenderARGB32Format(display_), 0, nullptr);
-    XRenderPictFormat* pictformat =
-        XRenderFindVisualFormat(display_, attributes_.visual);
-    Picture dest_picture =
-        XRenderCreatePicture(display_, widget_, pictformat, 0, nullptr);
-    XRenderComposite(display_,
-                     PictOpSrc,       // op
-                     picture,         // src
-                     0,               // mask
-                     dest_picture,    // dest
-                     0,               // src_x
-                     0,               // src_y
-                     0,               // mask_x
-                     0,               // mask_y
-                     rect.x(),        // dest_x
-                     rect.y(),        // dest_y
-                     rect.width(),    // width
-                     rect.height());  // height
-    XRenderFreePicture(display_, picture);
-    XRenderFreePicture(display_, dest_picture);
-    XFreePixmap(display_, pixmap);
-  } else {
-    gfx::PutARGBImage(display_, attributes_.visual, attributes_.depth, widget_,
-                      gc_, static_cast<const uint8_t*>(skia_pixmap.addr()),
-                      viewport_pixel_size_.width(),
-                      viewport_pixel_size_.height(), rect.x(), rect.y(),
-                      rect.x(), rect.y(), rect.width(), rect.height());
-  }
+  image.data = reinterpret_cast<char*>(const_cast<void*>(skia_pixmap.addr()));
+  XPutImage(display_, widget_, gc_, &image, rect.x(), rect.y(), rect.x(),
+            rect.y(), rect.width(), rect.height());
 
   // Ensure the new window content appears immediately. On a TYPE_UI thread we
   // can rely on the message loop to flush for us so XFlush() isn't necessary.
@@ -283,12 +253,17 @@
 
 void X11SoftwareBitmapPresenter::OnSwapBuffers(
     SwapBuffersCallback swap_ack_callback) {
-  DCHECK(ShmPoolReady());
-  if (needs_swap_)
-    shm_pool_->SwapBuffers(std::move(swap_ack_callback));
-  else
-    std::move(swap_ack_callback).Run(viewport_pixel_size_);
-  needs_swap_ = false;
+  if (ShmPoolReady()) {
+    if (needs_swap_)
+      shm_pool_->SwapBuffers(std::move(swap_ack_callback));
+    else
+      std::move(swap_ack_callback).Run(viewport_pixel_size_);
+    needs_swap_ = false;
+  } else {
+    host_task_runner_->PostTask(
+        FROM_HERE,
+        base::BindOnce(std::move(swap_ack_callback), viewport_pixel_size_));
+  }
 }
 
 int X11SoftwareBitmapPresenter::MaxFramesPending() const {
diff --git a/ui/base/x/x11_software_bitmap_presenter.h b/ui/base/x/x11_software_bitmap_presenter.h
index 9ceb49b..9b815f1 100644
--- a/ui/base/x/x11_software_bitmap_presenter.h
+++ b/ui/base/x/x11_software_bitmap_presenter.h
@@ -9,6 +9,7 @@
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
 #include "third_party/skia/include/core/SkRefCnt.h"
+#include "third_party/skia/include/core/SkSurface.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size.h"
 #include "ui/gfx/native_widget_types.h"
@@ -16,7 +17,6 @@
 #include "ui/gfx/x/x11_types.h"
 
 class SkCanvas;
-class SkSurface;
 
 namespace base {
 class TaskRunner;
@@ -37,10 +37,9 @@
 
   ~X11SoftwareBitmapPresenter();
 
-  bool ShmPoolReady() const;
-  bool Resize(const gfx::Size& pixel_size);
+  void Resize(const gfx::Size& pixel_size);
   SkCanvas* GetSkCanvas();
-  void EndPaint(sk_sp<SkSurface> sk_surface, const gfx::Rect& damage_rect);
+  void EndPaint(const gfx::Rect& damage_rect);
   void OnSwapBuffers(SwapBuffersCallback swap_ack_callback);
   int MaxFramesPending() const;
 
@@ -57,6 +56,8 @@
                               GC gc,
                               const void* data);
 
+  bool ShmPoolReady() const;
+
   gfx::AcceleratedWidget widget_;
   XDisplay* display_;
   GC gc_;
@@ -69,6 +70,9 @@
   scoped_refptr<ui::XShmImagePoolBase> shm_pool_;
   bool needs_swap_ = false;
 
+  base::TaskRunner* host_task_runner_;
+  sk_sp<SkSurface> surface_;
+
   gfx::Size viewport_pixel_size_;
 
   DISALLOW_COPY_AND_ASSIGN(X11SoftwareBitmapPresenter);
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index a2cdb14..479ef71 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -1288,6 +1288,31 @@
   return result;
 }
 
+SkColorType ColorTypeForVisual(void* visual) {
+  struct {
+    SkColorType color_type;
+    unsigned long red_mask;
+    unsigned long green_mask;
+    unsigned long blue_mask;
+  } color_infos[] = {
+      {kRGB_565_SkColorType, 0x1f, 0x7e0, 0xf800},
+      {kARGB_4444_SkColorType, 0xf0, 0xf00, 0xf000},
+      {kRGBA_8888_SkColorType, 0xff, 0xff00, 0xff0000},
+      {kBGRA_8888_SkColorType, 0xff0000, 0xff00, 0xff},
+      {kRGBA_1010102_SkColorType, 0x3ff, 0xffc00, 0x3ff00000},
+  };
+  Visual* vis = reinterpret_cast<Visual*>(visual);
+  for (const auto& color_info : color_infos) {
+    if (vis->red_mask == color_info.red_mask &&
+        vis->green_mask == color_info.green_mask &&
+        vis->blue_mask == color_info.blue_mask) {
+      return color_info.color_type;
+    }
+  }
+  LOG(FATAL) << "Unsupported visual: " << XVisualIDFromVisual(vis);
+  return kUnknown_SkColorType;
+}
+
 XRefcountedMemory::XRefcountedMemory(unsigned char* x11_data, size_t length)
     : x11_data_(length ? x11_data : nullptr), length_(length) {
 }
diff --git a/ui/base/x/x11_util.h b/ui/base/x/x11_util.h
index 628a46d9..721a0707 100644
--- a/ui/base/x/x11_util.h
+++ b/ui/base/x/x11_util.h
@@ -324,6 +324,11 @@
 // Return true if the display supports SYNC extension.
 COMPONENT_EXPORT(UI_BASE_X) bool IsSyncExtensionAvailable();
 
+// Returns the preferred Skia colortype for an X11 visual.  LOG(FATAL)'s if
+// there isn't a suitable colortype.
+COMPONENT_EXPORT(UI_BASE_X)
+SkColorType ColorTypeForVisual(void* visual);
+
 // Manages a piece of X11 allocated memory as a RefCountedMemory segment. This
 // object takes ownership over the passed in memory and will free it with the
 // X11 allocator when done.
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
index 4d42cf8a..3816d4d 100644
--- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
+++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -68,7 +68,7 @@
 <translation id="174173592514158117">सर्व Play फोल्डर दाखवा</translation>
 <translation id="174937106936716857">एकूण फाईल संख्या</translation>
 <translation id="1775381402323441512">व्हिडिओ माहिती</translation>
-<translation id="180035236176489073">या फायली अॅक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
+<translation id="180035236176489073">या फायली ॲक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
 <translation id="1807938677607439181">सर्व फायली</translation>
 <translation id="1810764548349082891">कोणतेही पूर्वावलोकन उपलब्ध नाही</translation>
 <translation id="1815861158988915678"><ph name="BEGIN_BOLD" />ताकीद:<ph name="END_BOLD" />  या फायली तात्पुरत्या आहेत आणि डिस्क स्थान मुक्त करण्‍यासाठी कदाचित स्वयंचलितपणे हटविल्या जातील.  <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
@@ -262,7 +262,7 @@
 <translation id="4193154014135846272">Google दस्तऐवज</translation>
 <translation id="4195249722193633765">Linux (बीटा) सह ॲप इंस्टॉल करा</translation>
 <translation id="4197674956721858839">झिप निवड</translation>
-<translation id="421017592316736757">या फाइल अॅक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
+<translation id="421017592316736757">या फाइल ॲक्सेस करण्‍यासाठी तुम्ही ऑनलाइन असणे आवश्यक आहे.</translation>
 <translation id="4212740939091998969">"<ph name="FOLDER_NAME" />" नावाचे फोल्डर आधीच अस्तित्वात आहे. कृपया वेगळे नाव निवडा.</translation>
 <translation id="4215448920900139318"><ph name="FILE_COUNT" /> चा बॅकअप घेत आहे</translation>
 <translation id="426015154560005552">अरेबिक कीबोर्ड</translation>
@@ -291,13 +291,13 @@
 <translation id="4594543368593301662"><ph name="SEARCH_TERM" /> साठी परिणाम दाखवत आहे.</translation>
 <translation id="4631887759990505102">कलाकार</translation>
 <translation id="4656293982926141856">हा कॉंप्युटर</translation>
-<translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' च्या सदस्यांशी हे आयटम शेअर केले जात नाही तोवर त्यांना अॅक्सेस असणार नाही.</translation>
+<translation id="4669606053856530811">'<ph name="SOURCE_NAME" />' च्या सदस्यांशी हे आयटम शेअर केले जात नाही तोवर त्यांना ॲक्सेस असणार नाही.</translation>
 <translation id="4690246192099372265">स्वीडिश</translation>
 <translation id="4693155481716051732">सुशी</translation>
 <translation id="4694604912444486114">माकड</translation>
 <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> नुसार चढत्या क्रमाने क्रमवारी लावलेली फाइल सूची.</translation>
 <translation id="4711094779914110278">तुर्की</translation>
-<translation id="4713544552769165154">ही फाइल Macintosh सॉफ्टवेअर वापरून एका कॉंप्युटरसाठी डिझाइन केली आहे. ही Chrome OS चालवणार्‍या तुमच्या डिव्हाइसशी सुसंगत नाही. कृपया एका सोयीस्कर रिप्लेसमेंट अॅप साठी <ph name="BEGIN_LINK" />Chrome वेब स्टोअर<ph name="END_LINK" /> शोधा.<ph name="BEGIN_LINK_HELP" />अधिक जाणून घ्या<ph name="END_LINK_HELP" /></translation>
+<translation id="4713544552769165154">ही फाइल Macintosh सॉफ्टवेअर वापरून एका कॉंप्युटरसाठी डिझाइन केली आहे. ही Chrome OS चालवणार्‍या तुमच्या डिव्हाइसशी सुसंगत नाही. कृपया एका सोयीस्कर रिप्लेसमेंट ॲप साठी <ph name="BEGIN_LINK" />Chrome वेब स्टोअर<ph name="END_LINK" /> शोधा.<ph name="BEGIN_LINK_HELP" />अधिक जाणून घ्या<ph name="END_LINK_HELP" /></translation>
 <translation id="4724850507808590449"><ph name="FILE_COUNT" /> फोटोंचा बॅकअप घेतला</translation>
 <translation id="4725511304875193254">कॉर्गी</translation>
 <translation id="4732760563705710320">क्षमस्‍व, आपल्‍या कास्‍ट डिव्‍हाइसद्वारे हा व्‍हिडिओ समर्थित नाही.</translation>
@@ -363,7 +363,7 @@
 <translation id="5241298539944515331">व्हिएतनामी कीबोर्ड (VIQR)</translation>
 <translation id="5253070652067921974">ने तयार केली</translation>
 <translation id="5257456363153333584">ड्रॅगनफ्लाय</translation>
-<translation id="5262311848634918433"><ph name="MARKUP_1" />फायली कुठूनही अॅक्सेस करा, अगदी ऑफलाइन सुद्धा.<ph name="MARKUP_2" />
+<translation id="5262311848634918433"><ph name="MARKUP_1" />फायली कुठूनही ॲक्सेस करा, अगदी ऑफलाइन सुद्धा.<ph name="MARKUP_2" />
 Google ड्राइव्ह मधील फायली अपडेट केलेल्या आहेत आणि कोणत्याही डिव्हाइसवरून उपलब्ध होतात.<ph name="MARKUP_3" />
 <ph name="MARKUP_4" />तुमच्या फायली सुरक्षित ठेवा.<ph name="MARKUP_5" />
 तुमच्या डिव्हाइसला काहीही झाले तरीही, तुमच्या फायली Google ड्राइव्ह मध्ये सुरक्षितपणे स्टोअर केल्या आहेत.<ph name="MARKUP_6" />
@@ -462,7 +462,7 @@
 <translation id="6305012486838822927">लाओ कीबोर्ड</translation>
 <translation id="6339034549827494595">रशियन ध्वन्यात्मक (AATSEEL) कीबोर्ड</translation>
 <translation id="6339145975392024142">युएस इंटरनॅशनल (PC)</translation>
-<translation id="6346310558342052870">अॅक्सेस प्रतिबंधित केला</translation>
+<translation id="6346310558342052870">ॲक्सेस प्रतिबंधित केला</translation>
 <translation id="6353618411602605519">क्रोएशियन कीबोर्ड</translation>
 <translation id="6356685157277930264">फाइल फीडबॅक विंडो</translation>
 <translation id="6358884629796491903">ड्रॅगन</translation>
@@ -576,7 +576,7 @@
 <translation id="7765158879357617694">हलवा</translation>
 <translation id="7774365994322694683">पक्षी</translation>
 <translation id="7788080748068240085">"<ph name="FILE_NAME" />" ऑफलाइन सेव्ह करण्यासाठी तुम्ही अतिरिक्त <ph name="TOTAL_FILE_SIZE" /> जागा मोकळी करणे आवश्‍यक आहे:<ph name="MARKUP_1" /> 
-        <ph name="MARKUP_2" />तुम्हाला ऑफलाइन अॅक्सेस करण्‍याची यापुढे आवश्यकता नसलेल्या फायली अनपिन करा<ph name="MARKUP_3" />
+        <ph name="MARKUP_2" />तुम्हाला ऑफलाइन ॲक्सेस करण्‍याची यापुढे आवश्यकता नसलेल्या फायली अनपिन करा<ph name="MARKUP_3" />
         <ph name="MARKUP_4" />तुमच्या डाउनलोड फोल्डरमधून फायली हटवा<ph name="MARKUP_5" /></translation>
 <translation id="7794058097940213561">डिव्हाइस स्वरूपित करा</translation>
 <translation id="7799329977874311193">HTML दस्तऐवज</translation>
@@ -672,11 +672,11 @@
 <translation id="8722421161699219904">यूएस आंतरराष्ट्रीय कीबोर्ड</translation>
 <translation id="872537912056138402">क्रोएशियन</translation>
 <translation id="874420130893181774">पारंपारिक पिनयिन इनपुट पद्धत</translation>
-<translation id="8775404590947523323">तुमची संपादने अॉटोमॅटिकली सेव्ह केली जातात.<ph name="BREAKS" /> मूळ प्रतिमेची प्रत ठेवण्यासाठी मूळवर खाडाखोड करा अनचेक करा</translation>
+<translation id="8775404590947523323">तुमची संपादने ऑटोमॅटिकली सेव्ह केली जातात.<ph name="BREAKS" /> मूळ प्रतिमेची प्रत ठेवण्यासाठी मूळवर खाडाखोड करा अनचेक करा</translation>
 <translation id="8803496343472038847">रशियन Phonetic कीबोर्ड</translation>
 <translation id="8808686172382650546">मांजर</translation>
 <translation id="8810671769985673465">झिप करता आले नाही, आयटम अस्तित्वात आहे: "<ph name="FILE_NAME" />"</translation>
-<translation id="8834164572807951958">या आयटमच्या कॉपीवर '<ph name="DESTINATION_NAME" />' चे सदस्य अॅक्सेस मिळवतील.</translation>
+<translation id="8834164572807951958">या आयटमच्या कॉपीवर '<ph name="DESTINATION_NAME" />' चे सदस्य ॲक्सेस मिळवतील.</translation>
 <translation id="885381502874625531">बेलारुशियन कीबोर्ड</translation>
 <translation id="8860454412039442620">Excel स्प्रेडशीट</translation>
 <translation id="8900820606136623064">हंगेरियन</translation>
@@ -694,7 +694,7 @@
 <translation id="9110990317705400362">आम्ही तुमचे ब्राउझिंग सुरक्षित करण्यासाठी सातत्याने मार्ग शोधत आहोत. मागे, तुमच्या ब्राउझरमध्ये एक्स्टेंशन जोडण्यासाठी कोणतीही वेबसाइट तुम्हाला सूचित करू शकत होती. Google Chrome च्या नवीनतम आवृत्तीमध्ये, एक्स्टेंशन पेजद्वारे ते जोडून हे एक्स्टेंशन तुम्ही इंस्टॉल करू इच्छित आहात हे तुम्ही Chrome ला स्पष्टपणे सांगणे आवश्यक आहे. <ph name="BEGIN_LINK" />अधिक जाणून घ्या<ph name="END_LINK" /></translation>
 <translation id="912419004897138677">कोडेक</translation>
 <translation id="9129931661813833980">फोल्डर पिन करा</translation>
-<translation id="9130775360844693113">'<ph name="DESTINATION_NAME" />' चे सदस्य या आयटमचा अॅक्सेस मिळवतील.</translation>
+<translation id="9130775360844693113">'<ph name="DESTINATION_NAME" />' चे सदस्य या आयटमचा ॲक्सेस मिळवतील.</translation>
 <translation id="9131598836763251128">एक किंवा अधिक फायली निवडा</translation>
 <translation id="9133055936679483811">झिप करणे अयशस्वी. <ph name="ERROR_MESSAGE" /></translation>
 <translation id="9134524245363717059">ही फाइल Macintosh सॉफ्टवेअर वापरणार्‍या कॉंप्युटरचा डीझाइन केली आहे. ही Chrome OS चालवणार्‍या तुमच्या डिव्हाइसशी सुसंगत नाही. कृपया एका योग्य रिप्लेसमेंट अ‍ॅपसाठी Chrome वेब स्टोअर शोधा.</translation>
diff --git a/ui/display/manager/managed_display_info.h b/ui/display/manager/managed_display_info.h
index ad35064a..730edfc 100644
--- a/ui/display/manager/managed_display_info.h
+++ b/ui/display/manager/managed_display_info.h
@@ -334,6 +334,7 @@
   // The size of the display in use. The size can be different from the size
   // of |bounds_in_native_| if the display has overscan insets and/or rotation.
   gfx::Size size_in_pixel_;
+  // TODO(oshima): Change this to store pixel.
   gfx::Insets overscan_insets_in_dip_;
 
   // The zoom level currently applied to the display. This value is appended
diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
index faae281d..0339ff3f 100644
--- a/ui/gfx/render_text_harfbuzz.cc
+++ b/ui/gfx/render_text_harfbuzz.cc
@@ -87,16 +87,10 @@
   UMA_HISTOGRAM_ENUMERATION("RenderTextHarfBuzz.ShapeRunsFallback", fallback);
 }
 
-// Returns whether the codepoint has the 'extended pictographic' property.
-bool IsExtendedPictographicCodepoint(UChar32 codepoint) {
-  return u_hasBinaryProperty(codepoint, UCHAR_EXTENDED_PICTOGRAPHIC);
-}
-
-// Returns whether the codepoint has emoji properties.
-bool IsEmojiRelatedCodepoint(UChar32 codepoint) {
-  return u_hasBinaryProperty(codepoint, UCHAR_EMOJI) ||
-         u_hasBinaryProperty(codepoint, UCHAR_EMOJI_PRESENTATION) ||
-         u_hasBinaryProperty(codepoint, UCHAR_REGIONAL_INDICATOR);
+// Returns true if characters of |block_code| may trigger font fallback.
+bool IsUnusualBlockCode(UBlockCode block_code) {
+  return block_code == UBLOCK_GEOMETRIC_SHAPES ||
+         block_code == UBLOCK_MISCELLANEOUS_SYMBOLS;
 }
 
 // Returns true if |codepoint| is a bracket. This is used to avoid "matching"
@@ -121,8 +115,7 @@
 }
 
 // Intersects the script extensions set of |codepoint| with |result| and writes
-// to |result|, reading and updating |result_size|. The output |result| will be
-// a subset of the input |result| (thus |result_size| can only be smaller).
+// to |result|, reading and updating |result_size|.
 void ScriptSetIntersect(UChar32 codepoint,
                         UScriptCode* result,
                         size_t* result_size) {
@@ -176,111 +169,62 @@
   *result_size = out_size;
 }
 
-struct GraphemeProperties {
-  bool has_control = false;
-  bool has_bracket = false;
-  bool has_pictographic = false;
-  bool has_emoji = false;
-  UBlockCode block = UBLOCK_NO_BLOCK;
-};
+// Returns true if |first_char| and |current_char| both have "COMMON" script
+// property but only one of them is an ASCII character. By doing this ASCII
+// characters will be put into a separate run and be rendered using its default
+// font. See crbug.com/530021 and crbug.com/533721 for more details.
+bool AsciiBreak(UChar32 first_char, UChar32 current_char) {
+  if (isascii(first_char) == isascii(current_char))
+    return false;
 
-// Returns the properties for the codepoints part of the given text.
-GraphemeProperties RetrieveGraphemeProperties(const base::StringPiece16& text,
-                                              bool retrieve_block) {
-  GraphemeProperties properties;
-  bool first_char = true;
-  base::i18n::UTF16CharIterator iter(text.data(), text.length());
-  while (!iter.end()) {
-    const UChar32 codepoint = iter.get();
-
-    if (first_char) {
-      first_char = false;
-      if (retrieve_block)
-        properties.block = ublock_getCode(codepoint);
-    }
-
-    if (codepoint == '\n' || codepoint == ' ')
-      properties.has_control = true;
-    if (IsBracket(codepoint))
-      properties.has_bracket = true;
-    if (IsExtendedPictographicCodepoint(codepoint))
-      properties.has_pictographic = true;
-    if (IsEmojiRelatedCodepoint(codepoint))
-      properties.has_emoji = true;
-
-    iter.Advance();
-  }
-
-  return properties;
+  size_t scripts_size = 1;
+  UScriptCode scripts[kMaxScripts] = { USCRIPT_COMMON };
+  ScriptSetIntersect(first_char, scripts, &scripts_size);
+  if (scripts_size == 0)
+    return false;
+  ScriptSetIntersect(current_char, scripts, &scripts_size);
+  return scripts_size != 0;
 }
 
-// Return whether the grapheme properties are compatible and the grapheme can
-// be merge together in the same grapheme cluster.
-bool AreGraphemePropertiesCompatible(const GraphemeProperties& first,
-                                     const GraphemeProperties& second) {
-  // There are 5 constrains to grapheme to be compatible.
-  // 1) The newline character and control characters should form a single run so
-  //  that the line breaker can handle them easily.
-  // 2) Parentheses should be put in a separate run to avoid using different
-  // fonts while rendering matching parentheses (see http://crbug.com/396776).
-  // 3) Pictographic graphemes should be put in separate run to avoid altering
-  // fonts selection while rendering adjacent text (see
-  // http://crbug.com/278913).
-  // 4) Emoji graphemes should be put in separate run (see
-  // http://crbug.com/530021 and http://crbug.com/533721).
-  // 5) The 'COMMON' script needs to be split by unicode block. Codepoints are
-  // spread across blocks and supported with different fonts.
-  return !first.has_control && !second.has_control &&
-         first.has_bracket == second.has_bracket &&
-         first.has_pictographic == second.has_pictographic &&
-         first.has_emoji == second.has_emoji && first.block == second.block;
+// When a string of "unusual" characters ends, the run usually breaks. However,
+// variation selectors should still attach to the run of unusual characters.
+// Detect this situation so that FindRunBreakingCharacter() can continue
+// tracking the unusual block. Otherwise, just returns |current|.
+UBlockCode MaybeCombineUnusualBlock(UBlockCode preceding, UBlockCode current) {
+  return IsUnusualBlockCode(preceding) && current == UBLOCK_VARIATION_SELECTORS
+             ? preceding
+             : current;
 }
 
-// Returns the end of the current grapheme cluster. This function is finding the
-// breaking point where grapheme properties are no longer compatible.
-// (see: UNICODE TEXT SEGMENTATION (http://unicode.org/reports/tr29/)
+// Returns the boundary between a special and a regular character. Special
+// characters are brackets or characters that satisfy |IsUnusualBlockCode|.
 size_t FindRunBreakingCharacter(const base::string16& text,
-                                UScriptCode script,
                                 size_t run_start,
                                 size_t run_break) {
-  const size_t run_length = run_break - run_start;
-  const base::StringPiece16 run_text(text.c_str() + run_start, run_length);
-  const bool is_common_script = (script == USCRIPT_COMMON);
-
-  DCHECK(!run_text.empty());
-
-  // Create an iterator to split the text in graphemes.
-  base::i18n::BreakIterator grapheme_iterator(
-      run_text, base::i18n::BreakIterator::BREAK_CHARACTER);
-  if (!grapheme_iterator.Init() || !grapheme_iterator.Advance()) {
-    // In case of error, isolate the first character in a separate run.
-    NOTREACHED();
+  const int32_t run_length = static_cast<int32_t>(run_break - run_start);
+  base::i18n::UTF16CharIterator iter(text.c_str() + run_start, run_length);
+  const UChar32 first_char = iter.get();
+  // The newline character should form a single run so that the line breaker
+  // can handle them easily.
+  if (first_char == '\n')
     return run_start + 1;
-  }
 
-  // Retrieve the first grapheme and its codepoint properties.
-  const base::StringPiece16 first_grapheme_text =
-      grapheme_iterator.GetStringPiece();
-  const GraphemeProperties first_grapheme_properties =
-      RetrieveGraphemeProperties(first_grapheme_text, is_common_script);
+  const UBlockCode first_block = ublock_getCode(first_char);
+  const bool first_block_unusual = IsUnusualBlockCode(first_block);
+  const bool first_bracket = IsBracket(first_char);
 
-  // Append subsequent graphemes in this grapheme cluster if they are
-  // compatible, otherwise break the current run.
-  while (grapheme_iterator.Advance()) {
-    const base::StringPiece16 current_grapheme_text =
-        grapheme_iterator.GetStringPiece();
-    const GraphemeProperties current_grapheme_properties =
-        RetrieveGraphemeProperties(current_grapheme_text, is_common_script);
-
-    if (!AreGraphemePropertiesCompatible(first_grapheme_properties,
-                                         current_grapheme_properties)) {
-      const size_t current_breaking_position =
-          run_start + grapheme_iterator.prev();
-      return current_breaking_position;
+  while (iter.Advance() && iter.array_pos() < run_length) {
+    const UChar32 current_char = iter.get();
+    const UBlockCode current_block =
+        MaybeCombineUnusualBlock(first_block, ublock_getCode(current_char));
+    const bool block_break = current_block != first_block &&
+        (first_block_unusual || IsUnusualBlockCode(current_block));
+    if (block_break || current_char == '\n' ||
+        first_bracket != IsBracket(current_char) ||
+        AsciiBreak(first_char, current_char)) {
+      return run_start + iter.array_pos();
     }
   }
-
-  // Do not break this run, returns end of the text.
   return run_break;
 }
 
@@ -1965,7 +1909,7 @@
     CommonizedRunsMap* out_commonized_run_map) {
   TRACE_EVENT1("ui", "RenderTextHarfBuzz::ItemizeTextToRuns", "text_length",
                text.length());
-  DCHECK(!text.empty());
+  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
@@ -2026,10 +1970,10 @@
            breaking_run_start < script_run_end;) {
         // Break runs at certain characters that need to be rendered separately
         // to prevent either an unusual character from forcing a fallback font
-        // on the entire run. After script intersection, many codepoints end up
-        // in the script COMMON but can't be rendered together.
-        size_t breaking_char_end = FindRunBreakingCharacter(
-            text, script, breaking_run_start, script_run_end);
+        // on the entire run, or brackets from being affected by a fallback
+        // font. http://crbug.com/278913, http://crbug.com/396776
+        size_t breaking_char_end =
+            FindRunBreakingCharacter(text, breaking_run_start, script_run_end);
 
         // Break runs at style boundaries.
         style.UpdatePosition(DisplayIndexToTextIndex(breaking_run_start));
diff --git a/ui/gfx/render_text_unittest.cc b/ui/gfx/render_text_unittest.cc
index 5198cbb..247cef3 100644
--- a/ui/gfx/render_text_unittest.cc
+++ b/ui/gfx/render_text_unittest.cc
@@ -935,16 +935,16 @@
     {"simpleRTL", L"ښڛڜ", "[2<-0]"},
     {"asc_arb", L"abcښڛڜdef", "[0->2][5<-3][6->8]"},
     {"asc_dev_asc", L"abcऔकखdefڜ", "[0->2][3->5][6->8][9]"},
-    {"phone", L"1-(800)-xxx-xxxx", "[0][1][2][3->5][6][7][8->10][11][12->15]"},
+    {"phone", L"1-(800)-xxx-xxxx", "[0->1][2][3->5][6][7][8->10][11][12->15]"},
     {"dev_ZWS", L"क\u200Bख", "[0][1][2]"},
-    {"numeric", L"1 2 3 4", "[0][1][2][3][4][5][6]"},
-    {"joiners", L"1\u200C2\u200C3\u200C4", "[0->6]"},
+    {"numeric", L"1 2 3 4", "[0->6]"},
+    {"joiners", L"1\u200C2\u200C3\u200C4", "[0][1][2][3][4][5][6]"},
     {"combining_accents1", L"a\u0300e\u0301", "[0->3]"},
     {"combining_accents2", L"\u0065\u0308\u0435\u0308", "[0->1][2->3]"},
     {"picto_title", L"☞☛test☚☜", "[0->1][2->5][6->7]"},
     {"picto_LTR", L"☺☺☺!", "[0->2][3]"},
     {"picto_RTL", L"☺☺☺ښ", "[3][2<-0]"},
-    {"paren_picto", L"(☾☹☽)", "[0][1][2][3][4]"},
+    {"paren_picto", L"(☾☹☽)", "[0][1->3][4]"},
     {"emoji_asc", L"\U0001F6281234",
      "[0->1][2->5]"},  // http://crbug.com/530021
     {"emoji_title", L"▶Feel goods",
@@ -989,12 +989,11 @@
     {"neutral_RLM_post", L"\u2026\u2026\u200F", "[2<-0]"},
     {"brackets_ltr", L"aa(ڭڭ)\u2026\u2026", "[0->1][2][4<-3][5][6->7]"},
     {"brackets_rtl", L"ڭڭ(aa)\u2026\u2026", "[7<-6][5][3->4][2][1<-0]"},
-    {"mixed_with_punct", L"aa \"ڭڭ!\", aa",
-     "[0->1][2][3][5<-4][6->8][9][10->11]"},
+    {"mixed_with_punct", L"aa \"ڭڭ!\", aa", "[0->1][2->3][5<-4][6->9][10->11]"},
     {"mixed_with_punct_RLI", L"aa \"\u2067ڭڭ!\u2069\", aa",
-     "[0->1][2][3][4][7][6<-5][8][9->10][11][12->13]"},
+     "[0->1][2->3][4][7][6<-5][8][9->11][12->13]"},
     {"mixed_with_punct_RLM", L"aa \"ڭڭ!\u200F\", aa",
-     "[0->1][2][3][7][6][5<-4][8->9][10][11->12]"},
+     "[0->1][2->3][7][6][5<-4][8->10][11->12]"},
 };
 
 INSTANTIATE_TEST_SUITE_P(ItemizeTextToRunsBidi,
@@ -1073,7 +1072,7 @@
     {"blocks_lat_smallcap", L"ꟺM", "[0->1]"},
     {"blocks_lat_small_letter", L"ᶓᶍᶓᴔᴟ", "[0->4]"},
     {"blocks_lat_acc", L"eéěĕȩɇḕẻếⱻꞫ", "[0->10]"},
-    {"blocks_com", L"⟦ℳ¥¾⟾⁸⟧Ⓔ", "[0][1][2->3][4][5][6][7]"},
+    {"blocks_com", L"⟦ℳ¥¾⟾⁸⟧Ⓔ", "[0][1->5][6][7]"},
 
     // Latin script.
     {"latin_numbers", L"a1b2c3", "[0][1][2][3][4][5]"},
@@ -1084,9 +1083,9 @@
     // Common script.
     {"common_tm", L"•bug™", "[0][1->3][4]"},
     {"common_copyright", L"chromium©", "[0->7][8]"},
-    {"common_math1", L"ℳ: ¬ƒ(x)=½×¾", "[0][1][2][3][4][5][6][7][8][9->11]"},
-    {"common_math2", L"𝟏×𝟑", "[0->1][2][3->4]"},
-    {"common_numbers", L"🄀𝟭𝟐⒓¹²", "[0->1][2->5][6][7->8]"},
+    {"common_math1", L"ℳ: ¬ƒ(x)=½×¾", "[0][1->2][3][4][5][6][7][8][9->11]"},
+    {"common_math2", L"𝟏×𝟑", "[0->4]"},
+    {"common_numbers", L"🄀𝟭𝟐⒓¹²", "[0->8]"},
     {"common_puncts", L",.\u0083!", "[0->1][2][3]"},
 
     // Arabic script.
@@ -1125,7 +1124,7 @@
     {"telugu_lat", L"aaఉయ!", "[0->1][2->3][4]"},
     {"telugu_numbers", L"123౦౧౨456౩౪౫", "[0->2][3->5][6->8][9->11]"},
     {"telugu_puncts", L"కురుచ, చిఱుత, చేరువ, చెఱువు!",
-     "[0->4][5][6][7->11][12][13][14->18][19][20][21->26][27]"},
+     "[0->4][5->6][7->11][12->13][14->18][19->20][21->26][27]"},
 
     // Control Pictures.
     {"control_pictures", L"␑␒␓␔␕␖␗␘␙␚␛", "[0->10]"},
@@ -1137,109 +1136,6 @@
                          ::testing::ValuesIn(kScriptsRunListCases),
                          RenderTextTestWithRunListCase::ParamInfoToString);
 
-// Test cases to ensure ItemizeTextToRuns is splitting emoji correctly.
-// see: http://www.unicode.org/reports/tr51
-// see: http://www.unicode.org/emoji/charts/full-emoji-list.html
-const RunListCase kEmojiRunListCases[] = {
-    // Samples from
-    // https://www.unicode.org/Public/emoji/12.0/emoji-data.txt
-    {"number_sign", L"\u0023", "[0]"},
-    {"keyboard", L"\u2328", "[0]"},
-    {"aries", L"\u2648", "[0]"},
-    {"candle", L"\U0001F56F", "[0->1]"},
-    {"anchor", L"\u2693", "[0]"},
-    {"grinning_face", L"\U0001F600", "[0->1]"},
-    {"face_with_monocle", L"\U0001F9D0", "[0->1]"},
-    {"light_skin_tone", L"\U0001F3FB", "[0->1]"},
-    {"index_pointing_up", L"\u261D", "[0]"},
-    {"horse_racing", L"\U0001F3C7", "[0->1]"},
-    {"kiss", L"\U0001F48F", "[0->1]"},
-    {"couple_with_heart", L"\U0001F491", "[0->1]"},
-    {"people_wrestling", L"\U0001F93C", "[0->1]"},
-    {"eject_button", L"\u23CF", "[0]"},
-
-    // Samples from
-    // https://unicode.org/Public/emoji/12.0/emoji-sequences.txt
-    {"watch", L"\u231A", "[0]"},
-    {"cross_mark", L"\u274C", "[0]"},
-    {"copyright", L"\u00A9\uFE0F", "[0->1]"},
-    {"stop_button", L"\u23F9\uFE0F", "[0->1]"},
-    {"passenger_ship", L"\U0001F6F3\uFE0F", "[0->2]"},
-    {"keycap_star", L"\u002A\uFE0F\u20E3", "[0->2]"},
-    {"keycap_6", L"\u0036\uFE0F\u20E3", "[0->2]"},
-    {"flag_andorra", L"\U0001F1E6\U0001F1E9", "[0->3]"},
-    {"flag_egypt", L"\U0001F1EA\U0001F1EC", "[0->3]"},
-    {"flag_england",
-     L"\U0001F3F4\U000E0067\U000E0062\U000E0065\U000E006E\U000E0067\U000E007F",
-     "[0->13]"},
-    {"index_up_light", L"\u261D\U0001F3FB", "[0->2]"},
-    {"person_bouncing_ball_light", L"\u26F9\U0001F3FC", "[0->2]"},
-    {"victory_hand_med_light", L"\u270C\U0001F3FC", "[0->2]"},
-    {"horse_racing_med_dark", L"\U0001F3C7\U0001F3FE", "[0->3]"},
-    {"woman_man_hands_light", L"\U0001F46B\U0001F3FB", "[0->3]"},
-    {"person_haircut_med_light", L"\U0001F487\U0001F3FC", "[0->3]"},
-    {"pinching_hand_light", L"\U0001F90F\U0001F3FB", "[0->3]"},
-    {"love_you_light", L"\U0001F91F\U0001F3FB", "[0->3]"},
-    {"leg_dark", L"\U0001F9B5\U0001F3FF", "[0->3]"},
-
-    // Samples from
-    // https://unicode.org/Public/emoji/12.0/emoji-variation-sequences.txt
-    {"number_sign_text", L"\u0023\uFE0E", "[0->1]"},
-    {"number_sign_emoji", L"\u0023\uFE0F", "[0->1]"},
-    {"digit_eight_text", L"\u0038\uFE0E", "[0->1]"},
-    {"digit_eight_emoji", L"\u0038\uFE0F", "[0->1]"},
-    {"up_down_arrow_text", L"\u2195\uFE0E", "[0->1]"},
-    {"up_down_arrow_emoji", L"\u2195\uFE0F", "[0->1]"},
-    {"stopwatch_text", L"\u23F1\uFE0E", "[0->1]"},
-    {"stopwatch_emoji", L"\u23F1\uFE0F", "[0->1]"},
-    {"thermometer_text", L"\U0001F321\uFE0E", "[0->2]"},
-    {"thermometer_emoji", L"\U0001F321\uFE0F", "[0->2]"},
-    {"thumbs_up_text", L"\U0001F44D\uFE0E", "[0->2]"},
-    {"thumbs_up_emoji", L"\U0001F44D\uFE0F", "[0->2]"},
-    {"hole_text", L"\U0001F573\uFE0E", "[0->2]"},
-    {"hole_emoji", L"\U0001F573\uFE0F", "[0->2]"},
-
-    // Samples from
-    // https://unicode.org/Public/emoji/12.0/emoji-zwj-sequences.txt
-    {"couple_man_man", L"\U0001F468\u200D\u2764\uFE0F\u200D\U0001F468",
-     "[0->7]"},
-    {"kiss_man_man",
-     L"\U0001F468\u200D\u2764\uFE0F\u200D\U0001F48B\u200D\U0001F468",
-     "[0->10]"},
-    {"family_man_woman_girl_boy",
-     L"\U0001F468\u200D\U0001F469\u200D\U0001F467\u200D\U0001F466", "[0->10]"},
-    {"men_hands_dark_medium",
-     L"\U0001F468\U0001F3FF\u200D\U0001F91D\u200D\U0001F468\U0001F3FD",
-     "[0->11]"},
-    {"people_hands_dark",
-     L"\U0001F9D1\U0001F3FF\u200D\U0001F91D\u200D\U0001F9D1\U0001F3FF",
-     "[0->11]"},
-    {"man_pilot", L"\U0001F468\u200D\u2708\uFE0F", "[0->4]"},
-    {"man_scientist", L"\U0001F468\u200D\U0001F52C", "[0->4]"},
-    {"man_mechanic_light", L"\U0001F468\U0001F3FB\u200D\U0001F527", "[0->6]"},
-    {"man_judge_medium", L"\U0001F468\U0001F3FD\u200D\u2696\uFE0F", "[0->6]"},
-    {"woman_cane_dark", L"\U0001F469\U0001F3FF\u200D\U0001F9AF", "[0->6]"},
-    {"woman_ball_light", L"\u26F9\U0001F3FB\u200D\u2640\uFE0F", "[0->5]"},
-    {"woman_running", L"\U0001F3C3\u200D\u2640\uFE0F", "[0->4]"},
-    {"woman_running_dark", L"\U0001F3C3\U0001F3FF\u200D\u2640\uFE0F", "[0->6]"},
-    {"woman_turban", L"\U0001F473\u200D\u2640\uFE0F", "[0->4]"},
-    {"woman_detective", L"\U0001F575\uFE0F\u200D\u2640\uFE0F", "[0->5]"},
-    {"man_facepalming", L"\U0001F926\u200D\u2642\uFE0F", "[0->4]"},
-    {"man_red_hair", L"\U0001F468\u200D\U0001F9B0", "[0->4]"},
-    {"man_medium_curly", L"\U0001F468\U0001F3FD\u200D\U0001F9B1", "[0->6]"},
-    {"woman_dark_white_hair", L"\U0001F469\U0001F3FF\u200D\U0001F9B3",
-     "[0->6]"},
-    {"rainbow_flag", L"\U0001F3F3\uFE0F\u200D\U0001F308", "[0->5]"},
-    {"pirate_flag", L"\U0001F3F4\u200D\u2620\uFE0F", "[0->4]"},
-    {"service_dog", L"\U0001F415\u200D\U0001F9BA", "[0->4]"},
-    {"eye_bubble", L"\U0001F441\uFE0F\u200D\U0001F5E8\uFE0F", "[0->6]"},
-};
-
-INSTANTIATE_TEST_SUITE_P(ItemizeTextToRunsEmoji,
-                         RenderTextTestWithRunListCase,
-                         ::testing::ValuesIn(kEmojiRunListCases),
-                         RenderTextTestWithRunListCase::ParamInfoToString);
-
 TEST_F(RenderTextTest, ElidedText) {
   // TODO(skanuj) : Add more test cases for following
   // - RenderText styles.
@@ -4062,7 +3958,7 @@
 
   EXPECT_EQ(ToString16Vec({"סיבית", " ", "–", " ", "ויקיפדיה"}),
             RunsFor(ascii_space_he));
-  EXPECT_EQ(ToString16Vec({"Bit", " ", "-", " ", "Wikipedia"}),
+  EXPECT_EQ(ToString16Vec({"Bit", " - ", "Wikipedia"}),
             RunsFor(ascii_space_en));
   EXPECT_EQ(ToString16Vec({"ども", " ", "ありがと"}),
             RunsFor(full_width_space));
@@ -5070,30 +4966,13 @@
 TEST_F(RenderTextTest, HarfBuzz_BreakRunsByAscii) {
   RenderTextHarfBuzz* render_text = GetRenderText();
 
-  // ▶ (U+25B6, Geometric Shapes) and an ascii character should have
-  // different runs.
-  render_text->SetText(WideToUTF16(L"▶z"));
-  EXPECT_EQ(ToString16Vec({"▶", "z"}), GetRunListStrings());
-  EXPECT_EQ("[0][1]", GetRunListStructureString());
-
-  // ★ (U+2605, Miscellaneous Symbols) and an ascii character should have
-  // different runs.
-  render_text->SetText(WideToUTF16(L"★1"));
-  EXPECT_EQ(ToString16Vec({"★", "1"}), GetRunListStrings());
-  EXPECT_EQ("[0][1]", GetRunListStructureString());
-
-  // 🐱 (U+1F431, a cat face, Miscellaneous Symbols and Pictographs) and an
-  // ASCII period should have separate runs.
-  render_text->SetText(WideToUTF16(L"🐱."));
+  // 🐱 (U+1F431, a cat face) and an ASCII period should have separate runs.
+  // Windows requires wide strings for \Unnnnnnnn universal character names.
+  render_text->SetText(WideToUTF16(L"\U0001F431."));
+  test_api()->EnsureLayout();
   EXPECT_EQ(ToString16Vec({"🐱", "."}), GetRunListStrings());
   // U+1F431 is represented as a surrogate pair in UTF-16.
   EXPECT_EQ("[0->1][2]", GetRunListStructureString());
-
-  // 🥴 (U+1f974, Supplemental Symbols and Pictographs) and an ascii character
-  // should have different runs.
-  render_text->SetText(WideToUTF16(L"🥴$"));
-  EXPECT_EQ(ToString16Vec({"🥴", "$"}), GetRunListStrings());
-  EXPECT_EQ("[0->1][2]", GetRunListStructureString());
 }
 
 // Test that, on Mac, font fallback mechanisms and Harfbuzz configuration cause
@@ -5376,190 +5255,6 @@
                          ::testing::ValuesIn(kUnicodeDecomposeCases),
                          RenderTextTestWithFallbackFontCase::ParamInfoToString);
 
-// Ensures that RenderText is finding an appropriate font and that every
-// codepoint can be rendered by the font. An error here can be by an incorrect
-// ItemizeText(...) leading to an invalid fallback font.
-const FallbackFontCase kComplexTextCases[] = {
-    {"simple1", L"test"},
-    {"simple2", L"اختبار"},
-    {"simple3", L"Δοκιμή"},
-    {"simple4", L"परीक्षा"},
-    {"simple5", L"تست"},
-    {"simple6", L"Փորձարկում"},
-    {"mixed1", L"www.اختبار.com"},
-    {"mixed2", L"(اختبار)"},
-    {"mixed3", L"/ זה (מבחן) /"},
-#if defined(OS_WIN)
-    {"asc_arb", L"abcښڛڜdef"},
-    {"devanagari", L"ञटठडढणतथ"},
-    {"ethiopic", L"መጩጪᎅⶹⶼ"},
-    {"greek", L"ξοπρς"},
-    {"kannada", L"ಠಡಢಣತಥ"},
-    {"lao", L"ປຝພຟມ"},
-    {"oriya", L"ଔକଖଗଘଙ"},
-    {"telugu_lat", L"aaఉయ!"},
-    {"common_math", L"ℳ: ¬ƒ(x)=½×¾"},
-    {"picto_title", L"☞☛test☚☜"},
-    {"common_numbers", L"𝟭𝟐⒓¹²"},
-    {"common_puncts", L",.!"},
-    {"common_space_math1", L" 𝓐"},
-    {"common_space_math2", L" 𝓉"},
-    {"common_split_spaces", L"♬  𝓐"},
-    {"common_mixed", L"\U0001d4c9\u24d4\U0001d42c"},
-    {"arrows", L"↰↱↲↳↴↵⇚⇛⇜⇝⇞⇟"},
-    {"arrows_space", L"↰ ↱ ↲ ↳ ↴ ↵ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟"},
-    {"emoji_title", L"▶Feel goods"},
-    {"enclosed_alpha", L"ⒶⒷⒸⒹⒺⒻⒼ"},
-    {"shapes", L" ▶▷▸▹►▻◀◁◂◃◄◅"},
-    {"symbols", L"☂☎☏☝☫☬☭☮☯"},
-    {"symbols_space", L"☂ ☎ ☏ ☝ ☫ ☬ ☭ ☮ ☯"},
-    {"dingbats", L"✂✃✄✆✇✈"},
-    {"cjk_compatibility_ideographs", L"賈滑串句龜"},
-    {"lat_dev_ZWNJ", L"a\u200Cक"},
-    {"paren_picto", L"(☾☹☽)"},
-    {"emoji1", L"This is 💩!"},
-    {"emoji2", L"Look [🔝]"},
-    {"strange1", L"💔♬  𝓐 𝓉ⓔ𝐬т FỖ𝕣 c卄尺𝕆ᵐ€  ♘👹"},
-    {"strange2", L"˜”*°•.˜”*°• A test for chrome •°*”˜.•°*”˜"},
-    {"strange3", L"𝐭єⓢт fσ𝐑 𝔠ʰ𝕣ό𝐌𝔢"},
-    {"strange4", L"тẸⓈ𝔱 𝔽𝕠ᖇ 𝕔𝐡ŕ𝔬ⓜẸ"},
-    {"url1", L"http://www.google.com"},
-    {"url2", L"http://www.nowhere.com/Lörick.html"},
-    {"url3", L"http://www.nowhere.com/تسجيل الدخول"},
-    {"url4", L"https://xyz.com:8080/تس(1)جيل الدخول"},
-    {"url5", L"http://www.script.com/test.php?abc=42&cde=12&f=%20%20"},
-    {"punct1", L"This‐is‑a‒test–for—punctuations"},
-    {"punct2", L"⁅All ‷magic‴ comes with a ‶price″⁆"},
-    {"punct3", L"⍟ Complete my sentence… †"},
-    {"parens", L"❝This❞ 「test」 has ((a)) 【lot】 [{of}] 〚parentheses〛"},
-    {"games", L"Let play: ♗♘⚀⚁♠♣"},
-    {"braille", L"⠞⠑⠎⠞ ⠋⠕⠗ ⠉⠓⠗⠕⠍⠑"},
-    {"emoticon1", L"¯\\_(ツ)_/¯"},
-    {"emoticon2", L"٩(⁎❛ᴗ❛⁎)۶"},
-    {"emoticon3", L"(͡° ͜ʖ ͡°)"},
-    {"emoticon4", L"[̲̅$̲̅(̲̅5̲̅)̲̅$̲̅]"},
-#endif
-};
-
-INSTANTIATE_TEST_SUITE_P(FallbackFontComplexTextCases,
-                         RenderTextTestWithFallbackFontCase,
-                         ::testing::ValuesIn(kComplexTextCases),
-                         RenderTextTestWithFallbackFontCase::ParamInfoToString);
-
-// Test cases to ensures the COMMON unicode script is split by unicode code
-// block. These tests work on Windows and Mac default fonts installation.
-// On other platforms, the fonts are mock (see test_fonts).
-const FallbackFontCase kCommonScriptCases[] = {
-#if defined(OS_WIN)
-    // The following tests are made to work on win7 and win10.
-    {"common00", L"\u237b\u2ac1\u24f5\u259f\u2a87\u23ea\u25d4\u2220"},
-    {"common01", L"\u2303\u2074\u2988\u32b6\u26a2\u24e5\u2a53\u2219"},
-    {"common02", L"\u29b2\u25fc\u2366\u24ae\u2647\u258e\u2654\u25fe"},
-    {"common03", L"\u21ea\u22b4\u29b0\u2a84\u0008\u2657\u2731\u2697"},
-    {"common04", L"\u2b3c\u2932\u21c8\u23cf\u20a1\u2aa2\u2344\u0011"},
-    {"common05", L"\u22c3\u2a56\u2340\u21b7\u26ba\u2798\u220f\u2404"},
-    {"common06", L"\u21f9\u25fd\u008e\u21e6\u2686\u21e4\u259f\u29ee"},
-    {"common07", L"\u231e\ufe39\u0008\u2349\u2262\u2270\uff09\u2b3b"},
-    {"common08", L"\u24a3\u236e\u29b2\u2259\u26ea\u2705\u00ae\u2a23"},
-    {"common09", L"\u33bd\u235e\u2018\u32ba\u2973\u02c1\u20b9\u25b4"},
-    {"common10", L"\u2245\u2a4d\uff19\u2042\u2aa9\u2658\u276e\uff40"},
-    {"common11", L"\u0007\u21b4\u23c9\u2593\u21ba\u00a0\u258f\u23b3"},
-    {"common12", L"\u2938\u250c\u2240\u2676\u2297\u2b07\u237e\u2a04"},
-    {"common13", L"\u2520\u233a\u20a5\u2744\u2445\u268a\u2716\ufe62"},
-    {"common14", L"\ufe4d\u25d5\u2ae1\u2a35\u2323\u273c\u26be\u2a3b"},
-    {"common15", L"\u2aa2\u0000\ufe65\u2962\u2573\u21f8\u2651\u02d2"},
-    {"common16", L"\u225c\u2283\u2960\u4de7\uff12\uffe1\u0016\u2905"},
-    {"common17", L"\uff07\u25aa\u2076\u259e\u226c\u2568\u0026\u2691"},
-    {"common18", L"\u2388\u21c2\u208d\u2a7f\u22d0\u2583\u2ad5\u240f"},
-    {"common19", L"\u230a\u27ac\u001e\u261e\u259d\u25c3\u33a5\u0011"},
-    {"common20", L"\ufe54\u29c7\u2477\u21ed\u2069\u4dfc\u2ae2\u21e8"},
-    {"common21", L"\u2131\u2ab7\u23b9\u2660\u2083\u24c7\u228d\u2a01"},
-    {"common22", L"\u2587\u2572\u21df\uff3c\u02cd\ufffd\u2404\u22b3"},
-    {"common23", L"\u4dc3\u02fe\uff09\u25a3\ufe14\u255c\u2128\u2698"},
-    {"common24", L"\u2b36\u3382\u02f6\u2752\uff16\u22cf\u00b0\u21d6"},
-    {"common25", L"\u2561\u23db\u2958\u2782\u22af\u2621\u24a3\u29ae"},
-    {"common26", L"\u2693\u22e2\u2988\u2987\u33ba\u2a94\u298e\u2328"},
-    {"common27", L"\u266c\u2aa5\u2405\uffeb\uff5c\u2902\u291e\u02e6"},
-    {"common28", L"\u2634\u32b2\u3385\u2032\u33be\u2366\u2ac7\u23cf"},
-    {"common29", L"\u2981\ua721\u25a9\u2320\u21cf\u295a\u2273\u2ac2"},
-    {"common30", L"\u22d9\u2465\u2347\u2a94\u4dca\u2389\u23b0\u208d"},
-    {"common31", L"\u21cc\u2af8\u2912\u23a4\u2271\u2303\u241e\u33a1"},
-#elif defined(OS_ANDROID)
-    {"common00", L"\u2497\uff04\u277c\u21b6\u2076\u21e4\u2068\u21b3"},
-    {"common01", L"\u2663\u2466\u338e\u226b\u2734\u21be\u3389\u00ab"},
-    {"common02", L"\u2062\u2197\u3392\u2681\u33be\u206d\ufe10\ufe34"},
-    {"common03", L"\u02db\u00b0\u02d3\u2745\u33d1\u21e4\u24e4\u33d6"},
-    {"common04", L"\u21da\u261f\u26a1\u2586\u27af\u2560\u21cd\u25c6"},
-    {"common05", L"\ufe51\uff17\u0027\u21fd\u24de\uff5e\u2606\u251f"},
-    {"common06", L"\u2493\u2466\u21fc\u226f\u202d\u21a9\u0040\u265d"},
-    {"common07", L"\u2103\u255a\u2153\u26be\u27ac\u222e\u2490\u21a4"},
-    {"common08", L"\u270b\u2486\u246b\u263c\u27b6\u21d9\u219d\u25a9"},
-    {"common09", L"\u002d\u2494\u25fd\u2321\u2111\u2511\u00d7\u2535"},
-    {"common10", L"\u2523\u203e\u25b2\ufe18\u2499\u2229\ufd3e\ufe16"},
-    {"common11", L"\u2133\u2716\u273f\u2064\u2248\u005c\u265f\u21e6"},
-    {"common12", L"\u2060\u246a\u231b\u2726\u25bd\ufe40\u002e\u25ca"},
-    {"common13", L"\ufe39\u24a2\ufe18\u254b\u249c\u3396\ua71f\u2466"},
-    {"common14", L"\u21b8\u2236\u251a\uff11\u2077\u0035\u27bd\u2013"},
-    {"common15", L"\u2668\u2551\u221a\u02bc\u2741\u2649\u2192\u00a1"},
-    {"common16", L"\u2211\u21ca\u24dc\u2536\u201b\u21c8\u2530\u25fb"},
-    {"common17", L"\u231a\u33d8\u2934\u27bb\u2109\u23ec\u20a9\u3000"},
-    {"common18", L"\u2069\u205f\u33d3\u2466\u24a1\u24dd\u21ac\u21e3"},
-    {"common19", L"\u2737\u219a\u21f1\u2285\u226a\u00b0\u27b2\u2746"},
-    {"common20", L"\u264f\u2539\u2202\u264e\u2548\u2530\u2111\u2007"},
-    {"common21", L"\u2799\u0035\u25e4\u265b\u24e2\u2044\u222b\u0021"},
-    {"common22", L"\u2728\u00a2\u2533\ufe43\u33c9\u27a2\u02f9\u005d"},
-    {"common23", L"\ufe68\u256c\u25b6\u276c\u2771\u33c4\u2712\u24b3"},
-    {"common24", L"\ufe5d\ufe31\ufe3d\u205e\u2512\u33b8\u272b\ufe4f"},
-    {"common25", L"\u24e7\u25fc\u2582\u2743\u2010\u2474\u2262\u251a"},
-    {"common26", L"\u2020\u211c\u24b4\u33c7\u2007\uff0f\u267f\u00b4"},
-    {"common27", L"\u266c\u3399\u2570\u33a4\u276e\u00a8\u2506\u24dc"},
-    {"common28", L"\u2202\ufe43\u2511\u2191\u339a\u33b0\u02d7\u2473"},
-    {"common29", L"\u2517\u2297\u2762\u2460\u25bd\u24a9\u21a7\ufe64"},
-    {"common30", L"\u2105\u2722\u275d\u249c\u21a2\u2590\u2260\uff5d"},
-    {"common31", L"\u33ba\u21c6\u2706\u02cb\ufe64\u02e6\u0374\u2493"},
-#else
-    // The following tests are made for the mock fonts (see test_fonts).
-    {"common00", L"\u2153\u24e0\u2109\u02f0\u2a8f\u25ed\u02c5\u2716"},
-    {"common01", L"\u02f0\u208c\u2203\u2518\u2067\u2270\u21f1\ufe66"},
-    {"common02", L"\u2686\u2585\u2b15\u246f\u23e3\u21b4\u2394\ufe31"},
-    {"common03", L"\u23c1\u2a97\u201e\u2200\u3389\u25d3\u02c2\u259d"},
-    {"common04", L"\u2075\u4dec\u252a\uff15\u4df6\u2668\u27fa\ufe17"},
-    {"common05", L"\u260b\u2049\u3036\u2a85\u2b15\u23c7\u230a\u2374"},
-    {"common06", L"\u2771\u27fa\u255d\uff0b\u2213\u3396\u2a85\u2276"},
-    {"common07", L"\u211e\u2b06\u2255\u2727\u26c3\u33cf\u267d\u2ab2"},
-    {"common08", L"\u2373\u20b3\u22b8\u2a0f\u02fd\u2585\u3036\ufe48"},
-    {"common09", L"\u256d\u2940\u21d8\u4dde\u23a1\u226b\u3374\u2a99"},
-    {"common10", L"\u270f\u24e5\u26c1\u2131\u21f5\u25af\u230f\u27fe"},
-    {"common11", L"\u27aa\u23a2\u02ef\u2373\u2257\u2749\u2496\ufe31"},
-    {"common12", L"\u230a\u25fb\u2117\u3386\u32cc\u21c5\u24c4\u207e"},
-    {"common13", L"\u2467\u2791\u3393\u33bb\u02ca\u25de\ua788\u278f"},
-    {"common14", L"\ua719\u25ed\u20a8\u20a1\u4dd8\u2295\u24eb\u02c8"},
-    {"common15", L"\u22b6\u2520\u2036\uffee\u21df\u002d\u277a\u2b24"},
-    {"common16", L"\u21f8\u211b\u22a0\u25b6\u263e\u2704\u221a\u2758"},
-    {"common17", L"\ufe10\u2060\u24ac\u3385\u27a1\u2059\u2689\u2278"},
-    {"common18", L"\u269b\u211b\u33a4\ufe36\u239e\u267f\u2423\u24a2"},
-    {"common19", L"\u4ded\u262d\u225e\u248b\u21df\u279d\u2518\u21ba"},
-    {"common20", L"\u225a\uff16\u21d4\u21c6\u02ba\u2545\u23aa\u005e"},
-    {"common21", L"\u20a5\u265e\u3395\u2a6a\u2555\u22a4\u2086\u4dd4"},
-    {"common22", L"\u203f\u3250\u2240\u24e9\u21cb\u258f\u24b1\u3259"},
-    {"common23", L"\u27bd\u263b\uff1f\u2199\u2547\u258d\u201f\u2507"},
-    {"common24", L"\u2482\u2548\u02dc\u231f\u24cd\u2198\u220e\u20ad"},
-    {"common25", L"\u2ff7\u2540\ufe48\u2197\u276b\u2574\u2062\u3398"},
-    {"common26", L"\u2663\u21cd\u263f\u23e5\u22d7\u2518\u21b9\u2628"},
-    {"common27", L"\u21fa\ufe66\u2739\u2051\u21f4\u3399\u2599\u25f7"},
-    {"common28", L"\u29d3\u25ec\u27a6\u24e0\u2735\u25b4\u2737\u25db"},
-    {"common29", L"\u2622\u22e8\u33d2\u21d3\u2502\u2153\u2669\u25f2"},
-    {"common30", L"\u2121\u21af\u2729\u203c\u337a\u2464\u2b08\u2e24"},
-    {"common31", L"\u33cd\u007b\u02d2\u22cc\u32be\u2ffa\u2787\u02e9"},
-
-#endif
-};
-
-INSTANTIATE_TEST_SUITE_P(FallbackFontCommonScript,
-                         RenderTextTestWithFallbackFontCase,
-                         ::testing::ValuesIn(kCommonScriptCases),
-                         RenderTextTestWithFallbackFontCase::ParamInfoToString);
-
 #if defined(OS_WIN)
 // Ensures that locale is used for fonts selection.
 TEST_F(RenderTextTest, CJKFontWithLocale) {
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc
index 5c54b6c2..a118c81 100644
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc
@@ -10,32 +10,21 @@
 namespace ui {
 namespace {
 
-// TODO(dcastagna): Remove the following defines once they're in libdrm headers.
-#if !defined(DRM_ROTATE_0)
-#define BIT(n) (1 << (n))
-#define DRM_ROTATE_0 BIT(0)
-#define DRM_ROTATE_90 BIT(1)
-#define DRM_ROTATE_180 BIT(2)
-#define DRM_ROTATE_270 BIT(3)
-#define DRM_REFLECT_X BIT(4)
-#define DRM_REFLECT_Y BIT(5)
-#endif
-
 uint32_t OverlayTransformToDrmRotationPropertyValue(
     gfx::OverlayTransform transform) {
   switch (transform) {
     case gfx::OVERLAY_TRANSFORM_NONE:
-      return DRM_ROTATE_0;
+      return DRM_MODE_ROTATE_0;
     case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL:
-      return DRM_REFLECT_X;
+      return DRM_MODE_REFLECT_X | DRM_MODE_ROTATE_0;
     case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL:
-      return DRM_REFLECT_Y;
+      return DRM_MODE_REFLECT_Y | DRM_MODE_ROTATE_0;
     case gfx::OVERLAY_TRANSFORM_ROTATE_90:
-      return DRM_ROTATE_90;
+      return DRM_MODE_ROTATE_90;
     case gfx::OVERLAY_TRANSFORM_ROTATE_180:
-      return DRM_ROTATE_180;
+      return DRM_MODE_ROTATE_180;
     case gfx::OVERLAY_TRANSFORM_ROTATE_270:
-      return DRM_ROTATE_270;
+      return DRM_MODE_ROTATE_270;
     default:
       NOTREACHED();
   }
@@ -60,7 +49,7 @@
 HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t id)
     : HardwareDisplayPlane(id) {}
 
-HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() {}
+HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() = default;
 
 bool HardwareDisplayPlaneAtomic::Initialize(DrmDevice* drm) {
   if (!HardwareDisplayPlane::Initialize(drm))
diff --git a/ui/ozone/platform/x11/x11_canvas_surface.cc b/ui/ozone/platform/x11/x11_canvas_surface.cc
index e6edfb9..49afa733 100644
--- a/ui/ozone/platform/x11/x11_canvas_surface.cc
+++ b/ui/ozone/platform/x11/x11_canvas_surface.cc
@@ -26,20 +26,14 @@
 }
 
 void X11CanvasSurface::ResizeCanvas(const gfx::Size& viewport_size) {
-  if (viewport_pixel_size_ == viewport_size)
-    return;
-  viewport_pixel_size_ = viewport_size;
-
-  SkCanvas* sk_canvas = nullptr;
-  // If the software painter was able to resize the shm pool, use the sk_canvas
-  // it can create from the bitmap to create an SkSurface.
-  if (x11_software_bitmap_presenter_.Resize(viewport_size))
-    sk_canvas = x11_software_bitmap_presenter_.GetSkCanvas();
-  CreateSkSurface(sk_canvas);
+  x11_software_bitmap_presenter_.Resize(viewport_size);
+  SkImageInfo info = SkImageInfo::MakeN32(
+      viewport_size.width(), viewport_size.height(), kOpaque_SkAlphaType);
+  surface_ = x11_software_bitmap_presenter_.GetSkCanvas()->makeSurface(info);
 }
 
 void X11CanvasSurface::PresentCanvas(const gfx::Rect& damage) {
-  x11_software_bitmap_presenter_.EndPaint(surface_, damage);
+  x11_software_bitmap_presenter_.EndPaint(damage);
 }
 
 std::unique_ptr<gfx::VSyncProvider> X11CanvasSurface::CreateVSyncProvider() {
@@ -53,28 +47,11 @@
 }
 
 void X11CanvasSurface::OnSwapBuffers(SwapBuffersCallback swap_ack_callback) {
-  if (x11_software_bitmap_presenter_.ShmPoolReady()) {
-    x11_software_bitmap_presenter_.OnSwapBuffers(std::move(swap_ack_callback));
-  } else {
-    task_runner_->PostTask(
-        FROM_HERE,
-        base::BindOnce(std::move(swap_ack_callback), viewport_pixel_size_));
-  }
+  x11_software_bitmap_presenter_.OnSwapBuffers(std::move(swap_ack_callback));
 }
 
 int X11CanvasSurface::MaxFramesPending() const {
   return x11_software_bitmap_presenter_.MaxFramesPending();
 }
 
-void X11CanvasSurface::CreateSkSurface(SkCanvas* sk_canvas) {
-  SkImageInfo info =
-      SkImageInfo::MakeN32(viewport_pixel_size_.width(),
-                           viewport_pixel_size_.height(), kOpaque_SkAlphaType);
-  if (!sk_canvas) {
-    surface_ = SkSurface::MakeRaster(info);
-  } else {
-    surface_ = sk_canvas->makeSurface(info);
-  }
-}
-
 }  // namespace ui
diff --git a/ui/ozone/platform/x11/x11_canvas_surface.h b/ui/ozone/platform/x11/x11_canvas_surface.h
index cf58801..b6371f5c 100644
--- a/ui/ozone/platform/x11/x11_canvas_surface.h
+++ b/ui/ozone/platform/x11/x11_canvas_surface.h
@@ -38,13 +38,6 @@
   int MaxFramesPending() const override;
 
  private:
-  // Creates SkSurface associated to the |sk_canvas| if not nullptr. Otherwise,
-  // allocates raster SkSurface.
-  void CreateSkSurface(SkCanvas* sk_canvas);
-
-  // Current size of the software output device.
-  gfx::Size viewport_pixel_size_;
-
   // Current surface we paint to.
   sk_sp<SkSurface> surface_;
 
diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc
index 00971fc..95b35bef 100644
--- a/ui/views/win/hwnd_message_handler.cc
+++ b/ui/views/win/hwnd_message_handler.cc
@@ -471,8 +471,7 @@
   // to element B's window.
   // So we create the fragment root now to ensure it's ready if asked for.
   if (::switches::IsExperimentalAccessibilityPlatformUIAEnabled())
-    ax_fragment_root_ =
-        std::make_unique<ui::AXFragmentRootWin>(hwnd(), this, true);
+    ax_fragment_root_ = std::make_unique<ui::AXFragmentRootWin>(hwnd(), this);
 
   // Disable pen flicks (http://crbug.com/506977)
   base::win::DisableFlicks(hwnd());
diff --git a/weblayer/browser/browser_controller_impl.cc b/weblayer/browser/browser_controller_impl.cc
index d818a323..1cb0dfc 100644
--- a/weblayer/browser/browser_controller_impl.cc
+++ b/weblayer/browser/browser_controller_impl.cc
@@ -9,6 +9,7 @@
 #include "content/public/browser/file_select_listener.h"
 #include "content/public/browser/interstitial_page.h"
 #include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/render_frame_host.h"
 #include "content/public/browser/render_view_host.h"
 #include "content/public/browser/web_contents.h"
 #include "content/public/common/browser_controls_state.h"
@@ -178,9 +179,16 @@
 }
 
 void BrowserControllerImpl::ExecuteScript(const base::string16& script,
+                                          bool use_separate_isolate,
                                           JavaScriptResultCallback callback) {
-  web_contents_->GetMainFrame()->ExecuteJavaScriptInIsolatedWorld(
-      script, std::move(callback), ISOLATED_WORLD_ID_WEBLAYER);
+  if (use_separate_isolate) {
+    web_contents_->GetMainFrame()->ExecuteJavaScriptInIsolatedWorld(
+        script, std::move(callback), ISOLATED_WORLD_ID_WEBLAYER);
+  } else {
+    content::RenderFrameHost::AllowInjectingJavaScript();
+    web_contents_->GetMainFrame()->ExecuteJavaScript(script,
+                                                     std::move(callback));
+  }
 }
 
 #if !defined(OS_ANDROID)
@@ -223,9 +231,11 @@
 void BrowserControllerImpl::ExecuteScript(
     JNIEnv* env,
     const base::android::JavaParamRef<jstring>& script,
+    bool use_separate_isolate,
     const base::android::JavaParamRef<jobject>& callback) {
   base::android::ScopedJavaGlobalRef<jobject> jcallback(env, callback);
   ExecuteScript(base::android::ConvertJavaStringToUTF16(script),
+                use_separate_isolate,
                 base::BindOnce(&HandleJavaScriptResult, jcallback));
 }
 
diff --git a/weblayer/browser/browser_controller_impl.h b/weblayer/browser/browser_controller_impl.h
index 09761d18..728a6a3 100644
--- a/weblayer/browser/browser_controller_impl.h
+++ b/weblayer/browser/browser_controller_impl.h
@@ -68,6 +68,7 @@
       jlong native_top_controls_container_view);
   void ExecuteScript(JNIEnv* env,
                      const base::android::JavaParamRef<jstring>& script,
+                     bool use_separate_isolate,
                      const base::android::JavaParamRef<jobject>& callback);
 #endif
 
@@ -83,6 +84,7 @@
   void RemoveObserver(BrowserObserver* observer) override;
   NavigationController* GetNavigationController() override;
   void ExecuteScript(const base::string16& script,
+                     bool use_separate_isolate,
                      JavaScriptResultCallback callback) override;
 #if !defined(OS_ANDROID)
   void AttachToView(views::WebView* web_view) override;
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControllerImpl.java b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControllerImpl.java
index 585e289..6ef820a0 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/BrowserControllerImpl.java
+++ b/weblayer/browser/java/org/chromium/weblayer_private/BrowserControllerImpl.java
@@ -167,7 +167,7 @@
     }
 
     @Override
-    public void executeScript(String script, IObjectWrapper callback) {
+    public void executeScript(String script, boolean useSeparateIsolate, IObjectWrapper callback) {
         Callback<String> nativeCallback = new Callback<String>() {
             @Override
             public void onResult(String result) {
@@ -179,7 +179,7 @@
             }
         };
         BrowserControllerImplJni.get().executeScript(
-                mNativeBrowserController, script, nativeCallback);
+                mNativeBrowserController, script, useSeparateIsolate, nativeCallback);
     }
 
     public void destroy() {
@@ -222,7 +222,7 @@
                 BrowserControllerImpl caller, long nativeTopControlsContainerView);
         void deleteBrowserController(long browserController);
         WebContents getWebContents(long nativeBrowserControllerImpl, BrowserControllerImpl caller);
-        void executeScript(
-                long nativeBrowserControllerImpl, String script, Callback<String> callback);
+        void executeScript(long nativeBrowserControllerImpl, String script,
+                boolean useSeparateIsolate, Callback<String> callback);
     }
 }
diff --git a/weblayer/browser/java/org/chromium/weblayer_private/aidl/IBrowserController.aidl b/weblayer/browser/java/org/chromium/weblayer_private/aidl/IBrowserController.aidl
index a6eac0d..beed0c8 100644
--- a/weblayer/browser/java/org/chromium/weblayer_private/aidl/IBrowserController.aidl
+++ b/weblayer/browser/java/org/chromium/weblayer_private/aidl/IBrowserController.aidl
@@ -18,5 +18,5 @@
 
   void setFullscreenCallbackClient(in IFullscreenCallbackClient client) = 3;
 
-  void executeScript(in String script, in IObjectWrapper callback) = 4;
+  void executeScript(in String script, boolean useSeparateIsolate, in IObjectWrapper callback) = 4;
 }
diff --git a/weblayer/browser/webui/webui_browsertest.cc b/weblayer/browser/webui/webui_browsertest.cc
index ee26f57..28431fa 100644
--- a/weblayer/browser/webui/webui_browsertest.cc
+++ b/weblayer/browser/webui/webui_browsertest.cc
@@ -16,7 +16,8 @@
   base::RunLoop run_loop;
   bool result =
       ExecuteScript(shell(),
-                    "document.getElementById('remote-debug-label').hidden")
+                    "document.getElementById('remote-debug-label').hidden",
+                    true /* use_separate_isolate */)
           .GetBool();
   // The remote debug checkbox should only be visible on Android.
 #if defined(OS_ANDROID)
diff --git a/weblayer/public/browser_controller.h b/weblayer/public/browser_controller.h
index 20d7366..bee293a 100644
--- a/weblayer/public/browser_controller.h
+++ b/weblayer/public/browser_controller.h
@@ -58,7 +58,16 @@
   virtual NavigationController* GetNavigationController() = 0;
 
   using JavaScriptResultCallback = base::OnceCallback<void(base::Value)>;
+
+  // Executes the script, and returns the result to the callback if provided. If
+  // |use_separate_isolate| is true, runs the script in a separate v8 Isolate.
+  // This uses more memory, but separates the injected scrips from scripts in
+  // the page. This prevents any potentially malicious interaction between
+  // first-party scripts in the page, and injected scripts. Use with caution,
+  // only pass false for this argument if you know this isn't an issue or you
+  // need to interact with first-party scripts.
   virtual void ExecuteScript(const base::string16& script,
+                             bool use_separate_isolate,
                              JavaScriptResultCallback callback) = 0;
 
 #if !defined(OS_ANDROID)
diff --git a/weblayer/public/java/org/chromium/weblayer/BrowserController.java b/weblayer/public/java/org/chromium/weblayer/BrowserController.java
index 17aacd0..8047247 100644
--- a/weblayer/public/java/org/chromium/weblayer/BrowserController.java
+++ b/weblayer/public/java/org/chromium/weblayer/BrowserController.java
@@ -84,12 +84,17 @@
     }
 
     /**
-     * Executes the script in an isolated world, and returns the result as a JSON object to the
-     * callback if provided. The object passed to the callback will have a single key
-     * SCRIPT_RESULT_KEY which will hold the result of running the script.
+     * Executes the script, and returns the result as a JSON object to the callback if provided. The
+     * object passed to the callback will have a single key SCRIPT_RESULT_KEY which will hold the
+     * result of running the script.
+     * @param useSeparateIsolate If true, runs the script in a separate v8 Isolate. This uses more
+     * memory, but separates the injected scrips from scripts in the page. This prevents any
+     * potentially malicious interaction between first-party scripts in the page, and injected
+     * scripts. Use with caution, only pass false for this argument if you know this isn't an issue
+     * or you need to interact with first-party scripts.
      */
-    public void executeScript(
-            @NonNull String script, @Nullable ValueCallback<JSONObject> callback) {
+    public void executeScript(@NonNull String script, boolean useSeparateIsolate,
+            @Nullable ValueCallback<JSONObject> callback) {
         ThreadCheck.ensureOnUiThread();
         try {
             ValueCallback<String> stringCallback = (String result) -> {
@@ -105,7 +110,7 @@
                     throw new RuntimeException(e);
                 }
             };
-            mImpl.executeScript(script, ObjectWrapper.wrap(stringCallback));
+            mImpl.executeScript(script, useSeparateIsolate, ObjectWrapper.wrap(stringCallback));
         } catch (RemoteException e) {
             throw new APICallException(e);
         }
diff --git a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/ExecuteScriptTest.java b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/ExecuteScriptTest.java
index fe552ec..21440c70 100644
--- a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/ExecuteScriptTest.java
+++ b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/ExecuteScriptTest.java
@@ -34,7 +34,8 @@
     @SmallTest
     public void testBasicScript() throws Exception {
         InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
-        JSONObject result = mActivityTestRule.executeScriptSync("document.body.innerHTML");
+        JSONObject result = mActivityTestRule.executeScriptSync(
+                "document.body.innerHTML", true /* useSeparateIsolate */);
         Assert.assertEquals(result.getString(BrowserController.SCRIPT_RESULT_KEY), "foo");
     }
 
@@ -42,16 +43,27 @@
     @SmallTest
     public void testScriptIsolatedFromPage() throws Exception {
         InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
-        JSONObject result = mActivityTestRule.executeScriptSync("bar");
+        JSONObject result =
+                mActivityTestRule.executeScriptSync("bar", true /* useSeparateIsolate */);
         Assert.assertTrue(result.isNull(BrowserController.SCRIPT_RESULT_KEY));
     }
 
     @Test
     @SmallTest
+    public void testMainWorldScriptNotIsolatedFromPage() throws Exception {
+        InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
+        JSONObject result =
+                mActivityTestRule.executeScriptSync("bar", false /* useSeparateIsolate */);
+        Assert.assertEquals(result.getInt(BrowserController.SCRIPT_RESULT_KEY), 10);
+    }
+
+    @Test
+    @SmallTest
     public void testScriptNotIsolatedFromOtherScript() throws Exception {
         InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
-        mActivityTestRule.executeScriptSync("var foo = 20;");
-        JSONObject result = mActivityTestRule.executeScriptSync("foo");
+        mActivityTestRule.executeScriptSync("var foo = 20;", true /* useSeparateIsolate */);
+        JSONObject result =
+                mActivityTestRule.executeScriptSync("foo", true /* useSeparateIsolate */);
         Assert.assertEquals(result.getInt(BrowserController.SCRIPT_RESULT_KEY), 20);
     }
 
@@ -59,11 +71,12 @@
     @SmallTest
     public void testClearedOnNavigate() throws Exception {
         InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
-        mActivityTestRule.executeScriptSync("var foo = 20;");
+        mActivityTestRule.executeScriptSync("var foo = 20;", true /* useSeparateIsolate */);
 
         String newUrl = UrlUtils.encodeHtmlDataUri("<html></html>");
         mActivityTestRule.navigateAndWait(newUrl);
-        JSONObject result = mActivityTestRule.executeScriptSync("foo");
+        JSONObject result =
+                mActivityTestRule.executeScriptSync("foo", true /* useSeparateIsolate */);
         Assert.assertTrue(result.isNull(BrowserController.SCRIPT_RESULT_KEY));
     }
 
@@ -73,9 +86,10 @@
         InstrumentationActivity activity = mActivityTestRule.launchShellWithUrl(DATA_URL);
         TestThreadUtils.runOnUiThreadBlocking(() -> {
             // Null callback should not crash.
-            activity.getBrowserController().executeScript("null", null);
+            activity.getBrowserController().executeScript(
+                    "null", true /* useSeparateIsolate */, null);
         });
         // Execute a sync script to make sure the other script finishes.
-        mActivityTestRule.executeScriptSync("null");
+        mActivityTestRule.executeScriptSync("null", true /* useSeparateIsolate */);
     }
 }
diff --git a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
index 6f33f8d..0a1a6cc 100644
--- a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
+++ b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InputTypesTest.java
@@ -307,7 +307,8 @@
     public void testColorInput() {
         // Just make sure we don't crash when opening the color picker.
         mActivityTestRule.executeScriptSync("var done = false; document.onclick = function() {"
-                + "document.getElementById('input_color').click(); done = true;}");
+                        + "document.getElementById('input_color').click(); done = true;}",
+                true /* useSeparateIsolate */);
         EventUtils.simulateTouchCenterOfView(
                 mActivityTestRule.getActivity().getWindow().getDecorView());
         CriteriaHelper.pollInstrumentationThread(
@@ -318,7 +319,8 @@
         // We need to click the input after user input, otherwise it won't open due to security
         // policy.
         mActivityTestRule.executeScriptSync(
-                "document.onclick = function() {document.getElementById('" + id + "').click()}");
+                "document.onclick = function() {document.getElementById('" + id + "').click()}",
+                true /* useSeparateIsolate */);
         EventUtils.simulateTouchCenterOfView(
                 mActivityTestRule.getActivity().getWindow().getDecorView());
         mIntentInterceptor.waitForIntent();
diff --git a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
index 4e375e47..8f061a3 100644
--- a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
+++ b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/InstrumentationActivityTestRule.java
@@ -203,12 +203,12 @@
     /**
      * Executes the script passed in and waits for the result.
      */
-    public JSONObject executeScriptSync(String script) {
+    public JSONObject executeScriptSync(String script, boolean useSeparateIsolate) {
         JSONCallbackHelper callbackHelper = new JSONCallbackHelper();
         int count = callbackHelper.getCallCount();
         TestThreadUtils.runOnUiThreadBlocking(() -> {
-            getActivity().getBrowserController().executeScript(
-                    script, (JSONObject result) -> { callbackHelper.notifyCalled(result); });
+            getActivity().getBrowserController().executeScript(script, useSeparateIsolate,
+                    (JSONObject result) -> { callbackHelper.notifyCalled(result); });
         });
         try {
             callbackHelper.waitForCallback(count);
@@ -220,7 +220,8 @@
 
     public int executeScriptAndExtractInt(String script) {
         try {
-            return executeScriptSync(script).getInt(BrowserController.SCRIPT_RESULT_KEY);
+            return executeScriptSync(script, true /* useSeparateIsolate */)
+                    .getInt(BrowserController.SCRIPT_RESULT_KEY);
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
@@ -228,7 +229,8 @@
 
     public String executeScriptAndExtractString(String script) {
         try {
-            return executeScriptSync(script).getString(BrowserController.SCRIPT_RESULT_KEY);
+            return executeScriptSync(script, true /* useSeparateIsolate */)
+                    .getString(BrowserController.SCRIPT_RESULT_KEY);
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
@@ -236,7 +238,8 @@
 
     public boolean executeScriptAndExtractBoolean(String script) {
         try {
-            return executeScriptSync(script).getBoolean(BrowserController.SCRIPT_RESULT_KEY);
+            return executeScriptSync(script, true /* useSeparateIsolate */)
+                    .getBoolean(BrowserController.SCRIPT_RESULT_KEY);
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
diff --git a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
index 5946493..8f554ae 100644
--- a/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
+++ b/weblayer/shell/android/javatests/src/org/chromium/weblayer/test/NavigationTest.java
@@ -241,7 +241,8 @@
 
         int curCompletedCount = mCallback.onCompletedCallback.getCallCount();
 
-        mActivityTestRule.executeScriptSync("history.pushState(null, '', '#bar');");
+        mActivityTestRule.executeScriptSync(
+                "history.pushState(null, '', '#bar');", true /* useSeparateIsolate */);
 
         mCallback.onCompletedCallback.assertCalledWith(
                 curCompletedCount, "data:text,foo#bar", true);
diff --git a/weblayer/test/weblayer_browser_test_utils.cc b/weblayer/test/weblayer_browser_test_utils.cc
index 09244d2..56bbd359 100644
--- a/weblayer/test/weblayer_browser_test_utils.cc
+++ b/weblayer/test/weblayer_browser_test_utils.cc
@@ -98,11 +98,13 @@
       url, shell, TestNavigationObserver::NavigationEventToObserve::Failure);
 }
 
-base::Value ExecuteScript(Shell* shell, const std::string& script) {
+base::Value ExecuteScript(Shell* shell,
+                          const std::string& script,
+                          bool use_separate_isolate) {
   base::Value final_result;
   base::RunLoop run_loop;
   shell->browser_controller()->ExecuteScript(
-      base::ASCIIToUTF16(script),
+      base::ASCIIToUTF16(script), use_separate_isolate,
       base::BindLambdaForTesting(
           [&run_loop, &final_result](base::Value result) {
             final_result = std::move(result);
diff --git a/weblayer/test/weblayer_browser_test_utils.h b/weblayer/test/weblayer_browser_test_utils.h
index 4919d9e..b00fd3c 100644
--- a/weblayer/test/weblayer_browser_test_utils.h
+++ b/weblayer/test/weblayer_browser_test_utils.h
@@ -19,7 +19,9 @@
 void NavigateAndWaitForFailure(const GURL& url, Shell* shell);
 
 // Executes |script| in |shell| and returns the result.
-base::Value ExecuteScript(Shell* shell, const std::string& script);
+base::Value ExecuteScript(Shell* shell,
+                          const std::string& script,
+                          bool use_separate_isolate);
 
 }  // namespace weblayer